'
+ }
+ output = self.indent(input, 0)
+ for key, value in diff.items():
+ output = output.replace(key, value)
+ return output
+
+ def WriteToCSS(self, handle):
+ '''
+ Write the Cascading stylesheet template to the handle
+ It is expected that the handle is a Filehandle
+ '''
+ css = """
+ @CHARSET "ISO-8859-1";
+
+ body {
+ font-family: verdana;
+ font-size: small;
+ }
+
+ div.title {
+ font-size: large;
+ text-align: center;
+ }
+
+ h1 {
+ page-break-before: always;
+ }
+
+ h1, h2 {
+ background-color: #D3D3D3;
+ color:#404040;
+ margin-right: 3%;
+ padding-left: 40px;
+ }
+
+ h1:hover{
+ background-color: #EBEBEB;
+ }
+
+ h3 {
+ padding-left: 40px;
+ }
+
+ table {
+ border-width: 1px;
+ border-style: solid;
+ border-color: #000000;
+ border-collapse: collapse;
+ width: 94%;
+ margin: 20px 3% 10px;
+ }
+
+ caption {
+ margin-bottom: 5px;
+ }
+
+ th {
+ background-color: #000000;
+ color:#ffffff;
+ padding-left:5px;
+ padding-right:5px;
+ }
+
+ tr {
+ }
+
+ td {
+ border-width: 1px;
+ border-style: solid;
+ border-color: #a0a0a0;
+ padding-left:5px;
+ padding-right:5px;
+ }
+
+ label {
+ float:right;
+ margin-right: 3%;
+ }
+
+ ul.multicolumn {
+ list-style:none;
+ float:left;
+ padding-right:0px;
+ margin-right:0px;
+ }
+
+ li.multicolumn {
+ float:left;
+ width:200px;
+ margin-right:0px;
+ }
+
+ a {
+ color:#a000a0;
+ text-decoration:none;
+ }
+
+ a:hover {
+ color:#a000a0;
+ text-decoration:underline;
+ }
+ """
+
+ css = self.indent(css, 0)
+
+ handle.write(css)
+
+
+def usage():
+ print("\nUsage: \n\tblender2.5 -b -P BlendFileDnaExporter_25.py [-- [options]]")
+ print("Options:")
+ print("\t--dna-keep-blend: doesn't delete the produced blend file DNA export to html")
+ print("\t--dna-debug: sets the logging level to DEBUG (lots of additional info)")
+ print("\t--dna-versioned saves version informations in the html and blend filenames")
+ print("\t--dna-overwrite-css overwrite dna.css, useful when modifying css in the script")
+ print("Examples:")
+ print("\tdefault: % blender2.5 -b -P BlendFileDnaExporter_25.py")
+ print("\twith options: % blender2.5 -b -P BlendFileDnaExporter_25.py -- --dna-keep-blend --dna-debug\n")
+
+
+######################################################
+# Main
+######################################################
+
+def main():
+
+ import os, os.path
+
+ try:
+ bpy = __import__('bpy')
+
+ # Files
+ if '--dna-versioned' in sys.argv:
+ blender_version = '_'.join(map(str, bpy.app.version))
+ filename = 'dna-{0}-{1}_endian-{2}-r{3}'.format(sys.arch, sys.byteorder, blender_version, bpy.app.build_revision[2:-1])
+ else:
+ filename = 'dna'
+ dir = os.path.dirname(__file__)
+ Path_Blend = os.path.join(dir, filename + '.blend') # temporary blend file
+ Path_HTML = os.path.join(dir, filename + '.html') # output html file
+ Path_CSS = os.path.join(dir, 'dna.css') # output css file
+
+ # create a blend file for dna parsing
+ if not os.path.exists(Path_Blend):
+ log.info("1: write temp blend file with SDNA info")
+ log.info(" saving to: " + Path_Blend)
+ try:
+ bpy.ops.wm.save_as_mainfile(filepath = Path_Blend, copy = True, compress = False)
+ except:
+ log.error("Filename {0} does not exist and can't be created... quitting".format(Path_Blend))
+ return
+ else:
+ log.info("1: found blend file with SDNA info")
+ log.info(" " + Path_Blend)
+
+ # read blend header from blend file
+ log.info("2: read file:")
+
+ if not dir in sys.path:
+ sys.path.append(dir)
+ import BlendFileReader
+
+ handle = BlendFileReader.openBlendFile(Path_Blend)
+ blendfile = BlendFileReader.BlendFile(handle)
+ catalog = DNACatalogHTML(blendfile.Catalog, bpy)
+
+ # close temp file
+ handle.close()
+
+ # deleting or not?
+ if '--dna-keep-blend' in sys.argv:
+ # keep the blend, useful for studying hexdumps
+ log.info("5: closing blend file:")
+ log.info(" {0}".format(Path_Blend))
+ else:
+ # delete the blend
+ log.info("5: close and delete temp blend:")
+ log.info(" {0}".format(Path_Blend))
+ os.remove(Path_Blend)
+
+ # export dna to xhtml
+ log.info("6: export sdna to xhtml file")
+ handleHTML = open(Path_HTML, "w")
+ catalog.WriteToHTML(handleHTML)
+ handleHTML.close()
+
+ # only write the css when doesn't exist or at explicit request
+ if not os.path.exists(Path_CSS) or '--dna-overwrite-css' in sys.argv:
+ handleCSS = open(Path_CSS, "w")
+ catalog.WriteToCSS(handleCSS)
+ handleCSS.close()
+
+ # quit blender
+ if not bpy.app.background:
+ log.info("7: quit blender")
+ bpy.ops.wm.exit_blender()
+
+ except ImportError:
+ log.warning(" skipping, not running in Blender")
+ usage()
+ sys.exit(2)
+
+
+if __name__ == '__main__':
+ main()
diff --git a/doc/blender_file_format/BlendFileReader.py b/doc/blender_file_format/BlendFileReader.py
new file mode 100644
index 00000000000..7003af10ac7
--- /dev/null
+++ b/doc/blender_file_format/BlendFileReader.py
@@ -0,0 +1,446 @@
+#! /usr/bin/env python3
+
+# ***** BEGIN GPL LICENSE BLOCK *****
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# ***** END GPL LICENCE BLOCK *****
+
+######################################################
+# Importing modules
+######################################################
+
+import os
+import struct
+import gzip
+import tempfile
+
+import logging
+log = logging.getLogger("BlendFileReader")
+
+######################################################
+# module global routines
+######################################################
+
+def ReadString(handle, length):
+ '''
+ ReadString reads a String of given length or a zero terminating String
+ from a file handle
+ '''
+ if length != 0:
+ return handle.read(length).decode()
+ else:
+ # length == 0 means we want a zero terminating string
+ result = ""
+ s = ReadString(handle, 1)
+ while s!="\0":
+ result += s
+ s = ReadString(handle, 1)
+ return result
+
+
+def Read(type, handle, fileheader):
+ '''
+ Reads the chosen type from a file handle
+ '''
+ def unpacked_bytes(type_char, size):
+ return struct.unpack(fileheader.StructPre + type_char, handle.read(size))[0]
+
+ if type == 'ushort':
+ return unpacked_bytes("H", 2) # unsigned short
+ elif type == 'short':
+ return unpacked_bytes("h", 2) # short
+ elif type == 'uint':
+ return unpacked_bytes("I", 4) # unsigned int
+ elif type == 'int':
+ return unpacked_bytes("i", 4) # int
+ elif type == 'float':
+ return unpacked_bytes("f", 4) # float
+ elif type == 'ulong':
+ return unpacked_bytes("Q", 8) # unsigned long
+ elif type == 'pointer':
+ # The pointersize is given by the header (BlendFileHeader).
+ if fileheader.PointerSize == 4:
+ return Read('uint', handle, fileheader)
+ if fileheader.PointerSize == 8:
+ return Read('ulong', handle, fileheader)
+
+
+def openBlendFile(filename):
+ '''
+ Open a filename, determine if the file is compressed and returns a handle
+ '''
+ handle = open(filename, 'rb')
+ magic = ReadString(handle, 7)
+ if magic in ("BLENDER", "BULLETf"):
+ log.debug("normal blendfile detected")
+ handle.seek(0, os.SEEK_SET)
+ return handle
+ else:
+ log.debug("gzip blendfile detected?")
+ handle.close()
+ log.debug("decompressing started")
+ fs = gzip.open(filename, "rb")
+ handle = tempfile.TemporaryFile()
+ data = fs.read(1024*1024)
+ while data:
+ handle.write(data)
+ data = fs.read(1024*1024)
+ log.debug("decompressing finished")
+ fs.close()
+ log.debug("resetting decompressed file")
+ handle.seek(0, os.SEEK_SET)
+ return handle
+
+
+def Align(handle):
+ '''
+ Aligns the filehandle on 4 bytes
+ '''
+ offset = handle.tell()
+ trim = offset % 4
+ if trim != 0:
+ handle.seek(4-trim, os.SEEK_CUR)
+
+
+######################################################
+# module classes
+######################################################
+
+class BlendFile:
+ '''
+ Reads a blendfile and store the header, all the fileblocks, and catalogue
+ structs foound in the DNA fileblock
+
+ - BlendFile.Header (BlendFileHeader instance)
+ - BlendFile.Blocks (list of BlendFileBlock instances)
+ - BlendFile.Catalog (DNACatalog instance)
+ '''
+
+ def __init__(self, handle):
+ log.debug("initializing reading blend-file")
+ self.Header = BlendFileHeader(handle)
+ self.Blocks = []
+ fileblock = BlendFileBlock(handle, self)
+ found_dna_block = False
+ while not found_dna_block:
+ if fileblock.Header.Code in ("DNA1", "SDNA"):
+ self.Catalog = DNACatalog(self.Header, handle)
+ found_dna_block = True
+ else:
+ fileblock.Header.skip(handle)
+
+ self.Blocks.append(fileblock)
+ fileblock = BlendFileBlock(handle, self)
+
+ # appending last fileblock, "ENDB"
+ self.Blocks.append(fileblock)
+
+ # seems unused?
+ """
+ def FindBlendFileBlocksWithCode(self, code):
+ #result = []
+ #for block in self.Blocks:
+ #if block.Header.Code.startswith(code) or block.Header.Code.endswith(code):
+ #result.append(block)
+ #return result
+ """
+
+
+class BlendFileHeader:
+ '''
+ BlendFileHeader allocates the first 12 bytes of a blend file.
+ It contains information about the hardware architecture.
+ Header example: BLENDER_v254
+
+ BlendFileHeader.Magic (str)
+ BlendFileHeader.PointerSize (int)
+ BlendFileHeader.LittleEndianness (bool)
+ BlendFileHeader.StructPre (str) see http://docs.python.org/py3k/library/struct.html#byte-order-size-and-alignment
+ BlendFileHeader.Version (int)
+ '''
+
+ def __init__(self, handle):
+ log.debug("reading blend-file-header")
+
+ self.Magic = ReadString(handle, 7)
+ log.debug(self.Magic)
+
+ pointersize = ReadString(handle, 1)
+ log.debug(pointersize)
+ if pointersize == "-":
+ self.PointerSize = 8
+ if pointersize == "_":
+ self.PointerSize = 4
+
+ endianness = ReadString(handle, 1)
+ log.debug(endianness)
+ if endianness == "v":
+ self.LittleEndianness = True
+ self.StructPre = "<"
+ if endianness == "V":
+ self.LittleEndianness = False
+ self.StructPre = ">"
+
+ version = ReadString(handle, 3)
+ log.debug(version)
+ self.Version = int(version)
+
+ log.debug("{0} {1} {2} {3}".format(self.Magic, self.PointerSize, self.LittleEndianness, version))
+
+
+class BlendFileBlock:
+ '''
+ BlendFileBlock.File (BlendFile)
+ BlendFileBlock.Header (FileBlockHeader)
+ '''
+
+ def __init__(self, handle, blendfile):
+ self.File = blendfile
+ self.Header = FileBlockHeader(handle, blendfile.Header)
+
+ def Get(self, handle, path):
+ log.debug("find dna structure")
+ dnaIndex = self.Header.SDNAIndex
+ dnaStruct = self.File.Catalog.Structs[dnaIndex]
+ log.debug("found " + dnaStruct.Type.Name)
+ handle.seek(self.Header.FileOffset, os.SEEK_SET)
+ return dnaStruct.GetField(self.File.Header, handle, path)
+
+
+class FileBlockHeader:
+ '''
+ FileBlockHeader contains the information in a file-block-header.
+ The class is needed for searching to the correct file-block (containing Code: DNA1)
+
+ Code (str)
+ Size (int)
+ OldAddress (pointer)
+ SDNAIndex (int)
+ Count (int)
+ FileOffset (= file pointer of datablock)
+ '''
+
+ def __init__(self, handle, fileheader):
+ self.Code = ReadString(handle, 4).strip()
+ if self.Code != "ENDB":
+ self.Size = Read('uint', handle, fileheader)
+ self.OldAddress = Read('pointer', handle, fileheader)
+ self.SDNAIndex = Read('uint', handle, fileheader)
+ self.Count = Read('uint', handle, fileheader)
+ self.FileOffset = handle.tell()
+ else:
+ self.Size = Read('uint', handle, fileheader)
+ self.OldAddress = 0
+ self.SDNAIndex = 0
+ self.Count = 0
+ self.FileOffset = handle.tell()
+ #self.Code += ' ' * (4 - len(self.Code))
+ log.debug("found blend-file-block-fileheader {0} {1}".format(self.Code, self.FileOffset))
+
+ def skip(self, handle):
+ handle.read(self.Size)
+
+
+class DNACatalog:
+ '''
+ DNACatalog is a catalog of all information in the DNA1 file-block
+
+ Header = None
+ Names = None
+ Types = None
+ Structs = None
+ '''
+
+ def __init__(self, fileheader, handle):
+ log.debug("building DNA catalog")
+ self.Names=[]
+ self.Types=[]
+ self.Structs=[]
+ self.Header = fileheader
+
+ SDNA = ReadString(handle, 4)
+
+ # names
+ NAME = ReadString(handle, 4)
+ numberOfNames = Read('uint', handle, fileheader)
+ log.debug("building #{0} names".format(numberOfNames))
+ for i in range(numberOfNames):
+ name = ReadString(handle,0)
+ self.Names.append(DNAName(name))
+ Align(handle)
+
+ # types
+ TYPE = ReadString(handle, 4)
+ numberOfTypes = Read('uint', handle, fileheader)
+ log.debug("building #{0} types".format(numberOfTypes))
+ for i in range(numberOfTypes):
+ type = ReadString(handle,0)
+ self.Types.append(DNAType(type))
+ Align(handle)
+
+ # type lengths
+ TLEN = ReadString(handle, 4)
+ log.debug("building #{0} type-lengths".format(numberOfTypes))
+ for i in range(numberOfTypes):
+ length = Read('ushort', handle, fileheader)
+ self.Types[i].Size = length
+ Align(handle)
+
+ # structs
+ STRC = ReadString(handle, 4)
+ numberOfStructures = Read('uint', handle, fileheader)
+ log.debug("building #{0} structures".format(numberOfStructures))
+ for structureIndex in range(numberOfStructures):
+ type = Read('ushort', handle, fileheader)
+ Type = self.Types[type]
+ structure = DNAStructure(Type)
+ self.Structs.append(structure)
+
+ numberOfFields = Read('ushort', handle, fileheader)
+ for fieldIndex in range(numberOfFields):
+ fTypeIndex = Read('ushort', handle, fileheader)
+ fNameIndex = Read('ushort', handle, fileheader)
+ fType = self.Types[fTypeIndex]
+ fName = self.Names[fNameIndex]
+ structure.Fields.append(DNAField(fType, fName))
+
+
+class DNAName:
+ '''
+ DNAName is a C-type name stored in the DNA.
+
+ Name = str
+ '''
+
+ def __init__(self, name):
+ self.Name = name
+
+ def AsReference(self, parent):
+ if parent == None:
+ result = ""
+ else:
+ result = parent+"."
+
+ result = result + self.ShortName()
+ return result
+
+ def ShortName(self):
+ result = self.Name;
+ result = result.replace("*", "")
+ result = result.replace("(", "")
+ result = result.replace(")", "")
+ Index = result.find("[")
+ if Index != -1:
+ result = result[0:Index]
+ return result
+
+ def IsPointer(self):
+ return self.Name.find("*")>-1
+
+ def IsMethodPointer(self):
+ return self.Name.find("(*")>-1
+
+ def ArraySize(self):
+ result = 1
+ Temp = self.Name
+ Index = Temp.find("[")
+
+ while Index != -1:
+ Index2 = Temp.find("]")
+ result*=int(Temp[Index+1:Index2])
+ Temp = Temp[Index2+1:]
+ Index = Temp.find("[")
+
+ return result
+
+
+class DNAType:
+ '''
+ DNAType is a C-type stored in the DNA
+
+ Name = str
+ Size = int
+ Structure = DNAStructure
+ '''
+
+ def __init__(self, aName):
+ self.Name = aName
+ self.Structure=None
+
+
+class DNAStructure:
+ '''
+ DNAType is a C-type structure stored in the DNA
+
+ Type = DNAType
+ Fields = [DNAField]
+ '''
+
+ def __init__(self, aType):
+ self.Type = aType
+ self.Type.Structure = self
+ self.Fields=[]
+
+ def GetField(self, header, handle, path):
+ splitted = path.partition(".")
+ name = splitted[0]
+ rest = splitted[2]
+ offset = 0;
+ for field in self.Fields:
+ if field.Name.ShortName() == name:
+ log.debug("found "+name+"@"+str(offset))
+ handle.seek(offset, os.SEEK_CUR)
+ return field.DecodeField(header, handle, rest)
+ else:
+ offset += field.Size(header)
+
+ log.debug("error did not find "+path)
+ return None
+
+
+class DNAField:
+ '''
+ DNAField is a coupled DNAType and DNAName.
+
+ Type = DNAType
+ Name = DNAName
+ '''
+
+ def __init__(self, aType, aName):
+ self.Type = aType
+ self.Name = aName
+
+ def Size(self, header):
+ if self.Name.IsPointer() or self.Name.IsMethodPointer():
+ return header.PointerSize*self.Name.ArraySize()
+ else:
+ return self.Type.Size*self.Name.ArraySize()
+
+ def DecodeField(self, header, handle, path):
+ if path == "":
+ if self.Name.IsPointer():
+ return Read('pointer', handle, header)
+ if self.Type.Name=="int":
+ return Read('int', handle, header)
+ if self.Type.Name=="short":
+ return Read('short', handle, header)
+ if self.Type.Name=="float":
+ return Read('float', handle, header)
+ if self.Type.Name=="char":
+ return ReadString(handle, self.Name.ArraySize())
+ else:
+ return self.Type.Structure.GetField(header, handle, path)
+
diff --git a/doc/blender_file_format/README b/doc/blender_file_format/README
new file mode 100644
index 00000000000..55dc3b83e49
--- /dev/null
+++ b/doc/blender_file_format/README
@@ -0,0 +1,29 @@
+To inspect the blend-file-format used by a certain version of blender 2.5x,
+navigate to this folder and run this command:
+
+blender2.5 -b -P BlendFileDnaExporter_25.py
+
+where "blender2.5" is your blender executable or a symlink to it.
+
+This creates a temporary dna.blend to be inspected and it produces two new files:
+
+* dna.html: the list of all the structures saved in a blend file with the blender2.5
+ executable you have used. If you enable build informations when you build blender,
+ the dna.html file will also show which svn revision the html refers to.
+* dna.css: the css for the html above
+
+Below you have the help message with a list of options you can use.
+
+
+Usage:
+ blender2.5 -b -P BlendFileDnaExporter_25.py [-- [options]]
+Options:
+ --dna-keep-blend: doesn't delete the produced blend file DNA export to html
+ --dna-debug: sets the logging level to DEBUG (lots of additional info)
+ --dna-versioned saves version informations in the html and blend filenames
+ --dna-overwrite-css overwrite dna.css, useful when modifying css in the script
+Examples:
+ default: % blender2.5 -b -P BlendFileDnaExporter_25.py
+ with options: % blender2.5 -b -P BlendFileDnaExporter_25.py -- --dna-keep-blend --dna-debug
+
+
diff --git a/doc/blender_file_format/mystery_of_the_blend.css b/doc/blender_file_format/mystery_of_the_blend.css
new file mode 100644
index 00000000000..df287b54a06
--- /dev/null
+++ b/doc/blender_file_format/mystery_of_the_blend.css
@@ -0,0 +1,204 @@
+@CHARSET "ISO-8859-1";
+
+table {
+ border-width: 1px;
+ border-style: solid;
+ border-color: #000000;
+ border-collapse: collapse;
+ width: 94%;
+ margin: 10px 3%;
+}
+
+DIV.title {
+ font-size: 30px;
+ font-weight: bold;
+ text-align: center
+}
+
+DIV.subtitle {
+ font-size: large;
+ text-align: center
+}
+
+DIV.contact {
+ margin:30px 3%;
+}
+
+@media print {
+ DIV.contact {
+ margin-top: 300px;
+ }
+ DIV.title {
+ margin-top: 400px;
+ }
+}
+
+label {
+ font-weight: bold;
+ width: 100px;
+ float: left;
+}
+
+label:after {
+ content: ":";
+}
+
+TH {
+ background-color: #000000;
+ color: #ffffff;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+TR {
+}
+
+TD {
+ border-width: 1px;
+ border-style: solid;
+ border-color: #a0a0a0;
+ padding-left: 5px;
+ padding-right: 5px;
+}
+
+BODY {
+ font-family: verdana;
+ font-size: small;
+}
+
+H1 {
+ page-break-before: always;
+}
+
+H1, H2, H3, H4 {
+ margin-top: 30px;
+ margin-right: 3%;
+ padding: 3px 3%;
+ color: #404040;
+ cursor: pointer;
+}
+
+H1, H2 {
+ background-color: #D3D3D3;
+}
+
+H3, H4 {
+ padding-top: 5px;
+ padding-bottom: 5px;
+}
+
+H1:hover, H2:hover, H3:hover, H4:hover {
+ background-color: #EBEBEB;
+}
+
+CODE.evidence {
+ font-size:larger
+}
+
+CODE.block {
+ color: #000000;
+ background-color: #DDDC75;
+ margin: 10px 0;
+ padding: 5px;
+ border-width: 1px;
+ border-style: dotted;
+ border-color: #000000;
+ white-space: pre;
+ display: block;
+ font-size: 2 em;
+}
+
+ul {
+ margin: 10px 3%;
+}
+
+li {
+ margin: 0 -15px;
+}
+
+ul.multicolumn {
+ list-style: none;
+ float: left;
+ padding-right: 0px;
+ margin-right: 0px;
+}
+
+li.multicolumn {
+ float: left;
+ width: 200px;
+ margin-right: 0px;
+}
+
+@media screen {
+ p {
+ margin: 10px 3%;
+ line-height: 130%;
+ }
+}
+
+span.fade {
+ color: gray;
+}
+
+span.header {
+ color: green;
+}
+
+span.header-greyed {
+ color: #4CBE4B;
+}
+
+span.data {
+ color: blue;
+}
+
+span.data-greyed {
+ color: #5D99C4;
+}
+
+span.descr {
+ color: red;
+}
+
+div.box {
+ margin: 15px 3%;
+ border-style: dotted;
+ border-width: 1px;
+}
+
+div.box-solid {
+ margin: 15px 3%;
+ border-style: solid;
+ border-width: 1px;
+}
+
+p.box-title {
+ font-style: italic;
+ font-size: 110%;
+ cursor: pointer;
+}
+
+p.box-title:hover {
+ background-color: #EBEBEB;
+}
+
+p.code {
+ font-family: "Courier New", Courier, monospace;
+}
+
+a {
+ color: #a000a0;
+ text-decoration: none;
+}
+
+a:hover {
+ color: #a000a0;
+ text-decoration: underline;
+}
+
+td.skip {
+ color: #808080;
+ padding-top: 10px;
+ padding-bottom: 10px;
+ text-align: center;
+}
diff --git a/doc/blender_file_format/mystery_of_the_blend.html b/doc/blender_file_format/mystery_of_the_blend.html
new file mode 100644
index 00000000000..b34493ffa3e
--- /dev/null
+++ b/doc/blender_file_format/mystery_of_the_blend.html
@@ -0,0 +1,835 @@
+
+
+
+
+
+ The mystery of the blend
+
+
+
+The mystery of the blend
+The blender file-format explained
+
+
+Introduction
+
+
+In this article I will describe the
+ blend-file-format with a request to tool-makers to support blend-file.
+
+
+First I'll describe how Blender works with blend-files. You'll notice
+ why the blend-file-format is not that well documented, as from
+Blender's perspective this is not needed.
+We look at the global file-structure of a blend-file (the file-header
+and file-blocks).
+After this is explained, we go deeper to the core of the blend-file, the
+ DNA-structures. They hold the blue-prints of the blend-file and the key
+ asset of understanding blend-files.
+When that's done we can use these DNA-structures to read information
+from elsewhere in the blend-file.
+
+
+
+In this article we'll be using the default blend-file from Blender 2.54,
+ with the goal to read the output resolution from the Scene.
+The article is written to be programming language independent and I've
+setup a web-site for support.
+
+
+
+Loading and saving in Blender
+
+
+
+Loading and saving in Blender is very fast and Blender is known to
+have excellent downward and upward compatibility. Ton Roosendaal
+demonstrated that in December 2008 by loading a 1.0 blend-file using
+Blender 2.48a [ref: http://www.blendernation.com/2008/12/01/blender-dna-rna-and-backward-compatibility/ ].
+
+
+
+Saving complex scenes in Blender is done within seconds. Blender
+achieves this by saving data in memory to disk without any
+transformations or translations. Blender only adds file-block-headers to
+ this data. A file-block-header contains clues on how to interpret the
+data. After the data, all internally Blender structures are stored.
+These structures will act as blue-prints when Blender loads the file.
+Blend-files can be different when stored on different hardware platforms
+ or Blender releases. There is no effort taken to make blend-files
+binary the same. Blender creates the blend-files in this manner since
+release 1.0. Backward and upwards compatibility is not implemented when
+saving the file, this is done during loading.
+
+
+
+When Blender loads a blend-file, the DNA-structures are read first.
+Blender creates a catalog of these DNA-structures. Blender uses this
+catalog together with the data in the file, the internal Blender
+structures of the Blender release you're using and a lot of
+transformation and translation logic to implement the backward and
+upward compatibility. In the source code of blender there is actually
+logic which can transform and translate every structure used by a
+Blender release to the one of the release you're using [ref: http://download.blender.org/source/blender-2.48a.tar.gz
+ blender/blenloader/intern/readfile.c lines
+4946-7960]. The more difference between releases the more logic is
+executed.
+
+
+
+The blend-file-format is not well documented, as it does not differ from
+ internally used structures and the file can really explain itself.
+
+
+
+Global file-structure
+
+
+
+This section explains how the global file-structure can be read.
+
+
+
+A blend-file always start with the file-header
+After the file-header, follows a list of file-blocks (the default blend file of Blender 2.48 contains more than 400 of these file-blocks).
+Each file-block has a file-block header and file-block data
+At the end of the blend-file there is a section called "Structure DNA ", which lists all the internal structures of the Blender release the file was created in
+The blend-file ends with a file-block called 'ENDB'
+
+
+
+
+
+
File.blend
+
+
+
+
+
+
+
+
+
File-block 'Structure DNA'
+
+
+
Data ('SDNA')
+
+
+
+
+
+
+
+
+
+
+
+
+File-Header
+
+
+
+The first 12 bytes of every blend-file is the file-header. The
+file-header has information on Blender (version-number) and the PC the
+blend-file was saved on (pointer-size and endianness). This is required
+as all data inside the blend-file is ordered in that way, because no
+translation or transformation is done during saving.
+The next table describes the information in the file-header.
+
+
+
+File-header
+
+reference
+ structure
+ type
+ offset
+ size
+
+
+identifier
+ char[7]
+ File identifier (always 'BLENDER')
+ 0
+ 7
+pointer-size
+ char
+ Size of a pointer; all pointers in the file are stored in this format. '_' means 4 bytes or 32 bit and '-' means 8 bytes or 64 bits.
+ 7
+ 1
+endianness
+ char
+ Type of byte ordering used; 'v' means little endian and 'V' means big endian.
+ 8
+ 1
+version-number
+ char[3]
+ Version of Blender the file was created in; '254' means version 2.54
+ 9
+ 3
+
+
+
+
+Endianness addresses the way values are ordered in a sequence of bytes(see the example below):
+
+
+
+ in a big endian ordering, the largest part of the value is placed on the first byte and
+ the lowest part of the value is placed on the last byte,
+ in a little endian ordering, largest part of the value is placed on the last byte
+ and the smallest part of the value is placed on the first byte.
+
+
+
+Nowadays, little-endian is the most commonly used.
+
+
+
+
+
+Endianess Example
+
+
+Writing the integer 0x4A3B2C1Dh, will be ordered:
+
+in big endian as 0x4Ah, 0x3Bh, 0x2Ch, 0x1Dh
+in little endian as 0x1Dh, 0x2Ch, 0x3Bh, 0x4Ah
+
+
+
+
+
+Blender supports little-endian and big-endian.
+This means that when the endianness
+is different between the blend-file and the PC your using, Blender changes it to the byte ordering
+of your PC.
+
+
+
+
+
+File-header Example
+
+
+
+This hex-dump describes a file-header created with blender 2.54.0 on little-endian hardware with a 32 bits pointer length.
+ pointer-size version-number
+ | |
+0000 0000: [42 4C 45 4E 44 45 52] [5F] [76] [32 35 34] BLENDER_v254
+ | |
+ identifier endianness
+
+
+
+File-blocks
+
+
+File-blocks contain a "file-block header " and "file-block data".
+
+
+File-block headers
+
+
+The file-block-header describes:
+
+
+
+the type of information stored in the
+file-block
+the total length of the data
+the old memory
+pointer at the moment the data was written to disk
+the number of items of this information
+
+
+
+As we can see below, depending on the pointer-size stored in the file-header, a file-block-header
+can be 20 or 24 bytes long, hence it is always aligned at 4 bytes.
+
+
+
+File-block-header
+
+
+reference
+ structure
+ type
+ offset
+ size
+
+code
+ char[4]
+ File-block identifier
+ 0
+ 4
+size
+ integer
+ Total length of the data after the file-block-header
+ 4
+ 4
+old memory address
+ void*
+ Memory address the structure was located when written to disk
+ 8
+ pointer-size (4/8)
+SDNA index
+ integer
+ Index of the SDNA structure
+ 8+pointer-size
+ 4
+count
+ integer
+ Number of structure located in this file-block
+ 12+pointer-size
+ 4
+
+
+
+
+The above table describes how a file-block-header is structured:
+
+
+
+Code describes different types of file-blocks. The code determines with what logic the data must be read.
+These codes also allows fast finding of data like Library, Scenes, Object or Materials as they all have a specific code.
+Size contains the total length of data after the file-block-header.
+After the data a new file-block starts. The last file-block in the file
+has code 'ENDB'.
+Old memory address contains the memory address when the structure
+was last stored. When loading the file the structures can be placed on
+different memory addresses. Blender updates pointers to these structures
+ to the new memory addresses.
+SDNA index contains the index in the DNA structures to be used when
+reading this file-block-data.
+More information about this subject will be explained in the Reading scene information section .
+Count tells how many elements of the specific SDNA structure can be found in the data.
+
+
+
+
+
+Example
+
+
+This hex-dump describes a File-block (= + File-block data ) created with blender 2.54 on little-endian hardware with a 32 bits pointer length.
+ file-block
+ identifier='SC' data size=1404 old pointer SDNA index=150
+ | | | |
+0000 4420: SC.. `... ./.. ....
+0000 4430: [xx xx xx xx xx xx xx xx xx xx xx xx .... xxxx xxxx xxxx
+ | |
+ count=1 file-block data (next 1404 bytes)
+
+
+
+
+The code 'SC'+0x00h identifies that it is a Scene.
+Size of the data is 1404 bytes (0x0000057Ch = 0x7Ch + 0x05h * 256 = 124 + 1280)
+The old pointer is 0x0BFB3468h
+The SDNA index is 150 (0x00000096h = 6 + 9 * 16 = 6 + 144)
+The section contains a single scene (count = 1).
+
+
+
+Before we can interpret the data of this file-block we first have to read the DNA structures in the file.
+The section "Structure DNA " will show how to do that.
+
+
+
+Structure DNA
+
+The DNA1 file-block
+
+
+Structure DNA is stored in a file-block with code 'DNA1'. It can be just before the 'ENDB' file-block.
+
+
+
+The 'DNA1' file-block contains all internal structures of the Blender release the
+file was created in.
+These structure can be described as C-structures: they can hold fields, arrays and
+pointers to other structures, just like a normal C-structure.
+
+
+struct SceneRenderLayer {
+ struct SceneRenderLayer *next, *prev;
+ char name[32];
+ struct Material *mat_override;
+ struct Group *light_override;
+ unsigned int lay;
+ unsigned int lay_zmask;
+ int layflag;
+ int pad;
+ int passflag;
+ int pass_xor;
+};
+
+
+
+
+For example,a blend-file created with Blender 2.54 the 'DNA1' file-block is 57796 bytes long and contains 398 structures.
+
+
+DNA1 file-block-header
+
+
+The DNA1 file-block header follows the same rules of any other file-block, see the example below.
+
+
+
+
+
+Example
+
+
+This hex-dump describes the file-block 'DNA1' header created with blender 2.54.0 on little-endian hardware with a 32 bits pointer length.
+ (file-block
+ identifier='DNA1') data size=57796 old pointer SDNA index=0
+ | | | |
+0004 B060 DNA1............
+0004 B070 [53 44 4E 41 4E 41 4D 45 CB 0B 00 00 ....SDNANAME....
+ | |
+ count=1 'DNA1' file-block data (next 57796 bytes)
+
+
+
+
+DNA1 file-block data
+
+The next section describes how this information is ordered in the data of the 'DNA1' file-block.
+
+
+
+Structure of the DNA file-block-data
+
+ repeat condition
+ name
+ type
+ length
+ description
+
+
+
+
+ identifier
+ char[4]
+ 4
+ 'SDNA'
+
+
+ name identifier
+ char[4]
+ 4
+ 'NAME'
+
+
+ #names
+ integer
+ 4
+ Number of names follows
+for(#names)
+
+ name
+ char[]
+ ?
+ Zero terminating string of name, also contains pointer and simple array definitions (e.g. '*vertex[3]\0')
+
+
+ type identifier
+ char[4]
+ 4
+ 'TYPE' this field is aligned at 4 bytes
+
+
+ #types
+ integer
+ 4
+ Number of types follows
+for(#types)
+
+ type
+ char[]
+ ?
+ Zero terminating string of type (e.g. 'int\0')
+
+
+ length identifier
+ char[4]
+ 4
+ 'TLEN' this field is aligned at 4 bytes
+for(#types)
+
+ length
+ short
+ 2
+ Length in bytes of type (e.g. 4)
+
+
+ structure identifier
+ char[4]
+ 4
+ 'STRC' this field is aligned at 4 bytes
+
+
+ #structures
+ integer
+ 4
+ Number of structures follows
+for(#structures)
+
+ structure type
+ short
+ 2
+ Index in types containing the name of the structure
+..
+
+ #fields
+ short
+ 2
+ Number of fields in this structure
+..
+ for(#field)
+ field type
+ short
+ 2
+ Index in type
+for end
+ for end
+ field name
+ short
+ 2
+ Index in name
+
+
+
+
+As you can see, the structures are stored in 4 arrays: names, types,
+lengths and structures. Every structure also contains an array of
+fields. A field is the combination of a type and a name. From this
+information a catalog of all structures can be constructed.
+The names are stored as how a C-developer defines them. This means that
+the name also defines pointers and arrays.
+(When a name starts with '*' it is used as a pointer. when the name
+contains for example '[3]' it is used as a array of 3 long.)
+In the types you'll find simple-types (like: 'integer', 'char',
+'float'), but also complex-types like 'Scene' and 'MetaBall'.
+'TLEN' part describes the length of the types. A 'char' is 1 byte, an
+'integer' is 4 bytes and a 'Scene' is 1376 bytes long.
+
+
+
+
+Note
+
+
+All identifiers, are arrays of 4 chars, hence they are all aligned at 4 bytes.
+
+
+
+
+
+
+Example
+
+
+Created with blender 2.54.0 on little-endian hardware with a 32 bits pointer length.
+
+
+
The names array
+
+The first names are: *next, *prev, *data, *first, *last, x, y, xmin, xmax, ymin, ymax, *pointer, group, val, val2, type, subtype, flag, name[32], ...
+ file-block-data identifier='SDNA' array-id='NAME' number of names=3019
+ | | |
+0004 B070 01 00 00 00 [53 44 4E 41] [4E 41 4D 45] [CB 0B 00 00] ....SDNA NAME....
+0004 B080 [2A 6E 65 78 74 00][2A 70 72 65 76 00] [2A 64 61 74 *next.*prev.*dat
+ | | |
+ '*next\0' '*prev\0' '*dat'
+ ....
+ .... (3019 names)
+
+
+
+
+
+Note
+
+
+While reading the DNA you'll will come across some strange
+names like '(*doit)()'. These are method pointers and Blender updates
+them to the correct methods.
+
+
+
+
The types array
+
+The first types are: char, uchar, short, ushort, int, long, ulong, float, double, void, Link, LinkData, ListBase, vec2s, vec2f, ...
+ array-id='TYPE'
+ |
+0005 2440 6F 6C 64 5B 34 5D 5B 34 5D 00 00 00 [54 59 50 45] old[4][4]... TYPE
+0005 2450 [C9 01 00 00] [63 68 61 72 00] [75 63 68 61 72 00][73 ....char.uchar.s
+ | | | |
+ number of types=457 'char\0' 'uchar\0' 's'
+ ....
+ .... (457 types)
+
+
+
+
The lengths array
+
+ char uchar ushort short
+ array-id length length length length
+ 'TLEN' 1 1 2 2
+0005 3AA0 45 00 00 00 [54 4C 45 4E] [01 00] [01 00] [02 00] [02 00] E... TLEN........
+ ....
+0005 3AC0 [08 00] [04 00] [08 00] [10 00] [10 00] [14 00] [4C 00] [34 00] ............L.4.
+ 8 4 8
+ ListBase vec2s vec2f ... etc
+ length len length
+ ....
+ .... (457 lengths, same as number of types)
+
+
+
+
The structures array
+
+ array-id='STRC'
+ |
+0005 3E30 40 00 38 00 60 00 00 00 00 00 00 00 [53 54 52 43] @.8.`....... STRC
+0005 3E40 [8E 01 00 00] [0A 00] [02 00] [0A 00] [00 00] [0A 00] [01 00] ................
+ 398 10 2 10 0 10 0
+ number of index fields index index index index
+ structures in types in types in names in types in names
+ ' '----------------' '-----------------' '
+ ' field 0 field 1 '
+ '--------------------------------------------------------'
+ structure 0
+ ....
+ .... (398 structures, each one describeing own type, and type/name for each field)
+
+
+
+
+
+The DNA structures inside a Blender 2.48 blend-file can be found at http://www.atmind.nl/blender/blender-sdna.html .
+
+If we understand the DNA part of the file it is now possible to read
+information from other parts file-blocks. The next section will tell us
+how.
+
+
+Reading scene information
+
+
+Let us look at the file-block header we have seen earlier :
+
+
+the file-block identifier is 'SC'+0x00h
+the SDNA index is 150
+the file-block size is 1404 bytes
+
+
+Now note that:
+
+the structure at index 150 in the DNA is a structure of type 'Scene' (counting from 0).
+the associated type ('Scene') in the DNA has the length of 1404 bytes.
+
+
+
+
+We can map the Scene structure on the data of the file-blocks.
+But before we can do that, we have to flatten the Scene-structure.
+
+struct Scene {
+ ID id; // 52 bytes long (ID is different a structure)
+ AnimData *adt; // 4 bytes long (pointer to an AnimData structure)
+ Object *camera; // 4 bytes long (pointer to an Object structure)
+ World *world; // 4 bytes long (pointer to an Object structure)
+ ...
+ float cursor[3]; // 12 bytes long (array of 3 floats)
+ ...
+};
+
+
+The first field in the Scene-structure is of type 'ID' with the name 'id'.
+Inside the list of DNA structures there is a structure defined for type 'ID' (structure index 17).
+
+struct ID {
+ void *next, *prev;
+ struct ID *newid;
+ struct Library *lib;
+ char name[24];
+ short us;
+ short flag;
+ int icon_id;
+ IDProperty *properties;
+};
+
+
+The first field in this structure has type 'void' and name '*next'.
+Looking in the structure list there is no structure defined for type 'void': it is a simple type and therefore the data should be read.
+The name '*next' describes a pointer.
+As we see, the first 4 bytes of the data can be mapped to 'id.next'.
+
+
+
+Using this method we'll map a structure to its data. If we want to
+read a specific field we know at which offset in the data it is located
+and how much space it takes.
+The next table shows the output of this flattening process for some
+parts of the Scene-structure. Not all rows are described in the table as
+ there is a lot of information in a Scene-structure.
+
+
+
+Flattened SDNA structure 150: Scene
+
+reference
+ structure
+ type name
+ offset size
+ description
+
+
+id.next ID
+ void *next
+ 0
+ 4
+ Refers to the next scene
+id.prev ID
+ void *prev
+ 4
+ 4
+ Refers to the previous scene
+id.newid ID
+ ID *newid
+ 8
+ 4
+
+id.lib ID
+ Library *lib
+ 12
+ 4
+
+id.name ID
+ char name[24]
+ 16
+ 24
+ 'SC'+the name of the scene as displayed in Blender
+id.us ID
+ short us
+ 40
+ 2
+
+id.flag ID
+ short flag 42 2
+
+id.icon_id ID
+ int icon_id 44
+ 4
+
+id.properties ID
+ IDProperty *properties
+ 48
+ 4
+
+adt Scene AnimData
+ *adt
+ 52
+ 4
+
+camera Scene
+ Object
+ *camera
+ 56
+ 4
+ Pointer to the current camera
+world Scene
+ World
+ *world
+ 60
+ 4
+ Pointer to the current world
+
+Skipped rows
+
+r.xsch RenderData
+ short xsch 382 2
+ X-resolution of the output when rendered at 100%
+r.ysch RenderData
+ short ysch 384 2
+ Y-resolution of the output when rendered at 100%
+r.xparts RenderData
+ short xparts 386 2
+ Number of x-part used by the renderer
+r.yparts RenderData
+ short yparts 388 2
+ Number of x-part used by the renderer
+
+Skipped rows
+
+gpd Scene bGPdata *gpd 1376 4
+
+physics_settings.gravity PhysicsSettings
+ float gravity[3] 1380 12
+
+physics_settings.flag PhysicsSettings
+ int flag 1392 4
+
+physics_settings.quick_cache_step PhysicsSettings
+ int quick_cache_step 1396 4
+
+physics_settings.rt PhysicsSettings
+ int rt 1400 4
+
+
+
+
+
+We can now read the X and Y resolution of the Scene:
+
+the X-resolution is located on offset 382 of the file-block-data and must be read as a
+short.
+the Y-resolution is located on offset 384 and is also a short
+
+
+
+
+
+Note
+
+
+An array of chars can mean 2 things. The field contains readable
+text or it contains an array of flags (not humanly readable).
+
+
+
+
+
+Note
+
+
+A file-block containing a list refers to the DNA structure and has a count larger
+than 1. For example Vertexes and Faces are stored in this way.
+
+
+
+
+
+
diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py
index 41ea3405513..c026cea45bd 100644
--- a/doc/python_api/sphinx_doc_gen.py
+++ b/doc/python_api/sphinx_doc_gen.py
@@ -371,7 +371,7 @@ def rna2sphinx(BASEPATH):
fw(" These parts of the API are relatively stable and are unlikely to change significantly\n")
fw(" * data API, access to attributes of blender data such as mesh verts, material color, timeline frames and scene objects\n")
fw(" * user interface functions for defining buttons, creation of menus, headers, panels\n")
- fw(" * modules: bgl, mathutils and geometry\n")
+ fw(" * modules: bgl and mathutils\n")
fw(" * game engine modules\n")
fw("\n")
diff --git a/doc/python_api/sphinx_doc_gen.sh b/doc/python_api/sphinx_doc_gen.sh
index 49a2e4869d8..ae7fad58c23 100755
--- a/doc/python_api/sphinx_doc_gen.sh
+++ b/doc/python_api/sphinx_doc_gen.sh
@@ -15,7 +15,6 @@ blender_version=$(grep BLENDER_VERSION $blender_srcdir/source/blender/blenkernel
blender_subversion=$(grep BLENDER_SUBVERSION $blender_srcdir/source/blender/blenkernel/BKE_blender.h | tr -dc 0-9)
BLENDER_VERSION=$(expr $blender_version / 100)_$(expr $blender_version % 100)_$blender_subversion
-BLENDER_VERSION=`$BLENDER --version | cut -f2-4 -d" " | sed 's/(//g' | sed 's/)//g' | sed 's/ sub /./g' | sed 's/\./_/g'`
SSH_UPLOAD_FULL=$SSH_UPLOAD/"blender_python_api_"$BLENDER_VERSION
SPHINXBASE=doc/python_api/
diff --git a/intern/audaspace/CMakeLists.txt b/intern/audaspace/CMakeLists.txt
index 2dd4694d8a9..be39a7348aa 100644
--- a/intern/audaspace/CMakeLists.txt
+++ b/intern/audaspace/CMakeLists.txt
@@ -178,8 +178,7 @@ IF(WITH_PYTHON)
SET(PYTHONSRC
Python/AUD_PyAPI.cpp
)
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
SET(SRC ${SRC} ${FFMPEGSRC} ${SNDFILESRC} ${FFTW3SRC} ${SDLSRC} ${OPENALSRC} ${JACKSRC} ${PYTHONSRC})
diff --git a/intern/audaspace/SConscript b/intern/audaspace/SConscript
index 7230bffebdc..2c86849bc62 100644
--- a/intern/audaspace/SConscript
+++ b/intern/audaspace/SConscript
@@ -39,8 +39,7 @@ if env['WITH_BF_SNDFILE']:
if env['WITH_BF_PYTHON']:
sources += env.Glob('Python/*.cpp')
incs += ' Python ' + env['BF_PYTHON_INC']
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
diff --git a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
index 09fdb31e938..5526b0dcf5a 100644
--- a/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
+++ b/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
@@ -246,10 +246,8 @@ void AUD_FFMPEGReader::seek(int position)
{
if(position >= 0)
{
- uint64_t st_time = m_formatCtx->streams[m_stream]->start_time;
- double time_base =
- av_q2d(m_formatCtx->streams[m_stream]->time_base);
- uint64_t seek_pos = position / time_base / m_specs.rate;
+ uint64_t st_time = m_formatCtx->start_time;
+ uint64_t seek_pos = position * AV_TIME_BASE / m_specs.rate;
if (seek_pos < 0) {
seek_pos = 0;
@@ -259,9 +257,14 @@ void AUD_FFMPEGReader::seek(int position)
seek_pos += st_time;
}
+ double pts_time_base =
+ av_q2d(m_formatCtx->streams[m_stream]->time_base);
+ uint64_t pts_st_time =
+ ((st_time != AV_NOPTS_VALUE) ? st_time : 0)
+ / pts_time_base / (uint64_t) AV_TIME_BASE;
// a value < 0 tells us that seeking failed
- if(av_seek_frame(m_formatCtx, m_stream, seek_pos,
+ if(av_seek_frame(m_formatCtx, -1, seek_pos,
AVSEEK_FLAG_BACKWARD | AVSEEK_FLAG_ANY) >= 0)
{
avcodec_flush_buffers(m_codecCtx);
@@ -284,7 +287,7 @@ void AUD_FFMPEGReader::seek(int position)
{
// calculate real position, and read to frame!
m_position = (packet.pts -
- ((st_time != AV_NOPTS_VALUE) ? st_time : 0)) * time_base * m_specs.rate;
+ pts_st_time) * pts_time_base * m_specs.rate;
if(m_position < position)
{
@@ -307,6 +310,7 @@ void AUD_FFMPEGReader::seek(int position)
}
else
{
+ fprintf(stderr, "seeking failed!\n");
// Seeking failed, do nothing.
}
}
diff --git a/intern/audaspace/intern/AUD_C-API.cpp b/intern/audaspace/intern/AUD_C-API.cpp
index d22d9e6c434..5e4e45d4e1e 100644
--- a/intern/audaspace/intern/AUD_C-API.cpp
+++ b/intern/audaspace/intern/AUD_C-API.cpp
@@ -28,7 +28,7 @@
#define __STDC_CONSTANT_MACROS
#endif
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "AUD_PyInit.h"
#include "AUD_PyAPI.h"
@@ -141,7 +141,7 @@ int AUD_init(AUD_DeviceType device, AUD_DeviceSpecs specs, int buffersize)
AUD_device = dev;
AUD_3ddevice = dynamic_cast(AUD_device);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if(g_pyinitialized)
{
g_device = (Device*)Device_empty();
@@ -162,7 +162,7 @@ int AUD_init(AUD_DeviceType device, AUD_DeviceSpecs specs, int buffersize)
void AUD_exit()
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if(g_device)
{
Py_XDECREF(g_device);
@@ -176,7 +176,7 @@ void AUD_exit()
AUD_3ddevice = NULL;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
static PyObject* AUD_getCDevice(PyObject* self)
{
if(g_device)
@@ -197,7 +197,7 @@ PyObject* AUD_initPython()
{
PyObject* module = PyInit_aud();
PyModule_AddObject(module, "device", (PyObject *)PyCFunction_New(meth_getcdevice, NULL));
- PyDict_SetItemString(PySys_GetObject("modules"), "aud", module);
+ PyDict_SetItemString(PyImport_GetModuleDict(), "aud", module);
if(AUD_device)
{
g_device = (Device*)Device_empty();
@@ -241,6 +241,7 @@ AUD_SoundInfo AUD_getInfo(AUD_Sound* sound)
{
info.specs = reader->getSpecs();
info.length = reader->getLength() / (float) info.specs.rate;
+ delete reader;
}
}
catch(AUD_Exception&)
@@ -721,7 +722,7 @@ int AUD_setDeviceVolume(AUD_Device* device, float volume)
return true;
}
catch(AUD_Exception&) {}
-
+
return false;
}
@@ -781,10 +782,20 @@ float* AUD_readSoundBuffer(const char* filename, float low, float high,
AUD_Sound* sound;
AUD_FileFactory file(filename);
+
+ AUD_IReader* reader = file.createReader();
+ AUD_SampleRate rate = reader->getSpecs().rate;
+ delete reader;
+
AUD_ChannelMapperFactory mapper(&file, specs);
- AUD_LowpassFactory lowpass(&mapper, high);
- AUD_HighpassFactory highpass(&lowpass, low);
- AUD_EnvelopeFactory envelope(&highpass, attack, release, threshold, 0.1f);
+ sound = &mapper;
+ AUD_LowpassFactory lowpass(sound, high);
+ if(high < rate)
+ sound = &lowpass;
+ AUD_HighpassFactory highpass(sound, low);
+ if(low > 0)
+ sound = &highpass;
+ AUD_EnvelopeFactory envelope(sound, attack, release, threshold, 0.1f);
AUD_LinearResampleFactory resampler(&envelope, specs);
sound = &resampler;
AUD_SquareFactory squaref(sound, sthreshold);
@@ -797,7 +808,7 @@ float* AUD_readSoundBuffer(const char* filename, float low, float high,
else if(additive)
sound = ∑
- AUD_IReader* reader = sound->createReader();
+ reader = sound->createReader();
if(reader == NULL)
return NULL;
diff --git a/intern/audaspace/intern/AUD_PyInit.h b/intern/audaspace/intern/AUD_PyInit.h
index bd67259449a..0b80b3a9ae1 100644
--- a/intern/audaspace/intern/AUD_PyInit.h
+++ b/intern/audaspace/intern/AUD_PyInit.h
@@ -26,7 +26,7 @@
#ifndef AUD_PYINIT
#define AUD_PYINIT
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "Python.h"
#ifdef __cplusplus
diff --git a/intern/ghost/SConscript b/intern/ghost/SConscript
index c71402b352b..e6190c50577 100644
--- a/intern/ghost/SConscript
+++ b/intern/ghost/SConscript
@@ -21,6 +21,8 @@ if window_system in ('linux2', 'openbsd3', 'sunos5', 'freebsd7', 'freebsd8', 'fr
sources.remove('intern' + os.sep + f + 'Carbon.cpp')
except ValueError:
pass
+ defs += ['PREFIX=\\"/usr/local/\\"']
+
elif window_system in ('win32-vc', 'win32-mingw', 'cygwin', 'linuxcross', 'win64-vc'):
for f in pf:
try:
@@ -62,6 +64,6 @@ if window_system in ('win32-vc', 'win32-mingw', 'cygwin', 'linuxcross', 'win64-v
incs = env['BF_WINTAB_INC'] + ' ' + incs
if window_system in ('win32-vc', 'win64-vc'):
- env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15], cc_compileflags=['/WX'] )
+ env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15]) #, cc_compileflags=env['CCFLAGS'].append('/WX') )
else:
env.BlenderLib ('bf_intern_ghost', sources, Split(incs), defines=defs, libtype=['intern','player'], priority = [40,15] )
diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp
index 393761566ba..5f7c59fa5e6 100644
--- a/intern/ghost/intern/GHOST_SystemX11.cpp
+++ b/intern/ghost/intern/GHOST_SystemX11.cpp
@@ -68,7 +68,7 @@
#include // for exit
#ifndef PREFIX
-# define PREFIX "/usr/local"
+#error "PREFIX not defined"
#endif
typedef struct NDOFPlatformInfo {
diff --git a/intern/ghost/intern/Makefile b/intern/ghost/intern/Makefile
index 2f5e088f4fe..a251ce26b31 100644
--- a/intern/ghost/intern/Makefile
+++ b/intern/ghost/intern/Makefile
@@ -71,4 +71,4 @@ CPPFLAGS += -I..
CPPFLAGS += -I$(OPENGL_HEADERS)
CPPFLAGS += -I../../../source/blender/imbuf
CPPFLAGS += -I../../../source/blender/makesdna
-
+CPPFLAGS += -DPREFIX=\"$(BF_PREFIX)\"
diff --git a/intern/smoke/CMakeLists.txt b/intern/smoke/CMakeLists.txt
index 741301f04da..2cf51a0f7ec 100644
--- a/intern/smoke/CMakeLists.txt
+++ b/intern/smoke/CMakeLists.txt
@@ -27,7 +27,6 @@
SET(INC
intern
../memutil
- ../guardealloc
../../extern/bullet2/src
${PNG_INC}
${ZLIB_INC}
diff --git a/release/VERSION b/release/VERSION
index 6020b0f868b..104a379ad75 100644
--- a/release/VERSION
+++ b/release/VERSION
@@ -1 +1 @@
-2.54-beta
+2.55-beta
diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png
index 36ebb154ca9..faedd4b19f1 100644
Binary files a/release/datafiles/splash.png and b/release/datafiles/splash.png differ
diff --git a/release/scripts/io/netrender/__init__.py b/release/scripts/io/netrender/__init__.py
index b8c1fddc691..32480030363 100644
--- a/release/scripts/io/netrender/__init__.py
+++ b/release/scripts/io/netrender/__init__.py
@@ -30,6 +30,7 @@ if "init_data" in locals():
reload(balancing)
reload(ui)
reload(repath)
+ reload(versioning)
else:
from netrender import model
from netrender import operators
@@ -41,6 +42,7 @@ else:
from netrender import balancing
from netrender import ui
from netrender import repath
+ from netrender import versioning
jobs = []
slaves = []
diff --git a/release/scripts/io/netrender/client.py b/release/scripts/io/netrender/client.py
index 128ae99ab1d..c469c80264e 100644
--- a/release/scripts/io/netrender/client.py
+++ b/release/scripts/io/netrender/client.py
@@ -92,7 +92,82 @@ def addPointCache(job, ob, point_cache, default_path):
previous_frame = previous_item[0]
job.addFile(cache_path + current_file, previous_frame + 1, next_frame - 1)
+def fillCommonJobSettings(job, job_name, netsettings):
+ job.name = job_name
+ job.category = netsettings.job_category
+
+ for slave in netrender.blacklist:
+ job.blacklist.append(slave.id)
+
+ job.chunks = netsettings.chunks
+ job.priority = netsettings.priority
+
+ if netsettings.job_type == "JOB_BLENDER":
+ job.type = netrender.model.JOB_BLENDER
+ elif netsettings.job_type == "JOB_PROCESS":
+ job.type = netrender.model.JOB_PROCESS
+ elif netsettings.job_type == "JOB_VCS":
+ job.type = netrender.model.JOB_VCS
+
def clientSendJob(conn, scene, anim = False):
+ netsettings = scene.network_render
+ if netsettings.job_type == "JOB_BLENDER":
+ return clientSendJobBlender(conn, scene, anim)
+ elif netsettings.job_type == "JOB_VCS":
+ return clientSendJobVCS(conn, scene, anim)
+
+def clientSendJobVCS(conn, scene, anim = False):
+ netsettings = scene.network_render
+ job = netrender.model.RenderJob()
+
+ if anim:
+ for f in range(scene.frame_start, scene.frame_end + 1):
+ job.addFrame(f)
+ else:
+ job.addFrame(scene.frame_current)
+
+ filename = bpy.data.filepath
+
+ if not filename.startswith(netsettings.vcs_wpath):
+ # this is an error, need better way to handle this
+ return
+
+ filename = filename[len(netsettings.vcs_wpath):]
+
+ if filename[0] in (os.sep, os.altsep):
+ filename = filename[1:]
+
+ print("CREATING VCS JOB", filename)
+
+ job.addFile(filename, signed=False)
+
+ job_name = netsettings.job_name
+ path, name = os.path.split(filename)
+ if job_name == "[default]":
+ job_name = name
+
+
+ fillCommonJobSettings(job, job_name, netsettings)
+
+ # VCS Specific code
+ job.version_info = netrender.model.VersioningInfo()
+ job.version_info.system = netsettings.vcs_system
+ job.version_info.wpath = netsettings.vcs_wpath
+ job.version_info.rpath = netsettings.vcs_rpath
+ job.version_info.revision = netsettings.vcs_revision
+
+ # try to send path first
+ conn.request("POST", "/job", json.dumps(job.serialize()))
+ response = conn.getresponse()
+ response.read()
+
+ job_id = response.getheader("job-id")
+
+ # a VCS job is always good right now, need error handling
+
+ return job_id
+
+def clientSendJobBlender(conn, scene, anim = False):
netsettings = scene.network_render
job = netrender.model.RenderJob()
@@ -160,14 +235,7 @@ def clientSendJob(conn, scene, anim = False):
#print(job.files)
- job.name = job_name
- job.category = netsettings.job_category
-
- for slave in netrender.blacklist:
- job.blacklist.append(slave.id)
-
- job.chunks = netsettings.chunks
- job.priority = netsettings.priority
+ fillCommonJobSettings(job, job_name, netsettings)
# try to send path first
conn.request("POST", "/job", json.dumps(job.serialize()))
diff --git a/release/scripts/io/netrender/master.py b/release/scripts/io/netrender/master.py
index 11409bf372e..93f2baf4a36 100644
--- a/release/scripts/io/netrender/master.py
+++ b/release/scripts/io/netrender/master.py
@@ -35,7 +35,7 @@ class MRenderFile(netrender.model.RenderFile):
def test(self):
self.found = os.path.exists(self.filepath)
- if self.found:
+ if self.found and self.signature != None:
found_signature = hashFile(self.filepath)
self.found = self.signature == found_signature
@@ -105,9 +105,11 @@ class MRenderJob(netrender.model.RenderJob):
self.chunks = info_map["chunks"]
def testStart(self):
- for f in self.files:
- if not f.test():
- return False
+ # Don't test files for versionned jobs
+ if not self.version_info:
+ for f in self.files:
+ if not f.test():
+ return False
self.start()
self.initInfo()
@@ -769,7 +771,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
frame = job[job_frame]
if frame:
- if job.type == netrender.model.JOB_BLENDER:
+ if job.hasRenderResult():
if job_result == DONE:
length = int(self.headers['content-length'])
buf = self.rfile.read(length)
@@ -820,7 +822,7 @@ class RenderHandler(http.server.BaseHTTPRequestHandler):
frame = job[job_frame]
if frame:
- if job.type == netrender.model.JOB_BLENDER:
+ if job.hasRenderResult():
length = int(self.headers['content-length'])
buf = self.rfile.read(length)
f = open(os.path.join(job.save_path, "%06d.jpg" % job_frame), 'wb')
diff --git a/release/scripts/io/netrender/master_html.py b/release/scripts/io/netrender/master_html.py
index 74155f6bd66..0e14905a86b 100644
--- a/release/scripts/io/netrender/master_html.py
+++ b/release/scripts/io/netrender/master_html.py
@@ -20,6 +20,7 @@ import os
import re
import shutil
from netrender.utils import *
+import netrender.model
src_folder = os.path.split(__file__)[0]
@@ -115,6 +116,7 @@ def get(handler):
"id",
"name",
"category",
+ "type",
"chunks",
"priority",
"usage",
@@ -139,6 +141,7 @@ def get(handler):
job.id,
link(job.name, "/html/job" + job.id),
job.category if job.category else "None ",
+ netrender.model.JOB_TYPES[job.type],
str(job.chunks) +
"""+ """ % (job.id, job.chunks + 1) +
"""- """ % (job.id, job.chunks - 1, "disabled=True" if job.chunks == 1 else ""),
@@ -228,39 +231,52 @@ def get(handler):
endTable()
- output("Files ")
-
- startTable()
- headerTable("path")
-
- tot_cache = 0
- tot_fluid = 0
-
- rowTable(job.files[0].filepath)
- rowTable("Other Files", class_style = "toggle", extra = "onclick='toggleDisplay(".other", "none", "table-row")'")
-
- for file in job.files:
- if file.filepath.endswith(".bphys"):
- tot_cache += 1
- elif file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"):
- tot_fluid += 1
- else:
- if file != job.files[0]:
- rowTable(file.filepath, class_style = "other")
-
- if tot_cache > 0:
- rowTable("%i physic cache files" % tot_cache, class_style = "toggle", extra = "onclick='toggleDisplay(".cache", "none", "table-row")'")
+ if job.type == netrender.model.JOB_BLENDER:
+ output("Files ")
+
+ startTable()
+ headerTable("path")
+
+ tot_cache = 0
+ tot_fluid = 0
+
+ rowTable(job.files[0].filepath)
+ rowTable("Other Files", class_style = "toggle", extra = "onclick='toggleDisplay(".other", "none", "table-row")'")
+
for file in job.files:
if file.filepath.endswith(".bphys"):
- rowTable(os.path.split(file.filepath)[1], class_style = "cache")
-
- if tot_fluid > 0:
- rowTable("%i fluid bake files" % tot_fluid, class_style = "toggle", extra = "onclick='toggleDisplay(".fluid", "none", "table-row")'")
- for file in job.files:
- if file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"):
- rowTable(os.path.split(file.filepath)[1], class_style = "fluid")
-
- endTable()
+ tot_cache += 1
+ elif file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"):
+ tot_fluid += 1
+ else:
+ if file != job.files[0]:
+ rowTable(file.filepath, class_style = "other")
+
+ if tot_cache > 0:
+ rowTable("%i physic cache files" % tot_cache, class_style = "toggle", extra = "onclick='toggleDisplay(".cache", "none", "table-row")'")
+ for file in job.files:
+ if file.filepath.endswith(".bphys"):
+ rowTable(os.path.split(file.filepath)[1], class_style = "cache")
+
+ if tot_fluid > 0:
+ rowTable("%i fluid bake files" % tot_fluid, class_style = "toggle", extra = "onclick='toggleDisplay(".fluid", "none", "table-row")'")
+ for file in job.files:
+ if file.filepath.endswith(".bobj.gz") or file.filepath.endswith(".bvel.gz"):
+ rowTable(os.path.split(file.filepath)[1], class_style = "fluid")
+
+ endTable()
+ elif job.type == netrender.model.JOB_VCS:
+ output("Versioning ")
+
+ startTable()
+
+ rowTable("System", job.version_info.system.name)
+ rowTable("Remote Path", job.version_info.rpath)
+ rowTable("Working Path", job.version_info.wpath)
+ rowTable("Revision", job.version_info.revision)
+ rowTable("Render File", job.files[0].filepath)
+
+ endTable()
if job.blacklist:
output("Blacklist ")
diff --git a/release/scripts/io/netrender/model.py b/release/scripts/io/netrender/model.py
index e7656f498b4..60186396ac7 100644
--- a/release/scripts/io/netrender/model.py
+++ b/release/scripts/io/netrender/model.py
@@ -20,6 +20,7 @@ import sys, os
import http, http.client, http.server, urllib
import subprocess, shutil, time, hashlib
+import netrender.versioning as versioning
from netrender.utils import *
class LogFile:
@@ -96,11 +97,65 @@ class RenderSlave:
JOB_BLENDER = 1
JOB_PROCESS = 2
+JOB_VCS = 3
JOB_TYPES = {
- JOB_BLENDER: "Blender",
- JOB_PROCESS: "Process"
- }
+ JOB_BLENDER: "Blender",
+ JOB_PROCESS: "Process",
+ JOB_VCS: "Versioned",
+ }
+
+class VersioningInfo:
+ def __init__(self, info = None):
+ self._system = None
+ self.wpath = ""
+ self.rpath = ""
+ self.revision = ""
+
+ @property
+ def system(self):
+ return self._system
+
+ @system.setter
+ def system(self, value):
+ self._system = versioning.SYSTEMS[value]
+
+ def update(self):
+ self.system.update(self)
+
+ def serialize(self):
+ return {
+ "wpath": self.wpath,
+ "rpath": self.rpath,
+ "revision": self.revision,
+ "system": self.system.name
+ }
+
+ @staticmethod
+ def generate(system, path):
+ vs = VersioningInfo()
+ vs.wpath = path
+ vs.system = system
+
+ vs.rpath = vs.system.path(path)
+ vs.revision = vs.system.revision(path)
+
+ return vs
+
+
+ @staticmethod
+ def materialize(data):
+ if not data:
+ return None
+
+ vs = VersioningInfo()
+ vs.wpath = data["wpath"]
+ vs.rpath = data["rpath"]
+ vs.revision = data["revision"]
+ vs.system = data["system"]
+
+ return vs
+
class RenderFile:
def __init__(self, filepath = "", index = 0, start = -1, end = -1, signature=0):
@@ -142,6 +197,8 @@ class RenderJob:
self.chunks = 0
self.priority = 0
self.blacklist = []
+
+ self.version_info = None
self.usage = 0.0
self.last_dispatched = 0.0
@@ -156,9 +213,19 @@ class RenderJob:
self.chunks = job_info.chunks
self.priority = job_info.priority
self.blacklist = job_info.blacklist
+ self.version_info = job_info.version_info
- def addFile(self, file_path, start=-1, end=-1):
- signature = hashFile(file_path)
+ def hasRenderResult(self):
+ return self.type in (JOB_BLENDER, JOB_VCS)
+
+ def rendersWithBlender(self):
+ return self.type in (JOB_BLENDER, JOB_VCS)
+
+ def addFile(self, file_path, start=-1, end=-1, signed=True):
+ if signed:
+ signature = hashFile(file_path)
+ else:
+ signature = None
self.files.append(RenderFile(file_path, len(self.files), start, end, signature))
def addFrame(self, frame_number, command = ""):
@@ -225,7 +292,8 @@ class RenderJob:
"priority": self.priority,
"usage": self.usage,
"blacklist": self.blacklist,
- "last_dispatched": self.last_dispatched
+ "last_dispatched": self.last_dispatched,
+ "version_info": self.version_info.serialize() if self.version_info else None
}
@staticmethod
@@ -246,6 +314,10 @@ class RenderJob:
job.usage = data["usage"]
job.blacklist = data["blacklist"]
job.last_dispatched = data["last_dispatched"]
+
+ version_info = data.get("version_info", None)
+ if version_info:
+ job.version_info = VersioningInfo.materialize(version_info)
return job
diff --git a/release/scripts/io/netrender/operators.py b/release/scripts/io/netrender/operators.py
index 96601dcf653..fe82011d706 100644
--- a/release/scripts/io/netrender/operators.py
+++ b/release/scripts/io/netrender/operators.py
@@ -26,6 +26,7 @@ import netrender
from netrender.utils import *
import netrender.client as client
import netrender.model
+import netrender.versioning as versioning
class RENDER_OT_netslave_bake(bpy.types.Operator):
'''NEED DESCRIPTION'''
@@ -461,6 +462,38 @@ class netclientscan(bpy.types.Operator):
def invoke(self, context, event):
return self.execute(context)
+class netclientvcsguess(bpy.types.Operator):
+ '''Guess VCS setting for the current file'''
+ bl_idname = "render.netclientvcsguess"
+ bl_label = "VCS Guess"
+
+ @classmethod
+ def poll(cls, context):
+ return True
+
+ def execute(self, context):
+ netsettings = context.scene.network_render
+
+ system = versioning.SYSTEMS.get(netsettings.vcs_system, None)
+
+ if system:
+ wpath, name = os.path.split(os.path.abspath(bpy.data.filepath))
+
+ rpath = system.path(wpath)
+ revision = system.revision(wpath)
+
+ netsettings.vcs_wpath = wpath
+ netsettings.vcs_rpath = rpath
+ netsettings.vcs_revision = revision
+
+
+
+ return {'FINISHED'}
+
+ def invoke(self, context, event):
+ return self.execute(context)
+
+
class netclientweb(bpy.types.Operator):
'''Open new window with information about running rendering jobs'''
bl_idname = "render.netclientweb"
diff --git a/release/scripts/io/netrender/slave.py b/release/scripts/io/netrender/slave.py
index 8629a38c04a..08bd48ae70b 100644
--- a/release/scripts/io/netrender/slave.py
+++ b/release/scripts/io/netrender/slave.py
@@ -78,7 +78,7 @@ def testFile(conn, job_id, slave_id, rfile, JOB_PREFIX, main_path = None):
found = os.path.exists(job_full_path)
- if found:
+ if found and rfile.signature != None:
found_signature = hashFile(job_full_path)
found = found_signature == rfile.signature
@@ -160,6 +160,20 @@ def render_slave(engine, netsettings, threads):
netrender.repath.update(job)
+ engine.update_stats("", "Render File "+ main_file+ " for job "+ job.id)
+ elif job.type == netrender.model.JOB_VCS:
+ if not job.version_info:
+ # Need to return an error to server, incorrect job type
+ pass
+
+ job_path = job.files[0].filepath # path of main file
+ main_path, main_file = os.path.split(job_path)
+
+ job.version_info.update()
+
+ # For VCS jobs, file path is relative to the working copy path
+ job_full_path = os.path.join(job.version_info.wpath, job_path)
+
engine.update_stats("", "Render File "+ main_file+ " for job "+ job.id)
# announce log to master
@@ -174,7 +188,7 @@ def render_slave(engine, netsettings, threads):
# start render
start_t = time.time()
- if job.type == netrender.model.JOB_BLENDER:
+ if job.rendersWithBlender():
frame_args = []
for frame in job.frames:
@@ -259,7 +273,7 @@ def render_slave(engine, netsettings, threads):
headers["job-result"] = str(DONE)
for frame in job.frames:
headers["job-frame"] = str(frame.number)
- if job.type == netrender.model.JOB_BLENDER:
+ if job.hasRenderResult():
# send image back to server
filename = os.path.join(JOB_PREFIX, "%06d.exr" % frame.number)
diff --git a/release/scripts/io/netrender/ui.py b/release/scripts/io/netrender/ui.py
index c065b95b928..916f567e299 100644
--- a/release/scripts/io/netrender/ui.py
+++ b/release/scripts/io/netrender/ui.py
@@ -203,10 +203,12 @@ class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel):
split = layout.split(percentage=0.3)
col = split.column()
+ col.label(text="Type:")
col.label(text="Name:")
col.label(text="Category:")
col = split.column()
+ col.prop(netsettings, "job_type", text="")
col.prop(netsettings, "job_name", text="")
col.prop(netsettings, "job_category", text="")
@@ -214,6 +216,30 @@ class RENDER_PT_network_job(bpy.types.Panel, RenderButtonsPanel):
row.prop(netsettings, "priority")
row.prop(netsettings, "chunks")
+class RENDER_PT_network_job_vcs(bpy.types.Panel, RenderButtonsPanel):
+ bl_label = "VCS Job Settings"
+ COMPAT_ENGINES = {'NET_RENDER'}
+
+ @classmethod
+ def poll(cls, context):
+ scene = context.scene
+ return (super(RENDER_PT_network_job_vcs, cls).poll(context)
+ and scene.network_render.mode == "RENDER_CLIENT"
+ and scene.network_render.job_type == "JOB_VCS")
+
+ def draw(self, context):
+ layout = self.layout
+
+ scene = context.scene
+ netsettings = scene.network_render
+
+ layout.operator("render.netclientvcsguess", icon='FILE_REFRESH', text="")
+
+ layout.prop(netsettings, "vcs_system")
+ layout.prop(netsettings, "vcs_revision")
+ layout.prop(netsettings, "vcs_rpath")
+ layout.prop(netsettings, "vcs_wpath")
+
class RENDER_PT_network_slaves(bpy.types.Panel, RenderButtonsPanel):
bl_label = "Slaves Status"
COMPAT_ENGINES = {'NET_RENDER'}
@@ -397,6 +423,16 @@ def addProperties():
default = default_path,
subtype='FILE_PATH')
+ NetRenderSettings.job_type = EnumProperty(
+ items=(
+ ("JOB_BLENDER", "Blender", "Standard Blender Job"),
+ ("JOB_PROCESS", "Process", "Custom Process Job"),
+ ("JOB_VCS", "VCS", "Version Control System Managed Job"),
+ ),
+ name="Job Type",
+ description="Type of render job",
+ default="JOB_BLENDER")
+
NetRenderSettings.job_name = StringProperty(
name="Job name",
description="Name of the job",
@@ -423,6 +459,30 @@ def addProperties():
min=1,
max=10)
+ NetRenderSettings.vcs_wpath = StringProperty(
+ name="Working Copy",
+ description="Path of the local working copy",
+ maxlen = 1024,
+ default = "")
+
+ NetRenderSettings.vcs_rpath = StringProperty(
+ name="Remote Path",
+ description="Path of the server copy (protocol specific)",
+ maxlen = 1024,
+ default = "")
+
+ NetRenderSettings.vcs_revision = StringProperty(
+ name="Revision",
+ description="Revision for this job",
+ maxlen = 256,
+ default = "")
+
+ NetRenderSettings.vcs_system = StringProperty(
+ name="VCS",
+ description="Version Control System",
+ maxlen = 64,
+ default = "Subversion")
+
NetRenderSettings.job_id = StringProperty(
name="Network job id",
description="id of the last sent render job",
diff --git a/release/scripts/io/netrender/utils.py b/release/scripts/io/netrender/utils.py
index e2a5051cf64..7ad65fee66a 100644
--- a/release/scripts/io/netrender/utils.py
+++ b/release/scripts/io/netrender/utils.py
@@ -28,7 +28,7 @@ try:
except:
bpy = None
-VERSION = bytes("0.9", encoding='utf8')
+VERSION = bytes("1.0", encoding='utf8')
# Jobs status
JOB_WAITING = 0 # before all data has been entered
@@ -57,6 +57,17 @@ FRAME_STATUS_TEXT = {
ERROR: "Error"
}
+class DirectoryContext:
+ def __init__(self, path):
+ self.path = path
+
+ def __enter__(self):
+ self.curdir = os.path.abspath(os.curdir)
+ os.chdir(self.path)
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ os.chdir(self.curdir)
+
def responseStatus(conn):
response = conn.getresponse()
response.read()
@@ -216,9 +227,19 @@ def thumbnail(filename):
scene = bpy.data.scenes[0] # FIXME, this is dodgy!
scene.render.file_format = "JPEG"
scene.render.file_quality = 90
+
+ # remove existing image, if there's a leftover (otherwise open changes the name)
+ if imagename in bpy.data.images:
+ img = bpy.data.images[imagename]
+ bpy.data.images.remove(img)
+
bpy.ops.image.open(filepath=filename)
img = bpy.data.images[imagename]
+
img.save_render(thumbname, scene=scene)
+
+ img.user_clear()
+ bpy.data.images.remove(img)
try:
process = subprocess.Popen(["convert", thumbname, "-resize", "300x300", thumbname])
diff --git a/release/scripts/io/netrender/versioning.py b/release/scripts/io/netrender/versioning.py
new file mode 100644
index 00000000000..d4f8522cce8
--- /dev/null
+++ b/release/scripts/io/netrender/versioning.py
@@ -0,0 +1,72 @@
+import sys, os
+import re
+import subprocess
+
+from netrender.utils import *
+
+class AbstractVCS:
+ name = "ABSTRACT VCS"
+ def __init__(self):
+ pass
+
+ def update(self, info):
+ """update(info)
+ Update a working copy to the specified revision.
+ If working copy doesn't exist, do a full get from server to create it.
+ [info] model.VersioningInfo instance, specifies the working path, remote path and version number."""
+ pass
+
+ def revision(self, path):
+ """revision(path)
+ return the current revision of the specified working copy path"""
+ pass
+
+ def path(self, path):
+ """path(path)
+ return the remote path of the specified working copy path"""
+ pass
+
+class Subversion(AbstractVCS):
+ name = "Subversion"
+ def __init__(self):
+ super().__init__()
+ self.version_exp = re.compile("([0-9]*)")
+ self.path_exp = re.compile("URL: (.*)")
+
+ def update(self, info):
+ if not os.path.exists(info.wpath):
+ base, folder = os.path.split(info.wpath)
+
+ with DirectoryContext(base):
+ subprocess.call(["svn", "co", "%s@%s" % (info.rpath, str(info.revision)), folder])
+ else:
+ with DirectoryContext(info.wpath):
+ subprocess.call(["svn", "up", "--accept", "theirs-full", "-r", str(info.revision)])
+
+ def revision(self, path):
+ if not os.path.exists(path):
+ return
+
+ with DirectoryContext(path):
+ stdout = subprocess.check_output(["svnversion"])
+
+ match = self.version_exp.match(str(stdout, encoding="utf-8"))
+
+ if match:
+ return match.group(1)
+
+ def path(self, path):
+ if not os.path.exists(path):
+ return
+
+ with DirectoryContext(path):
+ stdout = subprocess.check_output(["svn", "info"])
+
+ match = self.path_exp.search(str(stdout, encoding="utf-8"))
+
+ if match:
+ return match.group(1)
+
+SYSTEMS = {
+ Subversion.name: Subversion()
+ }
diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py
index ba56fa12fe1..c6bdc21afa6 100644
--- a/release/scripts/modules/bpy/ops.py
+++ b/release/scripts/modules/bpy/ops.py
@@ -115,14 +115,34 @@ class bpy_ops_submodule_op(object):
def _get_doc(self):
return op_as_string(self.idname())
+ @staticmethod
+ def _parse_args(args):
+ C_dict = None
+ C_exec = 'EXEC_DEFAULT'
+
+ if len(args) == 0:
+ pass
+ elif len(args) == 1:
+ if type(args[0]) != str:
+ C_dict = args[0]
+ else:
+ C_exec = args[0]
+ elif len(args) == 2:
+ C_exec, C_dict = args
+ else:
+ raise ValueError("1 or 2 args execution context is supported")
+
+ return C_dict, C_exec
+
__doc__ = property(_get_doc)
def __init__(self, module, func):
self.module = module
self.func = func
- def poll(self, context=None):
- return op_poll(self.idname_py(), context)
+ def poll(self, *args):
+ C_dict, C_exec = __class__._parse_args(args)
+ return op_poll(self.idname_py(), C_dict, C_exec)
def idname(self):
# submod.foo -> SUBMOD_OT_foo
@@ -135,31 +155,11 @@ class bpy_ops_submodule_op(object):
def __call__(self, *args, **kw):
# Get the operator from blender
- if len(args) > 2:
- raise ValueError("1 or 2 args execution context is supported")
-
- C_dict = None
-
if args:
-
- C_exec = 'EXEC_DEFAULT'
-
- if len(args) == 2:
- C_exec = args[0]
- C_dict = args[1]
- else:
- if type(args[0]) != str:
- C_dict = args[0]
- else:
- C_exec = args[0]
-
- if len(args) == 2:
- C_dict = args[1]
-
+ C_dict, C_exec = __class__._parse_args(args)
ret = op_call(self.idname_py(), C_dict, kw, C_exec)
-
else:
- ret = op_call(self.idname_py(), C_dict, kw)
+ ret = op_call(self.idname_py(), None, kw)
if 'FINISHED' in ret:
import bpy
diff --git a/release/scripts/modules/bpy/utils.py b/release/scripts/modules/bpy/utils.py
index d9229c2e761..d5da7cfa13c 100644
--- a/release/scripts/modules/bpy/utils.py
+++ b/release/scripts/modules/bpy/utils.py
@@ -477,8 +477,15 @@ def addon_reset_all():
"""
Sets the addon state based on the user preferences.
"""
-
- paths = script_paths("addons") + script_paths("addons_contrib")
+
+ # RELEASE SCRIPTS: official scripts distributed in Blender releases
+ paths = script_paths("addons")
+
+ # CONTRIB SCRIPTS: good for testing but not official scripts yet
+ paths += script_paths("addons_contrib")
+
+ # EXTERN SCRIPTS: external projects scripts
+ paths += script_paths("addons_extern")
for path in paths:
_sys_path_ensure(path)
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py
index 6ecb8a2e207..472fae59abe 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -650,14 +650,14 @@ class Operator(StructRNA, metaclass=OrderedMeta):
properties = StructRNA.path_resolve(self, "properties")
bl_rna = getattr(properties, "bl_rna", None)
if bl_rna and attr in bl_rna.properties:
- setattr(properties, attr, value)
+ return setattr(properties, attr, value)
return super().__setattr__(attr, value)
def __delattr__(self, attr):
properties = StructRNA.path_resolve(self, "properties")
bl_rna = getattr(properties, "bl_rna", None)
if bl_rna and attr in bl_rna.properties:
- delattr(properties, attr)
+ return delattr(properties, attr)
return super().__delattr__(attr)
diff --git a/release/scripts/modules/console/complete_calltip.py b/release/scripts/modules/console/complete_calltip.py
index 87fac9f4c07..322b48d4f65 100644
--- a/release/scripts/modules/console/complete_calltip.py
+++ b/release/scripts/modules/console/complete_calltip.py
@@ -168,7 +168,10 @@ def complete(line, cursor, namespace):
'abs(number) -> number\\nReturn the absolute value of the argument.'
"""
matches = []
+ word = ''
+ scrollback = ''
match = RE_DEF_COMPLETE.search(line[:cursor])
+
if match:
word = match.group(1)
func_word = match.group(2)
@@ -176,7 +179,7 @@ def complete(line, cursor, namespace):
func = eval(func_word, namespace)
except Exception:
func = None
- scrollback = ''
+
if func:
doc = get_doc(func)
argspec = get_argspec(func, doc=doc)
@@ -186,7 +189,5 @@ def complete(line, cursor, namespace):
elif doc:
scrollback += '\n' + doc
scrollback = reduce_newlines(scrollback)
- else:
- word = ''
- scrollback = ''
+
return matches, word, scrollback
diff --git a/release/scripts/modules/extensions_framework/plugin.py b/release/scripts/modules/extensions_framework/plugin.py
index b0042aad40d..a6a5b719e30 100644
--- a/release/scripts/modules/extensions_framework/plugin.py
+++ b/release/scripts/modules/extensions_framework/plugin.py
@@ -60,7 +60,7 @@ class plugin(object):
init_properties(property_group, property_group.properties)
#print('Initialised IDPropertyGroup %s' % property_group.__name__)
- log('Render Engine "%s" initialised' % r_class.bl_label)
+ log('Extension "%s" initialised' % r_class.bl_label)
@classmethod
def uninstall(r_class):
diff --git a/release/scripts/modules/rigify/__init__.py b/release/scripts/modules/rigify/__init__.py
deleted file mode 100644
index c4f18d51519..00000000000
--- a/release/scripts/modules/rigify/__init__.py
+++ /dev/null
@@ -1,564 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from mathutils import Vector
-
-# TODO, have these in a more general module
-from rna_prop_ui import rna_idprop_ui_prop_get
-SPECIAL_TYPES = "root",
-LAYER_TYPES = "main", "extra", "ik", "fk"
-
-ORG_LAYERS = [n == 31 for n in range(0, 32)]
-MCH_LAYERS = [n == 30 for n in range(0, 32)]
-DEF_LAYERS = [n == 29 for n in range(0, 32)]
-ROOT_LAYERS = [n == 28 for n in range(0, 32)]
-
-ORG_PREFIX = "ORG-"
-MCH_PREFIX = "MCH-"
-DEF_PREFIX = "DEF-"
-
-WGT_PREFIX = "WGT-"
-
-
-class RigifyError(Exception):
- """Exception raised for errors in the metarig.
- """
-
- def __init__(self, message):
- self.message = message
-
- def __str__(self):
- return repr(self.message)
-
-
-def submodule_func_from_type(bone_type):
- type_pair = bone_type.split(".")
-
- # 'leg.ik' will look for an ik function in the leg module
- # 'leg' will look up leg.main
- if len(type_pair) == 1:
- type_pair = type_pair[0], "main"
-
- type_name, func_name = type_pair
-
- # from rigify import leg
- try:
- submod = __import__(name="%s.%s" % (__package__, type_name), fromlist=[type_name])
- except ImportError:
- raise RigifyError("python module for type '%s' not found" % type_name)
-
- reload(submod)
- return type_name, submod, getattr(submod, func_name)
-
-
-def get_submodule_types():
- import os
- submodules = []
- files = os.listdir(os.path.dirname(__file__))
- for f in files:
- if not f.startswith("_") and f.endswith(".py"):
- submodules.append(f[:-3])
-
- return sorted(submodules)
-
-
-def get_bone_type_options(pbone, type_name):
- options = {}
- bone_name = pbone.name
- for key, value in pbone.items():
- key_pair = key.rsplit(".")
- # get all bone properties
- """"
- if key_pair[0] == type_name:
- if len(key_pair) != 2:
- raise RigifyError("option error for bone '%s', property name was not a pair '%s'" % (bone_name, key_pair))
- options[key_pair[1]] = value
- """
- options[key] = value
-
- return options
-
-
-def get_layer_dict(options):
- '''
- Extracts layer info from a bone options dict
- defaulting to the layer index if not set.
- '''
- layer_default = [False] * 32
- result = {}
- for i, layer_type in enumerate(LAYER_TYPES):
- # no matter if its not defined
- layer_index = options.get("layer_" + layer_type, i + 2)
- layer = layer_default[:]
- layer[layer_index-1] = True
- result[layer_type] = layer
- return result
-
-
-def validate_rig(context, obj):
- '''
- Makes no changes
- only runs the metarig definitions and reports errors
- '''
- type_found = False
-
- for pbone in obj.pose.bones:
- bone_name = pbone.name
- bone_type = pbone.get("type", "")
-
- if bone_type:
- bone_type_list = [bt for bt in bone_type.replace(",", " ").split()]
- else:
- bone_type_list = []
-
- for bone_type in bone_type_list:
- if bone_type.split(".")[0] in SPECIAL_TYPES:
- continue
-
- type_name, submod, type_func = submodule_func_from_type(bone_type)
- reload(submod)
- submod.metarig_definition(obj, bone_name)
- type_found = True
-
- get_bone_type_options(pbone, bone_type)
-
- # missing, - check for duplicate root bone.
-
- if not type_found:
- raise RigifyError("This rig has no 'type' properties defined on any pose bones, nothing to do")
-
-
-def generate_rig(context, obj_orig, prefix="ORG-", META_DEF=True):
- '''
- Main function for generating
- '''
- from collections import OrderedDict
- import rigify_utils
- reload(rigify_utils)
-
- print("Begin...")
-
- # Not needed but catches any errors before duplicating
- validate_rig(context, obj_orig)
-
- use_global_undo = context.user_preferences.edit.use_global_undo
- context.user_preferences.edit.use_global_undo = False
- mode_orig = context.mode
- rest_backup = obj_orig.data.pose_position
- obj_orig.data.pose_position = 'REST'
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- scene = context.scene
-
- # Check if the generated rig already exists, so we can
- # regenerate in the same object. If not, create a new
- # object to generate the rig in.
- print("Fetch rig.")
- try:
- name = obj_orig["rig_object_name"]
- except KeyError:
- name = "rig"
-
- try:
- obj = scene.objects[name]
- except KeyError:
- obj = bpy.data.objects.new(name, bpy.data.armatures.new(name))
- scene.objects.link(obj)
-
- obj.data.pose_position = 'POSE'
-
- # Get rid of anim data in case the rig already existed
- print("Clear rig animation data.")
- obj.animation_data_clear()
-
- # Select generated rig object
- obj_orig.select = False
- obj.select = True
- scene.objects.active = obj
-
- # Remove all bones from the generated rig armature.
- bpy.ops.object.mode_set(mode='EDIT')
- for bone in obj.data.edit_bones:
- obj.data.edit_bones.remove(bone)
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Create temporary duplicates for merging
- temp_rig_1 = obj_orig.copy()
- temp_rig_1.data = obj_orig.data.copy()
- scene.objects.link(temp_rig_1)
-
- temp_rig_2 = obj_orig.copy()
- temp_rig_2.data = obj.data
- scene.objects.link(temp_rig_2)
-
- # Select the temp rigs for merging
- for objt in scene.objects:
- objt.select = False # deselect all objects
- temp_rig_1.select = True
- temp_rig_2.select = True
- scene.objects.active = temp_rig_2
-
- # Merge the temporary rigs
- bpy.ops.object.join(context)
-
- # Delete the second temp rig
- bpy.ops.object.delete()
-
- # Select the generated rig
- for objt in scene.objects:
- objt.select = False # deselect all objects
- obj.select = True
- scene.objects.active = obj
-
- # Copy over the pose_bone properties
- for bone in obj_orig.pose.bones:
- bone_gen = obj.pose.bones[bone.name]
-
- # Rotation mode and transform locks
- bone_gen.rotation_mode = bone.rotation_mode
- bone_gen.lock_rotation = tuple(bone.lock_rotation)
- bone_gen.lock_rotation_w = bone.lock_rotation_w
- bone_gen.lock_rotations_4d = bone.lock_rotations_4d
- bone_gen.lock_location = tuple(bone.lock_location)
- bone_gen.lock_scale = tuple(bone.lock_scale)
-
- # Custom properties
- for prop in bone.keys():
- bone_gen[prop] = bone[prop]
-
- # Copy over bone properties
- for bone in obj_orig.data.bones:
- bone_gen = obj.data.bones[bone.name]
-
- # B-bone stuff
- bone_gen.bbone_segments = bone.bbone_segments
- bone_gen.bbone_in = bone.bbone_in
- bone_gen.bbone_out = bone.bbone_out
-
-
- # Create proxy deformation rig
- # TODO: remove this
- if META_DEF:
- obj_def = obj_orig.copy()
- obj_def.data = obj_orig.data.copy()
- scene.objects.link(obj_def)
-
- scene.update()
- print("On to the real work.")
-
- arm = obj.data
-
- # prepend the ORG prefix to the bones, and create the base_names mapping
- base_names = {}
- bpy.ops.object.mode_set(mode='EDIT')
- for bone in arm.edit_bones:
- bone_name = bone.name
- bone.name = ORG_PREFIX + bone_name
- base_names[bone.name] = bone_name
-
- # create root_bone
- bpy.ops.object.mode_set(mode='EDIT')
- edit_bone = obj.data.edit_bones.new("root")
- root_bone = edit_bone.name
- edit_bone.head = (0.0, 0.0, 0.0)
- edit_bone.tail = (0.0, 1.0, 0.0)
- edit_bone.roll = 0.0
- edit_bone.layers = ROOT_LAYERS
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # key: bone name
- # value: {type:definition, ...}
- # where type is the submodule name - leg, arm etc
- # and definition is a list of bone names
- bone_definitions = {}
-
- # key: bone name
- # value: [functions, ...]
- # each function is from the module. eg leg.ik, arm.main
- bone_typeinfos = {}
-
- # key: bone name
- # value: [new_bone_name, ...]
- # where each bone with a 'type' stores a list of bones that it created
- # ...needed so we can override the root parent
- bone_genesis = {}
-
-
- # inspect all bones and assign their definitions before modifying
- for pbone in obj.pose.bones:
- bone_name = pbone.name
- bone_type = pbone.get("type", "")
- if bone_type:
- bone_type_list = [bt for bt in bone_type.replace(",", " ").split()]
-
- # not essential but means running autorig again wont do anything
- del pbone["type"]
- else:
- bone_type_list = []
-
- for bone_type in bone_type_list:
- type_name, submod, type_func = submodule_func_from_type(bone_type)
- reload(submod)
-
- bone_def_dict = bone_definitions.setdefault(bone_name, {})
-
- # Only calculate bone definitions once
- if type_name not in bone_def_dict:
- bone_def_dict[type_name] = submod.metarig_definition(obj, bone_name)
-
- bone_typeinfo = bone_typeinfos.setdefault(bone_name, [])
- bone_typeinfo.append((type_name, type_func))
-
-
- # sort bones, not needed but gives more pradictable execution which may be useful in rare cases
- bones_sorted = obj.pose.bones.values()
- bones_sorted.sort(key=lambda pbone: pbone.name) # first sort by names
- bones_sorted.sort(key=lambda pbone: len(pbone.parent_recursive)) # parents before children
-
- # now we have all the info about bones we can start operating on them
- # for pbone in obj.pose.bones:
- for pbone in bones_sorted:
- bone_name = pbone.name
- print(bone_name)
- if bone_name not in bone_typeinfos:
- continue
-
- bone_def_dict = bone_definitions[bone_name]
-
- # Only blend results from the same submodule, eg.
- # leg.ik and arm.fk could not be blended.
- results = OrderedDict()
-
- bone_names_pre = {bone.name for bone in arm.bones}
-
- for type_name, type_func in bone_typeinfos[bone_name]:
- print(" " + type_name)
- # this bones definition of the current typeinfo
- definition = bone_def_dict[type_name]
- options = get_bone_type_options(pbone, type_name)
-
- bpy.ops.object.mode_set(mode='EDIT')
- ret = type_func(obj, definition, base_names, options)
- bpy.ops.object.mode_set(mode='OBJECT')
-
- if ret:
- result_submod = results.setdefault(type_name, [])
-
- if result_submod and len(result_submod[-1]) != len(ret):
- raise RigifyError("bone lists not compatible: %s, %s" % (result_submod[-1], ret))
-
- result_submod.append(ret)
-
- for result_submod in results.values():
- # blend 2 chains
- definition = bone_def_dict[type_name]
-
- if len(result_submod) == 2:
- blend_bone_list(obj, definition, result_submod[0], result_submod[1], target_bone=bone_name)
-
-
- bone_names_post = {bone.name for bone in arm.bones}
-
- # Store which bones were created from this one
- bone_genesis[bone_name] = list(bone_names_post - bone_names_pre)
-
- # need a reverse lookup on bone_genesis so as to know immediately
- # where a bone comes from
- bone_genesis_reverse = {}
- '''
- for bone_name, bone_children in bone_genesis.items():
- for bone_child_name in bone_children:
- bone_genesis_reverse[bone_child_name] = bone_name
- '''
-
-
- if root_bone:
- # assign all new parentless bones to this
-
- bpy.ops.object.mode_set(mode='EDIT')
- root_ebone = arm.edit_bones[root_bone]
- for ebone in arm.edit_bones:
- bone_name = ebone.name
- if ebone.parent is None:
- ebone.parent = root_ebone
- '''
- if ebone.parent is None and bone_name not in base_names:
- # check for override
- bone_creator = bone_genesis_reverse[bone_name]
- pbone_creator = obj.pose.bones[bone_creator]
- root_bone_override = pbone_creator.get("root", "")
-
- if root_bone_override:
- root_ebone_tmp = arm.edit_bones[root_bone_override]
- else:
- root_ebone_tmp = root_ebone
-
- ebone.use_connect = False
- ebone.parent = root_ebone_tmp
- '''
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
-
- if META_DEF:
- # for pbone in obj_def.pose.bones:
- for bone_name, bone_name_new in base_names.items():
- #pbone_from = bone_name
- pbone = obj_def.pose.bones[bone_name_new]
-
- con = pbone.constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = bone_name
-
- if not pbone.bone.use_connect:
- con = pbone.constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = bone_name
-
- # would be 'REST' from when copied
- obj_def.data.pose_position = 'POSE'
-
- # todo - make a more generic system?
- layer_tot = [False] * 32
- layer_last = layer_tot[:]
- layer_last[31] = True
- layer_second_last = layer_tot[:]
- layer_second_last[30] = True
-
- for bone_name, bone in arm.bones.items():
- bone.use_deform = False # Non DEF bones shouldn't deform
- if bone_name.startswith(ORG_PREFIX):
- bone.layers = ORG_LAYERS
- elif bone_name.startswith(MCH_PREFIX): # XXX fixme
- bone.layers = MCH_LAYERS
- elif bone_name.startswith(DEF_PREFIX): # XXX fixme
- bone.layers = DEF_LAYERS
- bone.use_deform = True
- else:
- # Assign bone appearance if there is a widget for it
- obj.pose.bones[bone_name].custom_shape = context.scene.objects.get(WGT_PREFIX + bone_name)
-
- layer_tot[:] = [max(lay) for lay in zip(layer_tot, bone.layers)]
-
- # Only for demo'ing
- layer_show = [a and not (b or c or d) for a, b, c, d in zip(layer_tot, ORG_LAYERS, MCH_LAYERS, DEF_LAYERS)]
- arm.layers = layer_show
-
-
- # obj.hide = True
- obj.data.show_axes = False
-
- bpy.ops.object.mode_set(mode=mode_orig)
- obj_orig.data.pose_position = rest_backup
- obj.data.pose_position = 'POSE'
- obj_orig.data.pose_position = 'POSE'
- context.user_preferences.edit.use_global_undo = use_global_undo
-
- print("Done.\n")
-
- return obj
-
-
-def generate_test(context, metarig_type="", GENERATE_FINAL=True):
- import os
- new_objects = []
-
- scene = context.scene
-
- def create_empty_armature(name):
- armature = bpy.data.armatures.new(name)
- obj_new = bpy.data.objects.new(name, armature)
- scene.objects.link(obj_new)
- scene.objects.active = obj_new
- for obj in scene.objects:
- obj.select = False
- obj_new.select = True
-
- for module_name in get_submodule_types():
- if (metarig_type and module_name != metarig_type):
- continue
-
- # XXX workaround!, problem with updating the pose matrix.
- if module_name == "delta":
- continue
-
- type_name, submodule, func = submodule_func_from_type(module_name)
-
- metarig_template = getattr(submodule, "metarig_template", None)
-
- if metarig_template:
- create_empty_armature("meta_" + module_name) # sets active
- metarig_template()
- obj = context.active_object
- obj.location = scene.cursor_location
-
- if GENERATE_FINAL:
- obj_new = generate_rig(context, obj)
- new_objects.append((obj, obj_new))
- else:
- new_objects.append((obj, None))
- else:
- print("note: rig type '%s' has no metarig_template(), can't test this" % module_name)
-
- return new_objects
-
-
-def generate_test_all(context, GRAPH=False):
- import rigify
- import rigify_utils
- import graphviz_export
- import os
- reload(rigify)
- reload(rigify_utils)
- reload(graphviz_export)
-
- new_objects = rigify.generate_test(context)
-
- if GRAPH:
- if(bpy.data.filepath):
- base_name = os.path.splitext(bpy.data.filepath)[0]
- else:
- import tempfile
- base_name = tempfile.mktemp(prefix=bpy.app.tempdir)
- for obj, obj_new in new_objects:
- for obj in (obj, obj_new):
- fn = base_name + "-" + bpy.path.clean_name(obj.name)
-
- path_dot = fn + ".dot"
- path_png = fn + ".png"
- saved = graphviz_export.graph_armature(obj, path_dot, CONSTRAINTS=True, DRIVERS=True)
-
- #if saved:
- # os.system("dot -Tpng %s > %s; eog %s" % (path_dot, path_png, path_png))
-
- i = 0
- for obj, obj_new in new_objects:
- obj.data.draw_type = 'STICK'
- obj.location[1] += i
- obj_new.location[1] += i
- obj_new.select = False
- obj.select = True
- i += 4
-
-
-if __name__ == "__main__":
- generate_rig(bpy.context, bpy.context.active_object)
diff --git a/release/scripts/modules/rigify/arm_biped.py b/release/scripts/modules/rigify/arm_biped.py
deleted file mode 100644
index ac878c3c076..00000000000
--- a/release/scripts/modules/rigify/arm_biped.py
+++ /dev/null
@@ -1,396 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from math import radians, pi
-from rigify import RigifyError, ORG_PREFIX
-from rigify_utils import bone_class_instance, copy_bone_simple, add_pole_target_bone, add_stretch_to, blend_bone_list, get_side_name, get_base_name
-from rna_prop_ui import rna_idprop_ui_prop_get
-from mathutils import Vector
-
-METARIG_NAMES = "shoulder", "arm", "forearm", "hand"
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('shoulder')
- bone.head[:] = 0.0000, -0.0425, 0.0000
- bone.tail[:] = 0.0942, -0.0075, 0.0333
- bone.roll = -0.2227
- bone.use_connect = False
- bone = arm.edit_bones.new('upper_arm')
- bone.head[:] = 0.1066, -0.0076, -0.0010
- bone.tail[:] = 0.2855, 0.0206, -0.0104
- bone.roll = 1.6152
- bone.use_connect = False
- bone.parent = arm.edit_bones['shoulder']
- bone = arm.edit_bones.new('forearm')
- bone.head[:] = 0.2855, 0.0206, -0.0104
- bone.tail[:] = 0.4550, -0.0076, -0.0023
- bone.roll = 1.5153
- bone.use_connect = True
- bone.parent = arm.edit_bones['upper_arm']
- bone = arm.edit_bones.new('hand')
- bone.head[:] = 0.4550, -0.0076, -0.0023
- bone.tail[:] = 0.5423, -0.0146, -0.0131
- bone.roll = -3.0083
- bone.use_connect = True
- bone.parent = arm.edit_bones['forearm']
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['upper_arm']
- pbone['type'] = 'arm_biped'
-
-
-def metarig_definition(obj, orig_bone_name):
- mt = bone_class_instance(obj, METARIG_NAMES) # meta
- mt.arm = orig_bone_name
- mt.update()
-
- mt.shoulder_p = mt.arm_p.parent
-
- if not mt.shoulder_p:
- raise RigifyError("could not find '%s' parent, skipping:" % orig_bone_name)
-
- mt.shoulder = mt.shoulder_p.name
-
- # We could have some bones attached, find the bone that has this as its 2nd parent
- hands = []
- for pbone in obj.pose.bones:
- index = pbone.parent_index(mt.arm_p)
- if index == 2 and pbone.bone.use_connect and pbone.bone.parent.use_connect:
- hands.append(pbone)
-
- if len(hands) != 1:
- raise RigifyError("Found %s possible hands attached to this arm, expected 1 from bone: %s" % ([pbone.name for pbone in hands], orig_bone_name))
-
- # first add the 2 new bones
- mt.hand_p = hands[0]
- mt.hand = mt.hand_p.name
-
- mt.forearm_p = mt.hand_p.parent
- mt.forearm = mt.forearm_p.name
-
- return mt.names()
-
-
-def ik(obj, definitions, base_names, options):
-
- arm = obj.data
-
- mt = bone_class_instance(obj, METARIG_NAMES)
- mt.shoulder, mt.arm, mt.forearm, mt.hand = definitions
- mt.update()
-
- ik = bone_class_instance(obj, ["pole", "pole_vis", "hand_vis"])
- ik_chain = mt.copy(to_fmt="MCH-%s_ik", base_names=base_names, exclude_attrs=["shoulder"])
-
- # IK needs no parent_index
- ik_chain.hand_e.use_connect = False
- ik_chain.hand_e.parent = None
- ik_chain.hand_e.use_local_location = False
- ik_chain.rename("hand", get_base_name(base_names[mt.hand]) + "_ik" + get_side_name(mt.hand))
-
- ik_chain.arm_e.use_connect = False
- ik_chain.arm_e.parent = mt.shoulder_e
-
- # Add the bone used for the arms poll target
- #ik.pole = add_pole_target_bone(obj, mt.forearm, get_base_name(base_names[mt.forearm]) + "_target" + get_side_name(mt.forearm), mode='ZAVERAGE')
- ik.pole = add_pole_target_bone(obj, mt.forearm, "elbow_target" + get_side_name(mt.forearm), mode='ZAVERAGE')
-
- ik.update()
- ik.pole_e.use_local_location = False
-
- # option: elbow_parent
- elbow_parent_name = options.get("elbow_parent", "")
-
- if elbow_parent_name:
- try:
- elbow_parent_e = arm.edit_bones[ORG_PREFIX + elbow_parent_name]
- except:
- # TODO, old/new parent mapping
- raise RigifyError("parent bone from property 'arm_biped_generic.elbow_parent' not found '%s'" % elbow_parent_name)
- ik.pole_e.parent = elbow_parent_e
-
- # update bones after this!
- ik.hand_vis = add_stretch_to(obj, mt.hand, ik_chain.hand, "VIS-%s_ik" % base_names[mt.hand])
- ik.pole_vis = add_stretch_to(obj, mt.forearm, ik.pole, "VIS-%s_ik" % base_names[mt.forearm])
-
- ik.update()
- ik.hand_vis_e.hide_select = True
- ik.pole_vis_e.hide_select = True
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- mt.update()
- ik.update()
- ik_chain.update()
-
- # Set IK dof
- ik_chain.forearm_p.lock_ik_x = False
- ik_chain.forearm_p.lock_ik_y = True
- ik_chain.forearm_p.lock_ik_z = True
-
- con = ik_chain.forearm_p.constraints.new('IK')
- con.target = obj
- con.subtarget = ik_chain.hand
- con.pole_target = obj
- con.pole_subtarget = ik.pole
-
- con.use_tail = True
- con.use_stretch = True
- con.use_target = True
- con.use_rotation = False
- con.chain_count = 2
- con.pole_angle = -pi/2
-
- # last step setup layers
- if "ik_layer" in options:
- layer = [n==options["ik_layer"] for n in range(0,32)]
- else:
- layer = list(mt.arm_b.layers)
- ik_chain.hand_b.layers = layer
- ik.hand_vis_b.layers = layer
- ik.pole_b.layers = layer
- ik.pole_vis_b.layers = layer
-
- bpy.ops.object.mode_set(mode='EDIT')
- # don't blend the shoulder
- return [None] + ik_chain.names()
-
-
-def fk(obj, definitions, base_names, options):
-
- arm = obj.data
-
- mt = bone_class_instance(obj, METARIG_NAMES)
- mt.shoulder, mt.arm, mt.forearm, mt.hand = definitions
- mt.update()
-
- ex = bone_class_instance(obj, ["socket", "hand_delta"])
- fk_chain = mt.copy(base_names=base_names)
-
- # shoulder is used as a hinge
- fk_chain.rename("shoulder", "MCH-%s_hinge" % base_names[mt.arm])
- fk_chain.shoulder_e.translate(Vector((0.0, fk_chain.shoulder_e.length / 2, 0.0)))
-
- # upper arm constrains to this.
- ex.socket_e = copy_bone_simple(arm, mt.arm, "MCH-%s_socket" % base_names[mt.arm])
- ex.socket = ex.socket_e.name
- ex.socket_e.use_connect = False
- ex.socket_e.parent = mt.shoulder_e
- ex.socket_e.length *= 0.5
-
- # insert the 'MCH-delta_hand', between the forearm and the hand
- # copies forarm rotation
- ex.hand_delta_e = copy_bone_simple(arm, fk_chain.hand, "MCH-delta_%s" % base_names[mt.hand], parent=True)
- ex.hand_delta = ex.hand_delta_e.name
- ex.hand_delta_e.length *= 0.5
- ex.hand_delta_e.use_connect = False
- if "hand_roll" in options:
- ex.hand_delta_e.roll += radians(options["hand_roll"])
-
- fk_chain.hand_e.use_connect = False
- fk_chain.hand_e.parent = ex.hand_delta_e
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- mt.update()
- ex.update()
- fk_chain.update()
-
- # Set rotation modes and axis locks
- fk_chain.forearm_p.rotation_mode = 'XYZ'
- fk_chain.forearm_p.lock_rotation = (False, True, True)
- fk_chain.hand_p.rotation_mode = 'ZXY'
- fk_chain.arm_p.lock_location = True, True, True
-
- con = fk_chain.arm_p.constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = ex.socket
-
- fk_chain.hand_p.lock_location = True, True, True
- con = ex.hand_delta_p.constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = fk_chain.forearm
-
- def hinge_setup():
- # Hinge constraint & driver
- con = fk_chain.shoulder_p.constraints.new('COPY_ROTATION')
- con.name = "hinge"
- con.target = obj
- con.subtarget = mt.shoulder
- driver_fcurve = con.driver_add("influence")
- driver = driver_fcurve.driver
-
-
- controller_path = fk_chain.arm_p.path_from_id()
- # add custom prop
- fk_chain.arm_p["hinge"] = 0.0
- prop = rna_idprop_ui_prop_get(fk_chain.arm_p, "hinge", create=True)
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
-
- # *****
- driver = driver_fcurve.driver
- driver.type = 'AVERAGE'
-
- var = driver.variables.new()
- var.name = "hinge"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = controller_path + '["hinge"]'
-
- mod = driver_fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
- hinge_setup()
-
- # last step setup layers
- if "fk_layer" in options:
- layer = [n==options["fk_layer"] for n in range(0,32)]
- else:
- layer = list(mt.arm_b.layers)
- fk_chain.arm_b.layers = layer
- fk_chain.forearm_b.layers = layer
- fk_chain.hand_b.layers = layer
-
- # Forearm was getting wrong roll somehow. Hack to fix that.
- bpy.ops.object.mode_set(mode='EDIT')
- fk_chain.update()
- mt.update()
- fk_chain.forearm_e.roll = mt.forearm_e.roll
- bpy.ops.object.mode_set(mode='OBJECT')
-
- bpy.ops.object.mode_set(mode='EDIT')
- return None, fk_chain.arm, fk_chain.forearm, fk_chain.hand
-
-
-def deform(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- # Create upper arm bones: two bones, each half of the upper arm.
- uarm1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True)
- uarm2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True)
- uarm1.use_connect = False
- uarm2.use_connect = False
- uarm2.parent = uarm1
- center = uarm1.center
- uarm1.tail = center
- uarm2.head = center
-
- # Create forearm bones: two bones, each half of the forearm.
- farm1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True)
- farm2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True)
- farm1.use_connect = False
- farm2.use_connect = False
- farm2.parent = farm1
- center = farm1.center
- farm1.tail = center
- farm2.head = center
-
- # Create twist bone
- twist = copy_bone_simple(obj.data, definitions[2], "MCH-arm_twist")
- twist.use_connect = False
- twist.parent = obj.data.edit_bones[definitions[3]]
- twist.length /= 2
-
- # Create hand bone
- hand = copy_bone_simple(obj.data, definitions[3], "DEF-%s" % base_names[definitions[3]], parent=True)
-
- # Store names before leaving edit mode
- uarm1_name = uarm1.name
- uarm2_name = uarm2.name
- farm1_name = farm1.name
- farm2_name = farm2.name
- twist_name = twist.name
- hand_name = hand.name
-
- # Leave edit mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Get the pose bones
- uarm1 = obj.pose.bones[uarm1_name]
- uarm2 = obj.pose.bones[uarm2_name]
- farm1 = obj.pose.bones[farm1_name]
- farm2 = obj.pose.bones[farm2_name]
- twist = obj.pose.bones[twist_name]
- hand = obj.pose.bones[hand_name]
-
- # Upper arm constraints
- con = uarm1.constraints.new('DAMPED_TRACK')
- con.name = "trackto"
- con.target = obj
- con.subtarget = definitions[2]
-
- con = uarm1.constraints.new('COPY_SCALE')
- con.name = "trackto"
- con.target = obj
- con.subtarget = definitions[1]
-
- con = uarm2.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[1]
-
- # Forearm constraints
- con = farm1.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[2]
-
- con = farm1.constraints.new('COPY_SCALE')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[2]
-
- con = farm2.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = twist.name
-
- con = farm2.constraints.new('DAMPED_TRACK')
- con.name = "trackto"
- con.target = obj
- con.subtarget = definitions[3]
-
- # Hand constraint
- con = hand.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[3]
-
- bpy.ops.object.mode_set(mode='EDIT')
- return (uarm1_name, uarm2_name, farm1_name, farm2_name, hand_name)
-
-
-def main(obj, bone_definition, base_names, options):
- bones_fk = fk(obj, bone_definition, base_names, options)
- bones_ik = ik(obj, bone_definition, base_names, options)
- bones_deform = deform(obj, bone_definition, base_names, options)
-
- bpy.ops.object.mode_set(mode='OBJECT')
- blend_bone_list(obj, bone_definition, bones_fk, bones_ik, target_bone=bones_ik[3], target_prop="ik", blend_default=0.0)
diff --git a/release/scripts/modules/rigify/copy.py b/release/scripts/modules/rigify/copy.py
deleted file mode 100644
index c051e5bb7f6..00000000000
--- a/release/scripts/modules/rigify/copy.py
+++ /dev/null
@@ -1,112 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify_utils import bone_class_instance, copy_bone_simple
-
-METARIG_NAMES = ("cpy",)
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('Bone')
- bone.head[:] = 0.0000, 0.0000, 0.0000
- bone.tail[:] = 0.0000, 0.0000, 1.0000
- bone.roll = 0.0000
- bone.use_connect = False
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['Bone']
- pbone['type'] = 'copy'
-
-
-def metarig_definition(obj, orig_bone_name):
- return (orig_bone_name,)
-
-
-def deform(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- # Create deform bone.
- bone = copy_bone_simple(obj.data, definitions[0], "DEF-%s" % base_names[definitions[0]], parent=True)
-
- # Store name before leaving edit mode
- bone_name = bone.name
-
- # Leave edit mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Get the pose bone
- bone = obj.pose.bones[bone_name]
-
- # Constrain to the original bone
- con = bone.constraints.new('COPY_TRANSFORMS')
- con.name = "copy_loc"
- con.target = obj
- con.subtarget = definitions[0]
-
- return (bone_name,)
-
-
-def control(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- arm = obj.data
- mt = bone_class_instance(obj, METARIG_NAMES)
- mt.cpy = definitions[0]
- mt.update()
- cp = bone_class_instance(obj, ["cpy"])
- cp.cpy_e = copy_bone_simple(arm, mt.cpy, base_names[mt.cpy], parent=True)
- cp.cpy = cp.cpy_e.name
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- cp.update()
- mt.update()
-
- con = mt.cpy_p.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = cp.cpy
-
-
- # Rotation mode and axis locks
- cp.cpy_p.rotation_mode = mt.cpy_p.rotation_mode
- cp.cpy_p.lock_location = tuple(mt.cpy_p.lock_location)
- cp.cpy_p.lock_rotations_4d = mt.cpy_p.lock_rotations_4d
- cp.cpy_p.lock_rotation = tuple(mt.cpy_p.lock_rotation)
- cp.cpy_p.lock_rotation_w = mt.cpy_p.lock_rotation_w
- cp.cpy_p.lock_scale = tuple(mt.cpy_p.lock_scale)
-
- # Layers
- cp.cpy_b.layers = list(mt.cpy_b.layers)
-
- return (mt.cpy,)
-
-
-def main(obj, bone_definition, base_names, options):
- # Create control bone
- cpy = control(obj, bone_definition, base_names, options)[0]
- # Create deform bone
- deform(obj, bone_definition, base_names, options)
-
- return (cpy,)
diff --git a/release/scripts/modules/rigify/delta.py b/release/scripts/modules/rigify/delta.py
deleted file mode 100644
index d0b4fbccce9..00000000000
--- a/release/scripts/modules/rigify/delta.py
+++ /dev/null
@@ -1,162 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-
-# not used, defined for completeness
-METARIG_NAMES = tuple()
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('bonesker')
- bone.head[:] = 0.0000, 0.0000, 0.0000
- bone.tail[:] = -0.0000, 0.7382, 0.1895
- bone.roll = -0.0000
- bone.use_connect = False
- bone = arm.edit_bones.new('delta')
- bone.head[:] = -0.0497, 0.8414, 0.3530
- bone.tail[:] = -0.2511, 1.1588, 0.9653
- bone.roll = 2.6044
- bone.use_connect = False
- bone.parent = arm.edit_bones['bonesker']
- bone = arm.edit_bones.new('boney')
- bone.head[:] = 0.7940, 2.5592, 0.4134
- bone.tail[:] = 0.7940, 3.3975, 0.4890
- bone.roll = 3.1416
- bone.use_connect = False
- bone.parent = arm.edit_bones['delta']
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['delta']
- pbone['type'] = 'delta'
-
-
-def metarig_definition(obj, orig_bone_name):
- '''
- The bone given is the head, its parent is the body,
- # its only child the first of a chain with matching basenames.
- eg.
- body -> head -> neck_01 -> neck_02 -> neck_03.... etc
- '''
- arm = obj.data
- delta = arm.bones[orig_bone_name]
- children = delta.children
-
- if len(children) != 1:
- raise RigifyError("only 1 child supported for delta on bone '%s'" % delta.name)
-
- if delta.use_connect:
- raise RigifyError("bone cannot be connected to its parent '%s'" % delta.name)
-
- bone_definition = [delta.name, children[0].name]
-
- return bone_definition
-
-
-def main(obj, bone_definition, base_names, options):
- '''
- Use this bone to define a delta thats applied to its child in pose mode.
- '''
- mode_orig = obj.mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- delta_name, child_name = bone_definition
-
- delta_pbone = obj.pose.bones[delta_name]
-
- arm = obj.data
- child_pbone = obj.pose.bones[child_name]
-
- delta_phead = delta_pbone.head.copy()
- delta_ptail = delta_pbone.tail.copy()
- delta_pmatrix = delta_pbone.matrix.copy()
-
- child_phead = child_pbone.head.copy()
- child_ptail = child_pbone.tail.copy()
- child_pmatrix = child_pbone.matrix.copy()
-
-
- children = delta_pbone.children
-
- bpy.ops.object.mode_set(mode='EDIT')
-
- delta_ebone = arm.edit_bones[delta_name]
- child_ebone = arm.edit_bones[child_name]
-
- delta_head = delta_ebone.head.copy()
- delta_tail = delta_ebone.tail.copy()
-
- child_head = child_ebone.head.copy()
- child_tail = child_ebone.tail.copy()
-
- #arm.edit_bones.remove(delta_ebone)
- #del delta_ebone # cant use this
- del child_pbone
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
-
- # Move the child bone to the deltas location
- obj.animation_data_create()
- delta_pbone = obj.pose.bones[delta_name]
- # child_pbone = obj.pose.bones[child_name]
-
- # ------------------- drivers
-
- delta_pbone.rotation_mode = 'XYZ'
-
- rot = delta_pmatrix.invert().rotation_part() * child_pmatrix.rotation_part()
- rot = rot.invert().to_euler()
-
- fcurve_drivers = delta_pbone.driver_add("rotation_euler", -1)
- for i, fcurve_driver in enumerate(fcurve_drivers):
- driver = fcurve_driver.driver
- driver.type = 'AVERAGE'
- #mod = fcurve_driver.modifiers.new('GENERATOR')
- mod = fcurve_driver.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = rot[i]
- mod.coefficients[1] = 0.0
-
- # tricky, find the transform to drive the bone to this location.
- delta_head_offset = child_pmatrix.rotation_part() * (delta_phead - child_phead)
-
- fcurve_drivers = delta_pbone.driver_add("location", -1)
- for i, fcurve_driver in enumerate(fcurve_drivers):
- driver = fcurve_driver.driver
- driver.type = 'AVERAGE'
- #mod = fcurve_driver.modifiers.new('GENERATOR')
- mod = fcurve_driver.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = delta_head_offset[i]
- mod.coefficients[1] = 0.0
-
-
- bpy.ops.object.mode_set(mode='EDIT')
-
- bpy.ops.object.mode_set(mode=mode_orig)
-
- # no blendeing
- return None
diff --git a/release/scripts/modules/rigify/eye_balls.py b/release/scripts/modules/rigify/eye_balls.py
deleted file mode 100644
index 127ee87123f..00000000000
--- a/release/scripts/modules/rigify/eye_balls.py
+++ /dev/null
@@ -1,405 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rna_prop_ui import rna_idprop_ui_prop_get
-from mathutils import Vector
-from rigify import RigifyError
-from rigify_utils import copy_bone_simple
-
-#METARIG_NAMES = ("cpy",)
-RIG_TYPE = "eye_balls"
-
-def addget_shape_key(obj, name="Key"):
- """ Fetches a shape key, or creates it if it doesn't exist
- """
- # Create a shapekey set if it doesn't already exist
- if obj.data.shape_keys is None:
- shape = obj.add_shape_key(name="Basis", from_mix=False)
- obj.active_shape_key_index = 0
-
- # Get the shapekey, or create it if it doesn't already exist
- if name in obj.data.shape_keys.keys:
- shape_key = obj.data.shape_keys.keys[name]
- else:
- shape_key = obj.add_shape_key(name=name, from_mix=False)
-
- return shape_key
-
-
-def addget_shape_key_driver(obj, name="Key"):
- """ Fetches the driver for the shape key, or creates it if it doesn't
- already exist.
- """
- driver_path = 'keys["' + name + '"].value'
- fcurve = None
- driver = None
- new = False
- if obj.data.shape_keys.animation_data is not None:
- for driver_s in obj.data.shape_keys.animation_data.drivers:
- if driver_s.data_path == driver_path:
- fcurve = driver_s
- if fcurve is None:
- fcurve = obj.data.shape_keys.keys[name].driver_add("value")
- fcurve.driver.type = 'AVERAGE'
- new = True
-
- return fcurve, new
-
-
-def create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression):
- """ Creates/gets a shape key and sets up a driver for it.
-
- obj = armature object
- bone = driving bone name
- meshes = list of meshes to create the shapekey/driver on
- shape_name = name of the shape key
- var_name = name of the driving variable
- var_path = path to the property on the bone to drive with
- expression = python expression for the driver
- """
- pb = obj.pose.bones
- bpy.ops.object.mode_set(mode='OBJECT')
-
- for mesh_name in meshes:
- mesh_obj = bpy.data.objects[mesh_name]
-
- # Add/get the shape key
- shape = addget_shape_key(mesh_obj, name=shape_name)
-
- # Add/get the shape key driver
- fcurve, a = addget_shape_key_driver(mesh_obj, name=shape_name)
-
- # Set up the driver
- driver = fcurve.driver
- driver.type = 'SCRIPTED'
- driver.expression = expression
-
- # Get the variable, or create it if it doesn't already exist
- if var_name in driver.variables:
- var = driver.variables[var_name]
- else:
- var = driver.variables.new()
- var.name = var_name
-
- # Set up the variable
- var.type = "SINGLE_PROP"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = 'pose.bones["' + bone + '"]' + var_path
-
-
-def mark_actions():
- for action in bpy.data.actions:
- action.tag = True
-
-def get_unmarked_action():
- for action in bpy.data.actions:
- if action.tag != True:
- return action
- return None
-
-def add_action(name=None):
- mark_actions()
- bpy.ops.action.new()
- action = get_unmarked_action()
- if name is not None:
- action.name = name
- return action
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('Bone')
- bone.head[:] = 0.0000, 0.0000, 0.0000
- bone.tail[:] = 0.0000, 0.0000, 1.0000
- bone.roll = 0.0000
- bone.use_connect = False
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['Bone']
- pbone['type'] = 'copy'
-
-
-def metarig_definition(obj, orig_bone_name):
- bone = obj.data.bones[orig_bone_name]
- chain = []
-
- try:
- chain += [bone.parent.name, bone.name]
- except AttributeError:
- raise RigifyError("'%s' rig type requires a parent (bone: %s)" % (RIG_TYPE, orig_bone_name))
-
- return chain
-
-
-def deform(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- eb = obj.data.edit_bones
- pb = obj.pose.bones
-
- # Get list of eyes
- if "eyes" in options:
- eye_base_names = options["eyes"].replace(" ", "").split(",")
- else:
- eye_base_names = []
-
- # Get their ORG- names
- eyes = []
- for name in eye_base_names:
- eyes += ["ORG-"+name]
-
- # Duplicate the eyes to make deformation bones
- def_eyes = [] # def/org pairs
- for eye in eyes:
- def_eyes += [(copy_bone_simple(obj.data, eye, "DEF-"+base_names[eye], parent=True).name, eye)]
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Constraints
- for eye in def_eyes:
- con = pb[eye[0]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = eye[1]
-
- return (None,)
-
-
-
-
-def control(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- eb = obj.data.edit_bones
- bb = obj.data.bones
- pb = obj.pose.bones
-
- head = definitions[0]
- eye_target = definitions[1]
-
- # Get list of pupil mesh objects
- if "mesh" in options:
- pupil_meshes = options["mesh"].replace(" ", "").split(",")
- else:
- pupil_meshes = []
-
- # Get list of eyes
- if "eyes" in options:
- eye_base_names = options["eyes"].replace(" ", "").split(",")
- else:
- eye_base_names = []
-
- # Get their ORG- names
- eyes = []
- for name in eye_base_names:
- eyes += ["ORG-"+name]
-
- # Get the average position of the eyes
- center = Vector((0, 0, 0))
- for eye in eyes:
- center += eb[eye].head
- if len(eyes) != 0:
- center /= len(eyes)
-
- # Get the average length of the eyes
- length = 0.0
- for eye in eyes:
- length += eb[eye].length
- if len(eyes) == 0:
- length = 1.0
- else:
- length /= len(eyes)
-
-
- # Make the mind's eye
- minds_eye = copy_bone_simple(obj.data, eye_target, "MCH-"+base_names[eye_target]+".mind", parent=True).name
- eb[minds_eye].head = center
- eb[minds_eye].tail = eb[eye_target].head
- eb[minds_eye].roll = 0.0
- eb[minds_eye].length = length
-
- # Create org/copy/control eye sets
- eye_sets = []
- for eye in eyes:
- copy = copy_bone_simple(obj.data, minds_eye, "MCH-"+base_names[eye]+".cpy", parent=True).name
- eb[copy].translate(eb[eye].head - eb[copy].head)
- eb[copy].parent = eb[eye].parent
-
- control = copy_bone_simple(obj.data, eye, base_names[eye], parent=True).name
- eb[control].parent = eb[copy]
-
- eye_sets += [(eye, copy, control)]
-
- # Bones for parent/free switch for eye target
- target_ctrl = copy_bone_simple(obj.data, eye_target, base_names[eye_target], parent=True).name
- parent = copy_bone_simple(obj.data, head, "MCH-eye_target_parent", parent=False).name
-
- eb[target_ctrl].parent = eb[parent]
-
-
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Axis locks
- pb[target_ctrl].lock_scale = False, True, True
-
- # Add eye_spread action if it doesn't already exist
- action_name = "eye_spread"
- if action_name in bpy.data.actions:
- spread_action = bpy.data.actions[action_name]
- else:
- spread_action = add_action(name=action_name)
-
- # Add free property
- prop_name = "free"
- prop = rna_idprop_ui_prop_get(pb[target_ctrl], prop_name, create=True)
- pb[target_ctrl][prop_name] = 0.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
- prop["min"] = 0.0
- prop["max"] = 1.0
-
- free_driver_path = pb[target_ctrl].path_from_id() + '["free"]'
-
- # Constraints
- # Mind's eye tracks eye target control
- con = pb[minds_eye].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = target_ctrl
-
- # Parent copies transforms of head
- con = pb[parent].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = head
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- mod = fcurve.modifiers[0]
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
- var = driver.variables.new()
- var.name = "free"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = free_driver_path
-
- # Eye set's constraints
- for eye in eye_sets:
- # Org copies transforms of control
- con = pb[eye[0]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = eye[2]
-
- # Copy copies rotation of mind's eye
- con = pb[eye[1]].constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = minds_eye
-
- # Control gets action constraint for eye spread
- con = pb[eye[2]].constraints.new('ACTION')
- con.target = obj
- con.subtarget = target_ctrl
- con.action = spread_action
- con.transform_channel = 'SCALE_X'
- con.frame_start = -20
- con.frame_end = 20
- con.min = 0.0
- con.max = 2.0
- con.target_space = 'LOCAL'
-
-
- # Get/create the shape keys and drivers for pupil dilation
- shape_names = ["PUPILS-dilate_wide", "PUPILS-dilate_narrow"]
- slider_name = "pupil_dilate"
-
- # Set up the custom property on the bone
- prop = rna_idprop_ui_prop_get(pb[target_ctrl], slider_name, create=True)
- pb[target_ctrl][slider_name] = 0.0
- prop["min"] = 0.0
- prop["max"] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
- if len(shape_names) > 1:
- prop["min"] = -1.0
- prop["soft_min"] = -1.0
-
- # Add the shape drivers
- # Positive
- if shape_names[0] != "":
- # Set up the variables for creating the shape key driver
- shape_name = shape_names[0]
- var_name = slider_name.replace(".", "_").replace("-", "_")
- var_path = '["' + slider_name + '"]'
- if slider_name + "_fac" in options:
- fac = options[slider_name + "_fac"]
- else:
- fac = 1.0
- expression = var_name + " * " + str(fac)
- # Create the shape key driver
- create_shape_and_driver(obj, target_ctrl, pupil_meshes, shape_name, var_name, var_path, expression)
- # Negative
- if shape_names[0] != "" and len(shape_names) > 1:
- # Set up the variables for creating the shape key driver
- shape_name = shape_names[1]
- var_name = slider_name.replace(".", "_").replace("-", "_")
- var_path = '["' + slider_name + '"]'
- if slider_name + "_fac" in options:
- fac = options[slider_name + "_fac"]
- else:
- fac = 1.0
- expression = var_name + " * " + str(fac) + " * -1"
- # Create the shape key driver
- create_shape_and_driver(obj, target_ctrl, pupil_meshes, shape_name, var_name, var_path, expression)
-
-
-
- # Set layers
- #layer = list(bb[definitions[2]].layers)
- #bb[lid1].layers = layer
- #bb[lid2].layers = layer
- #bb[lid3].layers = layer
- #bb[lid4].layers = layer
- #bb[lid5].layers = layer
- #bb[lid6].layers = layer
- #bb[lid7].layers = layer
- #bb[lid8].layers = layer
-
-
- return (None,)
-
-
-
-
-def main(obj, bone_definition, base_names, options):
- # Create control rig
- control(obj, bone_definition, base_names, options)
- # Create deform rig
- deform(obj, bone_definition, base_names, options)
-
- return (None,)
-
diff --git a/release/scripts/modules/rigify/eye_lid.py b/release/scripts/modules/rigify/eye_lid.py
deleted file mode 100644
index 3f336e268c6..00000000000
--- a/release/scripts/modules/rigify/eye_lid.py
+++ /dev/null
@@ -1,687 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rna_prop_ui import rna_idprop_ui_prop_get
-from math import acos
-from mathutils import Vector
-from rigify import RigifyError
-from rigify_utils import copy_bone_simple
-
-#METARIG_NAMES = ("cpy",)
-RIG_TYPE = "eye_lid"
-
-def mark_actions():
- for action in bpy.data.actions:
- action.tag = True
-
-def get_unmarked_action():
- for action in bpy.data.actions:
- if action.tag != True:
- return action
- return None
-
-def add_action(name=None):
- mark_actions()
- bpy.ops.action.new()
- action = get_unmarked_action()
- if name is not None:
- action.name = name
- return action
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('Bone')
- bone.head[:] = 0.0000, 0.0000, 0.0000
- bone.tail[:] = 0.0000, 0.0000, 1.0000
- bone.roll = 0.0000
- bone.use_connect = False
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['Bone']
- pbone['type'] = 'copy'
-
-
-def metarig_definition(obj, orig_bone_name):
- bb = obj.data.bones
- bone = bb[orig_bone_name]
- chain = []
-
- try:
- chain += [bone.parent.parent.name, bone.parent.name, bone.name]
- except AttributeError:
- raise RigifyError("'%s' rig type requires a chain of two parents (bone: %s)" % (RIG_TYPE, orig_bone_name))
-
- chain += [child.name for child in bone.children_recursive_basename]
-
- if len(chain) < 10:
- raise RigifyError("'%s' rig type requires a chain of 10 bones (bone: %s)" % (RIG_TYPE, orig_bone_name))
-
- chain = chain[:10]
-
- try:
- chain += [bb[chain[9]].children[0].name]
- chain += [bb[chain[10]].children[0].name]
- except IndexError:
- raise RigifyError("'%s' rig type requires a chain of 10 bones (bone: %s)" % (RIG_TYPE, orig_bone_name))
-
- return chain
-
-
-def deform(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- eb = obj.data.edit_bones
- pb = obj.pose.bones
-
-
- # Upper lid MCH
- lid1 = make_lid_stretch_bone(obj, "MCH-lid", definitions[2], definitions[3], 1.0)
- lid2 = make_lid_stretch_bone(obj, "MCH-lid", definitions[3], definitions[4], 1.0)
- lid22 = make_lid_stretch_bone(obj, "MCH-lid", definitions[4], definitions[5], 1.0)
- lid33 = make_lid_stretch_bone(obj, "MCH-lid", definitions[4], definitions[3], 1.0)
- lid3 = make_lid_stretch_bone(obj, "MCH-lid", definitions[5], definitions[4], 1.0)
- lid4 = make_lid_stretch_bone(obj, "MCH-lid", definitions[6], definitions[5], 1.0)
-
- dlid22 = copy_bone_simple(obj.data, lid22, "MCH-lid", parent=True).name
- dlid33 = copy_bone_simple(obj.data, lid33, "MCH-lid", parent=True).name
- eb[dlid22].bbone_segments = 8
- eb[dlid33].bbone_segments = 8
-
- eb[lid1].parent = eb[definitions[2]]
- eb[lid2].parent = eb[definitions[3]]
- eb[lid22].parent = eb[definitions[4]]
- eb[lid33].parent = eb[definitions[4]]
- eb[lid3].parent = eb[definitions[5]]
- eb[lid4].parent = eb[definitions[6]]
-
- # Lower lid MCH
- lid5 = make_lid_stretch_bone(obj, "MCH-lid", definitions[6], definitions[7], 1.0)
- lid6 = make_lid_stretch_bone(obj, "MCH-lid", definitions[7], definitions[8], 1.0)
- lid66 = make_lid_stretch_bone(obj, "MCH-lid", definitions[8], definitions[9], 1.0)
- lid77 = make_lid_stretch_bone(obj, "MCH-lid", definitions[8], definitions[7], 1.0)
- lid7 = make_lid_stretch_bone(obj, "MCH-lid", definitions[9], definitions[8], 1.0)
- lid8 = make_lid_stretch_bone(obj, "MCH-lid", definitions[2], definitions[9], 1.0)
-
- dlid66 = copy_bone_simple(obj.data, lid66, "MCH-lid", parent=True).name
- dlid77 = copy_bone_simple(obj.data, lid77, "MCH-lid", parent=True).name
- eb[dlid66].bbone_segments = 8
- eb[dlid77].bbone_segments = 8
-
- eb[lid5].parent = eb[definitions[6]]
- eb[lid6].parent = eb[definitions[7]]
- eb[lid66].parent = eb[definitions[8]]
- eb[lid77].parent = eb[definitions[8]]
- eb[lid7].parent = eb[definitions[9]]
- eb[lid8].parent = eb[definitions[2]]
-
- # Upper lid DEF
- dlid1 = copy_bone_simple(obj.data, lid1, "DEF-" + base_names[definitions[2]], parent=True).name
- dlid2 = copy_bone_simple(obj.data, lid2, "DEF-" + base_names[definitions[3]], parent=True).name
- dlid3 = copy_bone_simple(obj.data, lid3, "DEF-" + base_names[definitions[4]], parent=True).name
- dlid4 = copy_bone_simple(obj.data, lid4, "DEF-" + base_names[definitions[5]], parent=True).name
-
- eb[dlid2].parent = eb[dlid1]
- eb[dlid22].parent = eb[dlid2]
-
- eb[dlid3].parent = eb[dlid4]
- eb[dlid33].parent = eb[dlid3]
-
- eb[dlid2].use_connect = True
- eb[dlid22].use_connect = True
- eb[dlid3].use_connect = True
- eb[dlid33].use_connect = True
-
- eb[dlid1].bbone_segments = 8
- eb[dlid2].bbone_segments = 8
- eb[dlid3].bbone_segments = 8
- eb[dlid4].bbone_segments = 8
-
- # Lower lid DEF
- dlid5 = copy_bone_simple(obj.data, lid5, "DEF-" + base_names[definitions[6]], parent=True).name
- dlid6 = copy_bone_simple(obj.data, lid6, "DEF-" + base_names[definitions[7]], parent=True).name
- dlid7 = copy_bone_simple(obj.data, lid7, "DEF-" + base_names[definitions[8]], parent=True).name
- dlid8 = copy_bone_simple(obj.data, lid8, "DEF-" + base_names[definitions[9]], parent=True).name
-
- eb[dlid6].parent = eb[dlid5]
- eb[dlid66].parent = eb[dlid6]
-
- eb[dlid7].parent = eb[dlid8]
- eb[dlid77].parent = eb[dlid7]
-
- eb[dlid6].use_connect = True
- eb[dlid66].use_connect = True
- eb[dlid7].use_connect = True
- eb[dlid77].use_connect = True
-
- eb[dlid5].bbone_segments = 8
- eb[dlid6].bbone_segments = 8
- eb[dlid7].bbone_segments = 8
- eb[dlid8].bbone_segments = 8
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Constraints
- con = pb[dlid1].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid1
-
- con = pb[dlid22].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid22
-
- con = pb[dlid33].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid33
-
- con = pb[dlid2].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid2
-
- con = pb[dlid3].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid3
-
- con = pb[dlid4].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid4
-
- con = pb[dlid5].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid5
-
- con = pb[dlid6].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid6
-
- con = pb[dlid66].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid66
-
- con = pb[dlid77].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid77
-
- con = pb[dlid7].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid7
-
- con = pb[dlid8].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lid8
-
- return (None,)
-
-
-
-
-def control(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- eb = obj.data.edit_bones
- bb = obj.data.bones
- pb = obj.pose.bones
-
- head_e = eb[definitions[0]]
- eye_e = eb[definitions[1]]
-
-
- # Make eye "flower"
- flo1 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[2]]+".flower", parent=True).name
- flo2 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[3]]+".flower", parent=True).name
- flo3 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[4]]+".flower", parent=True).name
- flo4 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[5]]+".flower", parent=True).name
- flo5 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[6]]+".flower", parent=True).name
- flo6 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[7]]+".flower", parent=True).name
- flo7 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[8]]+".flower", parent=True).name
- flo8 = copy_bone_simple(obj.data, definitions[1], "MCH-"+base_names[definitions[9]]+".flower", parent=True).name
-
- eb[flo1].tail = eb[definitions[2]].head
- eb[flo2].tail = eb[definitions[3]].head
- eb[flo3].tail = eb[definitions[4]].head
- eb[flo4].tail = eb[definitions[5]].head
- eb[flo5].tail = eb[definitions[6]].head
- eb[flo6].tail = eb[definitions[7]].head
- eb[flo7].tail = eb[definitions[8]].head
- eb[flo8].tail = eb[definitions[9]].head
-
-
- # Make eye lids on tips of flowers
- flid1 = copy_bone_simple(obj.data, definitions[2], "MCH-"+base_names[definitions[2]]).name
- flid2 = copy_bone_simple(obj.data, definitions[3], "MCH-"+base_names[definitions[3]]).name
- flid3 = copy_bone_simple(obj.data, definitions[4], "MCH-"+base_names[definitions[4]]).name
- flid4 = copy_bone_simple(obj.data, definitions[5], "MCH-"+base_names[definitions[5]]).name
- flid5 = copy_bone_simple(obj.data, definitions[6], "MCH-"+base_names[definitions[6]]).name
- flid6 = copy_bone_simple(obj.data, definitions[7], "MCH-"+base_names[definitions[7]]).name
- flid7 = copy_bone_simple(obj.data, definitions[8], "MCH-"+base_names[definitions[8]]).name
- flid8 = copy_bone_simple(obj.data, definitions[9], "MCH-"+base_names[definitions[9]]).name
-
- eb[flid1].parent = eb[flo1]
- eb[flid2].parent = eb[flo2]
- eb[flid3].parent = eb[flo3]
- eb[flid4].parent = eb[flo4]
- eb[flid5].parent = eb[flo5]
- eb[flid6].parent = eb[flo6]
- eb[flid7].parent = eb[flo7]
- eb[flid8].parent = eb[flo8]
-
-
- # Make eye lid controls
- lid1 = copy_bone_simple(obj.data, definitions[2], base_names[definitions[2]]).name
- lid2 = copy_bone_simple(obj.data, definitions[3], base_names[definitions[3]]).name
- lid3 = copy_bone_simple(obj.data, definitions[4], base_names[definitions[4]]).name
- lid4 = copy_bone_simple(obj.data, definitions[5], base_names[definitions[5]]).name
- lid5 = copy_bone_simple(obj.data, definitions[6], base_names[definitions[6]]).name
- lid6 = copy_bone_simple(obj.data, definitions[7], base_names[definitions[7]]).name
- lid7 = copy_bone_simple(obj.data, definitions[8], base_names[definitions[8]]).name
- lid8 = copy_bone_simple(obj.data, definitions[9], base_names[definitions[9]]).name
-
- size = eb[lid1].length
- size_y = Vector(0.0, size, 0.0)
- eb[lid1].tail = eb[lid1].head + size_y
- eb[lid2].tail = eb[lid2].head + size_y
- eb[lid3].tail = eb[lid3].head + size_y
- eb[lid4].tail = eb[lid4].head + size_y
- eb[lid5].tail = eb[lid5].head + size_y
- eb[lid6].tail = eb[lid6].head + size_y
- eb[lid7].tail = eb[lid7].head + size_y
- eb[lid8].tail = eb[lid8].head + size_y
-
- eb[lid1].roll = 0
- eb[lid2].roll = 0
- eb[lid3].roll = 0
- eb[lid4].roll = 0
- eb[lid5].roll = 0
- eb[lid6].roll = 0
- eb[lid7].roll = 0
- eb[lid8].roll = 0
-
- eb[lid1].parent = head_e
- eb[lid2].parent = head_e
- eb[lid3].parent = head_e
- eb[lid4].parent = head_e
- eb[lid5].parent = head_e
- eb[lid6].parent = head_e
- eb[lid7].parent = head_e
- eb[lid8].parent = head_e
-
- lower_lid_ctrl = copy_bone_simple(obj.data, definitions[10], base_names[definitions[10]]).name
- upper_lid_ctrl = copy_bone_simple(obj.data, definitions[11], base_names[definitions[11]]).name
- eb[lower_lid_ctrl].parent = head_e
- eb[upper_lid_ctrl].parent = head_e
- distance = (eb[lower_lid_ctrl].head - eb[upper_lid_ctrl].head).length
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Axis locks
- pb[lower_lid_ctrl].lock_location = True, False, True
- pb[upper_lid_ctrl].lock_location = True, False, True
-
- # Add eye close action if it doesn't already exist
- action_name = "eye_close"
- if action_name in bpy.data.actions:
- close_action = bpy.data.actions[action_name]
- else:
- close_action = add_action(name=action_name)
-
- # Add close property (useful when making the animation in the action)
- prop_name = "close_action"
- prop = rna_idprop_ui_prop_get(pb[upper_lid_ctrl], prop_name, create=True)
- pb[upper_lid_ctrl][prop_name] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
- prop["min"] = 0.0
- prop["max"] = 1.0
-
- close_driver_path = pb[upper_lid_ctrl].path_from_id() + '["close_action"]'
-
- # Constraints
-
- # Flowers track lid controls
- con = pb[flo1].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lid1
-
- con = pb[flo2].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lid2
-
- con = pb[flo3].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lid3
-
- con = pb[flo4].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lid4
-
- con = pb[flo5].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lid5
-
- con = pb[flo6].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lid6
-
- con = pb[flo7].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lid7
-
- con = pb[flo8].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lid8
-
-
- # ORG bones to flower lids
- con = pb[definitions[2]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = flid1
-
- con = pb[definitions[3]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = flid2
-
- con = pb[definitions[4]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = flid3
-
- con = pb[definitions[5]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = flid4
-
- con = pb[definitions[6]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = flid5
-
- con = pb[definitions[7]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = flid6
-
- con = pb[definitions[8]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = flid7
-
- con = pb[definitions[9]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = flid8
-
-
- # Action constraints, upper lid
- con = pb[lid1].constraints.new('ACTION')
- con.target = obj
- con.subtarget = upper_lid_ctrl
- con.action = close_action
- con.transform_channel = 'LOCATION_Y'
- con.frame_start = -30
- con.frame_end = 30
- con.min = -distance*2
- con.max = distance
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = close_driver_path
-
-
- con = pb[lid2].constraints.new('ACTION')
- con.target = obj
- con.subtarget = upper_lid_ctrl
- con.action = close_action
- con.transform_channel = 'LOCATION_Y'
- con.frame_start = -30
- con.frame_end = 30
- con.min = -distance*2
- con.max = distance
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = close_driver_path
-
- con = pb[lid3].constraints.new('ACTION')
- con.target = obj
- con.subtarget = upper_lid_ctrl
- con.action = close_action
- con.transform_channel = 'LOCATION_Y'
- con.frame_start = -30
- con.frame_end = 30
- con.min = -distance*2
- con.max = distance
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = close_driver_path
-
- con = pb[lid4].constraints.new('ACTION')
- con.target = obj
- con.subtarget = upper_lid_ctrl
- con.action = close_action
- con.transform_channel = 'LOCATION_Y'
- con.frame_start = -30
- con.frame_end = 30
- con.min = -distance*2
- con.max = distance
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = close_driver_path
-
- con = pb[lid5].constraints.new('ACTION')
- con.target = obj
- con.subtarget = upper_lid_ctrl
- con.action = close_action
- con.transform_channel = 'LOCATION_Y'
- con.frame_start = -30
- con.frame_end = 30
- con.min = -distance*2
- con.max = distance
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = close_driver_path
-
- # Action constraints, lower lid
- con = pb[lid5].constraints.new('ACTION')
- con.target = obj
- con.subtarget = lower_lid_ctrl
- con.action = close_action
- con.transform_channel = 'LOCATION_Y'
- con.frame_start = -30
- con.frame_end = 30
- con.min = -distance
- con.max = distance*2
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = close_driver_path
-
- con = pb[lid6].constraints.new('ACTION')
- con.target = obj
- con.subtarget = lower_lid_ctrl
- con.action = close_action
- con.transform_channel = 'LOCATION_Y'
- con.frame_start = -30
- con.frame_end = 30
- con.min = -distance
- con.max = distance*2
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = close_driver_path
-
- con = pb[lid7].constraints.new('ACTION')
- con.target = obj
- con.subtarget = lower_lid_ctrl
- con.action = close_action
- con.transform_channel = 'LOCATION_Y'
- con.frame_start = -30
- con.frame_end = 30
- con.min = -distance
- con.max = distance*2
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = close_driver_path
-
- con = pb[lid8].constraints.new('ACTION')
- con.target = obj
- con.subtarget = lower_lid_ctrl
- con.action = close_action
- con.transform_channel = 'LOCATION_Y'
- con.frame_start = -30
- con.frame_end = 30
- con.min = -distance
- con.max = distance*2
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = close_driver_path
-
- con = pb[lid1].constraints.new('ACTION')
- con.target = obj
- con.subtarget = lower_lid_ctrl
- con.action = close_action
- con.transform_channel = 'LOCATION_Y'
- con.frame_start = -30
- con.frame_end = 30
- con.min = -distance
- con.max = distance*2
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = close_driver_path
-
-
-
-
- # Set layers
- layer = list(bb[definitions[2]].layers)
- bb[lid1].layers = layer
- bb[lid2].layers = layer
- bb[lid3].layers = layer
- bb[lid4].layers = layer
- bb[lid5].layers = layer
- bb[lid6].layers = layer
- bb[lid7].layers = layer
- bb[lid8].layers = layer
-
-
- return (None,)
-
-
-
-
-def main(obj, bone_definition, base_names, options):
- # Create control rig
- control(obj, bone_definition, base_names, options)
- # Create deform rig
- deform(obj, bone_definition, base_names, options)
-
- return (None,)
-
-
-
-
-def make_lid_stretch_bone(obj, name, bone1, bone2, roll_alpha):
- eb = obj.data.edit_bones
- pb = obj.pose.bones
-
- # Create the bone, pointing from bone1 to bone2
- bone_e = copy_bone_simple(obj.data, bone1, name, parent=True)
- bone_e.use_connect = False
- bone_e.tail = eb[bone2].head
- bone = bone_e.name
-
- # Align the bone roll with the average direction of bone1 and bone2
- vec = bone_e.y_axis.cross(((1.0-roll_alpha)*eb[bone1].y_axis) + (roll_alpha*eb[bone2].y_axis)).normalize()
-
- ang = acos(vec * bone_e.x_axis)
-
- bone_e.roll += ang
- c1 = vec * bone_e.x_axis
- bone_e.roll -= (ang*2)
- c2 = vec * bone_e.x_axis
-
- if c1 > c2:
- bone_e.roll += (ang*2)
-
- bpy.ops.object.mode_set(mode='OBJECT')
- bone_p = pb[bone]
-
- # Constrains
- con = bone_p.constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = bone1
-
- con = bone_p.constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = bone2
-
- con = bone_p.constraints.new('STRETCH_TO')
- con.target = obj
- con.subtarget = bone2
- con.volume = 'NO_VOLUME'
-
- bpy.ops.object.mode_set(mode='EDIT')
-
- return bone
diff --git a/release/scripts/modules/rigify/finger_curl.py b/release/scripts/modules/rigify/finger_curl.py
deleted file mode 100644
index 947ec75c9f8..00000000000
--- a/release/scripts/modules/rigify/finger_curl.py
+++ /dev/null
@@ -1,378 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import copy_bone_simple, get_side_name
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-METARIG_NAMES = "finger_01", "finger_02", "finger_03"
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('finger.01')
- bone.head[:] = 0.0000, 0.0000, 0.0000
- bone.tail[:] = 0.0353, -0.0184, -0.0053
- bone.roll = -2.8722
- bone.use_connect = False
- bone = arm.edit_bones.new('finger.02')
- bone.head[:] = 0.0353, -0.0184, -0.0053
- bone.tail[:] = 0.0702, -0.0364, -0.0146
- bone.roll = -2.7099
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger.01']
- bone = arm.edit_bones.new('finger.03')
- bone.head[:] = 0.0702, -0.0364, -0.0146
- bone.tail[:] = 0.0903, -0.0461, -0.0298
- bone.roll = -2.1709
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger.02']
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['finger.01']
- pbone['type'] = 'finger_curl'
-
-
-def metarig_definition(obj, orig_bone_name):
- '''
- The bone given is the first in a chain
- Expects a chain with at least 1 child of the same base name.
- eg.
- finger_01 -> finger_02
- '''
-
- orig_bone = obj.data.bones[orig_bone_name]
-
- bone_definition = [orig_bone.name]
-
- bone_definition.extend([child.name for child in orig_bone.children_recursive_basename])
-
- if len(bone_definition) < 2:
- raise RigifyError("expected the chain to have at least 1 child from bone '%s' without the same base name" % orig_bone_name)
-
- return bone_definition
-
-
-def deform(obj, definitions, base_names, options):
- """ Creates the deform rig.
- """
- bpy.ops.object.mode_set(mode='EDIT')
-
- three_digits = True if len(definitions) > 2 else False
-
- # Create base digit bones: two bones, each half of the base digit.
- f1a = copy_bone_simple(obj.data, definitions[0], "DEF-%s.01" % base_names[definitions[0]], parent=True)
- f1b = copy_bone_simple(obj.data, definitions[0], "DEF-%s.02" % base_names[definitions[0]], parent=True)
- f1a.use_connect = False
- f1b.use_connect = False
- f1b.parent = f1a
- center = f1a.center
- f1a.tail = center
- f1b.head = center
-
- # Create the other deform bones.
- f2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s" % base_names[definitions[1]], parent=True)
- if three_digits:
- f3 = copy_bone_simple(obj.data, definitions[2], "DEF-%s" % base_names[definitions[2]], parent=True)
-
- # Store names before leaving edit mode
- f1a_name = f1a.name
- f1b_name = f1b.name
- f2_name = f2.name
- if three_digits:
- f3_name = f3.name
-
- # Leave edit mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Get the pose bones
- f1a = obj.pose.bones[f1a_name]
- f1b = obj.pose.bones[f1b_name]
- f2 = obj.pose.bones[f2_name]
- if three_digits:
- f3 = obj.pose.bones[f3_name]
-
- # Constrain the base digit's bones
- con = f1a.constraints.new('DAMPED_TRACK')
- con.name = "trackto"
- con.target = obj
- con.subtarget = definitions[1]
-
- con = f1a.constraints.new('COPY_SCALE')
- con.name = "copy_scale"
- con.target = obj
- con.subtarget = definitions[0]
-
- con = f1b.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[0]
-
- # Constrain the other digit's bones
- con = f2.constraints.new('COPY_TRANSFORMS')
- con.name = "copy_transforms"
- con.target = obj
- con.subtarget = definitions[1]
-
- if three_digits:
- con = f3.constraints.new('COPY_TRANSFORMS')
- con.name = "copy_transforms"
- con.target = obj
- con.subtarget = definitions[2]
-
-
-def main(obj, bone_definition, base_names, options):
- # *** EDITMODE
- bpy.ops.object.mode_set(mode='EDIT')
-
- three_digits = True if len(bone_definition) > 2 else False
-
- # get assosiated data
- arm = obj.data
- bb = obj.data.bones
- eb = obj.data.edit_bones
- pb = obj.pose.bones
-
- org_f1 = bone_definition[0] # Original finger bone 01
- org_f2 = bone_definition[1] # Original finger bone 02
- if three_digits:
- org_f3 = bone_definition[2] # Original finger bone 03
-
- # Check options
- if "bend_ratio" in options:
- bend_ratio = options["bend_ratio"]
- else:
- bend_ratio = 0.4
-
- yes = [1, 1.0, True, "True", "true", "Yes", "yes"]
- make_hinge = False
- if ("hinge" in options) and (eb[org_f1].parent is not None):
- if options["hinge"] in yes:
- make_hinge = True
-
-
- # Needed if its a new armature with no keys
- obj.animation_data_create()
-
- # Create the control bone
- base_name = base_names[bone_definition[0]].split(".", 1)[0]
- if three_digits:
- tot_len = eb[org_f1].length + eb[org_f2].length + eb[org_f3].length
- else:
- tot_len = eb[org_f1].length + eb[org_f2].length
- control = copy_bone_simple(arm, bone_definition[0], base_name + get_side_name(base_names[bone_definition[0]]), parent=True).name
- eb[control].use_connect = eb[org_f1].use_connect
- eb[control].parent = eb[org_f1].parent
- eb[control].length = tot_len
-
- # Create secondary control bones
- f1 = copy_bone_simple(arm, bone_definition[0], base_names[bone_definition[0]]).name
- f2 = copy_bone_simple(arm, bone_definition[1], base_names[bone_definition[1]]).name
- if three_digits:
- f3 = copy_bone_simple(arm, bone_definition[2], base_names[bone_definition[2]]).name
-
- # Create driver bones
- df1 = copy_bone_simple(arm, bone_definition[0], "MCH-" + base_names[bone_definition[0]]).name
- eb[df1].length /= 2
- df2 = copy_bone_simple(arm, bone_definition[1], "MCH-" + base_names[bone_definition[1]]).name
- eb[df2].length /= 2
- if three_digits:
- df3 = copy_bone_simple(arm, bone_definition[2], "MCH-" + base_names[bone_definition[2]]).name
- eb[df3].length /= 2
-
- # Set parents of the bones, interleaving the driver bones with the secondary control bones
- if three_digits:
- eb[f3].use_connect = False
- eb[df3].use_connect = False
- eb[f2].use_connect = False
- eb[df2].use_connect = False
- eb[f1].use_connect = False
- eb[df1].use_connect = eb[org_f1].use_connect
-
- if three_digits:
- eb[f3].parent = eb[df3]
- eb[df3].parent = eb[f2]
- eb[f2].parent = eb[df2]
- eb[df2].parent = eb[f1]
- eb[f1].parent = eb[df1]
- eb[df1].parent = eb[org_f1].parent
-
- # Set up bones for hinge
- if make_hinge:
- socket = copy_bone_simple(arm, org_f1, "MCH-socket_"+control, parent=True).name
- hinge = copy_bone_simple(arm, eb[org_f1].parent.name, "MCH-hinge_"+control).name
-
- eb[control].use_connect = False
- eb[control].parent = eb[hinge]
-
- # Create the deform rig while we're still in edit mode
- deform(obj, bone_definition, base_names, options)
-
-
- # *** POSEMODE
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Set rotation modes and axis locks
- pb[control].rotation_mode = obj.pose.bones[bone_definition[0]].rotation_mode
- pb[control].lock_location = True, True, True
- pb[control].lock_scale = True, False, True
- pb[f1].rotation_mode = 'YZX'
- pb[f2].rotation_mode = 'YZX'
- if three_digits:
- pb[f3].rotation_mode = 'YZX'
- pb[f1].lock_location = True, True, True
- pb[f2].lock_location = True, True, True
- if three_digits:
- pb[f3].lock_location = True, True, True
- pb[df2].rotation_mode = 'YZX'
- if three_digits:
- pb[df3].rotation_mode = 'YZX'
-
- # Add the bend_ratio property to the control bone
- pb[control]["bend_ratio"] = bend_ratio
- prop = rna_idprop_ui_prop_get(pb[control], "bend_ratio", create=True)
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- # Add hinge property to the control bone
- if make_hinge:
- pb[control]["hinge"] = 0.0
- prop = rna_idprop_ui_prop_get(pb[control], "hinge", create=True)
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- # Constraints
- con = pb[df1].constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = control
-
- con = pb[df1].constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = control
-
- con = pb[org_f1].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = f1
-
- con = pb[org_f2].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = f2
-
- if three_digits:
- con = pb[org_f3].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = f3
-
- if make_hinge:
- con = pb[hinge].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = bb[org_f1].parent.name
-
- hinge_driver_path = pb[control].path_from_id() + '["hinge"]'
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = hinge_driver_path
-
- mod = fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
- con = pb[control].constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = socket
-
- # Create the drivers for the driver bones (control bone scale rotates driver bones)
- controller_path = pb[control].path_from_id() # 'pose.bones["%s"]' % control_bone_name
-
- if three_digits:
- finger_digits = [df2, df3]
- else:
- finger_digits = [df2]
-
- i = 0
- for bone in finger_digits:
-
- # XXX - todo, any number
- if i == 2:
- break
-
- pbone = pb[bone]
-
- pbone.rotation_mode = 'YZX'
- fcurve_driver = pbone.driver_add("rotation_euler", 0)
-
- #obj.driver_add('pose.bones["%s"].scale', 1)
- #obj.animation_data.drivers[-1] # XXX, WATCH THIS
- driver = fcurve_driver.driver
-
- # scale target
- var = driver.variables.new()
- var.name = "scale"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = controller_path + '.scale[1]'
-
- # bend target
- var = driver.variables.new()
- var.name = "br"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = controller_path + '["bend_ratio"]'
-
- # XXX - todo, any number
- if three_digits:
- if i == 0:
- driver.expression = '(-scale+1.0)*pi*2.0*(1.0-br)'
- elif i == 1:
- driver.expression = '(-scale+1.0)*pi*2.0*br'
- else:
- driver.expression = driver.expression = '(-scale+1.0)*pi*2.0'
-
- i += 1
-
- # Last step setup layers
- if "ex_layer" in options:
- layer = [n==options["ex_layer"] for n in range(0,32)]
- else:
- layer = list(arm.bones[bone_definition[0]].layers)
- #for bone_name in [f1, f2, f3]:
- # arm.bones[bone_name].layers = layer
- arm.bones[f1].layers = layer
- arm.bones[f2].layers = layer
- if three_digits:
- arm.bones[f3].layers = layer
-
- layer = list(arm.bones[bone_definition[0]].layers)
- bb[control].layers = layer
-
- # no blending the result of this
- return None
-
diff --git a/release/scripts/modules/rigify/leg_biped.py b/release/scripts/modules/rigify/leg_biped.py
deleted file mode 100644
index d2ddba9f549..00000000000
--- a/release/scripts/modules/rigify/leg_biped.py
+++ /dev/null
@@ -1,501 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from math import pi
-from rigify import RigifyError
-from rigify_utils import bone_class_instance, copy_bone_simple, blend_bone_list, get_side_name, get_base_name
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-METARIG_NAMES = "hips", "thigh", "shin", "foot", "toe", "heel"
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('hips')
- bone.head[:] = 0.0000, 0.0000, 0.0000
- bone.tail[:] = 0.0000, 0.0000, 0.2506
- bone.roll = 0.0000
- bone.use_connect = False
- bone = arm.edit_bones.new('thigh')
- bone.head[:] = 0.1253, 0.0000, -0.0000
- bone.tail[:] = 0.0752, -0.0251, -0.4260
- bone.roll = 0.1171
- bone.use_connect = False
- bone.parent = arm.edit_bones['hips']
- bone = arm.edit_bones.new('shin')
- bone.head[:] = 0.0752, -0.0251, -0.4260
- bone.tail[:] = 0.0752, 0.0000, -0.8771
- bone.roll = 0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['thigh']
- bone = arm.edit_bones.new('foot')
- bone.head[:] = 0.0752, 0.0000, -0.8771
- bone.tail[:] = 0.1013, -0.1481, -0.9773
- bone.roll = -0.4662
- bone.use_connect = True
- bone.parent = arm.edit_bones['shin']
- bone = arm.edit_bones.new('toe')
- bone.head[:] = 0.1013, -0.1481, -0.9773
- bone.tail[:] = 0.1100, -0.2479, -0.9773
- bone.roll = 3.1416
- bone.use_connect = True
- bone.parent = arm.edit_bones['foot']
- bone = arm.edit_bones.new('heel')
- bone.head[:] = 0.0652, 0.0501, -1.0024
- bone.tail[:] = 0.0927, -0.1002, -1.0024
- bone.roll = 0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones['foot']
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['thigh']
- pbone['type'] = 'leg_biped'
-
-
-def metarig_definition(obj, orig_bone_name):
- '''
- The bone given is the first in a chain
- Expects a chain of at least 3 children.
- eg.
- thigh -> shin -> foot -> [toe, heel]
- '''
-
- bone_definition = []
-
- orig_bone = obj.data.bones[orig_bone_name]
- orig_bone_parent = orig_bone.parent
-
- if orig_bone_parent is None:
- raise RigifyError("expected the thigh bone to have a parent hip bone")
-
- bone_definition.append(orig_bone_parent.name)
- bone_definition.append(orig_bone.name)
-
-
- bone = orig_bone
- chain = 0
- while chain < 2: # first 2 bones only have 1 child
- children = bone.children
-
- if len(children) != 1:
- raise RigifyError("expected the thigh bone to have 3 children without a fork")
- bone = children[0]
- bone_definition.append(bone.name) # shin, foot
- chain += 1
-
- children = bone.children
- # Now there must be 2 children, only one connected
- if len(children) != 2:
- raise RigifyError("expected the foot bone:'%s' to have 2 children" % bone.name)
-
- if children[0].use_connect == children[1].use_connect:
- raise RigifyError("expected one bone to be connected")
-
- toe, heel = children
- if heel.use_connect:
- toe, heel = heel, toe
-
-
- bone_definition.append(toe.name)
- bone_definition.append(heel.name)
-
- if len(bone_definition) != len(METARIG_NAMES):
- raise RigifyError("internal problem, expected %d bones" % len(METARIG_NAMES))
-
- return bone_definition
-
-
-def ik(obj, bone_definition, base_names, options):
- arm = obj.data
-
- # setup the existing bones, use names from METARIG_NAMES
- mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"])
- mt = bone_class_instance(obj, ["hips", "heel"])
-
- mt.attr_initialize(METARIG_NAMES, bone_definition)
- mt_chain.attr_initialize(METARIG_NAMES, bone_definition)
-
- # children of ik_foot
- ik = bone_class_instance(obj, ["foot", "foot_roll", "foot_roll_01", "foot_roll_02", "knee_target"])
-
- # Make a new chain
- ik_chain = mt_chain.copy(to_fmt="MCH-%s", base_names=base_names)
-
- # simple rename
- ik_chain.rename("thigh", ik_chain.thigh + "_ik")
- ik_chain.rename("shin", ik_chain.shin + "_ik")
-
- # make sure leg is child of hips
- ik_chain.thigh_e.parent = mt.hips_e
-
- # ik foot: no parents
- base_foot_name = get_base_name(base_names[mt_chain.foot])
- ik.foot_e = copy_bone_simple(arm, mt.heel, base_foot_name + "_ik" + get_side_name(base_names[mt_chain.foot]))
- ik.foot = ik.foot_e.name
- ik.foot_e.translate(mt_chain.foot_e.head - ik.foot_e.head)
- ik.foot_e.use_local_location = False
-
- # foot roll: heel pointing backwards, half length
- ik.foot_roll_e = copy_bone_simple(arm, mt.heel, base_foot_name + "_roll" + get_side_name(base_names[mt_chain.foot]))
- ik.foot_roll = ik.foot_roll_e.name
- ik.foot_roll_e.tail = ik.foot_roll_e.head - ik.foot_roll_e.vector / 2.0
- ik.foot_roll_e.parent = ik.foot_e # heel is disconnected
-
- # heel pointing forwards to the toe base, parent of the following 2 bones
- ik.foot_roll_01_e = copy_bone_simple(arm, mt.heel, "MCH-%s_roll.01" % base_foot_name)
- ik.foot_roll_01 = ik.foot_roll_01_e.name
- ik.foot_roll_01_e.tail = mt_chain.foot_e.tail
- ik.foot_roll_01_e.parent = ik.foot_e # heel is disconnected
-
- # same as above but reverse direction
- ik.foot_roll_02_e = copy_bone_simple(arm, mt.heel, "MCH-%s_roll.02" % base_foot_name)
- ik.foot_roll_02 = ik.foot_roll_02_e.name
- ik.foot_roll_02_e.parent = ik.foot_roll_01_e # heel is disconnected
- ik.foot_roll_02_e.head = mt_chain.foot_e.tail
- ik.foot_roll_02_e.tail = mt.heel_e.head
-
- del base_foot_name
-
- # rename 'MCH-toe' --> to 'toe_ik' and make the child of ik.foot_roll_01
- # ------------------ FK or IK?
- ik_chain.rename("toe", get_base_name(base_names[mt_chain.toe]) + "_ik" + get_side_name(base_names[mt_chain.toe]))
- ik_chain.toe_e.use_connect = False
- ik_chain.toe_e.parent = ik.foot_roll_01_e
-
- # re-parent ik_chain.foot to the
- ik_chain.foot_e.use_connect = False
- ik_chain.foot_e.parent = ik.foot_roll_02_e
-
-
- # knee target is the heel moved up and forward on its local axis
- ik.knee_target_e = copy_bone_simple(arm, mt.heel, "knee_target" + get_side_name(mt.heel))
- ik.knee_target = ik.knee_target_e.name
- offset = ik.knee_target_e.tail - ik.knee_target_e.head
- offset.z = 0
- offset.length = mt_chain.shin_e.head.z - mt.heel_e.head.z
- offset.z += offset.length
- ik.knee_target_e.translate(offset)
- ik.knee_target_e.length *= 0.5
- ik.knee_target_e.parent = ik.foot_e
- ik.knee_target_e.use_local_location = False
-
- # roll the bone to point up... could also point in the same direction as ik.foot_roll
- # ik.foot_roll_02_e.matrix * Vector((0.0, 0.0, 1.0)) # ACK!, no rest matrix in editmode
- ik.foot_roll_01_e.align_roll((0.0, 0.0, -1.0))
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- ik.update()
- mt_chain.update()
- ik_chain.update()
-
- # Set IK dof
- ik_chain.shin_p.lock_ik_x = False
- ik_chain.shin_p.lock_ik_y = True
- ik_chain.shin_p.lock_ik_z = True
-
- # Set rotation modes and axis locks
- ik.foot_roll_p.rotation_mode = 'XYZ'
- ik.foot_roll_p.lock_rotation = False, True, True
- ik_chain.toe_p.rotation_mode = 'YXZ'
- ik_chain.toe_p.lock_rotation = False, True, True
- ik_chain.toe_p.lock_location = True, True, True
- ik.foot_roll_p.lock_location = True, True, True
-
- # IK
- con = ik_chain.shin_p.constraints.new('IK')
- con.chain_count = 2
- con.iterations = 500
- con.pole_angle = -pi / 2.0
- con.use_tail = True
- con.use_stretch = True
- con.use_target = True
- con.use_rotation = False
- con.weight = 1.0
-
- con.target = obj
- con.subtarget = ik_chain.foot
-
- con.pole_target = obj
- con.pole_subtarget = ik.knee_target
-
- # foot roll
- cons = [ \
- (ik.foot_roll_01_p.constraints.new('COPY_ROTATION'), ik.foot_roll_01_p.constraints.new('LIMIT_ROTATION')), \
- (ik.foot_roll_02_p.constraints.new('COPY_ROTATION'), ik.foot_roll_02_p.constraints.new('LIMIT_ROTATION'))]
-
- for con, con_l in cons:
- con.target = obj
- con.subtarget = ik.foot_roll
- con.use_x, con.use_y, con.use_z = True, False, False
- con.target_space = con.owner_space = 'LOCAL'
-
- con = con_l
- con.use_limit_x, con.use_limit_y, con.use_limit_z = True, False, False
- con.owner_space = 'LOCAL'
-
- if con_l is cons[-1][-1]:
- con.min_x = 0.0
- con.max_x = 180.0 # XXX -deg
- else:
- con.min_x = -180.0 # XXX -deg
- con.max_x = 0.0
-
-
- # last step setup layers
- if "ik_layer" in options:
- layer = [n == options["ik_layer"] for n in range(0, 32)]
- else:
- layer = list(mt_chain.thigh_b.layers)
- for attr in ik_chain.attr_names:
- getattr(ik_chain, attr + "_b").layers = layer
- for attr in ik.attr_names:
- getattr(ik, attr + "_b").layers = layer
-
- bpy.ops.object.mode_set(mode='EDIT')
-
- return (None, ik_chain.thigh, ik_chain.shin, ik_chain.foot, ik_chain.toe, None, ik.foot)
-
-
-def fk(obj, bone_definition, base_names, options):
- from mathutils import Vector
- arm = obj.data
-
- # these account for all bones in METARIG_NAMES
- mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"])
- mt = bone_class_instance(obj, ["hips", "heel"])
-
- # new bones
- ex = bone_class_instance(obj, ["thigh_socket", "thigh_hinge"])
-
- for bone_class in (mt, mt_chain):
- for attr in bone_class.attr_names:
- i = METARIG_NAMES.index(attr)
- ebone = arm.edit_bones[bone_definition[i]]
- setattr(bone_class, attr, ebone.name)
- bone_class.update()
-
- ex.thigh_socket_e = copy_bone_simple(arm, mt_chain.thigh, "MCH-%s_socket" % base_names[mt_chain.thigh], parent=True)
- ex.thigh_socket = ex.thigh_socket_e.name
- ex.thigh_socket_e.tail = ex.thigh_socket_e.head + Vector((0.0, 0.0, ex.thigh_socket_e.length / 4.0))
-
- ex.thigh_hinge_e = copy_bone_simple(arm, mt.hips, "MCH-%s_hinge" % base_names[mt_chain.thigh], parent=False)
- ex.thigh_hinge = ex.thigh_hinge_e.name
-
- fk_chain = mt_chain.copy(base_names=base_names) # fk has no prefix!
- fk_chain.foot_e.name = "MCH-" + fk_chain.foot
- fk_chain.foot = fk_chain.foot_e.name
-
- # Set up fk foot control
- foot_e = copy_bone_simple(arm, mt.heel, base_names[mt_chain.foot])
- foot = foot_e.name
- foot_e.translate(mt_chain.foot_e.head - foot_e.head)
- foot_e.parent = fk_chain.shin_e
- foot_e.use_connect = fk_chain.foot_e.use_connect
- fk_chain.foot_e.use_connect = False
- fk_chain.foot_e.parent = foot_e
-
- fk_chain.thigh_e.use_connect = False
- fk_chain.thigh_e.parent = ex.thigh_hinge_e
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- ex.update()
- mt_chain.update()
- fk_chain.update()
- foot_p = obj.pose.bones[foot]
-
- # Set rotation modes and axis locks
- fk_chain.shin_p.rotation_mode = 'XYZ'
- fk_chain.shin_p.lock_rotation = False, True, True
- foot_p.rotation_mode = 'YXZ'
- fk_chain.toe_p.rotation_mode = 'YXZ'
- fk_chain.toe_p.lock_rotation = False, True, True
- fk_chain.thigh_p.lock_location = True, True, True
-
- con = fk_chain.thigh_p.constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = ex.thigh_socket
-
- # hinge
- prop = rna_idprop_ui_prop_get(fk_chain.thigh_p, "hinge", create=True)
- fk_chain.thigh_p["hinge"] = 0.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- con = ex.thigh_hinge_p.constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = mt.hips
-
- # add driver
- hinge_driver_path = fk_chain.thigh_p.path_from_id() + '["hinge"]'
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = hinge_driver_path
-
- mod = fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
-
- # last step setup layers
- if "fk_layer" in options:
- layer = [n == options["fk_layer"] for n in range(0, 32)]
- else:
- layer = list(mt_chain.thigh_b.layers)
- for attr in fk_chain.attr_names:
- getattr(fk_chain, attr + "_b").layers = layer
- for attr in ex.attr_names:
- getattr(ex, attr + "_b").layers = layer
- arm.bones[foot].layers = layer
-
-
- bpy.ops.object.mode_set(mode='EDIT')
-
- # dont blend the hips or heel
- return (None, fk_chain.thigh, fk_chain.shin, fk_chain.foot, fk_chain.toe, None, None)
-
-
-def deform(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- # Create upper leg bones: two bones, each half of the upper leg.
- uleg1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True)
- uleg2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True)
- uleg1.use_connect = False
- uleg2.use_connect = False
- uleg2.parent = uleg1
- center = uleg1.center
- uleg1.tail = center
- uleg2.head = center
-
- # Create lower leg bones: two bones, each half of the lower leg.
- lleg1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True)
- lleg2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True)
- lleg1.use_connect = False
- lleg2.use_connect = False
- lleg2.parent = lleg1
- center = lleg1.center
- lleg1.tail = center
- lleg2.head = center
-
- # Create a bone for the second lower leg deform bone to twist with
- twist = copy_bone_simple(obj.data, lleg2.name, "MCH-leg_twist")
- twist.length /= 4
- twist.use_connect = False
- twist.parent = obj.data.edit_bones[definitions[3]]
-
- # Create foot bone
- foot = copy_bone_simple(obj.data, definitions[3], "DEF-%s" % base_names[definitions[3]], parent=True)
-
- # Create toe bone
- toe = copy_bone_simple(obj.data, definitions[4], "DEF-%s" % base_names[definitions[4]], parent=True)
-
- # Store names before leaving edit mode
- uleg1_name = uleg1.name
- uleg2_name = uleg2.name
- lleg1_name = lleg1.name
- lleg2_name = lleg2.name
- twist_name = twist.name
- foot_name = foot.name
- toe_name = toe.name
-
- # Leave edit mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Get the pose bones
- uleg1 = obj.pose.bones[uleg1_name]
- uleg2 = obj.pose.bones[uleg2_name]
- lleg1 = obj.pose.bones[lleg1_name]
- lleg2 = obj.pose.bones[lleg2_name]
- foot = obj.pose.bones[foot_name]
- toe = obj.pose.bones[toe_name]
-
- # Upper leg constraints
- con = uleg1.constraints.new('DAMPED_TRACK')
- con.name = "trackto"
- con.target = obj
- con.subtarget = definitions[2]
-
- con = uleg1.constraints.new('COPY_SCALE')
- con.name = "scale"
- con.target = obj
- con.subtarget = definitions[1]
-
- con = uleg2.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[1]
-
- # Lower leg constraints
- con = lleg1.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[2]
-
- con = lleg1.constraints.new('COPY_SCALE')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[2]
-
- con = lleg2.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = twist_name
-
- con = lleg2.constraints.new('DAMPED_TRACK')
- con.name = "trackto"
- con.target = obj
- con.subtarget = definitions[3]
-
- # Foot constraint
- con = foot.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[3]
-
- # Toe constraint
- con = toe.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[4]
-
- bpy.ops.object.mode_set(mode='EDIT')
- return (uleg1_name, uleg2_name, lleg1_name, lleg2_name, foot_name, toe_name, None)
-
-
-def main(obj, bone_definition, base_names, options):
- bones_fk = fk(obj, bone_definition, base_names, options)
- bones_ik = ik(obj, bone_definition, base_names, options)
- deform(obj, bone_definition, base_names, options)
-
- bpy.ops.object.mode_set(mode='OBJECT')
- blend_bone_list(obj, bone_definition + [None], bones_fk, bones_ik, target_bone=bones_ik[6], target_prop="ik", blend_default=1.0)
diff --git a/release/scripts/modules/rigify/leg_quadruped.py b/release/scripts/modules/rigify/leg_quadruped.py
deleted file mode 100644
index 739a6402c4b..00000000000
--- a/release/scripts/modules/rigify/leg_quadruped.py
+++ /dev/null
@@ -1,497 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rna_prop_ui import rna_idprop_ui_prop_get
-from math import pi
-from rigify import RigifyError
-from rigify_utils import bone_class_instance, copy_bone_simple, get_side_name, get_base_name
-from mathutils import Vector
-
-METARIG_NAMES = "hips", "thigh", "shin", "foot", "toe"
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('body')
- bone.head[:] = -0.0728, -0.2427, 0.0000
- bone.tail[:] = -0.0728, -0.2427, 0.2427
- bone.roll = 0.0000
- bone.use_connect = False
- bone = arm.edit_bones.new('thigh')
- bone.head[:] = 0.0000, 0.0000, -0.0000
- bone.tail[:] = 0.0813, -0.2109, -0.3374
- bone.roll = -0.4656
- bone.use_connect = False
- bone.parent = arm.edit_bones['body']
- bone = arm.edit_bones.new('shin')
- bone.head[:] = 0.0813, -0.2109, -0.3374
- bone.tail[:] = 0.0714, -0.0043, -0.5830
- bone.roll = -0.2024
- bone.use_connect = True
- bone.parent = arm.edit_bones['thigh']
- bone = arm.edit_bones.new('foot')
- bone.head[:] = 0.0714, -0.0043, -0.5830
- bone.tail[:] = 0.0929, -0.0484, -0.7652
- bone.roll = -0.3766
- bone.use_connect = True
- bone.parent = arm.edit_bones['shin']
- bone = arm.edit_bones.new('toe')
- bone.head[:] = 0.0929, -0.0484, -0.7652
- bone.tail[:] = 0.1146, -0.1244, -0.7652
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['foot']
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['thigh']
- pbone['type'] = 'leg_quadruped'
-
-
-def metarig_definition(obj, orig_bone_name):
- '''
- The bone given is the first in a chain
- Expects a chain of at least 3 children.
- eg.
- thigh -> shin -> foot -> [toe, heel]
- '''
-
- bone_definition = []
-
- orig_bone = obj.data.bones[orig_bone_name]
- orig_bone_parent = orig_bone.parent
-
- if orig_bone_parent is None:
- raise RigifyError("expected the thigh bone to have a parent hip bone")
-
- bone_definition.append(orig_bone_parent.name)
- bone_definition.append(orig_bone.name)
-
-
- bone = orig_bone
- chain = 0
- while chain < 3: # first 2 bones only have 1 child
- children = bone.children
-
- if len(children) != 1:
- raise RigifyError("expected the thigh bone to have 3 children without a fork")
- bone = children[0]
- bone_definition.append(bone.name) # shin, foot
- chain += 1
-
- if len(bone_definition) != len(METARIG_NAMES):
- raise RigifyError("internal problem, expected %d bones" % len(METARIG_NAMES))
-
- return bone_definition
-
-
-def ik(obj, bone_definition, base_names, options):
- eb = obj.data.edit_bones
- pb = obj.pose.bones
- arm = obj.data
- bpy.ops.object.mode_set(mode='EDIT')
-
- # setup the existing bones, use names from METARIG_NAMES
- mt = bone_class_instance(obj, ["hips"])
- mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"])
-
- mt.attr_initialize(METARIG_NAMES, bone_definition)
- mt_chain.attr_initialize(METARIG_NAMES, bone_definition)
-
- ik_chain = mt_chain.copy(to_fmt="MCH-%s.ik", base_names=base_names)
-
- ik_chain.thigh_e.use_connect = False
- ik_chain.thigh_e.parent = mt.hips_e
-
- ik_chain.foot_e.parent = None
- ik_chain.rename("foot", get_base_name(base_names[bone_definition[3]]) + "_ik" + get_side_name(base_names[bone_definition[3]]))
- ik_chain.rename("toe", get_base_name(base_names[bone_definition[4]]) + "_ik" + get_side_name(base_names[bone_definition[4]]))
-
- # keep the foot_ik as the parent
- ik_chain.toe_e.use_connect = False
-
- # Foot uses pose space, not local space, for translation
- ik_chain.foot_e.use_local_location = False
-
- # must be after disconnecting the toe
- ik_chain.foot_e.align_orientation(mt_chain.toe_e)
-
- # children of ik_foot
- ik = bone_class_instance(obj, ["foot_roll", "foot_roll_01", "foot_roll_02", "foot_target"])
-
- # knee rotator
- knee_rotator = copy_bone_simple(arm, mt_chain.toe, "knee_rotator" + get_side_name(base_names[mt_chain.foot]), parent=True).name
- eb[knee_rotator].use_connect = False
- eb[knee_rotator].parent = eb[mt.hips]
- eb[knee_rotator].head = eb[ik_chain.thigh].head
- eb[knee_rotator].tail = eb[knee_rotator].head + eb[mt_chain.toe].vector
- eb[knee_rotator].length = eb[ik_chain.thigh].length / 2
- eb[knee_rotator].roll += pi/2
-
- # parent ik leg to the knee rotator
- eb[ik_chain.thigh].parent = eb[knee_rotator]
-
- # foot roll is an interesting one!
- # plot a vector from the toe bones head, bactwards to the length of the foot
- # then align it with the foot but reverse direction.
- ik.foot_roll_e = copy_bone_simple(arm, mt_chain.toe, get_base_name(base_names[mt_chain.foot]) + "_roll" + get_side_name(base_names[mt_chain.foot]))
- ik.foot_roll = ik.foot_roll_e.name
- ik.foot_roll_e.use_connect = False
- ik.foot_roll_e.parent = ik_chain.foot_e
- ik.foot_roll_e.head -= mt_chain.toe_e.vector.normalize() * mt_chain.foot_e.length
- ik.foot_roll_e.tail = ik.foot_roll_e.head - (mt_chain.foot_e.vector.normalize() * mt_chain.toe_e.length)
- ik.foot_roll_e.align_roll(mt_chain.foot_e.matrix.rotation_part() * Vector((0.0, 0.0, -1.0)))
-
- # MCH-foot
- ik.foot_roll_01_e = copy_bone_simple(arm, mt_chain.foot, "MCH-" + base_names[mt_chain.foot])
- ik.foot_roll_01 = ik.foot_roll_01_e.name
- ik.foot_roll_01_e.parent = ik_chain.foot_e
- ik.foot_roll_01_e.head, ik.foot_roll_01_e.tail = mt_chain.foot_e.tail, mt_chain.foot_e.head
- ik.foot_roll_01_e.roll = ik.foot_roll_e.roll
-
- # ik_target, child of MCH-foot
- ik.foot_target_e = copy_bone_simple(arm, mt_chain.foot, "MCH-" + base_names[mt_chain.foot] + "_ik_target")
- ik.foot_target = ik.foot_target_e.name
- ik.foot_target_e.parent = ik.foot_roll_01_e
- ik.foot_target_e.align_orientation(ik_chain.foot_e)
- ik.foot_target_e.length = ik_chain.foot_e.length / 2.0
- ik.foot_target_e.use_connect = True
-
- # MCH-foot.02 child of MCH-foot
- ik.foot_roll_02_e = copy_bone_simple(arm, mt_chain.foot, "MCH-%s_02" % base_names[mt_chain.foot])
- ik.foot_roll_02 = ik.foot_roll_02_e.name
- ik.foot_roll_02_e.parent = ik.foot_roll_01_e
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- mt.update()
- mt_chain.update()
- ik.update()
- ik_chain.update()
-
- # Set rotation modes and axis locks
- #pb[knee_rotator].rotation_mode = 'YXZ'
- #pb[knee_rotator].lock_rotation = False, True, False
- pb[knee_rotator].lock_location = True, True, True
- pb[ik.foot_roll].rotation_mode = 'XYZ'
- pb[ik.foot_roll].lock_rotation = False, True, True
- pb[ik_chain.toe].rotation_mode = 'XYZ'
- pb[ik_chain.toe].lock_rotation = False, True, True
-
- # IK switch property
- prop = rna_idprop_ui_prop_get(pb[ik_chain.foot], "ik", create=True)
- pb[ik_chain.foot]["ik"] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
- prop["min"] = 0.0
- prop["max"] = 1.0
-
- ik_driver_path = pb[ik_chain.foot].path_from_id() + '["ik"]'
-
- # simple constraining of orig bones
- con = mt_chain.thigh_p.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = ik_chain.thigh
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = ik_driver_path
-
- con = mt_chain.shin_p.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = ik_chain.shin
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = ik_driver_path
-
- con = mt_chain.foot_p.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = ik.foot_roll_02
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = ik_driver_path
-
- con = mt_chain.toe_p.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = ik_chain.toe
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = ik_driver_path
-
- # others...
- con = ik.foot_roll_01_p.constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = ik.foot_roll
- con.target_space = 'LOCAL'
- con.owner_space = 'LOCAL'
-
-
- # IK
- con = ik_chain.shin_p.constraints.new('IK')
- con.chain_count = 2
- con.iterations = 500
- con.pole_angle = -90.0 # XXX - in deg!
- con.use_tail = True
- con.use_stretch = True
- con.use_target = True
- con.use_rotation = False
- con.weight = 1.0
-
- con.target = obj
- con.subtarget = ik.foot_target
-
- con.pole_target = None
-
- ik.update()
- ik_chain.update()
-
- # Set layers of the bones.
- if "ik_layer" in options:
- layer = [n==options["ik_layer"] for n in range(0,32)]
- else:
- layer = list(mt_chain.thigh_b.layers)
- for attr in ik_chain.attr_names:
- obj.data.bones[getattr(ik_chain, attr)].layers = layer
- for attr in ik.attr_names:
- obj.data.bones[getattr(ik, attr)].layers = layer
- obj.data.bones[knee_rotator].layers = layer
-
- return None, ik_chain.thigh, ik_chain.shin, ik_chain.foot, ik_chain.toe
-
-
-
-def fk(obj, bone_definition, base_names, options):
- eb = obj.data.edit_bones
- pb = obj.pose.bones
- arm = obj.data
- bpy.ops.object.mode_set(mode='EDIT')
-
- # setup the existing bones, use names from METARIG_NAMES
- mt = bone_class_instance(obj, ["hips"])
- mt_chain = bone_class_instance(obj, ["thigh", "shin", "foot", "toe"])
-
- mt.attr_initialize(METARIG_NAMES, bone_definition)
- mt_chain.attr_initialize(METARIG_NAMES, bone_definition)
-
- fk_chain = mt_chain.copy(to_fmt="%s", base_names=base_names)
-
- # Create the socket
- socket = copy_bone_simple(arm, mt_chain.thigh, "MCH-leg_socket").name
- eb[socket].parent = eb[mt.hips]
- eb[socket].length = eb[mt_chain.thigh].length / 4
-
- # Create the hinge
- hinge = copy_bone_simple(arm, mt.hips, "MCH-leg_hinge").name
- eb[hinge].length = eb[mt.hips].length / 2
-
- # Make leg child of hinge
- eb[fk_chain.thigh].use_connect = False
- eb[fk_chain.thigh].parent = eb[hinge]
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Set rotation modes and axis locks
- pb[fk_chain.shin].rotation_mode = 'XYZ'
- pb[fk_chain.shin].lock_rotation = False, True, True
-
- # Constrain original bones to control bones
- con = mt_chain.thigh_p.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = fk_chain.thigh
-
- con = mt_chain.shin_p.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = fk_chain.shin
-
- con = mt_chain.foot_p.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = fk_chain.foot
-
- con = mt_chain.toe_p.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = fk_chain.toe
-
- # Socket constraint
- con = pb[fk_chain.thigh].constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = socket
-
- # Hinge constraint
- con = pb[hinge].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = mt.hips
-
- prop = rna_idprop_ui_prop_get(pb[fk_chain.thigh], "hinge", create=True)
- pb[fk_chain.thigh]["hinge"] = 0.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
- prop["min"] = 0.0
- prop["max"] = 1.0
-
- hinge_driver_path = pb[fk_chain.thigh].path_from_id() + '["hinge"]'
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = hinge_driver_path
-
- mod = fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
- return None, fk_chain.thigh, fk_chain.shin, fk_chain.foot, fk_chain.toe
-
-
-
-
-def deform(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- # Create upper leg bones: two bones, each half of the upper leg.
- uleg1 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.01" % base_names[definitions[1]], parent=True)
- uleg2 = copy_bone_simple(obj.data, definitions[1], "DEF-%s.02" % base_names[definitions[1]], parent=True)
- uleg1.use_connect = False
- uleg2.use_connect = False
- uleg2.parent = uleg1
- center = uleg1.center
- uleg1.tail = center
- uleg2.head = center
-
- # Create lower leg bones: two bones, each half of the lower leg.
- lleg1 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.01" % base_names[definitions[2]], parent=True)
- lleg2 = copy_bone_simple(obj.data, definitions[2], "DEF-%s.02" % base_names[definitions[2]], parent=True)
- lleg1.use_connect = False
- lleg2.use_connect = False
- lleg2.parent = lleg1
- center = lleg1.center
- lleg1.tail = center
- lleg2.head = center
-
- # Create a bone for the second lower leg deform bone to twist with
- twist = copy_bone_simple(obj.data, lleg2.name, "MCH-leg_twist")
- twist.length /= 4
- twist.use_connect = False
- twist.parent = obj.data.edit_bones[definitions[3]]
-
- # Create foot bone
- foot = copy_bone_simple(obj.data, definitions[3], "DEF-%s" % base_names[definitions[3]], parent=True)
-
- # Create toe bone
- toe = copy_bone_simple(obj.data, definitions[4], "DEF-%s" % base_names[definitions[4]], parent=True)
-
- # Store names before leaving edit mode
- uleg1_name = uleg1.name
- uleg2_name = uleg2.name
- lleg1_name = lleg1.name
- lleg2_name = lleg2.name
- twist_name = twist.name
- foot_name = foot.name
- toe_name = toe.name
-
- # Leave edit mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Get the pose bones
- uleg1 = obj.pose.bones[uleg1_name]
- uleg2 = obj.pose.bones[uleg2_name]
- lleg1 = obj.pose.bones[lleg1_name]
- lleg2 = obj.pose.bones[lleg2_name]
- foot = obj.pose.bones[foot_name]
- toe = obj.pose.bones[toe_name]
-
- # Upper leg constraints
- con = uleg1.constraints.new('DAMPED_TRACK')
- con.name = "trackto"
- con.target = obj
- con.subtarget = definitions[2]
-
- con = uleg2.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[1]
-
- # Lower leg constraints
- con = lleg1.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[2]
-
- con = lleg2.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = twist_name
-
- con = lleg2.constraints.new('DAMPED_TRACK')
- con.name = "trackto"
- con.target = obj
- con.subtarget = definitions[3]
-
- # Foot constraint
- con = foot.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[3]
-
- # Toe constraint
- con = toe.constraints.new('COPY_ROTATION')
- con.name = "copy_rot"
- con.target = obj
- con.subtarget = definitions[4]
-
- bpy.ops.object.mode_set(mode='EDIT')
- return (uleg1_name, uleg2_name, lleg1_name, lleg2_name, foot_name, toe_name, None)
-
-
-
-
-def main(obj, bone_definition, base_names, options):
- bones_fk = fk(obj, bone_definition, base_names, options)
- bones_ik = ik(obj, bone_definition, base_names, options)
- deform(obj, bone_definition, base_names, options)
- return bones_ik
diff --git a/release/scripts/modules/rigify/mouth.py b/release/scripts/modules/rigify/mouth.py
deleted file mode 100644
index ef3875222d3..00000000000
--- a/release/scripts/modules/rigify/mouth.py
+++ /dev/null
@@ -1,756 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rna_prop_ui import rna_idprop_ui_prop_get
-from math import acos, pi
-from mathutils import Vector
-from rigify import RigifyError
-from rigify_utils import copy_bone_simple
-
-#METARIG_NAMES = ("cpy",)
-RIG_TYPE = "mouth"
-
-
-def mark_actions():
- for action in bpy.data.actions:
- action.tag = True
-
-def get_unmarked_action():
- for action in bpy.data.actions:
- if action.tag != True:
- return action
- return None
-
-def add_action(name=None):
- mark_actions()
- bpy.ops.action.new()
- action = get_unmarked_action()
- if name is not None:
- action.name = name
- return action
-
-def addget_shape_key(obj, name="Key"):
- """ Fetches a shape key, or creates it if it doesn't exist
- """
- # Create a shapekey set if it doesn't already exist
- if obj.data.shape_keys is None:
- shape = obj.add_shape_key(name="Basis", from_mix=False)
- obj.active_shape_key_index = 0
-
- # Get the shapekey, or create it if it doesn't already exist
- if name in obj.data.shape_keys.keys:
- shape_key = obj.data.shape_keys.keys[name]
- else:
- shape_key = obj.add_shape_key(name=name, from_mix=False)
-
- return shape_key
-
-
-def addget_shape_key_driver(obj, name="Key"):
- """ Fetches the driver for the shape key, or creates it if it doesn't
- already exist.
- """
- driver_path = 'keys["' + name + '"].value'
- fcurve = None
- driver = None
- new = False
- if obj.data.shape_keys.animation_data is not None:
- for driver_s in obj.data.shape_keys.animation_data.drivers:
- if driver_s.data_path == driver_path:
- fcurve = driver_s
- if fcurve is None:
- fcurve = obj.data.shape_keys.keys[name].driver_add("value")
- fcurve.driver.type = 'AVERAGE'
- new = True
-
- return fcurve, new
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('Bone')
- bone.head[:] = 0.0000, 0.0000, 0.0000
- bone.tail[:] = 0.0000, 0.0000, 1.0000
- bone.roll = 0.0000
- bone.use_connect = False
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['Bone']
- pbone['type'] = 'copy'
-
-
-def metarig_definition(obj, orig_bone_name):
- bone = obj.data.bones[orig_bone_name]
- chain = []
-
- try:
- chain += [bone.parent.parent.name, bone.parent.name, bone.name]
- except AttributeError:
- raise RigifyError("'%s' rig type requires a chain of two parents (bone: %s)" % (RIG_TYPE, orig_bone_name))
-
- chain += [child.name for child in bone.children_recursive_basename]
-
- if len(chain) < 10:
- raise RigifyError("'%s' rig type requires a chain of 8 bones (bone: %s)" % (RIG_TYPE, orig_bone_name))
-
- return chain[:10]
-
-
-def deform(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- eb = obj.data.edit_bones
- bb = obj.data.bones
- pb = obj.pose.bones
-
- jaw = definitions[1]
-
- # Options
- req_options = ["mesh"]
- for option in req_options:
- if option not in options:
- raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]]))
-
- meshes = options["mesh"].replace(" ", "").split(",")
-
- # Lip DEF
- lip1 = copy_bone_simple(obj.data, definitions[2], "DEF-" + base_names[definitions[2]]).name
- lip2 = copy_bone_simple(obj.data, definitions[3], "DEF-" + base_names[definitions[3]]).name
- lip3 = copy_bone_simple(obj.data, definitions[4], "DEF-" + base_names[definitions[4]]).name
- lip4 = copy_bone_simple(obj.data, definitions[5], "DEF-" + base_names[definitions[5]]).name
- lip5 = copy_bone_simple(obj.data, definitions[6], "DEF-" + base_names[definitions[6]]).name
- lip6 = copy_bone_simple(obj.data, definitions[7], "DEF-" + base_names[definitions[7]]).name
- lip7 = copy_bone_simple(obj.data, definitions[8], "DEF-" + base_names[definitions[8]]).name
- lip8 = copy_bone_simple(obj.data, definitions[9], "DEF-" + base_names[definitions[9]]).name
-
- # Mouth corner spread bones (for driving corrective shape keys)
- spread_l_1 = copy_bone_simple(obj.data, definitions[6], "MCH-" + base_names[definitions[6]] + ".spread_1").name
- spread_l_2 = copy_bone_simple(obj.data, definitions[6], "MCH-" + base_names[definitions[6]] + ".spread_2").name
- eb[spread_l_1].tail = eb[definitions[5]].head
- eb[spread_l_2].tail = eb[definitions[5]].head
- eb[spread_l_1].roll = 0
- eb[spread_l_2].roll = 0
- eb[spread_l_1].use_connect = False
- eb[spread_l_2].use_connect = False
- eb[spread_l_1].parent = eb[definitions[6]]
- eb[spread_l_2].parent = eb[definitions[6]]
-
- spread_r_1 = copy_bone_simple(obj.data, definitions[2], "MCH-" + base_names[definitions[2]] + ".spread_1").name
- spread_r_2 = copy_bone_simple(obj.data, definitions[2], "MCH-" + base_names[definitions[2]] + ".spread_2").name
- eb[spread_r_1].tail = eb[definitions[3]].head
- eb[spread_r_2].tail = eb[definitions[3]].head
- eb[spread_r_1].roll = 0
- eb[spread_r_2].roll = 0
- eb[spread_r_1].use_connect = False
- eb[spread_r_2].use_connect = False
- eb[spread_r_1].parent = eb[definitions[2]]
- eb[spread_r_2].parent = eb[definitions[2]]
-
-
-
- # Jaw open bones (for driving corrective shape keys)
- jopen1 = copy_bone_simple(obj.data, jaw, "MCH-"+base_names[jaw]+".track1", parent=True).name
- eb[jopen1].use_connect = False
- eb[jopen1].head = eb[jaw].tail
- eb[jopen1].tail = eb[jopen1].head + Vector((0, 0, eb[jaw].length/4))
-
- jopen2 = copy_bone_simple(obj.data, jopen1, "MCH-"+base_names[jaw]+".track2").name
- eb[jopen2].parent = eb[jaw]
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Constrain DEF bones to ORG bones
- con = pb[lip1].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = definitions[2]
-
- con = pb[lip2].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = definitions[3]
-
- con = pb[lip3].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = definitions[4]
-
- con = pb[lip4].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = definitions[5]
-
- con = pb[lip5].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = definitions[6]
-
- con = pb[lip6].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = definitions[7]
-
- con = pb[lip7].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = definitions[8]
-
- con = pb[lip8].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = definitions[9]
-
- # Constraint mouth corner spread bones
- con = pb[spread_l_1].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lip4
-
- con = pb[spread_l_2].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = spread_l_1
-
- con = pb[spread_l_2].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lip6
-
- con = pb[spread_r_1].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lip2
-
- con = pb[spread_r_2].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = spread_r_1
-
- con = pb[spread_r_2].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = lip8
-
-
- # Corrective shape keys for the corners of the mouth.
- bpy.ops.object.mode_set(mode='EDIT')
-
- # Calculate the rotation difference between the bones
- rotdiff_l = acos((eb[lip5].head - eb[lip4].head).normalize().dot((eb[lip5].head - eb[lip6].head).normalize()))
- rotdiff_r = acos((eb[lip1].head - eb[lip2].head).normalize().dot((eb[lip1].head - eb[lip8].head).normalize()))
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
-
- # Left side shape key
- for mesh_name in meshes:
- mesh_obj = bpy.data.objects[mesh_name]
- shape_key_name = "COR-" + base_names[definitions[6]] + ".spread"
-
- # Add/get the shape key
- shape_key = addget_shape_key(mesh_obj, name=shape_key_name)
-
- # Add/get the shape key driver
- fcurve, is_new_driver = addget_shape_key_driver(mesh_obj, name=shape_key_name)
- driver = fcurve.driver
-
- # Get the variable, or create it if it doesn't already exist
- var_name = base_names[definitions[6]]
- if var_name in driver.variables:
- var = driver.variables[var_name]
- else:
- var = driver.variables.new()
- var.name = var_name
-
- # Set up the variable
- var.type = "ROTATION_DIFF"
- var.targets[0].id = obj
- var.targets[0].bone_target = spread_l_1
- var.targets[1].id = obj
- var.targets[1].bone_target = spread_l_2
-
- # Set fcurve offset
- if is_new_driver:
- mod = fcurve.modifiers[0]
- if rotdiff_l != pi:
- mod.coefficients[0] = -rotdiff_l / (pi-rotdiff_l)
- mod.coefficients[1] = 1 / (pi-rotdiff_l)
-
- # Right side shape key
- for mesh_name in meshes:
- mesh_obj = bpy.data.objects[mesh_name]
- shape_key_name = "COR-" + base_names[definitions[2]] + ".spread"
-
- # Add/get the shape key
- shape_key = addget_shape_key(mesh_obj, name=shape_key_name)
-
- # Add/get the shape key driver
- fcurve, is_new_driver = addget_shape_key_driver(mesh_obj, name=shape_key_name)
- driver = fcurve.driver
-
- # Get the variable, or create it if it doesn't already exist
- var_name = base_names[definitions[2]]
- if var_name in driver.variables:
- var = driver.variables[var_name]
- else:
- var = driver.variables.new()
- var.name = var_name
-
- # Set up the variable
- var.type = "ROTATION_DIFF"
- var.targets[0].id = obj
- var.targets[0].bone_target = spread_r_1
- var.targets[1].id = obj
- var.targets[1].bone_target = spread_r_2
-
- # Set fcurve offset
- if is_new_driver:
- mod = fcurve.modifiers[0]
- if rotdiff_r != pi:
- mod.coefficients[0] = -rotdiff_r / (pi-rotdiff_r)
- mod.coefficients[1] = 1 / (pi-rotdiff_r)
-
- # Jaw open corrective shape key
- for mesh_name in meshes:
- mesh_obj = bpy.data.objects[mesh_name]
- shape_key_name = "COR-" + base_names[definitions[4]] + ".jaw_open"
-
- # Add/get the shape key
- shape_key = addget_shape_key(mesh_obj, name=shape_key_name)
-
- # Add/get the shape key driver
- fcurve, is_new_driver = addget_shape_key_driver(mesh_obj, name=shape_key_name)
- driver = fcurve.driver
-
- # Get the variable, or create it if it doesn't already exist
- var_name = base_names[definitions[4]]
- if var_name in driver.variables:
- var = driver.variables[var_name]
- else:
- var = driver.variables.new()
- var.name = var_name
-
- # Set up the variable
- var.type = "LOC_DIFF"
- var.targets[0].id = obj
- var.targets[0].bone_target = jopen1
- var.targets[1].id = obj
- var.targets[1].bone_target = jopen2
-
- # Set fcurve offset
- if is_new_driver:
- mod = fcurve.modifiers[0]
- mod.coefficients[0] = 0.0
- mod.coefficients[1] = 1.0 / bb[jaw].length
-
- return (None,)
-
-
-
-
-def control(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
-
- eb = obj.data.edit_bones
- bb = obj.data.bones
- pb = obj.pose.bones
-
- head_e = eb[definitions[0]]
- jaw_e = eb[definitions[1]]
- jaw = definitions[1]
-
- # Head lips
- hlip1 = copy_bone_simple(obj.data, definitions[2], "MCH-"+base_names[definitions[2]]+".head").name
- hlip2 = copy_bone_simple(obj.data, definitions[3], "MCH-"+base_names[definitions[3]]+".head").name
- hlip3 = copy_bone_simple(obj.data, definitions[4], "MCH-"+base_names[definitions[4]]+".head").name
- hlip4 = copy_bone_simple(obj.data, definitions[5], "MCH-"+base_names[definitions[5]]+".head").name
- hlip5 = copy_bone_simple(obj.data, definitions[6], "MCH-"+base_names[definitions[6]]+".head").name
- hlip6 = copy_bone_simple(obj.data, definitions[7], "MCH-"+base_names[definitions[7]]+".head").name
- hlip7 = copy_bone_simple(obj.data, definitions[8], "MCH-"+base_names[definitions[8]]+".head").name
- hlip8 = copy_bone_simple(obj.data, definitions[9], "MCH-"+base_names[definitions[9]]+".head").name
-
- eb[hlip1].parent = head_e
- eb[hlip2].parent = head_e
- eb[hlip3].parent = head_e
- eb[hlip4].parent = head_e
- eb[hlip5].parent = head_e
- eb[hlip6].parent = head_e
- eb[hlip7].parent = head_e
- eb[hlip8].parent = head_e
-
- # Jaw lips
- jlip1 = copy_bone_simple(obj.data, definitions[2], "MCH-"+base_names[definitions[2]]+".jaw").name
- jlip2 = copy_bone_simple(obj.data, definitions[3], "MCH-"+base_names[definitions[3]]+".jaw").name
- jlip3 = copy_bone_simple(obj.data, definitions[4], "MCH-"+base_names[definitions[4]]+".jaw").name
- jlip4 = copy_bone_simple(obj.data, definitions[5], "MCH-"+base_names[definitions[5]]+".jaw").name
- jlip5 = copy_bone_simple(obj.data, definitions[6], "MCH-"+base_names[definitions[6]]+".jaw").name
- jlip6 = copy_bone_simple(obj.data, definitions[7], "MCH-"+base_names[definitions[7]]+".jaw").name
- jlip7 = copy_bone_simple(obj.data, definitions[8], "MCH-"+base_names[definitions[8]]+".jaw").name
- jlip8 = copy_bone_simple(obj.data, definitions[9], "MCH-"+base_names[definitions[9]]+".jaw").name
-
- eb[jlip1].parent = jaw_e
- eb[jlip2].parent = jaw_e
- eb[jlip3].parent = jaw_e
- eb[jlip4].parent = jaw_e
- eb[jlip5].parent = jaw_e
- eb[jlip6].parent = jaw_e
- eb[jlip7].parent = jaw_e
- eb[jlip8].parent = jaw_e
-
- # Control lips
- lip1 = copy_bone_simple(obj.data, definitions[2], base_names[definitions[2]]).name
- lip2 = copy_bone_simple(obj.data, definitions[3], base_names[definitions[3]]).name
- lip3 = copy_bone_simple(obj.data, definitions[4], base_names[definitions[4]]).name
- lip4 = copy_bone_simple(obj.data, definitions[5], base_names[definitions[5]]).name
- lip5 = copy_bone_simple(obj.data, definitions[6], base_names[definitions[6]]).name
- lip6 = copy_bone_simple(obj.data, definitions[7], base_names[definitions[7]]).name
- lip7 = copy_bone_simple(obj.data, definitions[8], base_names[definitions[8]]).name
- lip8 = copy_bone_simple(obj.data, definitions[9], base_names[definitions[9]]).name
-
- eb[lip1].parent = eb[hlip1]
- eb[lip2].parent = eb[hlip2]
- eb[lip3].parent = eb[hlip3]
- eb[lip4].parent = eb[hlip4]
- eb[lip5].parent = eb[hlip5]
- eb[lip6].parent = eb[hlip6]
- eb[lip7].parent = eb[hlip7]
- eb[lip8].parent = eb[hlip8]
-
- # Jaw open tracker
- jopent = copy_bone_simple(obj.data, jaw_e.name, "MCH-"+base_names[jaw_e.name]+".track", parent=True).name
- eb[jopent].use_connect = False
- eb[jopent].tail = jaw_e.tail + Vector((0.0, 0.0, jaw_e.length))
- eb[jopent].head = jaw_e.tail
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Add mouth open action if it doesn't already exist
- action_name = "mouth_open"
- if action_name in bpy.data.actions:
- open_action = bpy.data.actions[action_name]
- else:
- open_action = add_action(name=action_name)
-
- # Add close property (useful when making the animation in the action)
- prop_name = "open_action"
- prop = rna_idprop_ui_prop_get(pb[lip1], prop_name, create=True)
- pb[lip1][prop_name] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
- prop["min"] = 0.0
- prop["max"] = 1.0
-
- open_driver_path = pb[lip1].path_from_id() + '["open_action"]'
-
-
- # Constraints
-
- # Jaw open tracker stretches to jaw tip
- con = pb[jopent].constraints.new('STRETCH_TO')
- con.target = obj
- con.subtarget = jaw
- con.head_tail = 1.0
- con.rest_length = bb[jopent].length
- con.volume = 'NO_VOLUME'
-
- # Head lips to jaw lips
- influence = [0.02, 0.1, 0.35, 0.25, 0.0]
-
- con = pb[hlip1].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = jlip1
- con.influence = influence[2]
-
- con = pb[hlip2].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = jlip2
- con.influence = influence[1]
-
- con = pb[hlip3].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = jlip3
- con.influence = influence[0]
-
- con = pb[hlip4].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = jlip4
- con.influence = influence[1]
-
- con = pb[hlip5].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = jlip5
- con.influence = influence[2]
-
- con = pb[hlip6].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = jlip6
- con.influence = 1.0 - influence[3]
-
- con = pb[hlip7].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = jlip7
- con.influence = 1.0 - influence[4]
-
- con = pb[hlip8].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = jlip8
- con.influence = 1.0 - influence[3]
-
- # ORG bones to lips
- con = pb[definitions[2]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lip1
-
- con = pb[definitions[3]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lip2
-
- con = pb[definitions[4]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lip3
-
- con = pb[definitions[5]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lip4
-
- con = pb[definitions[6]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lip5
-
- con = pb[definitions[7]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lip6
-
- con = pb[definitions[8]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lip7
-
- con = pb[definitions[9]].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = lip8
-
- # Action constraints for open mouth
- con = pb[lip1].constraints.new('ACTION')
- con.target = obj
- con.subtarget = jopent
- con.action = open_action
- con.transform_channel = 'SCALE_Y'
- con.frame_start = 0
- con.frame_end = 60
- con.min = 0.0
- con.max = 1.0
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = open_driver_path
-
- con = pb[lip2].constraints.new('ACTION')
- con.target = obj
- con.subtarget = jopent
- con.action = open_action
- con.transform_channel = 'SCALE_Y'
- con.frame_start = 0
- con.frame_end = 60
- con.min = 0.0
- con.max = 1.0
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = open_driver_path
-
- con = pb[lip3].constraints.new('ACTION')
- con.target = obj
- con.subtarget = jopent
- con.action = open_action
- con.transform_channel = 'SCALE_Y'
- con.frame_start = 0
- con.frame_end = 60
- con.min = 0.0
- con.max = 1.0
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = open_driver_path
-
- con = pb[lip4].constraints.new('ACTION')
- con.target = obj
- con.subtarget = jopent
- con.action = open_action
- con.transform_channel = 'SCALE_Y'
- con.frame_start = 0
- con.frame_end = 60
- con.min = 0.0
- con.max = 1.0
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = open_driver_path
-
- con = pb[lip5].constraints.new('ACTION')
- con.target = obj
- con.subtarget = jopent
- con.action = open_action
- con.transform_channel = 'SCALE_Y'
- con.frame_start = 0
- con.frame_end = 60
- con.min = 0.0
- con.max = 1.0
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = open_driver_path
-
- con = pb[lip6].constraints.new('ACTION')
- con.target = obj
- con.subtarget = jopent
- con.action = open_action
- con.transform_channel = 'SCALE_Y'
- con.frame_start = 0
- con.frame_end = 60
- con.min = 0.0
- con.max = 1.0
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = open_driver_path
-
- con = pb[lip7].constraints.new('ACTION')
- con.target = obj
- con.subtarget = jopent
- con.action = open_action
- con.transform_channel = 'SCALE_Y'
- con.frame_start = 0
- con.frame_end = 60
- con.min = 0.0
- con.max = 1.0
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = open_driver_path
-
- con = pb[lip8].constraints.new('ACTION')
- con.target = obj
- con.subtarget = jopent
- con.action = open_action
- con.transform_channel = 'SCALE_Y'
- con.frame_start = 0
- con.frame_end = 60
- con.min = 0.0
- con.max = 1.0
- con.target_space = 'LOCAL'
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = open_driver_path
-
-
- # Set layers
- layer = list(bb[definitions[2]].layers)
- bb[lip1].layers = layer
- bb[lip2].layers = layer
- bb[lip3].layers = layer
- bb[lip4].layers = layer
- bb[lip5].layers = layer
- bb[lip6].layers = layer
- bb[lip7].layers = layer
- bb[lip8].layers = layer
-
-
- return (None,)
-
-
-
-
-def main(obj, bone_definition, base_names, options):
- # Create control rig
- control(obj, bone_definition, base_names, options)
- # Create deform rig
- deform(obj, bone_definition, base_names, options)
-
- return (None,)
-
-
-
-
-def make_lip_stretch_bone(obj, name, bone1, bone2, roll_alpha):
- eb = obj.data.edit_bones
- pb = obj.pose.bones
-
- # Create the bone, pointing from bone1 to bone2
- bone_e = copy_bone_simple(obj.data, bone1, name, parent=True)
- bone_e.use_connect = False
- bone_e.tail = eb[bone2].head
- bone = bone_e.name
-
- # Align the bone roll with the average direction of bone1 and bone2
- vec = bone_e.y_axis.cross(((1.0-roll_alpha)*eb[bone1].y_axis) + (roll_alpha*eb[bone2].y_axis)).normalize()
-
- ang = acos(vec * bone_e.x_axis)
-
- bone_e.roll += ang
- c1 = vec * bone_e.x_axis
- bone_e.roll -= (ang*2)
- c2 = vec * bone_e.x_axis
-
- if c1 > c2:
- bone_e.roll += (ang*2)
-
- bpy.ops.object.mode_set(mode='OBJECT')
- bone_p = pb[bone]
-
- # Constrains
- con = bone_p.constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = bone1
-
- con = bone_p.constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = bone2
-
- con = bone_p.constraints.new('STRETCH_TO')
- con.target = obj
- con.subtarget = bone2
- con.volume = 'NO_VOLUME'
-
- bpy.ops.object.mode_set(mode='EDIT')
-
- return bone
diff --git a/release/scripts/modules/rigify/neck.py b/release/scripts/modules/rigify/neck.py
deleted file mode 100644
index 56717f0ebb0..00000000000
--- a/release/scripts/modules/rigify/neck.py
+++ /dev/null
@@ -1,344 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import bone_class_instance, copy_bone_simple
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-
-
-def metarig_template():
- # TODO:
- ## generated by rigify.write_meta_rig
- #bpy.ops.object.mode_set(mode='EDIT')
- #obj = bpy.context.active_object
- #arm = obj.data
- #bone = arm.edit_bones.new('body')
- #bone.head[:] = 0.0000, -0.0276, -0.1328
- #bone.tail[:] = 0.0000, -0.0170, -0.0197
- #bone.roll = 0.0000
- #bone.use_connect = False
- #bone = arm.edit_bones.new('head')
- #bone.head[:] = 0.0000, -0.0170, -0.0197
- #bone.tail[:] = 0.0000, 0.0726, 0.1354
- #bone.roll = 0.0000
- #bone.use_connect = True
- #bone.parent = arm.edit_bones['body']
- #bone = arm.edit_bones.new('neck.01')
- #bone.head[:] = 0.0000, -0.0170, -0.0197
- #bone.tail[:] = 0.0000, -0.0099, 0.0146
- #bone.roll = 0.0000
- #bone.use_connect = False
- #bone.parent = arm.edit_bones['head']
- #bone = arm.edit_bones.new('neck.02')
- #bone.head[:] = 0.0000, -0.0099, 0.0146
- #bone.tail[:] = 0.0000, -0.0242, 0.0514
- #bone.roll = 0.0000
- #bone.use_connect = True
- #bone.parent = arm.edit_bones['neck.01']
- #bone = arm.edit_bones.new('neck.03')
- #bone.head[:] = 0.0000, -0.0242, 0.0514
- #bone.tail[:] = 0.0000, -0.0417, 0.0868
- #bone.roll = 0.0000
- #bone.use_connect = True
- #bone.parent = arm.edit_bones['neck.02']
- #bone = arm.edit_bones.new('neck.04')
- #bone.head[:] = 0.0000, -0.0417, 0.0868
- #bone.tail[:] = 0.0000, -0.0509, 0.1190
- #bone.roll = 0.0000
- #bone.use_connect = True
- #bone.parent = arm.edit_bones['neck.03']
- #bone = arm.edit_bones.new('neck.05')
- #bone.head[:] = 0.0000, -0.0509, 0.1190
- #bone.tail[:] = 0.0000, -0.0537, 0.1600
- #bone.roll = 0.0000
- #bone.use_connect = True
- #bone.parent = arm.edit_bones['neck.04']
- #
- #bpy.ops.object.mode_set(mode='OBJECT')
- #pbone = obj.pose.bones['head']
- #pbone['type'] = 'neck_flex'
- pass
-
-
-def metarig_definition(obj, orig_bone_name):
- '''
- The bone given is neck_01, its parent is the body
- eg.
- body -> neck_01 -> neck_02 -> neck_03.... etc
- '''
- arm = obj.data
- neck = arm.bones[orig_bone_name]
- body = neck.parent
-
- bone_definition = [body.name, neck.name]
- bone_definition.extend([child.name for child in neck.children_recursive_basename])
- return bone_definition
-
-
-def deform(obj, definitions, base_names, options):
- for org_bone_name in definitions[1:]:
- bpy.ops.object.mode_set(mode='EDIT')
-
- # Create deform bone.
- bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True)
-
- # Store name before leaving edit mode
- bone_name = bone.name
-
- # Leave edit mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Get the pose bone
- bone = obj.pose.bones[bone_name]
-
- # Constrain to the original bone
- # XXX. Todo, is this needed if the bone is connected to its parent?
- con = bone.constraints.new('COPY_TRANSFORMS')
- con.name = "copy_loc"
- con.target = obj
- con.subtarget = org_bone_name
-
-
-def main(obj, bone_definition, base_names, options):
- from mathutils import Vector
-
- arm = obj.data
- eb = obj.data.edit_bones
- bb = obj.data.bones
- pb = obj.pose.bones
-
- body = bone_definition[0]
-
- # Create the neck and head control bones
- if "head_name" in options:
- head_name = options["head_name"]
- else:
- head_name = "head"
-
- neck_name = base_names[bone_definition[1]].split(".")[0]
-
- neck_ctrl = copy_bone_simple(arm, bone_definition[1], neck_name).name
- head_ctrl = copy_bone_simple(arm, bone_definition[len(bone_definition)-1], head_name).name
- eb[head_ctrl].tail += eb[neck_ctrl].head - eb[head_ctrl].head
- eb[head_ctrl].head = eb[neck_ctrl].head
-
- # Create hinge and socket bones
- neck_hinge = copy_bone_simple(arm, bone_definition[0], "MCH-" + neck_name + "_hinge").name
- head_hinge = copy_bone_simple(arm, neck_ctrl, "MCH-" + head_name + "_hinge").name
- eb[neck_hinge].tail += eb[neck_ctrl].head - eb[neck_hinge].head
- eb[neck_hinge].head = eb[neck_ctrl].head
- eb[head_hinge].tail += eb[neck_ctrl].head - eb[head_hinge].head
- eb[head_hinge].head = eb[neck_ctrl].head
-
- neck_socket = copy_bone_simple(arm, bone_definition[1], "MCH-" + neck_name + "_socket").name
- head_socket = copy_bone_simple(arm, bone_definition[1], "MCH-" + head_name + "_socket").name
-
- # Parent-child relationships between the body, hinges, controls, and sockets
- eb[neck_ctrl].parent = eb[neck_hinge]
- eb[head_ctrl].parent = eb[head_hinge]
-
- eb[neck_socket].parent = eb[body]
- eb[head_socket].parent = eb[body]
-
- # Create neck bones
- neck = [] # neck bones
- neck_neck = [] # bones constrained to neck control
- neck_head = [] # bones constrained to head control
- for i in range(1, len(bone_definition)):
- # Create bones
- neck_bone = copy_bone_simple(arm, bone_definition[i], base_names[bone_definition[i]]).name
- neck_neck_bone = copy_bone_simple(arm, neck_ctrl, "MCH-" + base_names[bone_definition[i]] + ".neck").name
- neck_head_bone = copy_bone_simple(arm, head_ctrl, "MCH-" + base_names[bone_definition[i]] + ".head").name
-
- # Move them all to the same place
- eb[neck_neck_bone].tail += eb[neck_bone].head - eb[neck_neck_bone].head
- eb[neck_head_bone].tail += eb[neck_bone].head - eb[neck_neck_bone].head
- eb[neck_neck_bone].head = eb[neck_bone].head
- eb[neck_head_bone].head = eb[neck_bone].head
-
- # Parent/child relationships
- eb[neck_bone].parent = eb[neck_head_bone]
- eb[neck_head_bone].parent = eb[neck_neck_bone]
-
- if i > 1:
- eb[neck_neck_bone].parent = eb[neck[i-2]]
- else:
- eb[neck_neck_bone].parent = eb[body]
-
- # Add them to the lists
- neck += [neck_bone]
- neck_neck += [neck_neck_bone]
- neck_head += [neck_head_bone]
-
- # Create deformation rig
- deform(obj, bone_definition, base_names, options)
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Axis locks
- pb[neck_ctrl].lock_location = True, True, True
- pb[head_ctrl].lock_location = True, True, True
-
- for bone in neck:
- pb[bone].lock_location = True, True, True
-
- # Neck hinge
- prop = rna_idprop_ui_prop_get(pb[neck_ctrl], "hinge", create=True)
- pb[neck_ctrl]["hinge"] = 0.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
- prop["hard_min"] = 0.0
- prop["hard_max"] = 1.0
-
- con = pb[neck_hinge].constraints.new('COPY_LOCATION')
- con.name = "socket"
- con.target = obj
- con.subtarget = neck_socket
-
- con = pb[neck_hinge].constraints.new('COPY_ROTATION')
- con.name = "hinge"
- con.target = obj
- con.subtarget = body
-
- hinge_driver_path = pb[neck_ctrl].path_from_id() + '["hinge"]'
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = hinge_driver_path
-
- mod = fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
- # Head hinge
- prop = rna_idprop_ui_prop_get(pb[head_ctrl], "hinge", create=True)
- pb[head_ctrl]["hinge"] = 0.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
- prop["hard_min"] = 0.0
- prop["hard_max"] = 1.0
-
- con = pb[head_hinge].constraints.new('COPY_LOCATION')
- con.name = "socket"
- con.target = obj
- con.subtarget = head_socket
-
- con = pb[head_hinge].constraints.new('COPY_ROTATION')
- con.name = "hinge"
- con.target = obj
- con.subtarget = neck_ctrl
-
- hinge_driver_path = pb[head_ctrl].path_from_id() + '["hinge"]'
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = hinge_driver_path
-
- mod = fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
- # Neck rotation constraints
- for i in range(0, len(neck_neck)):
- con = pb[neck_neck[i]].constraints.new('COPY_ROTATION')
- con.name = "neck rotation"
- con.target = obj
- con.subtarget = neck_ctrl
- con.influence = (i+1) / len(neck_neck)
-
-
- # Head rotation constraints/drivers
- prop = rna_idprop_ui_prop_get(pb[head_ctrl], "extent", create=True)
- if "extent" in options:
- pb[head_ctrl]["extent"] = options["extent"]
- else:
- pb[head_ctrl]["extent"] = 0.5
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
- prop["hard_min"] = 0.0
- prop["hard_max"] = 1.0
-
- extent_prop_path = pb[head_ctrl].path_from_id() + '["extent"]'
-
- for i in range(0, len(neck_head)):
- con = pb[neck_head[i]].constraints.new('COPY_ROTATION')
- con.name = "head rotation"
- con.target = obj
- con.subtarget = head_ctrl
-
- if i < (len(neck_head)-1):
- inf = (i+1) / len(neck_head)
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- var.name = "ext"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = extent_prop_path
-
- driver.expression = "0 if ext == 0 else (((%s-1)/ext)+1)" % inf
- else:
- con.influence = 1.0
-
- # Constrain original bones to the neck bones
- for i in range(0, len(neck)):
- con = pb[bone_definition[i+1]].constraints.new('COPY_TRANSFORMS')
- con.name = "copy_transform"
- con.target = obj
- con.subtarget = neck[i]
-
-
- # Set the controls' custom shapes to use other bones for transforms
- pb[neck_ctrl].custom_shape_transform = pb[bone_definition[len(bone_definition)//2]]
- pb[head_ctrl].custom_shape_transform = pb[bone_definition[len(bone_definition)-1]]
-
-
- # last step setup layers
- if "ex_layer" in options:
- layer = [n==options["ex_layer"] for n in range(0,32)]
- else:
- layer = list(arm.bones[bone_definition[1]].layers)
- for bone in neck:
- bb[bone].layers = layer
-
- layer = list(arm.bones[bone_definition[1]].layers)
- bb[neck_ctrl].layers = layer
- bb[head_ctrl].layers = layer
-
-
- # no blending the result of this
- return None
-
diff --git a/release/scripts/modules/rigify/neck_flex.py b/release/scripts/modules/rigify/neck_flex.py
deleted file mode 100644
index 7daf3d3bb4b..00000000000
--- a/release/scripts/modules/rigify/neck_flex.py
+++ /dev/null
@@ -1,348 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import bone_class_instance, copy_bone_simple
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-# not used, defined for completeness
-METARIG_NAMES = ("body", "head")
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('body')
- bone.head[:] = 0.0000, -0.0276, -0.1328
- bone.tail[:] = 0.0000, -0.0170, -0.0197
- bone.roll = 0.0000
- bone.use_connect = False
- bone = arm.edit_bones.new('head')
- bone.head[:] = 0.0000, -0.0170, -0.0197
- bone.tail[:] = 0.0000, 0.0726, 0.1354
- bone.roll = 0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['body']
- bone = arm.edit_bones.new('neck.01')
- bone.head[:] = 0.0000, -0.0170, -0.0197
- bone.tail[:] = 0.0000, -0.0099, 0.0146
- bone.roll = 0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones['head']
- bone = arm.edit_bones.new('neck.02')
- bone.head[:] = 0.0000, -0.0099, 0.0146
- bone.tail[:] = 0.0000, -0.0242, 0.0514
- bone.roll = 0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['neck.01']
- bone = arm.edit_bones.new('neck.03')
- bone.head[:] = 0.0000, -0.0242, 0.0514
- bone.tail[:] = 0.0000, -0.0417, 0.0868
- bone.roll = 0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['neck.02']
- bone = arm.edit_bones.new('neck.04')
- bone.head[:] = 0.0000, -0.0417, 0.0868
- bone.tail[:] = 0.0000, -0.0509, 0.1190
- bone.roll = 0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['neck.03']
- bone = arm.edit_bones.new('neck.05')
- bone.head[:] = 0.0000, -0.0509, 0.1190
- bone.tail[:] = 0.0000, -0.0537, 0.1600
- bone.roll = 0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['neck.04']
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['head']
- pbone['type'] = 'neck_flex'
-
-
-def metarig_definition(obj, orig_bone_name):
- '''
- The bone given is the head, its parent is the body,
- # its only child the first of a chain with matching basenames.
- eg.
- body -> head -> neck_01 -> neck_02 -> neck_03.... etc
- '''
- arm = obj.data
- head = arm.bones[orig_bone_name]
- body = head.parent
-
- children = head.children
- if len(children) != 1:
- raise RigifyError("expected the head bone '%s' to have only 1 child." % orig_bone_name)
-
- child = children[0]
- bone_definition = [body.name, head.name, child.name]
- bone_definition.extend([child.name for child in child.children_recursive_basename])
- return bone_definition
-
-
-def deform(obj, definitions, base_names, options):
- for org_bone_name in definitions[2:]:
- bpy.ops.object.mode_set(mode='EDIT')
-
- # Create deform bone.
- bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True)
-
- # Store name before leaving edit mode
- bone_name = bone.name
-
- # Leave edit mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Get the pose bone
- bone = obj.pose.bones[bone_name]
-
- # Constrain to the original bone
- # XXX. Todo, is this needed if the bone is connected to its parent?
- con = bone.constraints.new('COPY_TRANSFORMS')
- con.name = "copy_loc"
- con.target = obj
- con.subtarget = org_bone_name
-
-
-def main(obj, bone_definition, base_names, options):
- from mathutils import Vector
-
- arm = obj.data
-
- # Initialize container classes for convenience
- mt = bone_class_instance(obj, ["body", "head"]) # meta
- mt.body = bone_definition[0]
- mt.head = bone_definition[1]
- mt.update()
-
- neck_chain = bone_definition[2:]
-
- mt_chain = bone_class_instance(obj, [("neck_%.2d" % (i + 1)) for i in range(len(neck_chain))]) # 99 bones enough eh?
- for i, attr in enumerate(mt_chain.attr_names):
- setattr(mt_chain, attr, neck_chain[i])
- mt_chain.update()
-
- neck_chain_basename = base_names[mt_chain.neck_01_e.name].split(".")[0]
- neck_chain_segment_length = mt_chain.neck_01_e.length
-
- ex = bone_class_instance(obj, ["head", "head_hinge", "neck_socket", "head_ctrl"]) # hinge & extras
-
- # Add the head hinge at the bodys location, becomes the parent of the original head
-
- # apply everything to this copy of the chain
- ex_chain = mt_chain.copy(base_names=base_names)
- ex_chain.neck_01_e.parent = mt_chain.neck_01_e.parent
-
-
- # Copy the head bone and offset
- ex.head_e = copy_bone_simple(arm, mt.head, "MCH-%s" % base_names[mt.head], parent=True)
- ex.head_e.use_connect = False
- ex.head = ex.head_e.name
- # offset
- head_length = ex.head_e.length
- ex.head_e.head.y += head_length / 2.0
- ex.head_e.tail.y += head_length / 2.0
-
- # Yes, use the body bone but call it a head hinge
- ex.head_hinge_e = copy_bone_simple(arm, mt.body, "MCH-%s_hinge" % base_names[mt.head], parent=False)
- ex.head_hinge_e.use_connect = False
- ex.head_hinge = ex.head_hinge_e.name
- ex.head_hinge_e.head.y += head_length / 4.0
- ex.head_hinge_e.tail.y += head_length / 4.0
-
- # Insert the neck socket, the head copys this loation
- ex.neck_socket_e = arm.edit_bones.new("MCH-%s_socked" % neck_chain_basename)
- ex.neck_socket = ex.neck_socket_e.name
- ex.neck_socket_e.use_connect = False
- ex.neck_socket_e.parent = mt.body_e
- ex.neck_socket_e.head = mt.head_e.head
- ex.neck_socket_e.tail = mt.head_e.head - Vector((0.0, neck_chain_segment_length / 2.0, 0.0))
- ex.neck_socket_e.roll = 0.0
-
-
- # copy of the head for controling
- ex.head_ctrl_e = copy_bone_simple(arm, mt.head, base_names[mt.head])
- ex.head_ctrl = ex.head_ctrl_e.name
- ex.head_ctrl_e.parent = ex.head_hinge_e
-
- for i, attr in enumerate(ex_chain.attr_names):
- neck_e = getattr(ex_chain, attr + "_e")
-
- # dont store parent names, re-reference as each chain bones parent.
- neck_e_parent = arm.edit_bones.new("MCH-rot_%s" % base_names[getattr(mt_chain, attr)])
- neck_e_parent.head = neck_e.head
- neck_e_parent.tail = neck_e.head + (mt.head_e.vector.normalize() * neck_chain_segment_length / 2.0)
- neck_e_parent.roll = mt.head_e.roll
-
- orig_parent = neck_e.parent
- neck_e.use_connect = False
- neck_e.parent = neck_e_parent
- neck_e_parent.use_connect = False
-
- if i == 0:
- neck_e_parent.parent = mt.body_e
- else:
- neck_e_parent.parent = orig_parent
-
- deform(obj, bone_definition, base_names, options)
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- mt.update()
- mt_chain.update()
- ex_chain.update()
- ex.update()
-
- # Axis locks
- ex.head_ctrl_p.lock_location = True, True, True
-
- # Simple one off constraints, no drivers
- con = ex.head_ctrl_p.constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = ex.neck_socket
-
- con = ex.head_p.constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = ex.head_ctrl
-
- # driven hinge
- prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, "hinge", create=True)
- ex.head_ctrl_p["hinge"] = 0.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- con = ex.head_hinge_p.constraints.new('COPY_ROTATION')
- con.name = "hinge"
- con.target = obj
- con.subtarget = mt.body
-
- # add driver
- hinge_driver_path = ex.head_ctrl_p.path_from_id() + '["hinge"]'
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = hinge_driver_path
-
- #mod = fcurve_driver.modifiers.new('GENERATOR')
- mod = fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
- head_driver_path = ex.head_ctrl_p.path_from_id()
-
- target_names = [("b%.2d" % (i + 1)) for i in range(len(neck_chain))]
-
- ex.head_ctrl_p["bend_tot"] = 0.0
- fcurve = ex.head_ctrl_p.driver_add('["bend_tot"]')
- driver = fcurve.driver
- driver.type = 'SUM'
- fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier
-
- for i in range(len(neck_chain)):
- var = driver.variables.new()
- var.name = target_names[i]
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = head_driver_path + ('["bend_%.2d"]' % (i + 1))
-
-
- for i, attr in enumerate(ex_chain.attr_names):
- neck_p = getattr(ex_chain, attr + "_p")
- neck_p.lock_location = True, True, True
- neck_p.lock_location = True, True, True
- neck_p.lock_rotations_4d = True
-
- # Add bend prop
- prop_name = "bend_%.2d" % (i + 1)
- prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, prop_name, create=True)
- ex.head_ctrl_p[prop_name] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- # add parent constraint
- neck_p_parent = neck_p.parent
-
- # add constraint
- con = neck_p_parent.constraints.new('COPY_ROTATION')
- con.name = "Copy Rotation"
- con.target = obj
- con.subtarget = ex.head
- con.owner_space = 'LOCAL'
- con.target_space = 'LOCAL'
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'SCRIPTED'
- driver.expression = "bend/bend_tot"
-
- fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier
-
-
- # add target
- var = driver.variables.new()
- var.name = "bend_tot"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = head_driver_path + ('["bend_tot"]')
-
- var = driver.variables.new()
- var.name = "bend"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = head_driver_path + ('["%s"]' % prop_name)
-
-
- # finally constrain the original bone to this one
- orig_neck_p = getattr(mt_chain, attr + "_p")
- con = orig_neck_p.constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = neck_p.name
-
-
- # Set the head control's custom shape to use the last
- # org neck bone for its transform
- ex.head_ctrl_p.custom_shape_transform = obj.pose.bones[bone_definition[len(bone_definition)-1]]
-
-
- # last step setup layers
- if "ex_layer" in options:
- layer = [n == options["ex_layer"] for n in range(0, 32)]
- else:
- layer = list(arm.bones[bone_definition[1]].layers)
- for attr in ex_chain.attr_names:
- getattr(ex_chain, attr + "_b").layers = layer
- for attr in ex.attr_names:
- getattr(ex, attr + "_b").layers = layer
-
- layer = list(arm.bones[bone_definition[1]].layers)
- ex.head_ctrl_b.layers = layer
-
-
- # no blending the result of this
- return None
diff --git a/release/scripts/modules/rigify/palm_curl.py b/release/scripts/modules/rigify/palm_curl.py
deleted file mode 100644
index c063e2b31c9..00000000000
--- a/release/scripts/modules/rigify/palm_curl.py
+++ /dev/null
@@ -1,270 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify_utils import copy_bone_simple, get_side_name
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-# not used, defined for completeness
-METARIG_NAMES = tuple()
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('hand')
- bone.head[:] = 0.0004, -0.0629, 0.0000
- bone.tail[:] = 0.0021, -0.0209, 0.0000
- bone.roll = 0.0000
- bone.use_connect = False
- bone = arm.edit_bones.new('palm.03')
- bone.head[:] = -0.0000, 0.0000, 0.0000
- bone.tail[:] = 0.0025, 0.0644, -0.0065
- bone.roll = -3.1396
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand']
- bone = arm.edit_bones.new('palm.02')
- bone.head[:] = 0.0252, -0.0000, 0.0000
- bone.tail[:] = 0.0324, 0.0627, -0.0065
- bone.roll = -3.1357
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand']
- bone = arm.edit_bones.new('palm.01')
- bone.head[:] = 0.0504, 0.0000, 0.0000
- bone.tail[:] = 0.0703, 0.0508, -0.0065
- bone.roll = -3.1190
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand']
- bone = arm.edit_bones.new('palm.04')
- bone.head[:] = -0.0252, 0.0000, 0.0000
- bone.tail[:] = -0.0286, 0.0606, -0.0065
- bone.roll = 3.1386
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand']
- bone = arm.edit_bones.new('palm.05')
- bone.head[:] = -0.0504, 0.0000, 0.0000
- bone.tail[:] = -0.0669, 0.0534, -0.0065
- bone.roll = 3.1239
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand']
- bone = arm.edit_bones.new('thumb')
- bone.head[:] = 0.0682, -0.0148, 0.0000
- bone.tail[:] = 0.1063, 0.0242, -0.0065
- bone.roll = -3.0929
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand']
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['palm.01']
- pbone['type'] = 'palm_curl'
-
-
-def metarig_definition(obj, orig_bone_name):
- '''
- The bone given is the first in an array of siblings with a matching basename
- sorted with pointer first, little finger last.
- eg.
- [pointer, middle, ring, pinky... ] # any number of fingers
- '''
- arm = obj.data
-
- palm_bone = arm.bones[orig_bone_name]
- palm_parent = palm_bone.parent
- palm_base = palm_bone.basename
- bone_definition = [bone.name for bone in palm_parent.children if bone.basename == palm_base]
- bone_definition.sort()
- bone_definition.reverse()
-
- return [palm_parent.name] + bone_definition
-
-
-def deform(obj, definitions, base_names, options):
- for org_bone_name in definitions[1:]:
- bpy.ops.object.mode_set(mode='EDIT')
-
- # Create deform bone.
- bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True)
-
- # Store name before leaving edit mode
- bone_name = bone.name
-
- # Leave edit mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Get the pose bone
- bone = obj.pose.bones[bone_name]
-
- # Constrain to the original bone
- # XXX. Todo, is this needed if the bone is connected to its parent?
- con = bone.constraints.new('COPY_TRANSFORMS')
- con.name = "copy_loc"
- con.target = obj
- con.subtarget = org_bone_name
-
-
-def main(obj, bone_definition, base_names, options):
- arm = obj.data
-
- children = bone_definition[1:]
-
- # Make a copy of the pinky
- # simply assume the pinky has the lowest name
- pinky_ebone = arm.edit_bones[children[0]]
- ring_ebone = arm.edit_bones[children[1]]
-
- # FIXME, why split the second one?
- base_name = base_names[pinky_ebone.name].rsplit('.', 2)[0]
-
- control_ebone = copy_bone_simple(arm, pinky_ebone.name, base_name + get_side_name(base_names[pinky_ebone.name]), parent=True)
- control_name = control_ebone.name
-
- offset = (pinky_ebone.head - ring_ebone.head)
-
- control_ebone.translate(offset)
-
- deform(obj, bone_definition, base_names, options)
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- arm = obj.data
- control_pbone = obj.pose.bones[control_name]
- pinky_pbone = obj.pose.bones[children[0]]
-
- control_pbone.rotation_mode = 'YZX'
- control_pbone.lock_rotation = False, True, True
- control_pbone.lock_location = True, True, True
-
- driver_fcurves = pinky_pbone.driver_add("rotation_euler")
-
-
- controller_path = control_pbone.path_from_id()
-
- # add custom prop
- control_pbone["spread"] = 0.0
- prop = rna_idprop_ui_prop_get(control_pbone, "spread", create=True)
- prop["soft_min"] = -1.0
- prop["soft_max"] = 1.0
- prop["min"] = -1.0
- prop["max"] = 1.0
-
-
- # *****
- driver = driver_fcurves[0].driver
- driver.type = 'AVERAGE'
-
- var = driver.variables.new()
- var.name = "x"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = controller_path + ".rotation_euler[0]"
-
-
- # *****
- driver = driver_fcurves[1].driver
- driver.expression = "-x/4.0"
-
- var = driver.variables.new()
- var.name = "x"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = controller_path + ".rotation_euler[0]"
-
-
- # *****
- driver = driver_fcurves[2].driver
- driver.expression = "(1.0-cos(x))-s"
-
- for fcurve in driver_fcurves:
- fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier
-
- var = driver.variables.new()
- var.name = "x"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = controller_path + ".rotation_euler[0]"
-
- var = driver.variables.new()
- var.name = "s"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = controller_path + '["spread"]'
-
-
- for i, child_name in enumerate(children):
- child_pbone = obj.pose.bones[child_name]
- child_pbone.rotation_mode = 'YZX'
-
- if child_name != children[-1] and child_name != children[0]:
-
- # this is somewhat arbitrary but seems to look good
- inf = i / (len(children) + 1)
- inf = 1.0 - inf
- inf = ((inf * inf) + inf) / 2.0
-
- # used for X/Y constraint
- inf_minor = inf * inf
-
- con = child_pbone.constraints.new('COPY_ROTATION')
- con.name = "Copy Z Rot"
- con.target = obj
- con.subtarget = children[0] # also pinky_pbone
- con.owner_space = con.target_space = 'LOCAL'
- con.use_x, con.use_y, con.use_z = False, False, True
- con.influence = inf
-
- con = child_pbone.constraints.new('COPY_ROTATION')
- con.name = "Copy XY Rot"
- con.target = obj
- con.subtarget = children[0] # also pinky_pbone
- con.owner_space = con.target_space = 'LOCAL'
- con.use_x, con.use_y, con.use_z = True, True, False
- con.influence = inf_minor
-
-
- child_pbone = obj.pose.bones[children[-1]]
- child_pbone.rotation_mode = 'QUATERNION'
-
- # fix at the end since there is some trouble with tx info not being updated otherwise
- def x_direction():
- # NOTE: the direction of the Z rotation depends on which side the palm is on.
- # we could do a simple side-of-x test but better to work out the direction
- # the hand is facing.
- from mathutils import Vector
- from math import degrees
- child_pbone_01 = obj.pose.bones[children[0]].bone
- child_pbone_02 = obj.pose.bones[children[1]].bone
-
- rel_vec = child_pbone_01.head - child_pbone_02.head
- x_vec = child_pbone_01.matrix.rotation_part() * Vector((1.0, 0.0, 0.0))
-
- return degrees(rel_vec.angle(x_vec)) > 90.0
-
- if x_direction(): # flip
- driver.expression = "-(%s)" % driver.expression
-
-
- # last step setup layers
- arm.bones[control_name].layers = list(arm.bones[bone_definition[1]].layers)
-
-
- # no blending the result of this
- return None
diff --git a/release/scripts/modules/rigify/shape_key_control.py b/release/scripts/modules/rigify/shape_key_control.py
deleted file mode 100644
index a5f57313ab5..00000000000
--- a/release/scripts/modules/rigify/shape_key_control.py
+++ /dev/null
@@ -1,320 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import copy_bone_simple
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-#METARIG_NAMES = ("cpy",)
-RIG_TYPE = "shape_key_control"
-
-
-def addget_shape_key(obj, name="Key"):
- """ Fetches a shape key, or creates it if it doesn't exist
- """
- # Create a shapekey set if it doesn't already exist
- if obj.data.shape_keys is None:
- shape = obj.add_shape_key(name="Basis", from_mix=False)
- obj.active_shape_key_index = 0
-
- # Get the shapekey, or create it if it doesn't already exist
- if name in obj.data.shape_keys.keys:
- shape_key = obj.data.shape_keys.keys[name]
- else:
- shape_key = obj.add_shape_key(name=name, from_mix=False)
-
- return shape_key
-
-
-def addget_shape_key_driver(obj, name="Key"):
- """ Fetches the driver for the shape key, or creates it if it doesn't
- already exist.
- """
- driver_path = 'keys["' + name + '"].value'
- fcurve = None
- driver = None
- new = False
- if obj.data.shape_keys.animation_data is not None:
- for driver_s in obj.data.shape_keys.animation_data.drivers:
- if driver_s.data_path == driver_path:
- fcurve = driver_s
- if fcurve is None:
- fcurve = obj.data.shape_keys.keys[name].driver_add("value")
- fcurve.driver.type = 'AVERAGE'
- new = True
-
- return fcurve, new
-
-
-# TODO:
-def metarig_template():
- # generated by rigify.write_meta_rig
- #bpy.ops.object.mode_set(mode='EDIT')
- #obj = bpy.context.active_object
- #arm = obj.data
- #bone = arm.edit_bones.new('Bone')
- #bone.head[:] = 0.0000, 0.0000, 0.0000
- #bone.tail[:] = 0.0000, 0.0000, 1.0000
- #bone.roll = 0.0000
- #bone.use_connect = False
- #
- #bpy.ops.object.mode_set(mode='OBJECT')
- #pbone = obj.pose.bones['Bone']
- #pbone['type'] = 'copy'
- pass
-
-
-def metarig_definition(obj, orig_bone_name):
- bone = obj.data.bones[orig_bone_name]
- return [bone.name]
-
-
-def main(obj, definitions, base_names, options):
- """ A rig that drives shape keys with the local transforms and/or custom
- properties of a single bone.
- A different shape can be driven by the negative value of a transform as
- well by giving a comma-separated list of two shapes.
-
- Required options:
- mesh: name of mesh object(s) to add/get shapekeys to/from
- (if multiple objects, make a comma-separated list)
- Optional options:
- loc_: name of the shape key to tie to translation of the bone
- loc__fac: default multiplier of the bone influence on the shape key
- rot_: name of the shape key to tie to rotation of the bone
- rot__fac: default multiplier of the bone influence on the shape key
- scale_: name of the shape key to tie to scale of the bone
- scale__fac: default multiplier of the bone influence on the shape key
- shape_key_sliders: comma-separated list of custom properties to create sliders out of for driving shape keys
- : for each property listed in shape_key_sliders, specify a shape key for it to drive
-
- """
-
- bpy.ops.object.mode_set(mode='EDIT')
- eb = obj.data.edit_bones
- pb = obj.pose.bones
-
- org_bone = definitions[0]
-
- # Options
- req_options = ["mesh"]
- for option in req_options:
- if option not in options:
- raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]]))
-
- meshes = options["mesh"].replace(" ", "").split(",")
-
- bone = copy_bone_simple(obj.data, org_bone, base_names[org_bone], parent=True).name
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Set rotation mode and axis locks
- pb[bone].rotation_mode = pb[org_bone].rotation_mode
- pb[bone].lock_location = tuple(pb[org_bone].lock_location)
- pb[bone].lock_rotation = tuple(pb[org_bone].lock_rotation)
- pb[bone].lock_rotation_w = pb[org_bone].lock_rotation_w
- pb[bone].lock_rotations_4d = pb[org_bone].lock_rotations_4d
- pb[bone].lock_scale = tuple(pb[org_bone].lock_scale)
-
- # List of rig options for specifying shape keys
- # Append '_fac' to the end for the name of the corresponding 'factor
- # default' option for that shape
- shape_key_options = ["loc_x",
- "loc_y",
- "loc_z",
- "rot_x",
- "rot_y",
- "rot_z",
- "scale_x",
- "scale_y",
- "scale_z"]
-
- driver_paths = {"loc_x":".location[0]",
- "loc_y":".location[1]",
- "loc_z":".location[2]",
- "rot_x":".rotation_euler[0]",
- "rot_y":".rotation_euler[1]",
- "rot_z":".rotation_euler[2]",
- "qrot_x":".rotation_quaternion[1]",
- "qrot_y":".rotation_quaternion[2]",
- "qrot_z":".rotation_quaternion[3]",
- "scale_x":".scale[0]",
- "scale_y":".scale[1]",
- "scale_z":".scale[2]"}
-
- # Create the shape keys and drivers for transforms
- shape_info = []
- for option in shape_key_options:
- if option in options:
- shape_names = options[option].replace(" ", "").split(",")
-
- var_name = bone.replace(".","").replace("-","_") + "_" + option
- # Different RNA paths for euler vs quat
- if option in (shape_key_options[3:6]+shape_key_options[12:15]) \
- and pb[bone].rotation_mode == 'QUATERNION':
- var_path = driver_paths['q' + option]
- else:
- var_path = driver_paths[option]
-
- if (option+"_fac") in options:
- fac = options[option+"_fac"]
- else:
- fac = 1.0
-
- # Positive
- if shape_names[0] != "":
- # Different expressions for loc/rot/scale and positive/negative
- if option in shape_key_options[:3]:
- # Location
- expression = var_name + " * " + str(fac)
- elif option in shape_key_options[3:6]:
- # Rotation
- # Different expressions for euler vs quats
- if pb[bone].rotation_mode == 'QUATERNION':
- expression = "2 * asin(" + var_name + ") * " + str(fac)
- else:
- expression = var_name + " * " + str(fac)
- elif option in shape_key_options[6:9]:
- # Scale
- expression = "(1.0 - " + var_name + ") * " + str(fac) + " * -2"
- shape_name = shape_names[0]
- create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression)
-
- # Negative
- if shape_names[0] != "" and len(shape_names) > 1:
- # Different expressions for loc/rot/scale and positive/negative
- if option in shape_key_options[:3]:
- # Location
- expression = var_name + " * " + str(fac) + " * -1"
- elif option in shape_key_options[3:6]:
- # Rotation
- # Different expressions for euler vs quats
- if pb[bone].rotation_mode == 'QUATERNION':
- expression = "-2 * asin(" + var_name + ") * " + str(fac)
- else:
- expression = var_name + " * " + str(fac) + " * -1"
- elif option in shape_key_options[6:9]:
- # Scale
- expression = "(1.0 - " + var_name + ") * " + str(fac) + " * 2"
- shape_name = shape_names[1]
- create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression)
-
- # Create the shape keys and drivers for custom-property sliders
- if "shape_key_sliders" in options:
- # Get the slider names
- slider_names = options["shape_key_sliders"].replace(" ", "").split(",")
- if slider_names[0] != "":
- # Loop through the slider names and check if they have
- # shape keys specified for them, and if so, set them up.
- for slider_name in slider_names:
- if slider_name in options:
- shape_names = options[slider_name].replace(" ", "").split(",")
-
- # Set up the custom property on the bone
- prop = rna_idprop_ui_prop_get(pb[bone], slider_name, create=True)
- pb[bone][slider_name] = 0.0
- prop["min"] = 0.0
- prop["max"] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
- if len(shape_names) > 1:
- prop["min"] = -1.0
- prop["soft_min"] = -1.0
-
- # Add the shape drivers
- # Positive
- if shape_names[0] != "":
- # Set up the variables for creating the shape key driver
- shape_name = shape_names[0]
- var_name = slider_name.replace(".", "_").replace("-", "_")
- var_path = '["' + slider_name + '"]'
- if slider_name + "_fac" in options:
- fac = options[slider_name + "_fac"]
- else:
- fac = 1.0
- expression = var_name + " * " + str(fac)
- # Create the shape key driver
- create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression)
- # Negative
- if shape_names[0] != "" and len(shape_names) > 1:
- # Set up the variables for creating the shape key driver
- shape_name = shape_names[1]
- var_name = slider_name.replace(".", "_").replace("-", "_")
- var_path = '["' + slider_name + '"]'
- if slider_name + "_fac" in options:
- fac = options[slider_name + "_fac"]
- else:
- fac = 1.0
- expression = var_name + " * " + str(fac) + " * -1"
- # Create the shape key driver
- create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression)
-
-
- # Org bone copy transforms of control bone
- con = pb[org_bone].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = bone
-
- return (None,)
-
-
-def create_shape_and_driver(obj, bone, meshes, shape_name, var_name, var_path, expression):
- """ Creates/gets a shape key and sets up a driver for it.
-
- obj = armature object
- bone = driving bone name
- meshes = list of meshes to create the shapekey/driver on
- shape_name = name of the shape key
- var_name = name of the driving variable
- var_path = path to the property on the bone to drive with
- expression = python expression for the driver
- """
- pb = obj.pose.bones
- bpy.ops.object.mode_set(mode='OBJECT')
-
- for mesh_name in meshes:
- mesh_obj = bpy.data.objects[mesh_name]
-
- # Add/get the shape key
- shape = addget_shape_key(mesh_obj, name=shape_name)
-
- # Add/get the shape key driver
- fcurve, a = addget_shape_key_driver(mesh_obj, name=shape_name)
-
- # Set up the driver
- driver = fcurve.driver
- driver.type = 'SCRIPTED'
- driver.expression = expression
-
- # Get the variable, or create it if it doesn't already exist
- if var_name in driver.variables:
- var = driver.variables[var_name]
- else:
- var = driver.variables.new()
- var.name = var_name
-
- # Set up the variable
- var.type = "SINGLE_PROP"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = 'pose.bones["' + bone + '"]' + var_path
-
-
diff --git a/release/scripts/modules/rigify/shape_key_distance.py b/release/scripts/modules/rigify/shape_key_distance.py
deleted file mode 100644
index 3045fcdab0d..00000000000
--- a/release/scripts/modules/rigify/shape_key_distance.py
+++ /dev/null
@@ -1,172 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-
-#METARIG_NAMES = ("cpy",)
-RIG_TYPE = "shape_key_distance"
-
-
-def addget_shape_key(obj, name="Key"):
- """ Fetches a shape key, or creates it if it doesn't exist
- """
- # Create a shapekey set if it doesn't already exist
- if obj.data.shape_keys is None:
- shape = obj.add_shape_key(name="Basis", from_mix=False)
- obj.active_shape_key_index = 0
-
- # Get the shapekey, or create it if it doesn't already exist
- if name in obj.data.shape_keys.keys:
- shape_key = obj.data.shape_keys.keys[name]
- else:
- shape_key = obj.add_shape_key(name=name, from_mix=False)
-
- return shape_key
-
-
-def addget_shape_key_driver(obj, name="Key"):
- """ Fetches the driver for the shape key, or creates it if it doesn't
- already exist.
- """
- driver_path = 'keys["' + name + '"].value'
- fcurve = None
- driver = None
- if obj.data.shape_keys.animation_data is not None:
- for driver_s in obj.data.shape_keys.animation_data.drivers:
- if driver_s.data_path == driver_path:
- fcurve = driver_s
- if fcurve is None:
- fcurve = obj.data.shape_keys.keys[name].driver_add("value")
- fcurve.driver.type = 'AVERAGE'
-
- return fcurve
-
-
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('Bone')
- bone.head[:] = 0.0000, 0.0000, 0.0000
- bone.tail[:] = 0.0000, 0.0000, 1.0000
- bone.roll = 0.0000
- bone.use_connect = False
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['Bone']
- pbone['type'] = 'copy'
-
-
-def metarig_definition(obj, orig_bone_name):
- bone = obj.data.bones[orig_bone_name]
- return [bone.name]
-
-
-def deform(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
- eb = obj.data.edit_bones
-
- bone_from = definitions[0]
-
-
- # Options
- req_options = ["to", "mesh", "shape_key"]
- for option in req_options:
- if option not in options:
- raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]]))
-
- bone_to = "ORG-" + options["to"]
- meshes = options["mesh"].replace(" ", "").split(",")
- shape_key_name = options["shape_key"]
-
- if "dmul" in options:
- shape_blend_fac = options["dmul"]
- else:
- shape_blend_fac = 1.0
-
-
- # Calculate the distance between the bones
- distance = (eb[bone_from].head - eb[bone_to].head).length
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # For every listed mesh object
- for mesh_name in meshes:
- mesh_obj = bpy.data.objects[mesh_name]
-
- # Add/get the shape key
- shape_key = addget_shape_key(mesh_obj, name=shape_key_name)
-
- # Add/get the shape key driver
- fcurve = addget_shape_key_driver(mesh_obj, name=shape_key_name)
- driver = fcurve.driver
-
- # Get the variable, or create it if it doesn't already exist
- var_name = base_names[bone_from]
- if var_name in driver.variables:
- var = driver.variables[var_name]
- else:
- var = driver.variables.new()
- var.name = var_name
-
- # Set up the variable
- var.type = "LOC_DIFF"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].bone_target = bone_from
- var.targets[1].id_type = 'OBJECT'
- var.targets[1].id = obj
- var.targets[1].bone_target = bone_to
-
- # Set fcurve offset, so zero is at the rest distance
-
- mod = fcurve.modifiers[0]
- if distance > 0.00001:
- mod.coefficients[0] = -shape_blend_fac
- mod.coefficients[1] = shape_blend_fac / distance
-
- return (None,)
-
-
-
-
-def control(obj, definitions, base_names, options):
- """ options:
- mesh: name of mesh object with the shape key
- shape_key: name of shape key
- to: name of bone to measure distance from
- """
- pass
-
-
-
-
-def main(obj, bone_definition, base_names, options):
- # Create control rig
- #control(obj, bone_definition, base_names, options)
- # Create deform rig
- deform(obj, bone_definition, base_names, options)
-
- return (None,)
-
diff --git a/release/scripts/modules/rigify/shape_key_rotdiff.py b/release/scripts/modules/rigify/shape_key_rotdiff.py
deleted file mode 100644
index a6ba5adfe6b..00000000000
--- a/release/scripts/modules/rigify/shape_key_rotdiff.py
+++ /dev/null
@@ -1,172 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-
-#METARIG_NAMES = ("cpy",)
-RIG_TYPE = "shape_key_rotdiff"
-
-
-def addget_shape_key(obj, name="Key"):
- """ Fetches a shape key, or creates it if it doesn't exist
- """
- # Create a shapekey set if it doesn't already exist
- if obj.data.shape_keys is None:
- shape = obj.add_shape_key(name="Basis", from_mix=False)
- obj.active_shape_key_index = 0
-
- # Get the shapekey, or create it if it doesn't already exist
- if name in obj.data.shape_keys.keys:
- shape_key = obj.data.shape_keys.keys[name]
- else:
- shape_key = obj.add_shape_key(name=name, from_mix=False)
-
- return shape_key
-
-
-def addget_shape_key_driver(obj, name="Key"):
- """ Fetches the driver for the shape key, or creates it if it doesn't
- already exist.
- """
- driver_path = 'keys["' + name + '"].value'
- fcurve = None
- driver = None
- if obj.data.shape_keys.animation_data is not None:
- for driver_s in obj.data.shape_keys.animation_data.drivers:
- if driver_s.data_path == driver_path:
- fcurve = driver_s
- if fcurve is None:
- fcurve = obj.data.shape_keys.keys[name].driver_add("value")
- fcurve.driver.type = 'AVERAGE'
-
- return fcurve
-
-
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('Bone')
- bone.head[:] = 0.0000, 0.0000, 0.0000
- bone.tail[:] = 0.0000, 0.0000, 1.0000
- bone.roll = 0.0000
- bone.use_connect = False
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['Bone']
- pbone['type'] = 'copy'
-
-
-def metarig_definition(obj, orig_bone_name):
- bone = obj.data.bones[orig_bone_name]
- return [bone.name]
-
-
-def deform(obj, definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
- eb = obj.data.edit_bones
-
- bone_from = definitions[0]
-
-
- # Options
- req_options = ["to", "mesh", "shape_key"]
- for option in req_options:
- if option not in options:
- raise RigifyError("'%s' rig type requires a '%s' option (bone: %s)" % (RIG_TYPE, option, base_names[definitions[0]]))
-
- bone_to = "ORG-" + options["to"]
- meshes = options["mesh"].replace(" ", "").split(",")
- shape_key_name = options["shape_key"]
-
- if "dmul" in options:
- shape_blend_fac = options["dmul"]
- else:
- shape_blend_fac = 1.0
-
-
- # Calculate the rotation difference between the bones
- rotdiff = (eb[bone_from].matrix.to_quat() * eb[bone_to].matrix.to_quat()) * 2
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # For every listed mesh object
- for mesh_name in meshes:
- mesh_obj = bpy.data.objects[mesh_name]
-
- # Add/get the shape key
- shape_key = addget_shape_key(mesh_obj, name=shape_key_name)
-
- # Add/get the shape key driver
- fcurve = addget_shape_key_driver(mesh_obj, name=shape_key_name)
- driver = fcurve.driver
-
- # Get the variable, or create it if it doesn't already exist
- var_name = base_names[bone_from]
- if var_name in driver.variables:
- var = driver.variables[var_name]
- else:
- var = driver.variables.new()
- var.name = var_name
-
- # Set up the variable
- var.type = "ROTATION_DIFF"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].bone_target = bone_from
- var.targets[1].id_type = 'OBJECT'
- var.targets[1].id = obj
- var.targets[1].bone_target = bone_to
-
- # Set fcurve offset, so zero is at the rest distance
-
- mod = fcurve.modifiers[0]
- if rotdiff > 0.00001:
- mod.coefficients[0] = -shape_blend_fac
- mod.coefficients[1] = shape_blend_fac / rotdiff
-
- return (None,)
-
-
-
-
-def control(obj, definitions, base_names, options):
- """ options:
- mesh: name of mesh object with the shape key
- shape_key: name of shape key
- to: name of bone to measure distance from
- """
- pass
-
-
-
-
-def main(obj, bone_definition, base_names, options):
- # Create control rig
- #control(obj, bone_definition, base_names, options)
- # Create deform rig
- deform(obj, bone_definition, base_names, options)
-
- return (None,)
-
diff --git a/release/scripts/modules/rigify/spine_pivot_flex.py b/release/scripts/modules/rigify/spine_pivot_flex.py
deleted file mode 100644
index 7782380eedb..00000000000
--- a/release/scripts/modules/rigify/spine_pivot_flex.py
+++ /dev/null
@@ -1,481 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import bone_class_instance, copy_bone_simple
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-# not used, defined for completeness
-METARIG_NAMES = ("pelvis", "ribcage")
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('pelvis')
- bone.head[:] = 0.0000, -0.0306, 0.1039
- bone.tail[:] = 0.0000, -0.0306, -0.0159
- bone.roll = 0.0000
- bone.use_connect = False
- bone = arm.edit_bones.new('rib_cage')
- bone.head[:] = 0.0000, -0.0306, 0.1039
- bone.tail[:] = 0.0000, -0.0306, 0.2236
- bone.roll = -0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones['pelvis']
- bone = arm.edit_bones.new('spine.01')
- bone.head[:] = 0.0000, 0.0000, -0.0000
- bone.tail[:] = 0.0000, -0.0306, 0.1039
- bone.roll = -0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones['rib_cage']
- bone = arm.edit_bones.new('spine.02')
- bone.head[:] = 0.0000, -0.0306, 0.1039
- bone.tail[:] = -0.0000, -0.0398, 0.2045
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['spine.01']
- bone = arm.edit_bones.new('spine.03')
- bone.head[:] = -0.0000, -0.0398, 0.2045
- bone.tail[:] = -0.0000, -0.0094, 0.2893
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['spine.02']
- bone = arm.edit_bones.new('spine.04')
- bone.head[:] = -0.0000, -0.0094, 0.2893
- bone.tail[:] = -0.0000, 0.0335, 0.3595
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['spine.03']
- bone = arm.edit_bones.new('spine.05')
- bone.head[:] = -0.0000, 0.0335, 0.3595
- bone.tail[:] = -0.0000, 0.0555, 0.4327
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['spine.04']
- bone = arm.edit_bones.new('spine.06')
- bone.head[:] = -0.0000, 0.0555, 0.4327
- bone.tail[:] = -0.0000, 0.0440, 0.5207
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['spine.05']
- bone = arm.edit_bones.new('spine.07')
- bone.head[:] = -0.0000, 0.0440, 0.5207
- bone.tail[:] = -0.0000, 0.0021, 0.5992
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['spine.06']
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['rib_cage']
- pbone['type'] = 'spine_pivot_flex'
-
-
-def metarig_definition(obj, orig_bone_name):
- '''
- The bone given is the second in a chain.
- Expects at least 1 parent and a chain of children withe the same basename
- eg.
- pelvis -> rib_cage -> spine.01 -> spine.02 -> spine.03
-
- note: same as neck.
- '''
- arm = obj.data
- ribcage = arm.bones[orig_bone_name]
- pelvis = ribcage.parent
-
- if pelvis is None:
- raise RigifyError("expected the ribcage bone:'%s' to have a parent (ribcage)." % ribcage.name)
-
- children = ribcage.children
- if len(children) != 1:
- raise RigifyError("expected the ribcage to have only 1 child.")
-
- child = children[0]
-
- bone_definition = [pelvis.name, ribcage.name, child.name]
- bone_definition.extend([child.name for child in child.children_recursive_basename])
- return bone_definition
-
-
-def fk(*args):
- main(*args)
-
-
-def deform(obj, definitions, base_names, options):
- for org_bone_name in definitions[2:]:
- bpy.ops.object.mode_set(mode='EDIT')
-
- # Create deform bone.
- bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True)
-
- # Store name before leaving edit mode
- bone_name = bone.name
-
- # Leave edit mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Get the pose bone
- bone = obj.pose.bones[bone_name]
-
- # Constrain to the original bone
- # XXX. Todo, is this needed if the bone is connected to its parent?
- con = bone.constraints.new('COPY_TRANSFORMS')
- con.name = "copy_loc"
- con.target = obj
- con.subtarget = org_bone_name
-
-
-def main(obj, bone_definition, base_names, options):
- from mathutils import Vector, Matrix
- from math import radians, pi
-
- arm = obj.data
-
- # Initialize container classes for convenience
- mt = bone_class_instance(obj, ["pelvis", "ribcage"]) # meta
- mt.pelvis = bone_definition[0]
- mt.ribcage = bone_definition[1]
- mt.update()
-
- spine_chain_orig = tuple(bone_definition[2:])
- spine_chain = [arm.edit_bones[child_name] for child_name in spine_chain_orig]
- spine_chain_basename = base_names[spine_chain[0].name].rsplit(".", 1)[0] # probably 'ORG-spine.01' -> 'spine'
- spine_chain_len = len(spine_chain_orig)
-
- child = spine_chain[0]
- spine_chain_segment_length = child.length
- #child.parent = mt.pelvis_e # was mt.ribcage
-
- # The first bone in the chain happens to be the basis of others, create them now
- ex = bone_class_instance(obj, ["pelvis_copy", "ribcage_hinge", "ribcage_copy", "spine_rotate"])
-
- ex.pelvis_copy_e = copy_bone_simple(arm, mt.pelvis, base_names[mt.pelvis]) # no parent
- ex.pelvis_copy = ex.pelvis_copy_e.name
- ex.pelvis_copy_e.use_local_location = False
-
- # copy the pelvis, offset to make MCH-spine_rotate and MCH-ribcage_hinge
- ex.ribcage_hinge_e = copy_bone_simple(arm, mt.pelvis, "MCH-%s_hinge" % base_names[mt.ribcage])
- ex.ribcage_hinge = ex.ribcage_hinge_e.name
- ex.ribcage_hinge_e.translate(Vector((0.0, spine_chain_segment_length / 4.0, 0.0)))
-
- ex.spine_rotate_e = copy_bone_simple(arm, mt.ribcage, "MCH-%s_rotate" % spine_chain_basename)
- ex.spine_rotate = ex.spine_rotate_e.name
- ex.spine_rotate_e.translate(Vector((0.0, spine_chain_segment_length / 2.0, 0.0)))
- ex.spine_rotate_e.use_connect = False
- ex.spine_rotate_e.parent = ex.pelvis_copy_e
-
-
- # Copy the last bone now
- child = spine_chain[-1]
-
- ex.ribcage_copy_e = copy_bone_simple(arm, mt.ribcage, base_names[mt.ribcage])
- ex.ribcage_copy = ex.ribcage_copy_e.name
- ex.ribcage_copy_e.use_connect = False
- ex.ribcage_copy_e.parent = ex.ribcage_hinge_e
-
- spine_chain = [child.name for child in spine_chain]
-
- # We have 3 spine chains
- # - original (ORG_*)
- # - copy (*use original name*)
- # - reverse (MCH-rev_*)
- spine_chain_attrs = [("spine_%.2d" % (i + 1)) for i in range(spine_chain_len)]
-
- mt_chain = bone_class_instance(obj, spine_chain_attrs) # ORG_*
- rv_chain = bone_class_instance(obj, spine_chain_attrs) # *
- ex_chain = bone_class_instance(obj, spine_chain_attrs) # MCH-rev_*
- del spine_chain_attrs
-
- for i, child_name in enumerate(spine_chain):
- child_name_orig = base_names[spine_chain_orig[i]]
-
- attr = mt_chain.attr_names[i] # eg. spine_04
-
- setattr(mt_chain, attr, spine_chain_orig[i]) # the original bone
-
- ebone = copy_bone_simple(arm, child_name, child_name_orig) # use the original name
- setattr(ex_chain, attr, ebone.name)
-
- ebone = copy_bone_simple(arm, child_name, "MCH-rev_%s" % child_name_orig)
- setattr(rv_chain, attr, ebone.name)
- ebone.use_connect = False
-
- mt_chain.update()
- ex_chain.update()
- rv_chain.update()
-
- # Now we need to re-parent these chains
- for i, child_name in enumerate(spine_chain_orig):
- attr = ex_chain.attr_names[i] + "_e"
- ebone = getattr(ex_chain, attr)
- if i == 0:
- ebone.use_connect = False
- ebone.parent = ex.pelvis_copy_e
- else:
- attr_parent = ex_chain.attr_names[i - 1] + "_e"
- ebone.parent = getattr(ex_chain, attr_parent)
-
- # intentional! get the parent from the other parallel chain member
- getattr(rv_chain, attr).parent = ebone
-
-
- # ex_chain needs to interlace bones!
- # Note, skip the first bone
- for i in range(1, spine_chain_len): # similar to neck
- child_name_orig = base_names[spine_chain_orig[i]]
- spine_e = getattr(mt_chain, mt_chain.attr_names[i] + "_e")
-
- # dont store parent names, re-reference as each chain bones parent.
- spine_e_parent = arm.edit_bones.new("MCH-rot_%s" % child_name_orig)
- spine_e_parent.head = spine_e.head
- spine_e_parent.tail = spine_e.head + (mt.ribcage_e.vector.normalize() * spine_chain_segment_length / 2.0)
- spine_e_parent.roll = mt.ribcage_e.roll
-
-
- spine_e = getattr(ex_chain, ex_chain.attr_names[i] + "_e")
- orig_parent = spine_e.parent
- spine_e.use_connect = False
- spine_e.parent = spine_e_parent
- spine_e_parent.use_connect = False
-
- spine_e_parent.parent = orig_parent
-
-
- # Rotate the rev chain 180 about the by the first bones center point
- pivot = (rv_chain.spine_01_e.head + rv_chain.spine_01_e.tail) * 0.5
- matrix = Matrix.Rotation(radians(180), 3, 'X')
- for i, attr in enumerate(rv_chain.attr_names): # similar to neck
- spine_e = getattr(rv_chain, attr + "_e")
- # use the first bone as the pivot
-
- spine_e.head = ((spine_e.head - pivot) * matrix) + pivot
- spine_e.tail = ((spine_e.tail - pivot) * matrix) + pivot
- spine_e.roll += pi # 180d roll
- del spine_e
-
- deform(obj, bone_definition, base_names, options)
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # refresh pose bones
- mt.update()
- ex.update()
- mt_chain.update()
- ex_chain.update()
- rv_chain.update()
-
- # Axis locks
- ex.ribcage_copy_p.lock_location = True, True, True
-
- con = ex.ribcage_hinge_p.constraints.new('COPY_ROTATION')
- con.name = "hinge"
- con.target = obj
- con.subtarget = ex.pelvis_copy
-
- # add driver
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = ex.ribcage_copy_p.path_from_id() + '["hinge"]'
-
- mod = fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
- con = ex.spine_rotate_p.constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = ex.ribcage_copy
-
- # ex.pelvis_copy_p / rib_cage
- con = ex.ribcage_copy_p.constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = ex.pelvis_copy
- con.head_tail = 0.0
-
- # This stores all important ID props
- prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, "hinge", create=True)
- ex.ribcage_copy_p["hinge"] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, "pivot_slide", create=True)
- ex.ribcage_copy_p["pivot_slide"] = 1.0 / spine_chain_len
- prop["soft_min"] = 1.0 / spine_chain_len
- prop["soft_max"] = 1.0
-
-
- # Create a fake connected parent/child relationship with bone location constraints
- # positioned at the tip.
-
- # reverse bones / MCH-rev_spine.##
- for i in range(1, spine_chain_len):
- spine_p = getattr(rv_chain, rv_chain.attr_names[i] + "_p")
- spine_fake_parent_name = getattr(rv_chain, rv_chain.attr_names[i - 1])
-
- con = spine_p.constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = spine_fake_parent_name
- con.head_tail = 1.0
- del spine_p, spine_fake_parent_name, con
-
-
- # Constrain 'inbetween' bones
- target_names = [("b%.2d" % (i + 1)) for i in range(spine_chain_len - 1)]
- rib_driver_path = ex.ribcage_copy_p.path_from_id()
-
- ex.ribcage_copy_p["bend_tot"] = 0.0
- fcurve = ex.ribcage_copy_p.driver_add('["bend_tot"]')
- driver = fcurve.driver
- driver.type = 'SUM'
- fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier
-
- for i in range(spine_chain_len - 1):
- var = driver.variables.new()
- var.name = target_names[i]
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = rib_driver_path + ('["bend_%.2d"]' % (i + 1))
-
- for i in range(1, spine_chain_len):
-
- # Add bend prop
- prop_name = "bend_%.2d" % i
- prop = rna_idprop_ui_prop_get(ex.ribcage_copy_p, prop_name, create=True)
- if ("bend_%.2d" % i) in options:
- ex.ribcage_copy_p[prop_name] = options["bend_%.2d" % i]
- else:
- ex.ribcage_copy_p[prop_name] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- spine_p = getattr(ex_chain, ex_chain.attr_names[i] + "_p")
- spine_p_parent = spine_p.parent # interlaced bone
-
- con = spine_p_parent.constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = ex.spine_rotate
- con.owner_space = 'LOCAL'
- con.target_space = 'LOCAL'
- del spine_p
-
- # add driver
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'SCRIPTED'
- driver.expression = "bend/bend_tot"
-
- fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier
-
-
- # add target
- var = driver.variables.new()
- var.name = "bend_tot"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = rib_driver_path + ('["bend_tot"]')
-
- var = driver.variables.new()
- var.name = "bend"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = rib_driver_path + ('["%s"]' % prop_name)
-
-
-
- # original bone drivers
- # note: the first bone has a lot more constraints, but also this simple one is first.
- for i, attr in enumerate(mt_chain.attr_names):
- spine_p = getattr(mt_chain, attr + "_p")
-
- con = spine_p.constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = getattr(ex_chain, attr) # lock to the copy's rotation
- del spine_p
-
- # pivot slide: - lots of copy location constraints.
-
- con = mt_chain.spine_01_p.constraints.new('COPY_LOCATION')
- con.name = "base"
- con.target = obj
- con.subtarget = rv_chain.spine_01 # lock to the reverse location
-
- for i in range(1, spine_chain_len + 1):
- con = mt_chain.spine_01_p.constraints.new('COPY_LOCATION')
- con.name = "slide_%d" % i
- con.target = obj
-
- if i == spine_chain_len:
- attr = mt_chain.attr_names[i - 1]
- else:
- attr = mt_chain.attr_names[i]
-
- con.subtarget = getattr(rv_chain, attr) # lock to the reverse location
-
- if i == spine_chain_len:
- con.head_tail = 1.0
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = rib_driver_path + '["pivot_slide"]'
-
- mod = fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = - (i - 1)
- mod.coefficients[1] = spine_chain_len
-
-
- # Set pelvis and ribcage controls to use the first and last bone in the
- # spine respectively for their custom shape transform
- ex.ribcage_copy_p.custom_shape_transform = obj.pose.bones[bone_definition[len(bone_definition)-1]]
- ex.pelvis_copy_p.custom_shape_transform = obj.pose.bones[bone_definition[2]]
-
-
- # last step setup layers
- if "ex_layer" in options:
- layer = [n == options["ex_layer"] for n in range(0, 32)]
- else:
- layer = list(arm.bones[bone_definition[1]].layers)
- for attr in ex.attr_names:
- getattr(ex, attr + "_b").layers = layer
- for attr in ex_chain.attr_names:
- getattr(ex_chain, attr + "_b").layers = layer
- for attr in rv_chain.attr_names:
- getattr(rv_chain, attr + "_b").layers = layer
-
- layer = list(arm.bones[bone_definition[1]].layers)
- arm.bones[ex.pelvis_copy].layers = layer
- arm.bones[ex.ribcage_copy].layers = layer
-
- # no support for blending chains
- return None
diff --git a/release/scripts/modules/rigify/stretch.py b/release/scripts/modules/rigify/stretch.py
deleted file mode 100644
index 6a498e5aa29..00000000000
--- a/release/scripts/modules/rigify/stretch.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import copy_bone_simple
-
-METARIG_NAMES = tuple()
-RIG_TYPE = "stretch"
-
-# TODO
-#def metarig_template():
-# # generated by rigify.write_meta_rig
-# bpy.ops.object.mode_set(mode='EDIT')
-# obj = bpy.context.active_object
-# arm = obj.data
-# bone = arm.edit_bones.new('Bone')
-# bone.head[:] = 0.0000, 0.0000, 0.0000
-# bone.tail[:] = 0.0000, 0.0000, 1.0000
-# bone.roll = 0.0000
-# bone.use_connect = False
-#
-# bpy.ops.object.mode_set(mode='OBJECT')
-# pbone = obj.pose.bones['Bone']
-# pbone['type'] = 'copy'
-
-bool_map = {0: False, 1: True,
- 0.0: False, 1.0: True,
- "false": False, "true": True,
- "False": False, "True": True,
- "no": False, "yes": True,
- "No": False, "Yes": True}
-
-
-def metarig_definition(obj, orig_bone_name):
- return (orig_bone_name,)
-
-
-def main(obj, bone_definition, base_names, options):
- """ A stretchy bone from one bone to another.
- Deformation only (no controls).
- """
- # Verify required parameter
- if "to" not in options:
- raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[bone_definition[0]]))
- if type(options["to"]) is not str:
- raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[bone_definition[0]]))
- if ("ORG-" + options["to"]) not in obj.data.bones:
- raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[bone_definition[0]]))
-
- preserve_volume = None
- # Check optional parameter
- if "preserve_volume" in options:
- try:
- preserve_volume = bool_map[options["preserve_volume"]]
- except KeyError:
- preserve_volume = False
-
- eb = obj.data.edit_bones
- bb = obj.data.bones
- pb = obj.pose.bones
-
- bpy.ops.object.mode_set(mode='EDIT')
- arm = obj.data
-
- mbone1 = bone_definition[0]
- mbone2 = "ORG-" + options["to"]
-
- bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s" % base_names[bone_definition[0]])
- bone_e.use_connect = False
- bone_e.parent = eb[mbone1]
- bone_e.tail = eb[mbone2].head
- bone = bone_e.name
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Constraints
- con = pb[bone].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = mbone2
-
- con = pb[bone].constraints.new('STRETCH_TO')
- con.target = obj
- con.subtarget = mbone2
- con.rest_length = bb[bone].length
- if preserve_volume:
- con.volume = 'VOLUME_XZX'
- else:
- con.volume = 'NO_VOLUME'
-
- return tuple()
diff --git a/release/scripts/modules/rigify/stretch_twist.py b/release/scripts/modules/rigify/stretch_twist.py
deleted file mode 100644
index 07ce031967f..00000000000
--- a/release/scripts/modules/rigify/stretch_twist.py
+++ /dev/null
@@ -1,152 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import copy_bone_simple
-
-METARIG_NAMES = tuple()
-RIG_TYPE = "stretch_twist"
-
-# TODO
-#def metarig_template():
-# # generated by rigify.write_meta_rig
-# bpy.ops.object.mode_set(mode='EDIT')
-# obj = bpy.context.active_object
-# arm = obj.data
-# bone = arm.edit_bones.new('Bone')
-# bone.head[:] = 0.0000, 0.0000, 0.0000
-# bone.tail[:] = 0.0000, 0.0000, 1.0000
-# bone.roll = 0.0000
-# bone.use_connect = False
-#
-# bpy.ops.object.mode_set(mode='OBJECT')
-# pbone = obj.pose.bones['Bone']
-# pbone['type'] = 'copy'
-
-bool_map = {0:False, 1:True,
- 0.0:False, 1.0:True,
- "false":False, "true":True,
- "False":False, "True":True,
- "no":False, "yes":True,
- "No":False, "Yes":True}
-
-def metarig_definition(obj, orig_bone_name):
- return (orig_bone_name,)
-
-
-
-
-def main(obj, bone_definition, base_names, options):
- """ A dual-bone stretchy bone setup. Each half follows the twist of the
- bone on its side.
- Deformation only (no controls).
- """
- # Verify required parameter
- if "to" not in options:
- raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0]))
- if type(options["to"]) is not str:
- raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0]))
- if ("ORG-" + options["to"]) not in obj.data.bones:
- raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0]))
-
- preserve_volume = None
- # Check optional parameter
- if "preserve_volume" in options:
- try:
- preserve_volume = bool_map[options["preserve_volume"]]
- except KeyError:
- preserve_volume = False
-
- eb = obj.data.edit_bones
- bb = obj.data.bones
- pb = obj.pose.bones
-
- bpy.ops.object.mode_set(mode='EDIT')
- arm = obj.data
-
- mbone1 = bone_definition[0]
- mbone2 = "ORG-" + options["to"]
-
- bone_e = copy_bone_simple(obj.data, mbone1, "MCH-%s" % base_names[bone_definition[0]])
- bone_e.use_connect = False
- bone_e.parent = None
- bone_e.head = (eb[mbone1].head + eb[mbone2].head) / 2
- bone_e.tail = (bone_e.head[0], bone_e.head[1], bone_e.head[2]+0.1)
- mid_bone = bone_e.name
-
- bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s.01" % base_names[bone_definition[0]])
- bone_e.use_connect = False
- bone_e.parent = eb[mbone1]
- bone_e.tail = eb[mid_bone].head
- bone1 = bone_e.name
-
- bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]])
- bone_e.use_connect = False
- bone_e.parent = eb[mbone2]
- bone_e.tail = eb[mid_bone].head
- bone2 = bone_e.name
-
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Constraints
-
- # Mid bone
- con = pb[mid_bone].constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = mbone1
-
- con = pb[mid_bone].constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = mbone2
- con.influence = 0.5
-
- # Bone 1
- con = pb[bone1].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = mid_bone
-
- con = pb[bone1].constraints.new('STRETCH_TO')
- con.target = obj
- con.subtarget = mid_bone
- con.rest_length = bb[bone1].length
- if preserve_volume:
- con.volume = 'VOLUME_XZX'
- else:
- con.volume = 'NO_VOLUME'
-
- # Bone 2
- con = pb[bone2].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = mid_bone
-
- con = pb[bone2].constraints.new('STRETCH_TO')
- con.target = obj
- con.subtarget = mid_bone
- con.rest_length = bb[bone2].length
- if preserve_volume:
- con.volume = 'VOLUME_XZX'
- else:
- con.volume = 'NO_VOLUME'
-
- return tuple()
-
diff --git a/release/scripts/modules/rigify/tail_control.py b/release/scripts/modules/rigify/tail_control.py
deleted file mode 100644
index 32d414344cf..00000000000
--- a/release/scripts/modules/rigify/tail_control.py
+++ /dev/null
@@ -1,165 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import bone_class_instance, copy_bone_simple
-from rna_prop_ui import rna_idprop_ui_prop_get
-from mathutils import Vector, Matrix
-from math import radians, pi
-
-# not used, defined for completeness
-METARIG_NAMES = ("pelvis", "ribcage")
-
-
-def metarig_template():
- # TODO
- pass
- # generated by rigify.write_meta_rig
- #bpy.ops.object.mode_set(mode='EDIT')
- #obj = bpy.context.active_object
- #arm = obj.data
- #bone = arm.edit_bones.new('tail.01')
- #bone.head[:] = 0.0000, -0.0306, 0.1039
- #bone.tail[:] = 0.0000, -0.0306, -0.0159
- #bone.roll = 0.0000
- #bone.use_connect = False
-
- #bpy.ops.object.mode_set(mode='OBJECT')
- #pbone = obj.pose.bones['tail.01']
- #pbone['type'] = 'tail_spline_ik'
-
-
-def metarig_definition(obj, orig_bone_name):
- """ Collects and returns the relevent bones for the rig.
- The bone given is the first in the chain of tail bones.
- It includes bones in the chain up until it hits a bone that doesn't
- have the same name base.
-
- tail.01 -> tail.02 -> tail.03 -> ... -> tail.n
- """
- arm = obj.data
- tail_base = arm.bones[orig_bone_name]
-
- if tail_base.parent is None:
- raise RigifyError("'tail_control' rig type on bone '%s' requires a parent." % orig_bone_name)
-
- bone_definitions = [tail_base.name]
- bone_definitions.extend([child.name for child in tail_base.children_recursive_basename])
- return bone_definitions
-
-
-def main(obj, bone_definitions, base_names, options):
- bpy.ops.object.mode_set(mode='EDIT')
- arm = obj.data
- bb = obj.data.bones
- eb = obj.data.edit_bones
- pb = obj.pose.bones
-
- # Create bones for hinge/free
- # hinge 1 sticks with the parent
- # hinge 2 is the parent of the tail controls
- hinge1 = copy_bone_simple(arm, bone_definitions[0], "MCH-%s.hinge1" % base_names[bone_definitions[0]], parent=True).name
- hinge2 = copy_bone_simple(arm, bone_definitions[0], "MCH-%s.hinge2" % base_names[bone_definitions[0]], parent=False).name
-
- # Create tail control bones
- bones = []
- i = 0
- for bone_def in bone_definitions:
- bone = copy_bone_simple(arm, bone_def, base_names[bone_def], parent=True).name
- if i == 1: # Don't change parent of first tail bone
- eb[bone].use_connect = False
- eb[bone].parent = eb[hinge2]
- eb[bone].use_local_location = False
- i = 1
- bones += [bone]
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Rotation mode and axis locks
- for bone, org_bone in zip(bones, bone_definitions):
- pb[bone].rotation_mode = pb[org_bone].rotation_mode
- pb[bone].lock_location = tuple(pb[org_bone].lock_location)
- pb[bone].lock_rotations_4d = pb[org_bone].lock_rotations_4d
- pb[bone].lock_rotation = tuple(pb[org_bone].lock_rotation)
- pb[bone].lock_rotation_w = pb[org_bone].lock_rotation_w
- pb[bone].lock_scale = tuple(pb[org_bone].lock_scale)
-
- # Add custom properties
- pb[bones[0]]["hinge"] = 0.0
- prop = rna_idprop_ui_prop_get(pb[bones[0]], "hinge", create=True)
- prop["min"] = 0.0
- prop["max"] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- pb[bones[0]]["free"] = 0.0
- prop = rna_idprop_ui_prop_get(pb[bones[0]], "free", create=True)
- prop["min"] = 0.0
- prop["max"] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- # Add constraints
- for bone, org_bone in zip(bones, bone_definitions):
- con = pb[org_bone].constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = bone
-
- con_f = pb[hinge2].constraints.new('COPY_LOCATION')
- con_f.target = obj
- con_f.subtarget = hinge1
-
- con_h = pb[hinge2].constraints.new('COPY_TRANSFORMS')
- con_h.target = obj
- con_h.subtarget = hinge1
-
- # Add drivers
- bone_path = pb[bones[0]].path_from_id()
-
- driver_fcurve = con_f.driver_add("influence")
- driver = driver_fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.name = "free"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = bone_path + '["free"]'
- mod = driver_fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
- driver_fcurve = con_h.driver_add("influence")
- driver = driver_fcurve.driver
- driver.type = 'AVERAGE'
- var = driver.variables.new()
- var.name = "hinge"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = bone_path + '["hinge"]'
- mod = driver_fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
-
- return None
diff --git a/release/scripts/modules/rigify/tongue.py b/release/scripts/modules/rigify/tongue.py
deleted file mode 100644
index 36c4316adc5..00000000000
--- a/release/scripts/modules/rigify/tongue.py
+++ /dev/null
@@ -1,361 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import bone_class_instance, copy_bone_simple
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-# not used, defined for completeness
-METARIG_NAMES = ("body", "head")
-
-
-def metarig_template():
- # TODO:
- ## generated by rigify.write_meta_rig
- #bpy.ops.object.mode_set(mode='EDIT')
- #obj = bpy.context.active_object
- #arm = obj.data
- #bone = arm.edit_bones.new('body')
- #bone.head[:] = 0.0000, -0.0276, -0.1328
- #bone.tail[:] = 0.0000, -0.0170, -0.0197
- #bone.roll = 0.0000
- #bone.use_connect = False
- #bone = arm.edit_bones.new('head')
- #bone.head[:] = 0.0000, -0.0170, -0.0197
- #bone.tail[:] = 0.0000, 0.0726, 0.1354
- #bone.roll = 0.0000
- #bone.use_connect = True
- #bone.parent = arm.edit_bones['body']
- #bone = arm.edit_bones.new('neck.01')
- #bone.head[:] = 0.0000, -0.0170, -0.0197
- #bone.tail[:] = 0.0000, -0.0099, 0.0146
- #bone.roll = 0.0000
- #bone.use_connect = False
- #bone.parent = arm.edit_bones['head']
- #bone = arm.edit_bones.new('neck.02')
- #bone.head[:] = 0.0000, -0.0099, 0.0146
- #bone.tail[:] = 0.0000, -0.0242, 0.0514
- #bone.roll = 0.0000
- #bone.use_connect = True
- #bone.parent = arm.edit_bones['neck.01']
- #bone = arm.edit_bones.new('neck.03')
- #bone.head[:] = 0.0000, -0.0242, 0.0514
- #bone.tail[:] = 0.0000, -0.0417, 0.0868
- #bone.roll = 0.0000
- #bone.use_connect = True
- #bone.parent = arm.edit_bones['neck.02']
- #bone = arm.edit_bones.new('neck.04')
- #bone.head[:] = 0.0000, -0.0417, 0.0868
- #bone.tail[:] = 0.0000, -0.0509, 0.1190
- #bone.roll = 0.0000
- #bone.use_connect = True
- #bone.parent = arm.edit_bones['neck.03']
- #bone = arm.edit_bones.new('neck.05')
- #bone.head[:] = 0.0000, -0.0509, 0.1190
- #bone.tail[:] = 0.0000, -0.0537, 0.1600
- #bone.roll = 0.0000
- #bone.use_connect = True
- #bone.parent = arm.edit_bones['neck.04']
- #
- #bpy.ops.object.mode_set(mode='OBJECT')
- #pbone = obj.pose.bones['head']
- #pbone['type'] = 'neck_flex'
- pass
-
-
-def metarig_definition(obj, orig_bone_name):
- '''
- The bone given is the tongue control, its parent is the body,
- # its only child the first of a chain with matching basenames.
- eg.
- body -> tongue_control -> tongue_01 -> tongue_02 -> tongue_03.... etc
- '''
- arm = obj.data
- tongue = arm.bones[orig_bone_name]
- body = tongue.parent
-
- children = tongue.children
- if len(children) != 1:
- raise RigifyError("expected the tongue bone '%s' to have only 1 child." % orig_bone_name)
-
- child = children[0]
- bone_definition = [body.name, tongue.name, child.name]
- bone_definition.extend([child.name for child in child.children_recursive_basename])
- return bone_definition
-
-
-def deform(obj, definitions, base_names, options):
- for org_bone_name in definitions[2:]:
- bpy.ops.object.mode_set(mode='EDIT')
-
- # Create deform bone.
- bone = copy_bone_simple(obj.data, org_bone_name, "DEF-%s" % base_names[org_bone_name], parent=True)
-
- # Store name before leaving edit mode
- bone_name = bone.name
-
- # Leave edit mode
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Get the pose bone
- bone = obj.pose.bones[bone_name]
-
- # Constrain to the original bone
- # XXX. Todo, is this needed if the bone is connected to its parent?
- con = bone.constraints.new('COPY_TRANSFORMS')
- con.name = "copy_loc"
- con.target = obj
- con.subtarget = org_bone_name
-
-
-# TODO: rename all of the head/neck references to tongue
-def main(obj, bone_definition, base_names, options):
- from mathutils import Vector
-
- arm = obj.data
-
- # Initialize container classes for convenience
- mt = bone_class_instance(obj, ["body", "head"]) # meta
- mt.body = bone_definition[0]
- mt.head = bone_definition[1]
- mt.update()
-
- neck_chain = bone_definition[2:]
-
- mt_chain = bone_class_instance(obj, [("neck_%.2d" % (i + 1)) for i in range(len(neck_chain))]) # 99 bones enough eh?
- for i, attr in enumerate(mt_chain.attr_names):
- setattr(mt_chain, attr, neck_chain[i])
- mt_chain.update()
-
- neck_chain_basename = base_names[mt_chain.neck_01_e.name].split(".")[0]
- neck_chain_segment_length = mt_chain.neck_01_e.length
-
- ex = bone_class_instance(obj, ["head", "head_hinge", "neck_socket", "head_ctrl"]) # hinge & extras
-
- # Add the head hinge at the bodys location, becomes the parent of the original head
-
- # apply everything to this copy of the chain
- ex_chain = mt_chain.copy(base_names=base_names)
- ex_chain.neck_01_e.parent = mt_chain.neck_01_e.parent
-
-
- # Copy the head bone and offset
- ex.head_e = copy_bone_simple(arm, mt.head, "MCH-%s" % base_names[mt.head], parent=True)
- ex.head_e.use_connect = False
- ex.head = ex.head_e.name
- # offset
- head_length = ex.head_e.length
- ex.head_e.head.y += head_length / 2.0
- ex.head_e.tail.y += head_length / 2.0
-
- # Yes, use the body bone but call it a head hinge
- ex.head_hinge_e = copy_bone_simple(arm, mt.body, "MCH-%s_hinge" % base_names[mt.head], parent=False)
- ex.head_hinge_e.use_connect = False
- ex.head_hinge = ex.head_hinge_e.name
- ex.head_hinge_e.head.y += head_length / 4.0
- ex.head_hinge_e.tail.y += head_length / 4.0
-
- # Insert the neck socket, the head copys this loation
- ex.neck_socket_e = arm.edit_bones.new("MCH-%s_socked" % neck_chain_basename)
- ex.neck_socket = ex.neck_socket_e.name
- ex.neck_socket_e.use_connect = False
- ex.neck_socket_e.parent = mt.body_e
- ex.neck_socket_e.head = mt.head_e.head
- ex.neck_socket_e.tail = mt.head_e.head - Vector((0.0, neck_chain_segment_length / 2.0, 0.0))
- ex.neck_socket_e.roll = 0.0
-
-
- # copy of the head for controling
- ex.head_ctrl_e = copy_bone_simple(arm, mt.head, base_names[mt.head])
- ex.head_ctrl = ex.head_ctrl_e.name
- ex.head_ctrl_e.parent = ex.head_hinge_e
-
- for i, attr in enumerate(ex_chain.attr_names):
- neck_e = getattr(ex_chain, attr + "_e")
-
- # dont store parent names, re-reference as each chain bones parent.
- neck_e_parent = arm.edit_bones.new("MCH-rot_%s" % base_names[getattr(mt_chain, attr)])
- neck_e_parent.head = neck_e.head
- neck_e_parent.tail = neck_e.head + (mt.head_e.vector.normalize() * neck_chain_segment_length / 2.0)
- neck_e_parent.roll = mt.head_e.roll
-
- orig_parent = neck_e.parent
- neck_e.use_connect = False
- neck_e.parent = neck_e_parent
- neck_e_parent.use_connect = False
-
- if i == 0:
- neck_e_parent.parent = mt.body_e
- else:
- neck_e_parent.parent = orig_parent
-
- deform(obj, bone_definition, base_names, options)
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- mt.update()
- mt_chain.update()
- ex_chain.update()
- ex.update()
-
- # Axis locks
- ex.head_ctrl_p.lock_location = True, True, True
- ex.head_ctrl_p.lock_scale = True, False, True
-
- # Simple one off constraints, no drivers
- con = ex.head_ctrl_p.constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = ex.neck_socket
-
- con = ex.head_p.constraints.new('COPY_ROTATION')
- con.target = obj
- con.subtarget = ex.head_ctrl
-
- # driven hinge
- prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, "hinge", create=True)
- ex.head_ctrl_p["hinge"] = 0.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- con = ex.head_hinge_p.constraints.new('COPY_ROTATION')
- con.name = "hinge"
- con.target = obj
- con.subtarget = mt.body
-
- # add driver
- hinge_driver_path = ex.head_ctrl_p.path_to_id() + '["hinge"]'
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- var = driver.variables.new()
- driver.type = 'AVERAGE'
- var.name = "var"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = hinge_driver_path
-
- #mod = fcurve_driver.modifiers.new('GENERATOR')
- mod = fcurve.modifiers[0]
- mod.poly_order = 1
- mod.coefficients[0] = 1.0
- mod.coefficients[1] = -1.0
-
- head_driver_path = ex.head_ctrl_p.path_to_id()
-
- target_names = [("b%.2d" % (i + 1)) for i in range(len(neck_chain))]
-
- ex.head_ctrl_p["bend_tot"] = 0.0
- fcurve = ex.head_ctrl_p.driver_add('["bend_tot"]')
- driver = fcurve.driver
- driver.type = 'SUM'
- fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier
-
- for i in range(len(neck_chain)):
- var = driver.variables.new()
- var.name = target_names[i]
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = head_driver_path + ('["bend_%.2d"]' % (i + 1))
-
-
- for i, attr in enumerate(ex_chain.attr_names):
- neck_p = getattr(ex_chain, attr + "_p")
- neck_p.lock_location = True, True, True
- neck_p.lock_location = True, True, True
- neck_p.lock_rotations_4d = True
-
- # Add bend prop
- prop_name = "bend_%.2d" % (i + 1)
- prop = rna_idprop_ui_prop_get(ex.head_ctrl_p, prop_name, create=True)
- ex.head_ctrl_p[prop_name] = 1.0
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- # add parent constraint
- neck_p_parent = neck_p.parent
-
- # add constraints
- if i == 0:
- con = neck_p.constraints.new('COPY_SCALE')
- con.name = "Copy Scale"
- con.target = obj
- con.subtarget = ex.head_ctrl
- con.owner_space = 'LOCAL'
- con.target_space = 'LOCAL'
-
- con = neck_p_parent.constraints.new('COPY_ROTATION')
- con.name = "Copy Rotation"
- con.target = obj
- con.subtarget = ex.head
- con.owner_space = 'LOCAL'
- con.target_space = 'LOCAL'
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'SCRIPTED'
- driver.expression = "bend/bend_tot"
-
- fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier
-
-
- # add target
- var = driver.variables.new()
- var.name = "bend_tot"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = head_driver_path + ('["bend_tot"]')
-
- var = driver.variables.new()
- var.name = "bend"
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = head_driver_path + ('["%s"]' % prop_name)
-
-
- # finally constrain the original bone to this one
- orig_neck_p = getattr(mt_chain, attr + "_p")
- con = orig_neck_p.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = neck_p.name
-
-
- # Set the head control's custom shape to use the last
- # org neck bone for its transform
- ex.head_ctrl_p.custom_shape_transform = obj.pose.bones[bone_definition[len(bone_definition)-1]]
-
-
- # last step setup layers
- if "ex_layer" in options:
- layer = [n==options["ex_layer"] for n in range(0,32)]
- else:
- layer = list(arm.bones[bone_definition[1]].layers)
- for attr in ex_chain.attr_names:
- getattr(ex_chain, attr + "_b").layers = layer
- for attr in ex.attr_names:
- getattr(ex, attr + "_b").layers = layer
-
- layer = list(arm.bones[bone_definition[1]].layers)
- ex.head_ctrl_b.layers = layer
-
-
- # no blending the result of this
- return None
-
diff --git a/release/scripts/modules/rigify/track_dual.py b/release/scripts/modules/rigify/track_dual.py
deleted file mode 100644
index f9c48a3bfcb..00000000000
--- a/release/scripts/modules/rigify/track_dual.py
+++ /dev/null
@@ -1,110 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import copy_bone_simple
-
-METARIG_NAMES = tuple()
-RIG_TYPE = "track_dual"
-
-# TODO
-#def metarig_template():
-# # generated by rigify.write_meta_rig
-# bpy.ops.object.mode_set(mode='EDIT')
-# obj = bpy.context.active_object
-# arm = obj.data
-# bone = arm.edit_bones.new('Bone')
-# bone.head[:] = 0.0000, 0.0000, 0.0000
-# bone.tail[:] = 0.0000, 0.0000, 1.0000
-# bone.roll = 0.0000
-# bone.use_connect = False
-#
-# bpy.ops.object.mode_set(mode='OBJECT')
-# pbone = obj.pose.bones['Bone']
-# pbone['type'] = 'copy'
-
-bool_map = {0: False, 1: True,
- 0.0: False, 1.0: True,
- "false": False, "true": True,
- "False": False, "True": True,
- "no": False, "yes": True,
- "No": False, "Yes": True}
-
-
-def metarig_definition(obj, orig_bone_name):
- return (orig_bone_name,)
-
-
-def main(obj, bone_definition, base_names, options):
- """ A dual-bone track setup.
- Deformation only (no controls).
- """
- # Verify required parameter
- if "to" not in options:
- raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0]))
- if type(options["to"]) is not str:
- raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0]))
- if ("ORG-" + options["to"]) not in obj.data.bones:
- raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0]))
-
- eb = obj.data.edit_bones
- bb = obj.data.bones
- pb = obj.pose.bones
-
- bpy.ops.object.mode_set(mode='EDIT')
- arm = obj.data
-
- mbone1 = bone_definition[0]
- mbone2 = "ORG-" + options["to"]
-
- bone_e = copy_bone_simple(obj.data, mbone1, "DEF-%s.01" % base_names[bone_definition[0]])
- bone_e.use_connect = False
- bone_e.parent = eb[mbone1]
- bone_e.tail = (eb[mbone1].head + eb[mbone2].head) / 2
- bone1 = bone_e.name
-
- bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]])
- bone_e.use_connect = False
- bone_e.parent = eb[mbone1]
- bone_e.tail = (eb[mbone1].head + eb[mbone2].head) / 2
- bone2 = bone_e.name
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Constraints
- # Bone 1
- con = pb[bone1].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = mbone2
-
-
- # Bone 2
- con = pb[bone2].constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = mbone2
-
- con = pb[bone2].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = mbone1
-
-
- return tuple()
diff --git a/release/scripts/modules/rigify/track_reverse.py b/release/scripts/modules/rigify/track_reverse.py
deleted file mode 100644
index a65ac0e9416..00000000000
--- a/release/scripts/modules/rigify/track_reverse.py
+++ /dev/null
@@ -1,100 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-import bpy
-from rigify import RigifyError
-from rigify_utils import copy_bone_simple
-
-METARIG_NAMES = tuple()
-RIG_TYPE = "track_reverse"
-
-# TODO
-#def metarig_template():
-# # generated by rigify.write_meta_rig
-# bpy.ops.object.mode_set(mode='EDIT')
-# obj = bpy.context.active_object
-# arm = obj.data
-# bone = arm.edit_bones.new('Bone')
-# bone.head[:] = 0.0000, 0.0000, 0.0000
-# bone.tail[:] = 0.0000, 0.0000, 1.0000
-# bone.roll = 0.0000
-# bone.use_connect = False
-#
-# bpy.ops.object.mode_set(mode='OBJECT')
-# pbone = obj.pose.bones['Bone']
-# pbone['type'] = 'copy'
-
-bool_map = {0:False, 1:True,
- 0.0:False, 1.0:True,
- "false":False, "true":True,
- "False":False, "True":True,
- "no":False, "yes":True,
- "No":False, "Yes":True}
-
-def metarig_definition(obj, orig_bone_name):
- return (orig_bone_name,)
-
-
-
-
-def main(obj, bone_definition, base_names, options):
- """ A bone that tracks bakwards towards its parent, while copying the
- location of it's target.
- Deformation only (no controls).
- """
- # Verify required parameter
- if "to" not in options:
- raise RigifyError("'%s' rig type requires a 'to' parameter (bone: %s)" % (RIG_TYPE, base_names[0]))
- if type(options["to"]) is not str:
- raise RigifyError("'%s' rig type 'to' parameter must be a string (bone: %s)" % (RIG_TYPE, base_names[0]))
- if ("ORG-" + options["to"]) not in obj.data.bones:
- raise RigifyError("'%s' rig type 'to' parameter must name a bone in the metarig (bone: %s)" % (RIG_TYPE, base_names[0]))
-
- eb = obj.data.edit_bones
- bb = obj.data.bones
- pb = obj.pose.bones
-
- bpy.ops.object.mode_set(mode='EDIT')
- arm = obj.data
-
- mbone1 = bone_definition[0]
- mbone2 = "ORG-" + options["to"]
-
- bone_e = copy_bone_simple(obj.data, mbone2, "DEF-%s.02" % base_names[bone_definition[0]])
- bone_e.use_connect = False
- bone_e.parent = eb[mbone1]
- bone_e.tail = eb[mbone1].head
- bone = bone_e.name
-
-
-
- bpy.ops.object.mode_set(mode='OBJECT')
-
- # Constraints
- con = pb[bone].constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = mbone2
-
- con = pb[bone].constraints.new('DAMPED_TRACK')
- con.target = obj
- con.subtarget = mbone1
-
-
- return tuple()
diff --git a/release/scripts/modules/rigify_utils.py b/release/scripts/modules/rigify_utils.py
deleted file mode 100644
index 1ffe366e0d5..00000000000
--- a/release/scripts/modules/rigify_utils.py
+++ /dev/null
@@ -1,467 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-
-# rigify its self does not depend on this module, however some of the
-# rigify templates use these utility functions.
-#
-# So even though this can be for general purpose use, this module was created
-# for rigify so in some cases seemingly generic functions make assumptions
-# that a generic function would need to check for.
-
-import bpy
-from mathutils import Vector
-from rna_prop_ui import rna_idprop_ui_prop_get
-
-DELIMITER = '-._'
-EMPTY_LAYER = [False] * 32
-
-
-def add_stretch_to(obj, from_name, to_name, name):
- '''
- Adds a bone that stretches from one to another
- '''
-
- mode_orig = obj.mode
- bpy.ops.object.mode_set(mode='EDIT')
-
- arm = obj.data
- stretch_ebone = arm.edit_bones.new(name)
- stretch_name = stretch_ebone.name
- del name
-
- head = stretch_ebone.head = arm.edit_bones[from_name].head.copy()
- #tail = stretch_ebone.tail = arm.edit_bones[to_name].head.copy()
-
- # annoying exception for zero length bones, since its using stretch_to the rest pose doesnt really matter
- #if (head - tail).length < 0.1:
- if 1:
- tail = stretch_ebone.tail = arm.edit_bones[from_name].tail.copy()
-
-
- # Now for the constraint
- bpy.ops.object.mode_set(mode='OBJECT')
-
- stretch_pbone = obj.pose.bones[stretch_name]
-
- con = stretch_pbone.constraints.new('COPY_LOCATION')
- con.target = obj
- con.subtarget = from_name
-
- con = stretch_pbone.constraints.new('STRETCH_TO')
- con.target = obj
- con.subtarget = to_name
- con.rest_length = (head - tail).length
- con.keep_axis = 'PLANE_X'
- con.volume = 'NO_VOLUME'
-
- bpy.ops.object.mode_set(mode=mode_orig)
-
- return stretch_name
-
-
-def copy_bone_simple(arm, from_bone, name, parent=False):
- ebone = arm.edit_bones[from_bone]
- ebone_new = arm.edit_bones.new(name)
-
- if parent:
- ebone_new.use_connect = ebone.use_connect
- ebone_new.parent = ebone.parent
-
- ebone_new.head = ebone.head
- ebone_new.tail = ebone.tail
- ebone_new.roll = ebone.roll
- ebone_new.layers = list(ebone.layers)
- return ebone_new
-
-
-def copy_bone_simple_list(arm, from_bones, to_bones, parent=False):
-
- if len(from_bones) != len(to_bones):
- raise Exception("bone list sizes must match")
-
- copy_bones = [copy_bone_simple(arm, bone_name, to_bones[i], True) for i, bone_name in enumerate(from_bones)]
-
- # now we need to re-parent
- for ebone in copy_bones:
- parent = ebone.parent
- if parent:
- try:
- i = from_bones.index(parent.name)
- except:
- i = -1
-
- if i == -1:
- ebone.parent = None
- else:
- ebone.parent = copy_bones[i]
-
- return copy_bones
-
-
-def blend_bone_list(obj, apply_bones, from_bones, to_bones, target_bone=None, target_prop="blend", blend_default=0.5):
-
- if obj.mode == 'EDIT':
- raise Exception("blending cant be called in editmode")
-
- if len(apply_bones) != len(from_bones):
- raise Exception("lists differ in length (from -> apply): \n\t%s\n\t%s" % (from_bones, apply_bones))
- if len(apply_bones) != len(to_bones):
- raise Exception("lists differ in length (to -> apply): \n\t%s\n\t%s" % (to_bones, apply_bones))
-
- # setup the blend property
- if target_bone is None:
- target_bone = apply_bones[-1] # default to the last bone
-
- prop_pbone = obj.pose.bones[target_bone]
- if prop_pbone.get(target_bone) is None:
- prop = rna_idprop_ui_prop_get(prop_pbone, target_prop, create=True)
- prop_pbone[target_prop] = blend_default
- prop["soft_min"] = 0.0
- prop["soft_max"] = 1.0
-
- driver_path = prop_pbone.path_from_id() + ('["%s"]' % target_prop)
-
- def blend_target(driver):
- var = driver.variables.new()
- var.name = target_bone
- var.targets[0].id_type = 'OBJECT'
- var.targets[0].id = obj
- var.targets[0].data_path = driver_path
-
- def blend_transforms(new_pbone, from_bone_name, to_bone_name):
- con = new_pbone.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = from_bone_name
-
- con = new_pbone.constraints.new('COPY_TRANSFORMS')
- con.target = obj
- con.subtarget = to_bone_name
-
- fcurve = con.driver_add("influence")
- driver = fcurve.driver
- driver.type = 'AVERAGE'
- fcurve.modifiers.remove(fcurve.modifiers[0]) # grr dont need a modifier
-
- blend_target(driver)
-
- for i, new_bone_name in enumerate(apply_bones):
- from_bone_name = from_bones[i]
- to_bone_name = to_bones[i]
-
- # allow skipping some bones by having None in the list
- if None in (new_bone_name, from_bone_name, to_bone_name):
- continue
-
- new_pbone = obj.pose.bones[new_bone_name]
-
- blend_transforms(new_pbone, from_bone_name, to_bone_name)
-
-
-def add_pole_target_bone(obj, base_bone_name, name, mode='CROSS'):
- '''
- Does not actually create a poll target, just the bone to use as a poll target
- '''
- mode_orig = obj.mode
- bpy.ops.object.mode_set(mode='EDIT')
-
- arm = obj.data
-
- poll_ebone = arm.edit_bones.new(name)
- base_ebone = arm.edit_bones[base_bone_name]
- poll_name = poll_ebone.name
- parent_ebone = base_ebone.parent
-
- base_head = base_ebone.head.copy()
- base_tail = base_ebone.tail.copy()
- base_dir = base_head - base_tail
-
- parent_head = parent_ebone.head.copy()
- parent_tail = parent_ebone.tail.copy()
- parent_dir = parent_head - parent_tail
-
- distance = (base_dir.length + parent_dir.length)
-
- if mode == 'CROSS':
- # direction from the angle of the joint
- offset = base_dir.copy().normalize() - parent_dir.copy().normalize()
- offset.length = distance
- elif mode == 'ZAVERAGE':
- # between both bones Z axis
- z_axis_a = base_ebone.matrix.copy().rotation_part() * Vector((0.0, 0.0, -1.0))
- z_axis_b = parent_ebone.matrix.copy().rotation_part() * Vector((0.0, 0.0, -1.0))
- offset = (z_axis_a + z_axis_b).normalize() * distance
- else:
- # preset axis
- offset = Vector((0.0, 0.0, 0.0))
- if mode[0] == "+":
- val = distance
- else:
- val = - distance
-
- setattr(offset, mode[1].lower(), val)
-
- poll_ebone.head = base_head + offset
- poll_ebone.tail = base_head + (offset * (1.0 - (1.0 / 4.0)))
-
- bpy.ops.object.mode_set(mode=mode_orig)
-
- return poll_name
-
-
-def get_side_name(name):
- '''
- Returns the last part of a string (typically a bone's name) indicating
- whether it is a a left or right (or center, or whatever) bone.
- Returns an empty string if nothing is found.
- '''
- if name[-2] in DELIMITER:
- return name[-2:]
- else:
- return ""
-
-
-def get_base_name(name):
- '''
- Returns the part of a string (typically a bone's name) corresponding to it's
- base name (no sidedness, no ORG prefix).
- '''
- if name[-2] in DELIMITER:
- return name[:-2]
- else:
- return name
-
-
-def write_meta_rig(obj, func_name="metarig_template"):
- '''
- Write a metarig as a python script, this rig is to have all info needed for
- generating the real rig with rigify.
- '''
- code = []
-
- code.append("def %s():" % func_name)
- code.append(" # generated by rigify.write_meta_rig")
- bpy.ops.object.mode_set(mode='EDIT')
- code.append(" bpy.ops.object.mode_set(mode='EDIT')")
-
- code.append(" obj = bpy.context.active_object")
- code.append(" arm = obj.data")
-
- arm = obj.data
- # write parents first
- bones = [(len(bone.parent_recursive), bone.name) for bone in arm.edit_bones]
- bones.sort(key=lambda item: item[0])
- bones = [item[1] for item in bones]
-
-
- for bone_name in bones:
- bone = arm.edit_bones[bone_name]
- code.append(" bone = arm.edit_bones.new('%s')" % bone.name)
- code.append(" bone.head[:] = %.4f, %.4f, %.4f" % bone.head.to_tuple(4))
- code.append(" bone.tail[:] = %.4f, %.4f, %.4f" % bone.tail.to_tuple(4))
- code.append(" bone.roll = %.4f" % bone.roll)
- code.append(" bone.use_connect = %s" % str(bone.use_connect))
- if bone.parent:
- code.append(" bone.parent = arm.edit_bones['%s']" % bone.parent.name)
-
- bpy.ops.object.mode_set(mode='OBJECT')
- code.append("")
- code.append(" bpy.ops.object.mode_set(mode='OBJECT')")
-
- for bone_name in bones:
- pbone = obj.pose.bones[bone_name]
- pbone_written = False
-
- # Only 1 level of props, simple types supported
- for key, value in pbone.items():
- if key.startswith("_"):
- continue
-
- if type(value) not in (float, str, int):
- print("Unsupported ID Prop:", str((key, value)))
- continue
-
- if type(value) == str:
- value = "'" + value + "'"
-
- if not pbone_written: # only write bones we need
- code.append(" pbone = obj.pose.bones['%s']" % bone_name)
-
- code.append(" pbone['%s'] = %s" % (key, value))
-
- return "\n".join(code)
-
-
-# *** bone class collection ***
-
-
-def bone_class_instance(obj, slots, name="BoneContainer"):
- '''
- bone collection utility class to help manage cases with
- edit/pose/bone bones where switching modes can invalidate some of the members.
-
- there are also utility functions for manipulating all members.
- '''
-
- attr_names = tuple(slots) # dont modify the original
-
- if len(slots) != len(set(slots)):
- raise Exception("duplicate entries found %s" % attr_names)
-
- slots = list(slots) # dont modify the original
- for i in range(len(slots)):
- member = slots[i]
- slots.append(member + "_b") # bone bone
- slots.append(member + "_p") # pose bone
- slots.append(member + "_e") # edit bone
-
- class_dict = { \
- "obj": obj, \
- "attr_names": attr_names, \
- "attr_initialize": _bone_class_instance_attr_initialize, \
- "update": _bone_class_instance_update, \
- "rename": _bone_class_instance_rename, \
- "names": _bone_class_instance_names, \
- "copy": _bone_class_instance_copy, \
- "blend": _bone_class_instance_blend, \
- }
-
- instance = auto_class_instance(slots, name, class_dict)
- return instance
-
-
-def auto_class(slots, name="ContainerClass", class_dict=None):
-
- if class_dict:
- class_dict = class_dict.copy()
- else:
- class_dict = {}
-
- class_dict["__slots__"] = tuple(slots)
-
- return type(name, (object,), class_dict)
-
-
-def auto_class_instance(slots, name="ContainerClass", class_dict=None):
- return auto_class(slots, name, class_dict)()
-
-
-def _bone_class_instance_attr_initialize(self, attr_names, bone_names):
- ''' Initializes attributes, both lists must be aligned
- '''
- for attr in self.attr_names:
- i = attr_names.index(attr)
- setattr(self, attr, bone_names[i])
-
- self.update()
-
-
-def _bone_class_instance_update(self):
- ''' Re-Assigns bones from the blender data
- '''
- arm = self.obj.data
- bbones = arm.bones
- pbones = self.obj.pose.bones
- ebones = arm.edit_bones
-
- for member in self.attr_names:
- name = getattr(self, member, None)
- if name is not None:
- setattr(self, member + "_b", bbones.get(name))
- setattr(self, member + "_p", pbones.get(name))
- setattr(self, member + "_e", ebones.get(name))
-
-
-def _bone_class_instance_rename(self, attr, new_name):
- ''' Rename bones, editmode only
- '''
-
- if self.obj.mode != 'EDIT':
- raise Exception("Only rename in editmode supported")
-
- ebone = getattr(self, attr + "_e")
- ebone.name = new_name
-
- # we may not get what is asked for so get the name from the editbone
- setattr(self, attr, ebone.name)
-
-
-def _bone_class_instance_copy(self, from_fmt="%s", to_fmt="%s", exclude_attrs=(), base_names=None):
- from_name_ls = []
- new_name_ls = []
- new_slot_ls = []
-
- for attr in self.attr_names:
-
- if attr in exclude_attrs:
- continue
-
- bone_name_orig = getattr(self, attr)
- ebone = getattr(self, attr + "_e")
- # orig_names[attr] = bone_name_orig
-
- # insert formatting
- if from_fmt != "%s":
- bone_name = from_fmt % bone_name_orig
- ebone.name = bone_name
- bone_name = ebone.name # cant be sure we get what we ask for
- else:
- bone_name = bone_name_orig
-
- setattr(self, attr, bone_name)
-
- new_slot_ls.append(attr)
- from_name_ls.append(bone_name)
- if base_names:
- bone_name_orig = base_names[bone_name_orig]
- new_name_ls.append(to_fmt % bone_name_orig)
-
- new_bones = copy_bone_simple_list(self.obj.data, from_name_ls, new_name_ls, True)
- new_bc = bone_class_instance(self.obj, new_slot_ls)
-
- for i, attr in enumerate(new_slot_ls):
- ebone = new_bones[i]
- setattr(new_bc, attr + "_e", ebone)
- setattr(new_bc, attr, ebone.name)
-
- return new_bc
-
-
-def _bone_class_instance_names(self):
- return [getattr(self, attr) for attr in self.attr_names]
-
-
-def _bone_class_instance_blend(self, from_bc, to_bc, target_bone=None, target_prop="blend"):
- '''
- Use for blending bone chains.
-
- blend_target = (bone_name, bone_property)
- default to the last bone, blend prop
-
- XXX - toggles editmode, need to re-validate all editbones :(
- '''
-
- if self.attr_names != from_bc.attr_names or self.attr_names != to_bc.attr_names:
- raise Exception("can only blend between matching chains")
-
- apply_bones = [getattr(self, attr) for attr in self.attr_names]
- from_bones = [getattr(from_bc, attr) for attr in from_bc.attr_names]
- to_bones = [getattr(to_bc, attr) for attr in to_bc.attr_names]
-
- blend_bone_list(self.obj, apply_bones, from_bones, to_bones, target_bone, target_prop)
diff --git a/release/scripts/op/add_armature_human.py b/release/scripts/op/add_armature_human.py
deleted file mode 100644
index 95b414f8228..00000000000
--- a/release/scripts/op/add_armature_human.py
+++ /dev/null
@@ -1,616 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-import bpy
-import mathutils
-from math import cos, sin, pi
-
-# could this be stored elsewhere?
-
-
-def metarig_template():
- # generated by rigify.write_meta_rig
- bpy.ops.object.mode_set(mode='EDIT')
- obj = bpy.context.active_object
- arm = obj.data
- bone = arm.edit_bones.new('pelvis')
- bone.head[:] = -0.0000, -0.0145, 1.1263
- bone.tail[:] = -0.0000, -0.0145, 0.9563
- bone.roll = 3.1416
- bone.use_connect = False
- bone = arm.edit_bones.new('torso')
- bone.head[:] = -0.0000, -0.0145, 1.1263
- bone.tail[:] = -0.0000, -0.0145, 1.2863
- bone.roll = 3.1416
- bone.use_connect = False
- bone.parent = arm.edit_bones['pelvis']
- bone = arm.edit_bones.new('spine.01')
- bone.head[:] = 0.0000, 0.0394, 0.9688
- bone.tail[:] = -0.0000, -0.0145, 1.1263
- bone.roll = 0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones['torso']
- bone = arm.edit_bones.new('spine.02')
- bone.head[:] = -0.0000, -0.0145, 1.1263
- bone.tail[:] = -0.0000, -0.0213, 1.2884
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['spine.01']
- bone = arm.edit_bones.new('thigh.L')
- bone.head[:] = 0.0933, -0.0421, 1.0434
- bone.tail[:] = 0.0933, -0.0516, 0.5848
- bone.roll = 0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones['spine.01']
- bone = arm.edit_bones.new('thigh.R')
- bone.head[:] = -0.0933, -0.0421, 1.0434
- bone.tail[:] = -0.0933, -0.0516, 0.5848
- bone.roll = -0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones['spine.01']
- bone = arm.edit_bones.new('spine.03')
- bone.head[:] = -0.0000, -0.0213, 1.2884
- bone.tail[:] = -0.0000, 0.0160, 1.3705
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['spine.02']
- bone = arm.edit_bones.new('shin.L')
- bone.head[:] = 0.0933, -0.0516, 0.5848
- bone.tail[:] = 0.0915, 0.0100, 0.1374
- bone.roll = 0.0034
- bone.use_connect = True
- bone.parent = arm.edit_bones['thigh.L']
- bone = arm.edit_bones.new('shin.R')
- bone.head[:] = -0.0933, -0.0516, 0.5848
- bone.tail[:] = -0.0915, 0.0100, 0.1374
- bone.roll = -0.0034
- bone.use_connect = True
- bone.parent = arm.edit_bones['thigh.R']
- bone = arm.edit_bones.new('spine.04')
- bone.head[:] = -0.0000, 0.0160, 1.3705
- bone.tail[:] = -0.0000, 0.0590, 1.4497
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['spine.03']
- bone = arm.edit_bones.new('foot.L')
- bone.head[:] = 0.0915, 0.0100, 0.1374
- bone.tail[:] = 0.1033, -0.0968, 0.0510
- bone.roll = 2.8964
- bone.use_connect = True
- bone.parent = arm.edit_bones['shin.L']
- bone = arm.edit_bones.new('foot.R')
- bone.head[:] = -0.0915, 0.0100, 0.1374
- bone.tail[:] = -0.1033, -0.0968, 0.0510
- bone.roll = -2.8793
- bone.use_connect = True
- bone.parent = arm.edit_bones['shin.R']
- bone = arm.edit_bones.new('neck_base')
- bone.head[:] = -0.0000, 0.0590, 1.4497
- bone.tail[:] = -0.0000, 0.0401, 1.5389
- bone.roll = -0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['spine.04']
- bone = arm.edit_bones.new('toe.L')
- bone.head[:] = 0.1033, -0.0968, 0.0510
- bone.tail[:] = 0.1136, -0.1848, 0.0510
- bone.roll = 0.0001
- bone.use_connect = True
- bone.parent = arm.edit_bones['foot.L']
- bone = arm.edit_bones.new('heel.L')
- bone.head[:] = 0.0809, 0.0969, -0.0000
- bone.tail[:] = 0.1020, -0.0846, -0.0000
- bone.roll = -0.0001
- bone.use_connect = False
- bone.parent = arm.edit_bones['foot.L']
- bone = arm.edit_bones.new('toe.R')
- bone.head[:] = -0.1033, -0.0968, 0.0510
- bone.tail[:] = -0.1136, -0.1848, 0.0510
- bone.roll = -0.0002
- bone.use_connect = True
- bone.parent = arm.edit_bones['foot.R']
- bone = arm.edit_bones.new('heel.R')
- bone.head[:] = -0.0809, 0.0969, -0.0000
- bone.tail[:] = -0.1020, -0.0846, -0.0000
- bone.roll = -0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones['foot.R']
- bone = arm.edit_bones.new('head')
- bone.head[:] = -0.0000, 0.0401, 1.5389
- bone.tail[:] = -0.0000, 0.0401, 1.5979
- bone.roll = 3.1416
- bone.use_connect = True
- bone.parent = arm.edit_bones['neck_base']
- bone = arm.edit_bones.new('DLT-shoulder.L')
- bone.head[:] = 0.0141, -0.0346, 1.4991
- bone.tail[:] = 0.1226, 0.0054, 1.4991
- bone.roll = 0.0005
- bone.use_connect = False
- bone.parent = arm.edit_bones['neck_base']
- bone = arm.edit_bones.new('DLT-shoulder.R')
- bone.head[:] = -0.0141, -0.0346, 1.4991
- bone.tail[:] = -0.1226, 0.0054, 1.4991
- bone.roll = -0.0005
- bone.use_connect = False
- bone.parent = arm.edit_bones['neck_base']
- bone = arm.edit_bones.new('neck.01')
- bone.head[:] = -0.0000, 0.0401, 1.5389
- bone.tail[:] = -0.0000, 0.0176, 1.5916
- bone.roll = 0.0000
- bone.use_connect = False
- bone.parent = arm.edit_bones['head']
- bone = arm.edit_bones.new('shoulder.L')
- bone.head[:] = 0.0141, -0.0346, 1.4991
- bone.tail[:] = 0.1226, 0.0216, 1.5270
- bone.roll = -0.1225
- bone.use_connect = False
- bone.parent = arm.edit_bones['DLT-shoulder.L']
- bone = arm.edit_bones.new('shoulder.R')
- bone.head[:] = -0.0141, -0.0346, 1.4991
- bone.tail[:] = -0.1226, 0.0216, 1.5270
- bone.roll = 0.0849
- bone.use_connect = False
- bone.parent = arm.edit_bones['DLT-shoulder.R']
- bone = arm.edit_bones.new('neck.02')
- bone.head[:] = -0.0000, 0.0176, 1.5916
- bone.tail[:] = -0.0000, 0.0001, 1.6499
- bone.roll = 0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['neck.01']
- bone = arm.edit_bones.new('DLT-upper_arm.L')
- bone.head[:] = 0.1482, 0.0483, 1.4943
- bone.tail[:] = 0.2586, 0.1057, 1.5124
- bone.roll = 1.4969
- bone.use_connect = False
- bone.parent = arm.edit_bones['shoulder.L']
- bone = arm.edit_bones.new('DLT-upper_arm.R')
- bone.head[:] = -0.1482, 0.0483, 1.4943
- bone.tail[:] = -0.2586, 0.1057, 1.5124
- bone.roll = -1.4482
- bone.use_connect = False
- bone.parent = arm.edit_bones['shoulder.R']
- bone = arm.edit_bones.new('neck.03')
- bone.head[:] = -0.0000, 0.0001, 1.6499
- bone.tail[:] = -0.0000, 0.0001, 1.8522
- bone.roll = 0.0000
- bone.use_connect = True
- bone.parent = arm.edit_bones['neck.02']
- bone = arm.edit_bones.new('upper_arm.L')
- bone.head[:] = 0.1482, 0.0483, 1.4943
- bone.tail[:] = 0.3929, 0.0522, 1.4801
- bone.roll = 1.6281
- bone.use_connect = False
- bone.parent = arm.edit_bones['DLT-upper_arm.L']
- bone = arm.edit_bones.new('upper_arm.R')
- bone.head[:] = -0.1482, 0.0483, 1.4943
- bone.tail[:] = -0.3929, 0.0522, 1.4801
- bone.roll = -1.6281
- bone.use_connect = False
- bone.parent = arm.edit_bones['DLT-upper_arm.R']
- bone = arm.edit_bones.new('forearm.L')
- bone.head[:] = 0.3929, 0.0522, 1.4801
- bone.tail[:] = 0.6198, 0.0364, 1.4906
- bone.roll = 1.5240
- bone.use_connect = True
- bone.parent = arm.edit_bones['upper_arm.L']
- bone = arm.edit_bones.new('forearm.R')
- bone.head[:] = -0.3929, 0.0522, 1.4801
- bone.tail[:] = -0.6198, 0.0364, 1.4906
- bone.roll = -1.5219
- bone.use_connect = True
- bone.parent = arm.edit_bones['upper_arm.R']
- bone = arm.edit_bones.new('hand.L')
- bone.head[:] = 0.6198, 0.0364, 1.4906
- bone.tail[:] = 0.6592, 0.0364, 1.4853
- bone.roll = -3.0065
- bone.use_connect = True
- bone.parent = arm.edit_bones['forearm.L']
- bone = arm.edit_bones.new('hand.R')
- bone.head[:] = -0.6198, 0.0364, 1.4906
- bone.tail[:] = -0.6592, 0.0364, 1.4853
- bone.roll = 3.0065
- bone.use_connect = True
- bone.parent = arm.edit_bones['forearm.R']
- bone = arm.edit_bones.new('palm.04.L')
- bone.head[:] = 0.6514, 0.0658, 1.4906
- bone.tail[:] = 0.7287, 0.0810, 1.4747
- bone.roll = -3.0715
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand.L']
- bone = arm.edit_bones.new('palm.03.L')
- bone.head[:] = 0.6533, 0.0481, 1.4943
- bone.tail[:] = 0.7386, 0.0553, 1.4781
- bone.roll = -3.0290
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand.L']
- bone = arm.edit_bones.new('palm.02.L')
- bone.head[:] = 0.6539, 0.0305, 1.4967
- bone.tail[:] = 0.7420, 0.0250, 1.4835
- bone.roll = -3.0669
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand.L']
- bone = arm.edit_bones.new('palm.01.L')
- bone.head[:] = 0.6514, 0.0116, 1.4961
- bone.tail[:] = 0.7361, -0.0074, 1.4823
- bone.roll = -2.9422
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand.L']
- bone = arm.edit_bones.new('thumb.01.L')
- bone.head[:] = 0.6380, -0.0005, 1.4848
- bone.tail[:] = 0.6757, -0.0408, 1.4538
- bone.roll = -0.7041
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand.L']
- bone = arm.edit_bones.new('palm.04.R')
- bone.head[:] = -0.6514, 0.0658, 1.4906
- bone.tail[:] = -0.7287, 0.0810, 1.4747
- bone.roll = 3.0715
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand.R']
- bone = arm.edit_bones.new('palm.03.R')
- bone.head[:] = -0.6533, 0.0481, 1.4943
- bone.tail[:] = -0.7386, 0.0553, 1.4781
- bone.roll = 3.0290
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand.R']
- bone = arm.edit_bones.new('palm.02.R')
- bone.head[:] = -0.6539, 0.0305, 1.4967
- bone.tail[:] = -0.7420, 0.0250, 1.4835
- bone.roll = 3.0669
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand.R']
- bone = arm.edit_bones.new('thumb.01.R')
- bone.head[:] = -0.6380, -0.0005, 1.4848
- bone.tail[:] = -0.6757, -0.0408, 1.4538
- bone.roll = 0.7041
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand.R']
- bone = arm.edit_bones.new('palm.01.R')
- bone.head[:] = -0.6514, 0.0116, 1.4961
- bone.tail[:] = -0.7361, -0.0074, 1.4823
- bone.roll = 2.9332
- bone.use_connect = False
- bone.parent = arm.edit_bones['hand.R']
- bone = arm.edit_bones.new('finger_pinky.01.L')
- bone.head[:] = 0.7287, 0.0810, 1.4747
- bone.tail[:] = 0.7698, 0.0947, 1.4635
- bone.roll = -3.0949
- bone.use_connect = True
- bone.parent = arm.edit_bones['palm.04.L']
- bone = arm.edit_bones.new('finger_ring.01.L')
- bone.head[:] = 0.7386, 0.0553, 1.4781
- bone.tail[:] = 0.7890, 0.0615, 1.4667
- bone.roll = -3.0081
- bone.use_connect = True
- bone.parent = arm.edit_bones['palm.03.L']
- bone = arm.edit_bones.new('finger_middle.01.L')
- bone.head[:] = 0.7420, 0.0250, 1.4835
- bone.tail[:] = 0.7975, 0.0221, 1.4712
- bone.roll = -2.9982
- bone.use_connect = True
- bone.parent = arm.edit_bones['palm.02.L']
- bone = arm.edit_bones.new('finger_index.01.L')
- bone.head[:] = 0.7361, -0.0074, 1.4823
- bone.tail[:] = 0.7843, -0.0204, 1.4718
- bone.roll = -3.0021
- bone.use_connect = True
- bone.parent = arm.edit_bones['palm.01.L']
- bone = arm.edit_bones.new('thumb.02.L')
- bone.head[:] = 0.6757, -0.0408, 1.4538
- bone.tail[:] = 0.6958, -0.0568, 1.4376
- bone.roll = -0.6963
- bone.use_connect = True
- bone.parent = arm.edit_bones['thumb.01.L']
- bone = arm.edit_bones.new('finger_pinky.01.R')
- bone.head[:] = -0.7287, 0.0810, 1.4747
- bone.tail[:] = -0.7698, 0.0947, 1.4635
- bone.roll = 3.0949
- bone.use_connect = True
- bone.parent = arm.edit_bones['palm.04.R']
- bone = arm.edit_bones.new('finger_ring.01.R')
- bone.head[:] = -0.7386, 0.0553, 1.4781
- bone.tail[:] = -0.7890, 0.0615, 1.4667
- bone.roll = 2.9892
- bone.use_connect = True
- bone.parent = arm.edit_bones['palm.03.R']
- bone = arm.edit_bones.new('finger_middle.01.R')
- bone.head[:] = -0.7420, 0.0250, 1.4835
- bone.tail[:] = -0.7975, 0.0221, 1.4712
- bone.roll = 2.9816
- bone.use_connect = True
- bone.parent = arm.edit_bones['palm.02.R']
- bone = arm.edit_bones.new('thumb.02.R')
- bone.head[:] = -0.6757, -0.0408, 1.4538
- bone.tail[:] = -0.6958, -0.0568, 1.4376
- bone.roll = 0.6963
- bone.use_connect = True
- bone.parent = arm.edit_bones['thumb.01.R']
- bone = arm.edit_bones.new('finger_index.01.R')
- bone.head[:] = -0.7361, -0.0074, 1.4823
- bone.tail[:] = -0.7843, -0.0204, 1.4718
- bone.roll = 2.9498
- bone.use_connect = True
- bone.parent = arm.edit_bones['palm.01.R']
- bone = arm.edit_bones.new('finger_pinky.02.L')
- bone.head[:] = 0.7698, 0.0947, 1.4635
- bone.tail[:] = 0.7910, 0.1018, 1.4577
- bone.roll = -3.0949
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_pinky.01.L']
- bone = arm.edit_bones.new('finger_ring.02.L')
- bone.head[:] = 0.7890, 0.0615, 1.4667
- bone.tail[:] = 0.8177, 0.0650, 1.4600
- bone.roll = -3.0006
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_ring.01.L']
- bone = arm.edit_bones.new('finger_middle.02.L')
- bone.head[:] = 0.7975, 0.0221, 1.4712
- bone.tail[:] = 0.8289, 0.0206, 1.4643
- bone.roll = -2.9995
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_middle.01.L']
- bone = arm.edit_bones.new('finger_index.02.L')
- bone.head[:] = 0.7843, -0.0204, 1.4718
- bone.tail[:] = 0.8117, -0.0275, 1.4660
- bone.roll = -3.0064
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_index.01.L']
- bone = arm.edit_bones.new('thumb.03.L')
- bone.head[:] = 0.6958, -0.0568, 1.4376
- bone.tail[:] = 0.7196, -0.0671, 1.4210
- bone.roll = -0.8072
- bone.use_connect = True
- bone.parent = arm.edit_bones['thumb.02.L']
- bone = arm.edit_bones.new('finger_pinky.02.R')
- bone.head[:] = -0.7698, 0.0947, 1.4635
- bone.tail[:] = -0.7910, 0.1018, 1.4577
- bone.roll = 3.0949
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_pinky.01.R']
- bone = arm.edit_bones.new('finger_ring.02.R')
- bone.head[:] = -0.7890, 0.0615, 1.4667
- bone.tail[:] = -0.8177, 0.0650, 1.4600
- bone.roll = 3.0341
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_ring.01.R']
- bone = arm.edit_bones.new('finger_middle.02.R')
- bone.head[:] = -0.7975, 0.0221, 1.4712
- bone.tail[:] = -0.8289, 0.0206, 1.4643
- bone.roll = 3.0291
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_middle.01.R']
- bone = arm.edit_bones.new('thumb.03.R')
- bone.head[:] = -0.6958, -0.0568, 1.4376
- bone.tail[:] = -0.7196, -0.0671, 1.4210
- bone.roll = 0.8072
- bone.use_connect = True
- bone.parent = arm.edit_bones['thumb.02.R']
- bone = arm.edit_bones.new('finger_index.02.R')
- bone.head[:] = -0.7843, -0.0204, 1.4718
- bone.tail[:] = -0.8117, -0.0275, 1.4660
- bone.roll = 3.0705
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_index.01.R']
- bone = arm.edit_bones.new('finger_pinky.03.L')
- bone.head[:] = 0.7910, 0.1018, 1.4577
- bone.tail[:] = 0.8109, 0.1085, 1.4523
- bone.roll = -3.0949
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_pinky.02.L']
- bone = arm.edit_bones.new('finger_ring.03.L')
- bone.head[:] = 0.8177, 0.0650, 1.4600
- bone.tail[:] = 0.8396, 0.0677, 1.4544
- bone.roll = -2.9819
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_ring.02.L']
- bone = arm.edit_bones.new('finger_middle.03.L')
- bone.head[:] = 0.8289, 0.0206, 1.4643
- bone.tail[:] = 0.8534, 0.0193, 1.4589
- bone.roll = -3.0004
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_middle.02.L']
- bone = arm.edit_bones.new('finger_index.03.L')
- bone.head[:] = 0.8117, -0.0275, 1.4660
- bone.tail[:] = 0.8331, -0.0333, 1.4615
- bone.roll = -3.0103
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_index.02.L']
- bone = arm.edit_bones.new('finger_pinky.03.R')
- bone.head[:] = -0.7910, 0.1018, 1.4577
- bone.tail[:] = -0.8109, 0.1085, 1.4523
- bone.roll = 3.0949
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_pinky.02.R']
- bone = arm.edit_bones.new('finger_ring.03.R')
- bone.head[:] = -0.8177, 0.0650, 1.4600
- bone.tail[:] = -0.8396, 0.0677, 1.4544
- bone.roll = 2.9819
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_ring.02.R']
- bone = arm.edit_bones.new('finger_middle.03.R')
- bone.head[:] = -0.8289, 0.0206, 1.4643
- bone.tail[:] = -0.8534, 0.0193, 1.4589
- bone.roll = 3.0004
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_middle.02.R']
- bone = arm.edit_bones.new('finger_index.03.R')
- bone.head[:] = -0.8117, -0.0275, 1.4660
- bone.tail[:] = -0.8331, -0.0333, 1.4615
- bone.roll = 2.9917
- bone.use_connect = True
- bone.parent = arm.edit_bones['finger_index.02.R']
-
- bpy.ops.object.mode_set(mode='OBJECT')
- pbone = obj.pose.bones['torso']
- pbone['type'] = 'spine_pivot_flex'
- pbone = obj.pose.bones['torso']
- pbone['spine_pivot_flex.later_main'] = 1
- pbone = obj.pose.bones['torso']
- pbone['spine_pivot_flex.layer_extra'] = 2
- pbone = obj.pose.bones['thigh.L']
- pbone['type'] = 'leg_biped'
- pbone = obj.pose.bones['thigh.L']
- pbone['leg_biped_generic.layer_ik'] = 12
- pbone = obj.pose.bones['thigh.L']
- pbone['leg_biped_generic.layer_fk'] = 11
- pbone = obj.pose.bones['thigh.R']
- pbone['type'] = 'leg_biped'
- pbone = obj.pose.bones['thigh.R']
- pbone['leg_biped_generic.layer_ik'] = 14
- pbone = obj.pose.bones['thigh.R']
- pbone['leg_biped_generic.layer_fk'] = 13
- pbone = obj.pose.bones['head']
- pbone['type'] = 'neck_flex'
- pbone = obj.pose.bones['head']
- pbone['neck_flex.layer_extra'] = 4
- pbone = obj.pose.bones['head']
- pbone['neck_flex.layer_main'] = 3
- pbone = obj.pose.bones['DLT-shoulder.L']
- pbone['type'] = 'delta'
- pbone = obj.pose.bones['DLT-shoulder.R']
- pbone['type'] = 'delta'
- pbone = obj.pose.bones['shoulder.L']
- pbone['type'] = 'copy'
- pbone = obj.pose.bones['shoulder.L']
- pbone['copy.layers'] = 1
- pbone = obj.pose.bones['shoulder.R']
- pbone['type'] = 'copy'
- pbone = obj.pose.bones['shoulder.R']
- pbone['copy.layers'] = 1
- pbone = obj.pose.bones['DLT-upper_arm.L']
- pbone['type'] = 'delta'
- pbone = obj.pose.bones['DLT-upper_arm.R']
- pbone['type'] = 'delta'
- pbone = obj.pose.bones['upper_arm.L']
- pbone['type'] = 'arm_biped'
- pbone = obj.pose.bones['upper_arm.L']
- pbone['arm_biped_generic.elbow_parent'] = 'spine.04'
- pbone = obj.pose.bones['upper_arm.L']
- pbone['arm_biped_generic.layer_fk'] = 7
- pbone = obj.pose.bones['upper_arm.L']
- pbone['arm_biped_generic.layer_ik'] = 8
- pbone = obj.pose.bones['upper_arm.R']
- pbone['type'] = 'arm_biped'
- pbone = obj.pose.bones['upper_arm.R']
- pbone['arm_biped_generic.layer_fk'] = 9
- pbone = obj.pose.bones['upper_arm.R']
- pbone['arm_biped_generic.layer_ik'] = 10
- pbone = obj.pose.bones['upper_arm.R']
- pbone['arm_biped_generic.elbow_parent'] = 'spine.04'
- pbone = obj.pose.bones['palm.01.L']
- pbone['type'] = 'palm_curl'
- pbone = obj.pose.bones['palm.01.L']
- pbone['palm_curl.layers'] = 5
- pbone = obj.pose.bones['thumb.01.L']
- pbone['type'] = 'finger_curl'
- pbone = obj.pose.bones['thumb.01.L']
- pbone['finger_curl.layer_main'] = 5
- pbone = obj.pose.bones['thumb.01.L']
- pbone['finger_curl.layer_extra'] = 6
- pbone = obj.pose.bones['thumb.01.R']
- pbone['type'] = 'finger_curl'
- pbone = obj.pose.bones['thumb.01.R']
- pbone['finger_curl.layer_main'] = 5
- pbone = obj.pose.bones['thumb.01.R']
- pbone['finger_curl.layer_extra'] = 6
- pbone = obj.pose.bones['palm.01.R']
- pbone['type'] = 'palm_curl'
- pbone = obj.pose.bones['palm.01.R']
- pbone['palm_curl.layers'] = 5
- pbone = obj.pose.bones['finger_pinky.01.L']
- pbone['type'] = 'finger_curl'
- pbone = obj.pose.bones['finger_pinky.01.L']
- pbone['finger_curl.layer_main'] = 5
- pbone = obj.pose.bones['finger_pinky.01.L']
- pbone['finger_curl.layer_extra'] = 6
- pbone = obj.pose.bones['finger_ring.01.L']
- pbone['type'] = 'finger_curl'
- pbone = obj.pose.bones['finger_ring.01.L']
- pbone['finger_curl.layer_main'] = 5
- pbone = obj.pose.bones['finger_ring.01.L']
- pbone['finger_curl.layer_extra'] = 6
- pbone = obj.pose.bones['finger_middle.01.L']
- pbone['type'] = 'finger_curl'
- pbone = obj.pose.bones['finger_middle.01.L']
- pbone['finger_curl.layer_main'] = 5
- pbone = obj.pose.bones['finger_middle.01.L']
- pbone['finger_curl.layer_extra'] = 6
- pbone = obj.pose.bones['finger_index.01.L']
- pbone['type'] = 'finger_curl'
- pbone = obj.pose.bones['finger_index.01.L']
- pbone['finger_curl.layer_main'] = 5
- pbone = obj.pose.bones['finger_index.01.L']
- pbone['finger_curl.layer_extra'] = 6
- pbone = obj.pose.bones['finger_pinky.01.R']
- pbone['type'] = 'finger_curl'
- pbone = obj.pose.bones['finger_pinky.01.R']
- pbone['finger_curl.layer_main'] = 5
- pbone = obj.pose.bones['finger_pinky.01.R']
- pbone['finger_curl.layer_extra'] = 6
- pbone = obj.pose.bones['finger_ring.01.R']
- pbone['type'] = 'finger_curl'
- pbone = obj.pose.bones['finger_ring.01.R']
- pbone['finger_curl.layer_main'] = 5
- pbone = obj.pose.bones['finger_ring.01.R']
- pbone['finger_curl.layer_extra'] = 6
- pbone = obj.pose.bones['finger_middle.01.R']
- pbone['type'] = 'finger_curl'
- pbone = obj.pose.bones['finger_middle.01.R']
- pbone['finger_curl.layer_main'] = 5
- pbone = obj.pose.bones['finger_middle.01.R']
- pbone['finger_curl.layer_extra'] = 6
- pbone = obj.pose.bones['finger_index.01.R']
- pbone['type'] = 'finger_curl'
- pbone = obj.pose.bones['finger_index.01.R']
- pbone['finger_curl.layer_main'] = 5
- pbone = obj.pose.bones['finger_index.01.R']
- pbone['finger_curl.layer_extra'] = 6
-
-
-class AddHuman(bpy.types.Operator):
- '''Add an advanced human metarig base'''
- bl_idname = "object.armature_human_advanced_add"
- bl_label = "Add Humanoid (advanced metarig)"
- bl_options = {'REGISTER', 'UNDO'}
-
- def execute(self, context):
- bpy.ops.object.armature_add()
- obj = context.active_object
- mode_orig = obj.mode
- bpy.ops.object.mode_set(mode='EDIT') # grr, remove bone
- bones = context.active_object.data.edit_bones
- bones.remove(bones[0])
- metarig_template()
- bpy.ops.object.mode_set(mode=mode_orig)
- return {'FINISHED'}
-
-
-# Add to a menu
-menu_func = (lambda self, context: self.layout.operator(AddHuman.bl_idname,
- icon='OUTLINER_OB_ARMATURE', text="Human (Meta-Rig)"))
-
-
-def register():
- bpy.types.INFO_MT_armature_add.append(menu_func)
-
-
-def unregister():
- bpy.types.INFO_MT_armature_add.remove(menu_func)
-
-if __name__ == "__main__":
- register()
diff --git a/release/scripts/op/console_python.py b/release/scripts/op/console_python.py
index 3d9ed098de7..23ee157b279 100644
--- a/release/scripts/op/console_python.py
+++ b/release/scripts/op/console_python.py
@@ -268,7 +268,7 @@ def banner(context):
add_scrollback("Execute: Enter", 'OUTPUT')
add_scrollback("Autocomplete: Ctrl+Space", 'OUTPUT')
add_scrollback("Ctrl +/- Wheel: Zoom", 'OUTPUT')
- add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bgl, blf, mathutils, geometry", 'OUTPUT')
+ add_scrollback("Builtin Modules: bpy, bpy.data, bpy.ops, bpy.props, bpy.types, bpy.context, bgl, blf, mathutils", 'OUTPUT')
add_scrollback("", 'OUTPUT')
add_scrollback(" WARNING!!! Blender 2.5 API is subject to change, see API reference for more info.", 'ERROR')
add_scrollback("", 'OUTPUT')
diff --git a/release/scripts/op/io_scene_fbx/export_fbx.py b/release/scripts/op/io_scene_fbx/export_fbx.py
index 4859e87620f..bf44416b49d 100644
--- a/release/scripts/op/io_scene_fbx/export_fbx.py
+++ b/release/scripts/op/io_scene_fbx/export_fbx.py
@@ -382,18 +382,17 @@ def save(operator, context, filepath="",
# ----------------------------------------------
# storage classes
- class my_bone_class:
- __slots__ =(\
- 'blenName',\
- 'blenBone',\
- 'blenMeshes',\
- 'restMatrix',\
- 'parent',\
- 'blenName',\
- 'fbxName',\
- 'fbxArm',\
- '__pose_bone',\
- '__anim_poselist')
+ class my_bone_class(object):
+ __slots__ =("blenName",
+ "blenBone",
+ "blenMeshes",
+ "restMatrix",
+ "parent",
+ "blenName",
+ "fbxName",
+ "fbxArm",
+ "__pose_bone",
+ "__anim_poselist")
def __init__(self, blenBone, fbxArm):
@@ -474,7 +473,25 @@ def save(operator, context, filepath="",
self.__anim_poselist.clear()
- class my_object_generic:
+ class my_object_generic(object):
+ __slots__ =("fbxName",
+ "blenObject",
+ "blenData",
+ "origData",
+ "blenTextures",
+ "blenMaterials",
+ "blenMaterialList",
+ "blenAction",
+ "blenActionList",
+ "fbxGroupNames",
+ "fbxParent",
+ "fbxBoneParent",
+ "fbxBones",
+ "fbxArm",
+ "matrixWorld",
+ "__anim_poselist",
+ )
+
# Other settings can be applied for each type - mesh, armature etc.
def __init__(self, ob, matrixWorld = None):
self.fbxName = sane_obname(ob)
@@ -492,8 +509,12 @@ def save(operator, context, filepath="",
else:
return self.matrixWorld
- def setPoseFrame(self, f):
- self.__anim_poselist[f] = self.blenObject.matrix_world.copy()
+ def setPoseFrame(self, f, fake=False):
+ if fake:
+ # annoying, have to clear GLOBAL_MATRIX
+ self.__anim_poselist[f] = self.matrixWorld * GLOBAL_MATRIX.copy().invert()
+ else:
+ self.__anim_poselist[f] = self.blenObject.matrix_world.copy()
def getAnimParRelMatrix(self, frame):
if self.fbxParent:
@@ -2648,7 +2669,7 @@ Takes: {''')
#Blender.Window.RedrawAll()
if ob_generic == ob_meshes and my_ob.fbxArm:
# We cant animate armature meshes!
- pass
+ my_ob.setPoseFrame(i, fake=True)
else:
my_ob.setPoseFrame(i)
diff --git a/release/scripts/op/io_scene_obj/export_obj.py b/release/scripts/op/io_scene_obj/export_obj.py
index 3fd91615bb6..352c82a4dbd 100644
--- a/release/scripts/op/io_scene_obj/export_obj.py
+++ b/release/scripts/op/io_scene_obj/export_obj.py
@@ -759,7 +759,7 @@ def _write(context, filepath,
if EXPORT_ANIMATION: # Add frame to the filepath.
context_name[2] = '_%.6d' % frame
- scene.frame_current = frame
+ scene.frame_set(frame, 0.0)
if EXPORT_SEL_ONLY:
objects = context.selected_objects
else:
@@ -787,7 +787,7 @@ def _write(context, filepath,
EXPORT_CURVE_AS_NURBS)
- scene.frame_current = orig_frame
+ scene.frame_set(orig_frame, 0.0)
# Restore old active scene.
# orig_scene.makeCurrent()
diff --git a/release/scripts/op/io_scene_obj/import_obj.py b/release/scripts/op/io_scene_obj/import_obj.py
index f6c5e625fb0..0a97d08bf99 100644
--- a/release/scripts/op/io_scene_obj/import_obj.py
+++ b/release/scripts/op/io_scene_obj/import_obj.py
@@ -35,7 +35,7 @@ import os
import time
import bpy
import mathutils
-from geometry import PolyFill
+from mathutils.geometry import PolyFill
from io_utils import load_image, unpack_list, unpack_face_list
diff --git a/release/scripts/op/io_shape_mdd/import_mdd.py b/release/scripts/op/io_shape_mdd/import_mdd.py
index d008ff931ff..2aa132384a7 100644
--- a/release/scripts/op/io_shape_mdd/import_mdd.py
+++ b/release/scripts/op/io_shape_mdd/import_mdd.py
@@ -70,7 +70,7 @@ def load(operator, context, filepath, frame_start=0, frame_step=1):
obj.active_shape_key_index = len(obj.data.shape_keys.keys)-1
index = len(obj.data.shape_keys.keys)-1
- obj.show_shape_key = True
+ obj.show_only_shape_key = True
verts = obj.data.shape_keys.keys[len(obj.data.shape_keys.keys)-1].data
@@ -78,7 +78,7 @@ def load(operator, context, filepath, frame_start=0, frame_step=1):
for v in verts: # 12 is the size of 3 floats
v.co[:] = unpack('>3f', file.read(12))
#me.update()
- obj.show_shape_key = False
+ obj.show_only_shape_key = False
# insert keyframes
diff --git a/release/scripts/op/object.py b/release/scripts/op/object.py
index 61a4478c5e4..b5c46c757b3 100644
--- a/release/scripts/op/object.py
+++ b/release/scripts/op/object.py
@@ -60,9 +60,7 @@ class SelectPattern(bpy.types.Operator):
def invoke(self, context, event):
wm = context.window_manager
- # return wm.invoke_props_popup(self, event)
- wm.invoke_props_popup(self, event)
- return {'RUNNING_MODAL'}
+ return wm.invoke_props_popup(self, event)
def draw(self, context):
layout = self.layout
@@ -254,9 +252,9 @@ class ShapeTransfer(bpy.types.Operator):
key = ob.add_shape_key(from_mix=False) # we need a rest
key.name = name
ob.active_shape_key_index = len(me.shape_keys.keys) - 1
- ob.show_shape_key = True
+ ob.show_only_shape_key = True
- from geometry import BarycentricTransform
+ from mathutils.geometry import BarycentricTransform
from mathutils import Vector
if use_clamp and mode == 'OFFSET':
diff --git a/release/scripts/op/presets.py b/release/scripts/op/presets.py
index 2f6a5b69c20..3a78f15d770 100644
--- a/release/scripts/op/presets.py
+++ b/release/scripts/op/presets.py
@@ -29,6 +29,7 @@ class AddPresetBase():
- preset_subdir '''
# bl_idname = "script.preset_base_add"
# bl_label = "Add a Python Preset"
+ bl_options = {'REGISTER'} # only because invoke_props_popup requires.
name = bpy.props.StringProperty(name="Name", description="Name of the preset, used to make the path name", maxlen=64, default="")
remove_active = bpy.props.BoolProperty(default=False, options={'HIDDEN'})
@@ -53,7 +54,7 @@ class AddPresetBase():
return {'FINISHED'}
filename = self.as_filename(self.name)
-
+
target_path = bpy.utils.preset_paths(self.preset_subdir)[0] # we need some way to tell the user and system preset path
filepath = os.path.join(target_path, filename) + ".py"
@@ -75,8 +76,8 @@ class AddPresetBase():
file_preset.write("%s = %r\n" % (rna_path, value))
file_preset.close()
-
- preset_menu_class.bl_label = bpy.path.display_name(self.name)
+
+ preset_menu_class.bl_label = bpy.path.display_name(filename)
else:
preset_active = preset_menu_class.bl_label
@@ -107,14 +108,13 @@ class AddPresetBase():
return {'FINISHED'}
+ def check(self, context):
+ self.name = self.as_filename(self.name)
+
def invoke(self, context, event):
if not self.remove_active:
wm = context.window_manager
- #crashes, TODO - fix
- #return wm.invoke_props_popup(self, event)
-
- wm.invoke_props_popup(self, event)
- return {'RUNNING_MODAL'}
+ return wm.invoke_props_dialog(self)
else:
return self.execute(context)
diff --git a/release/scripts/op/uvcalc_smart_project.py b/release/scripts/op/uvcalc_smart_project.py
index 83303f8f7f1..f82acf69b54 100644
--- a/release/scripts/op/uvcalc_smart_project.py
+++ b/release/scripts/op/uvcalc_smart_project.py
@@ -22,9 +22,8 @@
#
-from mathutils import Matrix, Vector
+from mathutils import Matrix, Vector, geometry
import time
-import geometry
import bpy
from math import cos, radians
diff --git a/release/scripts/op/wm.py b/release/scripts/op/wm.py
index 4ce10233a9b..9827c93f218 100644
--- a/release/scripts/op/wm.py
+++ b/release/scripts/op/wm.py
@@ -632,9 +632,8 @@ class WM_OT_doc_edit(bpy.types.Operator):
def draw(self, context):
layout = self.layout
- props = self.properties # XXX, this should not be needed, api problem!
- layout.label(text="Descriptor ID: '%s'" % props.doc_id)
- layout.prop(props, "doc_new", text="")
+ layout.label(text="Descriptor ID: '%s'" % self.doc_id)
+ layout.prop(self, "doc_new", text="")
def invoke(self, context, event):
wm = context.window_manager
@@ -662,6 +661,7 @@ class WM_OT_properties_edit(bpy.types.Operator):
'''Internal use (edit a property data_path)'''
bl_idname = "wm.properties_edit"
bl_label = "Edit Property"
+ bl_options = {'REGISTER'} # only because invoke_props_popup requires.
data_path = rna_path
property = rna_property
@@ -722,11 +722,7 @@ class WM_OT_properties_edit(bpy.types.Operator):
self.description = prop_ui.get("description", "")
wm = context.window_manager
- # This crashes, TODO - fix
- #return wm.invoke_props_popup(self, event)
-
- wm.invoke_props_popup(self, event)
- return {'RUNNING_MODAL'}
+ return wm.invoke_props_popup(self, event)
class WM_OT_properties_add(bpy.types.Operator):
diff --git a/release/scripts/ui/properties_data_armature_rigify.py b/release/scripts/ui/properties_data_armature_rigify.py
deleted file mode 100644
index 6453ea9e038..00000000000
--- a/release/scripts/ui/properties_data_armature_rigify.py
+++ /dev/null
@@ -1,334 +0,0 @@
-# ##### BEGIN GPL LICENSE BLOCK #####
-#
-# This program is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software Foundation,
-# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-#
-# ##### END GPL LICENSE BLOCK #####
-
-#
-import bpy
-from bpy.props import *
-
-
-class PoseTemplate(bpy.types.IDPropertyGroup):
- name = StringProperty(name="Name of the slave", description="", maxlen=64, default="")
-
-
-class PoseTemplateSettings(bpy.types.IDPropertyGroup):
- templates = CollectionProperty(type=PoseTemplate, name="Templates", description="")
- active_template_index = IntProperty(name="Index of the active slave", description="", default=-1, min=-1, max=65535)
- use_generate_deform_rig = BoolProperty(name="Create Deform Rig", description="Create a copy of the metarig, constrainted by the generated rig", default=False)
-
-
-def metarig_templates():
- import rigify
- return rigify.get_submodule_types()
-
-
-class DATA_PT_template(bpy.types.Panel):
- bl_label = "Meta-Rig Templates"
- bl_space_type = 'PROPERTIES'
- bl_region_type = 'WINDOW'
- bl_context = "data"
- bl_options = {'DEFAULT_CLOSED'}
-
- templates = []
-
- @classmethod
- def poll(cls, context):
- if not context.armature:
- return False
- obj = context.object
- if obj:
- return (obj.mode in ('POSE', 'OBJECT'))
- return False
-
- def draw(self, context):
- layout = self.layout
- try:
- active_type = context.active_pose_bone["type"]
- except:
- active_type = None
-
- scene = context.scene
- pose_templates = scene.pose_templates
-
- if pose_templates.active_template_index == -1:
- pose_templates.active_template_index = 0
-
- if not self.templates:
- self.templates[:] = metarig_templates()
-
- while(len(pose_templates.templates) < len(self.templates)):
- pose_templates.templates.add()
- while(len(pose_templates.templates) > len(self.templates)):
- pose_templates.templates.remove(0)
-
- for i, template_name in enumerate(self.templates):
- template = pose_templates.templates[i]
- if active_type == template_name:
- template.name = "<%s>" % template_name.replace("_", " ")
- else:
- template.name = " %s " % template_name.replace("_", " ")
-
- row = layout.row()
- row.operator("pose.metarig_generate", text="Generate")
- row.operator("pose.metarig_validate", text="Check")
- row.operator("pose.metarig_graph", text="Graph")
- row = layout.row()
- row.prop(pose_templates, "use_generate_deform_rig")
-
- row = layout.row()
- col = row.column()
- col.template_list(pose_templates, "templates", pose_templates, "active_template_index", rows=1)
-
- subrow = col.split(percentage=0.5, align=True)
- subsubrow = subrow.row(align=True)
- subsubrow.operator("pose.metarig_assign", text="Assign")
- subsubrow.operator("pose.metarig_clear", text="Clear")
-
- if self.templates:
- subsubrow = subrow.split(percentage=0.8)
- subsubrow.operator("pose.metarig_sample_add", text="Sample").metarig_type = self.templates[pose_templates.active_template_index]
- subsubrow.operator("pose.metarig_sample_add", text="All").metarig_type = "" # self.templates[pose_templates.active_template_index]
-
- sub = row.column(align=True)
- sub.operator("pose.metarig_reload", icon="FILE_REFRESH", text="")
-
-
-class Reload(bpy.types.Operator):
- '''Re-Scan the metarig package directory for scripts'''
-
- bl_idname = "pose.metarig_reload"
- bl_label = "Re-Scan the list of metarig types"
-
- def execute(self, context):
- DATA_PT_template.templates[:] = metarig_templates()
- return {'FINISHED'}
-
-
-def rigify_report_exception(operator, exception):
- import traceback
- import sys
- import os
- # find the module name where the error happened
- # hint, this is the metarig type!
- exceptionType, exceptionValue, exceptionTraceback = sys.exc_info()
- fn = traceback.extract_tb(exceptionTraceback)[-1][0]
- fn = os.path.basename(fn)
- fn = os.path.splitext(fn)[0]
- message = []
- if fn.startswith("__"):
- message.append("Incorrect armature...")
- else:
- message.append("Incorrect armature for type '%s'" % fn)
- message.append(exception.message)
-
- message.reverse() # XXX - stupid! menu's are upside down!
-
- operator.report(set(['INFO']), '\n'.join(message))
-
-
-class Generate(bpy.types.Operator):
- '''Generates a metarig from the active armature'''
-
- bl_idname = "pose.metarig_generate"
- bl_label = "Generate Metarig"
-
- def execute(self, context):
- import rigify
- reload(rigify)
-
- meta_def = context.scene.pose_templates.use_generate_deform_rig
-
- try:
- rigify.generate_rig(context, context.object, META_DEF=meta_def)
- except rigify.RigifyError as rig_exception:
- rigify_report_exception(self, rig_exception)
-
- return {'FINISHED'}
-
-
-class Validate(bpy.types.Operator):
- '''Validate a metarig from the active armature'''
-
- bl_idname = "pose.metarig_validate"
- bl_label = "Validate Metarig"
-
- def execute(self, context):
- import rigify
- reload(rigify)
- try:
- rigify.validate_rig(context, context.object)
- except rigify.RigifyError as rig_exception:
- rigify_report_exception(self, rig_exception)
- return {'FINISHED'}
-
-
-class Sample(bpy.types.Operator):
- '''Create a sample metarig to be modified before generating the final rig.'''
-
- bl_idname = "pose.metarig_sample_add"
- bl_label = "Re-Scan Metarig Scripts"
-
- metarig_type = StringProperty(name="Type", description="Name of the rig type to generate a sample of, a blank string for all", maxlen=128, default="")
-
- def execute(self, context):
- import rigify
- reload(rigify)
- final = (self.metarig_type == "")
- objects = rigify.generate_test(context, metarig_type=self.metarig_type, GENERATE_FINAL=final)
-
- if len(objects) > 1:
- for i, (obj_meta, obj_gen) in enumerate(objects):
- obj_meta.location.x = i * 1.0
- if obj_gen:
- obj_gen.location.x = i * 1.0
-
- return {'FINISHED'}
-
-
-class Graph(bpy.types.Operator):
- '''Create a graph from the active armature through graphviz'''
-
- bl_idname = "pose.metarig_graph"
- bl_label = "Pose Graph"
-
- def execute(self, context):
- import os
- import graphviz_export
- import bpy
- reload(graphviz_export)
- obj = bpy.context.object
- if(bpy.data.filepath):
- path = os.path.splitext(bpy.data.filepath)[0] + "-" + bpy.path.clean_name(obj.name)
- else:
- import tempfile
- path = tempfile.mktemp(prefix=bpy.app.tempdir) + "-" + bpy.path.clean_name(obj.name)
- path_dot = path + ".dot"
- path_png = path + ".png"
- saved = graphviz_export.graph_armature(bpy.context.object, path_dot, CONSTRAINTS=False, DRIVERS=False)
-
- if saved:
- # if we seriously want this working everywhere we'll need some new approach
- os.system("dot -Tpng %r > %r" % (path_dot, path_png))
- if not os.path.exists(path_png) or os.stat(path_png)[6] == 0:
- self.report('ERROR', "Graphvis could not create %r check graphviz is installed" % path_png)
- return {'CANCELLED'}
-
- bpy.ops.image.external_edit(filepath=path_png)
- #os.system("python /b/xdot.py '%s' &" % path_dot)
-
- return {'FINISHED'}
-
-
-class AsScript(bpy.types.Operator):
- '''Write the edit armature out as a python script'''
-
- bl_idname = "pose.metarig_to_script"
- bl_label = "Write Metarig to Script"
- bl_options = {'REGISTER', 'UNDO'}
-
- filepath = StringProperty(name="File Path", description="File path used for exporting the Armature file", maxlen=1024, default="")
-
- def execute(self, context):
- import rigify_utils
- reload(rigify_utils)
- obj = context.object
- code = rigify_utils.write_meta_rig(obj)
- path = self.filepath
- file = open(path, "w")
- file.write(code)
- file.close()
-
- return {'FINISHED'}
-
- def invoke(self, context, event):
- import os
- obj = context.object
- self.filepath = os.path.splitext(bpy.data.filepath)[0] + "-" + bpy.path.clean_name(obj.name) + ".py"
- wm = context.window_manager
- wm.add_fileselect(self)
- return {'RUNNING_MODAL'}
-
-
-# operators that use the GUI
-class ActiveAssign(bpy.types.Operator):
- '''Assign to the active posebone'''
-
- bl_idname = "pose.metarig_assign"
- bl_label = "Assign to the active posebone"
-
- @classmethod
- def poll(cls, context):
- bone = context.active_pose_bone
- return bool(bone and bone.id_data.mode == 'POSE')
-
- def execute(self, context):
- scene = context.scene
- pose_templates = scene.pose_templates
- template_name = DATA_PT_template.templates[pose_templates.active_template_index]
- context.active_pose_bone["type"] = template_name
- return {'FINISHED'}
-
-
-class ActiveClear(bpy.types.Operator):
- '''Clear type from the active posebone'''
-
- bl_idname = "pose.metarig_clear"
- bl_label = "Metarig Clear Type"
-
- @classmethod
- def poll(cls, context):
- bone = context.active_pose_bone
- return bool(bone and bone.id_data.mode == 'POSE')
-
- def execute(self, context):
- scene = context.scene
- try:
- del context.active_pose_bone["type"]
- except:
- return {'CANCELLED'}
- return {'FINISHED'}
-
-
-class INFO_MT_armature_metarig_add(bpy.types.Menu):
- bl_idname = "INFO_MT_armature_metarig_add"
- bl_label = "Meta-Rig"
-
- def draw(self, context):
- import rigify
-
- layout = self.layout
- layout.operator_context = 'INVOKE_REGION_WIN'
-
- for submodule_type in rigify.get_submodule_types():
- text = bpy.path.display_name(submodule_type)
- layout.operator("pose.metarig_sample_add", text=text, icon='OUTLINER_OB_ARMATURE').metarig_type = submodule_type
-
-menu_func = (lambda self, context: self.layout.menu("INFO_MT_armature_metarig_add", icon='OUTLINER_OB_ARMATURE'))
-import space_info # ensure the menu is loaded first
-
-
-def register():
- bpy.types.Scene.pose_templates = PointerProperty(type=PoseTemplateSettings, name="Pose Templates", description="Pose Template Settings")
- space_info.INFO_MT_armature_add.append(menu_func)
-
-
-def unregister():
- del bpy.types.Scene.pose_templates
- space_info.INFO_MT_armature_add.remove(menu_func)
-
-if __name__ == "__main__":
- register()
diff --git a/release/scripts/ui/properties_render.py b/release/scripts/ui/properties_render.py
index 81727de209b..d31c947dabf 100644
--- a/release/scripts/ui/properties_render.py
+++ b/release/scripts/ui/properties_render.py
@@ -764,9 +764,14 @@ class RENDER_PT_antialiasing(RenderButtonsPanel, bpy.types.Panel):
class RENDER_PT_motion_blur(RenderButtonsPanel, bpy.types.Panel):
- bl_label = "Full Sample Motion Blur"
+ bl_label = "Sampled Motion Blur"
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER'}
+
+ @classmethod
+ def poll(cls, context):
+ rd = context.scene.render
+ return not rd.use_full_sample and (rd.engine in cls.COMPAT_ENGINES)
def draw_header(self, context):
rd = context.scene.render
diff --git a/release/scripts/ui/space_image.py b/release/scripts/ui/space_image.py
index d46220ad7b9..93516457dd6 100644
--- a/release/scripts/ui/space_image.py
+++ b/release/scripts/ui/space_image.py
@@ -660,6 +660,26 @@ class IMAGE_PT_tools_brush_texture(BrushButtonsPanel, bpy.types.Panel):
col.template_ID_preview(brush, "texture", new="texture.new", rows=3, cols=8)
+class IMAGE_PT_tools_brush_tool(BrushButtonsPanel, bpy.types.Panel):
+ bl_label = "Tool"
+ bl_options = {'DEFAULT_CLOSED'}
+
+ def draw(self, context):
+ layout = self.layout
+ settings = context.tool_settings.image_paint
+ brush = settings.brush
+
+ col = layout.column(align=True)
+
+ col.prop(brush, "imagepaint_tool", expand=False, text="")
+
+ row = layout.row(align=True)
+ row.prop(brush, "use_paint_sculpt", text="", icon='SCULPTMODE_HLT')
+ row.prop(brush, "use_paint_vertex", text="", icon='VPAINT_HLT')
+ row.prop(brush, "use_paint_weight", text="", icon='WPAINT_HLT')
+ row.prop(brush, "use_paint_texture", text="", icon='TPAINT_HLT')
+
+
class IMAGE_PT_paint_stroke(BrushButtonsPanel, bpy.types.Panel):
bl_label = "Paint Stroke"
bl_options = {'DEFAULT_CLOSED'}
diff --git a/release/scripts/ui/space_sequencer.py b/release/scripts/ui/space_sequencer.py
index 85e0298e584..1e1b3f9751c 100644
--- a/release/scripts/ui/space_sequencer.py
+++ b/release/scripts/ui/space_sequencer.py
@@ -295,6 +295,7 @@ class SEQUENCER_MT_strip(bpy.types.Menu):
layout.separator()
layout.operator("sequencer.reload")
layout.operator("sequencer.reassign_inputs")
+ layout.operator("sequencer.swap_inputs")
layout.separator()
layout.operator("sequencer.lock")
layout.operator("sequencer.unlock")
@@ -407,6 +408,13 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, bpy.types.Panel):
layout = self.layout
strip = act_strip(context)
+ if strip.input_count > 0:
+ col = layout.column()
+ col.prop(strip, "input_1")
+ if strip.input_count > 1:
+ col.prop(strip, "input_2")
+ if strip.input_count > 2:
+ col.prop(strip, "input_3")
if strip.type == 'COLOR':
layout.prop(strip, "color")
@@ -653,6 +661,9 @@ class SEQUENCER_PT_scene(SequencerButtonsPanel, bpy.types.Panel):
layout.label(text="Camera Override")
layout.template_ID(strip, "scene_camera")
+ sce = strip.scene
+ layout.label(text="Original frame range: "+ str(sce.frame_start) +" - "+ str(sce.frame_end) + " (" + str(sce.frame_end-sce.frame_start+1) + ")")
+
class SEQUENCER_PT_filter(SequencerButtonsPanel, bpy.types.Panel):
bl_label = "Filter"
diff --git a/release/scripts/ui/space_text.py b/release/scripts/ui/space_text.py
index 163fa07e1d6..58f12ba51e4 100644
--- a/release/scripts/ui/space_text.py
+++ b/release/scripts/ui/space_text.py
@@ -174,7 +174,7 @@ class TEXT_MT_text(bpy.types.Menu):
layout.column()
layout.operator("text.run_script")
- #ifndef DISABLE_PYTHON
+ #ifdef WITH_PYTHON
# XXX if(BPY_is_pyconstraint(text))
# XXX uiMenuItemO(head, 0, "text.refresh_pyconstraints");
#endif
diff --git a/release/scripts/ui/space_userpref.py b/release/scripts/ui/space_userpref.py
index df737d5630a..ef5e88a874e 100644
--- a/release/scripts/ui/space_userpref.py
+++ b/release/scripts/ui/space_userpref.py
@@ -838,13 +838,21 @@ class USERPREF_PT_addons(bpy.types.Panel):
modules = []
loaded_modules = set()
+
+ # RELEASE SCRIPTS: official scripts distributed in Blender releases
paths = bpy.utils.script_paths("addons")
- # if folder addons_contrib/ exists, scripts in there will be loaded
+
+ # CONTRIB SCRIPTS: good for testing but not official scripts yet
+ # if folder addons_contrib/ exists, scripts in there will be loaded too
paths += bpy.utils.script_paths("addons_contrib")
+
+ # EXTERN SCRIPTS: external projects scripts
+ # if folder addons_extern/ exists, scripts in there will be loaded too
+ paths += bpy.utils.script_paths("addons_extern")
if bpy.app.debug:
t_main = time.time()
-
+
# fake module importing
def fake_module(mod_name, mod_path, speedy=True):
if bpy.app.debug:
diff --git a/release/scripts/ui/space_view3d.py b/release/scripts/ui/space_view3d.py
index f7238364142..2cc05cb5e2d 100644
--- a/release/scripts/ui/space_view3d.py
+++ b/release/scripts/ui/space_view3d.py
@@ -1951,6 +1951,8 @@ class VIEW3D_PT_view3d_properties(bpy.types.Panel):
col.prop(view, "lock_object", text="")
if view.lock_object and view.lock_object.type == 'ARMATURE':
col.prop_search(view, "lock_bone", view.lock_object.data, "bones", text="")
+ elif not view.lock_object:
+ col.prop(view, "lock_cursor", text="Lock to Cursor")
col = layout.column(align=True)
col.label(text="Clip:")
diff --git a/release/windows/installer/00.sconsblender.nsi b/release/windows/installer/00.sconsblender.nsi
index d16e0f1ae61..7edb0924131 100644
--- a/release/windows/installer/00.sconsblender.nsi
+++ b/release/windows/installer/00.sconsblender.nsi
@@ -11,6 +11,8 @@
!include "FileFunc.nsh"
!include "WordFunc.nsh"
!include "nsDialogs.nsh"
+!include "x64.nsh"
+
SetCompressor /SOLID lzma
@@ -148,6 +150,9 @@ Section "Blender-[VERSION] (required)" SecCopyUI
[DODATAFILES]
SetOutPath $INSTDIR
+ ${If} ${RunningX64}
+ SetRegView 64
+ ${EndIf}
; Write the installation path into the registry
WriteRegStr HKLM "SOFTWARE\BlenderFoundation" "Install_Dir" "$INSTDIR"
WriteRegStr HKLM "SOFTWARE\BlenderFoundation" "ConfigData_Dir" "$BLENDERHOME"
@@ -179,6 +184,9 @@ SectionEnd
Section "Open .blend files with Blender-[VERSION]" Section4
+ ${If} ${RunningX64}
+ SetRegView 64
+ ${EndIf}
WriteRegStr HKCR ".blend" "" "blendfile"
WriteRegStr HKCR "blendfile" "" "Blender .blend File"
WriteRegStr HKCR "blendfile\shell" "" "open"
@@ -188,32 +196,50 @@ Section "Open .blend files with Blender-[VERSION]" Section4
SectionEnd
-UninstallText "This will uninstall Blender [VERSION], and all datafiles from the installation dir. Hit next to continue."
+UninstallText "This will uninstall Blender [VERSION], and all installed files. Before continuing make sure you have created backup of all the files you may want to keep: startup.blend, bookmarks.txt, recent-files.txt. Hit next to continue."
Section "Uninstall"
; remove registry keys
+ ${If} ${RunningX64}
+ SetRegView 64
+ ${EndIf}
ReadRegStr $BLENDERHOME HKLM "SOFTWARE\BlenderFoundation" "ConfigData_Dir"
ReadRegStr $SHORTVERSION HKLM "SOFTWARE\BlenderFoundation" "ShortVersion"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Blender"
DeleteRegKey HKLM "SOFTWARE\BlenderFoundation"
SetShellVarContext all
-
- StrCpy $0 "$SMPROGRAMS\Blender Foundation\"
- MessageBox MB_OK $0
+
; remove files
[DELROOTDIRCONTS]
+ ; remove bundled python
+ RmDir /r $INSTDIR\$SHORTVERSION\python
+
Delete "$INSTDIR\uninstall.exe"
- MessageBox MB_YESNO "Erase $BLENDERHOME? This includes all installed scripts and configuration files and any file you may have created there." IDNO Next
- RMDir /r "$BLENDERHOME"
-Next:
- ; remove shortcuts, if any.
+ MessageBox MB_YESNO "Recursively erase contents of $BLENDERHOME\$SHORTVERSION\scripts? NOTE: This includes all installed scripts and *any* file and directory you have manually created, installed later or copied. This also including .blend files." IDNO NextNoScriptRemove
+ RMDir /r "$BLENDERHOME\$SHORTVERSION\scripts"
+NextNoScriptRemove:
+ MessageBox MB_YESNO "Recursively erase contents from $BLENDERHOME\$SHORTVERSION\config? NOTE: This includes your startup.blend, bookmarks and any other file and directory you may have created in that directory" IDNO NextNoConfigRemove
+ RMDir /r "$BLENDERHOME\$SHORTVERSION\config"
+NextNoConfigRemove:
+ MessageBox MB_YESNO "Recursively erase contents from $BLENDERHOME\$SHORTVERSION\plugins? NOTE: This includes files and subdirectories in this directory" IDNO NextNoPluginRemove
+ RMDir /r "$BLENDERHOME\$SHORTVERSION\plugins"
+NextNoPluginRemove:
+ ; try to remove dirs, but leave them if they contain anything
+ RMDir "$BLENDERHOME\$SHORTVERSION\plugins"
+ RMDir "$BLENDERHOME\$SHORTVERSION\config"
+ RMDir "$BLENDERHOME\$SHORTVERSION\scripts"
+ RMDir "$BLENDERHOME\$SHORTVERSION"
+ RMDir "$BLENDERHOME"
+ ; remove shortcuts
+ Delete "$SMPROGRAMS\Blender Foundation\Blender\*.*"
Delete "$DESKTOP\Blender.lnk"
; remove all link related directories and files
- RMDir /r "$SMPROGRAMS\Blender Foundation\"
- ; remove entire installation directory, including any file created by the user
- RMDir /r "$INSTDIR"
+ RMDir "$SMPROGRAMS\Blender Foundation\Blender"
+ RMDir "$SMPROGRAMS\Blender Foundation"
+ ; Clear out installation dir
+ RMDir "$INSTDIR"
SectionEnd
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 1f1b1d883bc..a043dbad3b8 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -25,9 +25,9 @@
# ***** END GPL LICENSE BLOCK *****
ADD_SUBDIRECTORY(blender)
-ADD_SUBDIRECTORY(kernel)
IF(WITH_GAMEENGINE)
+ ADD_SUBDIRECTORY(kernel)
ADD_SUBDIRECTORY(gameengine)
ENDIF(WITH_GAMEENGINE)
diff --git a/source/SConscript b/source/SConscript
index c452f21b8e2..8d08d9cca08 100644
--- a/source/SConscript
+++ b/source/SConscript
@@ -1,11 +1,10 @@
#!/usr/bin/python
Import ('env')
-SConscript(['blender/SConscript',
- 'kernel/SConscript',
- 'creator/SConscript'])
+SConscript(['blender/SConscript', 'creator/SConscript'])
+
if env['WITH_BF_GAMEENGINE']:
- SConscript (['gameengine/SConscript'])
+ SConscript (['kernel/SConscript', 'gameengine/SConscript'])
if env['WITH_BF_PLAYER']:
SConscript (['blenderplayer/bad_level_call_stubs/SConscript'])
diff --git a/source/blender/blenfont/BLF_api.h b/source/blender/blenfont/BLF_api.h
index 933d287bcff..c01886be65e 100644
--- a/source/blender/blenfont/BLF_api.h
+++ b/source/blender/blenfont/BLF_api.h
@@ -48,10 +48,12 @@ void BLF_position(int fontid, float x, float y, float z);
void BLF_size(int fontid, int size, int dpi);
/* Draw the string using the default font, size and dpi. */
-void BLF_draw_default(float x, float y, float z, char *str);
+void BLF_draw_default(float x, float y, float z, const char *str);
+void BLF_draw_default_ascii(float x, float y, float z, const char *str);
/* Draw the string using the current font. */
-void BLF_draw(int fontid, char *str);
+void BLF_draw(int fontid, const char *str);
+void BLF_draw_ascii(int fontid, const char *str);
/*
* This function return the bounding box of the string
diff --git a/source/blender/blenfont/intern/blf.c b/source/blender/blenfont/intern/blf.c
index f6b7c5f71e6..59189abf1e3 100644
--- a/source/blender/blenfont/intern/blf.c
+++ b/source/blender/blenfont/intern/blf.c
@@ -361,7 +361,7 @@ void BLF_blur(int fontid, int size)
font->blur= size;
}
-void BLF_draw_default(float x, float y, float z, char *str)
+void BLF_draw_default(float x, float y, float z, const char *str)
{
if (!str)
return;
@@ -378,6 +378,24 @@ void BLF_draw_default(float x, float y, float z, char *str)
BLF_position(global_font_default, x, y, z);
BLF_draw(global_font_default, str);
}
+/* same as above but call 'BLF_draw_ascii' */
+void BLF_draw_default_ascii(float x, float y, float z, const char *str)
+{
+ if (!str)
+ return;
+
+ if (global_font_default == -1)
+ global_font_default= blf_search("default");
+
+ if (global_font_default == -1) {
+ printf("Warning: Can't found default font!!\n");
+ return;
+ }
+
+ BLF_size(global_font_default, global_font_points, global_font_dpi);
+ BLF_position(global_font_default, x, y, z);
+ BLF_draw_ascii(global_font_default, str);
+}
void BLF_rotation_default(float angle)
{
@@ -388,32 +406,49 @@ void BLF_rotation_default(float angle)
font->angle= angle;
}
-void BLF_draw(int fontid, char *str)
-{
- FontBLF *font;
+static void blf_draw__start(FontBLF *font)
+{
/*
* The pixmap alignment hack is handle
* in BLF_position (old ui_rasterpos_safe).
*/
- font= BLF_get(fontid);
+
+ glEnable(GL_BLEND);
+ glEnable(GL_TEXTURE_2D);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
+ glPushMatrix();
+ glTranslatef(font->pos[0], font->pos[1], font->pos[2]);
+ glScalef(font->aspect, font->aspect, 1.0);
+
+ if (font->flags & BLF_ROTATION)
+ glRotatef(font->angle, 0.0f, 0.0f, 1.0f);
+}
+static void blf_draw__end(void)
+{
+ glPopMatrix();
+ glDisable(GL_BLEND);
+ glDisable(GL_TEXTURE_2D);
+}
+
+void BLF_draw(int fontid, const char *str)
+{
+ FontBLF *font= BLF_get(fontid);
if (font) {
- glEnable(GL_BLEND);
- glEnable(GL_TEXTURE_2D);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-
- glPushMatrix();
- glTranslatef(font->pos[0], font->pos[1], font->pos[2]);
- glScalef(font->aspect, font->aspect, 1.0);
-
- if (font->flags & BLF_ROTATION)
- glRotatef(font->angle, 0.0f, 0.0f, 1.0f);
-
+ blf_draw__start(font);
blf_font_draw(font, str);
+ blf_draw__end();
+ }
+}
- glPopMatrix();
- glDisable(GL_BLEND);
- glDisable(GL_TEXTURE_2D);
+void BLF_draw_ascii(int fontid, const char *str)
+{
+ FontBLF *font= BLF_get(fontid);
+ if (font) {
+ blf_draw__start(font);
+ blf_font_draw_ascii(font, str);
+ blf_draw__end();
}
}
diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c
index 04f40ac825b..9fb40f0206d 100644
--- a/source/blender/blenfont/intern/blf_font.c
+++ b/source/blender/blenfont/intern/blf_font.c
@@ -92,7 +92,7 @@ void blf_font_size(FontBLF *font, int size, int dpi)
}
}
-void blf_font_draw(FontBLF *font, char *str)
+void blf_font_draw(FontBLF *font, const char *str)
{
unsigned int c;
GlyphBLF *g, *g_prev;
@@ -146,6 +146,65 @@ void blf_font_draw(FontBLF *font, char *str)
}
}
+/* faster version of blf_font_draw, ascii only for view dimensions */
+void blf_font_draw_ascii(FontBLF *font, const char *str)
+{
+ char c;
+ GlyphBLF *g, *g_prev;
+ FT_Vector delta;
+ FT_UInt glyph_index;
+ int pen_x, pen_y;
+ int i, has_kerning, st;
+
+ if (!font->glyph_cache)
+ return;
+
+ i= 0;
+ pen_x= 0;
+ pen_y= 0;
+ has_kerning= FT_HAS_KERNING(font->face);
+ g_prev= NULL;
+
+ /* build ascii on demand */
+ if(font->glyph_ascii_table['0']==NULL) {
+ for(i=0; i<256; i++) {
+ g= blf_glyph_search(font->glyph_cache, i);
+ if (!g) {
+ glyph_index= FT_Get_Char_Index(font->face, i);
+ g= blf_glyph_add(font, glyph_index, i);
+ }
+ font->glyph_ascii_table[i]= g;
+ }
+ }
+
+ while ((c= *(str++))) {
+ g= font->glyph_ascii_table[c];
+
+ /* if we don't found a glyph, skip it. */
+ if (!g)
+ continue;
+
+ if (has_kerning && g_prev) {
+ delta.x= 0;
+ delta.y= 0;
+
+ if (font->flags & BLF_KERNING_DEFAULT)
+ st= FT_Get_Kerning(font->face, g_prev->idx, g->idx, ft_kerning_default, &delta);
+ else
+ st= FT_Get_Kerning(font->face, g_prev->idx, g->idx, FT_KERNING_UNFITTED, &delta);
+
+ if (st == 0)
+ pen_x += delta.x >> 6;
+ }
+
+ /* do not return this loop if clipped, we want every character tested */
+ blf_glyph_render(font, g, (float)pen_x, (float)pen_y);
+
+ pen_x += g->advance;
+ g_prev= g;
+ }
+}
+
void blf_font_buffer(FontBLF *font, char *str)
{
unsigned char *cbuf;
@@ -460,6 +519,8 @@ static void blf_font_fill(FontBLF *font)
font->b_col[1]= 0;
font->b_col[2]= 0;
font->b_col[3]= 0;
+
+ memset(font->glyph_ascii_table, 0, sizeof(font->glyph_ascii_table));
}
FontBLF *blf_font_new(char *name, char *filename)
diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c
index 0d694c28b2b..2c0b833297e 100644
--- a/source/blender/blenfont/intern/blf_glyph.c
+++ b/source/blender/blenfont/intern/blf_glyph.c
@@ -36,6 +36,7 @@
#include FT_FREETYPE_H
#include FT_GLYPH_H
#include FT_OUTLINE_H
+#include FT_BITMAP_H
#include "MEM_guardedalloc.h"
@@ -49,6 +50,7 @@
#include "blf_internal_types.h"
#include "blf_internal.h"
+FT_Library global_ft_lib;
GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi)
{
@@ -190,22 +192,40 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c)
FT_GlyphSlot slot;
GlyphBLF *g;
FT_Error err;
- FT_Bitmap bitmap;
+ FT_Bitmap bitmap, tempbitmap;
+ int sharp;
FT_BBox bbox;
unsigned int key;
+ sharp = 0; /* TODO make the value be configurable somehow */
+
g= blf_glyph_search(font->glyph_cache, c);
if (g)
return(g);
- err= FT_Load_Glyph(font->face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP);
+ if (sharp)
+ err = FT_Load_Glyph(font->face, index, FT_LOAD_TARGET_MONO);
+ else
+ err = FT_Load_Glyph(font->face, index, FT_LOAD_TARGET_NORMAL | FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); /* Sure about NO_* flags? */
if (err)
return(NULL);
/* get the glyph. */
slot= font->face->glyph;
- err= FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL);
+ if (sharp) {
+ err = FT_Render_Glyph(slot, FT_RENDER_MODE_MONO);
+
+ /* Convert result from 1 bit per pixel to 8 bit per pixel */
+ /* Accum errors for later, fine if not interested beyond "ok vs any error" */
+ FT_Bitmap_New(&tempbitmap);
+ err += FT_Bitmap_Convert(global_ft_lib, &slot->bitmap, &tempbitmap, 1); /* Does Blender use Pitch 1 always? It works so far */
+ err += FT_Bitmap_Copy(global_ft_lib, &tempbitmap, &slot->bitmap);
+ err += FT_Bitmap_Done(global_ft_lib, &tempbitmap);
+ } else {
+ err = FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL);
+ }
+
if (err || slot->format != FT_GLYPH_FORMAT_BITMAP)
return(NULL);
@@ -228,6 +248,14 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c)
g->height= bitmap.rows;
if (g->width && g->height) {
+ if (sharp) {
+ /* Font buffer uses only 0 or 1 values, Blender expects full 0..255 range */
+ int i;
+ for (i=0; i < (g->width * g->height); i++) {
+ bitmap.buffer[i] = 255 * bitmap.buffer[i];
+ }
+ }
+
g->bitmap= (unsigned char *)MEM_mallocN(g->width * g->height, "glyph bitmap");
memcpy((void *)g->bitmap, (void *)bitmap.buffer, g->width * g->height);
}
diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h
index 844a7a3c3de..c7a3cd54740 100644
--- a/source/blender/blenfont/intern/blf_internal.h
+++ b/source/blender/blenfont/intern/blf_internal.h
@@ -44,7 +44,8 @@ FontBLF *blf_font_new_from_mem(char *name, unsigned char *mem, int mem_size);
void blf_font_attach_from_mem(FontBLF *font, const unsigned char *mem, int mem_size);
void blf_font_size(FontBLF *font, int size, int dpi);
-void blf_font_draw(FontBLF *font, char *str);
+void blf_font_draw(FontBLF *font, const char *str);
+void blf_font_draw_ascii(FontBLF *font, const char *str);
void blf_font_buffer(FontBLF *font, char *str);
void blf_font_boundbox(FontBLF *font, char *str, rctf *box);
void blf_font_width_and_height(FontBLF *font, char *str, float *width, float *height);
diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h
index 368eb8751de..70318c51823 100644
--- a/source/blender/blenfont/intern/blf_internal_types.h
+++ b/source/blender/blenfont/intern/blf_internal_types.h
@@ -177,6 +177,9 @@ typedef struct FontBLF {
/* current glyph cache, size and dpi. */
GlyphCacheBLF *glyph_cache;
+
+ /* fast ascii lookip */
+ GlyphBLF *glyph_ascii_table[256];
/* freetype2 face. */
FT_Face face;
diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h
index 466b5d9a845..eacb61d122c 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -105,7 +105,8 @@ void armature_mat_pose_to_bone(struct bPoseChannel *pchan, float inmat[][4], flo
void armature_loc_pose_to_bone(struct bPoseChannel *pchan, float *inloc, float *outloc);
void armature_mat_pose_to_delta(float delta_mat[][4], float pose_mat[][4], float arm_mat[][4]);
-void pchan_apply_mat4(struct bPoseChannel *pchan, float mat[][4]);
+void pchan_mat3_to_rot(struct bPoseChannel *pchan, float mat[][3], short use_compat);
+void pchan_apply_mat4(struct bPoseChannel *pchan, float mat[][4], short use_comat);
void pchan_to_mat4(struct bPoseChannel *pchan, float chan_mat[4][4]);
/* Rotation Mode Conversions - Used for PoseChannels + Objects... */
@@ -118,6 +119,10 @@ typedef struct Mat4 {
Mat4 *b_bone_spline_setup(struct bPoseChannel *pchan, int rest);
+/* like EBONE_VISIBLE */
+#define PBONE_VISIBLE(arm, bone) (((bone)->layer & (arm)->layer) && !((bone)->flag & BONE_HIDDEN_P))
+#define _BONE_VISIBLE(arm, bone) (((bone)->layer & (arm)->layer) && !((bone)->flag & BONE_HIDDEN_P))
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index 70badbc96e8..8f6d3451de2 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -44,7 +44,7 @@ struct ReportList;
struct Scene;
struct Main;
-#define BLENDER_VERSION 254
+#define BLENDER_VERSION 255
#define BLENDER_SUBVERSION 0
#define BLENDER_MINVERSION 250
diff --git a/source/blender/blenkernel/BKE_brush.h b/source/blender/blenkernel/BKE_brush.h
index 25d0eb5bc36..5afab9af9b3 100644
--- a/source/blender/blenkernel/BKE_brush.h
+++ b/source/blender/blenkernel/BKE_brush.h
@@ -36,7 +36,7 @@ struct Brush;
struct ImBuf;
struct Scene;
struct wmOperator;
-enum CurveMappingPreset;
+// enum CurveMappingPreset;
/* datablock functions */
struct Brush *add_brush(const char *name);
diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h
index b74de66f7b6..d98fb082aa9 100644
--- a/source/blender/blenkernel/BKE_library.h
+++ b/source/blender/blenkernel/BKE_library.h
@@ -67,7 +67,6 @@ void free_libblock_us(struct ListBase *lb, void *idv);
void free_main(struct Main *mainvar);
void tag_main(struct Main *mainvar, int tag);
-int splitIDname(char *name, char *left, int *nr);
void rename_id(struct ID *id, char *name);
void name_uiprefix_id(char *name, struct ID *id);
void test_idbutton(char *name);
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index fc0ab2eea1e..a05dce81fbc 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -37,6 +37,8 @@ struct Multires;
struct MultiresModifierData;
struct ModifierData;
struct Object;
+struct Scene;
+struct MDisps;
void multires_mark_as_modified(struct Object *ob);
@@ -71,5 +73,13 @@ void multires_free(struct Multires *mr);
void multires_load_old(struct Object *ob, struct Mesh *me);
void multires_load_old_250(struct Mesh *);
+void multiresModifier_scale_disp(struct Scene *scene, struct Object *ob);
+void multiresModifier_prepare_join(struct Scene *scene, struct Object *ob, struct Object *to_ob);
+
+int multires_mdisp_corners(struct MDisps *s);
+
+/* update multires data after topology changing */
+void multires_topology_changed(struct Object *ob);
+
#endif
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 7451d43a578..b64011a7c9a 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -98,10 +98,10 @@ void disable_speed_curve(int val);
float bsystem_time(struct Scene *scene, struct Object *ob, float cfra, float ofs);
void object_scale_to_mat3(struct Object *ob, float mat[][3]);
void object_rot_to_mat3(struct Object *ob, float mat[][3]);
-void object_mat3_to_rot(struct Object *ob, float mat[][3], int use_compat);
+void object_mat3_to_rot(struct Object *ob, float mat[][3], short use_compat);
void object_to_mat3(struct Object *ob, float mat[][3]);
void object_to_mat4(struct Object *ob, float mat[][4]);
-void object_apply_mat4(struct Object *ob, float mat[][4]);
+void object_apply_mat4(struct Object *ob, float mat[][4], short use_compat);
void set_no_parent_ipo(int val);
diff --git a/source/blender/blenkernel/BKE_particle.h b/source/blender/blenkernel/BKE_particle.h
index 1416e1280cf..5bcd69865fc 100644
--- a/source/blender/blenkernel/BKE_particle.h
+++ b/source/blender/blenkernel/BKE_particle.h
@@ -171,7 +171,9 @@ typedef struct ParticleCollision
float co1[3], co2[3]; // ray start and end points
float ve1[3], ve2[3]; // particle velocities
float ray_len; // original length of co2-co1, needed for collision time evaluation
- float t; // time of previous collision, needed for substracting face velocity
+ float f; // time factor of previous collision, needed for substracting face velocity
+ float cfra; // start of the timestep (during frame change, since previous integer frame)
+ float dfra; // duration of timestep in frames
} ParticleCollision;
typedef struct ParticleDrawData {
diff --git a/source/blender/blenkernel/BKE_sequencer.h b/source/blender/blenkernel/BKE_sequencer.h
index 8cf541ae03a..eef56e5503b 100644
--- a/source/blender/blenkernel/BKE_sequencer.h
+++ b/source/blender/blenkernel/BKE_sequencer.h
@@ -46,6 +46,11 @@ struct StripElem;
#define BUILD_SEQAR_COUNT_CURRENT 1
#define BUILD_SEQAR_COUNT_CHILDREN 2
+#define EARLY_NO_INPUT -1
+#define EARLY_DO_EFFECT 0
+#define EARLY_USE_INPUT_1 1
+#define EARLY_USE_INPUT_2 2
+
/* sequence iterator */
typedef struct SeqIterator {
@@ -148,10 +153,10 @@ void seq_free_editing(struct Scene *scene);
void seq_free_clipboard(void);
struct Editing *seq_give_editing(struct Scene *scene, int alloc);
char *give_seqname(struct Sequence *seq);
-struct ImBuf *give_ibuf_seq(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size);
-struct ImBuf *give_ibuf_seq_threaded(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size);
-struct ImBuf *give_ibuf_seq_direct(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int render_size, struct Sequence *seq);
-struct ImBuf *give_ibuf_seqbase(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int render_size, struct ListBase *seqbasep);
+struct ImBuf *give_ibuf_seq(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size);
+struct ImBuf *give_ibuf_seq_threaded(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size);
+struct ImBuf *give_ibuf_seq_direct(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int preview_render_size, struct Sequence *seq);
+struct ImBuf *give_ibuf_seqbase(struct Main *bmain, struct Scene *scene, int rectx, int recty, int cfra, int chan_shown, int preview_render_size, struct ListBase *seqbasep);
void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int render_size);
void calc_sequence(struct Scene *scene, struct Sequence *seq);
void calc_sequence_disp(struct Scene *scene, struct Sequence *seq);
@@ -213,6 +218,7 @@ int seq_tx_test(struct Sequence * seq);
int seq_single_check(struct Sequence *seq);
void seq_single_fix(struct Sequence *seq);
int seq_test_overlap(struct ListBase * seqbasep, struct Sequence *test);
+void seq_translate(struct Scene *scene, struct Sequence *seq, int delta);
struct ListBase *seq_seqbase(struct ListBase *seqbase, struct Sequence *seq);
void seq_offset_animdata(struct Scene *scene, struct Sequence *seq, int ofs);
void seq_dupe_animdata(struct Scene *scene, char *name_from, char *name_to);
diff --git a/source/blender/blenkernel/BKE_utildefines.h b/source/blender/blenkernel/BKE_utildefines.h
index 016aef4d865..a1968459fd6 100644
--- a/source/blender/blenkernel/BKE_utildefines.h
+++ b/source/blender/blenkernel/BKE_utildefines.h
@@ -279,8 +279,11 @@ behaviour, though it may not be the best in practice.
/*little macro so inline keyword works*/
#if defined(_MSC_VER)
#define BM_INLINE static __forceinline
-#else
+#elif defined(__GNUC__)
#define BM_INLINE static inline __attribute((always_inline))
+#else
+/* #warning "MSC/GNUC defines not found, inline non-functional" */
+#define BM_INLINE static
#endif
#define BMEMSET(mem, val, size) {unsigned int _i; char *_c = (char*) mem; for (_i=0; _iname, name, 31);
+ BLI_strncpy(chan->name, name, sizeof(chan->name));
/* init vars to prevent math errors */
chan->quat[0] = chan->rotAxis[1]= 1.0f;
chan->size[0] = chan->size[1] = chan->size[2] = 1.0f;
@@ -774,7 +774,7 @@ void pose_add_group (Object *ob)
return;
grp= MEM_callocN(sizeof(bActionGroup), "PoseGroup");
- strcpy(grp->name, "Group");
+ BLI_strncpy(grp->name, "Group", sizeof(grp->name));
BLI_addtail(&pose->agroups, grp);
BLI_uniquename(&pose->agroups, grp, "Group", '.', offsetof(bActionGroup, name), sizeof(grp->name));
@@ -1119,8 +1119,8 @@ void what_does_obaction (Scene *UNUSED(scene), Object *ob, Object *workob, bPose
workob->pose= pose; /* need to set pose too, since this is used for both types of Action Constraint */
- strcpy(workob->parsubstr, ob->parsubstr);
- strcpy(workob->id.name, "OB"); /* we don't use real object name, otherwise RNA screws with the real thing */
+ BLI_strncpy(workob->parsubstr, ob->parsubstr, sizeof(workob->parsubstr));
+ BLI_strncpy(workob->id.name, "OB", sizeof(workob->id.name)); /* we don't use real object name, otherwise RNA screws with the real thing */
/* if we're given a group to use, it's likely to be more efficient (though a bit more dangerous) */
if (agrp) {
@@ -1134,10 +1134,9 @@ void what_does_obaction (Scene *UNUSED(scene), Object *ob, Object *workob, bPose
animsys_evaluate_action_group(&id_ptr, act, agrp, NULL, cframe);
}
else {
- AnimData adt;
+ AnimData adt= {0};
/* init animdata, and attach to workob */
- memset(&adt, 0, sizeof(AnimData));
workob->adt= &adt;
adt.recalc= ADT_RECALC_ANIM;
diff --git a/source/blender/blenkernel/intern/anim.c b/source/blender/blenkernel/intern/anim.c
index a4e791aa6b3..547d3f7a738 100644
--- a/source/blender/blenkernel/intern/anim.c
+++ b/source/blender/blenkernel/intern/anim.c
@@ -796,6 +796,7 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n
DupliObject *dob;
vertexDupliData *vdd= userData;
float vec[3], q2[4], mat[3][3], tmat[4][4], obmat[4][4];
+ int origlay;
mul_v3_m4v3(vec, vdd->pmat, co);
sub_v3_v3(vec, vdd->pmat[3]);
@@ -818,7 +819,14 @@ static void vertex_dupli__mapFunc(void *userData, int index, float *co, float *n
copy_m4_m4(tmat, obmat);
mul_m4_m4m3(obmat, tmat, mat);
}
+
+ origlay = vdd->ob->lay;
+
dob= new_dupli_object(vdd->lb, vdd->ob, obmat, vdd->par->lay, index, OB_DUPLIVERTS, vdd->animated);
+
+ /* restore the original layer so that each dupli will have proper dob->origlay */
+ vdd->ob->lay = origlay;
+
if(vdd->orco)
VECCOPY(dob->orco, vdd->orco[index]);
@@ -928,6 +936,14 @@ static void vertex_duplilist(ListBase *lb, ID *id, Scene *scene, Object *par, fl
vertex_dupli__mapFunc(&vdd, a, vec, no, NULL);
}
}
+ if(sce) {
+ /* Set proper layer in case of scene looping,
+ * in case of groups the object layer will be
+ * changed when it's duplicated due to the
+ * group duplication.
+ */
+ ob->lay = vdd.par->lay;
+ }
break;
}
@@ -1145,7 +1161,6 @@ static void new_particle_duplilist(ListBase *lb, ID *UNUSED(id), Scene *scene, O
Object *ob=0, **oblist=0, obcopy, *obcopylist=0;
DupliObject *dob;
ParticleDupliWeight *dw;
- ParticleSimulationData sim = {scene, par, psys, psys_get_modifier(par, psys)};
ParticleSettings *part;
ParticleData *pa;
ChildParticle *cpa=0;
@@ -1180,6 +1195,11 @@ static void new_particle_duplilist(ListBase *lb, ID *UNUSED(id), Scene *scene, O
lay= scene->lay;
if((psys->renderdata || part->draw_as==PART_DRAW_REND) && ELEM(part->ren_as, PART_DRAW_OB, PART_DRAW_GR)) {
+ ParticleSimulationData sim= {0};
+ sim.scene= scene;
+ sim.ob= par;
+ sim.psys= psys;
+ sim.psmd= psys_get_modifier(par, psys);
/* first check for loops (particle system object used as dupli object) */
if(part->ren_as == PART_DRAW_OB) {
diff --git a/source/blender/blenkernel/intern/anim_sys.c b/source/blender/blenkernel/intern/anim_sys.c
index 5e97137991e..a4df6aa8ab2 100644
--- a/source/blender/blenkernel/intern/anim_sys.c
+++ b/source/blender/blenkernel/intern/anim_sys.c
@@ -619,12 +619,9 @@ KeyingSet *BKE_keyingset_add (ListBase *list, const char name[], short flag, sho
/* allocate new KeyingSet */
ks= MEM_callocN(sizeof(KeyingSet), "KeyingSet");
-
- if (name)
- strncpy(ks->name, name, sizeof(ks->name));
- else
- strcpy(ks->name, "KeyingSet");
-
+
+ BLI_strncpy(ks->name, name ? name : "KeyingSet", sizeof(ks->name));
+
ks->flag= flag;
ks->keyingflag= keyingflag;
@@ -672,7 +669,7 @@ KS_Path *BKE_keyingset_add_path (KeyingSet *ks, ID *id, const char group_name[],
if (group_name)
BLI_snprintf(ksp->group, 64, group_name);
else
- strcpy(ksp->group, "");
+ ksp->group[0]= '\0';
/* store additional info for relative paths (just in case user makes the set relative) */
if (id)
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 029b3c2e141..ea01421a0ea 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -260,7 +260,7 @@ int bone_autoside_name (char *name, int UNUSED(strip_number), short axis, float
len= strlen(name);
if (len == 0) return 0;
- strcpy(basename, name);
+ BLI_strncpy(basename, name, sizeof(basename));
/* Figure out extension to append:
* - The extension to append is based upon the axis that we are working on.
@@ -577,7 +577,13 @@ Mat4 *b_bone_spline_setup(bPoseChannel *pchan, int rest)
/* ************ Armature Deform ******************* */
-static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion)
+typedef struct bPoseChanDeform {
+ Mat4 *b_bone_mats;
+ DualQuat *dual_quat;
+ DualQuat *b_bone_dual_quats;
+} bPoseChanDeform;
+
+static void pchan_b_bone_defmats(bPoseChannel *pchan, bPoseChanDeform *pdef_info, int use_quaternion)
{
Bone *bone= pchan->bone;
Mat4 *b_bone= b_bone_spline_setup(pchan, 0);
@@ -589,11 +595,11 @@ static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion)
/* allocate b_bone matrices and dual quats */
b_bone_mats= MEM_mallocN((1+bone->segments)*sizeof(Mat4), "BBone defmats");
- pchan->b_bone_mats= b_bone_mats;
+ pdef_info->b_bone_mats= b_bone_mats;
if(use_quaternion) {
b_bone_dual_quats= MEM_mallocN((bone->segments)*sizeof(DualQuat), "BBone dqs");
- pchan->b_bone_dual_quats= b_bone_dual_quats;
+ pdef_info->b_bone_dual_quats= b_bone_dual_quats;
}
/* first matrix is the inverse arm_mat, to bring points in local bone space
@@ -618,9 +624,9 @@ static void pchan_b_bone_defmats(bPoseChannel *pchan, int use_quaternion)
}
}
-static void b_bone_deform(bPoseChannel *pchan, Bone *bone, float *co, DualQuat *dq, float defmat[][3])
+static void b_bone_deform(bPoseChanDeform *pdef_info, Bone *bone, float *co, DualQuat *dq, float defmat[][3])
{
- Mat4 *b_bone= pchan->b_bone_mats;
+ Mat4 *b_bone= pdef_info->b_bone_mats;
float (*mat)[4]= b_bone[0].mat;
float segment, y;
int a;
@@ -637,7 +643,7 @@ static void b_bone_deform(bPoseChannel *pchan, Bone *bone, float *co, DualQuat *
CLAMP(a, 0, bone->segments-1);
if(dq) {
- copy_dq_dq(dq, &((DualQuat*)pchan->b_bone_dual_quats)[a]);
+ copy_dq_dq(dq, &(pdef_info->b_bone_dual_quats)[a]);
}
else {
mul_m4_v3(b_bone[a+1].mat, co);
@@ -711,7 +717,7 @@ static void pchan_deform_mat_add(bPoseChannel *pchan, float weight, float bbonem
add_m3_m3m3(mat, mat, wmat);
}
-static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, float mat[][3], float *co)
+static float dist_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, float *vec, DualQuat *dq, float mat[][3], float *co)
{
Bone *bone= pchan->bone;
float fac, contrib=0.0;
@@ -732,7 +738,7 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo
if(vec) {
if(bone->segments>1)
// applies on cop and bbonemat
- b_bone_deform(pchan, bone, cop, NULL, (mat)?bbonemat:NULL);
+ b_bone_deform(pdef_info, bone, cop, NULL, (mat)?bbonemat:NULL);
else
mul_m4_v3(pchan->chan_mat, cop);
@@ -745,11 +751,11 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo
}
else {
if(bone->segments>1) {
- b_bone_deform(pchan, bone, cop, &bbonedq, NULL);
+ b_bone_deform(pdef_info, bone, cop, &bbonedq, NULL);
add_weighted_dq_dq(dq, &bbonedq, fac);
}
else
- add_weighted_dq_dq(dq, pchan->dual_quat, fac);
+ add_weighted_dq_dq(dq, pdef_info->dual_quat, fac);
}
}
}
@@ -757,7 +763,7 @@ static float dist_bone_deform(bPoseChannel *pchan, float *vec, DualQuat *dq, flo
return contrib;
}
-static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, DualQuat *dq, float mat[][3], float *co, float *contrib)
+static void pchan_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, float weight, float *vec, DualQuat *dq, float mat[][3], float *co, float *contrib)
{
float cop[3], bbonemat[3][3];
DualQuat bbonedq;
@@ -770,7 +776,7 @@ static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, Dua
if(vec) {
if(pchan->bone->segments>1)
// applies on cop and bbonemat
- b_bone_deform(pchan, pchan->bone, cop, NULL, (mat)?bbonemat:NULL);
+ b_bone_deform(pdef_info, pchan->bone, cop, NULL, (mat)?bbonemat:NULL);
else
mul_m4_v3(pchan->chan_mat, cop);
@@ -783,11 +789,11 @@ static void pchan_bone_deform(bPoseChannel *pchan, float weight, float *vec, Dua
}
else {
if(pchan->bone->segments>1) {
- b_bone_deform(pchan, pchan->bone, cop, &bbonedq, NULL);
+ b_bone_deform(pdef_info, pchan->bone, cop, &bbonedq, NULL);
add_weighted_dq_dq(dq, &bbonedq, weight);
}
else
- add_weighted_dq_dq(dq, pchan->dual_quat, weight);
+ add_weighted_dq_dq(dq, pdef_info->dual_quat, weight);
}
(*contrib)+=weight;
@@ -798,8 +804,11 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
int numVerts, int deformflag,
float (*prevCos)[3], const char *defgrp_name)
{
+ bPoseChanDeform *pdef_info_array;
+ bPoseChanDeform *pdef_info= NULL;
bArmature *arm= armOb->data;
bPoseChannel *pchan, **defnrToPC = NULL;
+ int *defnrToPCIndex= NULL;
MDeformVert *dverts = NULL;
bDeformGroup *dg;
DualQuat *dualquats= NULL;
@@ -823,20 +832,24 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
/* bone defmats are already in the channels, chan_mat */
/* initialize B_bone matrices and dual quaternions */
+ totchan= BLI_countlist(&armOb->pose->chanbase);
+
if(use_quaternion) {
- totchan= BLI_countlist(&armOb->pose->chanbase);
dualquats= MEM_callocN(sizeof(DualQuat)*totchan, "dualquats");
}
+
+ pdef_info_array= MEM_callocN(sizeof(bPoseChanDeform)*totchan, "bPoseChanDeform");
totchan= 0;
- for(pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next) {
+ pdef_info= pdef_info_array;
+ for(pchan= armOb->pose->chanbase.first; pchan; pchan= pchan->next, pdef_info++) {
if(!(pchan->bone->flag & BONE_NO_DEFORM)) {
if(pchan->bone->segments > 1)
- pchan_b_bone_defmats(pchan, use_quaternion);
+ pchan_b_bone_defmats(pchan, pdef_info, use_quaternion);
if(use_quaternion) {
- pchan->dual_quat= &dualquats[totchan++];
- mat4_to_dquat( pchan->dual_quat,pchan->bone->arm_mat, pchan->chan_mat);
+ pdef_info->dual_quat= &dualquats[totchan++];
+ mat4_to_dquat( pdef_info->dual_quat,pchan->bone->arm_mat, pchan->chan_mat);
}
}
}
@@ -872,15 +885,19 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
else if(dverts) use_dverts = 1;
if(use_dverts) {
- defnrToPC = MEM_callocN(sizeof(*defnrToPC) * numGroups,
- "defnrToBone");
+ defnrToPC = MEM_callocN(sizeof(*defnrToPC) * numGroups, "defnrToBone");
+ defnrToPCIndex = MEM_callocN(sizeof(*defnrToPCIndex) * numGroups, "defnrToIndex");
for(i = 0, dg = target->defbase.first; dg;
i++, dg = dg->next) {
defnrToPC[i] = get_pose_channel(armOb->pose, dg->name);
/* exclude non-deforming bones */
if(defnrToPC[i]) {
- if(defnrToPC[i]->bone->flag & BONE_NO_DEFORM)
+ if(defnrToPC[i]->bone->flag & BONE_NO_DEFORM) {
defnrToPC[i]= NULL;
+ }
+ else {
+ defnrToPCIndex[i]= BLI_findindex(&armOb->pose->chanbase, defnrToPC[i]);
+ }
}
}
}
@@ -951,10 +968,10 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
for(j = 0; j < dvert->totweight; j++){
int index = dvert->dw[j].def_nr;
- pchan = index < numGroups?defnrToPC[index]:NULL;
- if(pchan) {
+ if(index < numGroups && (pchan= defnrToPC[index])) {
float weight = dvert->dw[j].weight;
- Bone *bone = pchan->bone;
+ Bone *bone= pchan->bone;
+ pdef_info= pdef_info_array + defnrToPCIndex[index];
deformed = 1;
@@ -965,25 +982,27 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
bone->rad_tail,
bone->dist);
}
- pchan_bone_deform(pchan, weight, vec, dq, smat, co, &contrib);
+ pchan_bone_deform(pchan, pdef_info, weight, vec, dq, smat, co, &contrib);
}
}
/* if there are vertexgroups but not groups with bones
* (like for softbody groups)
*/
if(deformed == 0 && use_envelope) {
- for(pchan = armOb->pose->chanbase.first; pchan;
- pchan = pchan->next) {
+ pdef_info= pdef_info_array;
+ for(pchan= armOb->pose->chanbase.first; pchan;
+ pchan= pchan->next, pdef_info++) {
if(!(pchan->bone->flag & BONE_NO_DEFORM))
- contrib += dist_bone_deform(pchan, vec, dq, smat, co);
+ contrib += dist_bone_deform(pchan, pdef_info, vec, dq, smat, co);
}
}
}
else if(use_envelope) {
+ pdef_info= pdef_info_array;
for(pchan = armOb->pose->chanbase.first; pchan;
- pchan = pchan->next) {
+ pchan = pchan->next, pdef_info++) {
if(!(pchan->bone->flag & BONE_NO_DEFORM))
- contrib += dist_bone_deform(pchan, vec, dq, smat, co);
+ contrib += dist_bone_deform(pchan, pdef_info, vec, dq, smat, co);
}
}
@@ -1039,20 +1058,20 @@ void armature_deform_verts(Object *armOb, Object *target, DerivedMesh *dm,
if(dualquats) MEM_freeN(dualquats);
if(defnrToPC) MEM_freeN(defnrToPC);
-
- /* free B_bone matrices */
- for(pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next) {
- if(pchan->b_bone_mats) {
- MEM_freeN(pchan->b_bone_mats);
- pchan->b_bone_mats = NULL;
- }
- if(pchan->b_bone_dual_quats) {
- MEM_freeN(pchan->b_bone_dual_quats);
- pchan->b_bone_dual_quats = NULL;
- }
+ if(defnrToPCIndex) MEM_freeN(defnrToPCIndex);
- pchan->dual_quat = NULL;
+ /* free B_bone matrices */
+ pdef_info= pdef_info_array;
+ for(pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next, pdef_info++) {
+ if(pdef_info->b_bone_mats) {
+ MEM_freeN(pdef_info->b_bone_mats);
+ }
+ if(pdef_info->b_bone_dual_quats) {
+ MEM_freeN(pdef_info->b_bone_dual_quats);
+ }
}
+
+ MEM_freeN(pdef_info_array);
}
/* ************ END Armature Deform ******************* */
@@ -1177,32 +1196,30 @@ void armature_loc_pose_to_bone(bPoseChannel *pchan, float *inloc, float *outloc)
VECCOPY(outloc, nLocMat[3]);
}
+/* same as object_mat3_to_rot() */
+void pchan_mat3_to_rot(bPoseChannel *pchan, float mat[][3], short use_compat)
+{
+ switch(pchan->rotmode) {
+ case ROT_MODE_QUAT:
+ mat3_to_quat(pchan->quat, mat);
+ break;
+ case ROT_MODE_AXISANGLE:
+ mat3_to_axis_angle(pchan->rotAxis, &pchan->rotAngle, mat);
+ break;
+ default: /* euler */
+ if(use_compat) mat3_to_compatible_eulO(pchan->eul, pchan->eul, pchan->rotmode, mat);
+ else mat3_to_eulO(pchan->eul, pchan->rotmode, mat);
+ }
+}
/* Apply a 4x4 matrix to the pose bone,
* similar to object_apply_mat4()
*/
-void pchan_apply_mat4(bPoseChannel *pchan, float mat[][4])
+void pchan_apply_mat4(bPoseChannel *pchan, float mat[][4], short use_compat)
{
- /* location */
- copy_v3_v3(pchan->loc, mat[3]);
-
- /* scale */
- mat4_to_size(pchan->size, mat);
-
- /* rotation */
- if (pchan->rotmode == ROT_MODE_AXISANGLE) {
- float tmp_quat[4];
-
- /* need to convert to quat first (in temp var)... */
- mat4_to_quat(tmp_quat, mat);
- quat_to_axis_angle(pchan->rotAxis, &pchan->rotAngle, tmp_quat);
- }
- else if (pchan->rotmode == ROT_MODE_QUAT) {
- mat4_to_quat(pchan->quat, mat);
- }
- else {
- mat4_to_eulO(pchan->eul, pchan->rotmode, mat);
- }
+ float rot[3][3];
+ mat4_to_loc_rot_size(pchan->loc, rot, pchan->size, mat);
+ pchan_mat3_to_rot(pchan, rot, use_compat);
}
/* Remove rest-position effects from pose-transform for obtaining
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index 72d194e4d79..d2b437d9833 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -32,7 +32,6 @@
#ifndef _WIN32
#include // for read close
- #include // for MAXPATHLEN
#else
#include // for open close read
#define open _open
@@ -460,13 +459,13 @@ static UndoElem *curundo= NULL;
static int read_undosave(bContext *C, UndoElem *uel)
{
- char mainstr[FILE_MAXDIR+FILE_MAXFILE];
+ char mainstr[sizeof(G.main->name)];
int success=0, fileflags;
/* This is needed so undoing/redoing doesnt crash with threaded previews going */
WM_jobs_stop_all(CTX_wm_manager(C));
- strcpy(mainstr, G.main->name); /* temporal store */
+ BLI_strncpy(mainstr, G.main->name, sizeof(mainstr)); /* temporal store */
fileflags= G.fileflags;
G.fileflags |= G_FILE_NO_UI;
diff --git a/source/blender/blenkernel/intern/boids.c b/source/blender/blenkernel/intern/boids.c
index 943cf20720e..1bde0639055 100644
--- a/source/blender/blenkernel/intern/boids.c
+++ b/source/blender/blenkernel/intern/boids.c
@@ -205,7 +205,9 @@ static int rule_avoid_collision(BoidRule *rule, BoidBrainData *bbd, BoidValues *
add_v3_v3v3(col.co2, pa->prev_state.co, pa->prev_state.vel);
sub_v3_v3v3(ray_dir, col.co2, col.co1);
mul_v3_fl(ray_dir, acbr->look_ahead);
- col.t = 0.0f;
+ col.f = 0.0f;
+ col.cfra = fmod(bbd->cfra-bbd->dfra, 1.0f);
+ col.dfra = bbd->dfra;
hit.index = -1;
hit.dist = col.ray_len = len_v3(ray_dir);
@@ -772,7 +774,9 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro
sub_v3_v3v3(col.co2, pa->state.co, zvec);
sub_v3_v3(col.co2, zvec);
sub_v3_v3v3(ray_dir, col.co2, col.co1);
- col.t = 0.0f;
+ col.f = 0.0f;
+ col.cfra = fmod(bbd->cfra-bbd->dfra, 1.0f);
+ col.dfra = bbd->dfra;
hit.index = -1;
hit.dist = col.ray_len = len_v3(ray_dir);
@@ -796,7 +800,9 @@ static Object *boid_find_ground(BoidBrainData *bbd, ParticleData *pa, float *gro
sub_v3_v3v3(col.co2, pa->state.co, zvec);
sub_v3_v3(col.co2, zvec);
sub_v3_v3v3(ray_dir, col.co2, col.co1);
- col.t = 0.0f;
+ col.f = 0.0f;
+ col.cfra = fmod(bbd->cfra-bbd->dfra, 1.0f);
+ col.dfra = bbd->dfra;
hit.index = -1;
hit.dist = col.ray_len = len_v3(ray_dir);
@@ -1257,7 +1263,11 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa)
switch(bpa->data.mode) {
case eBoidMode_InAir:
{
- float grav[3] = {0.0f, 0.0f, bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f};
+ float grav[3];
+
+ grav[0]= 0.0f;
+ grav[1]= 0.0f;
+ grav[2]= bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f;
/* don't take forward acceleration into account (better banking) */
if(dot_v3v3(bpa->data.acc, pa->state.vel) > 0.0f) {
@@ -1296,7 +1306,12 @@ void boid_body(BoidBrainData *bbd, ParticleData *pa)
}
case eBoidMode_Falling:
{
- float grav[3] = {0.0f, 0.0f, bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f};
+ float grav[3];
+
+ grav[0]= 0.0f;
+ grav[1]= 0.0f;
+ grav[2]= bbd->sim->scene->physics_settings.gravity[2] < 0.0f ? -1.0f : 0.0f;
+
/* gather apparent gravity */
VECADDFAC(bpa->gravity, bpa->gravity, grav, dtime);
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index d894aef4ac5..649b3e3ad9b 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -67,7 +67,7 @@ static void brush_set_defaults(Brush *brush)
brush->blend = 0;
brush->flag = 0;
- brush->ob_mode = (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT);
+ brush->ob_mode = OB_MODE_ALL_PAINT;
/* BRUSH SCULPT TOOL SETTINGS */
brush->size= 35; /* radius of the brush in pixels */
@@ -228,10 +228,8 @@ void make_local_brush(Brush *brush)
void brush_debug_print_state(Brush *br)
{
- Brush def;
-
/* create a fake brush and set it to the defaults */
- memset(&def, 0, sizeof(Brush));
+ Brush def= {{0}};
brush_set_defaults(&def);
#define BR_TEST(field, t) \
@@ -1098,11 +1096,9 @@ unsigned int *brush_gen_texture_cache(Brush *br, int half_side)
{
unsigned int *texcache = NULL;
MTex *mtex = &br->mtex;
- TexResult texres;
+ TexResult texres= {0};
int hasrgb, ix, iy;
int side = half_side * 2;
-
- memset(&texres, 0, sizeof(TexResult));
if(mtex->tex) {
float x, y, step = 2.0 / side, co[3];
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index c3f05e497f1..a561df49e94 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -70,7 +70,7 @@
#include "BKE_shrinkwrap.h"
#include "BKE_mesh.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -674,7 +674,7 @@ static void default_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstrain
ct= MEM_callocN(sizeof(bConstraintTarget), "tempConstraintTarget"); \
\
ct->tar= datatar; \
- strcpy(ct->subtarget, datasubtarget); \
+ BLI_strncpy(ct->subtarget, datasubtarget, sizeof(ct->subtarget)); \
ct->space= con->tarspace; \
ct->flag= CONSTRAINT_TAR_TEMP; \
\
@@ -1387,9 +1387,9 @@ static void rotlimit_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *U
copy_v3_v3(loc, cob->matrix[3]);
mat4_to_size(size, cob->matrix);
-
+
mat4_to_eulO(eul, cob->rotOrder, cob->matrix);
-
+
/* constraint data uses radians internally */
/* limiting of euler values... */
@@ -1983,7 +1983,7 @@ static void pycon_id_looper (bConstraint *con, ConstraintIDFunc func, void *user
/* Whether this approach is maintained remains to be seen (aligorith) */
static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintTarget *ct, float UNUSED(ctime))
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
bPythonConstraint *data= con->data;
#endif
@@ -2003,7 +2003,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT
constraint_target_to_mat4(cob->scene, ct->tar, ct->subtarget, ct->matrix, CONSTRAINT_SPACE_WORLD, ct->space, con->headtail);
/* only execute target calculation if allowed */
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if (G.f & G_SCRIPT_AUTOEXEC)
BPY_pyconstraint_target(data, ct);
#endif
@@ -2014,7 +2014,7 @@ static void pycon_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstraintT
static void pycon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targets)
{
-#ifdef DISABLE_PYTHON
+#ifndef WITH_PYTHON
(void)con; (void)cob; (void)targets; /* unused */
return;
#else
@@ -2034,7 +2034,7 @@ static void pycon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *targ
/* Now, run the actual 'constraint' function, which should only access the matrices */
BPY_pyconstraint_eval(data, cob, targets);
-#endif /* DISABLE_PYTHON */
+#endif /* WITH_PYTHON */
}
static bConstraintTypeInfo CTI_PYTHON = {
@@ -3427,8 +3427,7 @@ static void shrinkwrap_get_tarmat (bConstraint *con, bConstraintOb *cob, bConstr
BVHTreeRayHit hit;
BVHTreeNearest nearest;
- BVHTreeFromMesh treeData;
- memset(&treeData, 0, sizeof(treeData));
+ BVHTreeFromMesh treeData= {0};
nearest.index = -1;
nearest.dist = FLT_MAX;
@@ -3810,6 +3809,10 @@ static void pivotcon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t
float pivot[3], vec[3];
float rotMat[3][3];
+
+ /* pivot correction */
+ float axis[3], angle;
+ float dvec[3];
/* firstly, check if pivoting should take place based on the current rotation */
if (data->rotAxis != PIVOTCON_AXIS_NONE) {
@@ -3852,7 +3855,15 @@ static void pivotcon_evaluate (bConstraint *con, bConstraintOb *cob, ListBase *t
// TODO: perhaps we might want to include scaling based on the pivot too?
copy_m3_m4(rotMat, cob->matrix);
normalize_m3(rotMat);
-
+
+
+ /* correct the pivot by the rotation axis otherwise the pivot translates when it shouldnt */
+ mat3_to_axis_angle(axis, &angle, rotMat);
+ sub_v3_v3v3(vec, pivot, cob->matrix[3]);
+ project_v3_v3v3(dvec, vec, axis);
+ sub_v3_v3(pivot, dvec);
+
+
/* perform the pivoting... */
/* 1. take the vector from owner to the pivot */
sub_v3_v3v3(vec, pivot, cob->matrix[3]);
diff --git a/source/blender/blenkernel/intern/context.c b/source/blender/blenkernel/intern/context.c
index a5d96baf049..899ae6031d6 100644
--- a/source/blender/blenkernel/intern/context.c
+++ b/source/blender/blenkernel/intern/context.c
@@ -46,7 +46,7 @@
#include "BKE_main.h"
#include "BKE_screen.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -425,7 +425,7 @@ static int ctx_data_get(bContext *C, const char *member, bContextDataResult *res
int ret= 0;
memset(result, 0, sizeof(bContextDataResult));
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if(CTX_py_dict_get(C)) {
return BPY_context_get(C, member, result);
// if (BPY_context_get(C, member, result))
@@ -554,8 +554,7 @@ ListBase CTX_data_collection_get(const bContext *C, const char *member)
return result.list;
}
else {
- ListBase list;
- memset(&list, 0, sizeof(list));
+ ListBase list= {NULL, NULL};
return list;
}
}
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index a7dd80bff4d..b6b6dde3cdc 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -155,7 +155,7 @@ Curve *add_curve(char *name, int type)
cu->vfont= cu->vfontb= cu->vfonti= cu->vfontbi= get_builtin_font();
cu->vfont->id.us+=4;
cu->str= MEM_mallocN(12, "str");
- strcpy(cu->str, "Text");
+ BLI_strncpy(cu->str, "Text", 12);
cu->len= cu->pos= 4;
cu->strinfo= MEM_callocN(12*sizeof(CharInfo), "strinfo new");
cu->totbox= cu->actbox= 1;
diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c
index 9c4f0d790ca..cd476d8491b 100644
--- a/source/blender/blenkernel/intern/customdata.c
+++ b/source/blender/blenkernel/intern/customdata.c
@@ -50,6 +50,7 @@
#include "BKE_global.h"
#include "BKE_main.h"
#include "BKE_utildefines.h"
+#include "BKE_multires.h"
/* number of layers to add when growing a CustomData object */
#define CUSTOMDATA_GROW 5
@@ -441,19 +442,6 @@ static void mdisps_bilinear(float out[3], float (*disps)[3], int st, float u, fl
}
#endif
-static int mdisp_corners(MDisps *s)
-{
- int lvl= 13;
-
- while(lvl > 0) {
- int side = (1 << (lvl-1)) + 1;
- if ((s->totdisp % (side*side)) == 0) return s->totdisp / (side*side);
- lvl--;
- }
-
- return 0;
-}
-
static void layerSwap_mdisps(void *data, const int *ci)
{
MDisps *s = data;
@@ -462,7 +450,7 @@ static void layerSwap_mdisps(void *data, const int *ci)
if(s->disps) {
int nverts= (ci[1] == 3) ? 4 : 3; /* silly way to know vertex count of face */
- corners= mdisp_corners(s);
+ corners= multires_mdisp_corners(s);
cornersize= s->totdisp/corners;
if(corners!=nverts) {
@@ -470,8 +458,8 @@ static void layerSwap_mdisps(void *data, const int *ci)
if it happened, just forgot displacement */
MEM_freeN(s->disps);
- s->disps= NULL;
- s->totdisp= 0; /* flag to update totdisp */
+ s->totdisp= (s->totdisp/corners)*nverts;
+ s->disps= MEM_callocN(s->totdisp*sizeof(float)*3, "mdisp swap");
return;
}
@@ -2249,69 +2237,56 @@ static int CustomData_is_property_layer(int type)
return 0;
}
+static int cd_layer_find_dupe(CustomData *data, const char *name, int type, int index)
+{
+ int i;
+ /* see if there is a duplicate */
+ for(i=0; itotlayer; i++) {
+ if(i != index) {
+ CustomDataLayer *layer= &data->layers[i];
+
+ if(CustomData_is_property_layer(type)) {
+ if(CustomData_is_property_layer(layer->type) && strcmp(layer->name, name)==0) {
+ return 1;
+ }
+ }
+ else{
+ if(i!=index && layer->type==type && strcmp(layer->name, name)==0) {
+ return 1;
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
void CustomData_set_layer_unique_name(CustomData *data, int index)
{
- char tempname[64];
- int number, i, type;
- char *dot, *name;
- CustomDataLayer *layer, *nlayer= &data->layers[index];
+ CustomDataLayer *nlayer= &data->layers[index];
const LayerTypeInfo *typeInfo= layerType_getInfo(nlayer->type);
if (!typeInfo->defaultname)
return;
- type = nlayer->type;
- name = nlayer->name;
-
- if (name[0] == '\0')
+ if (nlayer->name[0] == '\0')
BLI_strncpy(nlayer->name, typeInfo->defaultname, sizeof(nlayer->name));
-
- /* see if there is a duplicate */
- for(i=0; itotlayer; i++) {
- layer = &data->layers[i];
+
+ if(cd_layer_find_dupe(data, nlayer->name, nlayer->type, index)) {
+ /* note: this block is used in other places, when changing logic apply to all others, search this message */
+ char tempname[sizeof(nlayer->name)];
+ char left[sizeof(nlayer->name)];
+ int number;
+ int len= BLI_split_name_num(left, &number, nlayer->name);
+ do { /* nested while loop looks bad but likely it wont run most times */
+ while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) {
+ if(len > 0) left[--len]= '\0'; /* word too long */
+ else number= 0; /* reset, must be a massive number */
+ }
+ } while(number++, cd_layer_find_dupe(data, tempname, nlayer->type, index));
- if(CustomData_is_property_layer(type)){
- if(i!=index && CustomData_is_property_layer(layer->type) &&
- strcmp(layer->name, name)==0)
- break;
-
- }
- else{
- if(i!=index && layer->type==type && strcmp(layer->name, name)==0)
- break;
- }
+ BLI_strncpy(nlayer->name, tempname, sizeof(nlayer->name));
}
-
- if(i == data->totlayer)
- return;
-
- /* strip off the suffix */
- dot = strchr(nlayer->name, '.');
- if(dot) *dot=0;
-
- for(number=1; number <=999; number++) {
- sprintf(tempname, "%s.%03d", nlayer->name, number);
-
- for(i=0; itotlayer; i++) {
- layer = &data->layers[i];
-
- if(CustomData_is_property_layer(type)){
- if(i!=index && CustomData_is_property_layer(layer->type) &&
- strcmp(layer->name, tempname)==0)
-
- break;
- }
- else{
- if(i!=index && layer->type==type && strcmp(layer->name, tempname)==0)
- break;
- }
- }
-
- if(i == data->totlayer) {
- BLI_strncpy(nlayer->name, tempname, sizeof(nlayer->name));
- return;
- }
- }
}
int CustomData_verify_versions(struct CustomData *data, int index)
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c
index 91584b6236f..10fbd247c84 100644
--- a/source/blender/blenkernel/intern/deform.c
+++ b/source/blender/blenkernel/intern/deform.c
@@ -304,14 +304,23 @@ int defgroup_flip_index(Object *ob, int index, int use_default)
return (flip_index==-1 && use_default) ? index : flip_index;
}
-void defgroup_unique_name (bDeformGroup *dg, Object *ob)
+static int defgroup_find_name_dupe(const char *name, bDeformGroup *dg, Object *ob)
{
bDeformGroup *curdef;
- int number;
- int exists = 0;
- char tempname[64];
- char *dot;
+ for (curdef = ob->defbase.first; curdef; curdef=curdef->next) {
+ if (dg!=curdef) {
+ if (!strcmp(curdef->name, name)) {
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+void defgroup_unique_name (bDeformGroup *dg, Object *ob)
+{
if (!ob)
return;
@@ -320,45 +329,24 @@ void defgroup_unique_name (bDeformGroup *dg, Object *ob)
/* give it default name first */
strcpy (dg->name, "Group");
}
-
- /* See if we even need to do this */
- for (curdef = ob->defbase.first; curdef; curdef=curdef->next) {
- if (dg!=curdef) {
- if (!strcmp(curdef->name, dg->name)) {
- exists = 1;
- break;
+
+ if(defgroup_find_name_dupe(dg->name, dg, ob)) {
+ /* note: this block is used in other places, when changing logic apply to all others, search this message */
+ char tempname[sizeof(dg->name)];
+ char left[sizeof(dg->name)];
+ int number;
+ int len= BLI_split_name_num(left, &number, dg->name);
+ do { /* nested while loop looks bad but likely it wont run most times */
+ while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) {
+ if(len > 0) left[--len]= '\0'; /* word too long */
+ else number= 0; /* reset, must be a massive number */
}
- }
+ } while(number++, defgroup_find_name_dupe(tempname, dg, ob));
+
+ BLI_strncpy(dg->name, tempname, sizeof(dg->name));
}
-
- if (!exists)
- return;
-
- /* Strip off the suffix */
- dot=strchr(dg->name, '.');
- if (dot)
- *dot=0;
-
- for (number = 1; number <=999; number++) {
- sprintf (tempname, "%s.%03d", dg->name, number);
-
- exists = 0;
- for (curdef=ob->defbase.first; curdef; curdef=curdef->next) {
- if (dg!=curdef) {
- if (!strcmp (curdef->name, tempname)) {
- exists = 1;
- break;
- }
- }
- }
- if (!exists) {
- BLI_strncpy (dg->name, tempname, 32);
- return;
- }
- }
}
-
/* finds the best possible flipped name. For renaming; check for unique names afterwards */
/* if strip_number: removes number extensions */
void flip_side_name (char *name, const char *from_name, int strip_number)
diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c
index d95b7010993..21ef1c03e3a 100644
--- a/source/blender/blenkernel/intern/depsgraph.c
+++ b/source/blender/blenkernel/intern/depsgraph.c
@@ -2350,8 +2350,10 @@ void DAG_id_flush_update(ID *id, short flag)
/* set flags based on textures - can influence depgraph via modifiers */
if(idtype == ID_TE) {
for(obt=bmain->object.first; obt; obt= obt->id.next) {
- struct { ID *id; int is_dependent; } data = {id, 0};
-
+ struct { ID *id; int is_dependent; } data;
+ data.id= id;
+ data.is_dependent= 0;
+
modifiers_foreachIDLink(obt, dag_id_flush_update__isDependentTexture, &data);
if (data.is_dependent)
obt->recalc |= OB_RECALC_DATA;
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c
index d1830cb8243..a8032f5a40d 100644
--- a/source/blender/blenkernel/intern/displist.c
+++ b/source/blender/blenkernel/intern/displist.c
@@ -45,6 +45,7 @@
#include "BLI_blenlib.h"
#include "BLI_math.h"
#include "BLI_editVert.h"
+#include "BLI_scanfill.h"
#include "BKE_global.h"
#include "BKE_displist.h"
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index 70e814ef956..24a95c58e36 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -628,7 +628,6 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin
}
}
else if(eff->psys) {
- ParticleSimulationData sim = {eff->scene, eff->ob, eff->psys, NULL, NULL};
ParticleData *pa = eff->psys->particles + *efd->index;
ParticleKey state;
@@ -636,6 +635,11 @@ int get_effector_data(EffectorCache *eff, EffectorData *efd, EffectedPoint *poin
if(eff->psys == point->psys && *efd->index == point->index)
;
else {
+ ParticleSimulationData sim= {0};
+ sim.scene= eff->scene;
+ sim.ob= eff->ob;
+ sim.psys= eff->psys;
+
/* TODO: time from actual previous calculated frame (step might not be 1) */
state.time = cfra - 1.0;
ret = psys_get_particle_state(&sim, *efd->index, &state, 0);
diff --git a/source/blender/blenkernel/intern/exotic.c b/source/blender/blenkernel/intern/exotic.c
index 5e2ca921ef2..a1af728c562 100644
--- a/source/blender/blenkernel/intern/exotic.c
+++ b/source/blender/blenkernel/intern/exotic.c
@@ -79,7 +79,7 @@
#include "BKE_DerivedMesh.h"
#include "BKE_curve.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -489,7 +489,7 @@ int BKE_read_exotic(Scene *scene, char *name)
read_stl_mesh_binary(scene, name);
retval = 1;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// TODO: this should not be in the kernel...
else { // unknown format, call Python importloader
if (BPY_call_importloader(name)) {
@@ -499,7 +499,7 @@ int BKE_read_exotic(Scene *scene, char *name)
}
}
-#endif /* DISABLE_PYTHON */
+#endif /* WITH_PYTHON */
//XXX waitcursor(0);
}
}
diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c
index 1575f69209f..75029af4b10 100644
--- a/source/blender/blenkernel/intern/fcurve.c
+++ b/source/blender/blenkernel/intern/fcurve.c
@@ -53,7 +53,7 @@
#include "RNA_access.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -1174,7 +1174,7 @@ void driver_free_variable (ChannelDriver *driver, DriverVar *dvar)
else
MEM_freeN(dvar);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* since driver variables are cached, the expression needs re-compiling too */
if(driver->type==DRIVER_TYPE_PYTHON)
driver->flag |= DRIVER_FLAG_RENAMEVAR;
@@ -1231,7 +1231,7 @@ DriverVar *driver_add_new_variable (ChannelDriver *driver)
/* set the default type to 'single prop' */
driver_change_variable_type(dvar, DVAR_TYPE_SINGLE_PROP);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* since driver variables are cached, the expression needs re-compiling too */
if(driver->type==DRIVER_TYPE_PYTHON)
driver->flag |= DRIVER_FLAG_RENAMEVAR;
@@ -1258,7 +1258,7 @@ void fcurve_free_driver(FCurve *fcu)
driver_free_variable(driver, dvar);
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* free compiled driver expression */
if (driver->expr_comp)
BPY_DECREF(driver->expr_comp);
@@ -1406,7 +1406,7 @@ static float evaluate_driver (ChannelDriver *driver, float UNUSED(evaltime))
case DRIVER_TYPE_PYTHON: /* expression */
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* check for empty or invalid expression */
if ( (driver->expression[0] == '\0') ||
(driver->flag & DRIVER_FLAG_INVALID) )
@@ -1420,7 +1420,7 @@ static float evaluate_driver (ChannelDriver *driver, float UNUSED(evaltime))
*/
driver->curval= BPY_eval_driver(driver);
}
-#endif /* DISABLE_PYTHON*/
+#endif /* WITH_PYTHON*/
}
break;
diff --git a/source/blender/blenkernel/intern/fmodifier.c b/source/blender/blenkernel/intern/fmodifier.c
index c900f178ca7..5ef41d17d63 100644
--- a/source/blender/blenkernel/intern/fmodifier.c
+++ b/source/blender/blenkernel/intern/fmodifier.c
@@ -802,13 +802,13 @@ static void fcm_python_copy (FModifier *fcm, FModifier *src)
static void fcm_python_evaluate (FCurve *UNUSED(fcu), FModifier *UNUSED(fcm), float *UNUSED(cvalue), float UNUSED(evaltime))
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
//FMod_Python *data= (FMod_Python *)fcm->data;
/* FIXME... need to implement this modifier...
* It will need it execute a script using the custom properties
*/
-#endif /* DISABLE_PYTHON */
+#endif /* WITH_PYTHON */
}
static FModifierTypeInfo FMI_PYTHON = {
diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c
index 58917e75a43..5fdb9549179 100644
--- a/source/blender/blenkernel/intern/font.c
+++ b/source/blender/blenkernel/intern/font.c
@@ -394,7 +394,7 @@ VFont *load_vfont(char *name)
/* if there's a font name, use it for the ID name */
if (strcmp(vfd->name, "")!=0) {
- BLI_strncpy(vfont->id.name+2, vfd->name, 21);
+ BLI_strncpy(vfont->id.name+2, vfd->name, sizeof(vfont->id.name)-2);
}
BLI_strncpy(vfont->name, name, sizeof(vfont->name));
@@ -1193,8 +1193,12 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode)
ascii = mem[i];
info = &(custrinfo[i]);
if (cu->sepchar == (i+1)) {
- float vecyo[3]= {ct->xof, ct->yof, 0.0f};
-
+ float vecyo[3];
+
+ vecyo[0]= ct->xof;
+ vecyo[1]= ct->yof;
+ vecyo[2]= 0.0f;
+
mem[0] = ascii;
mem[1] = 0;
custrinfo[0]= *info;
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 09622b2acfe..2719563f829 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -832,7 +832,10 @@ int BKE_add_image_extension(char *string, int imtype)
}
if(extension) {
- return BLI_replace_extension(string, FILE_MAX, extension);
+ /* prefer this in many cases to avoid .png.tga, but in certain cases it breaks */
+ /* return BLI_replace_extension(string, FILE_MAX, extension); */
+ strcat(string, extension);
+ return TRUE;
}
else {
return FALSE;
@@ -1568,15 +1571,10 @@ static void image_create_multilayer(Image *ima, ImBuf *ibuf, int framenr)
/* common stuff to do with images after loading */
static void image_initialize_after_load(Image *ima, ImBuf *ibuf)
{
-
-
/* preview is NULL when it has never been used as an icon before */
if(G.background==0 && ima->preview==NULL)
BKE_icon_changed(BKE_icon_getid(&ima->id));
-
- /* stringcodes also in ibuf, ibuf->name is used to retrieve original (buttons) */
- BLI_strncpy(ibuf->name, ima->name, FILE_MAX);
-
+
/* fields */
if (ima->flag & IMA_FIELDS) {
if(ima->flag & IMA_STD_FIELD) de_interlace_st(ibuf);
@@ -1601,11 +1599,10 @@ static ImBuf *image_load_sequence_file(Image *ima, ImageUser *iuser, int frame)
ima->tpageflag |= IMA_TPAGE_REFRESH;
ima->lastframe= frame;
-
- BLI_stringdec(ima->name, head, tail, &numlen);
- BLI_stringenc(ima->name, head, tail, numlen, frame);
BLI_strncpy(name, ima->name, sizeof(name));
-
+ BLI_stringdec(name, head, tail, &numlen);
+ BLI_stringenc(name, head, tail, numlen, frame);
+
if(ima->id.lib)
BLI_path_abs(name, ima->id.lib->filepath);
else
@@ -1750,8 +1747,7 @@ static ImBuf *image_load_movie_file(Image *ima, ImageUser *iuser, int frame)
return ibuf;
}
-/* cfra used for # code, Image can only have this # for all its users
- * warning, 'iuser' can be NULL */
+/* warning, 'iuser' can be NULL */
static ImBuf *image_load_image_file(Image *ima, ImageUser *iuser, int cfra)
{
struct ImBuf *ibuf;
@@ -1999,11 +1995,6 @@ static ImBuf *image_get_ibuf_threadsafe(Image *ima, ImageUser *iuser, int *frame
/* XXX temp stuff? */
if(ima->lastframe != frame) {
ima->tpageflag |= IMA_TPAGE_REFRESH;
- if(ibuf) {
- /* without this the image name only updates
- * on first load which is quite confusing */
- BLI_strncpy(ima->name, ibuf->name, sizeof(ima->name));
- }
}
ima->lastframe = frame;
}
@@ -2106,9 +2097,6 @@ ImBuf *BKE_image_acquire_ibuf(Image *ima, ImageUser *iuser, void **lock_r)
/* only 1 layer/pass stored in imbufs, no exrhandle anim storage, no saving */
ibuf= image_load_sequence_multilayer(ima, iuser, frame);
}
-
- if(ibuf)
- BLI_strncpy(ima->name, ibuf->name, sizeof(ima->name));
}
else if(ima->source==IMA_SRC_FILE) {
diff --git a/source/blender/blenkernel/intern/implicit.c b/source/blender/blenkernel/intern/implicit.c
index 6ca95752887..bdf71a8c6f0 100644
--- a/source/blender/blenkernel/intern/implicit.c
+++ b/source/blender/blenkernel/intern/implicit.c
@@ -1562,13 +1562,15 @@ static void cloth_calc_force(ClothModifierData *clmd, float UNUSED(frame), lfVec
unsigned int i = 0;
float spring_air = clmd->sim_parms->Cvi * 0.01f; /* viscosity of air scaled in percent */
float gravity[3] = {0.0f, 0.0f, 0.0f};
- float tm2[3][3] = {{-spring_air,0,0}, {0,-spring_air,0},{0,0,-spring_air}};
+ float tm2[3][3] = {{0}};
MFace *mfaces = cloth->mfaces;
unsigned int numverts = cloth->numverts;
LinkNode *search = cloth->springs;
lfVector *winvec;
EffectedPoint epoint;
+ tm2[0][0]= tm2[1][1]= tm2[2][2]= -spring_air;
+
/* global acceleration (gravitation) */
if(clmd->scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) {
VECCOPY(gravity, clmd->scene->physics_settings.gravity);
diff --git a/source/blender/blenkernel/intern/ipo.c b/source/blender/blenkernel/intern/ipo.c
index 5ed6beaf376..7914bc2b640 100644
--- a/source/blender/blenkernel/intern/ipo.c
+++ b/source/blender/blenkernel/intern/ipo.c
@@ -1017,13 +1017,13 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver)
dtar= &dvar->targets[0];
dtar->id= (ID *)idriver->ob;
if (idriver->name[0])
- BLI_strncpy(dtar->pchan_name, idriver->name, 32);
+ BLI_strncpy(dtar->pchan_name, idriver->name, sizeof(dtar->pchan_name));
/* second bone target (name was stored in same var as the first one) */
dtar= &dvar->targets[1];
dtar->id= (ID *)idriver->ob;
if (idriver->name[0]) // xxx... for safety
- BLI_strncpy(dtar->pchan_name, idriver->name+DRIVER_NAME_OFFS, 32);
+ BLI_strncpy(dtar->pchan_name, idriver->name+DRIVER_NAME_OFFS, sizeof(dtar->pchan_name));
}
else {
/* only a single variable, of type 'transform channel' */
@@ -1034,7 +1034,7 @@ static ChannelDriver *idriver_to_cdriver (IpoDriver *idriver)
dtar= &dvar->targets[0];
dtar->id= (ID *)idriver->ob;
if (idriver->name[0])
- BLI_strncpy(dtar->pchan_name, idriver->name, 32);
+ BLI_strncpy(dtar->pchan_name, idriver->name, sizeof(dtar->pchan_name));
dtar->transChan= adrcode_to_dtar_transchan(idriver->adrcode);
dtar->flag |= DTAR_FLAG_LOCALSPACE; /* old drivers took local space */
}
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index b18c2da8437..1c75c34e913 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -459,11 +459,13 @@ int set_listbasepointers(Main *main, ListBase **lb)
{
int a = 0;
- /* BACKWARDS! also watch order of free-ing! (mesh<->mat) */
-
+ /* BACKWARDS! also watch order of free-ing! (mesh<->mat), first items freed last.
+ * This is important because freeing data decreases usercounts of other datablocks,
+ * if this data is its self freed it can crash. */
lb[a++]= &(main->ipo);
lb[a++]= &(main->action); // xxx moved here to avoid problems when freeing with animato (aligorith)
lb[a++]= &(main->key);
+ lb[a++]= &(main->gpencil); /* referenced by nodes, objects, view, scene etc, before to free after. */
lb[a++]= &(main->nodetree);
lb[a++]= &(main->image);
lb[a++]= &(main->tex);
@@ -490,14 +492,13 @@ int set_listbasepointers(Main *main, ListBase **lb)
lb[a++]= &(main->brush);
lb[a++]= &(main->script);
lb[a++]= &(main->particle);
-
+
lb[a++]= &(main->world);
lb[a++]= &(main->screen);
lb[a++]= &(main->object);
lb[a++]= &(main->scene);
lb[a++]= &(main->library);
lb[a++]= &(main->wm);
- lb[a++]= &(main->gpencil);
lb[a++]= &(main->linestyle);
lb[a]= NULL;
@@ -997,35 +998,6 @@ void IMAnames_to_pupstring(char **str, char *title, char *extraops, ListBase *lb
BLI_dynstr_free(pupds);
}
-
-/* used by buttons.c library.c mball.c */
-int splitIDname(char *name, char *left, int *nr)
-{
- int a;
-
- *nr= 0;
- strncpy(left, name, 21);
-
- a= strlen(name);
- if(a>1 && name[a-1]=='.') return a;
-
- while(a--) {
- if( name[a]=='.' ) {
- left[a]= 0;
- *nr= atol(name+a+1);
- return a;
- }
- if( isdigit(name[a])==0 ) break;
-
- left[a]= 0;
- }
-
- for(a= 0; name[a]; a++)
- left[a]= name[a];
-
- return a;
-}
-
static void sort_alpha_id(ListBase *lb, ID *id)
{
ID *idtest;
@@ -1105,7 +1077,7 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name)
memset(in_use, 0, sizeof(in_use));
/* get name portion, number portion ("name.number") */
- left_len= splitIDname(name, left, &nr);
+ left_len= BLI_split_name_num(left, &nr, name);
/* if new name will be too long, truncate it */
if(nr > 999 && left_len > 16) {
@@ -1122,7 +1094,7 @@ static int check_for_dupid(ListBase *lb, ID *id, char *name)
(idtest->lib == NULL) &&
(*name == *(idtest->name+2)) &&
(strncmp(name, idtest->name+2, left_len)==0) &&
- (splitIDname(idtest->name+2, leftest, &nrtest) == left_len)
+ (BLI_split_name_num(leftest, &nrtest, idtest->name+2) == left_len)
) {
if(nrtest < sizeof(in_use))
in_use[nrtest]= 1; /* mark as used */
@@ -1407,7 +1379,7 @@ void rename_id(ID *id, char *name)
{
ListBase *lb;
- strncpy(id->name+2, name, 21);
+ BLI_strncpy(id->name+2, name, sizeof(id->name)-2);
lb= which_libbase(G.main, GS(id->name) );
new_id(lb, id, name);
diff --git a/source/blender/blenkernel/intern/mball.c b/source/blender/blenkernel/intern/mball.c
index e6f38e04d76..fd3bc47da9e 100644
--- a/source/blender/blenkernel/intern/mball.c
+++ b/source/blender/blenkernel/intern/mball.c
@@ -330,8 +330,8 @@ int is_mball_basis_for(Object *ob1, Object *ob2)
int basis1nr, basis2nr;
char basis1name[32], basis2name[32];
- splitIDname(ob1->id.name+2, basis1name, &basis1nr);
- splitIDname(ob2->id.name+2, basis2name, &basis2nr);
+ BLI_split_name_num(basis1name, &basis1nr, ob1->id.name+2);
+ BLI_split_name_num(basis2name, &basis2nr, ob2->id.name+2);
if(!strcmp(basis1name, basis2name)) return is_basis_mball(ob1);
else return 0;
@@ -352,7 +352,7 @@ void copy_mball_properties(Scene *scene, Object *active_object)
int basisnr, obnr;
char basisname[32], obname[32];
- splitIDname(active_object->id.name+2, basisname, &basisnr);
+ BLI_split_name_num(basisname, &basisnr, active_object->id.name+2);
/* XXX recursion check, see scene.c, just too simple code this next_object() */
if(F_ERROR==next_object(&sce_iter, 0, 0, 0))
@@ -361,7 +361,7 @@ void copy_mball_properties(Scene *scene, Object *active_object)
while(next_object(&sce_iter, 1, &base, &ob)) {
if (ob->type==OB_MBALL) {
if(ob!=active_object){
- splitIDname(ob->id.name+2, obname, &obnr);
+ BLI_split_name_num(obname, &obnr, ob->id.name+2);
/* Object ob has to be in same "group" ... it means, that it has to have
* same base of its name */
@@ -394,8 +394,8 @@ Object *find_basis_mball(Scene *scene, Object *basis)
MetaElem *ml=NULL;
int basisnr, obnr;
char basisname[32], obname[32];
-
- splitIDname(basis->id.name+2, basisname, &basisnr);
+
+ BLI_split_name_num(basisname, &basisnr, basis->id.name+2);
totelem= 0;
/* XXX recursion check, see scene.c, just too simple code this next_object() */
@@ -415,7 +415,7 @@ Object *find_basis_mball(Scene *scene, Object *basis)
else ml= mb->elems.first;
}
else{
- splitIDname(ob->id.name+2, obname, &obnr);
+ BLI_split_name_num(obname, &obnr, ob->id.name+2);
/* object ob has to be in same "group" ... it means, that it has to have
* same base of its name */
@@ -1572,7 +1572,7 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */
invert_m4_m4(obinv, ob->obmat);
a= 0;
- splitIDname(ob->id.name+2, obname, &obnr);
+ BLI_split_name_num(obname, &obnr, ob->id.name+2);
/* make main array */
next_object(&sce_iter, 0, 0, 0);
@@ -1593,7 +1593,7 @@ float init_meta(Scene *scene, Object *ob) /* return totsize */
char name[32];
int nr;
- splitIDname(bob->id.name+2, name, &nr);
+ BLI_split_name_num(name, &nr, bob->id.name+2);
if( strcmp(obname, name)==0 ) {
mb= bob->data;
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 91f15d1ee6c..f4e9dcf742b 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -46,6 +46,7 @@
#include "BKE_scene.h"
#include "BKE_subsurf.h"
#include "BKE_utildefines.h"
+#include "BKE_object.h"
#include "CCGSubSurf.h"
@@ -89,6 +90,34 @@ MultiresModifierData *find_multires_modifier_before(Scene *scene, ModifierData *
return NULL;
}
+/* used for applying scale on mdisps layer and syncing subdivide levels when joining objects */
+static MultiresModifierData *get_multires_modifier(Scene *scene, Object *ob)
+{
+ ModifierData *md;
+ MultiresModifierData *mmd= NULL, *firstmmd= NULL;
+
+ /* find first active multires modifier */
+ for(md = ob->modifiers.first; md; md = md->next) {
+ if(md->type == eModifierType_Multires) {
+ if(!firstmmd)
+ firstmmd= (MultiresModifierData*)md;
+
+ if (modifier_isEnabled(scene, md, eModifierMode_Realtime)) {
+ mmd= (MultiresModifierData*)md;
+ break;
+ }
+ }
+ }
+
+ if(!mmd) {
+ /* active multires have not been found
+ try to use first one */
+ return firstmmd;
+ }
+
+ return mmd;
+}
+
static int multires_get_level(Object *ob, MultiresModifierData *mmd, int render)
{
if(render)
@@ -275,34 +304,46 @@ int multiresModifier_reshapeFromDeformMod(Scene *scene, MultiresModifierData *mm
return result;
}
+/* reset the multires levels to match the number of mdisps */
+static int get_levels_from_disps(Object *ob)
+{
+ Mesh *me = ob->data;
+ MDisps *mdisp;
+ int i, totlvl= 0;
+
+ mdisp = CustomData_get_layer(&me->fdata, CD_MDISPS);
+
+ for(i = 0; i < me->totface; ++i, ++mdisp) {
+ int S = me->mface[i].v4 ? 4 : 3;
+
+ if(mdisp->totdisp == 0) continue;
+
+ while(1) {
+ int side = (1 << (totlvl-1)) + 1;
+ int lvl_totdisp = side*side*S;
+ if(mdisp->totdisp == lvl_totdisp)
+ break;
+ else if(mdisp->totdisp < lvl_totdisp)
+ --totlvl;
+ else
+ ++totlvl;
+
+ }
+ }
+
+ return totlvl;
+}
+
/* reset the multires levels to match the number of mdisps */
void multiresModifier_set_levels_from_disps(MultiresModifierData *mmd, Object *ob)
{
Mesh *me = ob->data;
MDisps *mdisp;
- int i;
mdisp = CustomData_get_layer(&me->fdata, CD_MDISPS);
if(mdisp) {
- for(i = 0; i < me->totface; ++i, ++mdisp) {
- int S = me->mface[i].v4 ? 4 : 3;
-
- if(mdisp->totdisp == 0) continue;
-
- while(1) {
- int side = (1 << (mmd->totlvl-1)) + 1;
- int lvl_totdisp = side*side*S;
- if(mdisp->totdisp == lvl_totdisp)
- break;
- else if(mdisp->totdisp < lvl_totdisp)
- --mmd->totlvl;
- else
- ++mmd->totlvl;
-
- }
- }
-
+ mmd->totlvl = get_levels_from_disps(ob);
mmd->lvl = MIN2(mmd->sculptlvl, mmd->totlvl);
mmd->sculptlvl = MIN2(mmd->sculptlvl, mmd->totlvl);
mmd->renderlvl = MIN2(mmd->renderlvl, mmd->totlvl);
@@ -389,11 +430,9 @@ static void multires_copy_dm_grid(DMGridData *gridA, DMGridData *gridB, int size
}
}
-/* direction=1 for delete higher, direction=0 for lower (not implemented yet) */
-void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction)
+static void multires_del_higher(MultiresModifierData *mmd, Object *ob, int lvl)
{
- Mesh *me = get_mesh(ob);
- int lvl = multires_get_level(ob, mmd, 0);
+ Mesh *me = (Mesh*)ob->data;
int levels = mmd->totlvl - lvl;
MDisps *mdisps;
@@ -403,7 +442,7 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire
multires_force_update(ob);
- if(mdisps && levels > 0 && direction == 1) {
+ if(mdisps && levels > 0) {
if(lvl > 0) {
int nsize = multires_side_tot[lvl];
int hsize = multires_side_tot[mmd->totlvl];
@@ -442,11 +481,31 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire
multires_set_tot_level(ob, mmd, lvl);
}
+/* direction=1 for delete higher, direction=0 for lower (not implemented yet) */
+void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int direction)
+{
+ Mesh *me = get_mesh(ob);
+ int lvl = multires_get_level(ob, mmd, 0);
+ int levels = mmd->totlvl - lvl;
+ MDisps *mdisps;
+
+ multires_set_tot_mdisps(me, mmd->totlvl);
+ CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
+ mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS);
+
+ multires_force_update(ob);
+
+ if(mdisps && levels > 0 && direction == 1) {
+ multires_del_higher(mmd, ob, lvl);
+ }
+
+ multires_set_tot_level(ob, mmd, lvl);
+}
+
static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lvl, int totlvl, int simple)
{
- MultiresModifierData mmd;
+ MultiresModifierData mmd= {{0}};
- memset(&mmd, 0, sizeof(MultiresModifierData));
mmd.lvl = lvl;
mmd.sculptlvl = lvl;
mmd.renderlvl = lvl;
@@ -458,9 +517,8 @@ static DerivedMesh *multires_dm_create_local(Object *ob, DerivedMesh *dm, int lv
static DerivedMesh *subsurf_dm_create_local(Object *UNUSED(ob), DerivedMesh *dm, int lvl, int simple, int optimal)
{
- SubsurfModifierData smd;
+ SubsurfModifierData smd= {{0}};
- memset(&smd, 0, sizeof(SubsurfModifierData));
smd.levels = smd.renderLevels = lvl;
smd.flags |= eSubsurfModifierFlag_SubsurfUv;
if(simple)
@@ -471,12 +529,11 @@ static DerivedMesh *subsurf_dm_create_local(Object *UNUSED(ob), DerivedMesh *dm,
return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0);
}
-void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple)
+void multires_subdivide(MultiresModifierData *mmd, Object *ob, int totlvl, int updateblock, int simple)
{
Mesh *me = ob->data;
MDisps *mdisps;
int lvl= mmd->totlvl;
- int totlvl= mmd->totlvl+1;
if(totlvl > multires_max_levels)
return;
@@ -549,6 +606,11 @@ void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updat
multires_set_tot_level(ob, mmd, totlvl);
}
+void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple)
+{
+ multires_subdivide(mmd, ob, mmd->totlvl+1, updateblock, simple);
+}
+
static void grid_tangent(int gridSize, int index, int x, int y, int axis, DMGridData **gridData, float t[3])
{
if(axis == 0) {
@@ -1011,7 +1073,12 @@ static void create_old_vert_edge_map(ListBase **map, IndexNode **mem, const Mult
static MultiresFace *find_old_face(ListBase *map, MultiresFace *faces, int v1, int v2, int v3, int v4)
{
IndexNode *n1;
- int v[4] = {v1, v2, v3, v4}, i, j;
+ int v[4], i, j;
+
+ v[0]= v1;
+ v[1]= v2;
+ v[2]= v3;
+ v[3]= v4;
for(n1 = map[v1].first; n1; n1 = n1->next) {
int fnd[4] = {0, 0, 0, 0};
@@ -1386,3 +1453,185 @@ void multires_load_old(Object *ob, Mesh *me)
me->mr= NULL;
}
+static void multires_sync_levels(Scene *scene, Object *ob, Object *to_ob)
+{
+ MultiresModifierData *mmd= get_multires_modifier(scene, ob);
+ MultiresModifierData *to_mmd= get_multires_modifier(scene, to_ob);
+
+ if(!mmd) {
+ /* object could have MDISP even when there is no multires modifier
+ this could lead to troubles due to i've got no idea how mdisp could be
+ upsampled correct without modifier data.
+ just remove mdisps if no multires present (nazgul) */
+
+ Mesh *me= (Mesh*)ob->data;
+
+ CustomData_external_remove(&me->fdata, &me->id, CD_MDISPS, me->totface);
+ CustomData_free_layer_active(&me->fdata, CD_MDISPS, me->totface);
+ }
+
+ if(!mmd || !to_mmd) return;
+
+ if(mmd->totlvl>to_mmd->totlvl) multires_del_higher(mmd, ob, to_mmd->totlvl);
+ else multires_subdivide(mmd, ob, to_mmd->totlvl, 0, mmd->simple);
+}
+
+void multires_apply_smat(Scene *scene, Object *ob, float smat[3][3])
+{
+ DerivedMesh *dm= NULL, *cddm= NULL, *subdm= NULL;
+ DMGridData **gridData, **subGridData;
+ Mesh *me= (Mesh*)ob->data;
+ MFace *mface= me->mface;
+ MVert *mvert= NULL;
+ MDisps *mdisps;
+ int *gridOffset;
+ int i, numGrids, gridSize, dGridSize, dSkip, totvert;
+ float (*vertCos)[3] = NULL;
+ MultiresModifierData *mmd= get_multires_modifier(scene, ob);
+ MultiresModifierData high_mmd;
+
+ CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
+ mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS);
+
+ if(!mdisps || !mmd) return;
+
+ /* we need derived mesh created from highest resolution */
+ high_mmd= *mmd;
+ high_mmd.lvl= high_mmd.totlvl;
+
+ /* unscaled multires with applied displacement */
+ subdm= get_multires_dm(scene, &high_mmd, ob);
+
+ /* prepare scaled CDDM to create ccgDN */
+ cddm= mesh_get_derived_deform(scene, ob, CD_MASK_BAREMESH);
+
+ totvert= cddm->getNumVerts(cddm);
+ vertCos= MEM_mallocN(sizeof(*vertCos) * totvert, "multiresScale vertCos");
+ cddm->getVertCos(cddm, vertCos);
+ for(i=0; igetVertArray(cddm);
+
+ /* scaled ccgDM for tangent space of object with applied scale */
+ dm= subsurf_dm_create_local(ob, cddm, high_mmd.totlvl, high_mmd.simple, 0);
+ cddm->release(cddm);
+
+ numGrids= dm->getNumGrids(dm);
+ gridSize= dm->getGridSize(dm);
+ gridData= dm->getGridData(dm);
+ gridOffset= dm->getGridOffset(dm);
+ subGridData= subdm->getGridData(subdm);
+
+ dGridSize= multires_side_tot[high_mmd.totlvl];
+ dSkip= (dGridSize-1)/(gridSize-1);
+
+ #pragma omp parallel for private(i) if(me->totface*gridSize*gridSize*4 >= CCG_OMP_LIMIT)
+ for(i = 0; i < me->totface; ++i) {
+ const int numVerts= mface[i].v4 ? 4 : 3;
+ MDisps *mdisp= &mdisps[i];
+ int S, x, y, gIndex = gridOffset[i];
+
+ for(S = 0; S < numVerts; ++S, ++gIndex) {
+ DMGridData *grid= gridData[gIndex];
+ DMGridData *subgrid= subGridData[gIndex];
+ float (*dispgrid)[3]= &mdisp->disps[S*dGridSize*dGridSize];
+
+ for(y = 0; y < gridSize; y++) {
+ for(x = 0; x < gridSize; x++) {
+ float *co= grid[x + y*gridSize].co;
+ float *sco= subgrid[x + y*gridSize].co;
+ float *no= grid[x + y*gridSize].no;
+ float *data= dispgrid[dGridSize*y*dSkip + x*dSkip];
+ float mat[3][3], tx[3], ty[3], disp[3];
+
+ /* construct tangent space matrix */
+ grid_tangent(gridSize, gIndex, x, y, 0, gridData, tx);
+ normalize_v3(tx);
+
+ grid_tangent(gridSize, gIndex, x, y, 1, gridData, ty);
+ normalize_v3(ty);
+
+ column_vectors_to_mat3(mat, tx, ty, no);
+
+ /* scale subgrid coord and calculate displacement */
+ mul_m3_v3(smat, sco);
+ sub_v3_v3v3(disp, sco, co);
+
+ /* convert difference to tangent space */
+ invert_m3(mat);
+ mul_v3_m3v3(data, mat, disp);
+ }
+ }
+ }
+ }
+
+ dm->release(dm);
+ subdm->release(subdm);
+}
+
+int multires_mdisp_corners(MDisps *s)
+{
+ int lvl= 13;
+
+ while(lvl > 0) {
+ int side = (1 << (lvl-1)) + 1;
+ if ((s->totdisp % (side*side)) == 0) return s->totdisp / (side*side);
+ lvl--;
+ }
+
+ return 0;
+}
+
+void multiresModifier_scale_disp(Scene *scene, Object *ob)
+{
+ float smat[3][3];
+
+ /* object's scale matrix */
+ object_scale_to_mat3(ob, smat);
+
+ multires_apply_smat(scene, ob, smat);
+}
+
+void multiresModifier_prepare_join(Scene *scene, Object *ob, Object *to_ob)
+{
+ float smat[3][3], tmat[3][3], mat[3][3];
+ multires_sync_levels(scene, ob, to_ob);
+
+ /* construct scale matrix for displacement */
+ object_scale_to_mat3(to_ob, tmat);
+ invert_m3(tmat);
+ object_scale_to_mat3(ob, smat);
+ mul_m3_m3m3(mat, smat, tmat);
+
+ multires_apply_smat(scene, ob, mat);
+}
+
+/* update multires data after topology changing */
+void multires_topology_changed(Object *ob)
+{
+ Mesh *me= (Mesh*)ob->data;
+ MDisps *mdisp= NULL;
+ int i;
+
+ CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
+ mdisp= CustomData_get_layer(&me->fdata, CD_MDISPS);
+
+ if(!mdisp) return;
+
+ for(i = 0; i < me->totface; i++, mdisp++) {
+ int corners= multires_mdisp_corners(mdisp);
+ int nvert= me->mface[i].v4 ? 4 : 3;
+
+ if(corners!=nvert) {
+ mdisp->totdisp= (mdisp->totdisp/corners)*nvert;
+
+ if(mdisp->disps)
+ MEM_freeN(mdisp->disps);
+
+ mdisp->disps= MEM_callocN(mdisp->totdisp*sizeof(float)*3, "mdisp topology");
+ }
+ }
+}
diff --git a/source/blender/blenkernel/intern/nla.c b/source/blender/blenkernel/intern/nla.c
index 67c3e746a63..423ccb00e8e 100644
--- a/source/blender/blenkernel/intern/nla.c
+++ b/source/blender/blenkernel/intern/nla.c
@@ -362,7 +362,7 @@ static float nlastrip_get_frame_actionclip (NlaStrip *strip, float cframe, short
return strip->end - scale*(cframe - strip->actstart);
}
else if (mode == NLATIME_CONVERT_UNMAP) {
- return strip->actend - (strip->end - cframe) / scale;
+ return (strip->end + (strip->actstart * scale - cframe)) / scale;
}
else /* if (mode == NLATIME_CONVERT_EVAL) */{
if (IS_EQ(cframe, strip->end) && IS_EQ(strip->repeat, ((int)strip->repeat))) {
@@ -1260,27 +1260,21 @@ void BKE_nlastrip_validate_name (AnimData *adt, NlaStrip *strip)
* - in an extreme case, it might not be able to find a name, but then everything else in Blender would fail too :)
*/
if (BLI_ghash_haskey(gh, strip->name)) {
- char tempname[128];
- int number = 1;
- char *dot;
-
- /* Strip off the suffix */
- dot = strrchr(strip->name, '.');
- if (dot) *dot=0;
-
- /* Try different possibilities */
- for (number = 1; number <= 999; number++) {
- /* assemble alternative name */
- BLI_snprintf(tempname, 128, "%s.%03d", strip->name, number);
-
- /* if hash doesn't have this, set it */
- if (BLI_ghash_haskey(gh, tempname) == 0) {
- BLI_strncpy(strip->name, tempname, sizeof(strip->name));
- break;
+ /* note: this block is used in other places, when changing logic apply to all others, search this message */
+ char tempname[sizeof(strip->name)];
+ char left[sizeof(strip->name)];
+ int number;
+ int len= BLI_split_name_num(left, &number, strip->name);
+ do { /* nested while loop looks bad but likely it wont run most times */
+ while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) {
+ if(len > 0) left[--len]= '\0'; /* word too long */
+ else number= 0; /* reset, must be a massive number */
}
- }
- }
+ } while(number++, BLI_ghash_haskey(gh, tempname));
+ BLI_strncpy(strip->name, tempname, sizeof(strip->name));
+ }
+
/* free the hash... */
BLI_ghash_free(gh, NULL, NULL);
}
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 6b53e538f8e..6c4c566f5b1 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -27,7 +27,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include
#endif
@@ -2718,7 +2718,7 @@ static void gpu_from_node_stack(ListBase *sockets, bNodeStack **ns, GPUNodeStack
gs[i].name = "";
gs[i].hasinput= ns[i]->hasinput && ns[i]->data;
- gs[i].hasoutput= ns[i]->hasinput && ns[i]->data;
+ gs[i].hasoutput= ns[i]->hasoutput && ns[i]->data;
gs[i].sockettype= ns[i]->sockettype;
}
@@ -2732,8 +2732,6 @@ static void data_from_gpu_stack(ListBase *sockets, bNodeStack **ns, GPUNodeStack
for (sock=sockets->first, i=0; sock; sock=sock->next, i++) {
ns[i]->data= gs[i].link;
- ns[i]->hasinput= gs[i].hasinput && gs[i].link;
- ns[i]->hasoutput= gs[i].hasoutput;
ns[i]->sockettype= gs[i].sockettype;
}
}
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index 142e41918dd..e006c48aca5 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -96,7 +96,7 @@
#include "LBM_fluidsim.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -1550,7 +1550,7 @@ void object_make_proxy(Object *ob, Object *target, Object *gob)
if(gob) {
ob->rotmode= target->rotmode;
mul_m4_m4m4(ob->obmat, target->obmat, gob->obmat);
- object_apply_mat4(ob, ob->obmat);
+ object_apply_mat4(ob, ob->obmat, FALSE);
}
else {
copy_object_transform(ob, target);
@@ -1678,54 +1678,27 @@ void object_rot_to_mat3(Object *ob, float mat[][3])
mul_m3_m3m3(mat, dmat, rmat);
}
-void object_mat3_to_rot(Object *ob, float mat[][3], int use_compat)
+void object_mat3_to_rot(Object *ob, float mat[][3], short use_compat)
{
- if (ob->rotmode == ROT_MODE_QUAT)
+ switch(ob->rotmode) {
+ case ROT_MODE_QUAT:
mat3_to_quat(ob->quat, mat);
- else if (ob->rotmode == ROT_MODE_AXISANGLE)
+ break;
+ case ROT_MODE_AXISANGLE:
mat3_to_axis_angle(ob->rotAxis, &ob->rotAngle, mat);
- else {
- if(use_compat) {
- float eul[3];
- VECCOPY(eul, ob->rot);
- mat3_to_compatible_eulO(ob->rot, eul, ob->rotmode, mat);
- }
- else
- mat3_to_eulO(ob->rot, ob->rotmode, mat);
+ break;
+ default: /* euler */
+ if(use_compat) mat3_to_compatible_eulO(ob->rot, ob->rot, ob->rotmode, mat);
+ else mat3_to_eulO(ob->rot, ob->rotmode, mat);
}
}
/* see pchan_apply_mat4() for the equivalent 'pchan' function */
-void object_apply_mat4(Object *ob, float mat[][4])
+void object_apply_mat4(Object *ob, float mat[][4], short use_compat)
{
- float mat3[3][3]; /* obmat -> 3x3 */
- float mat3_n[3][3]; /* obmat -> normalized, 3x3 */
- float imat3_n[3][3]; /* obmat -> normalized & inverted, 3x3 */
-
- /* location */
- copy_v3_v3(ob->loc, mat[3]);
-
- /* rotation & scale are linked, we need to create the mat's
- * for these together since they are related. */
- copy_m3_m4(mat3, mat);
- /* so scale doesnt interfear with rotation [#24291] */
- normalize_m3_m3(mat3_n, (const float(*)[3])mat3);
- if(mat3_n[0][0] < 0.0f) negate_v3(mat3_n[0]);
- if(mat3_n[1][1] < 0.0f) negate_v3(mat3_n[1]);
- if(mat3_n[2][2] < 0.0f) negate_v3(mat3_n[2]);
-
-
- /* rotation */
- object_mat3_to_rot(ob, mat3_n, 0);
-
- /* scale */
- /* note: mat4_to_size(ob->size, mat) fails for negative scale */
- invert_m3_m3(imat3_n, mat3_n);
- mul_m3_m3m3(mat3, imat3_n, mat3);
-
- ob->size[0]= mat3[0][0];
- ob->size[1]= mat3[1][1];
- ob->size[2]= mat3[2][2];
+ float rot[3][3];
+ mat4_to_loc_rot_size(ob->loc, rot, ob->size, mat);
+ object_mat3_to_rot(ob, rot, use_compat);
}
void object_to_mat3(Object *ob, float mat[][3]) /* no parent */
diff --git a/source/blender/blenkernel/intern/particle.c b/source/blender/blenkernel/intern/particle.c
index 624587338c9..0dc0b67b377 100644
--- a/source/blender/blenkernel/intern/particle.c
+++ b/source/blender/blenkernel/intern/particle.c
@@ -3221,7 +3221,12 @@ void psys_cache_edit_paths(Scene *scene, Object *ob, PTCacheEdit *edit, float cf
edit->totcached = totpart;
if(psys) {
- ParticleSimulationData sim = {scene, ob, psys, psys_get_modifier(ob, psys), NULL};
+ ParticleSimulationData sim= {0};
+ sim.scene= scene;
+ sim.ob= ob;
+ sim.psys= psys;
+ sim.psmd= psys_get_modifier(ob, psys);
+
psys_cache_child_paths(&sim, cfra, 1);
}
@@ -4449,7 +4454,11 @@ void psys_make_billboard(ParticleBillboardData *bb, float xvec[3], float yvec[3]
void psys_apply_hair_lattice(Scene *scene, Object *ob, ParticleSystem *psys) {
- ParticleSimulationData sim = {scene, ob, psys, psys_get_modifier(ob, psys)};
+ ParticleSimulationData sim= {0};
+ sim.scene= scene;
+ sim.ob= ob;
+ sim.psys= psys;
+ sim.psmd= psys_get_modifier(ob, psys);
psys->lattice = psys_get_lattice(&sim);
diff --git a/source/blender/blenkernel/intern/particle_system.c b/source/blender/blenkernel/intern/particle_system.c
index be616d9922c..2b045647661 100644
--- a/source/blender/blenkernel/intern/particle_system.c
+++ b/source/blender/blenkernel/intern/particle_system.c
@@ -1705,9 +1705,10 @@ void reset_particle(ParticleSimulationData *sim, ParticleData *pa, float dtime,
r_phase = PSYS_FRAND(p + 20);
if(part->from==PART_FROM_PARTICLE){
- ParticleSimulationData tsim = {sim->scene, psys->target_ob ? psys->target_ob : ob, NULL, NULL};
float speed;
-
+ ParticleSimulationData tsim= {0};
+ tsim.scene= sim->scene;
+ tsim.ob= psys->target_ob ? psys->target_ob : ob;
tsim.psys = BLI_findlink(&tsim.ob->particlesystem, sim->psys->target_psys-1);
state.time = pa->time;
@@ -2057,12 +2058,14 @@ void psys_count_keyed_targets(ParticleSimulationData *sim)
static void set_keyed_keys(ParticleSimulationData *sim)
{
ParticleSystem *psys = sim->psys;
- ParticleSimulationData ksim = {sim->scene, NULL, NULL, NULL};
+ ParticleSimulationData ksim= {0};
ParticleTarget *pt;
PARTICLE_P;
ParticleKey *key;
int totpart = psys->totpart, k, totkeys = psys->totkeyed;
+ ksim.scene= sim->scene;
+
/* no proper targets so let's clear and bail out */
if(psys->totkeyed==0) {
free_keyed_keys(psys);
@@ -2777,23 +2780,26 @@ void particle_intersect_face(void *userdata, int index, const BVHTreeRay *ray, B
MVert *x = col->md->x;
MVert *v = col->md->current_v;
float vel[3], co1[3], co2[3], uv[2], ipoint[3], temp[3], t;
+ float x0[3], x1[3], x2[3], x3[3];
+ float *t0=x0, *t1=x1, *t2=x2, *t3=(face->v4 ? x3 : NULL);
- float *t0, *t1, *t2, *t3;
- t0 = x[ face->v1 ].co;
- t1 = x[ face->v2 ].co;
- t2 = x[ face->v3 ].co;
- t3 = face->v4 ? x[ face->v4].co : NULL;
+ /* move collision face to start of timestep */
+ madd_v3_v3v3fl(t0, x[face->v1].co, v[face->v1].co, col->cfra);
+ madd_v3_v3v3fl(t1, x[face->v2].co, v[face->v2].co, col->cfra);
+ madd_v3_v3v3fl(t2, x[face->v3].co, v[face->v3].co, col->cfra);
+ if(t3)
+ madd_v3_v3v3fl(t3, x[face->v4].co, v[face->v4].co, col->cfra);
/* calculate average velocity of face */
- VECCOPY(vel, v[ face->v1 ].co);
- VECADD(vel, vel, v[ face->v2 ].co);
- VECADD(vel, vel, v[ face->v3 ].co);
- mul_v3_fl(vel, 0.33334f);
+ copy_v3_v3(vel, v[ face->v1 ].co);
+ add_v3_v3(vel, v[ face->v2 ].co);
+ add_v3_v3(vel, v[ face->v3 ].co);
+ mul_v3_fl(vel, 0.33334f*col->dfra);
/* substract face velocity, in other words convert to
a coordinate system where only the particle moves */
- VECADDFAC(co1, col->co1, vel, -col->t);
- VECSUB(co2, col->co2, vel);
+ madd_v3_v3v3fl(co1, col->co1, vel, -col->f);
+ sub_v3_v3v3(co2, col->co2, vel);
do
{
@@ -2875,7 +2881,7 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo
copy_v3_v3(col.co2, pa->state.co);
copy_v3_v3(col.ve1, pa->prev_state.vel);
copy_v3_v3(col.ve2, pa->state.vel);
- col.t = 0.0f;
+ col.f = 0.0f;
/* override for boids */
if(part->phystype == PART_PHYS_BOIDS) {
@@ -2893,6 +2899,9 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo
hit.index = -1;
hit.dist = col.ray_len = len_v3(ray_dir);
+ col.cfra = fmod(cfra-dfra, 1.0f);
+ col.dfra = dfra;
+
/* even if particle is stationary we want to check for moving colliders */
/* if hit.dist is zero the bvhtree_ray_cast will just ignore everything */
if(hit.dist == 0.0f)
@@ -2917,11 +2926,11 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo
/* 2. */
if(hit.index>=0) {
PartDeflect *pd = col.hit_ob->pd;
- float co[3]; /* point of collision */
- float x = hit.dist/col.ray_len; /* location of collision between this iteration */
- float df = col.t + x * (1.0f - col.t); /* time of collision between frame change*/
- float dt1 = (df - col.t) * timestep; /* iteration time of collision (in seconds) */
- float dt2 = (1.0f - df) * timestep; /* time left after collision (in seconds) */
+ float co[3]; /* point of collision */
+ float x = hit.dist/col.ray_len; /* location factor of collision between this iteration */
+ float f = col.f + x * (1.0f - col.f); /* time factor of collision between timestep */
+ float dt1 = (f - col.f) * timestep; /* time since previous collision (in seconds) */
+ float dt2 = (1.0f - f) * timestep; /* time left after collision (in seconds) */
int through = (BLI_frand() < pd->pdef_perm) ? 1 : 0; /* did particle pass through the collision surface? */
deflections++;
@@ -2935,12 +2944,12 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo
/* particle dies in collision */
if(through == 0 && (part->flag & PART_DIE_ON_COL || pd->flag & PDEFLE_KILL_PART)) {
pa->alive = PARS_DYING;
- pa->dietime = pa->state.time + (cfra - pa->state.time) * df;
+ pa->dietime = pa->state.time + (cfra - pa->state.time) * f;
copy_v3_v3(pa->state.co, co);
- interp_v3_v3v3(pa->state.vel, pa->prev_state.vel, pa->state.vel, df);
- interp_qt_qtqt(pa->state.rot, pa->prev_state.rot, pa->state.rot, df);
- interp_v3_v3v3(pa->state.ave, pa->prev_state.ave, pa->state.ave, df);
+ interp_v3_v3v3(pa->state.vel, pa->prev_state.vel, pa->state.vel, f);
+ interp_qt_qtqt(pa->state.rot, pa->prev_state.rot, pa->state.rot, f);
+ interp_v3_v3v3(pa->state.ave, pa->prev_state.ave, pa->state.ave, f);
/* particle is dead so we don't need to calculate further */
return;
@@ -3073,11 +3082,11 @@ static void deflect_particle(ParticleSimulationData *sim, int p, float dfra, flo
copy_v3_v3(col.ve1, v0);
copy_v3_v3(col.ve2, pa->state.vel);
- col.t = df;
+ col.f = f;
}
else {
- /* final chance to prevent failure, so don't do anything fancy */
- copy_v3_v3(pa->state.co, co);
+ /* final chance to prevent failure, so stick to the surface and hope for the best */
+ madd_v3_v3v3fl(pa->state.co, co, col.vel, dt2);
copy_v3_v3(pa->state.vel, v0);
}
}
@@ -3983,7 +3992,7 @@ static int hair_needs_recalc(ParticleSystem *psys)
* then advances in to actual particle calculations depending on particle type */
void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys)
{
- ParticleSimulationData sim = {scene, ob, psys, NULL, NULL};
+ ParticleSimulationData sim= {0};
ParticleSettings *part = psys->part;
float cfra;
@@ -3994,6 +4003,10 @@ void particle_system_update(Scene *scene, Object *ob, ParticleSystem *psys)
return;
cfra= BKE_curframe(scene);
+
+ sim.scene= scene;
+ sim.ob= ob;
+ sim.psys= psys;
sim.psmd= psys_get_modifier(ob, psys);
/* system was already updated from modifier stack */
diff --git a/source/blender/blenkernel/intern/pointcache.c b/source/blender/blenkernel/intern/pointcache.c
index 37d2b103ef0..35e0441739e 100644
--- a/source/blender/blenkernel/intern/pointcache.c
+++ b/source/blender/blenkernel/intern/pointcache.c
@@ -199,13 +199,17 @@ static int ptcache_write_particle(int index, void *psys_v, void **data, int cfra
ParticleSystem *psys= psys_v;
ParticleData *pa = psys->particles + index;
BoidParticle *boid = (psys->part->phystype == PART_PHYS_BOIDS) ? pa->boid : NULL;
- float times[3] = {pa->time, pa->dietime, pa->lifetime};
+ float times[3];
int step = psys->pointcache->step;
/* No need to store unborn or died particles outside cache step bounds */
if(data[BPHYS_DATA_INDEX] && (cfra < pa->time - step || cfra > pa->dietime + step))
return 0;
-
+
+ times[0]= pa->time;
+ times[1]= pa->dietime;
+ times[2]= pa->lifetime;
+
PTCACHE_DATA_FROM(data, BPHYS_DATA_INDEX, &index);
PTCACHE_DATA_FROM(data, BPHYS_DATA_LOCATION, pa->state.co);
PTCACHE_DATA_FROM(data, BPHYS_DATA_VELOCITY, pa->state.vel);
@@ -2002,7 +2006,7 @@ void BKE_ptcache_id_clear(PTCacheID *pid, int mode, int cfra)
if((mode==PTCACHE_CLEAR_BEFORE && pm->frame < cfra) ||
(mode==PTCACHE_CLEAR_AFTER && pm->frame > cfra) ) {
link = pm;
- if(pm->frame >=sta && pm->frame <= end)
+ if(pid->cache->cached_frames && pm->frame >=sta && pm->frame <= end)
pid->cache->cached_frames[pm->frame-sta] = 0;
ptcache_free_data(pm);
pm = pm->next;
@@ -2603,6 +2607,8 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker)
thread_data.break_operation = FALSE;
thread_data.thread_ended = FALSE;
old_progress = -1;
+
+ WM_cursor_wait(1);
if(G.background) {
ptcache_make_cache_thread((void*)&thread_data);
@@ -2686,6 +2692,8 @@ void BKE_ptcache_make_cache(PTCacheBaker* baker)
else if (baker->progressend)
baker->progressend(baker->progresscontext);
+ WM_cursor_wait(0);
+
/* TODO: call redraw all windows somehow */
}
/* Helpers */
diff --git a/source/blender/blenkernel/intern/script.c b/source/blender/blenkernel/intern/script.c
index c07032f71d7..6ffac09e843 100644
--- a/source/blender/blenkernel/intern/script.c
+++ b/source/blender/blenkernel/intern/script.c
@@ -36,7 +36,7 @@
/*
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h" // Blender Python library
#endif
*/
diff --git a/source/blender/blenkernel/intern/seqeffects.c b/source/blender/blenkernel/intern/seqeffects.c
index 6477c6b4f75..f5dc04ca569 100644
--- a/source/blender/blenkernel/intern/seqeffects.c
+++ b/source/blender/blenkernel/intern/seqeffects.c
@@ -2631,38 +2631,36 @@ static void copy_glow_effect(Sequence *dst, Sequence *src)
}
//void do_glow_effect(Cast *cast, float facf0, float facf1, int xo, int yo, ImBuf *ibuf1, ImBuf *ibuf2, ImBuf *outbuf, ImBuf *use)
-static void do_glow_effect_byte(Sequence *seq, float facf0, float UNUSED(facf1),
+static void do_glow_effect_byte(Sequence *seq, int render_size, float facf0, float UNUSED(facf1),
int x, int y, char *rect1,
char *UNUSED(rect2), char *out)
{
unsigned char *outbuf=(unsigned char *)out;
unsigned char *inbuf=(unsigned char *)rect1;
GlowVars *glow = (GlowVars *)seq->effectdata;
- int size= 100; // renderdata XXX
RVIsolateHighlights_byte(inbuf, outbuf , x, y, glow->fMini*765, glow->fBoost * facf0, glow->fClamp);
- RVBlurBitmap2_byte (outbuf, x, y, glow->dDist * (size / 100.0f),glow->dQuality);
+ RVBlurBitmap2_byte (outbuf, x, y, glow->dDist * (render_size / 100.0f),glow->dQuality);
if (!glow->bNoComp)
RVAddBitmaps_byte (inbuf , outbuf, outbuf, x, y);
}
-static void do_glow_effect_float(Sequence *seq, float facf0, float UNUSED(facf1),
+static void do_glow_effect_float(Sequence *seq, int render_size, float facf0, float UNUSED(facf1),
int x, int y,
float *rect1, float *UNUSED(rect2), float *out)
{
float *outbuf = out;
float *inbuf = rect1;
GlowVars *glow = (GlowVars *)seq->effectdata;
- int size= 100; // renderdata XXX
RVIsolateHighlights_float(inbuf, outbuf , x, y, glow->fMini*3.0f, glow->fBoost * facf0, glow->fClamp);
- RVBlurBitmap2_float (outbuf, x, y, glow->dDist * (size / 100.0f),glow->dQuality);
+ RVBlurBitmap2_float (outbuf, x, y, glow->dDist * (render_size / 100.0f),glow->dQuality);
if (!glow->bNoComp)
RVAddBitmaps_float (inbuf , outbuf, outbuf, x, y);
}
static struct ImBuf * do_glow_effect(
- Main *UNUSED(bmain), Scene *UNUSED(scene), Sequence *seq, float UNUSED(cfra),
+ Main *UNUSED(bmain), Scene * scene, Sequence *seq, float UNUSED(cfra),
float facf0, float facf1, int x, int y,
int UNUSED(preview_render_size),
struct ImBuf *ibuf1, struct ImBuf *ibuf2,
@@ -2670,13 +2668,15 @@ static struct ImBuf * do_glow_effect(
{
struct ImBuf * out = prepare_effect_imbufs(x, y, ibuf1, ibuf2, ibuf3);
+ int render_size = 100*x/scene->r.xsch;
+
if (out->rect_float) {
- do_glow_effect_float(seq,
+ do_glow_effect_float(seq, render_size,
facf0, facf1, x, y,
ibuf1->rect_float, ibuf2->rect_float,
out->rect_float);
} else {
- do_glow_effect_byte(seq,
+ do_glow_effect_byte(seq, render_size,
facf0, facf1, x, y,
(char*) ibuf1->rect, (char*) ibuf2->rect,
(char*) out->rect);
@@ -3262,9 +3262,7 @@ static struct SeqEffectHandle get_sequence_effect_impl(int seq_type)
struct SeqEffectHandle get_sequence_effect(Sequence * seq)
{
- struct SeqEffectHandle rval;
-
- memset(&rval, 0, sizeof(struct SeqEffectHandle));
+ struct SeqEffectHandle rval= {0};
if (seq->type & SEQ_EFFECT) {
rval = get_sequence_effect_impl(seq->type);
@@ -3279,9 +3277,7 @@ struct SeqEffectHandle get_sequence_effect(Sequence * seq)
struct SeqEffectHandle get_sequence_blend(Sequence * seq)
{
- struct SeqEffectHandle rval;
-
- memset(&rval, 0, sizeof(struct SeqEffectHandle));
+ struct SeqEffectHandle rval= {0};
if (seq->blend_mode != 0) {
rval = get_sequence_effect_impl(seq->blend_mode);
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 53930cee68b..4a8c47f1f71 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -372,7 +372,7 @@ void build_seqar(ListBase *seqbase, Sequence ***seqar, int *totseq)
do_seq_count(seqbase, totseq);
if(*totseq==0) {
- *seqar= 0;
+ *seqar= NULL;
return;
}
*seqar= MEM_mallocN(sizeof(void *)* *totseq, "seqar");
@@ -411,8 +411,7 @@ static void do_build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int depth,
seq->depth= depth;
if(seq->seqbase.first && (test & BUILD_SEQAR_COUNT_CHILDREN)) {
- do_build_seqar_cb(&seq->seqbase, seqar, depth+1,
- test_func);
+ do_build_seqar_cb(&seq->seqbase, seqar, depth+1, test_func);
}
if (test & BUILD_SEQAR_COUNT_CURRENT) {
**seqar= seq;
@@ -431,7 +430,7 @@ void build_seqar_cb(ListBase *seqbase, Sequence ***seqar, int *totseq,
do_seq_count_cb(seqbase, totseq, test_func);
if(*totseq==0) {
- *seqar= 0;
+ *seqar= NULL;
return;
}
*seqar= MEM_mallocN(sizeof(void *)* *totseq, "seqar");
@@ -471,7 +470,7 @@ static void seq_update_sound_bounds_recursive(Scene *scene, Sequence *metaseq)
if(seq->type == SEQ_META) {
seq_update_sound_bounds_recursive(scene, seq);
}
- else if((seq->type == SEQ_SOUND) || (seq->type == SEQ_SCENE)) {
+ else if(ELEM(seq->type, SEQ_SOUND, SEQ_SCENE)) {
if(seq->scene_sound) {
int startofs = seq->startofs;
int endofs = seq->endofs;
@@ -502,8 +501,8 @@ void calc_sequence(Scene *scene, Sequence *seq)
if(seq->type & SEQ_EFFECT) {
/* pointers */
- if(seq->seq2==0) seq->seq2= seq->seq1;
- if(seq->seq3==0) seq->seq3= seq->seq1;
+ if(seq->seq2==NULL) seq->seq2= seq->seq1;
+ if(seq->seq3==NULL) seq->seq3= seq->seq1;
/* effecten go from seq1 -> seq2: test */
@@ -558,9 +557,7 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range)
int prev_startdisp, prev_enddisp;
/* note: dont rename the strip, will break animation curves */
- if (!(seq->type == SEQ_MOVIE || seq->type == SEQ_IMAGE ||
- seq->type == SEQ_SOUND ||
- seq->type == SEQ_SCENE || seq->type == SEQ_META)) {
+ if (ELEM5(seq->type, SEQ_MOVIE, SEQ_IMAGE, SEQ_SOUND, SEQ_SCENE, SEQ_META)==0) {
return;
}
@@ -574,13 +571,14 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range)
new_tstripdata(seq);
- if (seq->type != SEQ_SCENE && seq->type != SEQ_META &&
- seq->type != SEQ_IMAGE) {
+ if (ELEM3(seq->type, SEQ_SCENE, SEQ_META, SEQ_IMAGE)==0) {
BLI_join_dirfile(str, seq->strip->dir, seq->strip->stripdata->name);
BLI_path_abs(str, G.main->name);
}
- if (seq->type == SEQ_IMAGE) {
+ switch(seq->type) {
+ case SEQ_IMAGE:
+ {
/* Hack? */
size_t olen = MEM_allocN_len(seq->strip->stripdata)/sizeof(struct StripElem);
@@ -591,7 +589,9 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range)
seq->len = 0;
}
seq->strip->len = seq->len;
- } else if (seq->type == SEQ_MOVIE) {
+ break;
+ }
+ case SEQ_MOVIE:
if(seq->anim) IMB_free_anim(seq->anim);
seq->anim = openanim(str, IB_rect | ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0));
@@ -609,7 +609,7 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range)
seq->len = 0;
}
seq->strip->len = seq->len;
- } else if (seq->type == SEQ_SOUND) {
+ case SEQ_SOUND:
seq->len = ceil(AUD_getInfo(seq->sound->playback_handle).length * FPS);
seq->len -= seq->anim_startofs;
seq->len -= seq->anim_endofs;
@@ -617,7 +617,9 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range)
seq->len = 0;
}
seq->strip->len = seq->len;
- } else if (seq->type == SEQ_SCENE) {
+ break;
+ case SEQ_SCENE:
+ {
/* 'seq->scenenr' should be replaced with something more reliable */
Scene * sce = G.main->scene.first;
int nr = 1;
@@ -643,6 +645,8 @@ void reload_sequence_new_file(Scene *scene, Sequence * seq, int lock_range)
seq->len = 0;
}
seq->strip->len = seq->len;
+ break;
+ }
}
free_proxy_seq(seq);
@@ -804,7 +808,7 @@ static char *give_seqname_by_type(int type)
case SEQ_MULTICAM: return "Multicam";
case SEQ_SPEED: return "Speed";
default:
- return 0;
+ return NULL;
}
}
@@ -896,19 +900,24 @@ static void multibuf(ImBuf *ibuf, float fmul)
static float give_stripelem_index(Sequence *seq, float cfra)
{
float nr;
+ int sta = seq->start;
+ int end = seq->start+seq->len-1;
if(seq->len == 0) return -1;
+
if(seq->flag&SEQ_REVERSE_FRAMES) {
/*reverse frame in this sequence */
- if(cfra <= seq->start) nr= seq->len-1;
- else if(cfra >= seq->start+seq->len-1) nr= 0;
- else nr= (seq->start + seq->len - 1) - cfra;
+ if(cfra <= sta) nr= seq->len-1;
+ else if(cfra >= end) nr= 0;
+ else nr= end - cfra;
} else {
- if(cfra <= seq->start) nr= 0;
- else if(cfra >= seq->start+seq->len-1) nr= seq->len-1;
- else nr= cfra-seq->start;
+ if(cfra <= sta) nr= 0;
+ else if(cfra >= end) nr= seq->len-1;
+ else nr= cfra - sta;
}
+
if (seq->strobe < 1.0) seq->strobe = 1.0;
+
if (seq->strobe > 1.0) {
nr -= fmod((double)nr, (double)seq->strobe);
}
@@ -920,14 +929,10 @@ StripElem *give_stripelem(Sequence *seq, int cfra)
{
StripElem *se= seq->strip->stripdata;
- if(seq->type == SEQ_MOVIE) {
- /* use the first */
- }
- else {
+ if(seq->type != SEQ_MOVIE) { /* movie use the first */
int nr = (int) give_stripelem_index(seq, cfra);
- if (nr == -1) return 0;
- if (se == 0) return 0;
+ if (nr == -1 || se == 0) return 0;
se += nr + seq->anim_startofs;
}
@@ -964,9 +969,7 @@ int evaluate_seq_frame(Scene *scene, int cfra)
static int video_seq_is_rendered(Sequence * seq)
{
- return (seq
- && !(seq->flag & SEQ_MUTE)
- && seq->type != SEQ_SOUND);
+ return (seq && !(seq->flag & SEQ_MUTE) && seq->type != SEQ_SOUND);
}
static int get_shown_sequences( ListBase * seqbasep, int cfra, int chanshown, Sequence ** seq_arr_out)
@@ -1019,7 +1022,7 @@ static int get_shown_sequences( ListBase * seqbasep, int cfra, int chanshown, Se
#define PROXY_MAXFILE (2*FILE_MAXDIR+FILE_MAXFILE)
-static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, char * name, int render_size)
+static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, char * name, int preview_render_size)
{
int frameno;
char dir[FILE_MAXDIR];
@@ -1028,13 +1031,11 @@ static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, c
return FALSE;
}
- if ((seq->flag & SEQ_USE_PROXY_CUSTOM_DIR)
- || (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE)) {
+ if (seq->flag & (SEQ_USE_PROXY_CUSTOM_DIR|SEQ_USE_PROXY_CUSTOM_FILE)) {
strcpy(dir, seq->strip->proxy->dir);
} else {
- if (seq->type == SEQ_IMAGE || seq->type == SEQ_MOVIE) {
- snprintf(dir, FILE_MAXDIR, "%s/BL_proxy",
- seq->strip->dir);
+ if (ELEM(seq->type, SEQ_IMAGE, SEQ_MOVIE)) {
+ snprintf(dir, FILE_MAXDIR, "%s/BL_proxy", seq->strip->dir);
} else {
return FALSE;
}
@@ -1049,36 +1050,31 @@ static int seq_proxy_get_fname(Scene *UNUSED(scene), Sequence * seq, int cfra, c
/* generate a separate proxy directory for each preview size */
- if (seq->type == SEQ_IMAGE) {
- StripElem * se = give_stripelem(seq, cfra);
- snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy",
- dir, render_size, se->name);
+ switch(seq->type) {
+ case SEQ_IMAGE:
+ snprintf(name, PROXY_MAXFILE, "%s/images/%d/%s_proxy", dir,
+ preview_render_size, give_stripelem(seq, cfra)->name);
frameno = 1;
- } else if (seq->type == SEQ_MOVIE) {
- frameno = (int) give_stripelem_index(seq, cfra)
- + seq->anim_startofs;
-
+ break;
+ case SEQ_MOVIE:
+ frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs;
snprintf(name, PROXY_MAXFILE, "%s/%s/%d/####", dir,
- seq->strip->stripdata->name,
- render_size);
- } else {
- frameno = (int) give_stripelem_index(seq, cfra)
- + seq->anim_startofs;
-
- snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir,
- render_size);
+ seq->strip->stripdata->name, preview_render_size);
+ break;
+ default:
+ frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs;
+ snprintf(name, PROXY_MAXFILE, "%s/proxy_misc/%d/####", dir, preview_render_size);
}
BLI_path_abs(name, G.main->name);
BLI_path_frame(name, frameno, 0);
-
strcat(name, ".jpg");
return TRUE;
}
-static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, int render_size)
+static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, int preview_render_size)
{
char name[PROXY_MAXFILE];
@@ -1087,29 +1083,27 @@ static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, in
}
/* rendering at 100% ? No real sense in proxy-ing, right? */
- if (render_size == 100) {
+ if (preview_render_size == 100) {
return 0;
}
if (seq->flag & SEQ_USE_PROXY_CUSTOM_FILE) {
- int frameno = (int) give_stripelem_index(seq, cfra)
- + seq->anim_startofs;
- if (!seq->strip->proxy->anim) {
- if (!seq_proxy_get_fname(
- scene, seq, cfra, name, render_size)) {
+ int frameno = (int) give_stripelem_index(seq, cfra) + seq->anim_startofs;
+ if (seq->strip->proxy->anim == NULL) {
+ if (seq_proxy_get_fname(scene, seq, cfra, name, preview_render_size)==0) {
return 0;
}
seq->strip->proxy->anim = openanim(name, IB_rect);
}
- if (!seq->strip->proxy->anim) {
+ if (seq->strip->proxy->anim==NULL) {
return 0;
}
return IMB_anim_absolute(seq->strip->proxy->anim, frameno);
}
- if (!seq_proxy_get_fname(scene, seq, cfra, name, render_size)) {
+ if (seq_proxy_get_fname(scene, seq, cfra, name, preview_render_size)==0) {
return 0;
}
@@ -1122,9 +1116,9 @@ static struct ImBuf * seq_proxy_fetch(Scene *scene, Sequence * seq, int cfra, in
#if 0
static void do_build_seq_ibuf(Scene *scene, Sequence * seq, TStripElem *se, int cfra,
- int build_proxy_run, int render_size);
+ int build_proxy_run, int preview_render_size);
-static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int render_size, int seqrectx, int seqrecty)
+static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int preview_render_size, int seqrectx, int seqrecty)
{
char name[PROXY_MAXFILE];
int quality;
@@ -1138,7 +1132,7 @@ static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int re
}
/* rendering at 100% ? No real sense in proxy-ing, right? */
- if (render_size == 100) {
+ if (preview_render_size == 100) {
return;
}
@@ -1147,7 +1141,7 @@ static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int re
return;
}
- if (!seq_proxy_get_fname(scene, seq, cfra, name, render_size)) {
+ if (!seq_proxy_get_fname(scene, seq, cfra, name, preview_render_size)) {
return;
}
@@ -1161,15 +1155,15 @@ static void seq_proxy_build_frame(Scene *scene, Sequence * seq, int cfra, int re
se->ibuf = 0;
}
- do_build_seq_ibuf(scene, seq, se, cfra, TRUE, render_size,
+ do_build_seq_ibuf(scene, seq, se, cfra, TRUE, preview_render_size,
seqrectx, seqrecty);
if (!se->ibuf) {
return;
}
- rectx= (render_size*scene->r.xsch)/100;
- recty= (render_size*scene->r.ysch)/100;
+ rectx= (preview_render_size*scene->r.xsch)/100;
+ recty= (preview_render_size*scene->r.ysch)/100;
ibuf = se->ibuf;
@@ -1378,8 +1372,7 @@ static void color_balance_byte_float(Sequence * seq, ImBuf* ibuf, float mul)
cb = calc_cb(seq->strip->color_balance);
for (c = 0; c < 3; c++) {
- make_cb_table_float(cb.lift[c], cb.gain[c], cb.gamma[c],
- cb_tab[c], mul);
+ make_cb_table_float(cb.lift[c], cb.gain[c], cb.gamma[c], cb_tab[c], mul);
}
for (i = 0; i < 256; i++) {
@@ -1446,13 +1439,8 @@ int input_have_to_preprocess(
{
float mul;
- if ((seq->flag & SEQ_FILTERY) ||
- (seq->flag & SEQ_USE_CROP) ||
- (seq->flag & SEQ_USE_TRANSFORM) ||
- (seq->flag & SEQ_FLIPX) ||
- (seq->flag & SEQ_FLIPY) ||
- (seq->flag & SEQ_USE_COLOR_BALANCE) ||
- (seq->flag & SEQ_MAKE_PREMUL)) {
+ if (seq->flag & (SEQ_FILTERY|SEQ_USE_CROP|SEQ_USE_TRANSFORM|SEQ_FLIPX|
+ SEQ_FLIPY|SEQ_USE_COLOR_BALANCE|SEQ_MAKE_PREMUL)) {
return TRUE;
}
@@ -1474,8 +1462,7 @@ int input_have_to_preprocess(
}
static ImBuf * input_preprocess(
- Scene *scene, Sequence *seq, float UNUSED(cfra), int seqrectx, int seqrecty,
- ImBuf * ibuf)
+ Scene *scene, Sequence *seq, float UNUSED(cfra), int seqrectx, int seqrecty, ImBuf * ibuf)
{
float mul;
@@ -1486,14 +1473,11 @@ static ImBuf * input_preprocess(
IMB_filtery(ibuf);
}
- if(seq->flag & SEQ_USE_CROP || seq->flag & SEQ_USE_TRANSFORM) {
- StripCrop c;
- StripTransform t;
+ if(seq->flag & (SEQ_USE_CROP|SEQ_USE_TRANSFORM)) {
+ StripCrop c= {0};
+ StripTransform t= {0};
int sx,sy,dx,dy;
- memset(&c, 0, sizeof(StripCrop));
- memset(&t, 0, sizeof(StripTransform));
-
if(seq->flag & SEQ_USE_CROP && seq->strip->crop) {
c = *seq->strip->crop;
}
@@ -1511,23 +1495,13 @@ static ImBuf * input_preprocess(
dy = scene->r.ysch;
}
- if (c.top + c.bottom >= ibuf->y ||
- c.left + c.right >= ibuf->x ||
- t.xofs >= dx || t.yofs >= dy) {
+ if (c.top + c.bottom >= ibuf->y || c.left + c.right >= ibuf->x ||
+ t.xofs >= dx || t.yofs >= dy) {
make_black_ibuf(ibuf);
} else {
- ImBuf * i;
+ ImBuf * i = IMB_allocImBuf(dx, dy,32, ibuf->rect_float ? IB_rectfloat : IB_rect);
- if (ibuf->rect_float) {
- i = IMB_allocImBuf(dx, dy,32, IB_rectfloat);
- } else {
- i = IMB_allocImBuf(dx, dy,32, IB_rect);
- }
-
- IMB_rectcpy(i, ibuf,
- t.xofs, t.yofs,
- c.left, c.bottom,
- sx, sy);
+ IMB_rectcpy(i, ibuf, t.xofs, t.yofs, c.left, c.bottom, sx, sy);
IMB_freeImBuf(ibuf);
@@ -1602,11 +1576,9 @@ static ImBuf * input_preprocess(
if(ibuf->x != seqrectx || ibuf->y != seqrecty ) {
if(scene->r.mode & R_OSA) {
- IMB_scaleImBuf(ibuf,
- (short)seqrectx, (short)seqrecty);
+ IMB_scaleImBuf(ibuf, (short)seqrectx, (short)seqrecty);
} else {
- IMB_scalefastImBuf(ibuf,
- (short)seqrectx, (short)seqrecty);
+ IMB_scalefastImBuf(ibuf, (short)seqrectx, (short)seqrecty);
}
}
return ibuf;
@@ -1656,42 +1628,42 @@ static void copy_to_ibuf_still(Sequence * seq, float nr,
strip rendering functions
********************************************************************** */
-static ImBuf* seq_render_strip_stack(
- Main *bmain, Scene *scene,
- ListBase *seqbasep, float cfra, int chanshown, int render_size,
- int seqrectx, int seqrecty);
+static ImBuf* seq_render_strip_stack( Main *bmain, Scene *scene, ListBase *seqbasep,
+ float cfra, int chanshown, int preview_render_size, int seqrectx, int seqrecty);
static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra,
- int render_size,
- int seqrectx, int seqrecty);
+ int preview_render_size, int seqrectx, int seqrecty);
-static ImBuf* seq_render_effect_strip_impl(
- Main *bmain, Scene *scene, float cfra, Sequence *seq, int render_size,
- int seqrectx, int seqrecty)
+static ImBuf* seq_render_effect_strip_impl(Main *bmain, Scene *scene, float cfra,
+ Sequence *seq, int preview_render_size, int seqrectx, int seqrecty)
{
float fac, facf;
int early_out;
int i;
- int must_preprocess = FALSE;
-
struct SeqEffectHandle sh = get_sequence_effect(seq);
FCurve *fcu= NULL;
ImBuf * ibuf[3];
- ImBuf * out = 0;
+ Sequence *input[3];
+ ImBuf * out = NULL;
- ibuf[0] = ibuf[1] = ibuf[2] = 0;
+ ibuf[0] = ibuf[1] = ibuf[2] = NULL;
+
+ input[0] = seq->seq1; input[1] = seq->seq2; input[2] = seq->seq3;
if (!sh.execute) { /* effect not supported in this version... */
- goto finish;
+ out = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect);
+ return out;
}
- if ((seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) != 0) {
+ if (seq->flag & SEQ_USE_EFFECT_DEFAULT_FADE) {
sh.get_default_fac(seq, cfra, &fac, &facf);
- if( scene->r.mode & R_FIELDS ); else facf= fac;
- } else {
- fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence,
- "effect_fader", 0);
+
+ if ((scene->r.mode & R_FIELDS)==0)
+ facf= fac;
+ }
+ else {
+ fcu = id_data_find_fcurve(&scene->id, seq, &RNA_Sequence, "effect_fader", 0);
if (fcu) {
fac = facf = evaluate_fcurve(fcu, cfra);
if( scene->r.mode & R_FIELDS ) {
@@ -1704,88 +1676,58 @@ static ImBuf* seq_render_effect_strip_impl(
early_out = sh.early_out(seq, fac, facf);
- if (early_out == -1) { /* no input needed */
- out = sh.execute(bmain, scene, seq, cfra, fac, facf,
- seqrectx, seqrecty, render_size,
- 0, 0, 0);
- goto finish;
- }
-
-
- must_preprocess = input_have_to_preprocess(
- scene, seq, cfra, seqrectx, seqrecty);
-
switch (early_out) {
- case 0:
+ case EARLY_NO_INPUT:
+ out = sh.execute(bmain, scene, seq, cfra, fac, facf,
+ seqrectx, seqrecty, preview_render_size, NULL, NULL, NULL);
+ case EARLY_DO_EFFECT:
+ for(i=0; i<3; i++) {
+ if(input[i])
+ ibuf[i] = seq_render_strip(bmain, scene, input[i], cfra,
+ preview_render_size, seqrectx, seqrecty);
+ }
+
+ if (ibuf[0] && ibuf[1]) {
+ out = sh.execute(bmain, scene, seq, cfra, fac, facf, seqrectx, seqrecty,
+ preview_render_size, ibuf[0], ibuf[1], ibuf[2]);
+ }
break;
- case 1:
- if (seq->seq1) {
- ibuf[0] = seq_render_strip(bmain, scene, seq->seq1, cfra,
- render_size,
- seqrectx, seqrecty);
+ case EARLY_USE_INPUT_1:
+ if (input[0]) {
+ ibuf[0] = seq_render_strip(bmain, scene, input[0], cfra,
+ preview_render_size, seqrectx, seqrecty);
}
if (ibuf[0]) {
- if (must_preprocess) {
+ if (input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty)) {
out = IMB_dupImBuf(ibuf[0]);
} else {
out = ibuf[0];
IMB_refImBuf(out);
}
}
- goto finish;
- case 2:
- if (seq->seq2) {
- ibuf[1] = seq_render_strip(bmain, scene, seq->seq2, cfra,
- render_size,
- seqrectx, seqrecty);
+ break;
+ case EARLY_USE_INPUT_2:
+ if (input[1]) {
+ ibuf[1] = seq_render_strip(bmain, scene, input[1], cfra,
+ preview_render_size, seqrectx, seqrecty);
}
if (ibuf[1]) {
- if (must_preprocess) {
+ if (input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty)) {
out = IMB_dupImBuf(ibuf[1]);
} else {
out = ibuf[1];
IMB_refImBuf(out);
}
}
- goto finish;
- default:
- goto finish;
+ break;
}
- if (seq->seq1) {
- ibuf[0] = seq_render_strip(bmain, scene, seq->seq1, cfra,
- render_size,
- seqrectx, seqrecty);
- }
-
- if (seq->seq2) {
- ibuf[1] = seq_render_strip(bmain, scene, seq->seq2, cfra,
- render_size,
- seqrectx, seqrecty);
- }
-
- if (seq->seq3) {
- ibuf[2] = seq_render_strip(bmain, scene, seq->seq3, cfra,
- render_size,
- seqrectx, seqrecty);
- }
-
- if (!ibuf[0] || !ibuf[1]) {
- goto finish;
- }
-
- out = sh.execute(bmain, scene, seq, cfra, fac, facf, seqrectx, seqrecty,
- render_size,
- ibuf[0], ibuf[1], ibuf[2]);
-
-finish:
for (i = 0; i < 3; i++) {
IMB_freeImBuf(ibuf[i]);
}
- if (!out) {
- out = IMB_allocImBuf(
- (short)seqrectx, (short)seqrecty, 32, IB_rect);
+ if (out == NULL) {
+ out = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect);
}
return out;
@@ -1929,185 +1871,143 @@ static ImBuf * seq_render_scene_strip_impl(
}
static ImBuf * seq_render_strip(Main *bmain, Scene *scene, Sequence * seq, float cfra,
- int render_size,
- int seqrectx, int seqrecty)
+ int preview_render_size, int seqrectx, int seqrecty)
{
+ ImBuf * ibuf = NULL;
char name[FILE_MAXDIR+FILE_MAXFILE];
- int use_preprocess = input_have_to_preprocess(
- scene, seq, cfra, seqrectx, seqrecty);
- ImBuf * ibuf = seq_stripelem_cache_get(
- seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF);
+ int use_preprocess = input_have_to_preprocess(scene, seq, cfra, seqrectx, seqrecty);
float nr = give_stripelem_index(seq, cfra);
+ /* all effects are handled similarly with the exception of speed effect */
+ int type = (seq->type & SEQ_EFFECT && seq->type != SEQ_SPEED) ? SEQ_EFFECT : seq->type;
+ ibuf = seq_stripelem_cache_get(seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF);
+
+ if (ibuf == NULL)
+ ibuf = copy_from_ibuf_still(seq,nr,seqrectx,seqrecty);
+
/* currently, we cache preprocessed images */
- if (ibuf) {
+ if (ibuf)
use_preprocess = FALSE;
- }
- if(seq->type == SEQ_META) {
- ImBuf * meta_ibuf = 0;
+ if (ibuf == NULL)
+ ibuf = seq_proxy_fetch(scene, seq, cfra, preview_render_size);
- if (ibuf == 0) {
- ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
- }
+ if(ibuf == NULL) switch(type) {
+ case SEQ_META:
+ {
+ ImBuf * meta_ibuf = NULL;
- if(!ibuf && seq->seqbase.first) {
- meta_ibuf = seq_render_strip_stack(
- bmain, scene,
- &seq->seqbase, seq->start + nr, 0,
- render_size, seqrectx, seqrecty);
- }
+ if(seq->seqbase.first)
+ meta_ibuf = seq_render_strip_stack(bmain, scene, &seq->seqbase,
+ seq->start + nr, 0, preview_render_size, seqrectx, seqrecty);
- if(!ibuf && meta_ibuf) {
- ibuf = meta_ibuf;
- if(ibuf && use_preprocess) {
- struct ImBuf * i = IMB_dupImBuf(ibuf);
+ if(meta_ibuf) {
+ ibuf = meta_ibuf;
+ if(ibuf && use_preprocess) {
+ struct ImBuf * i = IMB_dupImBuf(ibuf);
- IMB_freeImBuf(ibuf);
+ IMB_freeImBuf(ibuf);
- ibuf = i;
+ ibuf = i;
+ }
}
+ break;
}
- } else if(seq->type == SEQ_SPEED) {
- ImBuf * child_ibuf = 0;
+ case SEQ_SPEED:
+ {
+ ImBuf * child_ibuf = NULL;
- if (ibuf == 0) {
- ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
- }
-
- if (ibuf == 0) {
float f_cfra;
- SpeedControlVars * s
- = (SpeedControlVars *)seq->effectdata;
+ SpeedControlVars * s = (SpeedControlVars *)seq->effectdata;
sequence_effect_speed_rebuild_map(scene, seq, 0);
/* weeek! */
f_cfra = seq->start + s->frameMap[(int) nr];
- child_ibuf = seq_render_strip(bmain, scene, seq->seq1, f_cfra,
- render_size,
- seqrectx, seqrecty);
- }
+ child_ibuf = seq_render_strip(bmain, scene, seq->seq1, f_cfra, preview_render_size,
+ seqrectx, seqrecty);
- if (!ibuf && child_ibuf) {
- ibuf = child_ibuf;
- if(ibuf && use_preprocess) {
- struct ImBuf * i = IMB_dupImBuf(ibuf);
+ if (child_ibuf) {
+ ibuf = child_ibuf;
+ if(ibuf && use_preprocess) {
+ struct ImBuf * i = IMB_dupImBuf(ibuf);
- IMB_freeImBuf(ibuf);
+ IMB_freeImBuf(ibuf);
- ibuf = i;
+ ibuf = i;
+ }
}
+ break;
}
- } else if(seq->type & SEQ_EFFECT) {
- /* should the effect be recalculated? */
-
- if (ibuf == 0) {
- ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
+ case SEQ_EFFECT:
+ {
+ ibuf = seq_render_effect_strip_impl(bmain, scene, cfra, seq, preview_render_size,
+ seqrectx, seqrecty);
+ break;
}
+ case SEQ_IMAGE:
+ {
+ StripElem * s_elem = give_stripelem(seq, cfra);
- if(ibuf == 0) {
- ibuf = seq_render_effect_strip_impl(
- bmain, scene, cfra, seq, render_size,
- seqrectx, seqrecty);
+ if (s_elem) {
+ BLI_join_dirfile(name, seq->strip->dir, s_elem->name);
+ BLI_path_abs(name, G.main->name);
+ }
+
+ if (s_elem && (ibuf = IMB_loadiffname(name, IB_rect))) {
+ /* we don't need both (speed reasons)! */
+ if (ibuf->rect_float && ibuf->rect)
+ imb_freerectImBuf(ibuf);
+
+ /* all sequencer color is done in SRGB space, linear gives odd crossfades */
+ if(ibuf->profile == IB_PROFILE_LINEAR_RGB)
+ IMB_convert_profile(ibuf, IB_PROFILE_NONE);
+
+ copy_to_ibuf_still(seq, nr, ibuf);
+ }
+ break;
}
- } else if(seq->type == SEQ_IMAGE) {
- StripElem * s_elem = give_stripelem(seq, cfra);
-
- if(ibuf == 0 && s_elem) {
- BLI_join_dirfile(name, seq->strip->dir, s_elem->name);
- BLI_path_abs(name, G.main->name);
-
- ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
- }
-
- if (ibuf == 0) {
- ibuf = copy_from_ibuf_still(seq,nr,seqrectx,seqrecty);
- }
-
- if (ibuf == 0 && s_elem &&
- (ibuf = IMB_loadiffname(name, IB_rect))) {
- /* we don't need both (speed reasons)! */
- if (ibuf->rect_float && ibuf->rect)
- imb_freerectImBuf(ibuf);
-
- /* all sequencer color is done in SRGB space, linear gives odd crossfades */
- if(ibuf->profile == IB_PROFILE_LINEAR_RGB)
- IMB_convert_profile(ibuf, IB_PROFILE_NONE);
-
- copy_to_ibuf_still(seq, nr, ibuf);
- }
- } else if(seq->type == SEQ_MOVIE) {
- if(ibuf == 0) {
- ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
-
- }
-
- if (ibuf == 0) {
- ibuf = copy_from_ibuf_still(seq, nr,seqrectx,seqrecty);
- }
-
- if (ibuf == 0) {
+ case SEQ_MOVIE:
+ {
if(seq->anim==0) {
- BLI_join_dirfile(name,
- seq->strip->dir,
- seq->strip->stripdata->name);
+ BLI_join_dirfile(name, seq->strip->dir, seq->strip->stripdata->name);
BLI_path_abs(name, G.main->name);
- seq->anim = openanim(
- name, IB_rect |
- ((seq->flag & SEQ_FILTERY)
- ? IB_animdeinterlace : 0));
+ seq->anim = openanim(name, IB_rect |
+ ((seq->flag & SEQ_FILTERY) ? IB_animdeinterlace : 0));
}
+
if(seq->anim) {
- IMB_anim_set_preseek(seq->anim,
- seq->anim_preseek);
- ibuf = IMB_anim_absolute(seq->anim,
- nr
- + seq->anim_startofs);
+ IMB_anim_set_preseek(seq->anim, seq->anim_preseek);
+ ibuf = IMB_anim_absolute(seq->anim, nr + seq->anim_startofs);
/* we don't need both (speed reasons)! */
- if (ibuf && ibuf->rect_float
- && ibuf->rect) {
+ if (ibuf && ibuf->rect_float && ibuf->rect)
imb_freerectImBuf(ibuf);
- }
}
copy_to_ibuf_still(seq, nr, ibuf);
+ break;
}
-
- } else if(seq->type == SEQ_SCENE) { // scene can be NULL after deletions
- if (ibuf == 0) {
- ibuf = seq_proxy_fetch(scene, seq, cfra, render_size);
- }
- if (ibuf == 0) {
- ibuf = copy_from_ibuf_still(seq, nr,seqrectx,seqrecty);
- }
-
- if (ibuf == 0) {
- ibuf = seq_render_scene_strip_impl(bmain, scene, seq, nr,
- seqrectx, seqrecty);
+ case SEQ_SCENE:
+ { // scene can be NULL after deletions
+ ibuf = seq_render_scene_strip_impl(bmain, scene, seq, nr, seqrectx, seqrecty);
copy_to_ibuf_still(seq, nr, ibuf);
+ break;
}
}
- if (!ibuf) {
- ibuf = IMB_allocImBuf(
- (short)seqrectx, (short)seqrecty, 32, IB_rect);
- }
+ if (ibuf == NULL)
+ ibuf = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect);
- if (ibuf->x != seqrectx || ibuf->y != seqrecty) {
+ if (ibuf->x != seqrectx || ibuf->y != seqrecty)
use_preprocess = TRUE;
- }
- if (use_preprocess) {
- ibuf = input_preprocess(scene, seq, cfra, seqrectx,
- seqrecty, ibuf);
- }
+ if (use_preprocess)
+ ibuf = input_preprocess(scene, seq, cfra, seqrectx, seqrecty, ibuf);
- seq_stripelem_cache_put(
- seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF, ibuf);
+ seq_stripelem_cache_put(seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF, ibuf);
return ibuf;
}
@@ -2123,9 +2023,7 @@ static int seq_must_swap_input_in_blend_mode(Sequence * seq)
/* bad hack, to fix crazy input ordering of
those two effects */
- if (seq->blend_mode == SEQ_ALPHAOVER ||
- seq->blend_mode == SEQ_ALPHAUNDER ||
- seq->blend_mode == SEQ_OVERDROP) {
+ if (ELEM3(seq->blend_mode, SEQ_ALPHAOVER, SEQ_ALPHAUNDER, SEQ_OVERDROP)) {
swap_input = TRUE;
}
@@ -2138,15 +2036,15 @@ static int seq_get_early_out_for_blend_mode(Sequence * seq)
float facf = seq->blend_opacity / 100.0;
int early_out = sh.early_out(seq, facf, facf);
- if (early_out < 1) {
+ if (ELEM(early_out, EARLY_DO_EFFECT, EARLY_NO_INPUT)) {
return early_out;
}
if (seq_must_swap_input_in_blend_mode(seq)) {
- if (early_out == 2) {
- return 1;
- } else if (early_out == 1) {
- return 2;
+ if (early_out == EARLY_USE_INPUT_2) {
+ return EARLY_USE_INPUT_1;
+ } else if (early_out == EARLY_USE_INPUT_1) {
+ return EARLY_USE_INPUT_2;
}
}
return early_out;
@@ -2154,18 +2052,17 @@ static int seq_get_early_out_for_blend_mode(Sequence * seq)
static ImBuf* seq_render_strip_stack(
Main *bmain, Scene *scene, ListBase *seqbasep, float cfra, int chanshown,
- int render_size, int seqrectx, int seqrecty)
+ int preview_render_size, int seqrectx, int seqrecty)
{
Sequence* seq_arr[MAXSEQ+1];
int count;
int i;
- ImBuf* out = 0;
+ ImBuf* out = NULL;
- count = get_shown_sequences(seqbasep, cfra, chanshown,
- (Sequence **)&seq_arr);
+ count = get_shown_sequences(seqbasep, cfra, chanshown, (Sequence **)&seq_arr);
- if (!count) {
- return 0;
+ if (count == 0) {
+ return NULL;
}
#if 0 /* commentind since this breaks keyframing, since it resets the value on draw */
@@ -2176,22 +2073,15 @@ static ImBuf* seq_render_strip_stack(
}
#endif
- out = seq_stripelem_cache_get(
- seq_arr[count - 1],
- seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP);
+ out = seq_stripelem_cache_get(seq_arr[count - 1], seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP);
if (out) {
return out;
}
if(count == 1) {
- out = seq_render_strip(bmain, scene, seq_arr[0],
- cfra, render_size,
- seqrectx, seqrecty);
- seq_stripelem_cache_put(
- seq_arr[0],
- seqrectx, seqrecty, cfra,
- SEQ_STRIPELEM_IBUF_COMP, out);
+ out = seq_render_strip(bmain, scene, seq_arr[0], cfra, preview_render_size, seqrectx, seqrecty);
+ seq_stripelem_cache_put(seq_arr[0], seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP, out);
return out;
}
@@ -2199,43 +2089,33 @@ static ImBuf* seq_render_strip_stack(
for (i = count - 1; i >= 0; i--) {
int early_out;
- Sequence * seq = seq_arr[i];
+ Sequence *seq = seq_arr[i];
- out = seq_stripelem_cache_get(
- seq,
- seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP);
+ out = seq_stripelem_cache_get(seq, seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP);
if (out) {
break;
}
if (seq->blend_mode == SEQ_BLEND_REPLACE) {
- out = seq_render_strip(bmain, scene, seq, cfra,
- render_size,
- seqrectx, seqrecty);
+ out = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, seqrectx, seqrecty);
break;
}
early_out = seq_get_early_out_for_blend_mode(seq);
switch (early_out) {
- case -1:
- case 2:
- out = seq_render_strip(bmain, scene, seq, cfra,
- render_size,
- seqrectx, seqrecty);
+ case EARLY_NO_INPUT:
+ case EARLY_USE_INPUT_2:
+ out = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, seqrectx, seqrecty);
break;
- case 1:
+ case EARLY_USE_INPUT_1:
if (i == 0) {
- out = IMB_allocImBuf(
- (short)seqrectx, (short)seqrecty,
- 32, IB_rect);
+ out = IMB_allocImBuf((short)seqrectx, (short)seqrecty, 32, IB_rect);
}
break;
- case 0:
+ case EARLY_DO_EFFECT:
if (i == 0) {
- out = seq_render_strip(bmain, scene, seq, cfra,
- render_size,
- seqrectx, seqrecty);
+ out = seq_render_strip(bmain, scene, seq, cfra, preview_render_size, seqrectx, seqrecty);
}
break;
@@ -2245,9 +2125,7 @@ static ImBuf* seq_render_strip_stack(
}
}
- seq_stripelem_cache_put(
- seq_arr[i], seqrectx, seqrecty, cfra,
- SEQ_STRIPELEM_IBUF_COMP, out);
+ seq_stripelem_cache_put(seq_arr[i], seqrectx, seqrecty, cfra, SEQ_STRIPELEM_IBUF_COMP, out);
i++;
@@ -2255,37 +2133,32 @@ static ImBuf* seq_render_strip_stack(
for (; i < count; i++) {
Sequence * seq = seq_arr[i];
- if (seq_get_early_out_for_blend_mode(seq) == 0) {
+ if (seq_get_early_out_for_blend_mode(seq) == EARLY_DO_EFFECT) {
struct SeqEffectHandle sh = get_sequence_blend(seq);
ImBuf * ibuf1 = out;
- ImBuf * ibuf2 = seq_render_strip(bmain, scene, seq, cfra,
- render_size,
- seqrectx, seqrecty);
+ ImBuf * ibuf2 = seq_render_strip(bmain, scene, seq, cfra, preview_render_size,
+ seqrectx, seqrecty);
float facf = seq->blend_opacity / 100.0;
- int swap_input
- = seq_must_swap_input_in_blend_mode(seq);
+ int swap_input = seq_must_swap_input_in_blend_mode(seq);
int x= seqrectx;
int y= seqrecty;
if (swap_input) {
- out = sh.execute(bmain, scene, seq, cfra,
- facf, facf, x, y, render_size,
- ibuf2, ibuf1, 0);
+ out = sh.execute(bmain, scene, seq, cfra, facf, facf, x, y,
+ preview_render_size, ibuf2, ibuf1, 0);
} else {
- out = sh.execute(bmain, scene, seq, cfra,
- facf, facf, x, y, render_size,
- ibuf1, ibuf2, 0);
+ out = sh.execute(bmain, scene, seq, cfra, facf, facf, x, y,
+ preview_render_size, ibuf1, ibuf2, 0);
}
IMB_freeImBuf(ibuf1);
IMB_freeImBuf(ibuf2);
}
- seq_stripelem_cache_put(
- seq_arr[i], seqrectx, seqrecty, cfra,
- SEQ_STRIPELEM_IBUF_COMP, out);
+ seq_stripelem_cache_put(seq_arr[i], seqrectx, seqrecty, cfra,
+ SEQ_STRIPELEM_IBUF_COMP, out);
}
return out;
@@ -2296,7 +2169,7 @@ static ImBuf* seq_render_strip_stack(
* you have to free after usage!
*/
-ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
+ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size)
{
Editing *ed= seq_give_editing(scene, FALSE);
int count;
@@ -2312,19 +2185,19 @@ ImBuf *give_ibuf_seq(Main *bmain, Scene *scene, int rectx, int recty, int cfra,
seqbasep= ed->seqbasep;
}
- return seq_render_strip_stack(
- bmain, scene, seqbasep, cfra, chanshown, render_size, rectx, recty);
+ return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown,
+ preview_render_size, rectx, recty);
}
-ImBuf *give_ibuf_seqbase(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size, ListBase *seqbasep)
+ImBuf *give_ibuf_seqbase(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size, ListBase *seqbasep)
{
- return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, render_size, rectx, recty);
+ return seq_render_strip_stack(bmain, scene, seqbasep, cfra, chanshown, preview_render_size, rectx, recty);
}
-ImBuf *give_ibuf_seq_direct(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int render_size, Sequence *seq)
+ImBuf *give_ibuf_seq_direct(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int preview_render_size, Sequence *seq)
{
- return seq_render_strip(bmain, scene, seq, cfra, render_size, rectx, recty);
+ return seq_render_strip(bmain, scene, seq, cfra, preview_render_size, rectx, recty);
}
#if 0
@@ -2376,7 +2249,7 @@ typedef struct PrefetchQueueElem {
int recty;
int cfra;
int chanshown;
- int render_size;
+ int preview_render_size;
int monoton_cfra;
@@ -2424,7 +2297,7 @@ static void *seq_prefetch_thread(void * This_)
if (e->cfra >= s_last) {
e->ibuf = give_ibuf_seq_impl(This->scene,
e->rectx, e->recty, e->cfra, e->chanshown,
- e->render_size);
+ e->preview_render_size);
}
pthread_mutex_lock(&queue_lock);
@@ -2534,8 +2407,7 @@ static void seq_stop_threads()
}
#endif
-void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown,
- int render_size)
+void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown, int preview_render_size)
{
PrefetchQueueElem *e;
if (seq_thread_shutdown) {
@@ -2547,7 +2419,7 @@ void give_ibuf_prefetch_request(int rectx, int recty, int cfra, int chanshown,
e->recty = recty;
e->cfra = cfra;
e->chanshown = chanshown;
- e->render_size = render_size;
+ e->preview_render_size = preview_render_size;
e->monoton_cfra = monoton_cfra++;
pthread_mutex_lock(&queue_lock);
@@ -2590,13 +2462,13 @@ static void seq_wait_for_prefetch_ready()
}
#endif
-ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int render_size)
+ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, int cfra, int chanshown, int preview_render_size)
{
PrefetchQueueElem *e = NULL;
int found_something = FALSE;
if (seq_thread_shutdown) {
- return give_ibuf_seq(bmain, scene, rectx, recty, cfra, chanshown, render_size);
+ return give_ibuf_seq(bmain, scene, rectx, recty, cfra, chanshown, preview_render_size);
}
while (!e) {
@@ -2608,7 +2480,7 @@ ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, i
chanshown == e->chanshown &&
rectx == e->rectx &&
recty == e->recty &&
- render_size == e->render_size) {
+ preview_render_size == e->preview_render_size) {
success = TRUE;
found_something = TRUE;
break;
@@ -2621,7 +2493,7 @@ ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, i
chanshown == e->chanshown &&
rectx == e->rectx &&
recty == e->recty &&
- render_size == e->render_size) {
+ preview_render_size == e->preview_render_size) {
found_something = TRUE;
break;
}
@@ -2638,7 +2510,7 @@ ImBuf *give_ibuf_seq_threaded(Main *bmain, Scene *scene, int rectx, int recty, i
chanshown == tslot->current->chanshown &&
rectx == tslot->current->rectx &&
recty == tslot->current->recty &&
- render_size== tslot->current->render_size){
+ preview_render_size== tslot->current->preview_render_size){
found_something = TRUE;
break;
}
@@ -2721,8 +2593,7 @@ void free_imbuf_seq(Scene *scene, ListBase * seqbase, int check_mem_usage,
}
}
if(seq->type==SEQ_META) {
- free_imbuf_seq(scene, &seq->seqbase, FALSE,
- keep_file_handles);
+ free_imbuf_seq(scene, &seq->seqbase, FALSE, keep_file_handles);
}
if(seq->type==SEQ_SCENE) {
/* FIXME: recurs downwards,
@@ -2846,11 +2717,7 @@ void seq_tx_set_final_right(Sequence *seq, int val)
since they work a bit differently to normal image seq's (during transform) */
int seq_single_check(Sequence *seq)
{
- if ( seq->len==1 && (seq->type == SEQ_IMAGE || seq->type == SEQ_COLOR
- || seq->type == SEQ_MULTICAM))
- return 1;
- else
- return 0;
+ return (seq->len==1 && ELEM3(seq->type, SEQ_IMAGE, SEQ_COLOR, SEQ_MULTICAM));
}
/* check if the selected seq's reference unselected seq's */
@@ -2872,17 +2739,20 @@ int seqbase_isolated_sel_check(ListBase *seqbase)
/* test relationships */
for(seq= seqbase->first; seq; seq= seq->next) {
+ if((seq->type & SEQ_EFFECT)==0)
+ continue;
+
if(seq->flag & SELECT) {
- if(seq->type & SEQ_EFFECT) {
- if(seq->seq1 && (seq->seq1->flag & SELECT)==0) return FALSE;
- if(seq->seq2 && (seq->seq2->flag & SELECT)==0) return FALSE;
- if(seq->seq3 && (seq->seq3->flag & SELECT)==0) return FALSE;
- }
+ if( (seq->seq1 && (seq->seq1->flag & SELECT)==0) ||
+ (seq->seq2 && (seq->seq2->flag & SELECT)==0) ||
+ (seq->seq3 && (seq->seq3->flag & SELECT)==0) )
+ return FALSE;
}
- else if(seq->type & SEQ_EFFECT) {
- if(seq->seq1 && (seq->seq1->flag & SELECT)) return FALSE;
- if(seq->seq2 && (seq->seq2->flag & SELECT)) return FALSE;
- if(seq->seq3 && (seq->seq3->flag & SELECT)) return FALSE;
+ else {
+ if( (seq->seq1 && (seq->seq1->flag & SELECT)) ||
+ (seq->seq2 && (seq->seq2->flag & SELECT)) ||
+ (seq->seq3 && (seq->seq3->flag & SELECT)) )
+ return FALSE;
}
}
@@ -2959,12 +2829,8 @@ int seq_tx_test(Sequence * seq)
static int seq_overlap(Sequence *seq1, Sequence *seq2)
{
- if(seq1 != seq2)
- if(seq1->machine==seq2->machine)
- if(((seq1->enddisp <= seq2->startdisp) || (seq1->startdisp >= seq2->enddisp))==0)
- return 1;
-
- return 0;
+ return (seq1 != seq2 && seq1->machine == seq2->machine &&
+ ((seq1->enddisp <= seq2->startdisp) || (seq1->startdisp >= seq2->enddisp))==0);
}
int seq_test_overlap(ListBase * seqbasep, Sequence *test)
@@ -2982,7 +2848,7 @@ int seq_test_overlap(ListBase * seqbasep, Sequence *test)
}
-static void seq_translate(Scene *evil_scene, Sequence *seq, int delta)
+void seq_translate(Scene *evil_scene, Sequence *seq, int delta)
{
seq_offset_animdata(evil_scene, seq, delta);
seq->start += delta;
@@ -3131,7 +2997,7 @@ static void seq_update_muting_recursive(Scene *scene, ListBase *seqbasep, Sequen
seq_update_muting_recursive(scene, &seq->seqbase, metaseq, seqmute);
}
- else if((seq->type == SEQ_SOUND) || (seq->type == SEQ_SCENE)) {
+ else if(ELEM(seq->type, SEQ_SOUND, SEQ_SCENE)) {
if(seq->scene_sound) {
sound_mute_scene_sound(scene, seq->scene_sound, seqmute);
}
diff --git a/source/blender/blenkernel/intern/shrinkwrap.c b/source/blender/blenkernel/intern/shrinkwrap.c
index f64854f90de..936fb1bfeab 100644
--- a/source/blender/blenkernel/intern/shrinkwrap.c
+++ b/source/blender/blenkernel/intern/shrinkwrap.c
@@ -49,14 +49,9 @@
#include "BKE_subsurf.h"
#include "BLI_math.h"
-#include "BLI_editVert.h"
-
/* Util macros */
-#define TO_STR(a) #a
-#define JOIN(a,b) a##b
-
#define OUT_OF_MEMORY() ((void)printf("Shrinkwrap: Out of memory\n"))
/* Benchmark macros */
@@ -90,7 +85,7 @@ typedef void ( *Shrinkwrap_ForeachVertexCallback) (DerivedMesh *target, float *c
DerivedMesh *object_get_derived_final(struct Scene *scene, Object *ob, CustomDataMask dataMask)
{
Mesh *me= ob->data;
- EditMesh *em = BKE_mesh_get_editmesh(me);
+ struct EditMesh *em = BKE_mesh_get_editmesh(me);
if (em)
{
@@ -391,8 +386,8 @@ static void shrinkwrap_calc_normal_projection(ShrinkwrapCalcData *calc, struct S
//Project over negative direction of axis
if(use_normal & MOD_SHRINKWRAP_PROJECT_ALLOW_NEG_DIR)
{
- float inv_no[3] = { -tmp_no[0], -tmp_no[1], -tmp_no[2] };
-
+ float inv_no[3];
+ negate_v3_v3(inv_no, tmp_no);
if(auxData.tree)
normal_projection_project_vertex(0, tmp_co, inv_no, &local2aux, auxData.tree, &hit, auxData.raycast_callback, &auxData);
@@ -559,8 +554,7 @@ void shrinkwrapModifier_deform(ShrinkwrapModifierData *smd, Scene *scene, Object
//Using vertexs positions/normals as if a subsurface was applied
if(smd->subsurfLevels)
{
- SubsurfModifierData ssmd;
- memset(&ssmd, 0, sizeof(ssmd));
+ SubsurfModifierData ssmd= {{0}};
ssmd.subdivType = ME_CC_SUBSURF; //catmull clark
ssmd.levels = smd->subsurfLevels; //levels
diff --git a/source/blender/blenkernel/intern/smoke.c b/source/blender/blenkernel/intern/smoke.c
index a7e664bf2bf..aafa2d9870c 100644
--- a/source/blender/blenkernel/intern/smoke.c
+++ b/source/blender/blenkernel/intern/smoke.c
@@ -629,9 +629,6 @@ void smokeModifier_reset(struct SmokeModifierData *smd)
smd->domain->fluid = NULL;
}
- smd->domain->point_cache[0]->flag |= PTCACHE_OUTDATED;
- smd->domain->point_cache[1]->flag |= PTCACHE_OUTDATED;
-
smokeModifier_reset_turbulence(smd);
smd->time = -1;
@@ -1412,6 +1409,10 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM
/* if on second frame, write cache for first frame */
/* this needs to be done for smoke too so that pointcache works properly */
if((int)smd->time == startframe && (cache->flag & PTCACHE_OUTDATED || cache->last_exact==0)) {
+ // create shadows straight after domain initialization so we get nice shadows for startframe, too
+ if(get_lamp(scene, light))
+ smoke_calc_transparency(sds->shadow, smoke_get_density(sds->fluid), sds->p0, sds->p1, sds->res, sds->dx, light, calc_voxel_transp, -7.0*sds->dx);
+
BKE_ptcache_write_cache(&pid, startframe);
if(sds->wt)
BKE_ptcache_write_cache(&pid_wt, startframe);
@@ -1443,7 +1444,7 @@ void smokeModifier_do(SmokeModifierData *smd, Scene *scene, Object *ob, DerivedM
}
}
- // create shadows before writing cache so we get nice shadows for startframe, too
+ // create shadows before writing cache so they get stored
if(get_lamp(scene, light))
smoke_calc_transparency(sds->shadow, smoke_get_density(sds->fluid), sds->p0, sds->p1, sds->res, sds->dx, light, calc_voxel_transp, -7.0*sds->dx);
diff --git a/source/blender/blenkernel/intern/subsurf_ccg.c b/source/blender/blenkernel/intern/subsurf_ccg.c
index 51cee333370..56491b8d692 100644
--- a/source/blender/blenkernel/intern/subsurf_ccg.c
+++ b/source/blender/blenkernel/intern/subsurf_ccg.c
@@ -1146,74 +1146,71 @@ static void ccgDM_drawVerts(DerivedMesh *dm) {
ccgFaceIterator_free(fi);
glEnd();
}
-
static void ccgDM_drawEdges(DerivedMesh *dm, int drawLooseEdges, int UNUSED(drawAllEdges)) {
CCGDerivedMesh *ccgdm = (CCGDerivedMesh*) dm;
CCGSubSurf *ss = ccgdm->ss;
- CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
CCGEdgeIterator *ei = ccgSubSurf_getEdgeIterator(ss);
+ CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
+ int i, edgeSize = ccgSubSurf_getEdgeSize(ss);
int gridSize = ccgSubSurf_getGridSize(ss);
- int edgeSize = ccgSubSurf_getEdgeSize(ss);
- int step;
int useAging;
ccgSubSurf_getUseAgeCounts(ss, &useAging, NULL, NULL, NULL);
- /* nothing to do */
- if(!drawLooseEdges && !ccgdm->drawInteriorEdges)
- return;
+ for (; !ccgEdgeIterator_isStopped(ei); ccgEdgeIterator_next(ei)) {
+ CCGEdge *e = ccgEdgeIterator_getCurrent(ei);
+ DMGridData *edgeData = ccgSubSurf_getEdgeDataArray(ss, e);
+
+ if (!drawLooseEdges && !ccgSubSurf_getEdgeNumFaces(e))
+ continue;
+
+ if (useAging && !(G.f&G_BACKBUFSEL)) {
+ int ageCol = 255-ccgSubSurf_getEdgeAge(ss, e)*4;
+ glColor3ub(0, ageCol>0?ageCol:0, 0);
+ }
+
+ glBegin(GL_LINE_STRIP);
+ for (i=0; idrawInteriorEdges)
- step = 1;
- else
- step = gridSize - 1;
+ if (ccgdm->drawInteriorEdges) {
+ for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
+ CCGFace *f = ccgFaceIterator_getCurrent(fi);
+ int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
- /* draw edges using face grids */
- for (; !ccgFaceIterator_isStopped(fi); ccgFaceIterator_next(fi)) {
- CCGFace *f = ccgFaceIterator_getCurrent(fi);
- int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(f);
+ for (S=0; Sss;
CCGFaceIterator *fi = ccgSubSurf_getFaceIterator(ss);
GPUVertexAttribs gattribs;
- DMVertexAttribs attribs;
+ DMVertexAttribs attribs= {{{0}}};
MTFace *tf = dm->getFaceDataArray(dm, CD_MTFACE);
int gridSize = ccgSubSurf_getGridSize(ss);
int gridFaces = gridSize - 1;
@@ -1377,8 +1374,6 @@ static void ccgDM_drawMappedFacesGLSL(DerivedMesh *dm, int (*setMaterial)(int, v
transp = GPU_get_material_blend_mode();
orig_transp = transp;
- memset(&attribs, 0, sizeof(attribs));
-
#define PASSATTRIB(dx, dy, vert) { \
if(attribs.totorco) { \
index = getFaceIndex(ss, f, S, x+dx, y+dy, edgeSize, gridSize); \
diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c
index cb3c0c08cc0..09910481bf9 100644
--- a/source/blender/blenkernel/intern/text.c
+++ b/source/blender/blenkernel/intern/text.c
@@ -53,7 +53,7 @@
#include "BKE_text.h"
#include "BKE_utildefines.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -167,7 +167,7 @@ void free_text(Text *text)
if(text->name) MEM_freeN(text->name);
MEM_freeN(text->undo_buf);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if (text->compiled) BPY_free_compiled_text(text);
#endif
}
@@ -683,7 +683,7 @@ int txt_get_span (TextLine *from, TextLine *to)
static void txt_make_dirty (Text *text)
{
text->flags |= TXT_ISDIRTY;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if (text->compiled) BPY_free_compiled_text(text);
#endif
}
diff --git a/source/blender/blenkernel/intern/unit.c b/source/blender/blenkernel/intern/unit.c
index 83ace49eb67..1240b85393b 100644
--- a/source/blender/blenkernel/intern/unit.c
+++ b/source/blender/blenkernel/intern/unit.c
@@ -334,7 +334,8 @@ static int unit_as_string(char *str, int len_max, double value, int prec, bUnitC
/* Convert to a string */
{
- char conv_str[6] = {'%', '.', '0'+prec, 'l', 'f', '\0'}; /* "%.2lf" when prec is 2, must be under 10 */
+ char conv_str[6] = {'%', '.', '0', 'l', 'f', '\0'}; /* "%.2lf" when prec is 2, must be under 10 */
+ conv_str[2] += prec;
len= snprintf(str, len_max, conv_str, (float)value_conv);
if(len >= len_max)
diff --git a/source/blender/blenlib/BLI_blenlib.h b/source/blender/blenlib/BLI_blenlib.h
index 3028161734c..8423c07e7c9 100644
--- a/source/blender/blenlib/BLI_blenlib.h
+++ b/source/blender/blenlib/BLI_blenlib.h
@@ -84,8 +84,6 @@ extern "C" {
#include "BLI_rect.h"
-#include "BLI_scanfill.h"
-
#include "BLI_noise.h"
/**
diff --git a/source/blender/blenlib/BLI_fileops.h b/source/blender/blenlib/BLI_fileops.h
index b721a21b1b9..552de7b170c 100644
--- a/source/blender/blenlib/BLI_fileops.h
+++ b/source/blender/blenlib/BLI_fileops.h
@@ -54,10 +54,6 @@ int BLI_gzip(char *from, char *to);
int BLI_delete(char *file, int dir, int recursive);
int BLI_move(char *file, char *to);
int BLI_touch(const char *file);
-char *BLI_last_slash(const char *string);
-int BLI_add_slash(char *string);
-void BLI_del_slash(char *string);
-char *first_slash(char *string);
/* only for the sane unix world: direct calls to system functions :( */
#ifndef WIN32
diff --git a/source/blender/blenlib/BLI_math_matrix.h b/source/blender/blenlib/BLI_math_matrix.h
index d25707d480c..2144107a6cd 100644
--- a/source/blender/blenlib/BLI_math_matrix.h
+++ b/source/blender/blenlib/BLI_math_matrix.h
@@ -102,9 +102,9 @@ void transpose_m3(float R[3][3]);
void transpose_m4(float R[4][4]);
void normalize_m3(float R[3][3]);
-void normalize_m3_m3(float R[3][3], const float A[3][3]);
+void normalize_m3_m3(float R[3][3], float A[3][3]);
void normalize_m4(float R[4][4]);
-void normalize_m4_m4(float R[4][4], const float A[4][4]);
+void normalize_m4_m4(float R[4][4], float A[4][4]);
void orthogonalize_m3(float R[3][3], int axis);
void orthogonalize_m4(float R[4][4], int axis);
@@ -144,6 +144,8 @@ void mat4_to_size(float r[3], float M[4][4]);
void translate_m4(float mat[4][4], float tx, float ty, float tz);
void rotate_m4(float mat[4][4], const char axis, const float angle);
+void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wmat[][4]);
+
void loc_eul_size_to_mat4(float R[4][4],
const float loc[3], const float eul[3], const float size[3]);
void loc_eulO_size_to_mat4(float R[4][4],
diff --git a/source/blender/blenlib/BLI_path_util.h b/source/blender/blenlib/BLI_path_util.h
index b9a4468fe57..69b10661e23 100644
--- a/source/blender/blenlib/BLI_path_util.h
+++ b/source/blender/blenlib/BLI_path_util.h
@@ -88,6 +88,14 @@ char *BLI_get_user_folder_notest(int folder_id, char *subfolder);
#define BLENDER_SYSTEM_FORMAT "%s/blender/%s"
#endif
+#ifdef WIN32
+#define SEP '\\'
+#define ALTSEP '/'
+#else
+#define SEP '/'
+#define ALTSEP '\\'
+#endif
+
void BLI_setenv(const char *env, const char *val);
void BLI_setenv_if_new(const char *env, const char* val);
@@ -98,6 +106,11 @@ void BLI_split_dirfile(const char *string, char *dir, char *file);
void BLI_join_dirfile(char *string, const char *dir, const char *file);
char *BLI_path_basename(char *path);
int BKE_rebase_path(char *abs, int abs_size, char *rel, int rel_size, const char *base_dir, const char *src_dir, const char *dest_dir);
+char *BLI_last_slash(const char *string);
+int BLI_add_slash(char *string);
+void BLI_del_slash(char *string);
+char *BLI_first_slash(char *string);
+
void BLI_getlastdir(const char* dir, char *last, int maxlen);
int BLI_testextensie(const char *str, const char *ext);
int BLI_testextensie_array(const char *str, const char **ext_array);
@@ -107,6 +120,7 @@ void BLI_uniquename(struct ListBase *list, void *vlink, const char defname[], ch
void BLI_newname(char * name, int add);
int BLI_stringdec(const char *string, char *head, char *start, unsigned short *numlen);
void BLI_stringenc(char *string, const char *head, const char *tail, unsigned short numlen, int pic);
+int BLI_split_name_num(char *left, int *nr, const char *name);
void BLI_splitdirstring(char *di,char *fi);
/* make sure path separators conform to system one */
diff --git a/source/blender/blenlib/BLI_storage.h b/source/blender/blenlib/BLI_storage.h
index e443a853324..e52ea1600eb 100644
--- a/source/blender/blenlib/BLI_storage.h
+++ b/source/blender/blenlib/BLI_storage.h
@@ -29,17 +29,6 @@
#ifndef BLI_STORAGE_H
#define BLI_STORAGE_H
-/* NOTE: these have to be defined before including unistd.h! */
-#ifndef __APPLE__
-#ifndef WIN32
-#ifndef _LARGEFILE_SOURCE
-#define _LARGEFILE_SOURCE
-#define _LARGEFILE64_SOURCE
-#define _FILE_OFFSET_BITS 64
-#endif
-#endif
-#endif
-
#ifdef WIN32
/* for size_t, only needed on win32 for some reason */
#include
diff --git a/source/blender/blenlib/BLI_winstuff.h b/source/blender/blenlib/BLI_winstuff.h
index c9a85cf890e..b66790f701f 100644
--- a/source/blender/blenlib/BLI_winstuff.h
+++ b/source/blender/blenlib/BLI_winstuff.h
@@ -35,7 +35,7 @@
#ifdef _WIN32
#ifndef FREE_WINDOWS
-#pragma warning(once: 4761 4305 4244)
+#pragma warning(once: 4761 4305 4244 4018)
#endif
#define WIN32_LEAN_AND_MEAN
diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt
index 2e2ed3c5733..0131d45a00c 100644
--- a/source/blender/blenlib/CMakeLists.txt
+++ b/source/blender/blenlib/CMakeLists.txt
@@ -28,7 +28,6 @@ SET(INC
.
../makesdna
../blenkernel
- ../include
../gpu
../../../intern/ghost
../../../intern/guardedalloc
diff --git a/source/blender/blenlib/intern/BLI_mempool.c b/source/blender/blenlib/intern/BLI_mempool.c
index 26d6f5af147..823841ef152 100644
--- a/source/blender/blenlib/intern/BLI_mempool.c
+++ b/source/blender/blenlib/intern/BLI_mempool.c
@@ -154,9 +154,11 @@ void BLI_mempool_free(BLI_mempool *pool, void *addr){ //doesnt protect against d
first = pool->chunks.first;
BLI_remlink(&pool->chunks, first);
- for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next)
- pool->use_sysmalloc ? free(mpchunk->data) : MEM_freeN(mpchunk->data);
-
+ for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) {
+ if(pool->use_sysmalloc) free(mpchunk->data);
+ else MEM_freeN(mpchunk->data);
+ }
+
pool->use_sysmalloc ? BLI_freelist(&(pool->chunks)) : BLI_freelistN(&(pool->chunks));
BLI_addtail(&pool->chunks, first);
@@ -175,9 +177,18 @@ void BLI_mempool_free(BLI_mempool *pool, void *addr){ //doesnt protect against d
void BLI_mempool_destroy(BLI_mempool *pool)
{
BLI_mempool_chunk *mpchunk=NULL;
- for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next)
- pool->use_sysmalloc ? free(mpchunk->data) : MEM_freeN(mpchunk->data);
-
- pool->use_sysmalloc ? BLI_freelist(&(pool->chunks)) : BLI_freelistN(&(pool->chunks));
- pool->use_sysmalloc ? free(pool) : MEM_freeN(pool);
+ if(pool->use_sysmalloc) {
+ for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) {
+ free(mpchunk->data);
+ }
+ BLI_freelist(&(pool->chunks));
+ free(pool);
+ }
+ else {
+ for(mpchunk = pool->chunks.first; mpchunk; mpchunk = mpchunk->next) {
+ MEM_freeN(mpchunk->data);
+ }
+ BLI_freelistN(&(pool->chunks));
+ MEM_freeN(pool);
+ }
}
diff --git a/source/blender/blenlib/intern/fileops.c b/source/blender/blenlib/intern/fileops.c
index 06b427240ba..180cfdbbc5a 100644
--- a/source/blender/blenlib/intern/fileops.c
+++ b/source/blender/blenlib/intern/fileops.c
@@ -53,68 +53,6 @@
#include "BLO_sys_types.h" // for intptr_t support
-/* implementations: */
-char *first_slash(char *string) {
- char *ffslash, *fbslash;
-
- ffslash= strchr(string, '/');
- fbslash= strchr(string, '\\');
-
- if (!ffslash) return fbslash;
- else if (!fbslash) return ffslash;
-
- if ((intptr_t)ffslash < (intptr_t)fbslash) return ffslash;
- else return fbslash;
-}
-
-char *BLI_last_slash(const char *string) {
- char *lfslash, *lbslash;
-
- lfslash= strrchr(string, '/');
- lbslash= strrchr(string, '\\');
-
- if (!lfslash) return lbslash;
- else if (!lbslash) return lfslash;
-
- if ((intptr_t)lfslash < (intptr_t)lbslash) return lbslash;
- else return lfslash;
-}
-
-/* adds a slash if there isnt one there already */
-int BLI_add_slash(char *string) {
- int len = strlen(string);
-#ifdef WIN32
- if (len==0 || string[len-1]!='\\') {
- string[len] = '\\';
- string[len+1] = '\0';
- return len+1;
- }
-#else
- if (len==0 || string[len-1]!='/') {
- string[len] = '/';
- string[len+1] = '\0';
- return len+1;
- }
-#endif
- return len;
-}
-
-/* removes a slash if there is one */
-void BLI_del_slash(char *string) {
- int len = strlen(string);
- while (len) {
-#ifdef WIN32
- if (string[len-1]=='\\') {
-#else
- if (string[len-1]=='/') {
-#endif
- string[len-1] = '\0';
- len--;
- } else {
- break;
- }
- }
-}
/* gzip the file in from and write it to "to".
return -1 if zlib fails, -2 if the originating file does not exist
diff --git a/source/blender/blenlib/intern/math_geom.c b/source/blender/blenlib/intern/math_geom.c
index c2e765388c8..88ca739a39e 100644
--- a/source/blender/blenlib/intern/math_geom.c
+++ b/source/blender/blenlib/intern/math_geom.c
@@ -1651,11 +1651,21 @@ void window_translate_m4(float winmat[][4], float perspmat[][4], float x, float
{
if(winmat[2][3] == -1.0f) {
/* in the case of a win-matrix, this means perspective always */
- float v1[3]= {perspmat[0][0], perspmat[1][0], perspmat[2][0]};
- float v2[3]= {perspmat[0][1], perspmat[1][1], perspmat[2][1]};
- float len1= (1.0f / len_v3(v1));
- float len2= (1.0f / len_v3(v2));
-
+ float v1[3];
+ float v2[3];
+ float len1, len2;
+
+ v1[0]= perspmat[0][0];
+ v1[1]= perspmat[1][0];
+ v1[2]= perspmat[2][0];
+
+ v2[0]= perspmat[0][1];
+ v2[1]= perspmat[1][1];
+ v2[2]= perspmat[2][1];
+
+ len1= (1.0f / len_v3(v1));
+ len2= (1.0f / len_v3(v2));
+
winmat[2][0] += len1 * winmat[0][0] * x;
winmat[2][1] += len2 * winmat[1][1] * y;
}
diff --git a/source/blender/blenlib/intern/math_matrix.c b/source/blender/blenlib/intern/math_matrix.c
index 86eee4c2202..58fb3b9b76b 100644
--- a/source/blender/blenlib/intern/math_matrix.c
+++ b/source/blender/blenlib/intern/math_matrix.c
@@ -609,7 +609,11 @@ void orthogonalize_m3(float mat[][3], int axis)
normalize_v3(mat[1]);
cross_v3_v3v3(mat[2], mat[0], mat[1]);
} else {
- float vec[3] = {mat[0][1], mat[0][2], mat[0][0]};
+ float vec[3];
+
+ vec[0]= mat[0][1];
+ vec[1]= mat[0][2];
+ vec[2]= mat[0][0];
cross_v3_v3v3(mat[2], mat[0], vec);
normalize_v3(mat[2]);
@@ -625,7 +629,11 @@ void orthogonalize_m3(float mat[][3], int axis)
normalize_v3(mat[0]);
cross_v3_v3v3(mat[2], mat[0], mat[1]);
} else {
- float vec[3] = {mat[1][1], mat[1][2], mat[1][0]};
+ float vec[3];
+
+ vec[0]= mat[1][1];
+ vec[1]= mat[1][2];
+ vec[2]= mat[1][0];
cross_v3_v3v3(mat[0], mat[1], vec);
normalize_v3(mat[0]);
@@ -641,7 +649,11 @@ void orthogonalize_m3(float mat[][3], int axis)
normalize_v3(mat[0]);
cross_v3_v3v3(mat[1], mat[2], mat[0]);
} else {
- float vec[3] = {mat[2][1], mat[2][2], mat[2][0]};
+ float vec[3];
+
+ vec[0]= mat[2][1];
+ vec[1]= mat[2][2];
+ vec[2]= mat[2][0];
cross_v3_v3v3(mat[0], vec, mat[2]);
normalize_v3(mat[0]);
@@ -670,7 +682,11 @@ void orthogonalize_m4(float mat[][4], int axis)
normalize_v3(mat[1]);
cross_v3_v3v3(mat[2], mat[0], mat[1]);
} else {
- float vec[3] = {mat[0][1], mat[0][2], mat[0][0]};
+ float vec[3];
+
+ vec[0]= mat[0][1];
+ vec[1]= mat[0][2];
+ vec[2]= mat[0][0];
cross_v3_v3v3(mat[2], mat[0], vec);
normalize_v3(mat[2]);
@@ -687,7 +703,11 @@ void orthogonalize_m4(float mat[][4], int axis)
normalize_v3(mat[0]);
cross_v3_v3v3(mat[2], mat[0], mat[1]);
} else {
- float vec[3] = {mat[1][1], mat[1][2], mat[1][0]};
+ float vec[3];
+
+ vec[0]= mat[1][1];
+ vec[1]= mat[1][2];
+ vec[2]= mat[1][0];
cross_v3_v3v3(mat[0], mat[1], vec);
normalize_v3(mat[0]);
@@ -703,7 +723,11 @@ void orthogonalize_m4(float mat[][4], int axis)
normalize_v3(mat[0]);
cross_v3_v3v3(mat[1], mat[2], mat[0]);
} else {
- float vec[3] = {mat[2][1], mat[2][2], mat[2][0]};
+ float vec[3];
+
+ vec[0]= mat[2][1];
+ vec[1]= mat[2][2];
+ vec[2]= mat[2][0];
cross_v3_v3v3(mat[0], vec, mat[2]);
normalize_v3(mat[0]);
@@ -750,7 +774,7 @@ void normalize_m3(float mat[][3])
normalize_v3(mat[2]);
}
-void normalize_m3_m3(float rmat[][3], const float mat[][3])
+void normalize_m3_m3(float rmat[][3], float mat[][3])
{
normalize_v3_v3(rmat[0], mat[0]);
normalize_v3_v3(rmat[1], mat[1]);
@@ -770,7 +794,7 @@ void normalize_m4(float mat[][4])
if(len!=0.0) mat[2][3]/= len;
}
-void normalize_m4_m4(float rmat[][4], const float mat[][4])
+void normalize_m4_m4(float rmat[][4], float mat[][4])
{
float len;
@@ -952,6 +976,40 @@ float mat4_to_scale(float mat[][4])
return mat3_to_scale(tmat);
}
+void mat4_to_loc_rot_size(float loc[3], float rot[3][3], float size[3], float wmat[][4])
+{
+ float mat3[3][3]; /* wmat -> 3x3 */
+ float mat3_n[3][3]; /* wmat -> normalized, 3x3 */
+ float imat3_n[3][3]; /* wmat -> normalized & inverted, 3x3 */
+ /* location */
+ copy_v3_v3(loc, wmat[3]);
+
+ /* rotation & scale are linked, we need to create the mat's
+ * for these together since they are related. */
+ copy_m3_m4(mat3, wmat);
+ /* so scale doesnt interfear with rotation [#24291] */
+ /* note: this is a workaround for negative matrix not working for rotation conversion, FIXME */
+ normalize_m3_m3(mat3_n, mat3);
+ if(is_negative_m3(mat3)) {
+ negate_v3(mat3_n[0]);
+ negate_v3(mat3_n[1]);
+ negate_v3(mat3_n[2]);
+ }
+
+ /* rotation */
+ /* keep rot as a 3x3 matrix, the caller can convert into a quat or euler */
+ copy_m3_m3(rot, mat3_n);
+
+ /* scale */
+ /* note: mat4_to_size(ob->size, mat) fails for negative scale */
+ invert_m3_m3(imat3_n, mat3_n);
+ mul_m3_m3m3(mat3, imat3_n, mat3);
+
+ size[0]= mat3[0][0];
+ size[1]= mat3[1][1];
+ size[2]= mat3[2][2];
+}
+
void scale_m3_fl(float m[][3], float scale)
{
m[0][0]= m[1][1]= m[2][2]= scale;
diff --git a/source/blender/blenlib/intern/math_rotation.c b/source/blender/blenlib/intern/math_rotation.c
index 7debdcdb015..2d0e347b2e6 100644
--- a/source/blender/blenlib/intern/math_rotation.c
+++ b/source/blender/blenlib/intern/math_rotation.c
@@ -121,7 +121,13 @@ void mul_qt_fl(float *q, const float f)
void sub_qt_qtqt(float q[4], const float q1[4], const float q2[4])
{
- const float nq2[4]= {-q2[0], q2[1], q2[2], q2[3]};
+ float nq2[4];
+
+ nq2[0]= -q2[0];
+ nq2[1]= q2[1];
+ nq2[2]= q2[2];
+ nq2[3]= q2[3];
+
mul_qt_qtqt(q, q1, nq2);
}
@@ -592,8 +598,11 @@ void axis_angle_to_quat(float q[4], const float axis[3], float angle)
float nor[3];
float si;
- normalize_v3_v3(nor, axis);
-
+ if(normalize_v3_v3(nor, axis) == 0.0f) {
+ unit_qt(q);
+ return;
+ }
+
angle /= 2;
si = (float)sin(angle);
q[0] = (float)cos(angle);
@@ -649,7 +658,10 @@ void axis_angle_to_mat3(float mat[3][3], const float axis[3], const float angle)
float nor[3], nsi[3], co, si, ico;
/* normalise the axis first (to remove unwanted scaling) */
- normalize_v3_v3(nor, axis);
+ if(normalize_v3_v3(nor, axis) == 0.0f) {
+ unit_m3(mat);
+ return;
+ }
/* now convert this to a 3x3 matrix */
co= (float)cos(angle);
@@ -1138,53 +1150,6 @@ void eulO_to_mat3(float M[3][3], const float e[3], const short order)
M[i][k] = -sj; M[j][k] = cj*si; M[k][k] = cj*ci;
}
-/* Construct 4x4 matrix from Euler angles (in radians). */
-void eulO_to_mat4(float M[4][4], const float e[3], const short order)
-{
- float m[3][3];
-
- /* for now, we'll just do this the slow way (i.e. copying matrices) */
- normalize_m3(m);
- eulO_to_mat3(m,e, order);
- copy_m4_m3(M, m);
-}
-
-/* Convert 3x3 matrix to Euler angles (in radians). */
-void mat3_to_eulO(float e[3], short order,float M[3][3])
-{
- RotOrderInfo *R= GET_ROTATIONORDER_INFO(order);
- short i=R->axis[0], j=R->axis[1], k=R->axis[2];
- double cy = sqrt(M[i][i]*M[i][i] + M[i][j]*M[i][j]);
-
- if (cy > 16*FLT_EPSILON) {
- e[i] = atan2(M[j][k], M[k][k]);
- e[j] = atan2(-M[i][k], cy);
- e[k] = atan2(M[i][j], M[i][i]);
- }
- else {
- e[i] = atan2(-M[k][j], M[j][j]);
- e[j] = atan2(-M[i][k], cy);
- e[k] = 0;
- }
-
- if (R->parity) {
- e[0] = -e[0];
- e[1] = -e[1];
- e[2] = -e[2];
- }
-}
-
-/* Convert 4x4 matrix to Euler angles (in radians). */
-void mat4_to_eulO(float e[3], const short order,float M[4][4])
-{
- float m[3][3];
-
- /* for now, we'll just do this the slow way (i.e. copying matrices) */
- copy_m3_m4(m, M);
- normalize_m3(m);
- mat3_to_eulO(e, order,m);
-}
-
/* returns two euler calculation methods, so we can pick the best */
static void mat3_to_eulo2(float M[3][3], float *e1, float *e2, short order)
{
@@ -1227,6 +1192,45 @@ static void mat3_to_eulo2(float M[3][3], float *e1, float *e2, short order)
}
}
+/* Construct 4x4 matrix from Euler angles (in radians). */
+void eulO_to_mat4(float M[4][4], const float e[3], const short order)
+{
+ float m[3][3];
+
+ /* for now, we'll just do this the slow way (i.e. copying matrices) */
+ normalize_m3(m);
+ eulO_to_mat3(m,e, order);
+ copy_m4_m3(M, m);
+}
+
+
+/* Convert 3x3 matrix to Euler angles (in radians). */
+void mat3_to_eulO(float eul[3], short order,float M[3][3])
+{
+ float eul1[3], eul2[3];
+
+ mat3_to_eulo2(M, eul1, eul2, order);
+
+ /* return best, which is just the one with lowest values it in */
+ if(fabs(eul1[0])+fabs(eul1[1])+fabs(eul1[2]) > fabs(eul2[0])+fabs(eul2[1])+fabs(eul2[2])) {
+ copy_v3_v3(eul, eul2);
+ }
+ else {
+ copy_v3_v3(eul, eul1);
+ }
+}
+
+/* Convert 4x4 matrix to Euler angles (in radians). */
+void mat4_to_eulO(float e[3], const short order,float M[4][4])
+{
+ float m[3][3];
+
+ /* for now, we'll just do this the slow way (i.e. copying matrices) */
+ copy_m3_m4(m, M);
+ normalize_m3(m);
+ mat3_to_eulO(e, order,m);
+}
+
/* uses 2 methods to retrieve eulers, and picks the closest */
void mat3_to_compatible_eulO(float eul[3], float oldrot[3], short order,float mat[3][3])
{
diff --git a/source/blender/blenlib/intern/path_util.c b/source/blender/blenlib/intern/path_util.c
index 61b525d50af..466012eb9b8 100644
--- a/source/blender/blenlib/intern/path_util.c
+++ b/source/blender/blenlib/intern/path_util.c
@@ -136,6 +136,37 @@ void BLI_stringenc(char *string, const char *head, const char *tail, unsigned sh
sprintf(string, fmtstr, head, pic, tail);
}
+/* Foo.001 -> "Foo", 1
+ * Returns the length of "Foo" */
+int BLI_split_name_num(char *left, int *nr, const char *name)
+{
+ int a;
+
+ *nr= 0;
+ a= strlen(name);
+ memcpy(left, name, (a + 1) * sizeof(char));
+
+ if(a>1 && name[a-1]=='.') return a;
+
+ while(a--) {
+ if( name[a]=='.' ) {
+ left[a]= 0;
+ *nr= atol(name+a+1);
+ /* casting down to an int, can overflow for large numbers */
+ if(*nr < 0)
+ *nr= 0;
+ return a;
+ }
+ if( isdigit(name[a])==0 ) break;
+
+ left[a]= 0;
+ }
+
+ for(a= 0; name[a]; a++)
+ left[a]= name[a];
+
+ return a;
+}
void BLI_newname(char *name, int add)
{
@@ -174,15 +205,25 @@ void BLI_newname(char *name, int add)
* defname: the name that should be used by default if none is specified already
* delim: the character which acts as a delimeter between parts of the name
*/
-void BLI_uniquename(ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short len)
+static int uniquename_find_dupe(ListBase *list, void *vlink, const char *name, short name_offs)
{
Link *link;
- char tempname[128];
- int number = 1, exists = 0;
- char *dot;
-
+
+ for (link = list->first; link; link= link->next) {
+ if (link != vlink) {
+ if (!strcmp(GIVE_STRADDR(link, name_offs), name)) {
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+void BLI_uniquename(ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short name_len)
+{
/* Make sure length can be handled */
- if ((len < 0) || (len > 128))
+ if ((name_len < 0) || (name_len > 128))
return;
/* See if we are given an empty string */
@@ -191,45 +232,27 @@ void BLI_uniquename(ListBase *list, void *vlink, const char defname[], char deli
if (GIVE_STRADDR(vlink, name_offs) == '\0') {
/* give it default name first */
- BLI_strncpy(GIVE_STRADDR(vlink, name_offs), defname, len);
+ BLI_strncpy(GIVE_STRADDR(vlink, name_offs), defname, name_len);
}
/* See if we even need to do this */
if (list == NULL)
return;
-
- for (link = list->first; link; link= link->next) {
- if (link != vlink) {
- if (!strcmp(GIVE_STRADDR(link, name_offs), GIVE_STRADDR(vlink, name_offs))) {
- exists = 1;
- break;
- }
- }
- }
- if (exists == 0)
- return;
- /* Strip off the suffix */
- dot = strrchr(GIVE_STRADDR(vlink, name_offs), delim);
- if (dot)
- *dot=0;
-
- for (number = 1; number <= 999; number++) {
- BLI_snprintf(tempname, sizeof(tempname), "%s%c%03d", GIVE_STRADDR(vlink, name_offs), delim, number);
-
- exists = 0;
- for (link= list->first; link; link= link->next) {
- if (vlink != link) {
- if (!strcmp(GIVE_STRADDR(link, name_offs), tempname)) {
- exists = 1;
- break;
- }
+ if(uniquename_find_dupe(list,vlink, GIVE_STRADDR(vlink, name_offs), name_offs)) {
+ /* note: this block is used in other places, when changing logic apply to all others, search this message */
+ char tempname[128];
+ char left[128];
+ int number;
+ int len= BLI_split_name_num(left, &number, GIVE_STRADDR(vlink, name_offs));
+ do { /* nested while loop looks bad but likely it wont run most times */
+ while(BLI_snprintf(tempname, name_len, "%s%c%03d", left, delim, number) >= name_len) {
+ if(len > 0) left[--len]= '\0'; /* word too long */
+ else number= 0; /* reset, must be a massive number */
}
- }
- if (exists == 0) {
- BLI_strncpy(GIVE_STRADDR(vlink, name_offs), tempname, len);
- return;
- }
+ } while(number++, uniquename_find_dupe(list, vlink, tempname, name_offs));
+
+ BLI_strncpy(GIVE_STRADDR(vlink, name_offs), tempname, name_len);
}
}
@@ -471,11 +494,7 @@ int BLI_has_parent(char *path)
int BLI_parent_dir(char *path)
{
-#ifdef WIN32
- static char *parent_dir="..\\";
-#else
- static char *parent_dir="../";
-#endif
+ static char parent_dir[]= {'.', '.', SEP, '\0'}; /* "../" or "..\\" */
char tmp[FILE_MAXDIR+FILE_MAXFILE+4];
BLI_strncpy(tmp, path, sizeof(tmp)-4);
BLI_add_slash(tmp);
@@ -547,9 +566,20 @@ int BLI_path_frame(char *path, int frame, int digits)
ensure_digits(path, digits);
if (stringframe_chars(path, &ch_sta, &ch_end)) { /* warning, ch_end is the last # +1 */
- char tmp[FILE_MAX], format[64];
+ char tmp[FILE_MAX];
+#if 0 // neat but breaks on non ascii strings.
+ char format[64];
sprintf(format, "%%.%ds%%.%dd%%s", ch_sta, ch_end-ch_sta); /* example result: "%.12s%.5d%s" */
sprintf(tmp, format, path, frame, path+ch_end);
+#else
+ char format[8];
+ char *p;
+ sprintf(format, "%%.%dd", ch_end-ch_sta); /* example result: "%.5d" */
+ memcpy(tmp, path, sizeof(char) * ch_sta);
+ p= tmp + ch_sta;
+ p += sprintf(p, format, frame);
+ memcpy(p, path + ch_end, strlen(path + ch_end));
+#endif
strcpy(path, tmp);
return 1;
}
@@ -1143,42 +1173,28 @@ void BLI_char_switch(char *string, char from, char to)
void BLI_make_exist(char *dir) {
int a;
- #ifdef WIN32
- BLI_char_switch(dir, '/', '\\');
- #else
- BLI_char_switch(dir, '\\', '/');
- #endif
-
+ BLI_char_switch(dir, ALTSEP, SEP);
+
a = strlen(dir);
-
-#ifdef WIN32
+
while(BLI_is_dir(dir) == 0){
a --;
- while(dir[a] != '\\'){
+ while(dir[a] != SEP){
a--;
if (a <= 0) break;
}
- if (a >= 0) dir[a+1] = 0;
+ if (a >= 0) {
+ dir[a+1] = '\0';
+ }
else {
- /* defaulting to drive (usually 'C:') of Windows installation */
+#ifdef WIN32
get_default_root(dir);
- break;
- }
- }
#else
- while(BLI_is_dir(dir) == 0){
- a --;
- while(dir[a] != '/'){
- a--;
- if (a <= 0) break;
- }
- if (a >= 0) dir[a+1] = 0;
- else {
strcpy(dir,"/");
+#endif
break;
}
}
-#endif
}
void BLI_make_existing_file(char *name)
@@ -1495,6 +1511,67 @@ int BKE_rebase_path(char *abs, int abs_size, char *rel, int rel_size, const char
return 1;
}
+char *BLI_first_slash(char *string) {
+ char *ffslash, *fbslash;
+
+ ffslash= strchr(string, '/');
+ fbslash= strchr(string, '\\');
+
+ if (!ffslash) return fbslash;
+ else if (!fbslash) return ffslash;
+
+ if ((intptr_t)ffslash < (intptr_t)fbslash) return ffslash;
+ else return fbslash;
+}
+
+char *BLI_last_slash(const char *string) {
+ char *lfslash, *lbslash;
+
+ lfslash= strrchr(string, '/');
+ lbslash= strrchr(string, '\\');
+
+ if (!lfslash) return lbslash;
+ else if (!lbslash) return lfslash;
+
+ if ((intptr_t)lfslash < (intptr_t)lbslash) return lbslash;
+ else return lfslash;
+}
+
+/* adds a slash if there isnt one there already */
+int BLI_add_slash(char *string) {
+ int len = strlen(string);
+#ifdef WIN32
+ if (len==0 || string[len-1]!='\\') {
+ string[len] = '\\';
+ string[len+1] = '\0';
+ return len+1;
+ }
+#else
+ if (len==0 || string[len-1]!='/') {
+ string[len] = '/';
+ string[len+1] = '\0';
+ return len+1;
+ }
+#endif
+ return len;
+}
+
+/* removes a slash if there is one */
+void BLI_del_slash(char *string) {
+ int len = strlen(string);
+ while (len) {
+#ifdef WIN32
+ if (string[len-1]=='\\') {
+#else
+ if (string[len-1]=='/') {
+#endif
+ string[len-1] = '\0';
+ len--;
+ } else {
+ break;
+ }
+ }
+}
static int add_win32_extension(char *name)
{
diff --git a/source/blender/blenlib/intern/uvproject.c b/source/blender/blenlib/intern/uvproject.c
index cc115d52928..b08f05b4fc8 100644
--- a/source/blender/blenlib/intern/uvproject.c
+++ b/source/blender/blenlib/intern/uvproject.c
@@ -60,7 +60,9 @@ void project_from_camera(float target[2], float source[3], UvCameraInfo *uci)
target[1]= pv4[1] / uci->camsize;
}
else {
- float vec2d[2]= {pv4[0], pv4[2]}; /* 2D position from the camera */
+ float vec2d[2]; /* 2D position from the camera */
+ vec2d[0]= pv4[0];
+ vec2d[1]= pv4[2];
target[0]= angle * (M_PI / uci->camangle);
target[1]= pv4[1] / (len_v2(vec2d) * uci->camsize);
}
diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt
index 144b1d1b1a1..11bb3b14677 100644
--- a/source/blender/blenloader/CMakeLists.txt
+++ b/source/blender/blenloader/CMakeLists.txt
@@ -30,7 +30,6 @@ SET(INC
../blenkernel
../makesdna
../readblenfile
- ../include
../makesrna
../render/extern/include
../../../intern/guardedalloc
diff --git a/source/blender/blenloader/SConscript b/source/blender/blenloader/SConscript
index bab08c89b57..87cfc47b4de 100644
--- a/source/blender/blenloader/SConscript
+++ b/source/blender/blenloader/SConscript
@@ -12,6 +12,6 @@ incs += ' ' + env['BF_ZLIB_INC']
defs = []
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
- env.BlenderLib ( 'bf_blenloader', sources, Split(incs), defs, libtype=['core','player'], priority = [167,30], cc_compileflags=['/WX'] )
+ env.BlenderLib ( 'bf_blenloader', sources, Split(incs), defs, libtype=['core','player'], priority = [167,30]) #, cc_compileflags=['/WX'] )
else:
env.BlenderLib ( 'bf_blenloader', sources, Split(incs), defs, libtype=['core','player'], priority = [167,30] )
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index cb39fc0ad37..2700c09ce4f 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -39,7 +39,6 @@
#ifndef WIN32
#include // for read close
- #include // for MAXPATHLEN
#else
#include // for open close read
#include "winsock2.h"
@@ -589,20 +588,16 @@ static void bh8_from_bh4(BHead *bhead, BHead4 *bhead4)
static BHeadN *get_bhead(FileData *fd)
{
- BHead8 bhead8;
- BHead4 bhead4;
- BHead bhead;
BHeadN *new_bhead = 0;
int readsize;
if (fd) {
if ( ! fd->eof) {
-
- /* not strictly needed but shuts valgrind up
+ /* initializing to zero isn't strictly needed but shuts valgrind up
* since uninitialized memory gets compared */
- memset(&bhead8, 0, sizeof(BHead8));
- memset(&bhead4, 0, sizeof(BHead4));
- memset(&bhead, 0, sizeof(BHead));
+ BHead8 bhead8= {0};
+ BHead4 bhead4= {0};
+ BHead bhead= {0};
// First read the bhead structure.
// Depending on the platform the file was written on this can
@@ -1981,9 +1976,13 @@ static void direct_link_animdata(FileData *fd, AnimData *adt)
link_list(fd, &adt->nla_tracks);
direct_link_nladata(fd, &adt->nla_tracks);
- /* clear temp pointers that may have been set... */
- // TODO: it's probably only a small cost to reload this anyway...
- adt->actstrip= NULL;
+ /* relink active strip - even though strictly speaking this should only be used
+ * if we're in 'tweaking mode', we need to be able to have this loaded back for
+ * undo, but also since users may not exit tweakmode before saving (#24535)
+ */
+ // TODO: it's not really nice that anyone should be able to save the file in this
+ // state, but it's going to be too hard to enforce this single case...
+ adt->actstrip= newdataadr(fd, adt->actstrip);
}
/* ************ READ MOTION PATHS *************** */
@@ -8349,7 +8348,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
if(sce->r.mode & R_PANORAMA) {
- /* all these checks to ensure saved files with cvs version keep working... */
+ /* all these checks to ensure saved files with svn version keep working... */
if(sce->r.xsch < sce->r.ysch) {
Object *obc= newlibadr(fd, lib, sce->camera);
if(obc && obc->type==OB_CAMERA) {
@@ -11277,7 +11276,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
Brush *br;
for(br= main->brush.first; br; br= br->id.next) {
if(br->ob_mode==0)
- br->ob_mode= (OB_MODE_SCULPT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_VERTEX_PAINT);
+ br->ob_mode= OB_MODE_ALL_PAINT;
}
}
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 55d83fea970..5d89f17327f 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -507,7 +507,7 @@ static void write_renderinfo(WriteData *wd, Main *mainvar) /* for renderdeamon
data[1]= sce->r.efra;
memset(data+2, 0, sizeof(int)*6);
- strncpy((char *)(data+2), sce->id.name+2, 21);
+ BLI_strncpy((char *)(data+2), sce->id.name+2, sizeof(sce->id.name)-2);
writedata(wd, REND, 32, data);
}
diff --git a/source/blender/collada/AnimationImporter.cpp b/source/blender/collada/AnimationImporter.cpp
index 32390fe01eb..c7267bd46f8 100644
--- a/source/blender/collada/AnimationImporter.cpp
+++ b/source/blender/collada/AnimationImporter.cpp
@@ -131,7 +131,7 @@ void AnimationImporter::animation_to_fcurves(COLLADAFW::AnimationCurve *curve)
}
break;
default:
- fprintf(stderr, "Output dimension of %d is not yet supported (animation id = %s)\n", dim, curve->getOriginalId().c_str());
+ fprintf(stderr, "Output dimension of %d is not yet supported (animation id = %s)\n", (int)dim, curve->getOriginalId().c_str());
}
for (std::vector::iterator it = fcurves.begin(); it != fcurves.end(); it++)
@@ -221,7 +221,7 @@ AnimationImporter::~AnimationImporter()
free_fcurve(*it);
if (unused_curves.size())
- fprintf(stderr, "removed %u unused curves\n", unused_curves.size());
+ fprintf(stderr, "removed %d unused curves\n", (int)unused_curves.size());
}
bool AnimationImporter::write_animation(const COLLADAFW::Animation* anim)
@@ -403,7 +403,7 @@ void AnimationImporter::read_node_transform(COLLADAFW::Node *node, Object *ob)
TransformReader::get_node_mat(mat, node, &uid_animated_map, ob);
if (ob) {
copy_m4_m4(ob->obmat, mat);
- object_apply_mat4(ob, ob->obmat);
+ object_apply_mat4(ob, ob->obmat, 0);
}
}
@@ -564,7 +564,7 @@ Object *AnimationImporter::translate_animation(COLLADAFW::Node *node,
}
}
else {
- fprintf(stderr, "expected %d curves, got %u\n", xyz ? 3 : 1, curves.size());
+ fprintf(stderr, "expected %d curves, got %d\n", xyz ? 3 : 1, (int)curves.size());
}
}
}
@@ -902,7 +902,7 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float
if (type == COLLADAFW::Transformation::ROTATE) {
if (curves.size() != 1) {
- fprintf(stderr, "expected 1 curve, got %u\n", curves.size());
+ fprintf(stderr, "expected 1 curve, got %d\n", (int)curves.size());
return false;
}
@@ -924,9 +924,9 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float
if ((!is_xyz && curves.size() != 1) || (is_xyz && curves.size() != 3)) {
if (is_xyz)
- fprintf(stderr, "%s: expected 3 curves, got %u\n", path, curves.size());
+ fprintf(stderr, "%s: expected 3 curves, got %d\n", path, (int)curves.size());
else
- fprintf(stderr, "%s: expected 1 curve, got %u\n", path, curves.size());
+ fprintf(stderr, "%s: expected 1 curve, got %d\n", path, (int)curves.size());
return false;
}
@@ -953,7 +953,7 @@ bool AnimationImporter::evaluate_animation(COLLADAFW::Transformation *tm, float
else if (type == COLLADAFW::Transformation::MATRIX) {
// for now, of matrix animation, support only the case when all values are packed into one animation
if (curves.size() != 16) {
- fprintf(stderr, "%s: expected 16 curves, got %u\n", path, curves.size());
+ fprintf(stderr, "%s: expected 16 curves, got %d\n", path, (int)curves.size());
return false;
}
diff --git a/source/blender/collada/CMakeLists.txt b/source/blender/collada/CMakeLists.txt
index bcc407b6b68..98d9780a92e 100644
--- a/source/blender/collada/CMakeLists.txt
+++ b/source/blender/collada/CMakeLists.txt
@@ -24,6 +24,8 @@
#
# ***** END GPL LICENSE BLOCK *****
+REMOVE_STRICT_FLAGS()
+
SET(INC
.
../blenlib
diff --git a/source/blender/collada/DocumentExporter.cpp b/source/blender/collada/DocumentExporter.cpp
index 9062bd4ba9f..66a0b0cbdd4 100644
--- a/source/blender/collada/DocumentExporter.cpp
+++ b/source/blender/collada/DocumentExporter.cpp
@@ -904,7 +904,7 @@ protected:
void DocumentExporter::exportCurrentScene(Scene *sce, const char* filename)
{
PointerRNA sceneptr, unit_settings;
- PropertyRNA *system, *scale;
+ PropertyRNA *system; /* unused , *scale; */
clear_global_id_map();
diff --git a/source/blender/collada/DocumentImporter.cpp b/source/blender/collada/DocumentImporter.cpp
index bc5653c8c45..86609d11c02 100644
--- a/source/blender/collada/DocumentImporter.cpp
+++ b/source/blender/collada/DocumentImporter.cpp
@@ -219,7 +219,7 @@ public:
if (libnode_ob.size()) {
Scene *sce = CTX_data_scene(mContext);
- fprintf(stderr, "got %u library nodes to free\n", libnode_ob.size());
+ fprintf(stderr, "got %d library nodes to free\n", (int)libnode_ob.size());
// free all library_nodes
std::vector::iterator it;
for (it = libnode_ob.begin(); it != libnode_ob.end(); it++) {
diff --git a/source/blender/collada/MeshImporter.h b/source/blender/collada/MeshImporter.h
index 055c4798855..c5ab6e94561 100644
--- a/source/blender/collada/MeshImporter.h
+++ b/source/blender/collada/MeshImporter.h
@@ -72,6 +72,8 @@ class MeshImporter : public MeshImporterBase
{
private:
+ UnitConverter *unitconverter;
+
Scene *scene;
ArmatureImporter *armature_importer;
@@ -120,8 +122,6 @@ private:
bool flat_face(unsigned int *nind, COLLADAFW::MeshVertexData& nor, int count);
- UnitConverter *unitconverter;
-
public:
MeshImporter(UnitConverter *unitconv, ArmatureImporter *arm, Scene *sce);
diff --git a/source/blender/collada/SkinInfo.cpp b/source/blender/collada/SkinInfo.cpp
index ba9451ecf84..b052f283e62 100644
--- a/source/blender/collada/SkinInfo.cpp
+++ b/source/blender/collada/SkinInfo.cpp
@@ -215,7 +215,7 @@ void SkinInfo::link_armature(bContext *C, Object *ob, std::mapobject = ob_arm;
copy_m4_m4(ob->obmat, bind_shape_matrix);
- object_apply_mat4(ob, ob->obmat);
+ object_apply_mat4(ob, ob->obmat, 0);
#if 1
bc_set_parent(ob, ob_arm, C);
#else
diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp
index 0634c910e96..98728001eb8 100644
--- a/source/blender/collada/collada_utils.cpp
+++ b/source/blender/collada/collada_utils.cpp
@@ -88,7 +88,7 @@ int bc_set_parent(Object *ob, Object *par, bContext *C, bool is_parent_space)
}
// apply child obmat (i.e. decompose it into rot/loc/size)
- object_apply_mat4(ob, ob->obmat);
+ object_apply_mat4(ob, ob->obmat, 0);
// compute parentinv
what_does_parent(sce, ob, &workob);
diff --git a/source/blender/editors/animation/anim_draw.c b/source/blender/editors/animation/anim_draw.c
index 373ad5472ab..7cfe180a7bf 100644
--- a/source/blender/editors/animation/anim_draw.c
+++ b/source/blender/editors/animation/anim_draw.c
@@ -352,14 +352,13 @@ static short bezt_nlamapping_apply(KeyframeEditData *ked, BezTriple *bezt)
*/
void ANIM_nla_mapping_apply_fcurve (AnimData *adt, FCurve *fcu, short restore, short only_keys)
{
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
KeyframeEditFunc map_cb;
/* init edit data
* - AnimData is stored in 'data'
* - only_keys is stored in 'i1'
*/
- memset(&ked, 0, sizeof(KeyframeEditData));
ked.data= (void *)adt;
ked.i1= (int)only_keys;
diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c
index 055ee1c3392..2f5ad28c8f2 100644
--- a/source/blender/editors/animation/anim_markers.c
+++ b/source/blender/editors/animation/anim_markers.c
@@ -376,7 +376,7 @@ static void MARKER_OT_add(wmOperatorType *ot)
/* api callbacks */
ot->exec= ed_marker_add;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -667,7 +667,7 @@ static void MARKER_OT_move(wmOperatorType *ot)
ot->exec= ed_marker_move_exec;
ot->invoke= ed_marker_move_invoke;
ot->modal= ed_marker_move_modal;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER;
@@ -755,7 +755,7 @@ static void MARKER_OT_duplicate(wmOperatorType *ot)
ot->exec= ed_marker_duplicate_exec;
ot->invoke= ed_marker_duplicate_invoke;
ot->modal= ed_marker_move_modal;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -870,7 +870,7 @@ static void MARKER_OT_select(wmOperatorType *ot)
/* api callbacks */
ot->invoke= ed_marker_select_invoke;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -958,7 +958,7 @@ static void MARKER_OT_select_border(wmOperatorType *ot)
ot->invoke= WM_border_select_invoke;
ot->modal= WM_border_select_modal;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1021,7 +1021,7 @@ static void MARKER_OT_select_all(wmOperatorType *ot)
/* api callbacks */
ot->exec= ed_marker_select_all_exec;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1069,7 +1069,7 @@ static void MARKER_OT_delete(wmOperatorType *ot)
/* api callbacks */
ot->invoke= WM_operator_confirm;
ot->exec= ed_marker_delete_exec;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1114,7 +1114,7 @@ static void MARKER_OT_make_links_scene(wmOperatorType *ot)
/* api callbacks */
ot->exec= ed_marker_make_links_scene_exec;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1163,7 +1163,7 @@ static void MARKER_OT_camera_bind(wmOperatorType *ot)
/* api callbacks */
ot->exec= ed_marker_camera_bind_exec;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c
index a80ea3e12bf..9b367481ef2 100644
--- a/source/blender/editors/animation/anim_ops.c
+++ b/source/blender/editors/animation/anim_ops.c
@@ -217,7 +217,7 @@ void ANIM_OT_previewrange_set(wmOperatorType *ot)
ot->exec= previewrange_define_exec;
ot->modal= WM_border_select_modal;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -261,7 +261,7 @@ void ANIM_OT_previewrange_clear(wmOperatorType *ot)
/* api callbacks */
ot->exec= previewrange_clear_exec;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -328,7 +328,7 @@ void ANIM_OT_time_toggle(wmOperatorType *ot)
/* api callbacks */
ot->exec= toggle_time_exec;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_animview_active;
}
/* ************************** registration **********************************/
diff --git a/source/blender/editors/animation/drivers.c b/source/blender/editors/animation/drivers.c
index 6ace48dd301..a6bdc8d36d4 100644
--- a/source/blender/editors/animation/drivers.c
+++ b/source/blender/editors/animation/drivers.c
@@ -364,14 +364,13 @@ short ANIM_paste_driver (ID *id, const char rna_path[], int array_index, short U
static int add_driver_button_exec (bContext *C, wmOperator *op)
{
- PointerRNA ptr;
+ PointerRNA ptr= {{0}};
PropertyRNA *prop= NULL;
char *path;
short success= 0;
int index, all= RNA_boolean_get(op->ptr, "all");
/* try to create driver using property retrieved from UI */
- memset(&ptr, 0, sizeof(PointerRNA));
uiContextActiveProperty(C, &ptr, &prop, &index);
if (all)
@@ -421,14 +420,13 @@ void ANIM_OT_driver_button_add (wmOperatorType *ot)
static int remove_driver_button_exec (bContext *C, wmOperator *op)
{
- PointerRNA ptr;
+ PointerRNA ptr= {{0}};
PropertyRNA *prop= NULL;
char *path;
short success= 0;
int index, all= RNA_boolean_get(op->ptr, "all");
/* try to find driver using property retrieved from UI */
- memset(&ptr, 0, sizeof(PointerRNA));
uiContextActiveProperty(C, &ptr, &prop, &index);
if (all)
@@ -474,14 +472,13 @@ void ANIM_OT_driver_button_remove (wmOperatorType *ot)
static int copy_driver_button_exec (bContext *C, wmOperator *UNUSED(op))
{
- PointerRNA ptr;
+ PointerRNA ptr= {{0}};
PropertyRNA *prop= NULL;
char *path;
short success= 0;
int index;
/* try to create driver using property retrieved from UI */
- memset(&ptr, 0, sizeof(PointerRNA));
uiContextActiveProperty(C, &ptr, &prop, &index);
if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
@@ -520,14 +517,13 @@ void ANIM_OT_copy_driver_button (wmOperatorType *ot)
static int paste_driver_button_exec (bContext *C, wmOperator *UNUSED(op))
{
- PointerRNA ptr;
+ PointerRNA ptr= {{0}};
PropertyRNA *prop= NULL;
char *path;
short success= 0;
int index;
/* try to create driver using property retrieved from UI */
- memset(&ptr, 0, sizeof(PointerRNA));
uiContextActiveProperty(C, &ptr, &prop, &index);
if (ptr.id.data && ptr.data && prop && RNA_property_animateable(&ptr, prop)) {
diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index ddd692d26ea..7f99a5e3b47 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -1439,7 +1439,7 @@ static int delete_key_button_exec (bContext *C, wmOperator *op)
{
Main *bmain= CTX_data_main(C);
Scene *scene= CTX_data_scene(C);
- PointerRNA ptr;
+ PointerRNA ptr= {{0}};
PropertyRNA *prop= NULL;
char *path;
float cfra= (float)CFRA; // XXX for now, don't bother about all the yucky offset crap
@@ -1447,7 +1447,6 @@ static int delete_key_button_exec (bContext *C, wmOperator *op)
int a, index, length, all= RNA_boolean_get(op->ptr, "all");
/* try to insert keyframe using property retrieved from UI */
- memset(&ptr, 0, sizeof(PointerRNA));
uiContextActiveProperty(C, &ptr, &prop, &index);
if (ptr.id.data && ptr.data && prop) {
diff --git a/source/blender/editors/animation/keyingsets.c b/source/blender/editors/animation/keyingsets.c
index 57617651823..aec35df5dd5 100644
--- a/source/blender/editors/animation/keyingsets.c
+++ b/source/blender/editors/animation/keyingsets.c
@@ -286,7 +286,7 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
KeyingSet *ks = NULL;
PropertyRNA *prop= NULL;
- PointerRNA ptr;
+ PointerRNA ptr= {{0}};
char *path = NULL;
short success= 0;
int index=0, pflag=0;
@@ -322,7 +322,6 @@ static int add_keyingset_button_exec (bContext *C, wmOperator *op)
ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1);
/* try to add to keyingset using property retrieved from UI */
- memset(&ptr, 0, sizeof(PointerRNA));
uiContextActiveProperty(C, &ptr, &prop, &index);
/* check if property is able to be added */
@@ -387,7 +386,7 @@ static int remove_keyingset_button_exec (bContext *C, wmOperator *op)
Scene *scene= CTX_data_scene(C);
KeyingSet *ks = NULL;
PropertyRNA *prop= NULL;
- PointerRNA ptr;
+ PointerRNA ptr= {{0}};
char *path = NULL;
short success= 0;
int index=0;
@@ -408,7 +407,6 @@ static int remove_keyingset_button_exec (bContext *C, wmOperator *op)
ks= BLI_findlink(&scene->keyingsets, scene->active_keyingset-1);
/* try to add to keyingset using property retrieved from UI */
- memset(&ptr, 0, sizeof(PointerRNA));
uiContextActiveProperty(C, &ptr, &prop, &index);
if (ptr.id.data && ptr.data && prop) {
diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c
index c8c0a4e6980..dcfc2762735 100644
--- a/source/blender/editors/armature/editarmature.c
+++ b/source/blender/editors/armature/editarmature.c
@@ -170,7 +170,7 @@ EditBone *make_boneList(ListBase *edbo, ListBase *bones, EditBone *parent, Bone
/* Copy relevant data from bone to eBone */
eBone->parent= parent;
- BLI_strncpy(eBone->name, curBone->name, 32);
+ BLI_strncpy(eBone->name, curBone->name, sizeof(eBone->name));
eBone->flag = curBone->flag;
/* fix selection flags */
@@ -332,9 +332,9 @@ void ED_armature_from_edit(Object *obedit)
newBone= MEM_callocN(sizeof(Bone), "bone");
eBone->temp= newBone; /* Associate the real Bones with the EditBones */
- BLI_strncpy(newBone->name, eBone->name, 32);
- memcpy(newBone->head, eBone->head, sizeof(float)*3);
- memcpy(newBone->tail, eBone->tail, sizeof(float)*3);
+ BLI_strncpy(newBone->name, eBone->name, sizeof(newBone->name));
+ memcpy(newBone->head, eBone->head, sizeof(newBone->head));
+ memcpy(newBone->tail, eBone->tail, sizeof(newBone->tail));
newBone->flag= eBone->flag;
if (eBone == arm->act_edbone) {
@@ -509,28 +509,23 @@ static EditBone *editbone_name_exists (ListBase *edbo, const char *name)
void unique_editbone_name (ListBase *edbo, char *name, EditBone *bone)
{
EditBone *dupli;
- char tempname[64];
- int number;
- char *dot;
dupli = editbone_name_exists(edbo, name);
if (dupli && bone != dupli) {
- /* Strip off the suffix, if it's a number */
- number= strlen(name);
- if (number && isdigit(name[number-1])) {
- dot= strrchr(name, '.'); // last occurrence
- if (dot)
- *dot=0;
- }
-
- for (number = 1; number <= 999; number++) {
- sprintf(tempname, "%s.%03d", name, number);
- if (!editbone_name_exists(edbo, tempname)) {
- BLI_strncpy(name, tempname, 32);
- return;
+ /* note: this block is used in other places, when changing logic apply to all others, search this message */
+ char tempname[sizeof(bone->name)];
+ char left[sizeof(bone->name)];
+ int number;
+ int len= BLI_split_name_num(left, &number, name);
+ do { /* nested while loop looks bad but likely it wont run most times */
+ while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) {
+ if(len > 0) left[--len]= '\0'; /* word too long */
+ else number= 0; /* reset, must be a massive number */
}
- }
+ } while(number++, ((dupli= editbone_name_exists(edbo, tempname)) && bone != dupli));
+
+ BLI_strncpy(name, tempname, sizeof(bone->name));
}
}
@@ -546,7 +541,7 @@ static void applyarmature_fix_boneparents (Scene *scene, Object *armob)
/* apply current transform from parent (not yet destroyed),
* then calculate new parent inverse matrix
*/
- object_apply_mat4(ob, ob->obmat);
+ object_apply_mat4(ob, ob->obmat, FALSE);
what_does_parent(scene, ob, &workob);
invert_m4_m4(ob->parentinv, workob.obmat);
@@ -681,7 +676,7 @@ static int pose_visual_transform_apply_exec (bContext *C, wmOperator *UNUSED(op)
invert_m4_m4(imat, pchan->pose_mat);
mul_m4_m4m4(delta_mat, mat, imat);
- pchan_apply_mat4(pchan, delta_mat);
+ pchan_apply_mat4(pchan, delta_mat, TRUE);
where_is_pose_bone(scene, ob, pchan, CFRA, 1);
}
@@ -763,7 +758,7 @@ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChann
for (achan= act->chanbase.first; achan; achan= achan->next) {
if (strcmp(achan->name, pchan->name)==0)
- BLI_strncpy(achan->name, curbone->name, 32);
+ BLI_strncpy(achan->name, curbone->name, sizeof(achan->name));
}
}
}
@@ -807,7 +802,7 @@ static void joined_armature_fix_links(Object *tarArm, Object *srcArm, bPoseChann
if (ob->partype==PARBONE) {
/* bone name in object */
if (!strcmp(ob->parsubstr, pchan->name))
- BLI_strncpy(ob->parsubstr, curbone->name, 32);
+ BLI_strncpy(ob->parsubstr, curbone->name, sizeof(ob->parsubstr));
}
/* make tar armature be new parent */
@@ -1364,8 +1359,9 @@ static EditBone *editbone_get_child(bArmature *arm, EditBone *pabone, short use_
for (curbone= arm->edbo->first; curbone; curbone= curbone->next) {
if (curbone->parent == pabone) {
if (use_visibility) {
- if ((arm->layer & curbone->layer) && !(pabone->flag & BONE_HIDDEN_A))
+ if ((arm->layer & curbone->layer) && !(pabone->flag & BONE_HIDDEN_A)) {
chbone = curbone;
+ }
}
else
chbone = curbone;
@@ -1892,7 +1888,7 @@ void ARMATURE_OT_delete(wmOperatorType *ot)
* toggle==2: only active tag
* toggle==3: swap (no test)
*/
-void ED_armature_deselectall(Object *obedit, int toggle)
+void ED_armature_deselect_all(Object *obedit, int toggle)
{
bArmature *arm= obedit->data;
EditBone *eBone;
@@ -1919,7 +1915,7 @@ void ED_armature_deselectall(Object *obedit, int toggle)
for (eBone=arm->edbo->first;eBone;eBone=eBone->next) {
if (sel==3) {
/* invert selection of bone */
- if ((arm->layer & eBone->layer) && (eBone->flag & BONE_HIDDEN_A)==0) {
+ if(EBONE_VISIBLE(arm, eBone)) {
eBone->flag ^= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
if(arm->act_edbone==eBone)
arm->act_edbone= NULL;
@@ -1927,7 +1923,7 @@ void ED_armature_deselectall(Object *obedit, int toggle)
}
else if (sel==1) {
/* select bone */
- if(arm->layer & eBone->layer && (eBone->flag & BONE_HIDDEN_A)==0) {
+ if(EBONE_VISIBLE(arm, eBone)) {
eBone->flag |= (BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
if(eBone->parent)
eBone->parent->flag |= (BONE_TIPSEL);
@@ -1945,6 +1941,20 @@ void ED_armature_deselectall(Object *obedit, int toggle)
ED_armature_sync_selection(arm->edbo);
}
+void ED_armature_deselect_all_visible(Object *obedit)
+{
+ bArmature *arm= obedit->data;
+ EditBone *ebone;
+
+ for (ebone= arm->edbo->first; ebone; ebone= ebone->next) {
+ /* first and foremost, bone must be visible and selected */
+ if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE)==0) {
+ ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
+ }
+ }
+
+ ED_armature_sync_selection(arm->edbo);
+}
/* context: editmode armature in view3d */
int mouse_armature(bContext *C, short mval[2], int extend)
@@ -1963,7 +1973,7 @@ int mouse_armature(bContext *C, short mval[2], int extend)
if (nearBone) {
if (!extend)
- ED_armature_deselectall(obedit, 0);
+ ED_armature_deselect_all(obedit, 0);
/* by definition the non-root connected bones have no root point drawn,
so a root selection needs to be delivered to the parent tip */
@@ -2321,7 +2331,7 @@ EditBone *ED_armature_edit_bone_add(bArmature *arm, char *name)
{
EditBone *bone= MEM_callocN(sizeof(EditBone), "eBone");
- BLI_strncpy(bone->name, name, 32);
+ BLI_strncpy(bone->name, name, sizeof(bone->name));
unique_editbone_name(arm->edbo, bone->name, NULL);
BLI_addtail(arm->edbo, bone);
@@ -2360,7 +2370,7 @@ void add_primitive_bone(Scene *scene, View3D *v3d, RegionView3D *rv3d)
mul_m3_m3m3(totmat, obmat, viewmat);
invert_m3_m3(imat, totmat);
- ED_armature_deselectall(obedit, 0);
+ ED_armature_deselect_all(obedit, 0);
/* Create a bone */
bone= ED_armature_edit_bone_add(obedit->data, "Bone");
@@ -2413,7 +2423,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *UNUSED(op))
to_root= 1;
}
- ED_armature_deselectall(obedit, 0);
+ ED_armature_deselect_all(obedit, 0);
/* we re-use code for mirror editing... */
flipbone= NULL;
@@ -2653,7 +2663,7 @@ EditBone *duplicateEditBoneObjects(EditBone *curBone, char *name, ListBase *edit
if (name != NULL)
{
- BLI_strncpy(eBone->name, name, 32);
+ BLI_strncpy(eBone->name, name, sizeof(eBone->name));
}
unique_editbone_name(editbones, eBone->name, NULL);
@@ -3497,7 +3507,7 @@ static int armature_extrude_exec(bContext *C, wmOperator *op)
newbone->segments= 1;
newbone->layer= ebone->layer;
- BLI_strncpy (newbone->name, ebone->name, 32);
+ BLI_strncpy (newbone->name, ebone->name, sizeof(newbone->name));
if (flipbone && forked) { // only set if mirror edit
if (strlen(newbone->name)<30) {
@@ -3580,7 +3590,7 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op)
mul_m3_m3m3(totmat, obmat, viewmat);
invert_m3_m3(imat, totmat);
- ED_armature_deselectall(obedit, 0);
+ ED_armature_deselect_all(obedit, 0);
/* Create a bone */
bone= ED_armature_edit_bone_add(obedit->data, name);
@@ -4446,7 +4456,7 @@ void ED_pose_deselectall (Object *ob, int test)
/* Determine if we're selecting or deselecting */
if (test==1) {
for (pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
- if ((pchan->bone->layer & arm->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) {
+ if (PBONE_VISIBLE(arm, pchan->bone)) {
if (pchan->bone->flag & BONE_SELECTED)
break;
}
@@ -5389,29 +5399,22 @@ void POSE_OT_reveal(wmOperatorType *ot)
/* ************* RENAMING DISASTERS ************ */
/* note: there's a unique_editbone_name() too! */
-void unique_bone_name (bArmature *arm, char *name)
-{
- char tempname[64];
- int number;
- char *dot;
-
+static void unique_bone_name (bArmature *arm, char *name)
+{
if (get_named_bone(arm, name)) {
-
- /* Strip off the suffix, if it's a number */
- number= strlen(name);
- if(number && isdigit(name[number-1])) {
- dot= strrchr(name, '.'); // last occurrence
- if (dot)
- *dot=0;
- }
-
- for (number = 1; number <=999; number++) {
- sprintf (tempname, "%s.%03d", name, number);
- if (!get_named_bone(arm, tempname)) {
- BLI_strncpy (name, tempname, 32);
- return;
+ /* note: this block is used in other places, when changing logic apply to all others, search this message */
+ char tempname[sizeof(((Bone *)NULL)->name)];
+ char left[sizeof(((Bone *)NULL)->name)];
+ int number;
+ int len= BLI_split_name_num(left, &number, name);
+ do { /* nested while loop looks bad but likely it wont run most times */
+ while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) {
+ if(len > 0) left[--len]= '\0'; /* word too long */
+ else number= 0; /* reset, must be a massive number */
}
- }
+ } while(number++, get_named_bone(arm, tempname));
+
+ BLI_strncpy(name, tempname, sizeof(tempname));
}
}
diff --git a/source/blender/editors/armature/editarmature_retarget.c b/source/blender/editors/armature/editarmature_retarget.c
index e80f1494d8c..749443b276c 100644
--- a/source/blender/editors/armature/editarmature_retarget.c
+++ b/source/blender/editors/armature/editarmature_retarget.c
@@ -1637,7 +1637,7 @@ static EditBone *add_editbonetolist(char *name, ListBase *list)
{
EditBone *bone= MEM_callocN(sizeof(EditBone), "eBone");
- BLI_strncpy(bone->name, name, 32);
+ BLI_strncpy(bone->name, name, sizeof(bone->name));
unique_editbone_name(list, bone->name, NULL);
BLI_addtail(list, bone);
diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c
index a595396b15d..d1430808fca 100644
--- a/source/blender/editors/armature/poselib.c
+++ b/source/blender/editors/armature/poselib.c
@@ -407,15 +407,13 @@ static EnumPropertyItem *poselib_stored_pose_itemf(bContext *C, PointerRNA *UNUS
Object *ob= ED_object_pose_armature(CTX_data_active_object(C));
bAction *act= (ob) ? ob->poselib : NULL;
TimeMarker *marker;
- EnumPropertyItem *item= NULL, item_tmp;
+ EnumPropertyItem *item= NULL, item_tmp= {0};
int totitem= 0;
int i= 0;
if (C==NULL) {
return DummyRNA_DEFAULT_items;
}
-
- memset(&item_tmp, 0, sizeof(item_tmp));
/* check that the action exists */
if (act) {
@@ -708,7 +706,7 @@ static void poselib_apply_pose (tPoseLib_PreviewData *pld)
bAction *act= pld->act;
bActionGroup *agrp;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
KeyframeEditFunc group_ok_cb;
int frame= 1;
@@ -721,7 +719,6 @@ static void poselib_apply_pose (tPoseLib_PreviewData *pld)
/* init settings for testing groups for keyframes */
group_ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE);
- memset(&ked, 0, sizeof(KeyframeEditData));
ked.f1= ((float)frame) - 0.5f;
ked.f2= ((float)frame) + 0.5f;
diff --git a/source/blender/editors/armature/poseobject.c b/source/blender/editors/armature/poseobject.c
index ecb34609b2d..1bfbe869e6b 100644
--- a/source/blender/editors/armature/poseobject.c
+++ b/source/blender/editors/armature/poseobject.c
@@ -439,7 +439,7 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op)
if (pchan->parent == NULL) continue;
else pabone= pchan->parent->bone;
- if ((arm->layer & pabone->layer) && !(pabone->flag & BONE_HIDDEN_P)) {
+ if (PBONE_VISIBLE(arm, pabone)) {
if (!add_to_sel) curbone->flag &= ~BONE_SELECTED;
pabone->flag |= BONE_SELECTED;
arm->act_bone= pabone;
@@ -452,7 +452,7 @@ static int pose_select_hierarchy_exec(bContext *C, wmOperator *op)
if (pchan->child == NULL) continue;
else chbone = pchan->child->bone;
- if ((arm->layer & chbone->layer) && !(chbone->flag & BONE_HIDDEN_P)) {
+ if (PBONE_VISIBLE(arm, chbone)) {
if (!add_to_sel) curbone->flag &= ~BONE_SELECTED;
chbone->flag |= BONE_SELECTED;
arm->act_bone= chbone;
@@ -1682,11 +1682,9 @@ void ARMATURE_OT_armature_layers (wmOperatorType *ot)
/* Present a popup to get the layers that should be used */
static int pose_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt)
{
- int layers[32]; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */
-
- /* get layers that are active already */
- memset(&layers, 0, sizeof(layers)); /* set all layers to be off by default */
+ int layers[32]= {0}; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */
+ /* get layers that are active already */
CTX_DATA_BEGIN(C, bPoseChannel *, pchan, selected_pose_bones)
{
short bit;
@@ -1756,11 +1754,9 @@ void POSE_OT_bone_layers (wmOperatorType *ot)
/* Present a popup to get the layers that should be used */
static int armature_bone_layers_invoke (bContext *C, wmOperator *op, wmEvent *evt)
{
- int layers[32]; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */
+ int layers[32]= {0}; /* hardcoded for now - we can only have 32 armature layers, so this should be fine... */
/* get layers that are active already */
- memset(&layers, 0, sizeof(layers)); /* set all layers to be off by default */
-
CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones)
{
short bit;
diff --git a/source/blender/editors/datafiles/splash.png.c b/source/blender/editors/datafiles/splash.png.c
index de4fcb8f865..82a8d54b837 100644
--- a/source/blender/editors/datafiles/splash.png.c
+++ b/source/blender/editors/datafiles/splash.png.c
@@ -1,6820 +1,5461 @@
/* DataToC output of file */
-int datatoc_splash_png_size= 218043;
+int datatoc_splash_png_size= 174539;
char datatoc_splash_png[]= {
-137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0,
- 0, 0, 8, 90,206, 70, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 10, 79,105,
- 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84,
- 83,233, 22, 61,247,222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,
-161,217, 21, 81,193, 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,
-136,138,202,251,225,123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,
-128, 12,169, 66, 30, 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126,
- 60, 60, 43, 34,192, 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,
-116,145, 56, 75, 8,128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0,
- 80, 45, 0, 96, 39,127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59,
- 0,172,207, 86,138, 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,
-178, 0, 8, 12, 0, 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,
-231, 42, 0, 0,120,153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,
-154, 64, 46,194,121,153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,
-182, 14, 95, 45,234,191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,
-128,109,254,162, 37,238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,
-144,185,217,217,229,228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,
-226, 36,129, 50, 93,129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211,
- 34,196, 73, 98,185, 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,
-251, 3, 62,223, 53, 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,
-212, 40, 8, 3,128,104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179,
- 63,199, 8, 0, 0, 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194,
- 66, 16, 66, 10,100,128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14,
- 46,194, 85,184, 14, 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142,
- 8, 23,153,133,248, 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,
-114, 2, 57,135, 92, 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132,
- 70,162, 11,208,100,116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,
-232, 24, 7, 51,196,108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245,
- 99,207,177,119, 4, 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218,
- 9, 55, 9, 3,132, 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47,
- 16,123,136, 67,196, 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52,
- 72, 26, 35,147,201,218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98,
- 64,113,164,248, 83,226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,
-143, 90, 66,173,161,182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,
-175,232,116,186, 17,221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,
-155, 24, 7, 24,103, 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182,
- 42,124, 21,145,202, 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,
-174, 70, 85, 51, 83,227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126,
- 89,253,137, 6, 89,195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129,
- 53,196, 38,177,205,217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,
-227,152,113,248,156,116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,
-151,150, 88,171, 72,171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,
-143,206, 5,157,231, 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,
-158,190, 94,128,158, 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219,
- 12,206, 24, 60,197, 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,
-213, 70,141, 70, 15,140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166,
- 41,166, 59, 76, 59, 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90,
- 44,182,168,182,184,101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,
-187,173,187,167, 17,167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,
-125, 97,103, 98, 23,103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,
-114, 20, 58, 86, 58,222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157,
- 83,155,211, 71,103, 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113,
- 93,225,122,210,245,157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,
-200, 67,224, 81,229,209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,
-165,119,170,247, 97,239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,
-158, 95,133,223, 67,127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,
-142, 63, 58,219,101,246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,
-152,206,145,206,105, 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,
-209, 49,151, 53,119,209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218,
- 55,186, 52,186, 63,198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,
-157,226, 11,227,123, 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240,
- 65, 16, 42,168, 22,140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72,
- 42, 77,122,146,236,145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,
-109, 50, 61, 58,189, 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,
-183, 47, 30,149, 7,201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,
-202, 57,150,171,158, 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,
-230,189,172,106, 57,178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,
-126,189, 38,122, 77,107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,
-181, 97,250,134,157, 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,
-171,196,185,100,207,102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,
-246, 69,219, 47,151,205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84,
- 54,238,210,221,181, 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,
-102,213,101,251, 73,251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,
-215,185,212,213, 29,210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,
-112, 68,121,228,233,247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,
-155, 83,154,251, 91, 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,
-233,130,211,147,103,242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,
-225,210, 69,255,139,231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,
-147,211, 79,199,187,156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,
-214,213,158, 57, 61,221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188,
- 95,244, 64,237, 65,217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,
-145,245,143, 15, 67, 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158,
- 23,254,162,254,203,174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,
-175,219,198,194,198, 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,
-104,249,177,245, 83,208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0,
-122, 37, 0, 0,128,131, 0, 0,249,255, 0, 0,128,233, 0, 0,117, 48, 0, 0,234, 96, 0, 0, 58,152, 0, 0, 23,111,146, 95,
-197, 70, 0, 3, 72,230, 73, 68, 65, 84,120,218,236,253,121,152,109,217, 89,222, 9,254,214, 90,123, 56,251, 76, 49, 71,220, 49,
-103, 73, 41, 52, 66, 74,128,177,193,137,157, 52, 5, 24, 99, 99,167,120,112,151,241,227, 1,169,202,213, 3,174,110, 36,185,203,
-213,118, 85, 25,131,178,236,198,116,217, 84,145, 6,187, 41,219,101,140,192,216,198, 54, 96, 37, 34, 65, 18,160, 33, 65,179,114,
-188,202,241,222, 27,115,196, 25,247,176,134,254, 99,173,125,134,184,113,111, 14,202, 76, 33,113,190,124, 78,198,141,136, 19,231,
-236,125,246,218,235,253,134,247,123, 63,225,156, 99, 97, 11, 91,216,194, 22,182,176,133,125,229,155, 92,124, 4, 11, 91,216,194,
- 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176,133, 45, 64,125, 97,
- 11, 91,216,194, 22,182,176,133, 45, 64,125, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 63,
-240, 22, 93,239, 23, 66,136, 87,226,253,234, 23, 77,129,155,164, 68, 90,203,211,192, 40,252,238,101,235,175, 91,180,234, 45,108,
- 97, 11, 91,216,194, 22,160,254,202,153, 0,132,148,226,182,191,249,231,222,252,119,239,253,134, 91,255, 68, 20, 9,245,239, 63,
-241,212,135,255,206,207,125,242,127, 44,181,125,232,229, 6,246,133, 45,108, 97, 11, 91,216,194,254, 48,153,184, 94, 68,251, 10,
- 68,234, 2, 72,254,155,239,124,221,255,242,143,190,255,141, 63,232, 14,135,208, 89, 66,108,172,242, 27,159,124,234,210, 15,254,
-227, 15,253,205, 39,174,244,127, 9,208,117,176,189,136,212, 23,182,176,133, 45,108, 97, 11,123,225,246,106,214,212, 5,144,102,
-213,176,195,149, 39, 25, 95,121,134,209,227, 95, 96,244,232, 99,124,235, 27, 46,220,246, 91, 63,250, 61, 63,251, 93,111,191,248,
-183,128,149, 0,232, 98,113,121, 22,182,176,133, 45,108, 97, 11,251,131, 9,234, 0,226,199,127,253,217,159,254,199, 31,223,251,
-100,115,165, 65,164, 4,118,247, 10,163,135, 63,199,217, 44,110,252,251,255,254, 79,253,191,255,187,239,123,235, 63, 17,130,215,
- 44,128,125, 97, 11, 91,216,194, 22,182,176, 23, 9,178,175,114,250,189, 1, 44, 3,111,248,175,254,216,230, 15,253,131,239,188,
-240, 93,169,134,113, 81, 33,211, 6,209,205,119,144,108,110,240, 75, 31,126,248, 51,127,253, 39, 63,244,158,171,135,227,255, 12,
- 88, 94, 66, 42,126,145,126, 95,216,194, 22,182,176,133, 45, 64,253,149, 3,245, 89, 96, 95, 2, 46,252,177, 59, 58,127,233, 95,
-124,255,109,127,237,230, 44,106,140, 70, 21, 40,133, 60,119, 11,141,139, 23,121,226,242,126,239, 93,255,232,193, 31,253,245, 79,
- 62,247,147, 64,191,198,234,151, 3,212, 95,161,115,195, 57,119, 23,190,124, 0,112, 73, 8,113,233,171,121,241,252, 97, 59,223,
-133,125,213,172,219,197,135,176,176, 5,168,191,204, 38,129, 46,176,117,166, 27,253,233,127,253,151,110,255,111,255,216,153,214,
-153,124,108, 0,139,216,186, 64,118,211,173,148,206,242,255,252,103, 31,249,223,255,151,127,247,153,191, 5, 60,195,139, 96,199,
- 63,207,141,123, 91,120,188, 16, 59, 20, 66, 60,244, 2,223,243, 3,192, 61,225,219,247, 10, 33,222,247, 85,190, 57,126, 85,156,
-111,112, 78,238, 9, 14,202, 93, 51,191,122, 8,184, 4,188, 95, 8,113,248, 50,188,207,201,215,231,229, 94,131,215,188,231,125,
-119,191,184,181,254,238, 7, 31,226,171,220, 22,160,190,176,175,102,123,169, 45,109, 18,159, 22,239,172,181,227, 55,173,181,162,
- 53,235,166, 94,128, 8,255, 19, 66, 8, 87,255, 68,212, 63,159,252, 54, 2,154,149,113,227,191,241,159,118,126,245, 31,254,153,
-139,127,230,155, 54, 91,203,101,229,224,112,159,188,217, 38, 94,219,226,255,251,174,187,127,224,174, 59,182, 94,247, 67, 63,245,
- 91, 63,124, 52, 40, 63,204,203,211,246,118, 47,240, 99, 47,114, 19,120, 63,240,128, 16,226,254,197,178,249,170,201, 50,220, 27,
- 30,215, 3,189,218, 97,249, 41,231,220,253,193,113,249, 82,192,253, 46,224, 3, 47,225,239, 30, 0,190,237, 85, 89,235,247,221,
- 61, 93,235,239,126,240, 85, 91,235,238,190,187,231,179, 62,239,126,112,145,245, 89,216,194, 94, 37, 80, 23,128,104,165,234,174,
-191,251, 29, 55,255,189,239,127,203,230,221, 75, 89,156, 88, 33, 61, 96, 75,233, 31, 66, 32, 34, 53,247, 61, 82, 34,148,154,126,
- 47,252,239, 44,194, 85, 78, 88, 29, 69,200,153,215,209,166,194,142, 5,127,233,219,222,248, 13, 95,123,199,198, 47,254,213, 31,
-127,224,111,127,226,209,221,127, 6, 20,188,250,253,236,247, 2,247, 58,231,238, 5,222,241,114, 68,110, 11,251,178,218, 39, 94,
-228,243,223, 9,220,227,156,123,199, 75,141,154,191,130,204,175,245,251,238,246,107,253,221, 15,190, 26,107,253,199,102,156,168,
-247, 2,239, 91, 44,209,133, 45,236,213,139,212, 55,238,251,238, 91,127,252,175,127,211,249,111, 46, 71, 22,103, 5, 74, 10, 31,
-192, 59,225, 31, 72,132, 21, 30,122, 29, 32,133,143,237,173, 3, 21,210,251,210,255, 78, 9, 33, 34, 41,212, 36, 45, 38,234,191,
-115, 88, 33, 40, 70, 37,111,190,121,115,227, 3,127,239,123,255,209, 95,255,201,223,120,205,191,250,224,163, 63, 10,236,242,242,
-137,213, 60,112,131,223,221,115,202,247, 31,112,206,125,219, 2,216,191,106,236,161, 16,157, 62, 36,132,120, 32, 68,242, 43,225,
- 90,191,115,102, 13,220, 6,252,188,115,238,109, 47,211,181,191, 31,159,222,127, 62,123, 57,215,217,139, 95,235,247,221,253,109,
-175, 18,176, 47,108, 97, 11,251,114, 68,234,105, 44,111,251, 83,175, 95,121,187, 27, 86, 84,121, 1,214,122,144,158,100,214,235,
-120, 94, 76,113, 87, 73,228,218,102, 0,119,139,144,128, 13, 89,124, 1, 19,132,151,214, 3,191,148, 96, 0,229, 95,162, 44, 42,
-150,146, 68,254, 31,239,254,206,191,241,246,215,157,121,211,223,252,233,143,188,187,168,204, 39, 95, 14, 96, 23, 66,220, 48,181,
- 25,162,243, 31, 99,154,166,189, 43,108,246,139,104,226, 43,219,238, 7,238, 63, 45,242, 14,160,253,126,224,253,206,185,159, 10,
-215,187, 6,246,151,235,218,191,191,118, 34, 94, 45, 19,239,126,240,198,107,221, 71,231,139,181,190,176,133,125,133,218, 75,233,
- 83, 87,101,101,247,127,238,211,187, 31, 21,178,160,149, 24, 90, 25, 52, 27, 46, 60,236,244,223,169,165, 33, 75, 48, 21, 34,109,
-122,144,183, 22,172, 61, 65, 86, 41,193,230, 96,199,224,114,160,240,223,187, 50, 60,223,225,156,165, 50, 22, 93, 24,254,198,159,
-123,251, 61, 31,184,239,207,253,219, 91,182,186,223, 27, 96,255, 21,237,183, 23, 66,188, 31, 95,211,156,141, 86,238, 93, 44,159,
-175,104,251, 54, 33,196,187, 94, 72, 42, 93, 8,241,174, 19, 17,245,123,190, 90, 63, 20,241,238, 7, 23,107,125, 97, 11,251, 67,
- 22,169,227, 96,255, 61,255,238,201,191,253,159, 62,187,247,189,175, 63,147,221, 44, 64, 90,231,108,216, 22,176,206, 67,246,168,
-180,242,107,111,234,124,205, 15,126,203, 29,183, 53,162,134,180,214,130, 82, 62,182,182, 22, 87, 14, 16, 74, 32, 47,190, 5,185,
-113, 7,162,123, 6,209,232,130, 46,176,195, 93, 92,255, 10,118,247, 81,208, 99, 16, 25, 14,131,113, 96, 7, 37,223,252,198,155,
-110,250,181,251,254,220,207,252, 23,239,253, 55,234,139, 87,142,127,145, 41,121,239,149, 2,246, 75,206,185,247,207, 68,108,119,
-189, 28,175,123, 10, 35,250,161,151,137,105, 61,203,122,126, 73,237,102, 47,199,107,188, 26,231,123,226, 56, 95,208,235,189,132,
- 8,249,126,166,132,179, 21,231,220, 93, 95,173,181,117,241,238, 7, 47,185,251,238,126, 73,107,221,221,119,247,181,215,247, 85,
- 72,221,159, 32,218,189,106,239,187,176,133,125, 53,128,186, 1,134,192, 23,126,243,137,193,143,255,230, 19,131, 44, 68,203, 39,
-109,237, 59,222,188,249, 87,191,247,109,183,158,109,202, 68,106,235,124,234, 61,207,113,197, 16,204, 16,245,218,111, 38,122,219,
- 95, 64,221,250,141,215, 77, 33,184,131, 39,209, 79,252, 58,230,169,143, 32, 84, 2,206,225, 4,148,163,146,215,158, 91, 91,250,
-183,255,195,247,252,227, 63,249,195, 63,127,176,119,156,127,144, 87,126, 32,204,203,194,200, 13,192,246,206, 16, 1,221,117,202,
-239, 47, 49, 77, 13, 31, 94,231, 53,126,108,230,111,223, 47,132,184,127,230,117,223,201, 9, 70,119,120,205,247,189, 16,246,190,
-115,238,157, 33, 26,189,237,197, 30,215, 43,113,190, 55, 56,215,247,132,215,157,221,204,191, 20,166,248,141,236, 36,128,175,124,
-149,239, 13, 47,120,173, 7, 32,191,254,245,189,239,238,233,245, 61, 1,180,238,190,187, 63,112,138,227,240, 78,119,223,221,247,
- 92,231,237,222, 27,142,237,158,240,184,235,122, 78,199,141,222,119, 97, 11, 91,128,250,212, 44,144,227, 7,175,244,153, 84,189,
- 39,146,174, 78, 8,190,230,125,127,254,181,127,231,135,239,190,229,110, 83, 66,105, 12,174, 42,112,249, 8,116, 1,145, 35,253,
-206,191, 73,244,182,239,127,254,168, 97,245, 22,226,213,191,138, 60,243,102,244,199,127, 26,164,241,144, 47, 4,229,168,226,205,
-175, 57,187,254,227,255,245,221,247,253,197, 31,251,213,239, 5,158,126,133, 65,125,118, 35,127, 73,155,132,115,238, 30,224,231,
-159, 7, 20,110, 11, 81,225, 59,111,192,182,174,123,171, 1, 30, 8, 45, 90, 63,117,131,168,234, 54,124,107,214, 93, 33,157,124,
- 61,240,253, 41,174,159,110,173,143,235, 94,231,220,183,189,138,231,123,218,185,126,224, 15, 1,176,126, 57,237, 5,173,245, 0,
-190, 47,252,250,222,119,247, 59, 78,244,194,223,115,157,231,223,118,131,227,122, 39, 47,172, 77,175,126,223,247, 4,178,223, 67,
-139,203,186,176, 5,168, 95,231, 94, 6,170,240, 96, 6,208,213,205,235,141,239,254,169,239,191,243,125,223,254,218,245,215, 20,
- 99,139, 49, 21, 20, 99,208, 21, 8,135,136, 33,253,179, 63,138,122,227,119, 77, 94,172, 55, 46,248,181, 79, 62,201,175,125,234,
- 73, 14, 6, 99, 98, 37,120,253,185, 85,254,244,219,238,224,235,110, 63,235, 95,248,226,219, 17, 73,135,234,195,255, 0,146,200,
- 31,130, 20,232, 65,193,127,249, 39,223,248,181,255,226,215, 31,254,171,191,246,241, 39,127,132, 87,168,221, 45, 0,222,189, 39,
- 34,194, 23,251, 26,247,134, 13,240,100, 4,248,192,204,198, 57, 27,237,220,198,148,105,255,208,243,108,192, 63, 63,179, 17,190,
-127, 38,178,188,235,196,113,191,211, 57,119,233, 58, 66, 49, 63,118, 10,160,207,190,214,189, 51,145,209,207,127,153,206,119,229,
- 4,160, 31,206, 28,223,109,175,224,189,114,207,243, 68,238, 95,202,186,122,217,203, 47, 95,210, 49,249,200,251,121,215,122, 32,
-213,189,248,235, 59, 15,176, 15,204,172,211,149,153, 44,193,245, 50, 5,135,167,100, 20, 46,157, 56,198,219,194,245,186,109,118,
-205,184,251,238,126,219,162,255,125, 97, 11, 80,127,126,171, 83,222, 75,223,241,198,213,191,113,255, 59, 94,247,238, 11,237, 44,
- 27, 15, 13,206, 20, 80, 21,225,157, 20, 66, 15,137,255,232, 95,155, 3,244,223,125,236, 10, 63,252, 47, 63,196,165,189, 62,141,
- 52, 38,142, 36,210,193,167,158, 57,224, 23,126,231, 97,190,251,109,183,243,223,223,251,205, 52,211, 24,185,117, 39,209, 27,223,
-129,254,253,127, 6,157, 45,192,249, 34,186, 19,252, 15, 63,240, 77,127,237, 63,127,226,201, 95,112,142,207,226, 75, 4, 47, 55,
-160,255,212, 9,208,184,255, 69,190,198,109,225, 53,102, 55,163,119,157, 82,219,125,223,137,232,182,126,239,183,221,224,229,223,
- 51, 3,192,239, 58, 9, 10,225,189,127,126,102,115,125,143,115,110, 46,213, 29, 82,238,239, 60,177, 57,191,227, 68, 29,125,246,
-216,238,249, 50,157,239,123,102, 94,239,189,129,196,120,242, 90,189, 18,118,239, 43, 0,188,167, 70,184,161, 28,241,126,124, 57,
-226, 85, 5,161, 0,232,207,187,214,131, 82,221,181,215,247,221, 15, 94,123,125,231,163,249,185,235, 91,179,241, 67, 26,190, 94,
- 83,247,139,119, 63,248,190,231,201, 14,188, 15,120,255,141,162,111,119,223,221,117, 68, 63,251,190,223,198,194, 22,182, 0,245,
-231, 5,244, 91,127,232, 79,156,255,159,126,236, 59,110,249, 63, 71, 54, 98, 84, 84, 96, 74, 48,218,215,209, 5,224, 12, 98,253,
- 34,209,215,255,192,228,143, 31,187,122,200, 15,252,227, 95, 99,103,172,105,182, 50, 42,165,136, 99, 69,162, 4,202, 37, 8,163,
-249,197,143, 62,142,146,146,191,251, 23,238,246, 17,251, 29,223,138,121,228, 87,193, 12, 32,202, 64,128, 46, 43,190,246,246,205,
- 51, 95,255,250, 51,223,254,209,207, 95,253, 2, 47,114, 8,140,115,238, 61,207, 19,161,157, 4,176,119,189, 4,162,213, 79,157,
-136, 46,175,219,235, 44,132,120, 32,164,183,235,136,244, 46,231,220, 59,159,167, 30,254,128, 16,226, 29,215,121,189, 75,206,185,
-247, 50, 85, 51,171,123,176,223,127, 10, 88,214, 27,244,169,125,248, 51,199,246,137, 47,227,249, 94,186,222,235,189, 18, 81,110,
- 88, 31, 47,217,161,123,158, 12,203,105,118, 91,184, 30,239,113,206,189,172,242,187,238,190,187, 95,252, 90,191, 22,168, 79,191,
-190,215,169, 91,139,119, 63,248,128,187,239,238,249,235,123,223,221,239,124,169,138,117, 55, 2,252, 19,207,187, 63,212,213,235,
-117,127, 79,112, 70, 22,209,250,194, 22,160,126, 29, 64, 23,171,173,232, 79,254,228,189,183,255,253,239,123,243,250, 91,138, 28,
- 10, 81,129,245,169,118, 98, 57,121,166,171, 74,162,215,126, 11,162,189, 62,121,129,247,254,203,143,240,216,179,199,176,212,230,
-120,160, 65, 24,148,128,166, 18,172,183, 34, 86,178,136,165,165, 54,255,246, 99,143,113,247, 27,110,230,158,183,220, 10, 42, 66,
-221,246, 45,232, 79,254, 44, 98,227, 22,112, 22, 43, 4, 73,150,240,125,119,191,238,158,143,126,254,234, 63, 5, 14,120,113, 41,
-248, 23, 42,163,121, 63, 47,161,183,120, 70, 91,124,114,234,207, 7, 62, 66,136,135,130, 52,233,123,102, 54,220, 27,109,130,239,
-122,158,215,123,192, 57,247, 16,243,169,208,250,248, 78, 74,165,190,239, 70,199, 55,115,108,239,252, 50,157,239,251, 94,173, 20,
-117, 56,151, 31, 59, 17,165,191, 28,160, 94,235,202,207, 70,154,179, 26,244,147,181,233,156,187,237,122, 60,136,151, 96, 47,110,
-173,159, 2,232,129,105, 62,127,125,159,135,136, 38,222,253,224, 67,238,190,187, 95,204,122,126, 89, 44, 56, 20,179,235,254, 94,
- 22, 61,247, 11,251, 42,182,151,210,223, 93,147,226,218,223,124,123,231,191,253,200,127,243,134, 95,248,190,215,175,190,101, 52,
- 50, 24,140, 7,116, 9, 40,129, 80, 2, 17, 9,132,146,136, 72, 32,207,189,113,242, 34, 95,220, 62,226, 87, 62,249, 52, 52, 51,
-223,230, 38, 37, 40,133, 65,210, 47, 12, 95,220, 29,113,105,103, 68,229, 4, 86, 41,126,253, 51, 79, 77, 15, 96,253, 14,220,184,
- 7,232,112, 52, 14,180,229,206, 11,171,183, 3,103,121,229,230,176,223, 27,162,200, 23,155,226,157,221, 0, 15, 95, 4, 40, 60,
-112,226,189,175, 11, 16, 47, 48, 77,123, 61,130,210, 61, 39, 0,246,133, 28,223,251,191, 76,231,123,233,213,210,223, 15, 37,132,
- 89,173,246,195,231,115,158,158,199, 14,241,236,237,219,133, 16,111, 19, 66,188, 67, 8,241,190,153,199, 59,132, 16,171,225, 57,
-179, 32,249,206,224,120,189,154,118,111,136,168, 87,158,247,250,190,240,136,251,133,174,231,151,219,222,255, 2,178, 35, 11, 91,
-216, 31,202, 72,189, 78,183,159,251, 43,223,184,241,119,126,242,187,111,254,193,216, 42, 70,165, 5,229,192, 89,132, 3, 97, 5,
- 78,137,144,122,247,127, 34,162, 4,185,114,211,228,133,158,220,237, 49, 30, 85,208, 77,167,126, 66, 29, 91, 75, 9,206,113, 52,
-168,168, 74,205,133,165,136,126, 94, 77, 15,162,179, 5, 40, 40, 70,136,172,131,195,129,214,220,186,213,217, 76, 19,117,166, 40,
-205, 23, 94,228,121,189,247, 6,191,155, 37,221,172, 48,195,254,126, 17,209,226, 61,215, 1, 86, 94, 64,116, 61, 23, 53, 94,135,
- 64,246, 66, 51, 7,151,110,112,142, 47,234,181, 78, 30,219,171,120,190,175, 10,131, 57, 56,110, 39,107,222,239,253, 82,122,211,
-195,223,190, 16,177,155,247, 57,231, 30, 96,190,196,241, 99,207,227, 72,189,114,107,253, 90,153,216,151,118,125,125,212, 60, 23,
-241,191, 28,140,244,144, 57,184, 17, 99,254,158, 19,217,144,133, 45,108, 1,234,117,244,219,105,168,111,250,159,191,235,194,125,
-239,186,107,227,143,150, 37,228,177,151,124,117,198, 33, 42, 75,146, 72,142,141,177, 25, 82, 18,169, 73, 7,187, 0,112,122,242,
- 98,155, 75, 77, 84, 18, 99, 44, 65, 47,222, 5, 80, 15, 95,157, 0, 37, 25,142, 42,158,202,115,210,183,204, 28,170, 51,224, 42,
-208, 57,200, 46,194, 89,156,181,172,182,226,230, 82, 51, 89,217, 41,199, 47, 42, 3,241, 66,106,150,161,174,250, 30,166,227, 57,
- 63,192,141,201,107, 92,103, 35,185, 45,140, 44,125, 41,182,114,131, 8,240, 75,177,151,180, 73,135,231,222,245, 42,159,239, 43,
- 14,234, 1,208, 63,112,226, 60,222,245,106, 78,232, 11,229,136,247, 50, 77,151,223,230,156,187,247, 36, 49,240, 69,191,238, 11,
-168, 71,135,186,251,141,214,250,252,245,157,246,154,191, 92,235,249,133, 0,121,221,218,246,158, 69,244,189,176,133,189, 56, 80,
-175, 83,217,241,157, 91,141,191,240, 47,191,239,214,247,125,221,102,115,115, 92, 90, 72, 35, 15,232,149, 37,170, 44, 73,166,248,
-239,126,253,185, 79,221,188,156, 44,255,224, 93, 27, 55,231, 14, 68, 29,173, 87, 21,118,239,113,228,197,183, 3,240,250,243,107,
-124,195,107, 54,249,237, 47,236, 66, 20,121, 16,151, 1,208,107, 93, 56,235,255, 54, 63, 24,242,154, 51,211,251,214,245, 46, 67,
-209,195, 21,203,136, 48, 49,198,217,218, 41, 64,242, 10,164,223, 67,244,196,204, 38,251, 66,200,107,167,109, 94, 47,102,190,245,
-151,195, 14, 95,134,231,126, 37,157,239, 11, 1,244,247,126,153, 70,238,206,170,216,241,106,125,142,226,221, 15,190, 47, 68,212,
-211,181, 62, 79,108,251,178, 94,223, 16,153, 47,116, 10, 22,182,176,151, 0,234,117,186,125,243, 29,111, 93,253,225,159,248,206,
- 11,255,183, 51,141, 56, 25, 89,129,104,250, 16,220,149,150,134,117,228, 9,252, 95,127,249,169, 95,190,255, 35, 59,191,244, 51,
-239,184,229,221,194,133,204,187, 10,236,247, 72,226,182, 63, 59,121, 97, 41, 5,127,235,207,190,141,239,252,252,127,128,188,130,
- 52, 9,211,221, 2,168, 91,192, 89, 24,140,248,218,175, 57,207, 95,252,227,111,152,252,173,221,249, 2,206, 85, 8, 83,250, 39,
- 58,135, 20,142,131, 65, 62,238,141,202,254, 43, 24, 61,189, 47,168,155,213,118, 47, 47,158,236,115,163, 30,220,151, 19,112,255,
-160,216, 87,218,249,158, 4,244,251, 95, 78,246,249,139, 92,111,135, 39,200,141,117, 43,215,171, 5,236, 47,100,173,191,170,215,
- 55, 68,232, 39,117, 10,238, 15, 25,156, 75,167,165,243, 67,230,225,199, 88,216,194,254,144,131,186, 0, 68,164,196,107,127,228,
-191, 56,247, 19, 63,252, 71,206,124,187,214, 48,138, 36, 34,149, 56,235,112, 99, 67, 43, 18, 60, 89,232,252, 47,255,139, 47,254,
-244,131,143,246,254, 37, 96,159, 62,174,182, 17,238, 78, 55,137,212,129, 70, 19,243,228,135,137, 14,159, 68,172,220, 2,192,119,
-124,237, 45,220,255, 95,127, 43, 63,244, 51, 31, 98,116, 84, 64, 35, 5,229,235,233,148, 21,140,198,124,221,157, 91,252,194, 15,
-127, 23,173, 70,236,143,170, 26, 99, 62,255,139,136, 36, 5, 97,192, 89,156, 53, 32, 37, 79, 92, 61,218,205, 75,179,203, 43, 71,
-148, 3, 95,115,190,103,102,147,125,209,209,215,151, 11, 36,190, 76,246, 21,115,190, 97, 26,219, 73, 64,127,215,151,249,176,190,
-156,142,220, 11, 89,235,247,191,208, 22,179,151,201,222,121, 2,208, 23, 74,113, 11, 91,216,140,201,231, 1,245,205, 31,251,206,
-243,255,248,221,127,244,204,183,231, 26,170,102,132,200, 20,206, 2, 35, 67,171,161,248,141,203,195,237,187,127,242,225,191,253,
-224,163,189,255, 21,120, 18,120,238,145,189,252, 17,164, 0, 19, 72, 79, 74,250, 20,187, 30, 80,125,248,199,231,222,228, 7,255,
-228, 27,248,157, 31,253,243,252,208,159,122, 19,183,174,166, 52, 92, 69, 91, 26,190,233, 53,235,252,163,191,254, 39,248,173, 31,
-185,151, 91,183,150, 38,207,215, 31,255,105,220,209,147, 16,167,184, 64,194, 67, 27,144,130, 71,158, 61,124, 10, 63,103,221,254,
- 1,251,156,159, 79, 22,243, 43,245,248,238,249, 10, 61,223,235, 1,250, 59,255,128, 1,250, 31, 84,251,114, 94,223, 89,214,252,
-251, 94, 32,160,223,182,184,100, 11, 91, 68,234,192,197,149,228,238,191,252,166,213, 63, 89,230, 22,218, 49, 34, 17,184,210,161,
-114, 77,218, 82,252,243, 79,237, 63,252,127,249,133, 39,255,231,222,216,124, 8,216,199, 15,122,105,252,214, 19,253,143, 93,233,
- 87,127,101,189, 25, 71,198,185,105, 19, 92,214,196, 62,253, 91,232,143,252, 67,162, 63,250, 67,147,247,121,243,205,235,252,248,
- 95,249, 22,126,244, 47,106,174, 30, 12, 73,226,136,115,171,173,107,142,199,124,254,223,161, 63,253,207,161,209,244, 94,135, 84,
- 56, 99, 17,198, 82,229, 5,191,248,161, 39, 62,130,215,163,127, 37, 65,253,165,108, 16,115, 41, 84,231,220,202,151, 91, 10,244,
-132, 93,154, 57,190, 23,196, 14, 14,253,219, 95,169,231,251,149, 4,232, 47,149,196,248, 74,174,245,249,235,123,223,221, 43,175,
-226,192,148,187, 94,194,231,241, 21,225, 88, 46,108, 97,175,116,164, 30,221,178,154,190,102, 37, 85,104,235,217,237,110,100, 72,
- 74,131, 72, 5, 63,252,107,207, 60,240, 3,255,252,137,255, 71,111,108,126, 29,216, 6,142,129, 18,168, 46, 31,149, 31,251,197,
- 47, 28,126, 50,142,192,229, 6,112, 8,137,239, 87,111,118, 48,159,254,223,169, 30,248, 91,184,209,222,220, 27, 54,226,136, 91,
-182,150,174, 5,244,106,140,249,232, 79,162, 63,244, 35,136, 52, 65, 40,229,235,245,113, 10,149, 38,150,240,187,143, 92,185,250,
-219,159,223,126, 0,175,253,254,138,128,250,137, 17,159, 47,102, 83, 57,217, 38,246,206, 63, 96,235, 96,246,248, 86,130,108,235,
-151,178, 81,254, 65, 63,223,175, 8, 64, 15,210,189, 39,157,175, 87,231,189,189,242,218,245,214,250, 87,206,245,245,146,178,139,
- 72,125, 97, 11, 80, 7,212,231,183,199,143, 62, 91, 26,221,108, 42,154,149,161,169, 96,160,172,251, 47,127,254,210,191,250,251,
- 31,184,242,119,128, 79, 1,123, 33, 66,247,232,237,135,188,108,255,196,111,110,191,255,184, 50, 68,149,129,202,122,214, 92, 16,
-165,161,213,193, 62,241, 43,148,191,248, 3,152,207,253, 34,174,247,220,233, 55,228,112, 23,251,196, 3,148,191,244, 87,208,191,
-255, 79,160,209, 0, 21,121,177, 25, 33, 16, 50, 70,228, 21, 40,199,223,253,185,223,255, 37,224,241,240,254, 47, 59,168,207,244,
- 45,207,218, 11,106, 47, 10,109, 72,179, 27,242,123,158, 39,210,125,181,237,253,204,215,110,223,243, 2, 62,139,247,124, 5,159,
-239,245, 0,253, 33,110,220,199,253,188, 78,159,115,238, 61, 51,143,123, 78,124,102, 47,118,189,205,146,187, 14,121,121,250,212,
- 95, 8, 16,222,112,173,139,119, 63,120,237,245,245,140,244, 47, 53, 91,196, 11,200, 22, 29,190,208, 8, 60,156,199,130, 32,183,
-176, 63, 84,118,195,244,251,254, 64,127,252,251,254,213, 23,223,247, 67,223,178,117,239, 90, 51, 90,250,194, 94,254,236,255,246,
-225,157, 95,254,220,229,209,191, 7,174, 0, 71, 33, 58,159, 5, 81, 3,140, 31,223,205,127,229, 71, 62,120,245,158,251,190,235,
-226,183,233,129,134, 72, 34, 82, 53,165,176, 53,187,160,143,169, 62,252,247, 16, 73, 27,177,118, 39,114,245,118,136, 26, 96, 43,
-236,209,211,184,221,207, 65,126, 4,113, 12,173,165,153,187, 21,176, 18, 87, 8,146,182,228,103, 31,120,228,243,255,249,247,158,
-251, 87,248,212,123,245, 10, 68,231,247,112,237,124,241,154,117,251, 66,237, 93,204,107,175,127, 32,140, 25,125,224, 5,188,255,
-189, 1, 44, 95, 17, 66, 82, 96, 89,191,111,102, 3,188,199, 57,247, 83,167, 69,172, 51, 45, 95, 43, 95,169,231,123, 3, 64,255,
-182, 47,177, 76,112,219, 9, 16,121,239, 76, 84,123, 87,208, 58,184,255,249,122,205,103,198,232,206,126,198,175,184, 52,110,136,
-206, 95,232, 90,191,246,250,250,177,170, 15,188,128,247,184, 55, 56, 7,239,187, 14,168,223,123, 3, 97,154,247,207, 92,183,119,
-186,251,238,126,255,117, 24,239,167,181, 38, 46,108, 97,127,168, 65,189, 2, 14,126,231, 82,255,159,254,206,165,254, 7,128, 14,
-190,110,126, 21,159,106, 31,132,231,156,148, 21,171,231,173, 95,253, 7,191,126,229,199,191,246, 98,243,214,239,127,203,218, 29,
-227, 94,137,232, 38,144, 74,175, 52,135,131, 56, 70,196,177,103,176,239,127, 10,189,243,208,228,229,132,140, 32, 74,160,213, 62,
-113,183, 2,165,193,217,140, 70,154,240,208, 99,219,135,255,247,127,242,209,251, 66,148, 62,230, 37, 76,104,115, 55,144, 70,187,
- 17,104,189,152, 77, 54,168,165,189,139,233,100,171, 26,232, 30, 8, 27,255, 67, 39,192,161,222, 96,239,154, 1,136, 87,210,238,
-103,126, 76,230, 59, 67,164,121,255,204,177,221,195,148,125,124, 41,108,246,119,125,165,157,111, 56,175,211, 82,198, 63,255, 34,
-150,194,251, 95, 66,239,250, 61,193, 97,170, 71,133,158,166,253,126,114, 84, 46,120, 25,224,151,197,193,113,247,221,253,210,214,
-250,137,154,121, 80,135,187,246,250,222,119,247, 75,189,190,181, 46,124,237,200,124, 34, 12, 99, 57, 89,114,152, 43, 21,133,231,
-221,207,116,220,107, 45,152, 51,203,146,127, 63,175,174, 44,237,194, 22,246, 7, 18,212, 77, 0,110, 29, 64, 92,134,159, 21,225,
- 97,184,254,208, 20, 13, 12,172,115,159,249,175,126,238,139,127,119,173, 21,253,200,255,233,142,165,243,249,113, 9,157, 24,209,
- 80,211,254,117,143,224,144, 52,110,220,135,230, 0,235,160, 48,216, 94, 73,118,118,139, 47, 92, 57, 28,188,227,125,191,249,190,
-227, 97,245,161, 25, 39,227,149,182,135, 2,160,191,104,210,146, 16,226,254, 25, 1,155,149,217,141,254,203,189, 16, 66,180,254,
-142, 16,221,220,118,157,200,115, 54,114,123, 7,207,147,218,252,131,124,190,167,216,139,141,232, 30,248, 18,222,235, 54, 94,120,
- 29,250,254, 87,193,161,187,241, 90,191, 14,195, 60, 76, 65,123, 89,174,175,120,247,131,135,238,190,187,223,203,252, 56,215,211,
-132,109,222, 23,178, 4,179,207,123,231, 13, 62,207,119,133, 99, 91,128,250,194,254, 80,152,124, 30, 24,213,248,122,249, 33,126,
-242,217, 17, 48, 10, 63,119,207,243,183, 5,112,220, 27,155, 7,255,236,253,143,254,191,254,249,239,239, 63,220, 72, 36,113,175,
-194, 30, 87,144,219,201,171, 8, 4, 66,156,242, 8,255, 97,128,210,226,122, 26,113, 88,144,173, 44,243,224,165,227,171,223,254,
-183, 31,248,219,151,182, 7,255, 38, 28,219,136, 87,142,245,254, 64,216, 92,223, 17, 6,113,124, 41,250,223,247,227, 37, 55,239,
-231,133,245, 32,191, 63,108, 76,175,252, 68, 43, 63, 20,230,109,207,243, 94, 15,224,199,158, 62,244,149,126,190, 95, 6,128,124,
- 47, 47,156, 92,249,126,124, 57,224, 93,175,114,231,192,116,173,191,251,193,183, 61, 95,203, 88, 80,153,123, 89,174,111,120,173,
-219, 79,100,135,174,247,158,239,224,198,196, 65,191, 78, 95,226,120,215,133, 45,236, 43,213,196,245,210,141, 66,188, 44,250, 45,
- 10,104, 6, 79,249, 13,127,249,155, 54,255,218,255,244, 29,231,255,244,249,165, 36,210,133, 67, 71, 2, 26, 10, 17, 73, 31,185,
-203,153,247,116, 14, 12, 56,109, 33, 55,168,202, 18,199,130,158,129,191,247,161,131,223,248,255,252,242, 19, 63, 85, 25,251,113,
-166,173,116,122,206,171,184, 65, 26,245,101, 58,183,151,197, 66, 42,248,100,148,120, 9, 63,221,236,129, 47,227,113,213,233,210,
- 89,161,143, 7, 94,224, 52,184,175,184,243,253, 50, 93,247,219,184,150,155,240, 16, 62,221,126,248, 21,121, 94,158,109,126,250,
-245,125,158,122,251,203,244,126,151,128,135,196,187, 31,188,116,131,207,126,177,243, 47,108, 1,234, 95, 34,176, 55,128, 37,224,
-204, 77,171,233,159,120,231, 55,111,254,153,191,116,215,250,215, 95,232,196, 49, 78,224,156,195, 10,129,157,121, 75,233, 64, 58,
-231, 91,215, 4,236,231,198,254,235, 79, 29,124,230,167, 62,178,243,203,159,126,102,248,159,128,103, 67,230, 96,124, 18,208, 23,
- 55,238,194, 22,182,176,133, 45,108, 1,234,175, 92, 52, 43,128, 4,104, 1, 93,224,204,106, 59,122,235,215,223,210,254,250, 63,
-255,150,213,183,191,229,124,243,236, 74,170, 90,173, 72, 36,145, 20, 82, 91,220,200,216,242,184,180,163,199,118,198,187,239,255,
-228,193,239,253,246,165,193,199, 46, 31,149, 15, 1,207, 1, 61,124, 13,253,186, 61,233, 11, 80, 95,216,194, 22,182,176,133, 45,
- 64,253,149, 1,245, 26,216, 37,144,226, 83,242, 77, 60,163,126, 21,216,106,166,114,173, 17,201,110,172, 68,162,173,211,185,118,
-253, 81, 97,246,157, 99, 7,159, 98,239,225,235,230, 67,158,159,168,183, 0,245,133, 45,108, 97, 11, 91,216, 2,212, 95, 65, 80,
- 63, 9,238,113,136,222,235, 71,196,100,250, 58,132, 8,188, 10,143, 50, 0,185,126, 62, 48, 95,128,250,194, 22,182,176,133, 45,
-108, 1,234,175, 30,168,159, 4,248, 26,228,235,175,179,160,238,102,190,190, 40,148, 94,128,250,194, 22,182,176,133, 45,236, 15,
-155, 69, 95,230,247,119, 51,192, 93,131,252,236,239, 22,182,176,133, 45,108, 97, 11, 91,216,151, 26,169, 47,108, 97, 11, 91,216,
-194, 22,182,176,175, 44,147,139,143, 96, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 5,168,
- 47,108, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,182,176, 5,168, 47,108, 97, 11, 91,216,194, 22,
-182, 0,245,133, 45,108, 97, 11, 91,216,194, 22,182, 0,245,133, 45,108, 97, 11, 91,216,194, 22,246,234, 88,244,189,127,252, 46,
- 39,133,244, 10,108, 66,120,245,151,240, 63,175, 4, 35,252,164,180,201,215,249,159, 93,207,124,255,187,155, 40,211, 57,231, 38,
- 42,111,254,223, 98,230,121, 39, 21,224,228,220,207,102,213,237,174,215, 87,127,218,115,103,191, 23, 66,160,132, 37, 86, 18, 37,
- 98, 34, 37, 16,202, 33,227, 24, 41, 51, 86, 55,110,230, 13,111,251, 22,214, 54, 55,185,227,117,183,241, 31,254,211,127,224, 39,
-255,215,159,228,169,167,158, 34,138, 34, 90,205, 22, 89, 26, 19, 69,130,181,213,117,182, 54,206,242, 23,127,224, 7,248,238,239,
-249,118,112,134,159,248,135,255, 27,255,224, 39,126,130,102,187, 77,140,160, 29,199, 68,177,100,101,125,153,170,200, 89, 95, 91,
-195,152,146, 72, 66,154, 54,144, 66,208, 72, 50, 4,130, 52,142, 81, 73,202, 19, 79, 62,201,239,124,244,163,108,116,187,156,219,
-220,224,150, 11,231,248,212, 35,143,112,215, 91,223,202,241,209, 49, 31,254,216,199,105,116,218,228,121, 14,165,230,204,198, 38,
-171,171,203, 52,155, 25, 27, 27, 27,156, 59,127,145, 55,188,249,173,172,174,159,101, 56, 46, 56,218,223,101,255,240,152,227, 94,
- 15, 41, 21,121, 81, 80, 86,134,162,172,104,118, 58, 52,154, 93,140,145, 24, 43, 24, 15,118,185,185,107, 57, 39,143,105,187, 17,
-149, 5, 99, 29,198,128,214, 22,173, 29,149,177,104,109,208, 90, 99,172, 65, 91,139,117, 14,109, 29,214,185,160, 32, 36, 48, 86,
-224,194,181,119,128, 19,128, 16,126,125,137, 20,135,195, 90,141,181, 22, 99, 1,149,210,200,150,104,181,151,104,100,109,178, 86,
-135, 36,109, 18,197, 9, 82, 66, 36, 64, 10,135, 16, 18,164, 36,138, 34,162, 40, 38,142,147,201, 35, 74, 26, 68, 73, 70,210, 72,
- 73,146,132, 40,137,137,211,148, 40,142,144,145,194, 41, 57,183, 54,234,127, 91,107,131, 4,146,195, 89,235, 39, 6, 26,131, 51,
- 22, 93,105,172,209, 56,163, 49,218, 96,140,193, 88,227,159, 99,173,127, 62, 6,235, 76,248,222,191,134, 53, 6, 29, 94,131,176,
-238,157,115, 88,103,177,198, 98,234,191,117,118,242,179,250,189, 9, 15,107, 29, 22,139, 51,254,245,140,213, 96,131, 78,147,115,
-254,125,173,245,239, 91,255, 93,248,252, 29, 2, 68,132,144,138, 56,110,144, 54, 90,164,105,147,164,209, 36, 73, 82,162,212,127,
- 62, 42,138,137,227,136, 88, 41, 98, 9, 73, 44,105,196,130, 36,141, 81, 73,132, 76, 36, 50, 18, 72, 9, 50,232, 68,137,233, 14,
-128, 16, 10, 34,127, 77, 80, 10, 68,236, 47, 51, 14,225,252,215,250,217, 0,198, 89, 28,154,157, 71, 63,205, 7,255,233, 79,114,
-248,200,103,217,217,219,103,187,159,179,177,188, 74, 35,141, 40,139, 49,199,199, 71,180,178, 38,227, 81, 65,179,217,161,223,207,
-113, 88,138, 60,199,148,154,102, 42,217,218, 92, 70, 23, 35,150,151, 58, 44,183,218, 72, 32,203,154,108,157, 57,199,246,222, 30,
-170,209, 0,165,136, 4,108,108,174, 83, 86, 37,253,225,144,189,131, 3, 68, 20,177,127,120,196,202,218, 26,113,146,176,177,182,
- 78,146, 36, 28, 30, 28, 34, 35,133,144,138,237,221, 29,127,253, 4,180,150,150, 56, 26, 12, 72,155,109, 16, 17, 69,161, 89,106,
-119,217,189,122, 25,129, 33, 75, 21,131,222, 49,194, 90,186,157, 46,177,140, 17, 86, 83,233, 10,237, 44, 81,146,128,131, 98,156,
- 19, 73,137,144, 18,227, 12,157,118, 27, 93,105,156,117, 88,173,145, 82, 82, 85, 21, 8,139,181,134, 78,171, 69, 35, 77,200,243,
- 49,121,158,227,128,213,149, 21, 28, 10,149,102, 12,242,146, 50, 31,147,197,138,225,209, 62, 43,237, 6,111,122,205, 45, 36, 81,
-196,225,225, 49,253,254, 0,128, 86,171,205, 51,207, 60, 75,123,121, 25,149,196,140, 43,205,110,127,192,200, 41,218,155,103, 73,
-187, 43,228, 56,172,148,224, 64, 88, 17,214, 83,173, 11,102,195,186,114,215, 72,130, 73, 89,239,175, 4,252,240,216, 80, 47, 71,
- 33, 64, 34, 16, 98,250,144, 82,206,125,173,239,199,147,223, 35,252,123, 58, 28,198,186,176, 95, 56,140, 11,235,222,223, 10,216,
-153,251,203, 57,255,123, 23,246, 36,103, 29,198,218,240,152,254,219, 26,135, 53,150, 82, 87,104,235,208,214, 80,105,127,223,234,
- 74,227, 12,225,254, 12,175, 61,139, 97, 66,133,123,240, 26, 16,194,137,235,171,166, 77,238,141,240, 57,248,207,111,230,179,144,
- 32,195,191, 39, 95,235,127, 11, 17,182,208,217,207,146,185,251, 75, 8,129, 49,134, 72, 73,133,148,242, 26,176, 60,109, 3,188,
-209,191, 79, 57,133,107, 64,119, 22,192,173,157,190,134,115,243,224,239,127,198,220,207,102,223,243, 36,200,207,254,253,201, 99,
-154,253,157,113, 2, 97, 5, 22,139,113,194,143,118,197,160,148,165,213,238,160,203,146,131,221, 93,236, 29, 55,243,185,207, 62,
-204,219,223,254,141,244,122, 3,122,189, 30,149,214, 72, 1,198, 56,148,146,220,122,243, 77,216,124,204,149, 47, 94, 98,105,185,
-195,159,248,227,223,194, 63,249,103, 63, 3, 82, 33, 17, 84,198, 48,202,135, 36,205, 20, 97, 13,131,126, 31, 21, 9,146,102, 3,
- 99, 52,113,218, 96,156,143, 17, 14,202, 92,210,234,192, 99,143, 63, 78, 85, 20, 56,224,230,155,111, 34,137, 21,183,220,116, 1,
- 99, 12,218,106,138,170, 98,255,234, 14, 82, 10, 98, 4,151,183,175,162, 34, 73,179,149, 97,157,191,225, 70,195, 33,103,207, 69,
- 28,247,122,104,237, 39,210, 38, 73, 2, 8, 50, 41,169,244, 16,107, 44,189,222, 49,121, 89,161, 84,131, 36,109,146,165, 77,140,
- 43, 25, 22, 14,171, 43, 42,231, 2,168, 91, 42,109,209,149, 69,155,176,240,173,197,134, 27,196, 34,176, 4, 80,119,224,156,191,
-118, 82,248,205, 75, 42,137, 16, 97,113, 74,133,146, 17, 66, 10,156, 83, 24,227,175, 73,156,117,104,117,214,104,181, 87,201,218,
- 75,180,187, 75, 52,178, 22,113,156, 32,165, 64, 56,131,213, 26,167, 43,127,158, 56,164,148, 40,165,194, 6,226,127,175, 41,113,
-214, 98,180, 38,170, 98,180,214, 19,128,151,113,132, 84, 10, 21, 69,147, 13, 3, 1, 66, 73,175, 85,108,167,107,201,249,157,130,
- 56,181, 56,107,112, 86,227,156, 7, 94, 59,243, 28,255,240, 27, 73, 13,202, 19, 96,175, 65,126,238, 57,225,115, 10,160,110,172,
-241,155,140,214,216, 0,222,214,214, 95,131, 19, 97, 12, 46,124,239,172, 63, 30,107, 29,214, 85,254,123, 51,243,254,225,186, 88,
- 52,198,150, 56, 35, 40,109,137, 49, 99,202, 50, 37, 26, 39,196,113,138,140, 26, 68,113,140,138, 34,162, 40, 34,150,130, 88, 65,
-150,198,180,179,152, 86, 51, 37,201, 82,162, 42, 66, 68, 2, 39,241, 91,171, 11, 87,219, 9,132,144, 8, 21,121, 48, 87, 49, 66,
- 41,132,148, 19,231,205, 9, 57,183, 15, 56, 43, 17,182,226,232,185,207,241,203,255,228,239,115,245,145, 47, 48,222,239,113,124,
- 52,162,213,234,144, 70,160,139, 17,199,135, 71,100,141, 6,229,184,196, 84,142,203,207,238,146,164, 41, 8,129,213, 2,103, 29,
- 75, 75,109,156,179, 52,178, 6, 43,203,203,228,195, 17,157,118,155, 70,179,201, 81,175, 71, 94,150, 40, 4, 81,154,208, 89,234,
-114,120,116, 68,101, 44,189,193, 0, 17, 55, 56, 30, 12,136,179, 22, 82,197,180,154, 25,227,241, 16,171, 43,142,143, 14, 57,119,
-225, 2,251,135, 7, 36,113, 76, 37, 53,163,113,129, 27,107,180,137, 72, 93,130,117,150, 36,137,120,238,153, 47,210, 74, 34,172,
-169,232, 29, 30,209,206, 50, 34, 41, 25,245,143,201,210,140,210,104,172,117, 68,113,140, 67, 16, 39, 41, 73,146,145,168, 24, 25,
- 9,170, 42,167,170, 42,172, 53,164, 73, 76,214,109,162,164,223,188,149,242,155,187,181,142,162, 40,105, 52, 26,140,199, 57,237,
- 86, 27,173, 53, 14, 75,127,156,147, 53,219,180,150,151, 72, 36, 8, 91,113,176,191,195,206,206, 30,237, 86,147, 91,111,189,141,
-253,221, 29,246,118,119,177, 85,193,109, 55,157,167, 55,206,201,203,130, 72, 42,150,154, 25, 54, 47, 25, 29,237,147, 54, 26,108,
-109,110,146, 59, 15,148,224,193,221, 5, 64,119,206, 33, 17,211,123, 99, 6,208,230, 64,102, 22,189, 38, 0,232,239, 45, 78,252,
- 94, 4,160,226, 84,176,242,206, 65, 45, 28,238,156,195, 88,131,117,210,239, 59,206,175,243,217,123,202,225,252,239,235,251, 43,
- 96,140, 49, 53,152,251,123,203, 24,137, 17, 22, 43, 44, 70, 8,164, 0,109, 44,218, 10, 34, 33, 49, 74, 97,164,194,134,253,160,
-126,237,201,191,157, 99,226,174,214,120, 22,254,231,159, 89,255,216,205,161,249,244,220,221,228,124, 65, 32,164, 64, 5,240, 22,
-194, 59, 73, 82, 42,164, 20, 40, 33,231, 64,126,178,109, 9, 57,247, 26,254,221,124, 80,110,141, 36,154, 5,201,107,190,226, 23,
-215,181, 7, 86, 71,244, 55,136,212,153,223, 36, 79,130,182,148,226,154,232,122,250, 60, 49, 1,251,231,119, 30, 78, 7,127, 78,
- 89,116,206,129,177,222,239,244,128,110,193, 25,178, 88,209,235, 15,216,189,242, 28, 34,142, 57,216,187,157, 44,107,113,101,103,
-135,111,248,134,111,228, 35, 31,249, 16,206, 9, 84,156, 96, 77, 65, 49, 30,147, 40, 5,186,100,176,191,203,232,112,151, 91, 47,
-190,134, 55,188,254,117,124,230,225, 71,192, 73,108, 85, 81, 85, 21, 59,123,123,156,219,216, 0, 4, 74,197, 56,235, 64,134, 8,
- 17,208, 70,227,144,148,101,193,234,114,135,222, 97,202, 29,183,221, 76,171,153,129,179,108,109,108,144,143,114,158,121,230, 25,
-110,185,229, 38, 46, 93,185, 74,175, 63, 4, 37, 24, 85, 21, 81,164, 40,138, 2, 1,140, 70, 67, 6,189, 30,186,204,105, 36, 17,
-107,107,107,200, 40, 33, 29,141, 24,142,198,184,178,162,209,104, 80, 85,134, 92,151,244,123, 71, 44, 45,175, 33,164, 99,121,117,
-131,182, 40,233, 95,185, 74, 94,150,104,107,176,206, 97,140,243,139, 94,123, 15, 87, 27,135,182, 22,227,240, 32, 18,226,183, 58,
-211, 3, 32,133, 2, 33, 81,202, 3,169,140, 34, 15, 32, 74, 17,201, 24,169,188,119, 93, 25, 71,170, 82, 26,237, 53,218, 75, 27,
- 52, 59,107, 52,187,171,116,151,150,201,154, 25, 73,146,160,148, 4,103, 49,101,137, 30,143,168,170, 10,173, 75,176, 6, 33, 65,
- 40,127,243, 59,204,228,122,234,210,133,232,186, 66, 23, 57, 81, 28, 19, 37,254, 17, 39,137,143,198,148, 66, 40,233,211, 8,181,
-119, 45,220,116,245, 42, 23,214,168, 68, 16,207,175, 47,231, 38,235,219,175,189, 0,230, 64,240,108,230,129, 63, 68, 56,147,173,
-208,185,233, 90,180,206, 3,119, 0,115, 99, 60,200, 99, 45,214,106,116,216,248,107,160,183, 38, 56, 0, 86,251,231,107, 51,117,
- 6,180,193, 24,141,181, 21,218, 84,126,195,179,214,191,175, 41,169, 76,129,209, 57, 66,230, 40, 21,161,164, 34,138, 36,177,148,
- 52, 98, 73,100, 82,140,139,177, 34, 67, 8, 13, 78,129,241, 27,143, 63,190, 50, 56, 57, 32,164, 66, 70, 9, 68,145, 7,245, 72,
-249, 1, 14, 66,130, 84, 56,233, 35,248,250, 19, 85, 8, 6, 59,207,242,171, 63,243,143,216,255,252,167, 25,236, 30, 51, 44, 28,
- 42,137, 72,163, 10,103,198,236,108, 31,178,178,210,161,204, 13,182,130,222, 81, 78, 51, 75,208,214,175,151,124, 92,178,212,109,
-144,101, 41,174, 42,105,119,218, 24, 99, 72,211, 20,127, 55, 11, 70,227, 49,214, 65,172, 20,105,218,192, 88, 75,169, 53, 71, 61,
- 15,228, 71,189, 62,165,241,107,119,163,217,162,209,136,209, 69,197,104, 52,228,204,214, 38,101, 81,248,135,209,236,247,142,233,
- 46,175,163, 13, 44, 45,111, 82,148,222,145,186,114,229, 73,218,141, 24, 87,121, 71,179,149,196,148,227, 17,173,165, 46,235,231,
-207,130,133, 60, 56,185,227,113,137,181,254,254, 41,243, 18, 65, 78, 35,139,137, 99,193,242,114, 23,156,165,217, 72,145,206, 82,
-149, 57,227, 81,159,238,114,151,202, 24,172, 80, 12,181,166, 40, 74,210, 36,163,219, 93,198, 97, 73,146,132,210, 88,226, 52, 67,
- 8,193,120,112,204, 82,183, 75, 51,146,148,218, 34,162,132,199, 30,127,130,215,222,113, 27,105,146,176,187,125,213,191, 79,154,
- 98,140,102, 92,142,105, 54, 50, 10, 45,144,206,112,124,245, 57,186,157, 38,155,155,155,148,218, 7, 60,224,131,159, 58, 43, 52,
-235,244, 90, 55, 93,227, 19,199, 77,204,160,219, 36,112,115,156,132,137, 9, 24,213,192, 77, 13,100,181,243,239,127, 39, 67,150,
- 15,225,157, 73, 37, 21,214,133,251,197, 74,140,116,254, 30,145, 76,157,102, 8,193,133,119,168,141, 1, 45, 12,210, 88, 36, 2,
-131, 65, 98, 81, 66,224,164,192, 74,133,150, 18,171, 44,198, 42,159, 13,112, 22, 99,108,184,141,235, 96, 37,100,217,236,244,125,
-166,160, 62,123,238,117,162,109,234,244, 76, 48, 44,252,207,103, 48,175, 5,117,165, 20, 4, 80, 87, 74,162,164, 66,224,113, 82,
-138, 41,168,203, 25, 60,155,126,244, 2, 51, 1,117,227, 65,253, 26,143,107,226, 73,213, 62,201,233,169,247,235, 97,109, 8,116,
- 48,115,233,118, 55, 23,197,207, 30,216,181,224,125,253, 72,253, 26, 82, 64,200, 50, 60, 95, 90,190, 6, 29,231, 19, 68, 56, 81,
- 71,100, 22, 17,202, 15,227,254, 62,253,113, 73, 49,206,209,218,176,185,185,197,127,248,229,127,235,211,129,205, 14, 90,171,201,
-245,211, 85, 73, 22, 71, 84,195, 33,105, 26,147,198,138,111,250,198,111,224,119, 63,241,113,218,173, 14, 69,233,111,102,161, 45,
- 79, 60,113,137,115,103,182, 56,115,118, 19, 99, 28,113, 34,113, 56,198,227, 33,206, 58, 98, 21,147, 57,203,157,175,185,157, 51,
-235, 43,172,116,151, 16,194, 71,201,207, 93,185,204,198,218, 58, 55,223,124, 11,131,162,228,145,103,158,197, 74,208,206, 17, 11,
- 65,179,217,164,209,240,209,255,120, 52,164, 44,114,242,241,136,172,209,196,152, 34,128,160, 79,237, 1,116, 58, 29,148,138,201,
-171,138,188, 24, 83, 22, 67,132,140, 24,136,132,173, 51,235, 28,148, 32,198, 37,198,249,205,219,123,198, 76, 0,222, 24,139,161,
- 78,121, 77,197,251,165,240,145,154,148,146, 72, 37, 40,165, 60,136,199, 49, 81,164, 60,136, 40, 69,162, 34,164,130,202, 56,132,
- 21,164,217, 18, 89,119,157, 86,119,141,102,119,157, 86,119,149,230, 82,135, 70,214, 32,109,164,196, 81,132, 4, 76, 89, 97,203,
- 49,101,145, 83, 22, 57, 90, 23, 24, 93, 98,173,241, 11, 91,168,233,226, 11,215,214, 26,131,113, 62,205,166,171,138,168,140,168,
-146,210, 71,169, 73,140,138, 35,239, 21,215,107, 81,156,178, 86,133, 63,215, 73,116, 31,126, 56,235,236, 34,102,252, 1,230,255,
-237,194, 77, 87,223,251,179,158,189,113, 34,164, 16,103, 35,125,139, 49, 6, 38, 81,121, 29,129,107,156,177,193, 1, 48, 1,212,
- 45,166,210,147,136,222,104,237, 35, 57,173,209,166,242,231, 29,126, 94, 71,254,214,134,148,164,209, 96,181, 7,109, 37,176, 50,
- 66, 90, 9, 22,172,145, 24, 13, 82, 69, 56,132,191,143,141,241,160,110,124,186, 88, 8,133,141, 98, 68, 20, 35,226, 8,169, 34,
- 31, 85, 9,137,144, 49, 78,250,235, 33,164,255,219,241,232,136,255,248, 47,238,231,139, 15,125,156,193,229, 61,138, 42, 70, 75,
- 69,154,105, 98, 85,176,115,117, 64,183,213,164,202, 75,138, 81,197,160,175, 73,227, 8, 37, 37,149,118,140,243,146,102, 83,113,
-246,236, 42,184,146, 36,141,104, 54,155, 84,121, 65,154, 68,168, 72, 49, 42, 10, 6,249,152,172,213,166,212,154,150, 84, 88, 96,
-123,119,151,180,213, 97,231,224,144,164,213,230,232,224,128,219,111,191,131,241,120, 68, 51,105, 19,197, 49,121,175,199,210,210,
- 50,151, 30,123, 28, 99, 13,253,209,136, 82, 64,211, 66,183,187, 68,127, 48, 2, 28,189,195, 93, 26, 73, 76, 51,137,177,227, 17,
- 70,151,180,178, 46, 91, 27,155, 88,237,203, 52, 82, 74,156, 80, 32, 4, 75,203, 25, 69, 94,160,164, 34, 75, 83,226, 36,102, 52,
-232,211,110, 54,201,210,132, 98, 60,194,150, 57, 73, 26,177,117,110,139, 52, 58,203,104,112, 76,127,152, 83, 26, 65, 20,199, 52,
-178, 54,214, 88, 70,227, 28, 41, 44, 90,151, 24, 7,186,170,168,180, 65, 9, 71,169, 53, 89,146,160,157,193, 2,113,163,193, 51,
-151,175,114,211,197, 11,244, 7, 62,219,152,196, 9,171, 43, 75,140,139,146,203, 59, 59,180,155,109, 92,101, 72, 34,197,238, 51,
- 79,210,237,180, 89,238, 46, 49,174, 44, 90,128, 67,250, 12,145,153, 70,160,206, 90, 36,206,239,159,118,230, 94,113,204,148,127,
-220, 76, 26,222,157, 90,165, 21,167,196,132, 39, 35,118, 41, 4,126,183, 17, 8, 7,114, 18,185,251,123,204, 9,137, 18,117,118,
-208, 97,112,200, 16,161, 91,233,166,211,194,156, 47,223, 73, 43,188, 19, 44, 28, 2,137,117,190, 28,107, 39, 41,123, 31,108,217,
-153,168,220, 90,235, 51, 3,115,101,180, 16, 27,187, 19, 25,235,218,177,176,179,251,136,131,217,232, 93,158, 8, 54,235, 20,123,
-112,108,164,146,147,180,251, 92,164, 78, 56,127,102,157,162,169,153,240, 4, 99, 36,145,156, 73,148,203,107,106, 30, 83,224, 62,
-153, 38,247,207,151, 51,145,185,155, 7,210,176,225, 27,227,107,144,245,215, 41,152, 79,107, 9, 53,224,204, 58, 5, 32,230, 54,
-215, 27, 1,187, 16,194, 3,168, 16,215,164,249, 79, 47, 27,132,207, 86, 8, 92,248,249,197,243,103,233,102, 41,191,243,208,167,
-216,190,122,153,172,153,113,233,243, 95,100, 56, 26, 33, 68,184,184,198, 96,109,197, 48,207,249,252,195,143,240, 45,111,255,122,
-246,182,247,105,102, 49, 42,125,130,111,122,219,219,248,135,120, 16, 81, 82, 33,140, 99,169,213,101,167, 63, 96,111,111,143, 78,
-183,141,106,103, 97,243, 54, 8, 33,136,226,136, 98,156,211,239, 91,148, 18, 36,113, 68, 94,140, 73,162,136, 34, 47, 24,229, 99,
- 74, 93,146,101, 41,133,115,100,141,148,209,184, 0,160,187,212,101,117,109,157,162, 24,161,181,166,170, 10, 70,163, 1, 79, 94,
-186,196,214,217,115,200,168,193,217,179,103, 41,203,138, 43, 87,175, 82,148,165, 79,165, 73, 73, 36, 99,210,216, 80,148, 35, 70,
-163, 1, 85,169, 24,173,172, 82,184, 8, 93,250,141,187,190, 6, 46, 56, 89,214,129,149,179,252,139,233,162, 83, 50,154,164,182,
-149, 18, 1,220, 35,146, 56,246, 41, 94,165, 2,208,199,126,115, 16,150, 72,165,164,205, 14, 89,107,153,102,123,149,102,103,133,
-102,103,153,172,221, 34,105,196,164,105, 76,164,188,199, 26,197, 9, 52, 18, 26,182,229, 55,181,170, 68,235, 18, 93, 22, 24,163,
-113,198,129,157,174,221,185, 18,141,181,152,144, 66, 51,198, 80, 21, 37, 82, 41,162, 52, 33,142, 35,159, 81,168,215,161, 60, 81,
-198,145,211, 90, 24,115,217,163,240, 28,121, 58,152,139,144,193, 16,242,250,235, 28,161,166, 30,189, 15, 67,230, 75, 0,147,180,
-186,131, 80,127,175,211,236, 30,216,235,116,125, 29,229, 79, 35,119,163,125, 93,214,104, 31,249, 27,163,253, 87,109,176,166,162,
-170,124,164, 47,112,164,145,160, 17, 11, 26,141,132, 40,149,200,196, 19, 25,156, 4, 43, 8, 5, 22,227,211,139,194,133,124,170,
-197, 25, 3,174, 66, 88,133,141,164,231, 45, 72,137, 19, 17, 66, 40,148, 0,116,137,176, 21,191,249,111,127,142, 75,191,255,219,
- 28,111,239, 83,244, 45, 70,129, 72, 44, 89, 26,115,116, 48,166,221,202,144, 66, 48, 24, 20, 12, 6,150, 40, 86, 24,231, 24, 23,
- 21,163, 66,211,105, 39,172,175,182,193,149, 40, 89,215,247, 5, 74, 70, 72, 25,129, 80,140,243, 28,164,162,172, 52,205,102, 19,
-231, 28,207, 60,123, 25,149,164,244, 6, 99,210,172,197,209,241, 49, 43, 43, 75,100,169, 98,117,249, 12,101,145,115,120,116,196,
-202,218, 6, 79, 63,123, 25, 21, 69,140, 6, 5,198, 10, 26,237, 14,113,218,100, 92,228, 36, 73, 68, 62, 28,208,109,183, 16,174,
-194,153, 2,131, 99,235,236,121,148, 80,140,242, 10, 28, 88,171,105, 52, 82, 84,154,226, 28, 12,135, 35, 26,113, 68,179,145,176,
-180,188, 68,163,217,160,219,186,157,222,225, 1,253,222, 49, 55, 95, 56,207,214,250, 10,197,104,200, 51, 79, 61,137,169, 74,202,
-106, 76, 94, 89,140, 76, 17, 42, 99,123,255,144,193,113,143, 52,137, 89, 89,238,208, 78,155,232,162, 96, 48, 28,225,128,102,179,
-137,138, 34,140,115, 84,101, 73,127, 92,144, 53, 26,196,141, 6, 99, 99, 89,218, 58,135,141, 27, 84,195, 1,214, 64,183,221, 65,
- 27,195,206,193, 17, 89,218, 96, 88,140,137,226, 6,143,127,246,243,124,237, 55,124, 3,141, 88, 49,170, 52,218, 5,110,132,148,
-152,186,140,228,175,252,196, 97,245, 32,230, 2,113,102,126, 15,159,163,122, 92, 3,222, 76, 56, 87, 66, 76,131, 3, 55,243,123,
- 33,166,206,132, 13,120, 98, 77,248,254,132, 35,125, 50,211, 44,132,240,206,135, 19,128,242, 72, 43, 44, 2, 21, 2,108,131,115,
-114,230,126, 83, 83, 7,123, 38,195,102,103,178, 19,117, 26,222, 57, 57,117,207,221, 52,106,247,153,130, 19, 37, 58,235, 38,216,
- 88,167,200,103,203, 21, 98,166,110, 46,164, 8,145,186,242, 17, 60,245,207,165,255, 93,240, 82,164,144, 33,144,153, 9,140,133,
-192, 9,143,183, 81,189,201,159, 44,218, 43,165,106,202,205, 53,155,228,105,233,240,217,159,121,242,145,247,100,106,176,173,127,
- 62,253,222,191, 71,253,254,243,155,158,120,193,160, 94,127,120, 39,121, 1,179,209,255,244,216,166,155, 65,189,112,100, 36,113,
- 86,211,106,166, 60,240, 43,255, 1,210, 22,189,163, 67, 86,151, 87,124,122, 92, 23,128,165, 44,115,138,178,160,217, 76,168,180,
-225,173, 95,247, 54, 90,221,101, 14, 47, 63,133,176, 45,142,119,246, 88,218, 88, 39, 18, 48,236,245,104, 40, 31,101, 38,113,194,
-242,242, 10, 56,239,193, 91, 99, 41,203, 2, 41, 5,121, 62, 66, 10, 69, 26,135,180,216,112, 68,150,166,140,134, 57,135,123,251,
- 36, 73,202,198,198, 26,253,126, 31,139, 96,191,215,167, 24, 23,126, 24,189,144,116, 91,109, 14, 15, 15,105, 54,253,223,215,105,
-154,245,245, 53,150,150,186, 12,199,158,140,214,110,183, 88, 91, 91, 99, 52, 30, 51,206,139,224, 80, 73, 4,138,141,141,117,118,
-118,123, 24,227, 24,140, 74, 68,154,144, 91, 67,228,212,164, 46, 94,187,125, 74, 8, 63,214, 79,212,159, 99,120, 29, 33,144,210,
- 71,226, 82, 73,164,242, 41, 35, 37, 37,113, 72,187,251,133, 43, 39,112, 39, 85, 20,136,109, 45, 26,205, 14,141,246, 18,173,246,
- 10,205,118,135, 44, 75,137, 26,138, 40,246,192, 32,156,196,213,127,239, 18, 18,151,134,122,178,193,232, 10,163, 43,108, 85,249,
-239,237,148,116, 54,113, 66,221,204,109,101,125,164,235,140,198,234, 18, 29,136,119, 34, 82, 68,161, 76, 32, 84, 13,240, 18,233,
-252,205,118,178, 76, 53,189,153, 66,157,108, 6,156,231, 86,155,112,193, 57,246,219,225,228,111,133,207, 22, 77, 51, 78, 30,228,
- 61,201,172, 94,255,245,177, 91,239, 84,212,117,206,153, 58,253,164,182,104,102,136,115,147,186,188,243,209,189,118, 88,227, 48,
- 85,229,129,191,170, 2,200, 87, 56,163,137,165, 35,139, 5, 89, 18,145, 52, 36,113, 26,121,130,156, 18,224, 44,206,106, 80, 18,
-108, 4,206,151, 10,132, 53,147, 40, 68, 40,135,147, 6,132, 13, 27,158, 5, 39,144,214, 66, 57,226,119, 31,252, 32,159,254,173,
- 7, 57,124,106,155, 97,191,242,159,171, 42,232,180, 82, 70,189,146, 70,220, 4,231, 24, 12, 11, 6, 35, 71,146, 38, 56, 4, 69,
- 89,162,141,165,221,142,105,119, 98, 90,237, 4, 73, 69, 85, 22,156, 93,223,244,196,179, 40, 38, 73, 82,140,181,244, 7, 67,154,
-221, 14, 73, 35,197,226, 56, 58, 62,162,210, 26, 27, 69, 88, 4,123, 7,135, 84,186,228,226,185,155,169,198, 3, 6,210,208,108,
- 47,131,244, 14, 68, 20,167, 24, 4,134, 49, 43,107, 27,104, 25, 19, 69, 9,206, 25,156,201,137,148, 33, 17, 18, 97, 99, 74, 93,
-177,182,190,201, 56,175,104, 54, 27,104,107, 41,138,156, 52,141, 25,230, 37,173,198, 18, 43,221, 14,141,141, 77,132,213, 40,233,
- 73,130,203,221,140,149,229, 46,205, 88,176,181,182, 76,162, 36,229,104, 72, 57, 26,177,181,182,206,112, 56,160,212, 41, 29,145,
- 80,136,152,227, 97,193,234,218, 58, 23,111,186,137,118, 51,195, 85, 57,237, 44, 35,207,199,244,135, 67,178,102, 19, 21, 37, 40,
- 21, 51, 30, 15, 89, 95,105,145,231, 5,221,110,151,126,191, 15,141, 22,206, 90, 84,101, 16,206, 81,141,135, 84,101, 69,167,221,
- 97, 92,106,198,101, 69, 22,199,158, 67,163, 53,159,252,248, 39,120,203,215,127,131,223, 79, 43, 61,225,151, 88, 27,106,212,182,
- 38,161,205,112, 70,102,234,203,215,236,205,156, 66, 40,171, 1,109, 82, 83,247, 0, 44,157, 69,216,249,108,241,228, 62, 10,165,
-190, 41, 96, 6,127, 58, 68,232, 46,160,255,148,215, 51, 3,204,194, 77, 50,102, 82,133, 96,206,186,153,104,123, 38, 5, 96,231,
- 3, 66, 79,144, 11, 64,125,130,228, 61, 11,234,179,239, 55, 91,127,247,100,218,153,140,241, 41,251, 72,141,125,158, 7, 60,253,
- 94, 49, 19,100, 75, 1,115,193,182,156,255,156,164, 15, 80,141, 49,126,143,174, 65,177,206,217, 79,210, 1,147, 52,136, 12, 76,
-102, 55, 97,190,214,185,252,147,192, 62, 33,186, 5,210, 78,164,252,135,101,165,196,104, 61,185, 56,158,128, 97, 61,121, 42,128,
- 59, 76,107, 43,243,142,194,137, 15,242,100,170,223,147, 84, 39,243, 91,235, 69, 54, 95,203,241, 27,171, 68, 18, 73,159,182,145,
- 82, 96,133, 96,109,109,131, 94,111, 68,111,208,103, 41,107,179,191,191, 71,111, 84,113,229,202, 21,159,102,196,161, 77, 5, 8,
-250, 3,205,230,230, 25,198,163, 49, 42,242, 17,222,241,241, 17, 14, 80,237, 22, 27, 43,107, 60,122,233,105,218,235, 29,156,177,
-196,113,194,198,198, 38, 82,216, 64,128,240, 17,133, 53,154,170, 40,105,100, 25, 73, 35,193, 25,141, 36,243, 44, 95,173,185,186,
-179,203,112,148,179,188,220,225,226,133, 11, 36,113, 66, 99,156,227,140, 65, 1,177,148, 44, 45,117, 88, 93, 89, 38,142, 21,113,
- 20,211,202, 50,146,200,131,107, 28, 69, 36, 13,197,112, 84,144, 23, 5,205,102,147,213,149, 85,158,187,178,237, 63, 87,235,136,
-100,228, 29,139, 72,121,114,146, 46,200, 90, 45, 70,113,131,216, 5, 71, 75,169,105,221, 8, 25, 60,197,154,113, 45,103,202, 52,
- 51,145,238, 76,237,135, 57,110,133, 13,233,114, 95,111,143,162,132, 52,109,145,100, 45,178,102,155,172,213, 36,107,101, 36,205,
-152, 56, 81, 40, 37,112,194, 34,172, 7,118,159, 30,183, 8, 23, 60, 88, 55, 45,161, 56, 83, 65, 93,123, 14,117,105, 95,203,244,
-233,233,105, 45,219, 71, 31, 19, 47,218, 25, 42,107,161,114, 84,194,159,111,148,120,112,143,227, 24, 23,121, 22,185, 16, 34,144,
-254,106, 18, 79, 29, 97,204, 78, 14,158, 43, 43,250,223,203,122, 3,115, 51,222,117,104,240, 16, 51, 4, 79, 23,206, 13,129, 20,
-243, 53,185,192, 41,246, 78,129,231, 18, 99,157,103,237,203,217, 58,191,157,166,252,172,213, 33, 93,234,192,248, 77,217,232,192,
-166, 47, 13, 90,123,112,116,182, 34,141, 4,205, 68,145,165, 49,113, 38,145,137,242,124, 5,225,176,206,224,116,133,211, 62, 93,
-111,173, 70, 88, 27,178, 10,102, 26,117,137, 58, 39, 42,113, 50, 6,103,137,116,201,227,159,252, 44,191,243,193, 7,184,250,197,
-231,168, 14, 75,140, 16,136,200,209,106, 71,148, 69, 73, 68, 66, 81,248,200,169, 55,208, 68, 42,194, 24, 71, 81, 85, 56,103,105,
- 54, 35, 90,205,132, 78, 59,195,154, 10,135, 38,141, 99,202,178, 10,155,180, 39,236, 29, 29, 30,160,226,136, 40,142, 41,170,138,
-102,179,201,209,254, 1,105,171,205, 81,127,128,136, 99,138,124,204,217,115,103,136,149,100,121,101, 21,235, 96,239,224,144,229,
-229, 85, 70,195, 33,165, 54, 24, 11,155, 91,103, 41,141, 1, 98,156, 19, 52,179, 6,197,240, 24,165,192, 84, 37, 10, 69,154, 52,
- 40, 10, 77,171,221,101, 52, 42, 60,233,174,211, 0, 12,157,118, 43,240,111, 42, 76,169,105, 53, 18,182, 54,214, 25,151, 62, 93,
- 63, 30, 14, 72,227,152, 36,203,232, 29, 31, 33,173,231,110, 12,250,125,210, 52,163,179,180,194,179, 87,118,104,116, 91, 92,221,
- 59,228,232,120,192,213,171,154, 44,137,232, 54, 19,202,110, 23,231, 4, 7,123,251,140,138, 43, 40, 37, 89, 95, 91,167,153, 37,
-228,121,132, 49,150, 65,127,196,104, 92, 18,167, 13,116, 89,176,113,211, 69,158,248,253, 93,186, 89,155, 60, 31,145, 32, 89, 91,
- 94, 97,123,111,207,175, 45, 43,208,214,160,171,146, 47,124,238,115,220,249,230,183, 34, 69, 68,105,170, 73,198, 7, 12, 56,129,
-195,206,144,211, 44,117,134,221,221, 16,212,103,156,235,122,221,123, 18,138,191,183,172,155,212,211,231, 82,240, 33,194,157,173,
-113,123, 44,112,152, 26, 87,231, 0,183, 6, 86,166,105,115, 59,173,145, 79, 66,198,144,145,147, 51,169, 54,231, 60,176,206,166,
- 24, 92,248,185,229, 90,231,197,157, 60,215,154,180,231,184,134, 80, 59, 9,120,103,238,121,230, 64, 61,212,215, 5,212,228,245,
- 58, 16,242,191,147,160,152,225, 30,120,160,175, 51,129, 1,188,125, 77,221, 90, 27,218, 18,108,128,107,231,235, 15,194,249,200,
-107,174,205, 96,190, 45,232,100,202,101,194, 50, 55,161,206,233, 44, 6, 9,210,120, 6,173,242,155,163, 54, 51,109, 65,174,118,
- 42,148, 39,163, 41,144,210, 77, 60,150,250,125,167,224, 48,243,182, 62,223,129, 10,193,129, 4,180,144, 8,107, 67,132,233,194,
-249, 4,172,145, 18, 37, 20, 17, 2, 37,189, 39, 80, 9,201, 96,172,217,188,112, 27,231,110,190,157,188,178,180, 90, 93,154, 43,
- 77,190,235, 59,191,155, 11, 23,207,243,193, 95,255, 85,180,243, 41,111,165, 18,214,150, 54, 57,123,230, 28,130,138,172, 41, 17,
- 86,225,132, 7,146,181,149, 53,226,100,135,194,129,146,130,210,104,226, 36, 69, 87, 26,147, 23, 52, 26, 41, 81,220, 32,175, 6,
- 36,141,148, 86,187, 9,194, 16, 73, 73, 81, 89,118,143,142,232, 13,135, 28,143,114,132,113,172, 46,175, 50, 26,230,172,173,181,
-104, 68, 17,221, 36, 98,104, 12, 81, 36,232,180, 83, 90,205, 4, 25, 37, 72, 39, 48, 85,129, 41,199,232,178,164,187,188,134, 44,
- 42,242,106,207,183, 97, 89,193,202,234, 58,189,254,136,131,131, 67,226, 56,193, 58,201,104, 8,205,172,141,182, 5, 68, 49,194,
-198, 36,201, 18,137, 40, 61, 97, 35, 92,179,185,245, 60,185,185,236, 52, 95,198,148, 4,226, 9,102,118,146, 23,177, 51,233,181,
- 8,129,144, 49, 82, 38, 68,113,134,138, 27, 36, 73,147, 40,201,136, 26, 9, 50,133, 56,141,124, 43,154,100,194,190,245,209, 95,
-132,196,206, 0, 97, 32,157, 32,144, 54, 70, 98, 67, 10,212,160,181,103,141, 87,149, 70,235, 10,140,158, 16,210,132,155, 73,119,
- 91,231,249, 3,206,131,148,117, 21,165, 22,168, 72, 65,146,160,146, 24, 73, 74, 20,199, 30,232, 66, 4, 47,100, 93, 75,247, 25,
-143,153,140,122,136,108,172,143, 14,228,180,181,211, 9,112,178, 6,119,144,225,239,234,122,254,220,189,228,252,249, 5, 34,242,
-180, 36, 21, 62,103, 89,239, 59, 97,131,171, 9,127,245,247, 74, 38,225, 58, 89, 80,190,174, 45,132,175, 53,226,252, 17, 91,235,
-143,161,217,140,201,178,132, 52,141,136, 26, 17, 68, 10,159, 59,247,209,147, 51, 62,179,129,213, 56, 91,249, 63,180, 33,131, 48,
-195,125,145,148, 96, 35,140, 74,209, 20, 28, 60,254, 5,126,255,193,223,228,242, 35, 79,145,143, 12,214,231,242,233,100, 13, 48,
-126,127,168, 42,223, 85,210, 31, 21,225,115, 20,148,165,111,253,140, 83, 69,150, 42, 90,153,194, 86, 5, 73,171, 73, 62, 46,233,
-116, 59,228, 69, 73,171,217, 36,205, 26, 84, 14,122,131, 17, 75, 43,203,222, 1, 3,122,195, 17, 46, 74, 24,148, 22,153,182, 56,
- 58,220, 99,117,165, 75,167,153, 32,149,100, 84, 24,226, 56,166,217,200,136,163, 8,107, 29, 42,142,176, 66, 5, 98,158, 36,106,
- 54, 89, 94, 89,166,191,119, 5,105, 12,249,120,128,179,142,230,210, 10,227, 81, 65,167,213, 33, 47, 42,156,132,172,149, 1,208,
-206,154, 20,227, 17, 73,148,179,181,186,198,250,242, 42,249,104,196,115,207, 62,141,138, 34,154,237, 22,221,141, 37,202,188, 96,
-255,168,135,174, 12,166,212,140,243,138,181,173, 11,244,122,125,158,123,106, 27, 37, 12,163,227, 67,154, 74, 80, 36, 10, 99, 4,
-177,176,196,194,208, 80,142, 36,202,104,156, 57,207,147,207, 61,135,146,142,245, 86,131,102, 35, 97, 92,105,191, 38, 29,200, 74,
-208, 59,234,209, 89,237, 82, 86, 57, 75,155, 91,152,193,144,102, 20,145,247,250, 44,117,218,228,205, 49,135,131, 62,145,138,104,
-197, 9,189,209,152,252,248,144,203, 79, 94,226,142, 55,188,129, 81, 89, 82,216, 10,165,125,135,137,213, 6, 93,213,109,150,150,
- 50,148,132,132,113,147,246, 51,107,237,196,213,117,206, 33, 13,115, 96, 75,112,118,103,161, 81,214,164, 48, 57,195,236,150, 34,
-236,224,211,250,245, 28, 80,138,217,123,131, 19, 29, 41, 2, 99,231, 9,123,211,192,115,210, 4,118, 77, 97,223,137, 58,136,116,
-115,220, 49, 21,222,204,205, 61, 95, 76,156, 25,231,124,105, 42,240,100,167,164, 58, 55, 79,182,113,194,206,180,122, 79, 83,238,
-190, 51, 40,252, 59,148,177,148,244,153, 79, 31, 4, 73, 16, 46,100, 66,163,153,125,104, 82, 31, 12,159, 65, 84, 71,234,243,233,
-234,185, 30,185, 9,221,254,148, 20,252, 53,160, 30, 72, 83, 82, 32,109,125,113, 66, 43,129,180, 40,229, 38,181, 4, 51,249,176,
- 93,168, 85,219,240,136, 2,152,204,151, 4, 38, 23,228, 68,195,156,147,210,111, 48,194,255,125,228, 57,208, 19, 32,168, 23, 75,
-237,204, 40,225,124,187,139, 16, 56,233,189,189, 60,212,179,210, 70,134, 70, 99,156,229, 96,111,151, 15,126,240, 1,190,240,240,
-103,168,116, 17,178, 10, 49,157,206, 18, 23, 46, 92, 64, 74, 65,146,196,180, 55,215,209,229, 24, 67,131, 86,167,203,153,115,231,
-136, 31,125,130,170, 42,105,180, 91, 68,113, 68, 89,122,214,112, 26,197,181,115,234, 9,214, 74,209,204,154,148,227, 28,227, 4,
- 7,189, 1,159,250,252,163, 24, 28,155,203, 75,188,245,141,119, 18, 75,129,144, 48, 30, 14,104, 52,252,141,107,180,102,235,204,
- 38,221, 78, 11, 37, 5, 90, 27,226, 36,193, 90, 75, 62, 30, 51, 28, 14,112,206,210,233,180,209, 70,115,120,112, 76, 81,150,168,
- 56, 33, 73, 18, 90,173, 22,198, 88,202,188, 32, 82,190,174, 27,199,138,170, 44,161,172, 72, 27, 25,169, 80,147,218,248,201,242,
-137,179,128,177, 88,231, 35,198, 73,198, 38,172, 9,103,197,228, 14,113,225,123, 33,195,239,234, 90,152, 16, 72, 21, 17,199, 9,
- 73,154,146,166, 9,113, 18, 17,199,145, 79,187, 43, 57,195, 75,179,158, 63,237, 0, 33, 39,183,146, 96, 74,228,148,248, 20, 30,
- 66, 16, 57, 71, 20, 0, 59, 14,145,186, 11, 53,101,223,131,106, 38,237, 96,214, 24,164,147, 56,103, 38, 17,125, 77,178,171,202,
- 50,212,168,124,186, 89,186, 4, 71, 52, 77,127, 41,233,183,163, 9,176,214,184,234, 2,123, 55, 84, 31,197,233,192, 61,155,237,
-154,237,246, 8,132, 21,102,182, 30,159,149,152,253,195, 25, 7, 75,212,239,107,167, 41,191, 73, 25,172, 62,207,176, 33,155,170,
-194, 20,154,170,244, 68,195, 52, 81, 40,149, 18,165, 17,178,145, 32, 18, 21,218,212,196, 36, 51, 34,173, 5,155,224,155,119,245,
- 28,243, 89,204,221,141,190, 78,169,132,160,218, 57,228,227, 15,254, 38, 31,251,216, 39, 24,246,199, 20,185, 33,141, 4, 73,146,
-146,196, 49,189,222,104,226,176, 15,199, 85,136,184, 44, 69, 89,161,148, 32,107, 68, 40, 5,205, 44, 69,224,104,181, 50, 70,163,
- 1,105,210,160,172, 52, 74, 68, 12, 71, 5,157,238, 10, 7,135,199, 32, 37,105, 35,101, 52, 30, 17,167, 41,253,193,128, 86,123,
-153,241,200,167,169, 27,105,226,217,210,198,128,243, 90, 17, 90,107, 54, 55,183,120,238,242,101,180, 5,169, 18,116,149, 83,149,
- 37,103,206,158, 67,196, 9,227,193, 49,173, 44,229,224,234, 30, 24, 75,156, 54,232,247, 7,180,187,203, 12,242,156,113, 62,102,
-101,109, 21,131, 33,141, 35,180,201,217, 58,179,206,230,106,135, 42, 31, 51, 26, 13, 25,133, 52,121,171,221,102,101,125,149, 94,
-175, 79, 85, 20,180, 90, 45,122, 71,199, 24,107,200,178, 6, 87,175, 94,197, 90, 75,101, 13,253,241, 0, 33,161, 48, 14, 25,167,
-236, 31,238,162,199, 3,226,141, 46, 35,171, 17,141, 22,141,172,205,215,189,241,117, 60,125,229, 10,165, 19,228,163,156, 40, 75,
-105,100, 41,101,161,137,155, 41,187,219, 59,108,172,173, 81, 13, 70,108,172,109,240,228,193, 33, 75, 89, 70,171,221,166, 63,232,
-179,181,117, 6, 13, 28,244,135,164,157, 6, 73,101, 24, 27,203,238,213,171,116, 86,150,185,233,142,219, 25,228, 99, 74,231,124,
- 39, 70,101, 48,229,180,221, 82, 25, 51,233,248,240, 36,179, 41, 67,220,132,182, 77,135,153,107, 61,115,179, 44,241,128, 33, 86,
-248,123, 24,107,103, 72,100, 33, 32, 56, 65, 76,155, 77,155,207, 70,207,215,166,188,197, 84,199,225,154,186,123,184,103,102,210,
- 12,117,234,124,178,162, 29,115, 61,247,167,150,159,197, 76,231,143,171,157,241,105,247,214,108,249,217,123, 90,114,190, 3, 64,
-136, 73,240, 44, 3, 19,190, 46,255, 73,165,144, 33,168, 82, 74,249, 72, 61,128,122, 13,232, 66,200,185,222,120,231,156,175,169,
-135,112, 43,156,196,148,145,167, 66,191,156, 12,233,199,105,195,187, 56,149,252, 48,249,185,146,126, 99,149, 18,173,124, 45, 89,
- 86,138, 82, 86, 24, 99,253,107,215,139,192,186,169, 83,225,172, 23,251,112, 2, 99,252,137, 68, 33,197, 61, 57,241,186, 95,175,
-246,241,130, 32,135,169,185,142,110, 74,194,112,212, 41,247, 64,170, 17, 14, 37,156,143,212,133, 3, 37,112, 72, 68, 44,120,238,
-153, 39,125, 47, 38,112,238,220, 57, 14, 30,125,130,178,202, 25,141,142, 65, 24,164,138,144, 50, 97,235,204, 89,206,157, 59,203,
-185,179, 91,140,135, 3,180, 29,177,182,186, 66,186,180,137, 72,155,188,230,117,119,242, 75,191,242,107,180, 59, 29,178,102, 19,
-109, 13, 10, 65,171,221, 33, 82,161, 85,196, 58, 84,168, 5, 58, 11, 89,163,137, 53,112, 56, 24,144, 91,131, 18,130,209, 40,167,
- 17, 37,232,106,204,234,234,186, 23, 80, 17,146,115, 7,103, 41,202,146, 51, 91,103,104,196,177,111, 31, 11,139, 81, 69,178,166,
-168,134, 13,221,177,188,188,140, 49, 14,231,250, 84,218,208,108, 54,189,128, 76,168,237, 39,137,160,116, 62, 29,101,156, 69,231,
- 5, 75,141, 38,137, 95,127,147,108,137, 49,230,121, 91, 11, 79,227, 58,184, 19, 29, 16,214,185, 41, 16, 75, 69, 20, 39,196, 65,
-168, 39,138, 36, 81, 92, 47,240, 25, 65,139, 80,139,159,118,113,136, 73,204, 42,102, 87,163,152,222,140,190, 34,229, 80, 54,154,
-128,155, 13,194, 18,147,182,176, 64, 28,115,161,182,172,148,154,128,161, 79,123,227, 1,177,168,208,198,247,160, 41, 27,135,207,
- 58, 10, 45, 92,222,123,151,136, 57,172, 13,121,195,201,207,167,108,213,217, 58,226, 60, 41,111,150,120,106,197, 60,249,116, 34,
-236, 81,111,112, 97,183, 17,110, 74, 84,173,137,116,132, 99,117, 53,243, 93, 87,232,178, 66,235, 10, 83,148,216,178,164, 42,115,
-156, 51,168,180,141,138, 64, 68, 2, 17, 73,156, 82,160, 60,175,192, 10, 91,187, 74,129, 70, 81,103, 76,152,219,248,166,169, 74,
-233, 51, 1,195, 35, 30,251,232,199,248,157, 15,124,144,253,195, 35, 48,144, 8, 73,179, 25,145, 36, 49,251,251, 3,226, 88, 97,
-141, 67,107,131, 20, 2, 19,128, 33,137, 5,113, 34,145,210,146,166, 9, 73, 12,221,165, 54, 85, 85,250,171,238,240, 90, 9,206,
-178,188,188, 66, 94, 26, 70,121, 65,218, 72, 41,181, 38,138, 99, 70,227, 28, 33, 35,142,142,142,200,141,193, 84, 5, 50,105,210,
-233,180, 81, 74,145,101, 25,205,166, 23,183, 25,246,135,180,154, 29,134,227,156, 60,207,145,113,194,202, 74,139,172,149,145, 15,
- 7, 36,174, 98,239,234,101,176,134, 72, 69, 56, 7,141,172,197,112, 56,166, 44, 11, 54, 54,214,200,203,156,173,141,117,148, 20,
-172, 47, 47, 35, 29,129, 19, 19,163,171, 10,109, 12,141, 70,202,185,155, 46,114,120,116, 68, 81,149, 88,173, 57, 58, 58, 98,103,
-123,155, 88, 69,108,135,175,121, 89, 32,226,152,188, 42, 57,238, 29,179,123, 52, 0,213, 64,151, 21,235,221, 54,157,165, 21,110,
-191,233, 28,221,212, 59, 59, 54,141,217,223, 19,228,101,238,249, 7,177,228,169, 39,175,178,185,117,150, 51,103,206,178,187,189,
- 67, 62, 28, 35,181, 23,191, 73,179,140,202,104,116,145, 19, 39, 41, 71,199,199,156, 57,123,142,194, 60,199,113,127,192, 82,119,
-153,170,215, 71, 41,197,147,151, 46,177,186,185, 78,119,109,133,161,246, 89, 21, 83, 25, 76, 84,133,246, 73,131,210,158,112, 57,
-213,100,112,147,108,146,169, 3, 53, 51, 21,110,154,136,191,212,189,228,206, 7, 7,206,217,153, 30,236,192, 99,177,146, 90,210,
-234, 52, 78, 85,184, 67, 39,160,235,219,132,221, 4, 83,166, 68,223,186, 43,198,151,236, 8,130, 56,238, 68,119,212,108,164, 63,
-219,134, 54,193,197, 25,199, 92,156,214,131,206,180,158, 63,185,213,229,124,185, 14,105,167, 89,232, 19,193,179, 82, 83,246,187,
- 8,160, 94,147,230,164, 82, 56, 53, 45, 55,213,156,159,169, 64,207, 52, 48,136,230,210,170, 39, 90, 10,148,148, 19,146,211,105,
-253,236,215,245, 94,194, 71,110,165, 36,114, 62,149, 26,107, 67, 18,122,183, 43,173,209,122,190,197,102,182, 13,192,217,169,130,
-143,181,150, 40,138,230,179, 8,245,113, 58,231, 25,186,110,170,120,197,132,157,233, 38,164, 35, 85,115, 5,132, 35, 22, 46,124,
- 31,180,146,116,137,181, 99, 42,237, 23, 80,220,236,178,182,177, 73,119,123,151,178, 44,124,141,133, 58,171, 96,121,250,233,167,
-248,236,103, 62,205, 31,255,250,187,216,221,121,142,118, 2,113, 18,179,185,118, 30, 11,188,249, 45,111,241, 17,115, 81,128, 32,
-168,173, 89, 42, 99,137,226,120,114,158, 8, 73, 28, 39,147,158, 95,165, 36, 85,169, 39,192,149, 37, 49, 78,107,150,186,109,202,
- 50,103,117,105,147,223,251,212,103,217,217,221,231,246, 91,111,166,217, 72,112,198, 80, 22, 5, 50,106,248, 62,248,224,237,225,
- 44, 69, 62,166,211,234, 32,149, 98,117,117, 21,107,161, 44, 53, 66, 40,242,188,192, 85, 21,113, 18,227,170, 18, 97, 12,121, 49,
-196, 40,137,168, 12, 50,139,161, 10,139,209,213, 92,138,144, 46,226,198, 55,218, 11, 1,251,208,235,132, 84,158,121,174, 98,133,
-138, 37, 50,150, 19,162,157,175, 23,157, 80, 95,154,112, 45,166,137,232,233,205, 87, 31,167,155,130, 13, 65, 96,200,121,132, 85,
- 54, 66,165,177, 7, 60,235, 60,192,107,141,171, 74, 79,182,155,244,121,187,192, 12, 15,206,181,117, 8, 99, 48,149,191,225,141,
-214, 68, 73,130, 50, 17, 50,138,144, 74,226,130, 3, 44,230,116,212,196,233, 98, 76,142, 57,103, 68,156,162,181, 48,219, 66, 39,
-194, 61, 90,215, 23,235,141, 67, 76,196,110, 12, 86,155, 73,219,155,173, 52, 78, 91, 76, 85, 98,170, 10,171, 43,223, 45, 80,149,
-152,178,196,149, 5,186, 42,137, 19,127,127, 42, 50,148,244,217, 46, 33, 3,184, 7,130,164, 19, 39,210,140,245,106,112, 39, 4,
-158, 16, 88,167,176, 46,231,202, 99,143,242,192, 47,254, 27, 46, 63,254, 69,144,130, 40, 82,180, 82, 69,156, 8,142,143,135,196,
-145,240,107, 29,129, 20,202,139, 4,197, 18,107, 45,113, 44,137, 34, 72, 98,104,183, 99,186,221, 22,198,104, 6,253, 62,157,118,
- 23,109, 28,141, 52,165,200, 75,146, 70,139,163,163, 35,132,148,164,141, 12, 25, 69,148, 85, 69, 89, 85,196,105, 70, 53,202, 25,
-143,134, 68,137,162,221,206, 72, 98,197,250,218, 26, 82, 70, 28, 29,245, 16, 82,209,136, 61,207,165,168, 52, 89,171,133,113,222,
-153,232, 29, 31,161,170, 49,123,219, 87,168,202,130,172,145,225,149, 55, 65,107,205,120, 56,100,109,121,137,225,241, 49,183,221,
-118, 43, 70, 87, 52,162,152,241,113, 31, 41, 32, 74, 98,198,165,102,255,224,144,243, 23,206,179,177,185,193,195,143, 93,226,240,
-232,128,141,149, 21,168, 52,135, 7, 7, 12,135, 67,172,241,153, 54, 99, 53,105,150, 50,172, 52, 69, 85,162,226,148,102, 91, 34,
-147, 22,107,203,203,116,211, 8, 18,197,213,195, 49,201,170, 34,139, 44,221, 36,229,117, 55,159,225,112, 48,166,223, 27,251, 54,
-215,245, 53,246, 14,247,232, 53, 27, 32, 97,239,232,144,245,213, 53,142,143, 15, 88,219,218,226,233,199, 30,165, 17, 41,148,144,
-228,101, 73, 83, 27,206,108,108,145, 63,251, 28,174,210,116,155, 77,242, 64,214,252,220,167, 63,205, 55,253,241,111, 38,203, 50,
-164,210,152, 72,163,163, 8,167, 13,166, 50, 68,129,187, 82, 3, 97,205,142,247,117,101, 15,222, 38, 0,127, 53, 17, 85,178, 33,
-210,215, 84,218,139, 91, 77,218,200,172, 13,125,164, 18, 33, 66, 29,159, 27, 72,180,205, 0,187,157, 21,123, 10, 14,224,188, 10,
-222,180,253, 78, 50,163, 39,193,137,182,210, 25, 62,214,105, 45,223,147,125, 39,252,251,121, 21, 79,107, 54,191,172, 3,102, 49,
- 5,238, 89, 80,143,166, 0,238,193, 93, 33,163,128,191, 74, 78,212, 27,253,223,170,186,166, 60,173,186,225,247,132,232,180,254,
-192, 57, 70,222,204,247,167,157,220,245,163, 55, 95, 23,143,128, 72, 69,232,200,215,176,170,178,162,210, 30,216,171,170, 10, 23,
-216, 78,234,235,214, 56,172,152,175, 73,104,173,167, 81, 95,164,124,186,179,174,179, 7,182,175,239,183,242, 23, 74,212,125, 15,
-117, 45, 61,108, 74, 83,224,183, 56,234,243,115, 84, 69,193,184,210,164,173, 38,145,144,228, 69,193,167, 63,243, 89,134,163,161,
-143,172,141,131, 80,231,191,237,150,155,249,214,111,249,102,156, 53,148,149, 65, 54, 51,132,138, 89, 89, 94,198,169,136,165, 78,
-155,172,209, 32,105, 52, 25,141, 75,186,221, 44,244, 87, 74,132,140, 16,210,183,189, 36,113, 74, 18,165, 56,103, 73, 27, 13,198,
-163, 49,210, 24,146, 0, 10, 43,157, 78, 64, 20,223, 91,190,119,120,200,104, 52,162, 50,150,241,120, 76,150,164,164, 73, 76, 20,
-121,181,180, 40,108,158, 2,139, 49,149,103,236, 18, 34, 33, 41,137,227, 24,109, 60, 79, 34, 77, 83,138, 74,123, 30,131,209,147,
-136,174,200, 43, 50,103,209,198,215,190,107,189, 0, 2,184, 19,212,226,156,171, 5,130,100,168, 95,205,170, 27,205,168, 28, 57,
- 78,252,108, 26,181, 34, 36, 66,120,113,154, 40, 82,168, 40,164,251,235, 71, 93,179,158,220, 92,211, 27, 77,206, 68,190, 98,234,
- 74,207, 69,182, 53, 25, 78,204,122,173,210,161,172,244,117,239, 16,109,251,122,113,236, 1, 48,164,231,141,214,152,154,249,235,
- 28,194, 89,207, 84, 15,153, 36,129, 69, 59,139, 53, 10, 25,197,193,163,142, 38, 94,246,172,226,134,112, 39, 19, 91,243, 9,235,
-211,148, 28, 39,100,190,153, 77,104, 2,162, 33,235, 64,232, 65,183,198,224,116, 96,242,107,141,169, 74, 92, 85, 97, 75,207,110,
- 55, 85,137, 51, 30,216,157,174,176, 90,131,169,192, 84,190, 29,172, 82, 72,147,162, 92,138,144,241,244, 50, 9, 78, 85,134,155,
-100, 76,234,207, 87,122, 14,139,179,190,206, 63,218,221,225, 67,191,252,239,248,204, 71, 63,134,172, 28, 73, 35, 70, 70,208,200,
- 18,122,189, 94, 96, 44, 75,226, 64,136,243,145,186,196,106, 67,146, 70,190, 84, 34, 33,203, 50, 54,214, 86,176,206,208,239,245,
-104,102,109,202,210, 32,101,196, 96, 48,164,221,238, 50,206,199,148,149, 38,109, 36, 8,169,168,180,102, 92,150, 20,186,162,114,
- 80, 25, 67, 28, 75,226, 72, 18, 71,138,110,167, 67, 89,148,196,169, 98, 48, 28,177,177,177, 9,214,176,189,179, 71,218,106,161,
-141, 33,207,199,232, 98, 76, 36,161,183,119, 21, 87,230, 68, 97,239, 8,101, 94, 14,246,247,200,210, 20,170,130,115,155, 27,140,
- 7,125,170,178, 98,224,124,105,175,211,238,176,125,116, 76,163,217, 98,235,226,205,244,243,156,222,211,207,144, 68, 9, 23,111,
-186,141,254,225, 33,253,163, 30,149,118, 68, 73, 3,165, 4,189,163, 35,202,170, 96, 52, 26,131, 84,140, 71, 57,237,229,101,110,
-218, 92,193,160, 80,206, 50,234, 29,177, 51, 26, 49, 94, 93, 65,148, 99,110,222,232,226,142, 15, 89,222, 88, 71,218,138,173,246,
- 58, 85,110, 25,149, 37,194,104,196,120, 72,214,200,120,250,202, 51,164,221, 54,237,149,101,178, 52,241,193, 86,156,208,239,247,
-104,119, 58,244,123,125,206, 93,184, 64, 94, 22, 60,119,117,135,238,250, 38, 20, 21,253,178, 68,146,241,216, 23, 30,229,206,175,
-187, 11,149,197,228, 69,137, 84,145,239,199,143,172,175,181,187,121, 80,159, 21, 31,243,130, 73,190,235, 34,214, 1,212,245, 52,
-125, 95, 85,122, 42,207,106, 29,122, 2,240,204, 71,188,136, 19,169,119,230,216,230,211, 20,253, 12,169, 90, 76,245, 97,234, 54,
-235, 73, 95,119,205,114,159,193, 25, 59, 3,236, 19, 69,147, 58,107, 48,231,104,187,235,102,173, 79,118,139,157,116, 10,148,172,
-235,232,211,136,188,230, 45, 9, 41, 17,170,110, 97,243, 64, 46,164,240, 95,149,151, 98, 22, 65,153,147, 32,160, 51,201, 98, 50,
-229, 52, 68,179, 82,115,167,121, 37,190, 53,105, 26,133, 48,219, 99, 87, 23,243, 78,213,128,159,214, 57,132,112, 40, 21, 99, 34,
- 15, 42,177,142,252,133,140,171, 64,100, 10, 23,218, 26,140,176, 84,214, 77,122,207,107,229,181,105,239,174,157,122, 43,245,230,
- 93,247,242, 90, 55,145,244,156,144,141,106, 86, 63, 54,164,225,125,110,212, 9,233,107,194, 88,134,163, 17, 69,165, 80, 89,138,
- 3, 58,157, 46,205,102,147,183,191,237, 27,216,221,189, 66,145, 87, 62,101, 46, 28, 10,199, 82,183, 77,191,223, 39, 47, 43, 14,
- 7,144,117, 52,194, 89, 34, 33,216, 92, 89, 97,115,109,141,195,254,136,195,163, 1,227,194,178,190,210, 69, 41, 77, 28, 69, 24,
-103,136,165, 23,141, 1,129,140, 34,126,231, 19, 31, 39,113,130,209, 81,143, 22, 18, 17, 43, 86,150, 58, 36,169, 87, 64, 67, 69,
-236, 29, 28,210, 93, 89,163,187,188,138, 41,115,159,246,181,150,102, 35, 67,196, 9,197,104,136, 16,241,244, 51,194, 6, 45,105,
- 77, 89,106,164, 16,158, 24,212, 20, 28, 31,247,136,227,120,146, 86,175,170,194,147,166,132, 87,205,243,146,111,207,151,106,159,
- 1,124,230,193,123, 22,204,103,123, 85,189,159, 53,253,189,144, 42,148, 53,234,250, 61,115,252, 7, 49,243,239, 89,101, 42, 49,
- 43, 45,233,174, 45, 51, 79,123,198,197,180,181,210,249,243,115,194, 33,172, 3,139,231,109, 72, 9,177, 66,197,202, 51, 71,141,
- 65,151, 37,186,244, 81,188, 23,105, 17,147, 62,245,186,115,192,225, 83,137, 86, 91,132, 84, 24, 85, 77,110, 80, 41, 37, 40, 57,
-233, 26,153,166,224,174, 21, 80,150,179,106,138,215, 73, 7, 82,235,211,215, 90, 9,218,183,229,153,210,171,235,153,178, 12, 41,
-246,130,170, 44,176,149,255,222, 25, 29, 74, 11,158, 40,136,179, 56,237,201,110,194, 25,172,136,176, 57,216, 34,198,150, 41, 42,
- 81, 16,197,224,162,192,180, 23, 97, 45,137, 57, 66,159,155,187,234,110,178, 9,186,241,128, 71, 62,244, 33, 30,252,133, 95,196,
- 86,150, 72, 70, 40, 11,173, 78,131,225, 96,228,179, 82, 66,129, 83, 20,133,119,232,107, 39, 33, 77, 98, 76,101,137, 19,104,164,
-138,173,141, 13,148, 18,140,122,125,112,146, 36,105, 50, 30,141,124,205,185,170,104,181,219, 28, 31, 31,251,107, 30,148,235,122,
-253, 62,218, 90,210,172,201,104, 92,144,151, 37,221, 86, 74,214, 72,136, 35, 73, 18, 71,244,250, 67, 84,105, 16, 8,170,170,226,
- 96,111, 27, 25,197,236,238,239, 98,140,229,204,153, 45, 14,118,174, 32,108, 69, 62,232,121, 1,156,200, 7, 35,113,170, 56, 58,
- 62,242, 4,189, 36, 38,201, 18,118,246,118, 40,141, 69,197, 49,205,102,139, 98, 60,102,127, 56,230,236,205, 55,163,173,101,183,
- 63,100,121,105,137,118,179,201,149,103,158, 97,251,234, 30,101, 62, 70,231, 99,180,246, 12,255,225,176, 79,163,145,224,156, 69,
- 91,135, 43, 43, 90,205, 22,141,164,193,225,193, 1,163,188, 98,120,184,199,197,245, 37,108, 57, 70,209,161,215, 47, 40, 86, 59,
- 72, 98,142,143,250, 72, 39,232,180,155, 20,137,166, 58, 28,211,141, 5,227, 50,247,179, 18,156,101, 48,232,211,220, 88,199, 58,
-199,230,217, 51, 28,110, 95,197, 90, 15, 92,173, 86,155,170,200, 57,119,102,157,209,120,196,254,225, 1,157,181, 77, 10,227,208,
-121,197,222,206, 1,135,187, 7,172,110,109,208, 72, 82,242,170,244,206,158,180,126,157, 59,119, 90, 19,186,135, 24,107, 61,159,
-165,214, 73, 48,117, 86,201,119,166,232,144, 89, 41,171, 10,173, 13,149,148, 84, 33,208,243,160, 45, 79, 48,205,197, 68, 21,197,
-205, 52, 41,215,100,186, 57, 31,217, 77,163,121,113,162,185, 78, 4, 69, 83, 39,132, 87,200,171,107,224,245,189,232, 2,190,213,
-117,242,185,125,200, 78,121, 50,215, 40,177,138,185,247,152,229, 7, 8, 57, 75,140,147,215,232,224, 83,179,255,107,102,247,204,
-247, 19, 98, 29, 98, 46,213, 63,207,195,247, 55,103, 52,187, 65,158,214, 59, 39,197,172, 54,173,152,219, 84,231, 62,234, 19,233,
- 66, 59, 17,119, 15,100, 1, 2, 65, 32, 14,105,253,200, 98, 76,140,142,125,196, 94,150,254,171,179, 94, 2,180, 38,207,205,138,
-203, 76, 54, 56, 21,104,255, 51,169,151,201, 48,142, 16,165, 79,100,108,157,239,153, 37,212,103,156,244, 68, 58,156, 79, 97,104,
-237, 61, 69,165, 98, 26,205,140, 56, 73, 56,238,245,177,214,241,216,227, 79, 80,228,101, 40,144, 26,150,151,186,220,124,243, 77,
-156, 57,115,134,193,225,161, 23, 15, 17, 10,135,100,112,116,196,168,168, 24,150, 37,171,203,203, 60,125,121,151,164,217,197,138,
-200,147,212, 48, 8,103, 81, 18,218,161,206, 45,157,227,184,127,204,149,157,109, 94,119,225, 38,108, 81,144, 73,201,210, 82, 23,
-163, 75, 6,227, 1,113, 22,211,219, 63, 96,103,247,128,195,222,128,155, 47, 92,228,153,103, 47,179,210,237, 32,156,161,213,106,
- 49,202, 75,242,162,160,106, 68,164,113,132, 53,154,124, 60, 98, 85, 42, 10, 91, 77,116,215,227,216,139,191,164,105, 74, 81,106,
-146, 56, 33,137, 99,156, 0,157,123, 5, 50,240,169, 76, 6,189, 19, 24, 46,107,237,184, 73, 59,226, 73,109,253,121,237,126,119,
-221,148,153,171, 19,249,117, 29, 41,242,233, 38, 15,136, 98,210,222, 49,149, 18,119,115,192, 34,102, 2,126,196,181, 45,150, 98,
- 78, 1,195, 3,187,116,179,169, 98,199, 76,131,105, 96,169,135,190,120,227,136,162, 8,147,248,168, 93,151,165,207,124,216,105,
- 54, 73, 4,178,163, 16,161,239, 93, 24,172, 22,161,155, 98,202, 73, 17,147, 8, 62,212,198,212,108,251, 73, 45,234, 34,166, 17,
- 3,204,245,184, 78,136,137,166,126, 24,116, 85, 97, 42,141,173, 10,127,108, 85, 16,226,169, 10,108, 85, 97,117,137,209, 37,206,
-148,161,204, 80,129,174,112,161, 21,205, 90,141,177, 26,233, 52,202,165,152, 76, 97,242, 12,147, 15, 17, 81,132, 16,145,119,136,
- 34, 95, 82,168, 63,100, 71,125,236,179, 60, 6,129, 51,254,115,215,101,206,213,199, 62,207, 47,253,244,253, 84,123,135,126, 51,
-140, 35,150, 90, 77,198,197,144, 92, 87, 40,231,163,138, 34, 47, 9,229, 79,223, 55, 28, 24,211, 4, 93,249,141,181, 53,112,150,
-241,168,100, 48, 24,209,110,175, 48, 26, 21, 40,233,107,206,237,118,215, 75,232,106,223,178,101,172, 97, 52,214, 24, 99, 17, 74,
-162,181,161,212,190,181, 81, 8,200, 26, 9,173,166,111, 31, 19, 42,102, 56, 28,176,182,126,134,103,159,125,150,110,183,193,168,
- 40, 24,143, 70,156, 61,119,142,203,207, 60, 69,100, 43,170, 98, 68, 34,160,204,115,226,134, 64,169,132, 65,175, 79,150, 36, 68,
-248,249, 15,135,131, 30, 42, 73,104,173, 46, 19, 55, 50,142,142,250,172,159, 57, 75, 20, 37, 20, 14,186,203, 43, 88,103, 57, 26,
-140,120,226,210, 83, 52,148,162,127,112,236,165,169, 27,137,119,168,117, 69,163,221, 69,151, 5, 66, 72,146, 70,147, 76,197, 28,
- 29, 29,209,239, 95, 37,183,240,236,149, 93,206,174,182, 88, 91,110,179, 92, 74, 26,162, 96,115,117,141,225,184,192, 40,201,122,
-119,149, 65,127,128, 25,140,104, 45,101, 44,199,171, 68,251,135, 52, 75,195,176,178,136, 60, 39, 63, 58, 98,144,166,196,113,196,
-202,234, 26,207, 92,122,130, 70,156, 48, 24,141,104, 55, 59, 28,247,142,185,121,245, 2,107,107, 43, 28,244,159, 99, 52, 24,210,
-110,181, 25, 85,134, 72, 37, 92,122,236, 9,150,215,214, 32,176,179,231,242, 78,147, 76,152,152,215, 97, 8,197, 80, 97, 20, 70,
-123, 73, 86,165, 13, 86,134,122,124, 80,132,243,221, 86, 80, 73,233, 37, 93,131, 52,181,159, 99, 32,102,100,150,231,137,114,238,
- 20,254,206,220, 94, 52, 19, 57,219, 19, 76,116, 81,139, 82,213,186, 14,206, 98,141,192, 8,223,230, 92,223,143, 19,172,156, 25,
- 86,131,148,243, 78,254, 9, 65,153,201, 0,150, 19,153,110, 21,244, 42,102, 63, 35,174, 27, 14, 79,247, 2, 17, 30, 88, 91,119,
-212, 79,196,102,166,251,233, 12, 81,238, 70,169, 3,112,161,141, 39,104,237,205, 2,250,204,201,156, 76,145,248, 22,181,144,166,
- 8,195, 31,172,192,171,126, 5,141,191, 64,134, 70, 73,129, 83, 94,141,202, 25,129, 9,253,241, 88,135,211, 38, 16,171, 66, 90,
- 82,121,207, 80, 24,207, 92,159, 12, 17,112, 83,253,223, 90, 34,180,246,180, 68, 24,226,226,228,164,201, 2,171, 82,172,202, 88,
- 63,115, 11,219,143, 95, 66, 68,128, 46,208,229,152, 56,130,139, 55,157,225,241,199, 31,230,201,167,158,192,184, 18,129, 1, 41,
-232,143, 70,164,205, 46, 82,164, 52,162,148,172,211, 33,107,167,180,187, 93, 28,138,221,237,103,233, 44, 47,115,219,197,155,248,
-228,231, 31,163,170, 52, 42, 46, 16, 34,198, 10,129,136, 34, 26,105, 10, 74,121, 39,198,149,116, 91, 75,124,253,155,222,194,209,
-238, 30, 78, 88,218,173,140,179,103, 55, 61, 81,201, 57,180, 21,124,252, 19,191,207,218,218, 6,119,222,122, 43,163,113, 78,146,
-181,184,116,121,155, 52, 77,216, 56, 95, 98,139,130, 8, 24,143,115,210,172,225,153,237,253, 1,105,164, 40,149,130, 88, 49, 46,
- 43,210, 52, 35, 31, 23, 56, 41, 88, 89, 94, 34, 31,143,136,226,148, 82, 91,148,208, 52, 26, 13,164,146,148, 78,146, 32, 16, 78,
- 35,133,195,134, 60,135, 17, 98, 34, 60,115,163, 41,121,167,105,250, 79, 0,181, 78,109, 9,139,148,222,201,137, 20, 33, 5, 47,
-136,148, 67, 5,221,117, 33,221, 36, 17, 52, 59,107, 64,204, 42,186,213,125,175,167,100,139,220,132, 22, 26,234,207,190,138, 18,
-110,134,112, 92,118, 94, 29,177,230,107,212,195, 95,162, 56,154, 68,236, 58, 8,220,216, 32,213,234,163,231,169, 64, 70, 45, 41,
- 59, 81,142,146, 18, 41, 3,167, 36, 73,188, 44,173, 82, 65,200, 69, 76, 68, 51,188, 24,142,241, 29, 5,225,181,117,237,216, 26,
-235, 25,235,101,221, 78,228,133,118,180, 30, 97,170, 10, 93, 21, 1,192, 13, 46,200,184, 98, 43,172,245,145,186, 13,204,127,103,
- 76,232,131, 15,142, 49, 48,150,144,229, 21,201, 96, 76, 34,251,196, 26,168, 52, 52, 50,136,163, 48,176, 69,214, 77,245, 30,228,
-101,136, 84,144,148, 50, 1,145, 32,141,166,216,219,229, 87,127,250,103,120,238, 11,143, 32, 68, 68,156, 8,210, 52,161,168, 52,
-163, 97,133,239, 56, 86,140,243,106, 34,209,233, 73,134,254, 90,107, 12, 73, 36,104,181, 82,154, 89, 66, 85,149,244,122,125,146,
-164, 69,105, 44,227,178,164,153, 53, 49, 78,144,181,219,244, 71, 99, 92,152,180, 40,132,161,215, 31,144,100, 25, 42,142,169,180,
- 97,127,119,159,205,205, 85,218,141, 6,205, 56,193, 86, 6, 41, 85, 96,162,183,232, 29,239, 98,117,133,165,203,246,246, 21,214,
-214, 87, 57,218,187,130, 45,134,228,225,126,234,231, 35,150,151,151,193, 57,138,145, 23,110, 90, 89,219,240,221,205,105, 66, 44,
- 44,203, 43, 43, 20, 85,133, 76, 82, 46,220,178,206, 96,152,211,106,117, 89,107,181, 65, 73,158,188,252, 28, 90, 56, 92, 51, 35,
-215,154,229,243,103, 17, 90, 51, 56, 62, 70,139, 24, 34,133,118,150,180,153,146,143,251,236, 30, 28, 16,225,136,133,244,217, 34,
- 1,218,228,228,227, 8,105, 97,101,125,149, 74, 23, 28,244,142, 88, 95,222, 0,171, 48, 68,100,203,203,236,236, 94,197,198,138,
-172,213, 68, 45, 47, 35,198, 57,241, 96, 76, 55, 85, 68,229,152,225,113,159,164,213,166,153, 89,178,118,155, 72, 74, 6,199, 3,
- 63,199,193, 41,134,163,146, 86, 35,227,236,250, 42,207,108,239,209,108, 55, 49,145,164, 40, 10, 80,146,237,103,159,101,253,220,
- 89,239, 88, 6, 57, 86,103,237,156, 38,121, 77, 0,115, 98,218, 33, 37,156,243,140,110, 87,183,126,250, 44,144, 69,214, 77,174,
- 65, 3, 67, 35,165, 37, 82,214,183, 21, 90, 79,128,158, 37,224,205, 42, 59,217, 73,180,234,230, 2,138, 73, 38,121, 38,133,238,
- 78,200,181,214, 25,205,186,244, 59, 87,235,159, 12, 77,154,200,197, 77, 2, 17,127,142, 97, 98,100,157, 45,228, 90, 80, 23,129,
-224, 43,103, 34,109,159,110,119,215,148,186, 39,228,216,192,145,145,130,160,134, 23,218, 90, 29, 8, 25, 50,212, 42,240, 93,130,
- 24, 77, 13,234,118,102,234,105,116, 93,241,118, 78,100, 85, 79,148, 71,231,164,175,197,137,180,128,240,180,126, 55, 51,130,213,
-111, 88,126, 90,142, 49,198, 19,121,140,157, 68,228,174,142,176, 3,233,166, 38, 49,216, 25,121, 89,105, 45, 24, 95, 95,112,147,
-246, 56, 49, 73, 91,186, 48,124,160,238,123,244,100,115,255, 1, 72,100,208, 44,150,104, 36, 43,235,231,208, 42,163,116, 10, 39,
- 21, 73, 26, 81,149, 37,105,234,199, 71,222,121,231,235,120,234,217, 39,233,245,119,189, 76,169,138,120,221,107, 94,203,219,223,
-246, 54,142,143,142,137,170,130, 84,217,112, 30,128, 76,232,118,186, 40, 41,120,243,155,222,200,175, 60,248, 17,100, 35, 67, 74,
- 73,169, 53, 69, 49, 38,142, 34,207,112, 45, 42, 70,253, 30,253,222, 17, 66, 87,220,113,241, 38,246,246,246,144, 18, 86, 86, 87,
- 88,234,118,112, 66,176,178,182,134, 72, 26,220,116,203,205,140,134, 99, 42,171,121,228,210, 19, 24, 41,201, 15, 11,242,113,193,
-153,141, 45, 46,108,172,209,109,183,201,203, 49,101,208,255, 30,246,123, 20, 65, 3, 62,175, 42,146, 52, 33, 73, 98, 70,195,145,
-175,175,231, 37, 27, 27, 27,196,113, 76, 89,110,211,202, 34,100,236,111,186, 66, 87,164, 74,129,173, 60, 9, 43, 48,155,167, 98,
-135,238, 90,176,190,102, 40,207,141,148, 0,125,125, 82, 73, 71, 20,121, 89,217, 72,133, 62, 77, 85,179,238, 79,146, 85,174, 67,
- 78,153,212,218,221,169, 60,154,201,219,219, 16,225,215, 58, 49,202, 59,142,136, 80,182,113, 83,233, 75,159, 38,155, 97,157,198,
-177, 39,113,233,192, 32, 15, 4, 59,107,140,175,181,219,233,100,183,122, 74,155,255,220, 60, 33,210,196, 49, 70, 87,196,113, 60,
- 33,214,249,238, 29, 49,153, 42,231,140,193, 86, 37,186,244,132, 61,109, 60,247,196,106,141, 46,125,109,220,134, 90,191, 53, 26,
- 99,198, 62,181,110, 53,194,250, 44,144,215,101,215, 56, 91,226,156,158,240, 77, 68,221, 71, 89, 59,186,214, 96, 29, 12,135,218,
-119, 61, 4,209,145,108, 60, 34, 26,117,144, 89,138,140, 19,100, 28,251,169,131, 42,158, 76,101,115, 42, 66, 69, 96, 85,140,136,
- 19, 95,230, 25, 15,249,216,127,254, 85,126,239,193,223,192,228,185,151, 73, 13, 65,192, 81,111,224, 51,119,218,247,181, 87, 6,
- 95, 6, 8,174,130,196, 79, 62, 76, 83, 95,130, 57,115,102,131,162,244, 19,204,242,194,176,214,109,177,179,191, 71,156, 54,176,
- 2,146, 70, 6, 66, 82,150, 37, 42,146, 33,141,107,136, 66,175,121,162, 34,158,126,230, 57, 26,169, 34,142, 20, 73, 28, 81,228,
- 57,105,154,122,173,244,178, 36,107, 54,217,190,122,133,243, 23,111,225,201,103, 46, 35,133,164, 42,114,142, 15,246,200,226,136,
- 72, 66, 62, 24,177,177,190,238,117,224, 7, 3,162,164,201,109,119,188, 6,237, 4, 66, 37, 84,206,178,178,186, 68,146, 36,164,
- 77,193, 56,207,217,221,221,101,235,204, 57,150,150,150, 56, 58, 62,226,234,238, 30,105,203, 75,184, 42,227,216,216,220,192, 22,
- 57,207, 61,251, 12,166,210,180,187, 75, 20,121,142,112,142,131,189,109,242,209, 49,194, 25,136,125,215,143,169, 52,135,251,251,
- 96, 45,113,236,219, 48, 15,143,253,192,151,181,181,101,198,199, 3,150,151,151,216,223,217,102,109,107,147,141,141, 45,170,178,
-160,204, 43,100,146, 80, 84, 37,157,181, 21,162, 70,131,253,253, 67,178, 52, 99, 48, 28, 51,206, 98,214, 55, 54,216,219,221, 37,
- 74, 83,122,163, 17,203, 75, 75, 28, 30, 30,179,181,185, 65,218, 59,102,117,169,197,241,209, 62,173,213, 77,202,188,162, 28,143,
-121,234,137, 47,210,108,183, 41,172,161,170,253, 97, 55,109,129,246,188, 24, 53, 81, 62,171, 37,150,167,109, 98,211,122,242,164,
-220,100, 21, 78, 66,164,124, 29, 93, 8,139,114, 14,105, 12,214,202, 48, 92,134,144, 34,103,206,129,118,167,132,184,117,192, 41,
- 17,215, 14, 63,153,139,236,205, 36,251,102,235, 57, 17,198,143,149,214, 53,207,235,196,224,154,169,122,219, 12,246,204,206, 65,
- 9, 98, 57,114,118, 96,203, 68, 1, 46, 56, 23,115,129,240,181,128,238, 68,125,174, 14, 39,173, 15, 54,164,207, 64, 57, 9,210,
- 4, 65,176,186,254, 30, 90,218,234, 25,215,215,128,250,132, 5, 56, 11,198, 55,152,138, 38,130,194,149,156,103,254, 76, 52,171,
-173,181,126, 76,167,118,104,163,253,112, 9,227, 38, 42, 95,147,209,146, 65,134,112, 10,240,161,191, 28,225, 9, 19,118, 42, 92,
- 96,157,243, 36, 37,235,107,198,184,147, 53,202,186, 31, 61, 92, 84,234,214, 33,159, 66,180, 78,161,146, 14,157,245,179,244,199,
-154,149,245,117,142,118,198, 56,231, 63,172,163,195, 30, 56,193,206,206, 62, 91, 91,231,121,250,233, 39,177, 54, 39,141, 18, 58,
-105,147,118,214,196,152,138, 36,145,140,134, 5, 73,214, 34,138,154,116,151, 87,216,223,189,202,254,246, 54, 23,206,156, 35,146,
-138,188, 40,105,100, 13,142,142,123, 68, 74,160,100,143,170, 44,233,133, 25,225,207, 92,190, 76, 57, 30, 66, 89,145,231, 37, 42,
- 74, 88, 89, 94, 33,142, 18,186, 75, 75, 84,198,240,145,223,249, 93,142,142,123, 56,224,182,102,147,195,241,144,194, 88,140,115,
- 36,192,225,225, 1,183, 95, 60, 79,132,247,246,101,172,130,162, 90,197,241,241, 33,171, 27, 41, 56, 71,150,164, 84, 70, 19, 41,
-201,114,167,205, 80, 12,177, 38,100, 53,148,164,153, 54, 64, 8,246,143, 14, 73,133,165,165,188, 68,106, 61, 11,185, 86, 44,171,
- 3,245,147,128,126, 90,164,126,106, 27, 74,205, 74,175, 71,177,170,186,149, 67,204, 12, 51, 56, 89, 18,154,122,148,179,228,148,
-217, 18,214,245, 8,155, 98, 66, 29, 15,181,124, 41, 38, 53,192,122, 40, 69,200,103, 33,106,112,158, 84, 26, 60, 81,197, 33,188,
- 8, 75, 28,161, 76,234,137, 63, 1, 96, 77,229,107,132, 70,151,216,170, 22,232,240,165,140, 90, 94,210, 68, 17, 85,161,168,194,
-184, 83, 15,234, 94,170,210,104, 67, 21, 64, 91,151, 37,186, 40,124, 27, 84, 85, 82, 85,197,164, 37,205,153, 16,121, 91,239, 0,
- 8,103,188, 24,140, 51,193,155, 15, 63,115, 14, 48,161,100,225,157,107, 27,102,192,215,242,178,218,150, 33,245,107, 57, 28,244,
-201,142,142,105,119,186,180,218, 29,154,237, 46, 89,179, 69,146,101, 68,141, 6, 73,218, 8, 45,173,126, 80,139,136, 18,108,154,
- 32, 26, 41,194, 10,148, 43,121,246, 51,159,230,223,255,255,126,134,209,241, 1,105,170, 2,127, 67, 50,234,143,144, 82,162, 43,
- 79, 76, 45, 43,139,157, 29,230,161, 4,218, 58, 26,169, 66, 56,199,218,234, 50,214, 24,138,178, 98,119,255,136,141, 51, 91, 28,
- 15,135, 62,174, 19, 2, 99, 44,237,118,155, 60, 47,195,166,107,137,227, 38, 69,153,131, 16,164, 73,194,115,207, 93,241, 78,132,
-177,164,177,164, 44,198,172, 46, 47,161,171,138,237,157, 29,206, 94, 56,207,222,206, 14,141, 70,131,227,163, 3, 70,253, 30,235,
- 27,171, 28,236,238, 16, 69, 94,179, 34, 81, 17,205,172, 65, 85,229,228,121,201,210,242, 42,155,103,207,145,107, 67,145, 87, 24,
-109,232, 44,117,201,210, 6, 8,199,246,206, 54,103,207,158,231, 53,183,157,197, 57,201,211, 79, 63, 75,207,228,172,159, 63, 3,
-218,225, 42,203,250,106,151,157,171, 87,121,238,217,167, 57,123,238, 76,168, 99, 23,196, 42, 70,151, 99,150,187, 45,122,102, 68,
-171,217,166,149,101, 60,251,212,211,129, 59, 97,217, 90,107,179,220,105, 81,153, 10,163,225,240,104,196,153,141, 51,180, 54, 19,
- 14,123,187,156, 59,119,129,131,221, 29, 84,156,208, 93, 94,166,221,105,209,239, 31,179,114,254, 2, 59, 79, 62,197,153,243,231,
-201, 29,236,238,237,146,181, 58,236,109,239,114,241,166,243, 28, 28, 28, 18, 37, 17,133, 30, 99, 5,152,170,242, 67,110,178,140,
-188, 44, 25,228, 5,227,193, 49,141, 70,139,126, 81, 80, 73,193,229,167,158, 97,101,107,147,202, 84,190, 21,141,105, 84,170, 66,
-118, 75,213, 68, 47, 57, 25,127, 53,193, 3, 47, 59,108, 38,160, 62, 91,234,141, 34, 63, 21,208,205,212,184,149,155,145,138,197,
-157,168,175,203, 83, 39,114,214, 17,244, 60,184, 50, 23,169, 11,226,185,153, 36, 53,160, 43,165,136,102, 37,151,107, 41,230, 16,
-245, 75, 41,174, 25,170, 50, 87,122,158,145,140,230, 52,210,156,184, 78, 71, 80,157,249,152, 8, 85,249,254,118, 27,178,134,210,
-132, 26,187,146,126, 31, 86, 18,105, 69,224,147, 76,103,152, 60,111,164,238,174, 51,198,116,226,117, 57,252, 70,200,204, 4,155,
-137,136, 12, 83, 50,132, 49,104, 29,254,109,141,215, 99, 14,162, 51, 70,135, 84, 71,168, 87, 26, 51,149,246,116, 97,144, 68,205,
-134,170,103,230, 10, 59,147,230, 23,243, 58,184, 74,212, 64,228, 38,163,252,234,209,160,214, 8, 52, 49, 91,231,110, 99,108, 35,
-142,134,125, 54,182, 54, 56,218,127,134, 39,159,124,134, 91,110,121, 45,189, 94,159,163,195, 30, 89,214,226,201, 47, 62,197,249,
-243, 23,217,222,126, 22, 83, 9,238,184,253,245,126,112, 68, 57,100, 84,121, 86,236, 74, 99, 25,149,173,208, 92, 90, 6, 33,216,
-221,222, 38,110,117, 57,183,185,193,163,207, 92,166,175, 53,107,235,203,116, 58, 29,142, 14,247,113,110,132, 53, 21,155,235,235,
-220,118,199,107,120,226, 11, 15, 51, 28,140,201,139,146,243,103, 54,200,178, 38,145,242,105,194,206,210, 18, 18, 56,234,245,217,
-220,218, 96,255,240,208,215, 10,169,251,202, 29,163, 60, 39,137, 99, 18, 37, 81,177,244, 41,222,224,208,152, 74,227, 76,133, 0,
-198,227, 49,198,122, 38,183,174, 10,170,170,228,224,224,144,209,104, 72, 20,199,244,250, 61,218,221,101,132,140,168,116,137, 85,
- 17, 22, 53, 37, 23, 58, 55, 83,234,224,121, 35,245,235,183,187,185, 9,137, 68, 42, 49, 81,173,139,148,156,214,211, 79, 68,232,
- 39,135,241,156,156,160,114,122,139,229,204, 82,158,220,124, 51, 36,152, 64, 36, 71,214,169,123,133,245,243, 37,145,174,158, 95,
- 16, 20,241,124,195, 32, 72,129,138, 28,210, 70, 68,198, 98, 18, 31, 85, 87,101,133, 27, 91, 42, 29, 24,231, 69, 65, 85,230, 24,
-109, 38, 25, 46,169,124,125,122,174,182,110,189,222,118, 89, 20,232,162,160,156, 1,117,107, 42,175, 16,104,167,242,172, 94,209,
- 77,251, 57, 2,174, 86, 75, 20, 19, 73,103, 41,106, 50, 96, 24,242, 50,113,150,125,134,172,110, 37, 45,141,166,210,154,178,242,
- 17,123,148,106, 90, 67,199,242,178, 98, 89,167, 44,185,140, 78, 28,131,246, 18,185, 88,252,108, 1, 12, 42,117, 72, 27,163,164,
- 36, 83, 80, 28,237,243,159,254,143,159,229,232,169, 39, 72, 34, 48,165, 33, 74, 34,122,189, 17, 74, 40,138, 82,163,132,162,212,
-214, 11,169,128,231,232, 40,133,209,154, 36, 81,168, 56, 34,182,134,229,110,135, 97, 62, 96, 48,204,113, 74, 97,132, 96,144,151,
- 56, 99, 73,211,134,111,197,116, 48, 26,143,253,181, 49,144,231, 57,149,214,164,141, 38,189,254,128,170, 44,209, 85,197,230,250,
- 50,105, 36,105,166, 94,112,105, 48, 24,248, 22, 78,235, 24,141, 70,108,157, 61,203,227,143, 63, 65,214,236, 80, 21, 35,208, 37,
- 56,104,196, 17,186, 44,137,155, 45,146, 40, 34,106, 71,172,175,175,115,220, 31, 48,214, 6,226,152,179,231,206,249, 49,196, 85,
-197,104, 56,224, 53,183,222, 70,187,221,230,104,127,143,178, 52, 56, 93,178,186,178,194,184, 63, 64, 26, 73, 34, 21,191,255,217,
-207, 19,167, 49, 55,221,113, 7,131,225,144,150, 84,180,219,109,174, 62,253, 36,197,240, 24, 97,114, 86,186, 45,198,131, 1, 59,
- 71, 7, 96, 53,163,209,152, 78,179,197,106,183,201,241,254, 62,107,173, 38, 43,235,231,216, 63, 60, 98,239,160,199,214,122,155,
-181, 51, 27, 28, 29, 31,178,212, 89,101, 52,174, 56, 60, 60, 34,203, 50, 95,106, 59,236,113,246,206, 59,217,126,234,105,214, 46,
-156,167, 95, 94,161,170, 74,172,173, 48, 14,100,156, 82,234, 2,149, 52, 40,140,165,153,164, 12,199, 99,210, 68,209,110, 53, 41,
-141,229, 96,144,227,162,152, 88, 42, 76, 85, 49,234, 29,211,233,116,252,100, 63,231,107,222, 62, 66,149, 65,232,200, 96,107, 80,
-175,243,122, 66, 79, 74,111,132, 97, 86, 83, 48,179, 62,219, 38,125,248,165,106, 66,109, 29,205,135,225, 41, 78, 76,189, 65,247,
- 60, 35,184,231, 65,118,158,139, 51,153,150, 22, 28, 92,165, 60, 95, 75,169,144, 49,140,252,124, 14,103,220, 28,175,235, 36,151,
-108, 22,212,231,100, 96,103, 4, 28,156,187, 86,195,197,203, 47,159,228, 29,184,233,118,230,196,108,132, 29,132,220,102,228,109,
- 69, 61,100, 56,200,218, 6,197, 84, 59, 35,143, 62,175, 40, 55, 35,150, 63,105, 1, 8,172,114, 33, 5,206,216,185, 3,169, 61,
-174,217,135, 9,242,129,126,236, 99,152,195, 61,147,214,208,117,154,195,233,201,198,227,220,180,207,176,158,134, 54,209,177,158,
- 83,186,147,147,249,178, 19, 15,111, 50,107, 86,204,203,218, 33, 39,175, 45, 4,152,240,124,167, 26,164,203,155,236,143, 44,221,
-213, 85, 58, 73, 69, 18, 75, 14,143, 14, 89,237,245,216, 58,187, 66,165, 53,111,120,195,215,208,238,118,120,248,209,207,178,187,
-115,133,175,123,219, 31,225, 77,111,253, 70,246, 15,143, 80,102,204,106,183,201,109,183,190,134,245,115,183,209, 94, 94,165,114,
-142, 81, 62, 66, 9,135, 45,114,222,250,166,175,225,115, 79, 60, 65,210,108, 35,133,196, 24, 77,183,219, 69, 58, 67, 89,192,149,
-171, 87,233,118,219,172,172,173, 49, 58, 56,198, 34, 73, 27, 45,132,242,196,186, 70,163,129, 53,134, 55,190,246,117,236,237, 30,
-208, 80, 49,253, 94,111, 50,130,208,134, 13,114,121,101,153,188, 42,177, 26, 82,145,120, 9,209,204, 59, 92,166,204,177,186, 68,
- 8, 69,153,143,184,186,179, 75,145, 87,126,126,111,148,248, 89,218,177, 79,229, 52,178, 22,149,129,179,103, 47, 48,236, 29, 33,
-170, 35,172, 45,176,182, 10,253,254,242, 84,125,231,211,106,234,167, 69,236,179, 99,117,235,255,215, 17,122, 20,213,195, 12,102,
-219, 43, 79,222, 12, 83,125,224,105,132, 46, 38, 45,138, 39,129,125,126,136,207, 20,229,229,204, 77, 35,107, 5,188,144,157,154,
- 48,209,173,239,215,150, 65, 47,161,230,108,212, 13,161, 66,120,178,166, 12, 89, 42,137, 67,216, 8, 87,130,118,154,178, 28, 83,
-141, 71, 20, 65,227,159, 32,170,225,230,102, 71,123,231,211,107,176,151,148,165, 39,190,249,175, 1,208,181, 31,188,226, 92,229,
- 35,113,172,151,111,150,130, 68,122, 1, 10, 17, 41, 63,240,198, 9,180,112,147,161, 22,190, 12, 99, 41, 42,255,181,212, 26, 99,
-125, 43,143, 19, 49, 42,110,160, 90, 13,178, 52,163,213, 89, 34,107,183,105,181,187, 52, 58, 93,100,179, 9,205, 14, 34,203,208,
-224, 29, 23, 93, 34,132, 35,149, 49, 66, 38,196, 78,160,243, 33, 31,254,213, 95,230,227,191,245,235,180, 34,201,120, 88, 96,172,
-101, 56, 28, 33,156, 96, 56, 44,125, 31,186,181, 20,149, 65, 42,129,181, 16, 73,133, 49,102,114,189,171, 66,115,246,220, 10,121,
- 57,194, 2,195,162,164,217,105,147,151,134,188, 42,201,146,196, 43,205, 69,137,119, 68,172, 69, 42, 63, 22,180,172, 42,180,179,
-148,131, 62,136,136,178,168,136, 35,252, 28,246,106, 76,182,220,161, 8, 35, 82,219,205,140, 65,191,207,202,242, 10,219, 87,174,
- 80, 21, 37,203, 75,146,131,157,171, 52, 27, 49, 66, 91,134,163,130, 51, 91,235,164,105,194,168, 63,100,121,109,141,163,227, 99,
- 10, 39, 73, 90,109, 54,182, 54,105,183,219,140,134, 35, 14,118,247,121,237,107,238,192, 58, 67,149,143,113, 85,137,178,176,185,
-178,204,238,209, 17,157,102,135,199, 30,127,156,195,163, 30,103,206, 95, 96,105, 99,149,195, 81,143, 91,110,186,136, 29,141, 25,
- 30,237, 35, 93, 69, 59,145, 20, 35, 77,255,176, 71, 18, 75,148,213, 52, 27, 9,105,154,208,202, 90,236,239,236,147, 40, 65,111,
-208,231,220, 77, 77, 54,227, 6, 15,125,242,243,252,145, 63,242,102, 84,156, 80, 57, 73, 89,105,146, 36, 65, 8,193,206,222, 62,
- 43, 65, 50,183,236, 13, 89,189,120, 19,131,163, 30,103, 47,158,227, 96,231,128,131,227, 3,122,253, 1, 42,138, 81,177, 67, 83,
- 49, 46, 11,150, 59,171,228,163, 1, 75, 89,151,209,184, 64, 73,201, 74,167,205,176, 52,196, 42, 98, 60, 26,147, 53, 50,242, 65,
-159,230,202, 50, 0, 85, 40,165, 16, 82,216, 88,139, 80, 42,148,182,106,249, 84, 51, 25, 0,227,187, 41,230, 57, 54,117, 86, 88,
-214,179, 85,103,116, 16,228,236,224,164, 73,234,125, 86, 18,153, 83,181, 32,102, 9,182,167,237, 13, 46, 68,198,181,172,181,181,
- 98, 18, 84, 56,105,253, 35,146,147, 25, 11, 39, 39, 55,158,246,122,179,243,215, 79,205, 84,214,204,246, 25,117, 84, 41,103,167,
- 73,158,222,226, 58, 17,163, 99,134,242, 31,230, 86,216,144,133, 20, 51, 14, 70, 52,187,241,218, 19,147,102,252,200, 74, 66,234,
-107, 70, 66,243, 68,111, 95,157, 50, 55,115,234, 65, 94, 81, 72,107,141,209,214, 19,127,108,232,173,181,206,171,122, 89, 59,169,
- 37, 76, 37,254,106, 90,206,181,227, 96, 79,246,206,159,172,229, 79,164, 76,231,116, 6,236, 68, 31,220, 57, 88,219, 92,161, 18,
- 41,217,114,198,106, 75,177,115,233, 83,108,109,172,176,190,182,130, 82,130,170, 42, 57, 60,220,231,163, 31,253, 40, 31,253,248,
-199,232,245, 15,200,243,156,103,175,110, 35,227,136,106, 60,194,149, 71, 16, 21,252,246,111, 61,192,205,111,120, 59,111,122,219,
- 31,161,221,240, 67, 72,202,114,204,250,230, 50, 95,247,214, 55,242,171,191,249,155,228,214, 95,173, 44, 77,168,138, 28,109, 53,
-163,209,136,189,189,109,174,110, 27,150,178, 22,103,215, 54,168,242, 17,185,174,200,171,146,229,165, 14, 81,146, 16, 37, 9,103,
- 54,218,124,237, 27,223,196, 83, 87,158,163,170,204, 36,250,148, 66,176,220,237,176,186,182,198,165, 75,151,248,154,215,220,225,
-235,190, 50,166, 44,252, 44,247, 34,207, 41,198, 99,134, 69,193,112, 48, 34,146,112, 60, 26, 32, 17,180, 58, 75,164,105,130,138,
- 98,242,210, 48, 46, 53, 68,138, 70,163, 69,172, 34,228,208,144,231,125, 98, 33,161, 38, 88,185, 25, 41,212,151, 32, 60,115, 93,
-239, 90,184,233,192,147,211,212, 10,165,155, 39,225,207, 23,140, 94,156,210,157,152,233, 29, 23,211, 16, 96,194,226,173,123,238,
-157,195, 74,135,180, 54,136,188, 48,145,150,117, 70,251, 44,146,246,255,182,149,111, 25, 83,206,160,132, 65, 88, 63,251,189, 26,
- 15, 40,203, 28, 99,244,169,250, 15, 94,225,174,244,130, 76, 1,208,125,164,233, 35,126,156,153,108, 80,145, 10,237,126, 74, 76,
- 84,222, 16, 62,125,109,195,189,105,172, 47,109,149,198,131,104,165, 13,214,249,246, 77, 25,181,137, 26, 9,205,172, 77,163,213,
- 37,107,181,105,182, 59,164, 89,147, 70,171, 77,163,217, 36,105, 52, 72, 26, 25,113,154,120, 98, 95,228,219,252,202,188,192,201,
-220, 15,120, 73, 99,226,180, 73,154, 68, 60,249,153, 79,242, 31,255,245, 63, 39,170, 74, 70,253,138,170,116,196,177, 31, 40,146,
-231,190,255,220, 88, 71, 89,121,182,184,113, 22,165,228,100, 46,128,146,120, 6,180,132,118, 39, 99, 48, 30,209, 27,142,144, 73,
- 66,171,221,101,103,119, 31,225, 20, 73,146, 82, 20, 5,221,110,230, 37,151,157,240,154,241,210,159,243,184,204, 73,146,140, 34,
- 47, 49,198,209,105, 38, 36,145, 36,137, 61, 33,179,215, 63, 6, 4,205,216, 51,206,181,113,244,142,123,180, 90, 77,138,241,128,
- 88, 58,132,213, 20,121,193,133,243,231, 24,143, 71, 12, 6,125,150,218,109,142,143,142,137,155, 29,146, 52, 97, 99,109,157,173,
-181, 13,142,142, 14,216,191,122,149, 91,110,190,213,183,178, 2,194, 88,218, 13,159, 77,232,237,239,163,180,229,210, 83, 95, 32,
-207,115, 86, 87,151, 17,210,111,194, 23,206,156,161, 24,245, 73,141, 97,116,180, 79, 51,130,209, 96,128,211, 99, 86,130,208,206,
-114, 51,163, 55, 30,209,104,182,184,250,244, 54,174, 52,108,156, 89,161,151, 15, 65,250,186,235, 77,183,222,206, 67,159,122,130,
-175,127,219,155,217, 90,219,194, 20, 57, 69, 85,226,100,140,115,134,241,120, 76,163,217,164,223,239,179,178,188, 76,115,117, 21,
- 49,214,228,121, 65,127, 52, 96,123,123,151, 78,183, 27, 8,109,126, 96, 73,105,193, 32, 40,130,236,180, 28,121, 96, 79, 19, 69,
- 81, 86, 36,113,204,209,225, 62,105, 43,163,179,186, 76,210,108,162,133, 31,156,226, 42,223,107, 46, 66,203, 87,205,242,150,174,
-198,119, 47,249,138, 80,190,107,164, 14, 2,220,116, 90,154,157, 37,110,201,121, 73,242,217, 98,112,205,127, 21,167,100, 12, 79,
-241,227, 79, 13, 64, 84, 29,228, 9,175,102,103, 67,170, 91, 5, 66,182,181,238, 84, 86,253, 73,101, 57,102,134,202,212, 99, 87,
-173,117,215, 47, 65,202, 19,242,151, 51, 25, 4,203,180, 91,231,164,159, 50,209,191,159,176,242,167,242,153, 94,183,101, 42,229,
- 29, 77, 65,114,186, 89, 91, 99, 48, 82, 80, 57,135, 21, 2,173,245, 28,104, 78,234, 16, 33, 77,105,102, 70, 62,214,145,122, 13,
-224, 58,204,119,214,214,120,205, 12, 83,123,109,102,146,114,135,217, 13, 79, 77, 64,125,238,216,230,100,106,231,107, 17,110,238,
-195, 11,155,134,152,147, 65, 8,159,129, 34,109,181, 33,105,112,241,150, 59, 88,138, 10,158,252,212,111, 50, 62,222,165, 24, 13,
- 73,207, 70, 88,167, 65,104,254,244,247,252, 41,162, 36,225, 51,159,253, 61, 30,125,228,179,188,225,141,175,103, 60, 58, 70,228,
- 61,150, 84,193, 19,191,247, 73,246,199, 21,199, 69,197,219,254,216, 55, 18,103, 49,231, 47,158,227,202, 23, 31,166,149,197,108,
-174, 45,243,166, 55,222,201,199, 62,249,105, 6,253, 99, 36,134,172,145, 98,202,138,225,160,143, 51, 6, 41, 28,195,241,136,125,
-142,144,206,160,117,206, 56, 31,114,203,197,243,108,110,109, 82, 25, 67,162, 4, 87,118,118,232, 13,135, 84,206,248,200, 41,164,
- 48, 81,146, 71, 30,125,132,168, 44,217, 90, 93,241,243,218, 35,133, 85, 38,172, 5,139,148, 80, 22, 94, 18,116,109,101, 5,133,
-164,215,235,211,239, 29,147,181, 59,129,116,225, 16, 17,228,149, 33,138,189,183,239,242, 4, 23,198,179, 58, 99,167,202, 76,238,
-218, 94,234, 23, 3,170,215,136, 53,136,169,176,140, 56, 65,194,100,226,109,207,215,163,132,184,254,235,189, 96, 96,159,233,121,
- 17,115, 58,206,158, 76, 55,171, 41, 45, 3,185, 19,171,125, 71,134,214,129, 45,171,113,101,229,211,229,165,239,158,176, 85, 1,
-182, 68,160,193,149,216,106, 68, 21,230,216,207, 48, 3,252,204, 3,171, 41,203,146,178,238, 55,159, 25, 58,131,117, 83,246,172,
-144,129,211, 39, 60,203,213,129,213, 62, 69,232, 44,104,107,169,180,119,164,173,117, 88,169, 64,165, 68,173,148, 52,107,211,104,
-182,201, 90, 93,210,172,229, 71,219,182,218, 52, 50, 63, 12, 37,206, 26, 68,141, 6,113,154,160, 66,205, 95,169, 40, 8, 98,248,
-180,123,148, 23, 68,105,226,163,133, 40, 70,170,136, 81,239,144,223,253,224,175,209,191,252, 12,162, 95,128,145,164, 73, 66,158,
- 23, 19,193, 35,173, 29,149,113, 40,169, 2,243,222, 51, 91,188,243, 41,136,149,192,104,205,197,155,183,130,214,185, 98, 88,148,
-108,108,109,113,120,220,163, 44, 43, 26, 73, 35,100, 71,252,174, 80, 85,158,112,168, 75, 67, 35,139,233, 15,251,200, 88, 17, 69,
- 49,195, 97, 73, 18,250,197,171, 34,167,219,242, 95,203,178, 32,203,154, 56,107, 73,227,152,171, 59,123, 56,231, 72,226,136,241,
-240,152, 72, 2, 86,179,210,109, 49, 26,248,222,247, 36, 73,168,116,137, 84, 41, 74, 41, 58, 75, 43,108,174,111,209, 59, 60,162,
-127,116,196,205,231, 47,208,204,154, 20,249, 8,165, 64, 40,133,209,134, 98, 52, 66, 23, 57,219, 59, 59,168, 36, 33,145, 41, 43,
- 27,171, 44, 47,175,160,203,138, 70,105,169, 74,205,254,222, 21, 98, 97,176,249,144,149,118, 70, 89,128,197, 82, 90,131,176,134,
-243,231,206,242,212, 51,207,210, 72,253,172,131, 52,138, 81,145, 98, 52,234, 83, 86,130,155,110,125, 13,143, 92,122,138,237,131,
- 17, 81,146,177,177,212, 68,168,146,202, 8,116,105,200,199, 37, 82,197, 88,231, 24, 29, 28,211, 60,123, 22, 43, 74,178,102,198,
-202,218, 26, 7,135, 71, 94, 78, 87, 72, 79,106, 84, 80, 89,104, 52,187, 12, 70, 35,186,157, 14,141, 66, 51, 42, 42, 63, 5,178,
- 30,163,173, 5,101,145, 99,173,165,219,110,161, 85,136,122, 67,103,134,209, 94, 39,196, 89, 55, 33,174, 69,206,215,175,237, 36,
- 45,109,103, 84, 34,235,242,215,236,204,142,122,174, 66,157,206, 22,115, 68,237,137, 82,220, 9,224, 61, 57, 68,101, 50,141,113,
-118,146,225, 68,198,246,196,115, 67, 96, 33,165, 39,176, 10, 41,230,230, 45, 76, 58,195,164,156,116,130,205,242,208,176, 22, 89,
- 15,210,177, 92, 35,145, 61,113, 78,196,124, 58,191,238, 18,240, 66, 78,106,174,157,237,212,173, 83, 76, 70,108,204,232, 1, 76,
- 15, 73, 56,136,252, 5,240,222,148,151,100, 8,128,109,141,239, 43,156,245,148,234,154,121, 29,137, 35, 66,154, 93,207,212,210,
-103,128, 61,252,110,218, 54, 48, 21,170,152,120,114,129, 96, 33, 38,105,117,137,194,205,164,212,197, 28,147,217,205,230, 42,234,
-250,203,236,152, 60,220,252,200, 63, 49,221,156,133, 84, 52,151, 55,104, 52, 91, 92,188,112,129, 71, 31,250, 48,199, 71, 3, 62,
-255,153, 47, 48, 28,149, 52,178, 46,198, 9,122,135,125,206,223,122, 59, 31,250,240,131,236,238, 94,161,221,238,240,198,215,223,
-201,225,206,101,226,252,136,253,209, 33,219,151,159, 97, 48, 30, 65,163, 77, 43,145, 84,197,152, 86,183,195,217,243, 23,233, 29,
- 29,178,220,110,242, 71,222,254,181,124,244,161, 79, 96,113,236,237,237, 32,133, 32,141,163, 9,153,207, 6,105,133,222,104, 64,
- 43, 73, 41,202, 2,167, 50,174,238, 31,144,180,154, 24, 4,135,219,123, 92,122,238, 89,182,206,109, 49, 58,238, 79, 64,200, 58,
-203,225,209, 49,145, 54,220,121,203,205, 92,221,219,163, 50,190,215, 95,103, 37, 75,157, 46,221,205, 13,178,102, 6,199,125,146,
- 36, 69, 9,104,183,154, 68, 42,166, 55, 28, 49, 24,142, 16, 50, 34,109,118,208, 78, 7, 50,134, 66,197, 2,209,108, 35,148,194,
- 86,214, 59,205, 51,173, 35,207,135,163, 47, 20,232,197, 76,155,200,244,101,221,220,168,220,147, 53,115,113,234,235,212,213, 59,
- 59,247,140,249,251,194, 93, 91,217, 23,179,178,173,243,233,250,169,100,177, 65,132,182, 48,107, 42,108,229, 85,219,108, 85, 81,
- 85, 37, 46,244,138, 87, 69,129, 46,198, 84,197, 8, 93,142, 48,122, 12,166, 64,186, 10,233,202, 41, 79,196,214, 35,104,157, 7,
-227,202, 59, 8, 54,100, 4,100, 16,196,112,114,218, 74, 99,194,156,105, 83, 79,195,114, 6, 75,168,105, 58, 25, 24,234, 25,113,
- 35,165,153,101, 36,205, 54,141,102,135,172,217, 34,107,119,167,209,120,214, 36,110, 52,104,100,141, 73,139,157, 74, 98, 79,186,
- 81, 94,146,114,162,104, 21,238,183,200, 70, 68, 73, 68,148,198, 24,227, 80, 68,216,106,196, 51, 79,124,142, 79,125,248, 65,108,
-127,140,170, 28,113, 28,211,235,143, 61,143, 64, 8,156,113,104,235,130, 62,190, 11, 85,177, 25, 49, 34,225,181,255,147, 88, 16,
- 41,112, 66,113, 60, 24,147, 54,154, 56,161, 56,236, 13,105, 38, 73,184, 87, 36,113,146,160, 67, 41,163,172, 74,164, 18, 12, 71,
- 99,170,202,208,106, 54, 61,107,216, 26,146, 88,145, 68, 42, 12,154,139, 57, 62, 62, 14,233,122,133,118,126,198,186,148,146, 72,
- 73,198,195, 30,182, 42, 81,141, 4,137, 7,171, 52,137,177,214,209,110,181, 56,234, 13, 88, 63,179, 74,179,211,101,105,105,137,
-209,104,200,120, 52,226,220,153, 45,146, 40,162, 24, 28, 51, 28, 12,184,120,211, 69,116, 85,113,216, 31, 80, 85, 21,251,135, 7,
-136, 56, 66,166, 9,235,221,101, 86,214, 86, 73,163, 4, 41, 5,131,253, 61,170,188, 79, 83,104,178, 86,140,150, 10,116, 1,174,
- 66, 56,199,234,242, 18,249,120,204,193,238,190,207,146, 73, 73,220,204, 80,145,162,219,108,123,254,133,243,186,246, 95,243,198,
- 55,242,240,227,143,115,225,226,121,142,134, 99, 54,215, 87, 17,185, 38, 47, 10,198, 69,133,147, 99, 86, 55,214, 25,231, 5,163,
-157,109,150,206, 94,160,234, 15, 17,114,192,250,250, 26,219,219,187, 72,169, 40,181, 87,251,204,139,130,245,181, 45,246,183, 71,
-168, 40, 9,211,192, 12,145, 82,100, 8,138,225,144, 52, 75,169,180,102, 56, 24,112,190,121, 11,180, 51, 42,171, 17,198,115, 12,
-170,160,163,224,130,192,204,116, 70,249, 84,144,102,170,200, 38,194, 61,235,203,123,211, 72,124,218,170,229,196,201,136,149,201,
-208,152, 58, 13,109,103,238, 41,234, 72,121,146, 97,243,153, 91, 87,103,133,235, 50, 49,179,229,221,208, 7,111, 79,100, 35,103,
-218,212,152,237, 59,151,110, 78, 8,199, 90,223, 85, 53,217, 51,228,116, 64,204,201, 89,204,147, 96,115, 70, 95,163, 14, 38, 78,
-234,209,207,189,134,152, 33,209,157,140,226,221,124,121, 34, 50, 85,229,123,168, 67, 58,208,204, 40,220, 72,121, 98, 80,189,179,
-126, 0,134,115,190, 54,110,185, 22,204,235,154,121, 72,191, 59, 59,141,230, 20, 98,102,110,187, 59,117, 18,220,220,168, 85,166,
-162,252,245, 28, 9,199, 84,112,255,180,218,131, 21, 53,156, 7,165,108, 59,173,237, 38,205, 46,173,149, 45,162, 52,161, 17, 73,
- 30,123,244, 9, 62,255,240, 23,121,234,202, 17,155, 91,107, 36,141, 37,112,146, 47, 62,246, 4,223,253,103,191,135,183,191,253,
- 46,126,229, 87,254, 35, 95,127,215,215,211,206, 90, 12,243, 29,198,197,144,167,158,122,154,131,157, 61,198,123,251, 36,157, 77,
-170,254,128,161, 30, 34,141,225,194,173,119,240,248,231, 62,205,185,115, 27, 20,186,228,194,153, 53, 30,253,226,115,254, 60,180,
- 38,247,236,194,137,166,182, 11, 35, 90, 13,142,194, 90,244,112,204,241,104,140, 76, 26,172,175, 90,126,239, 11, 95, 32, 55,134,
-178,172,176, 85, 73, 2,196,137,239,255, 85,128, 54,150,195,129,175,151, 27, 99,105,101, 25,214, 89,140, 51,148,213, 24, 33,160,
-221,233, 50, 28,142,189,144, 80,104,179,242, 68, 20, 75,239,232,128,150, 49,196, 89,155, 40, 82, 20, 85, 73,156,164, 72,153,248,
- 72,113, 34,255, 32,103,250,187,195, 34,146, 98,114, 35,156, 70,148, 59, 13,216, 93, 72, 41,207,227,173,156, 43, 84,157, 20, 68,
-154,180,193,185,122,220,233, 41, 16, 47,236,132,210, 54,223,131,201,156, 92,235, 44, 49,197,205, 78,130,169,179, 14,129,228,137,
-177,158, 4,170,189,208,139,209, 26, 91,149,158,167, 80,122, 98,155,169, 10, 76,158, 83,149, 57, 85, 89,160, 75,255,111, 93,228,
-152, 34, 7, 83, 32,108,133,180, 6,229, 44,132, 26,152,157,145,122, 85,147,227,148, 51, 27,149,159, 22,109, 49,129,210,226, 66,
- 31,106, 16,179,137, 34,100,220, 36, 74, 83,210, 70,147, 52,107,121,224,110,250, 40, 60,205, 90,225,107,131,180,217, 36,105,164,
-196,137, 79,169,203, 72, 33,227, 32,244, 51, 59, 90,185,190,182,202, 77, 54, 30, 89,107,255,203,216,215, 29, 43, 11, 6,236,224,
-144,223,248,229,159, 99,231,137,199,105,104,223, 35, 59, 24,141,194, 36, 67,159, 77,208, 38, 72,200, 74,175, 59, 80, 11, 80, 85,
- 97,160, 19, 74, 82, 26,203,230,198, 18,121, 62, 36, 82, 9,163, 97,193,242,214, 22,251,199,125, 12, 80, 26, 77,187,217,164, 40,
- 11, 26, 89, 74, 94,230, 65, 11,192, 18, 41,201,176, 55,164,213,110,163,100,204,112, 56,166,170, 74,226,212,207,105,108,183,186,
- 56, 43, 24, 14,134, 36, 89,230,235,188, 34,162, 52, 6, 93, 22,164,177, 36, 31, 14,189,248, 9, 14,173, 43,210, 36,194, 90,205,
-234,210, 50,199,199,199,180, 86, 54, 72,219, 75,108,156, 59, 75, 89, 89, 70,131, 99,178, 44,193,152, 10,109, 74, 40, 11, 46,108,
-174, 49, 60, 58,162, 63, 26, 81, 89, 71,169, 53,253,209,144,238,218, 38, 89,167,203,210,234, 6,203, 75, 43, 12,123, 71,140, 71,
- 61, 26, 25,168,178, 96,115,185,205,238,222, 85, 34,105,217, 59, 62, 96,107,115,147, 36, 73,185,124,121,155,168,209,162, 24,247,
-145,214,239,151,173,149, 46,227,113,206,198,242, 58,123,251,199,116,214, 54,216,222,185,204, 27,222,250,117, 60,254,197,199,184,
-188,115,149,179, 27,107, 28, 14,114, 54,214,215, 41,181,230,112,111,215,151, 11,139, 18, 41, 44,228, 57,253,203,151,105, 46,173,
-208, 25,143,184,114,229, 42, 27, 27, 43, 60,119,121,135, 56,107,122,114, 32, 21,206, 88,146, 36,165,210,134,180,217,162, 10,163,
-112,187, 73, 66,127, 48,160, 50, 6, 87, 85,228,253, 1,186, 44,105,182, 87, 80, 82,128,118, 68, 70, 19,213,109,151, 85, 5,149,
-231, 82, 57,107, 2, 56,217,233,112,148, 0,114, 54,148, 98, 38,147, 6, 3,147,219, 73, 49, 25,202, 58,155,113,245,105,110, 51,
-105, 33,197, 19,234, 39, 51, 68,106,182,186,181, 33,227, 53,153, 17,226, 39,192,213,101,229,201, 56,165,144, 85, 16, 56,223, 70,
-235,166, 37,131, 73, 13,188,214, 7,158,189, 87,102,102, 59, 72,102, 51, 6, 39, 2, 75, 59, 27, 8,137, 41,225,143,147,229, 5,
- 55,229,171,205, 12,105, 98, 70, 46,122,174,199,254,148, 8,169,158,193, 16, 21,101, 21,134,128, 48, 17,155, 23,115,140,114, 38,
-158,144,179, 46,204, 66,175,163,241,105, 58,222,154, 48,102, 47,212,199,173,152,170,134,205, 74,206,214,206,194, 68,228, 67,206,
-232,101,135, 19, 53, 19,198,161,240,227, 28,237,137,168,107,102,200, 4, 39, 90,156,156,152,140,244, 0, 66,116,131,103, 56, 54,
- 59, 29,140,112,180, 26, 9,203,171, 93,198,213,152, 39,158,121,138, 88, 9, 94,247,250,215,211,233,180, 24,246, 70,236,110, 95,
-229,119, 63,242, 59,220,116,225, 2,107, 43,171,220,126,235,109, 28,236, 31, 32,170,130, 98, 60,230,184,231, 91,204,154,205, 6,
- 74, 10,250,253, 30,207, 93,126, 26, 5,124,227,215,125, 45,203,203,171,140, 6, 67,154,105,194,155,238,124, 29, 15, 63,254, 20,
- 66,168,137,102,182,138, 34,175,154, 23, 72, 35, 82, 72, 42, 93,249,158,104, 96, 84, 22, 60,252,196, 19,116,183,183, 25,140, 71,
- 24, 96,239,224, 32,200,194,166, 94,150,180, 50, 40, 41,136,130,220,107,146, 36,190,198,106, 12, 82,122,110,128,174, 42,202,178,
-164,221,110,179,191,119, 72,214,109,161, 34,133, 27,123, 49, 21,107, 60, 9,238,232, 96,159, 40,205, 73,219, 75, 94,145, 47,170,
-181,135, 35,127,227,217,153, 69, 53,115, 33, 94,174,186,250,139, 74,155,139,235,145,245,228,252,141, 50,199,102,113,147, 6,245,
-169, 56, 93,152,216,132, 8, 35,100,167,164, 80,167,117,144, 88, 13,181,237,170,192, 20, 1,172,203, 49,174, 40,168,138, 17, 85,
-225,127, 94, 21, 5,101,153, 83, 21,121, 24,105, 90, 5, 77,118,131, 10, 3,123,140, 16,104, 39, 48,120,135, 23,132,119, 64,165,
- 5,235,193,222, 56,225,123,100,173, 11,135,226, 35, 22, 21,167,196, 73, 70,210,200,104,100, 77, 26, 89,139, 70,107,153, 70,179,
- 69,150, 53, 73,155,205, 0,234,205, 16,141, 39, 68,169,143,196, 39,189,241, 65,181, 15, 9, 82,137, 27, 23, 29, 79,100, 52, 60,
- 6, 11,172, 4,105, 53,143,126,226, 19, 60,244,129, 15,210,112,120,146,154,214,232,202,162,132, 7,109,231, 44,145, 82, 32, 64,
- 41, 49,233,145,175,115, 41,113, 96,235, 43, 37, 73, 27, 9, 69, 94, 81, 86,154,172,217,164,172, 42,122,199, 61,162, 36, 66, 10,
- 73, 20, 7, 61,248,144,254,173,247,147,178, 44,137,162,136, 44,107, 50, 42, 42,198,163, 2,112,164, 73,140,115,154, 40, 82, 12,
- 6,253, 32, 83, 45, 41,203,138, 82,151,126, 99,181,150,162, 44,145, 66,146,101, 9,163,209,152, 44,139, 16, 82,208,233,116,232,
-245,251, 52,178,140,238,234, 26, 89,171, 69,154,166, 28, 31,239,134,185, 18, 18,140, 99, 56, 30,179,220, 93, 98,239, 96,159,254,
-112,132, 74, 26,140, 10,205,195,143, 60,198,237,119,188, 22,153, 53,105,183,151, 72,147,132, 81,191,135,206,135,232,241,128, 36,
-114,172, 45,117,120,242,210,227, 8, 37,216,217,217,230,206, 59, 95,135,115,240,204,115, 87,105,181, 59, 60,187,125,196,206,229,
- 3, 46,158, 93,165,217,237,114,212, 31, 16, 75, 63,110, 83, 10, 73,255,184, 79,107,101,137,171,151,159,227, 53,119,220,193,231,
- 31,126,152,181,213,111, 34,178,112,208, 59,230,236,133,243,228,227, 49,251,135, 7, 88,107, 56,115,230, 12, 66, 8,226, 72, 50,
- 56,218,167,217,202, 88, 93, 94,226,168,215,167,211,106,114, 60, 24, 19, 41,133,182,134,193,160,207,218,218, 26,219, 87,175,210,
- 93, 90,162, 8,123, 72, 97, 42,162, 36,162, 26,142,137,173, 39,226, 30, 28, 29,178,244,186,155,145, 73,130, 52, 18, 99,189,204,
-178,159, 51,160,113,149,198,150,154,202, 20, 62, 96,212, 26,172, 9,227, 73,235, 25,107,106,118,144,185, 47, 53, 73,233, 65, 93,
- 76, 92,203, 41, 49,219, 90,140, 22,158,101, 31, 50, 1, 78,224,231, 88, 72, 55,217,175,172, 85,147,113,176,218,250,182, 79,105,
-157,223,115,235,145,168,206,103,119, 16,118,162, 49, 97,235, 97, 85,117, 38, 65,202,233, 80,149, 90,240, 69,138,235,138,107, 77,
- 34,230,217,178,240, 76, 26,223,205, 41, 96, 50, 55, 93,141, 83,244, 63,102,247,218, 9, 14,159, 58, 1,211, 78, 30, 81, 89,234,
-137, 14,110,205, 42,159, 75, 13,132,153,180, 53, 96,215,195, 85,140,177,158, 32, 49, 51,132, 94, 78,122, 4,229,140,148,231, 12,
-176, 51,155, 82,119,115,196,187, 57,160, 16,115, 19,235, 39, 26,183,206,205,207, 4,225,132, 50, 79,221,155,120,141, 38,185,243,
-245,249,172,213,162,212, 6,163,125, 31,247,235,223,244, 53,252,194,207,195,205, 55,221,236,107,140, 74,112, 48, 26, 32, 28,124,
-252,119, 63, 74, 43,107,242,173,119,127, 43,105,156, 98,170, 10,170,146,126,191, 79, 20, 69, 52,218, 93, 4,154,179,103, 54,249,
-237, 15,127, 24, 99, 45,111,122,211,155,200,218, 75, 84,214,209, 63, 60,164,208, 21, 55,111,109,208,136, 36,133,177, 88,124, 36,
-211,110,181,168,170,138,193,104, 64,162, 34,150,187, 75, 32, 28,189,209,128, 82, 87, 8, 37,169,132,229,112, 60,160, 8,245,236,
- 74,251,133,185,188,177, 66,154,164, 20, 69,233,103,186,199, 49,121, 89,144,197,209,180,191, 19, 40,203,146,209,112,192,193,254,
- 1, 75,107, 9, 89,214, 96, 52, 26, 33, 85,140,140, 36, 73, 28, 35, 0, 93,249,141,110, 52, 56,198, 56, 16, 81, 10, 73, 4, 66,
-122, 1, 12,107, 39,158,232, 12, 43,100,158,217,254, 18,234,218, 47, 25,216,175,155,202, 23,167, 14, 87, 96,110,238, 50,243, 3,
- 82,220,140, 16,133,243,224,234,116,133,211, 37,174, 42,125,100, 94, 21,216,114,236, 65, 61, 31,163,139, 17,166, 8,218,221, 1,
-196,167,105, 71,175,169, 46,173, 9,105,116,135,149,225, 70, 54, 2,167, 8,189,189,142,202,122, 98, 81, 89, 85,148,218, 98,156,
-196, 32,113, 34, 66,166, 49,105,156,145, 54, 58,196,105, 74,163,217,166,209,234,144, 54,219,164, 89,147,102,171, 77,218,104,145,
-181,154,164,141,148, 40, 73,136, 83, 79,172,140,226, 8, 25,123, 97, 10, 89, 11,232,132,238, 2, 39,110,240,121,206,104, 77,206,
-101, 53,194,166,228, 89,247,150,203, 79, 61,206,191,255,217,159,165, 53, 46,201, 71, 5,133,213,104, 3, 10, 65,165,141,239,233,
-247,170, 34,196,145, 12,164, 40, 48, 2, 42, 61,175,228,189,182,218,241, 34, 50, 74,209, 31,143,201,186,203, 92,221, 63, 12, 89,
- 36,175, 35,160,141,241,142, 40,206,143,157, 20, 2,163,253,231,150, 54, 26, 20,101, 73, 85,129,174, 28,145, 84, 68,145,164,217,
-108,144,164, 49,207, 62,115, 64,146, 38, 84,149, 70, 84, 26, 67,228, 91, 8,203,156, 24,136, 34,129,179, 16, 43, 1,198,176,178,
-182,194, 96, 48,160, 44, 53, 43,235,103,104,181,187,108,157, 59,199,149,203, 87, 88, 94,234,250, 97, 40, 69, 78, 49, 30,209,110,
-101, 12,134, 3,246, 14, 15, 41,181, 35, 63, 28,240,236,149,109,238,120,237,157,104, 39,104, 68, 9,214, 57,242, 65,159, 72, 24,
-142,183,159,227,166, 51,171,152,124,192, 99, 15,127,129, 36, 82, 28, 31, 13,184,253,142,215,178,119,216, 99,239,224,144,229,149,
- 53,158,120,118,135, 71, 46,237,114,235,185, 46, 73,187, 67,229,252,124,243, 52,107,160, 17, 44, 47, 47,241,197,103,158,161,217,
-109,178,191,183,195, 27,222,242,117, 92,222,190,202,167, 62,251,121,238,186,235,235,216,191,186, 77,179,213,102,253,204, 25, 42,
-173,201, 75,205,222,238, 62, 91, 91, 27, 96, 52, 38, 31,210, 94,191,128,206,135,244,251, 61,100, 28,211,206, 28,199,189, 62,173,
-102, 74, 85,105,210, 52,245,193, 66,104,193, 52,206,226,132, 98,109,109,157,254,240, 89,164,177,152,188,228,240,224,128, 11, 88,
-162,102, 19,108,228,197,193,172, 95,255,232, 10, 97, 44, 86, 27, 68, 53,246,130, 73, 85, 21,134, 13,121,208,175, 71, 7,251,241,
- 2, 53,179, 60,168, 79, 69,129, 71, 81, 71,245, 53, 8, 3,194, 10,172,118,160,103,120, 89,245,212,178,122,189, 59,233,131, 67,
- 39, 81, 78, 34,106, 86,122, 29,153,135, 72, 95, 88,137, 13, 42,145,152,217,201,194, 33, 50, 87, 18, 25, 69,147, 18, 85, 61,104,
-101,110,222, 51,243, 53,118, 78, 2,250, 76, 45,127,162, 56, 57, 59,176,169,126, 13,107,152,105, 78,155, 0,253,164, 13,143,105,
-166, 97,118,248,140,157,148, 16,194, 84,211,162,170,230,122,207,231,102, 56,135, 8,102,154, 98,159, 37,183,185,153,217,208,114,
-174,111,143, 80,119,144, 39,167,186,213,100, 11, 33, 64,213, 41, 23, 55, 55,218,145, 48,101,103,210, 78, 56,245,103,166, 35, 43,
-167,217,194, 9,145,168, 30, 67, 39,101, 45,233,167, 2,201,105,186, 91, 73, 25,161, 75, 67, 53, 44,120,228,179,143,240,141,223,
-240, 77,124,247,247,124, 47,227,195,125,108,233,133, 39, 98, 47,113,197,179,207, 62,195,109,175,255, 26, 90,205, 54,163, 81, 78,
-214, 80, 68, 66, 82,228, 5,166,178,220,124,238, 28,141,170,203,197,139,231, 41,139, 17, 50, 74,105,119,150, 17, 81, 74,107,121,
-141,189,237,171,236,237,237,162,172,161,145, 68, 20, 99, 31, 73, 88,231,168,180,246, 25, 17, 7, 90, 87, 28, 28,239,147, 38, 41,
- 74, 74, 26, 89, 74,127,168,189,232,142,153,182,238, 88,231,232,100, 13,112,142,231, 46, 95, 38,137, 19,218,237, 22,205,102, 70,
-148,196,164,145,191,249, 84, 20, 97, 66,171, 79, 25, 24,213,113, 18,177,190,190,198,179,207, 60, 69,187,209, 32,118, 2,198, 57,
- 72, 69, 28,251, 77, 47,137, 35, 70,195, 62,142, 17, 42,138,253,168,197, 40,193,134, 73,108,215,232,166,159, 54, 78,245, 6, 34,
- 48,167, 78, 41, 19,226,212, 66,249,196,177,115,243, 2, 52,238, 68, 73,223,157, 86,103,159, 29, 30, 83,175,117,225, 35,130, 9,
-177, 47, 12,254,169,167,250, 57, 27, 6,158, 88,237,117,210,117,129, 45,115, 76,153, 99,202, 2, 83,140, 40,243, 49, 38,207, 3,
-168,135,159, 87,133,159,122,102, 29,202,216, 32,169, 11, 86,250, 86, 24, 43, 44, 78, 24,180,181,148,198, 80, 24, 63,217, 47, 47,
- 75, 42,237, 48, 70, 97, 69,140,108, 36, 36, 73, 70,212,104,146, 52,154, 52,154, 30,180, 27,141, 38, 73,150,145, 52,154,164,173,
- 38, 73,179, 69,146,102,164, 89, 70,156, 72,226, 36, 38,138,149,215,152,143,130,210,148,154, 14,142,152,235,215,175, 21,109, 39,
- 51,152,220,105,179, 32,230,117,221,167,204, 72, 36, 80, 13,122,252,254,135, 30,224,224,169, 39, 48,189, 62,169, 18,140, 66,197,
-195, 89,135,148, 42,100,198, 32, 75, 61,203,217, 58, 40,141,191,167, 45,144,168, 16,165, 75,207, 47, 49,166, 96, 84,142,137, 50,
- 63,195,160,172,180,111,211,171,179,124,210, 71,107,149,174,136, 34, 21,122,237, 53,149,174, 72, 27, 41, 8, 65,127, 48, 36, 77,
- 83, 18,101,201,210,148, 52,142, 25, 14, 6,228,165,166,217,110, 51,202, 43,136,140,151, 92,173,188, 48,144,136, 36,173, 44,163,
- 24,143,145,192, 82,199, 15, 53, 49,198,146,181, 59,164,173, 22, 75, 75, 75, 60,251,244,211, 52,146,152, 84, 65, 53,236, 49,232,
-251, 33, 47,227,161,102,239,176,207,113,127, 8, 82,241,236,229, 29,110,189,253,181,244,250,158,240,151,180,154, 56, 45, 40,202,
- 17,219, 59,151, 57,187,182, 68,111,255, 42, 79,127,241,113, 34,165,216,221, 31,113,225,194,121, 46, 95,221,101,152, 23,168,180,
-201,115,187,251, 28, 14,198,156,185,176, 74,179,219,130, 36,241, 26,241,169, 31,217,108,227,148,106, 60,102,121,121,137,126,191,
-143, 72, 18,250,189, 67,110,186,233, 38, 62,255,249, 47,176,189,179,203,234,234, 10,159,125,248, 97,190,246,205,111, 38,206,154,
-244, 14, 15,144,101,233,117,226, 71,125,150,150, 58, 12,246,247,104,181,154,108,109,174,115,101,123,159, 86, 51, 99, 56, 26,146,
- 23, 57,173, 86,147,131,163, 35,210, 70, 3,109, 60,192, 39, 73, 66,101, 28,227,241,136,213,149, 85, 14,118, 15,200, 71, 99,196,
-104, 76,255,240,152,213,229, 53,136,146,144,137, 12,105,213,208,222, 38,141,193,234, 24,103, 12,170, 42,113,165,215,113,208, 69,
-238, 65, 94,135,154, 58,245,176, 32,159,122, 71,120, 57, 84, 23,114,110, 66, 4, 98,182, 54,232,210,119,139,216,202,119, 86, 89,
-231,103,122,200,216,139,223,136, 32,130, 67, 36, 67,157,218,131,184,156,104,157,132,180,189,177,211,177,197,181,148,178,141, 38,
-169,112,164,152,142, 63, 13,195,159,234,175,238, 58, 97,134,152, 1,243, 73, 73,207, 77,123,242, 39, 83,225, 78,164,209,235,160,
-130,153,121,238, 39, 91,205,153,144,209,167,196,229,169, 64,206, 52,130,143,138, 74, 79, 53,219,107, 15, 98,166, 30, 48,235,121,
-156, 84, 14,171,101,242,102, 31,115,209,220, 12, 99,126, 62, 82,159,201,165,134, 17,158,117, 75,145, 19,211, 41,170,204,120, 53,
- 83,150,178,152,168,205, 77,132,233, 39, 35,233,100,232,103,158,214, 98,156,156,138, 0,152,170,162, 56, 62,102,100, 99, 30,217,
-190,194,193,206, 10,111,126,227,215,112,233, 51,159,163,234,247, 57,216,219,163,217,104,227,128,170,210,236,238,238,243,103,191,
-247, 94, 62,248,107, 15,160,164,100,220,235, 81, 22, 37,237, 86,139, 56,138,217, 92,217,228,117,175,125, 13,159,124,246,128, 24,
-197,238,206, 14,168,183,176,178,126,134,135, 63,251, 41,242,188,160,145, 36,126, 26, 88,224, 2, 56, 41, 41,202,156, 88, 42,226,
- 64,144,168, 76,133, 43,124,230, 67, 42, 53, 71,244, 19, 14, 34,229, 83,126,205, 44, 35,138, 20, 23, 47, 92, 96,111,255,128,188,
- 44,145,195, 33,203,157,206, 68,183,189,223,239,211,106,164, 24,227, 69, 77,108,200,172,168, 72,209,110,183,252,168,211, 68,209,
- 89, 90,198, 88,208,149, 65, 42, 77, 89,105, 98, 3,163,178,100,111,119,151,173,179,231,145, 50,154,150, 50,196,204,240, 28,119,
-227,244,251,141,164, 98, 39,181,242, 89, 7,112, 70,102,113,218,170,120,173,227, 32,102, 28,187,185,153,222, 98,110, 10, 66,184,
-137,236, 20,192, 1, 35,100, 72,223,233, 64,124,171,194,192, 19, 3, 58, 7,237, 71,148,122, 64,247, 76,118, 83,230,232, 50,159,
-164,216,235,105,104, 46,200,186, 58, 99,153, 29, 84, 24, 74,241,104,227, 38,227, 36, 61,121,209, 80, 26, 71,105, 28,134, 8,178,
- 6,141, 56, 37,138,151, 72,210, 38,105,195, 3,118,220,104,146,100, 45,255,125,163, 65,146,196, 36,141, 6,113, 35, 69,133, 72,
- 92,198,145, 39,184, 41, 27, 68, 92,228, 68,142, 83,136,217,154,221,245, 4,164,174, 43,223, 63, 63, 8,105, 58,103, 17, 37, 5,
-213,184,224,232,242,115, 92,254,236,167, 57,222,126,142,229, 68, 81,148,165, 23,130, 10, 68, 91,240,147, 12, 19,229,147, 61, 78,
- 8, 74,141,223,140, 29, 19, 71, 35,138,164,215,119,215, 37, 90, 23, 24,103,105, 54, 91,108, 63,115,117, 50, 44,196, 24, 75,220,
-204,252, 60,118,169,168,202, 2, 33, 34, 15, 48, 85,229,179, 72,198, 80, 21, 21, 14,135,177, 21, 81, 24,179,154, 53, 82,158,125,
-238, 42,113,156, 96,172, 96, 52, 42,113,178, 36,205, 26, 20, 69, 14,214,210, 72, 27, 30,224,173,207, 40, 72, 41, 24, 12,250,200,
- 56,161,213,237,144,100, 25,135, 7,123, 56,163,137, 16, 84,163, 1,163, 97,159,209, 96,136,104,181,232, 13, 70, 20,149,159,103,
-177,183,183,203,250,218, 42,189,227, 67,132,138, 88, 90, 94,161, 28, 29,145,201, 6,187,207, 62,201,230, 74, 7, 83,244,121,230,
-169, 75, 8, 4, 7,189, 49,183,220,113, 59,135,135,199,244, 6, 99, 58, 43, 43,244, 6, 67,134,101, 69,179,219, 36,105, 36,164,
- 89,131,229,141, 53, 90,221, 54,178,215,163, 24,151,168,102,215,247,249, 27,195,120, 52,164,221,108,242,196, 99,143,113,238,166,
- 91,184,112,225, 2,143, 63,126,137, 59,239,124, 45,101,101,249,194,163,143,115,225,220, 89,122,253, 62,199,131, 33, 74, 69,108,
-110,174,254,255,169,251,207,103, 75,179, 44,189, 15,251,109,251,154,227,174,203,204,178,221, 61,221, 51,156, 1,201,129, 33, 40,
- 58,136, 33,134, 28, 21, 82, 72, 17,252,231,244, 69,255,129,164, 80, 48,100,130, 65, 41,164, 0, 29, 8,130, 67, 12, 49,152,193,
-116, 79,187,170, 46,147,246,154, 99, 95,183,141, 62,172,125,206, 61, 55, 43,187,167, 7, 4, 64,178, 34,110,100, 86,213, 77,115,
-239, 57,239, 94,123,173,245, 60,191,135,113, 12, 52, 77, 67, 8, 9,239,189, 96,102,239, 30, 88, 44,231,188,126,253,154,190,239,
-113,218,178, 92, 46,217, 31,246,104, 43, 78,136,161,239,200, 74,227,171, 90,178,226,187,142,102, 12,236,222,222,114,249,241,167,
-168,218,161,138, 78, 3, 52,152, 66, 2, 77, 17,235, 28, 41, 6,180,157,200,110, 66, 89, 79, 54,150, 60,244,132,126, 40, 81,209,
-169,104,102, 34, 42, 62,178,213,143,145,202, 57,171, 2,252, 9,140,227,196,208,143,140,253,200, 56,142,114,145,212, 10,235, 45,
-174,242,248,202,227,144,172, 13, 93,210, 18,143,157,224,209,122,150, 99, 38,170, 8, 73, 23,209,166,146,177,255,209,201,117, 76,
- 89, 43, 59,245, 92,160, 88,249,177,178,124,248, 28,124,175, 75, 63,213,193, 99,230,124,153,120, 63,109,158,207,132,125,241,241,
-207,127,154,212,120,206,170,143, 79, 70,241, 71, 17,250,113,223,110,199,113,122, 98,158,127,223,147,247,161,221, 1,124,119,102,
-247, 93,211,252,211, 67, 90,107,141, 81,250,201, 14,253, 92, 28,247, 56,106,120, 44,104, 71,111,222,163, 56,193,136, 5,226, 44,
- 9,235, 40,246, 57, 69, 94,150,221,105, 78,234, 44,225, 77, 68,121,211,176,163,123,120,141,234, 59,250, 16,120,243,234,199,164,
-220, 19,246, 27,118,239,238, 48,109,205, 48, 12,204, 86,115,148,173,112,190,102,138,240,209,199,159,241,246,245, 75,246,187, 45,
- 49, 70, 22,139, 5,159,124,242, 17, 55, 85,230,243,207, 63,229, 31,252,236,107,252,204,243,237,203,151,124,245,237, 43,190,247,
-217,247, 88,222, 60,231, 87, 95,255, 10,101, 12, 77, 85,145,183,187,211,247, 44,229, 92, 46, 38,178,167,137, 36, 18, 25,163,133,
-102,100, 10, 30, 87, 6, 26,199,213, 8, 69, 9, 45, 20,246,205,126, 71, 76,137,190,239, 32, 37,174, 86, 75, 98,140, 12,227,192,
- 48,244, 56,171, 73, 37,179,222, 25, 75, 72,177,236, 87, 29, 41,130,111,106,234,122,134, 82,154,183,111,222,160,147,112,216, 61,
-138,125, 63,113,232, 58,102, 74,160, 38, 74,169,239, 40,201,159,236,125,242,123, 89,224,191,177, 91, 87, 79, 45, 34,239, 13,208,
-207, 63,237, 59,208,136,252,244,231, 79,212,165,249,209, 21,145, 79, 56,202,116,202, 14, 16, 97,218, 17,183, 58, 66, 44,105,102,
-101,103,158,199,161,160, 90, 59, 66,233,194,195, 52, 72, 55,113, 28,207, 37,158, 60, 68, 49,113,202, 51,152, 66,100, 74,153, 16,
-115, 97, 52, 40, 82,182, 68, 60,170,178,212,174,162,117, 53,198, 55,152,170,198,215, 51, 92, 53,199, 85, 53, 85, 93,227,234, 6,
- 87, 53,216,170,194,249, 10,235, 44,214, 73,214,188,246,101,252,103,213,137,196, 7,250,140,240,152, 79, 40,204,156,249, 14, 58,
-249,175,106,254, 83,103, 78, 18, 13, 18, 54,147, 35,119, 95,127,197, 55,255,248, 79, 48, 58,178,155, 6,121,189, 67,230,152,109,
- 99,202,134,180,118, 10,239, 52,135, 97, 98,152, 32,160, 9,229,253,165,203,163,220,212,142, 16, 36,110,115,182,156,243,230,221,
- 61,161,168,252,157,183,140, 67,143,175,252, 41, 26, 83,105,141,117,142, 97, 24, 8, 49,210, 52, 53, 93,223, 81, 38,172,104,173,
-184,184, 92, 18,166, 1,173, 13, 15, 15, 7,158,191,184, 96,191, 31,232,250,145,213,101, 85, 2, 72,192, 91,131,247,150,169,235,
-176,198,114,185,154,209, 29,118, 56,107,176, 85,205,108,190, 64, 25, 75,119,216,211,214, 21,196,145,126,127, 28,187,207,216,117,
- 29, 15,235, 45, 57, 89,238, 31, 30,104,154,154,105,232, 81,206,114,177,108, 9,211,158,198, 40,190,249,197, 47,184, 90, 54, 48,
-110,248,230,245, 75,198, 49,144,148,225,249,103,159,242,205,219,119,188,124,245,150, 23, 31,125,202, 16, 97,202,160,189,167,106,
- 43,234,218,114,117,125,193,197,205, 5,179,229,138, 80,123,186, 46,224, 77, 35, 55,164, 12,125, 8,236,118, 59,170,186, 33, 78,
- 35,164, 68,219,212,188,252,230, 91,158,127,244,156,175,190,250,134,229,106,137,173,229, 76,123,216,237, 48,206,113,177, 90, 16,
- 66,135,117,134,118,177,128,253,129,102,222,176, 63,116,180,109,203,225,112,160,174,234,114, 81, 74,132,105, 68,105,133,201,138,
-108, 12, 73,107,162,146, 46, 87, 77,145,135,175, 94,241,226,179,239, 99, 47, 53,182,170,209,222, 75, 39,171,101,106, 68, 6, 83,
-196,162,217,138, 78, 69, 91,143,178, 14,229, 28,202, 88, 18, 7,166, 94, 26, 16,131,150,201, 87,214, 24,132, 31, 47,181, 48, 17,
-167, 72, 63, 78,116, 93,199, 97,191,103,183, 27,232,251,129,148, 34,214, 89,234,166,162,142,169, 64,150, 20,198,103,172,115, 88,
-171, 30,129, 51,103,234,248, 83, 1, 45, 25, 36, 89, 68, 98,242,115, 37,163, 45,109,142,217,234,165,248, 27,243,168,234,127,178,
-190,202,167,240,177,167, 16,183,199,194, 43,113,178,241,169,122,255, 73, 68,109, 81,233,199,115, 14,204,113,228,158, 79, 58,130,
-115, 11,121, 58, 27,199, 83, 68,181,167,162,254, 8,166,127,143, 8,166,120,204, 39, 63,239,212,143, 93,122, 62, 3,215, 31,129,
-253,170,240,188,245, 49,139,189,160, 64,207,246,235,239, 31, 49,249, 36, 94, 72, 37, 93, 75,126, 76,197,175, 43,158, 93,217,209,
- 25,173, 78,191,231,135,129,253, 79,125,130, 41,229, 2,189, 24, 72,211, 26, 99, 53, 38, 6,188,238, 73,140,236,118,183,164,241,
- 64,151, 19,245,245,130,186,153, 49, 96, 8, 49,241,247,255,203,127,128,138,153,113, 18,241,211, 52, 5,154,166,165,174, 27,102,
-173,252,217,187,221, 22,162,102, 82,142,127,240, 71,255, 53, 47, 62,254,223,242,175,252,107,127,155,255,246,143,255,136,237,254,
- 64, 93,251,179, 17,114,225, 12, 23,191,177,177, 6,148, 38, 76,129,182,174,101,100, 30, 35,222, 24,166, 20,177,218, 48, 78,129,
-172, 20,117,219, 16, 67,228,221,235, 87,114, 0,150,211,247,197,139,231, 40,173, 36, 42,180,236,105, 99, 81,130,134, 16, 24,167,
-129,113, 10,204,230, 11,118,251, 3,117,221, 18,179, 35, 38,205,205,243, 23, 88,231,248,230,235,111,133, 9, 62, 76,212, 85,205,
-108, 62,167, 58, 28,136, 90, 67,124,106, 55,251,117, 66,185,223,218,202,246,157, 46,254,108,196,116, 78, 51, 60,253,119, 10, 0,
-231,241, 38,124,122,168,210,163, 72,132,211,136, 43,202,248,175,248,190,137, 1,166, 94,152,236,161,151,110,124,234,136, 83, 87,
-118,230, 19, 57, 68, 33,184,133, 35, 99, 61,150,206, 94, 18,212,132, 53,174, 36,187, 32,166,194, 92,200, 18,186,146,178,164, 86,
- 21,165,184,242,150,218,121,180,173, 49,110,129,175, 27,140,151,130,110,235, 25,198, 75, 17,183,181, 61,129, 94,172,247,167,177,
-161,210,246,140,133, 47, 33, 55,232, 44, 83, 40,117,156,119,235,179,204,122,245,129,233, 69,254,206, 69,232,183, 19, 44,168,179,
-221,251, 35,109,123, 28,122,126,242,199,127,204,246,219,111, 49, 6, 38,167, 8, 83, 34, 6, 48,202, 16, 74,228,143,183, 48,111,
- 43, 98, 78,132,144, 9, 81,166, 36, 49,131, 87, 10,173, 50,179,198,203, 56, 63, 69,140, 49,164, 12,155,237, 30, 20, 88,227,233,
-135, 81,248,225,229,235, 11, 81,186,189,156, 5,241,170,148,162,239, 39, 82, 4,235, 29, 38, 6,170,202, 98,141,194,106,203,102,
-179,193,104, 67, 74,154,237,182, 39,103,209,152,228, 99,222,128, 86,167,116,177,202, 90,186,174, 23, 5,183, 86, 52,109,141,210,
-154,187,187,123,150,109, 13, 97, 66, 27,199,253,221, 59,174,174,174,217,238, 15,172,183,123,166, 49,178, 47, 88,218, 12,216,202,
-211, 84,142,161,219,209,204,106, 94,127,253, 43,158, 93, 44, 88, 84,154,111,126,245, 37,253, 52,162, 93,195,124,117,197,203,119,
-183,188,187,223,176, 88, 93,162,124, 77, 84,138, 49, 70,218,249,156,186, 54, 92,172, 26,102, 11,249,104,151, 51,174,219,134,237,
-110, 96,183, 17,221,129, 55,150, 93,183, 39,171,140,117,154,135,251, 91, 86,171,107,166,113,226,112,232,152,198,192,205,243,103,
-124,243,242, 21, 31, 61,127, 78, 40,207, 89,204,138,135,205,158,166,242, 52,170, 18, 20,245, 98, 65, 55,142,104,163, 89,173, 86,
-236, 54, 91,134, 97, 96, 24, 71,156,115, 76, 49,224,156, 39,233, 81,238, 19, 10,230,171, 37,119,175,223,209,239, 14,212,219,142,
-237,171, 55,180, 90,145,103, 51, 76,108, 81, 85, 6, 83,159,246,227, 71,207, 55, 38,146,205, 36, 13,153,117,104, 95,225, 92,133,
-181, 14,235, 59, 66, 63, 18, 39, 41,174, 33, 4,193, 90,235, 82,200,166,137,161,239,217,172, 55,108, 55, 27, 54,235, 53, 15,155,
-131,164, 78,230, 76, 93,123,230,109,203,124, 62, 39,204, 18, 85,136,216,224,112,206, 97,207,243, 22,242, 35, 88,237,152,235,158,
- 75, 50, 98, 42,142,148,152,226,153,127, 92,147,147, 66, 69,249, 58,116, 41,252, 79,246,231, 71,112,219, 41, 30, 60, 63, 17,202,
- 29,207,124,177,130,135,199, 24,241,179, 51, 84,138,116,105, 18,206,136,170,199,194,206, 25,130, 61,126,168,160,159, 71,175, 38,
-125,158,143, 92, 36,253, 28,195, 47, 52, 41, 63, 38,161,145, 31,163,236,142, 7,128, 42,227,141, 35,187,219,148, 98,123,228,232,
-158, 23,246,115,235,218, 35, 4, 64,157, 21,116,131, 74, 25, 21, 35, 38,171,130,180,204,103,136, 61, 78,226, 9,148,236,232,244,
-241,231, 39,171,194,163,161, 93, 29, 25,222, 58,147, 85,194, 57, 77, 74, 19, 33,118,168,148,209, 49,179,126, 88, 11,220,194, 59,
-158, 61,251,148,213,245, 13,205,114,201,184,239, 24,246, 91,194, 97,143,211, 6,239, 18,135,177,199,207,174, 88,204,175,176,186,
-225,219,187,123,126,167,159, 10,176, 70, 81, 27, 67,191, 94,115,127,187,225,197, 39,223,231,179, 31,252,144, 87,223,126,193,204,
-203,133,102, 74, 74, 70,218, 41, 48,165,112,178, 9, 46,155,150,102,233, 88,212, 53,111,222,188,198, 91, 75, 50,134,221, 40,173,
-133, 42, 95,171,175, 91, 94,190,124, 73, 55, 12, 40, 96, 53,159,161, 82,226,147,143, 94, 48,246, 61, 99,154, 36, 28,228, 72, 29,
-210, 14,149, 51,227,225,192, 48, 69,170,139, 43,156,171, 88,223, 63, 48,132,114,163,141,153,152, 53,151,207, 62,130,251, 13,125,
-216, 18, 83,230,176,125, 64,197,190,128,110,128, 24, 74,146,186, 42, 31, 79, 21,157, 39, 64, 72,193,161, 74,243, 44,208, 20,115,
- 86,196, 37,197, 55,227,180,194, 40, 25,215, 82, 98, 71, 85, 72,100, 23, 33,107,185,181,146, 81, 73,242, 5, 84, 6, 65,239, 80,
-212,226,197,106,151,138, 85, 44, 37,114, 16, 64,140,138, 19,196,145, 28,134, 34,122, 27,136,225,216,129,247,132, 81,254,123,154,
- 4,248,146, 75,142, 60,233,113, 55, 37,157,121, 38, 4,121, 16,195, 20, 9, 25,201, 48,144,103,191, 36, 36,121,140,247, 84,182,
- 66,251, 6, 83, 73, 39,110,172,199, 84, 51,116, 53,127, 20,177, 85, 21,174, 18, 97,155,113, 14,237,100, 95,103,140,121, 18,130,
-161,148, 66,153,115, 28,238,217,182,251,152, 94,252, 36,236, 38, 63,165, 84,157,111,252,206,172, 46,127, 41, 95,224, 20, 99, 43,
-234,100,131, 34, 42,141,214,176,127,251,134,215, 63,251,115,212,184, 69, 79,145, 60, 66, 63, 28, 93, 4,194, 50,168,116,102,222,
- 26,234,214,115,123,183, 35, 20, 1,148,202, 10,103, 52,228,136,181,138,182,245,132, 56, 73, 87,225, 27,222,220,117,146,173, 88,
- 80,196,242,189,181, 12,195,200,229,197,146,126,191,167,170,107,250,161, 39,230,132,245,142,119,111,247, 92, 93,206, 57,236, 58,
-170,166,162,118,142, 48,140, 92, 95, 95,240,171, 47, 95,177, 88,212,236, 15,157,120,176,125,113,133,164, 68,154, 38,218, 85, 75,
- 24,122,116,142,104, 45,122,149,110, 72,124,254,253, 79,217,236, 14, 52, 83, 64,165,137, 60,193,242,242,146,245,118, 45,170,105,
-163,121,119,119,199, 48, 74,214,251,122,187, 21, 8,139,119, 56,173,200, 83, 71, 59,155,115,255,250,107,174, 22, 51, 26,103,249,
-234,235, 95, 49,198, 0,182,198,181, 43,238,183, 3,119,235, 14, 91,205,169,231,151, 4,237, 25,167,137,102,117,137,113,153,249,
-197,156,249,114, 78, 51,111,168,218,138,102,230,176, 73, 16,210,135,195,107,166, 96,112,179, 11,116,125, 79,131,151,128,159,148,
- 24,199, 81,246,191, 74,113,123,119,203, 71,223,255,140,168, 12,235,174,163,158, 45,120,120,123,139,114, 7, 94,124,252, 17, 81,
-107, 54,125,207,194,104,180,142, 92,206,231,228, 49,210,135,200,106,177, 98, 28, 38,250,195,136,111, 42, 25,211, 55, 21, 91,179,
- 39,166,196,184,223, 83, 59, 15, 58,179,239,118, 60,215, 31,241,240,237, 27,108, 93,163,198, 17,230, 19, 58, 76, 80, 71,178,107,
- 80,214,149,179,219,144,180, 5,227, 81,182, 70,133, 17,103, 6,146,177, 40,231, 81, 77,195,216,139, 24,117,234, 7,113,152,140,
- 19, 83, 22, 33, 91, 24, 70,134,126,224, 97,123,224,238, 97,203,221,253,150,135,237,150,125,215,161, 50,180,190, 97,222, 79,172,
- 70, 9, 4,106,199,154,170,242, 56,103,177,101,133,192, 25, 6, 58,103, 69,206,177, 36, 36, 30, 39,122,178,211, 22, 1,120, 44,
-207,161, 41,130, 83,125, 74,152, 59, 21,237,247,246,217,233, 61, 47,252,185, 98,253, 20,235,122,246,249,231,177,174,194,134,225,
- 73,176,217,113,162,240, 72, 93,141,103,127, 94, 58, 5,205,156,184, 96,101, 50, 96, 83, 86,103, 58,113, 25,143,197,163,215, 56,
- 29, 29,223,234, 4,162, 55,103, 93,184, 64, 28, 76, 73,216,209, 24,173,113, 69,180, 99,180,146,209,225,123, 99,114,173,244,147,
-232,206,147, 15, 55, 29,189,239,137, 20, 36, 82, 81,197, 44, 98,163,156,159,160,198,242, 17,208, 81,190, 57, 79,130,102,206,200,
- 58,100,137,132,201, 81,242,137,199, 41,224, 45, 88,103, 8,253,196,188,153, 49,142, 3,135, 16,185, 92, 94,210, 94, 94,145,180,
-136,113, 98, 18,241,132, 67,246, 72,113, 10,140,195, 72, 83, 87, 92, 44,103,188,184,185,226,235,175, 54,104,101, 1, 45,135,116,
-121,209,223,190,125,199,245,205, 21,159,124,250, 25,214,104, 86,179, 86, 60,229, 74, 50,210,205,249,126,186,120,198,239,215,107,
-174,151, 11,174, 46, 47,176,117,197,253,110,207,174,235,249,189, 31,125,159, 28, 51,247,235, 7, 24, 3,141,177,252,225, 95,255,
-235,236,119, 27,166, 41, 48, 13, 35,179,186,166,245,142,222, 40,250,195,254, 17, 76,146, 50,195, 32, 99,210,182,109, 25,198,146,
-110, 85,130,116,246,135,158,174, 23, 17, 77,138, 80, 55, 51,174,157,231,229,203, 55, 60,220,223, 99, 43,225,157,199, 35,199, 89,
- 61, 85, 80,159, 73, 16,159, 36,168,156,208,175, 37,120,192, 40,133, 85,178, 75,117,198,226,189, 19,241,145,213,232, 28, 81,113,
- 36,135,158, 52, 41,208,246,212,140,146,101,207,164, 10, 97, 45,145,196, 71,158,197,251,170,210, 89,182,121,140,164, 88,148,235,
- 97,132,208,147, 38,249, 8, 71,218, 91, 17,195,196, 88,132,113,229, 6,124,196, 19,159,178, 7, 10,134, 52, 68,113, 74,132, 80,
-148,171, 24,178,174,132, 20,230, 60,214,215, 24,223, 98,171,186,252,188,193,214, 13,206, 55,104,231, 49,174,236,194,143,164, 54,
-107, 81,214,136, 66,221,104,148, 61, 43,226,234, 41,221, 46,255,218, 54, 91,255,134,244,196,223,160,115,224,183,119, 41, 60, 38,
-221,150, 73, 64,136,220,126,243, 21,191,252,233,143,233,251,158,126, 72, 36,165,137, 9,108,233,194, 44, 18,195,238, 43,195, 56,
- 6, 81,244,167, 71, 17,144, 60, 27, 80, 87,174, 28,114,129,164, 4, 73,122,232, 71, 82, 6,231,116, 17, 50,201,120,222, 88,185,
-236, 24, 37, 10,245, 30,177,180,237,118, 19,190, 50,116,195,136,177, 14, 69,146,203,122, 48, 76, 49,210, 15, 18, 82,210, 15, 34,
-174,203, 41, 51, 13, 35,243,121, 67,208, 6,163, 52,219,253,200,179,235, 57,195,216, 19, 98,230,243,239,125,206,155,183,183,180,
-237,140,110,127, 96,177, 92, 80,169, 76, 24, 7,222,189,126,197,199,159,126,202,253,237, 29,119,183,119,212,213,140,205,250, 65,
-148,243,206,138, 64, 50,140,204,154,150,245,195, 45,109,235,240, 94,243,238,237, 91,186,126, 68, 91, 75,221,206,217,118, 35,235,
-221,192, 56, 37, 62,122,126,131,171, 26,134, 41,156, 68, 84,215, 87, 87,212,149,161,246, 21,243,249,156,249, 98,129,247, 14,163,
- 44,166,242,204, 47,150, 28,238, 14,116,187, 3,174,174,209, 89, 99, 85, 37, 34,184,148,177,222,209,168,150,110,232,153,250, 9,
- 95,215, 76, 99,196,213, 13,237,229, 53,155,190,103, 54, 70,150,173,103,182, 88,177,126,184, 99,209,214,172, 86, 11,238,239, 30,
-104,155,138,113, 24,193, 25,153,120,149,213, 85, 10, 73,206, 41, 85,196, 90, 49, 49,159,207,216, 29, 36, 88,231,221,235, 55, 76,
-206, 50, 91,205,105, 47, 14,248,197, 28, 59,159, 99,155, 25,214,183,100, 91,161,173,151,179, 82, 31, 21,210,142,172, 43,180, 29,
-208,110, 68, 87, 45,166, 22,253, 74,238, 71,134,195,158,110,119, 32,236, 59,166, 65,112,215,135,253,129,238,112,160,239, 71,250,
-113,162,159, 34,253, 36, 29,119, 8,148,200, 84,201, 41,232,198,154,166,242, 56, 39,133, 93,146, 6,207, 80,226,199,143, 35, 36,
-135,116, 82,198,199, 28, 79,160, 23,173,205,137,173,114,140, 78, 37,229, 15,186,182, 78, 49,174, 39,208,218, 99,225, 21,203,119,
-233,198,207,168,172,167, 78, 61, 75,242,102,204,137, 20, 57,253,222,199, 49,254,185, 81,251, 52,169, 60, 75,137,203,197,245, 20,
- 99,194,166,179,125,104,137,134,150,196,167, 92, 18,179, 52,143,197, 25,100,140,110,101,212, 37, 9, 91, 22, 99,180,236,163,202,
-191, 91,107,165,168, 27,115,218,117, 31, 5, 11, 71,163,125, 62, 67,206,166, 44, 47,136,158, 38, 9,126, 57,122, 22, 83,250,181,
-161, 33, 71,241,221,135,130, 68, 84,126,116, 55, 74,129,209,212,237,130,113,154,240, 5, 59,105,173, 5,173, 88, 44,151,120,107,
-153,215, 51,146,115,244, 65, 46, 23,160, 11, 27, 24,178,213, 56,101,177,218,210,212,150,139,165,103,181,112,132, 23,215,132, 41,
-161,149,103, 28, 38,134, 97, 68, 29, 58, 94,191,122,205, 15,126,240, 57, 87, 23,151,212,214,113,185, 90,224,140, 97,152,242,105,
-170,160,138,194,114, 12, 19, 15,187, 45,149, 82, 28,250, 1,239,107,110,110,158,177,217,127, 73,227, 28,173,181,204,150,115, 8,
- 19,171,229,146,185, 86,124,126,125,141,127,241,156,118, 54,227,207,255,226,103,140,251, 3,117,161,137, 21,215, 39, 83, 76,244,
-163,136,144,170,170, 2,235, 33, 10,246, 87, 89, 3, 83,192,123,201, 9, 55,218,146,208, 28,186,158,166,106,248,228,147, 23,188,
-122,253,134,144,182, 37,151,254, 12,140,242, 33, 95, 20,233, 4,138,144, 53, 76, 46,211, 27,112, 86,227, 75, 62,180,179, 22,103,
- 29, 85,109,169,156, 66, 19,100, 26, 48,236, 72,157,149, 93, 93,174,209,177, 96,126,179, 20,110, 82,144, 93, 87, 16,203, 88,142,
- 65,178,222, 99, 32,199,177,248, 95,167,146, 55, 46,202,244, 28,197,150,150, 99, 25,169,159,118,237,185,100,142, 63,238,168, 36,
-151, 32, 51,133, 68,204, 48, 69, 33,181,137,184,203,161,171, 22,235,252,105,132,110,124,141,171,228, 67,215,115,140,175,176, 78,
-138,189,113,210,185,107,107,203, 51, 33, 99,116, 85,158, 5,101, 10,200,226, 60, 54,246,131, 54,179,127,177, 12,128, 95,183,128,
- 87, 57,147,198,158,215, 95,252,130,119,223,126,131, 41, 98,143, 97, 76, 56,107, 69,225,140,136, 57,141, 77,104,171,217,110, 71,
-166, 40,122,140,148, 31, 17,156,214, 40,170,198,179, 59, 28,164, 49,112,158,245,166, 35, 4, 9,243,176, 86,108,153, 99, 12, 52,
-117, 5, 49,162,201, 52,181,199, 26, 1,201, 24,231,233,186, 14, 95,123, 18, 6,149, 19,206, 73,132,111, 38,179, 89,239, 36,131,
- 97, 72,132, 33, 98,156, 97, 28,133,114,102,181,161,109, 42,118,219,157,248,178, 67, 96, 28, 35,159,125,246, 41, 67,223,179,219,
-238,249,248,227, 23,116,189, 76,114,218,101,203,195,221, 91,172,134,105, 24,120,253,242, 37,109, 85,241,240,240, 64,101,101,109,
- 96,173, 38,199,129,122,177,164,235, 55,132, 52,177, 90, 85,236,119, 59, 54,251, 29,190,170,153, 45,151, 60,236,122,118, 93,100,
-189, 61,240,252,227, 79,241, 77, 67,215, 75,114, 34, 4,110,174,159, 97, 85,100, 86,215,204, 42, 71, 91, 85, 37,236, 67,225,124,
- 77,206,150,122, 54, 99,216, 78, 12, 57, 83,183, 11,118, 15,111,200, 86, 86,147,227, 36, 69,124, 76,129,186,105,216,222, 63,224,
-125,195,226,226, 2,211,204, 64, 59,188,173,121,115,191,149,203,166,177, 44,175,159,179,126,251,138,113, 28, 89, 44, 23,220,222,
-222,161, 80, 52,181,163,239, 7,134, 62,226,171,138, 48, 5, 82,140,212, 77,205,190,235,209, 70,244, 63, 90, 41,250, 67,199,110,
-156, 88,127,249, 21,237,162,101,121,189, 98,113,177, 98,182, 90,210,204,102, 52,179, 5,122,182, 34,251, 6,108, 5,198,145,181,
-149, 24, 95,237, 72,198,160,180,195,184,136,114, 21,218,214,224, 6,185, 4, 24, 95,194,171, 70,134,125, 96,236,123,186, 78, 10,
-251,216, 15,132, 41, 18, 67, 38,133,204, 16, 39,185,248,231, 64,136, 35,253, 56, 80,251,170,236,212, 37, 14,246, 88, 11,227,201,
-197,149, 79,100, 82,142,103,242,147, 93,121,126,106,201, 62, 81,240,212,211,139,193, 25,124, 45,159,129, 96,222,239,226,243, 89,
-248,205,147,216,214,227,248,189, 76,200,211,217,142,252,113, 2,167,201, 5,169,171,206,110,222,143,140,250,199, 11,133,125,178,
-227, 84, 71,187,137, 72,248,157, 81, 88,163,113,214,149,194, 46,255,110, 75, 33, 55, 70,151, 2, 47,130, 30,163, 21,206, 90,249,
-255,214, 96,236,113,159,174,203, 77,233,177,211,142, 79, 8,116, 9, 29,226, 83, 42, 79,126, 68,201,254,186,211,239, 67,137, 54,
- 71,130, 79, 58,225, 84,229,161, 88, 93,220,112, 56, 28,196,190, 53,175,184,156, 47,232,194,200,184,221,156,236,104,126,121,197,
-237,122,203,148,192,107,208,214,148,104, 64, 73,146, 26,186, 30,106,197, 39, 47,174,249,222,103,207,249,236,147,143,249,118,223,
-209,117, 19, 57, 31,176,206, 17,178, 98, 56, 28,232,119,123,186,237, 22,167, 20,243,170,194, 27,141, 10,147,220,183, 78, 44,123,
- 67,204, 2,219, 25, 1,101, 52,243,229, 18,107, 44, 78, 27,129, 37,164,128,243,134,155,103,215,188,123,243,142, 23,207,110,176,
- 90,211, 86, 21,105, 24,249,193, 39,159,130,202, 28,182, 59,170,186,162,174,106,185, 21,198,200, 88, 34, 86, 67, 12, 24, 99,113,
-222, 51, 30,130, 8,240,140,198, 24,135, 86,162, 98, 62,116, 35, 97, 26,217,108, 54,104, 39, 35,226,120,144, 34,110,222, 43, 57,
- 42,203, 8,253, 92,124, 46,175,179,140, 89,173,150,247,144,247, 78, 10,219,217,123,196, 25,141,179, 96,153,196,191, 58,108, 9,
-157, 33,232,132,202, 1, 19,103, 40, 39,131,254,148, 38, 41,232, 81, 58,243, 56,246,168,116,204, 23, 31,203,142,124,144,127, 47,
-182, 52,217,143,201,231, 75,222,120,217, 63, 37,185, 45,231,147,152, 45, 73, 38,122, 17,181, 69, 20, 89, 89,208, 14,188,199, 87,
-173,140,208, 93,141,245, 51,172,175,164, 27,175,164,168,219,170,198,249, 26,237, 60,218, 57,249,126, 58, 43,221,183, 53,178, 19,
- 87, 26, 91, 38, 92,226,161,125, 79,172,175,158,150,239, 99,162, 32,255, 2,125,255,127,217, 63, 58, 67,191,221,240,205,207,127,
-202,184,223,209,148, 11,122, 78, 65, 60,232,229,114,221,212, 26, 99, 18,218, 42, 14, 67, 36, 68, 75, 82,134,148, 70,140, 5,103,
- 21,198,200,196, 96,140,153,182,242, 28,186,145,113,146,117,198,172,178, 69, 3, 18,229, 50,104, 52, 70,101, 20, 17,231, 76,193,
-233,194, 52, 76,104,173, 25,134,192,229,229,140,238,112,144, 75,163,209, 2,254,153, 38,166, 35,218, 24,117, 18,199, 89,163, 25,
-187, 14,171,165, 59,187,185, 89,176,217,110,152,205, 23,196,156,184,187, 91,179, 92, 44, 72, 49,226,172, 38,134,145,177,135,254,
-176, 99,214,206,216, 61,172, 9, 83,120,188,232,196, 9, 87, 85,132, 56,178, 88, 46, 81, 76,196, 60,113,125,179,162,235, 14,108,
- 54, 59, 81,210,175, 46,216,117, 35,235,253,192,195,182,103,182,188, 98,177,186, 96,223, 29, 24, 71,177,185,126,252,241, 51,114,
- 28,152, 53,115,150, 77, 77,227,229, 66,152,115, 70, 91,139,173, 43, 82, 54,204,150, 51, 14,235, 14, 63,155,193,168, 24,110, 51,
-198, 74, 96,207,253,253, 61,207, 62,250,136,168, 18,132, 40, 19,215,113,164,219,119, 84,171,200,110,138, 92, 93,222,176, 93,175,
-121,247,176, 67, 95, 93, 16, 66,192, 54, 51,246,251, 13,227, 52, 81, 55, 13, 41, 4,134,174,163,242, 21, 93, 63, 48,102, 17,157,
- 57,231,196,137, 83, 70,252,162, 89, 72,244,125, 15,104,110,223,221,241,246,221, 59,234, 55, 53,139,139, 5, 87, 87,151, 92, 94,
- 44, 89, 93, 92,226,174,246, 84,179, 5,174,153,161,171, 22, 92, 69, 54,158,172, 13,218, 56,193, 28,167, 68,214, 14,171, 43,178,
- 29, 80,198,163,140,197,106, 9,135, 33, 71,134, 97,192,108,148,188, 54, 67,199, 56, 4, 33, 61, 70,113, 21,185,210,204,116,227,
- 68, 66, 49,142, 9, 99,198,179, 9, 49, 37,120,236,168, 59, 74, 50,189, 43,133, 87,184, 50,143,221,185, 57,213,181,227, 26,185,
-132,192,104,253,216, 65,159,130,208, 78,108,185,199, 41,151, 42,160,177, 39, 65,104,233,241,252,231,177, 41,213,199,162,156, 51,
- 42, 27,244, 73, 90,255,104, 23, 63,218, 78,159,212,189,147, 87, 93, 46,215,164,132,149, 78, 90, 21, 80,229, 49,172, 94,138,138,
-117, 10,239, 13,214,216,210,117, 75,144,189, 43, 93,136,228, 96,155, 83,247, 46,135,186, 20,117,109, 75, 49, 55,230,244,141, 58,
-222, 44, 82, 9,160, 56,174,255,210, 17,211,167,158, 50,187,159,198,103,170,223, 74,116, 37, 37, 72,188,143,185,164, 2,205, 22,
- 43,124, 51, 71, 27,143, 10,129,190, 31,185,188,244, 40,103, 57,244, 35,141,183, 84,245,130,122,126,193, 92,213, 28,134, 73, 4,
- 17, 57, 1,146,184,213,119, 7,193, 31,198,128,213,154,237,102,203,167,159,255,144, 47,246,239, 88,111,214, 56,115,193,216, 29,
-208,218, 17,199,129,219, 87,175, 80,227, 68, 30, 70,210,208,163, 98,196, 25,195,152,142,162,149, 92,246,229, 26,107, 28, 22, 81,
- 77,207,230,115,194, 20, 80, 25,154,186, 65, 91, 67, 55,246,160, 53,247,187, 45,255,242,191,250,215, 48,206,128,211,108, 54,107,
- 86,139,149,216,212,172, 33, 20,246,123, 85,205,100,244,222, 11,222,116,154, 6, 92,221, 66, 78,120,103,104,154,154,156,160, 59,
-244,108, 55, 27,182,187, 61,235,205,142,126, 24,233,134, 17,109, 60,205,226, 74, 86, 5,103,118, 11, 37, 91,242,226,227, 20,202,
-152, 42,158,227, 99,209,182, 90,201, 1,174,205, 99, 33,119,178,166, 49,186,104, 45, 76,150,162, 30, 59, 24,118,196, 78, 17,116,
- 64,229, 9,166, 30,156, 38, 37, 33,222, 81,126,204, 81, 66, 83,114, 20,200, 75,138, 19, 41,140,210,205,159,165,200,229,227,141,
-248,200, 85,136,199,116, 64,185, 93, 75, 65, 47,251,126, 42, 80, 26, 83, 53, 56,223, 74,183, 93,213,104, 95, 97,143, 69,221, 87,
-101,188, 94,126,238, 43,180,117, 24,231,139,221, 71,157,137,218, 10,228,229, 73,132,172,122, 15, 73,203,175,247,184, 42,126,147,
- 3,255, 95, 32,186,239,140, 43,157, 38,182,239,222,240, 15,255,243,191,139,158, 6, 48,150,110, 16,177, 83,152, 34, 6,104, 42,
-141,183,224, 43,199,254, 16, 24, 35, 36,165, 9, 49, 21, 10,154,168, 48, 42,239,233,186,129,170,170,100,146, 52, 5,134, 16,101,
-196,108,140, 76,197, 82,164,246,134, 20, 70, 46, 46,230,228, 48,225,154,154,245,122,139,214,134, 67, 55,145,162, 20,179,190,235,
-105, 42,143, 81,146, 65, 97,173,103, 26, 70, 66, 76, 56,107,168,156, 99, 44,162,198, 20, 19, 97,232, 73, 4,150,139,154,174, 59,
- 80, 85, 53,139,229,146,187,187,123,246,251, 3,223,251,222,167,244,125,135,214,112,121,177,228,176,123, 0, 37,250,138,135,245,
-134,186,170,185,189,219,156,206,168,105, 28,105,230, 21,218, 64, 32,112,113,121,193, 20, 2,235,221, 1,227, 42,218,153,196,150,
-222,239,123,214,219, 14, 95,181,124,254,217,103, 60, 60,108, 24,166, 30, 99, 21,243,213, 28,173, 35,222, 27,230,109,131,115,150,
-182,173,169, 42, 89,215,248,166,198,183, 13, 42, 24,234, 38,201,123,179, 77,140,113,100,177,186,100,183,190,167,169, 43, 82,218,
-129, 70, 28, 59,211, 1,173,164,248, 77,211,200,126,187, 35, 91,203,237,237, 45,151, 23,151,236, 54,107,190,122,245,154, 31,125,
-254, 41,145,196, 97, 10,212,217,226,173,236,144,141, 51, 36, 37,197, 39,132,137,148, 11,157, 77,149,215,176, 36,182,121,231, 25,
-250,158,106,117,201,240,176,102,127, 56, 16, 31,214,216, 55,239, 88, 46,222,112,125,185,226,250,230,154,213, 71, 55, 44,175, 46,
-105,151, 43,234,249, 2,221,204, 48,199,226,174, 29, 90, 89,148, 54, 40,101, 72,202,128, 46,240, 43, 3, 90, 69,218,130, 21, 78,
-192, 24, 35,221, 48,210, 15, 35, 67, 56,144,146, 38,155,130, 79, 46, 83,225,132, 98,152,142, 10,156,233,196, 95, 57, 54,145,211,
- 20,232,167,137, 97,156, 74, 3,144,202, 42, 89, 73,243, 99, 45,222, 57,234,186,166,209,230, 68,102, 60,214, 60,101,236, 89,151,
-252, 52,209,237, 84,123, 50, 31,132,210,164, 52,157,146,217,212,153,115,236,184,138, 62,106,204,158, 4,181, 41,117,226, 60, 60,
- 13,161,225, 9,154, 86,105, 37,227,247,202, 25,241,241, 1, 86,107,204,105, 76, 42,133,219,123,125, 82, 16, 74,151,101, 31, 71,
-240, 71,145,143,209,216,162, 42,181, 86, 46, 1,218, 60,170,211,207,193,247,177,176,191,245,217, 46,241,145, 65,146, 11,107,252,
-187, 89,181,143,118,233,191,164,184, 75, 48,246,163, 95, 16, 69,221,206, 65,121, 22,139, 25,173,211,216, 12,117,211, 48,246, 29,
-179,197,138, 89, 61,227,249,205, 39, 12,174, 37, 87, 17,125,232,217, 31, 14,244,251, 53, 97, 28, 32, 12,188,123,247,134,186,241,
- 56, 91, 49,141,137,135,251, 61,174,186, 21,161,157, 86,164, 56,146,163, 71,167, 64,158, 6,190,253,242,151,196,205, 43,110,191,
-253,134, 23,215,215, 92, 95,174,216,188,187,231,132, 64, 56,238, 73,114, 70,105,209, 21,236,118, 59,222,188,125,139,115,142,245,
-118,203,245,245,141,136,104,154,150,113,138, 88,239,248,241, 79,127,138,183,154, 79, 62,126, 65,158, 2,179, 28,113, 74, 40, 71,
-181,171, 37,132,195, 58,172,177,164, 16,177, 90, 51,116, 61,179, 89, 98, 8, 19,251,253,129,237,110,203,221,221, 3,219,237,158,
- 16, 83, 9,198, 24, 75, 20,102,226,208,237,169,154, 37,139,182, 38,246, 69,204, 70,150, 52, 42,101,200,197,119,175,142,249,224,
- 74,220, 5,214,104,236,233,225, 56, 94,250,244,233, 66, 40,226, 73,117,250,115, 84,236,201,147, 35,245, 48, 81,172,101,110, 67,
-208,138,112,234,200,143,158,112, 25,181, 31,125,164, 18, 65,152,206, 84,241,162,132, 63, 37, 4,150,212, 50, 81,173,103,129,207,
- 40,131, 50, 21,202,123,148,245,120,215, 96,125,133,171,102,210,121, 31,139,186,171,112, 85, 93,196,108,130, 89,181, 78, 80,171,
-198,149, 3,200, 30,181, 34,143,144,165, 83,216,253, 57,242, 81,253,246,137,117,255,131,248,231, 12,163,123, 20,114,254,242, 47,
-126,204,235, 47,126,201,220, 26,246, 83, 20, 23, 64, 17, 70,218,242,250,199, 16,208,106,198,253,122, 15, 74, 19,115, 36,228,132,
- 47, 19, 62,173,100,138,119,232, 7,180, 82,165,168, 71,208,138,170,173, 78, 73,120,186, 36, 16, 42,192, 26,133, 83, 34, 84,218,
-236, 58,148,241,244, 67, 47, 43, 63, 13, 99, 55,112, 49,247,244,253,132, 81,176,156,207,217,109, 14,114,176,231,136,209, 89, 44,
-157, 86,196, 86,174,178,228,160,168,189,229,112, 24,153,173,102,244,195,200,221, 67,207,229, 69,139,181, 26,114,160,178,158,105,
-232,216,237, 55, 34,140, 12,146,183,189,190,223,145,179, 38, 70, 25,235,199, 28,169,106,139,178, 80, 53, 53,202, 24,238,238, 31,
- 48,126,134,245, 53, 67, 86,236,251,129,237, 97,196, 84, 13,223,251,222,247,121,247,246, 29, 97, 26,112,222,160,200,204,106, 71,
- 78,129,155,103,207,105,154,134,118,214,226,188,120,180,125,237, 10, 37,208,131, 49, 84,110,194,215, 21,211, 16,152, 50,204, 86,
-151,188,123,243,134,217,108, 70, 59,159,177,221,108,184,126,254, 17, 15,135,142, 68,194, 87, 2,167,241,243,150,182,185,228,254,
- 97, 67,154,183, 50,121,156, 34, 95,191,122,205,199,215, 43,124, 51, 35,140, 19, 58, 91,136,129,203,171, 27,238,238,110,209,206,
- 48, 13, 1, 84, 98, 26, 39,106,223,162,181,156,223,211, 52, 97,141, 57,217, 70, 21,242,154,238,135,129, 49, 70,222,222,111,121,
-245,246,129,235, 55,107,110,238,238,120,246,252,134,171,155,107, 86,151,151, 52,171, 21,213, 98,137,109, 90,148,111,200,166, 66,
-155, 10,148,197, 88, 71, 54, 70,240,201, 70, 21, 71,132,161,214,134,165,210, 36, 37,132,183,186,169,104,111,239,185,127,216, 50,
- 78, 81,236,206,186,248,210, 93,209, 98, 96, 78,182,217, 84, 82, 67,213, 52, 17,179, 34, 71, 72, 42, 49, 70, 1,216,200, 25, 38,
-231, 83,194,160, 12, 56, 36,224,202, 90,225, 69,212,222,225, 10,114, 89,240,233,233, 9,244,229, 17,215, 26,191,163,110,207,167,
-192,116,251,212,216,171, 30, 21,244,145,167,217,234, 41,229,115,252, 6,233, 55,193,190,202,170, 38,198,128,109,188, 23,177, 14,
-200,184,176,220, 82,188,243, 56,103,240,149,220,120,165,176, 75,151, 46,221,252,163,106,247,216,169, 29,185,238, 70, 63, 10,167,
- 84,177,196, 29, 83,183,142, 31,178,175,120,191, 27,127,234, 81,126, 66,163,251, 53,234,221, 39, 9, 94,231, 8, 90, 93, 84,251,
-198,210,180, 51,156,175,248,193, 15,126,128, 39, 17,250,142,186,169, 81, 85,133, 27, 38, 62,126,254, 41, 77,179,228, 62,122, 73,
-213, 26, 21, 32,185,205, 97, 16, 17,215, 24,122,230,243, 25,151, 87, 87,124,252,209,247, 97,191,230,226,234, 25,195,215,175, 25,
-195, 64,154, 12, 83,127, 32,213, 51, 14,155, 7,198,109,230,245, 47,254, 9, 47,174, 47, 9, 85,197,223,252,195,127,133, 95,253,
- 39,127, 15,149,213, 41,109, 78, 29,195,107,138,178,241,112,232,136,151,137, 56, 12,140, 49, 96,157,229,163,155, 23,180, 77,203,
- 31,255,201,159,136, 53, 3,131,119,158, 24, 18,239,222,221, 98,173,227,217,179,103,104, 5,239,222,189,195, 25, 79,211,100,156,
-147,125,212,212, 15,236, 55, 91,124,213,138,144, 36,136, 69, 75, 14, 79, 69, 8,233,164,105,151, 60,110,177,238, 13, 67,199,204,
- 5,185,216,101, 87,138,167, 58,141,133,142,222,121,113,138,100,180, 81,114, 41, 44,239, 13,173,180,252, 55,163,139, 35, 66,161,
-117, 46,162,185,140, 86, 17,149, 39,226,184,103, 82, 73,198,233,227,129,169, 36,148,137,111, 52, 22,156,163, 76, 10,200,145,115,
-252,124, 44, 74,209,152, 51, 36, 25,181,134,148,136,177, 56,172,181,220,170,181, 54, 50, 58,119, 21,182,106, 68,165,238, 26,180,
-107, 48,190,194,213, 2,212,144,189,185,116,225,198,185, 66,146, 42,132, 42, 35, 42,112, 93, 14, 26,117, 76, 81,211,231,152, 28,
-245,235, 77,226,239,191,111,243,119,133,135,239, 23,215,127,150, 37,255,175, 22,143,251,248,181, 76,125,207, 79,254,201,159,162,
-195,128,211,162,254, 87,202, 16, 67, 46,175,183, 66,169,128,183,154,245,122,132,164,152,114, 36,102, 77, 86,199, 3, 79,209,212,
- 13,195, 48, 74,119, 55, 78,140, 49, 17, 82,102, 54,175,229,251,138, 20, 75, 93,144,213, 85, 37, 20,178,170,169,216,245, 3, 83,
- 86, 80,160, 36,195, 24, 88, 56, 65, 24, 91,149,217,238, 71,154,198, 49, 76,145, 97,140, 84, 78, 46,142, 57, 39, 82, 20, 97, 83,
- 51,119,144, 18,139,182, 98,187,217,114,115,115, 73, 36,115,255,112, 0, 20, 77, 93, 9,140, 38, 4,102, 23, 75,250,161, 43, 64,
- 15,197, 24, 18,218,120,246,135, 29,222, 91, 48,150,126,152,120,254,241, 2,227, 53,182,178, 84,117,205,187,187, 7,124, 61, 67,
- 25,143,169,107, 54,219, 29,235, 67,143,111,230,124,242,241, 39,220,190,121, 75,154, 2,222, 26,194,216,241,226,227,231, 88, 3,
- 87,215,151,212,245,163, 51,194, 85,242,123,214,179, 22, 95,213,194,151, 72,150,198, 79,248,202,179, 97, 79, 86,154, 16, 35,117,
-211,146,146,164,228,189,124,245,138,249,252, 82, 86, 76, 68, 66,154,136, 41,208,109,215,212,174,226,106, 57,231,238,237, 43, 62,
-254,236,123,124,189,219,243,242,213,107, 86,179,134, 74,137,167,124,140, 48,111,103,188,124,253,150,170,178,196, 56,146,114, 42,
-194,225,132,206,176, 88, 44,152, 98,150, 96,151, 98,213,210, 49,162,202,164,113,140,138,110,146,136,220,205, 46,240,176, 30,184,
-187,187,231,238,245, 61, 47, 62,122,224,197,139,103, 92,220, 92,179,184,238,104, 22, 75,220, 98, 46,154, 21,159,200,182, 70,105,
- 39, 36, 55,231,193, 40,114, 89,255, 26,231,241, 85, 69, 93, 85, 44, 23,115,110,174, 47,185,191,123,224,221,187, 59,214, 27,241,
-172,135,194, 75,208,199,245,239,153,219, 42,165, 84, 52, 20, 35,170, 55, 4, 45,171,210, 41,138, 47,252,100, 75, 37,161,116,192,
- 38,251,232,240,209,162, 31,115,222, 81, 85, 21,206, 73,211, 34,103,208, 83,251, 89, 78,194,116,200, 31, 72,105,203, 39,130,234,
-119,185,238, 57,231, 71, 87, 81, 74,146,154, 26,211,153,205,247,136,152,253,240,115,157, 75, 99, 30,162,198, 86,149, 59,117,234,
- 70,107,156,147,162, 94,121, 41,234, 85,117,252,185,123,210,153,107,253,184,123,208,168, 34,234, 40, 34, 54, 30,233,113,153,199,
-220,247, 35, 16, 48, 31,211,159,242,249, 23,247, 52,106,239, 73, 16,215,119, 10,247,111, 62,140, 68, 40, 39, 10,121,180,193,249,
-154,217,108,206,199, 31, 63,103, 86, 89,238,222,109,120,120,120, 0, 18, 55,215, 75, 86,139, 57, 57,215,132, 41, 17,202, 8, 68,
- 41, 85, 88,224, 3,195,254,129, 20, 19,135, 16, 49,117,205,118,189,101, 97, 12,243,143, 63,102,255, 71,127, 68, 30, 7, 70, 11,
-195, 97,135, 85,134, 47,214, 91,110,223,188,230,219, 95,254,148,198, 38,126,244,135,191,207,255,234,127,241, 63,227,199, 95,125,
-203,159,253,252, 11, 2,143, 66, 41,111, 13, 51, 87, 97,180, 98,182,152, 97,157,231,219,111,191,161,246, 21, 77, 85,227,189,231,
-231,191,248, 57,155,237,150,223,255,221, 31,225,171,138,113,232,121,243,238, 22,173, 45,191,250,246, 21,198,215,212, 85, 69, 55,
-140, 80, 41, 33,117, 77, 30,215,204, 25, 6,121, 48, 33,149, 29,143,236,131,140,214, 52, 85,205, 52, 5,172,182,104, 21, 24,194,
-128,179,142,186, 93, 49,101,195, 52, 29,152,121, 67, 21, 31, 61,195,154,120,186,253, 30, 47,106,178, 94,161,236,156,142, 63, 47,
-123,246,227,135,210,133,228,123, 36, 59, 69, 66, 28,201, 99, 38,165,192, 52,149,226,107,212, 41,189,233, 20,205, 90,246,248, 41,
- 75,112, 80, 72, 89,108,101,145,211,200, 10,100,108,167,109,133,174,164, 19, 55,174, 28,148,174, 70,123,233,202,141,171,202, 72,
- 93, 20,234,214, 57, 76,117,212,128, 88,116, 89, 29,157, 56,207,250,200, 94, 56,203, 51, 62, 35,188,228,247,139,121, 86,191,177,
- 11, 63,209, 89,223,203, 55,248,238,187, 56,255, 51,104,185,249,176,237,237, 55,124,122, 49,138,158, 48,187,227,246,129,127,252,
- 15,254, 30,149,210,132, 32, 93, 78, 74,170,116,210,226,157,119,206,144,148,101,183,235,201, 70,186,248,120,140, 79, 46,110, 15,
-109, 12,253, 36,180,185,148, 50,113,138, 56, 3,171, 89, 35,145,195, 41,224,140,236, 4, 43,107, 73, 41, 18,130,194,186, 21,187,
-187,151,104,173, 56, 12, 1,140, 70,133, 8, 49,211, 84, 86,118,237,128,175, 26,198, 73, 46,166, 74,201,175,143, 33, 97,200,180,
-149, 69, 21,136,210,190, 31, 88, 46,103,140,113, 36,161,184,191,223,241,201,199, 51,150,203, 25,187,221,150,202, 57,114,134,195,
-126,207, 56, 36,114,214,244,227, 64,223, 71, 22,179,138,126, 28, 25,251,137,213,101, 77,213, 24,134, 48,113,189,122,198,187,219,
- 7, 40,154,140,170,153,113,183,125, 96,187,221, 49,111,231, 92, 95, 94,243,242,235,111, 75,243,163, 25,134, 3, 47, 62,186,198,
- 87,150,217,188,102, 54,111,105, 27,121,134,189,181, 68, 50,151, 23,151,178,234, 49, 86,132,172, 25,156, 53,180,109,133,210,199,
- 44,248, 61, 85,213,210,119,219,146, 78,151,185,123,245,146,106,209,240,176,223,112,177, 92, 80, 87, 21,135,237,134,172, 20,139,
-229, 37,243,170, 97,251,240, 64, 91,215,196,113,224, 23, 95,124,201,239,255,238, 15,153,166,142,195,102, 75,229, 47,241, 85,133,
- 53, 37,200, 73, 37,180,177,162, 79,209,138,249,124,206,253,122, 83,130,168,228,189,212,117, 18,129, 27,142,113,220, 25, 34, 90,
- 82,235,134,145,105,154,216,247, 19, 15,219, 3,183,119, 27,158, 63,127,224,217,139, 13,151, 87, 87,204,174,150, 84,243, 57,213,
-108,129,105,230,232,234, 40,168, 51,160,197,246, 41,164, 58,135,241, 21,166,170,168, 22,115,218,139, 5,171,103,215, 92,127,244,
-156,237,122,199,250,126,195,102,189,165,239, 39, 66,148, 40, 84, 93, 70,242, 71,194,228, 56, 77,162, 7, 81,144,212, 72, 74,129,
- 24,236, 25, 69,174,164,185, 41, 78,141,231,113,213,136,166, 0,144, 52, 85, 37,147,107, 85,226, 80, 83,153, 26, 30,153, 25,143,
-185,237, 79,225,108, 57, 39, 84, 76,143, 28, 21,138,235,166,252,191, 99, 92,121, 42,150,241,227,164, 57,113, 38,172,227, 17,234,
-118, 30,108,150,180, 8, 38, 49, 6,235,189,199,168,199,184, 85,239, 12,149,247,120,239,169,188,165,170,228,231,206,153, 51,159,
-249, 83, 1, 91, 46,136, 76,165,212, 41,198,245, 24, 44,114,164,145,229, 98,170, 73, 37, 1, 7,245, 94, 82, 84, 65, 92,158, 46,
- 1,167, 47, 73,157, 18, 38,212, 95,218,137,200, 0, 95,147,208, 57,146,148,198,215, 45,206,215,204, 23,115,110,158,173,136,195,
- 64,214,142, 41, 41,230,139, 25, 31, 61,191,164, 50,158,251,135,200,161,235, 36,215, 86, 69,226,180,167, 59, 60, 48,246, 59, 94,
-125,251, 13,203,139,143, 48,179, 57,237,114,201,219,183,111, 81, 23, 11, 58, 13,247,155, 53,244, 61, 67, 14,212,174,162,123,184,
-227,235, 47,190,162,169, 26,200,154,249,229, 71,252,206, 15,127,159, 79, 62,254,148,255,195,191,255,191,228, 39,255,199,255,147,
-216, 15, 68,254, 47,241,157, 90, 51,134,200,103,151,159,241,147,159,252, 4,167, 53,149,181,144, 19,111,238,110,185,219,174,121,
-254,236,154,143, 94, 60,167,239,122,126,250,211,159, 18, 82,228,243,207,191,199,207,126,249, 43,158, 61,255,136,251,135, 53,211,
-216,227,189,163, 27, 14,120,103, 65, 45,241, 85,133,210,229, 6, 88,232,122, 67, 1,102, 40, 45,110,133,152, 6,166,144, 32, 27,
-137,184,140, 90, 70, 84, 68, 42,155,169,149,228, 29,159,119,168,170,136, 42,149,210,216, 83, 34, 95, 89,167,104, 78, 35, 87,163,
- 69, 13,175, 82, 9,246,200,241, 52,137,137, 41, 98,162,216,155, 76,144, 34, 26,202, 8, 45,157,226, 12,207,148,166, 81, 2, 67,
- 82, 22,113,144, 50, 98,149,177, 86,148,233,218,215,210,109, 87, 13,182, 22,155,153,124, 52,104, 91, 97,156, 43, 29,121, 41,220,
- 86,138,185,114,250,145, 80, 88, 84,178,231,171,161,252,158,181, 44,171,247, 24,246,143,104,168, 39,142,140,247,129, 77, 31,170,
-225,234,159,135,202,253,132,123,125,186,181, 87,239,101, 54,192,119,111,254,168,120, 90,128,169, 41,240,250,231, 63,225,246, 87,
- 63,131,105, 64,101, 67,202,129,105, 74, 88, 37,130,199,202,201,161,183,221, 11,110, 58, 38,228, 96, 79, 25,175, 21, 78,139, 46,
- 39,164, 81,246,236, 89,108, 96,125, 63,114,185,154, 97,114,164,117,150, 72, 98, 24, 7,154,202,160,117, 64, 17,209,166,161,159,
-162, 0, 94,210, 72,204,154, 16, 20, 70, 41,166, 33,112,241, 98,193,190,235, 65,121,166,152,136,211,136,210,153,170,182,196, 49,
- 51,246,145,198,195,162,177,236,118, 29,203,231, 43, 98,210,248,186, 98,223,109,217,110, 3,215,151,245,105,119, 27,195,136,178,
- 21, 49,100,118,219,142,118,182,226,246,238,158,113, 8, 96,100, 50,160, 84,166,109, 12,139, 85,195,148, 70,158,191,248,136,119,
-183, 15,116,125,160,153, 47,241,205,140,251,205,154,190, 59,112,181,186, 64,103,203,187,111, 95, 81,107,195, 20, 70,246, 99,207,
-247,190,255, 49,203,139, 57,174,118,204,102, 45,179, 89, 67,229, 29,141,119,120,235,168, 46,102,100, 99, 49, 86, 84,234,249,152,
-128,161, 34,222,105, 42,103, 8, 90, 17, 99,164,105, 26, 54, 15,183,248,166,162,109,106,238,223,190,226,179,203, 31, 97,188, 99,
- 24, 3,207, 47, 86,188,185,125,199,184,127,160,170,103, 88, 83,177, 63,172,249,222,247,127,135,238,176, 99, 76,154, 95,125,251,
-138, 23, 55,151, 52,179,138,119,183,111,249,244,163,103,188,123,245,138, 23, 47, 62, 34,167, 45,187,221, 1,227, 44,251,190,227,
-202,104,198,113, 40, 46,145,137,186,174,138,102, 65, 17, 18,132,210, 77,106,165,136, 90, 50,207, 14, 57, 51, 29, 70,182,195,196,
-253,246,192,187,251, 7,158,189,189,229,249,179, 27,174,110, 46, 88, 93,175, 88, 94, 93, 82,175,150,216,217, 28, 91, 47, 81,190,
-145,231,219,104,208,158, 92,121,146,173,192,213,232,122,134,157, 45,168,167,145,217,117,199,245,225, 64,191,221,114,216,236, 88,
- 63,108,217,110,247,236,187,129, 41,157, 98, 59, 73,197, 95,153, 74,152,146, 13, 19,222, 42,234,202, 97,202,212, 3, 36,107,195,
-151,102,214, 89, 35,234,251,178,210,139,197, 37, 19, 83, 70,151, 73,165,212, 81, 41,168,153, 4,201, 72,227,250,222, 88,254, 8,
-151, 17,251,229,163,199, 61,146, 31,109,112,101, 98,144,138,238, 74,105, 1, 76,157,166,163, 71, 64,237, 49, 52, 77, 63, 78,178,
- 35, 18,222,164, 82,198, 86, 85,117,178,127, 25, 35,123, 47,231,220, 19,211,254,201,150,166, 31,227, 88,139, 42,255, 59, 52,177,
- 39,233, 93,239,253,251, 63,175,168,206,167, 35,248,179, 64,138, 12,117, 93,227,156,149, 78, 79, 24, 39,236,118,123,172,117,212,
-117,133,175,107, 54,247,107,186,222,112, 56, 28,232, 58,201,203,158,186, 13,251,205, 3,247,239,110,105,151, 55,204,231, 43,218,
-229,130, 16, 18,191,124,245,146, 62, 14,252,141,102,198,171,175, 95,114, 88,239, 81,149,194,205,230, 60, 60,108,248,230, 87, 95,
-240,195, 31,253,136, 16, 71,126,239,247,127,151, 23, 47,190,199,188,189,230,111,254,225,223,226,147,155, 27,190,121,243,166,116,
-160,154,218,248,211,233,187, 94,175,185,190,190,102,183, 89,115,243,236, 25,179,182,101,152, 6,250, 67,199,239,255,206,143,216,
-109,119, 44, 23, 11,254,221,127,231,223,161, 31,122,178,210,124,249,229,175, 36,198,117, 26,241,206, 97,141, 17, 53, 40,162, 36,
- 70,169, 18,215,217, 16,147, 98, 24, 71,170,170, 38,231,145,105,234,241, 85,133, 41,226, 37, 95,107,148, 54,140,221,132,138, 35,
-206, 38, 42,163,240, 37,226, 43,159, 88,237,199,238,188,196,233,170, 39,137,184,103,112,162,163,136, 68, 6, 5,137, 76,214, 5,
- 63, 90, 20,169,201,148, 17, 94,161, 79,101, 53,157,250, 69,121,115,203, 24, 61, 43,141,214, 34, 82,179,174, 20,243, 18, 73,106,
-171, 10,235, 91,249,168,188, 88,205,188,199,249, 99, 33,247,162,241,176,226,218, 80, 78,118, 98,202,148, 7,193,232,239,188,135,
-254,135,188,246,254,237,140,230,143,177,142,239,199, 66,190, 31,144,115, 62,108,200, 69,147, 18, 35,216, 20,249,234,103, 63,101,
-216,238,152,105, 75,119, 8, 88,235, 24,134,177,192, 60,228,242,150,146,176,238,181, 21,149, 58,230, 68, 47,192, 90,131,247,158,
-195,208,151,152,224,196, 56, 38,156,179,204,218,134,105, 26,203,206, 83,222, 19, 85, 37,208,153, 41, 4,124, 85,177,222,108,232,
-199,169, 92,182,101, 90,224,196,141, 74, 74,208,247, 19,243,185,199, 25, 75,183,219,209, 84,150, 56,133, 98, 95, 84, 44,231, 45,
-135,253, 64, 59,171,232,199, 61, 23, 87, 11,246,221,129, 24,173, 68,228,234, 64,229, 27,250,190,199, 24,249,187,190,123,247, 64,
-202,208, 15, 3, 49,203,168,185,173, 27,250,253,129,152, 21, 87,207,150, 28,134,129,155,143,111,184,189,223,112, 24, 38,234,102,
- 65,213,204,120, 88,111,136, 41,113,181,188, 38,199,204, 97,119, 16, 93,203,208, 51,133,129, 31,124,255, 51,218, 69,141, 49,112,
-185, 90, 49, 95,205,105,235,154,166,170, 48,206,224,107, 79, 59,159,203,251,220, 75,132, 46, 74, 82,234,156,117,248,202, 51,155,
-181, 28, 30, 54,146,160, 86, 2,185, 98, 9, 95, 81, 10,214,247, 15,204,175, 86,220,189,189,101,217,204,168,235,154, 62, 69,182,
-187, 45, 33,194,242,226,130,219,187, 91,158,191,248,152, 55,111, 95,179,239, 14,116,195,130,198,121,146, 25,217, 30, 6,170,118,
-198,122,189,166,242,158, 93, 14,194,109, 8,242,186,185,178, 75,143, 33,138,173,173,235, 5,149, 92,194,114, 30,155, 91, 69, 42,
-175, 83, 44,244,199, 93,215, 51, 78, 3,219,253,142,187,245,150,235,187, 37, 55, 55, 87,220,124,116,224,226,230,192,108,181,162,
- 89, 78,184,166,197, 85, 13,217,213, 34,112,214, 50, 5, 81,214,130,110,208,110,142, 9, 3,174,238, 73,237, 64, 59, 95,178,184,
- 56,176,184,220,179,221,110,217,172,183,236,247,123,250, 67,207, 56, 6, 66, 22, 59,182,137,182,236,222, 61,202, 4,172, 69, 28,
- 22, 41,161,180,228, 28, 24, 43,246, 74,173, 69,205, 62,197, 64,223, 15, 18,225,157, 51,195, 96,112,174, 88,185,141, 76, 63,101,
-205,168, 30,215,190,229, 2,113,252,241,196,129, 79,170, 48, 89, 10, 19, 35,137,114,253, 49, 15,254, 24, 93,162, 79,147,202, 19,
-208,139,199,108,247, 83, 81, 47, 53,217,106, 35,177,181, 39,245,123,121,162,245,217,248,244, 8, 82, 57,247,232,125, 88,169,251,
-155,131, 60,206,185,242,255,221,138,182,250,173, 62, 39,157, 5,192,128, 98, 54,155,227,156,135,156, 24,135,145,251,183,119,236,
-247,123,230,139, 57,206, 87,188,124,245,134,135,219, 13,155, 93,224,139,219, 13, 57, 38, 60,153,135,119,111,249,250,235,175,216,
-119, 7,254,237,191,243, 63, 37,247, 35, 87,203, 21, 41, 13,244, 10,246, 42,227,173,231,205, 55,175,185,127,251,142, 78, 7,214,
- 70,243,236,250, 6, 69, 96, 28, 15,252,224, 71,223,103, 63, 28,152,178,231,179, 31,252, 1, 23,113,207,191,243,119,254, 45,254,
-175,255,183,255,123, 73,255, 54, 40, 44,253,216, 99,173,102,189, 94,139, 87, 23,184,189,187,197,106, 33,224,125,244,236,154,197,
-172,161,169, 26, 25, 43,150, 96,145, 67,215,243,163,239,127,143, 20, 35, 55, 55,215,172, 22, 11,194, 56, 62,193,209, 30,227,113,
-219,166,101, 8, 17,180,230,250,230,134,253,190,195,186, 3, 15,235, 13,190,146, 98,217, 15,129, 88,222,252, 85,138, 84, 86,225,
-173,194,199,226, 82, 56,223,247, 42,202, 34, 37, 21,107, 70,153,178,164, 92, 8,109,234,244,121,156, 71,231,234,199,254, 80,161,
-209,122, 18, 4,176, 54,100, 45,147, 30,180,160, 82,149,169, 48, 86,172, 99,198, 86,101,247, 86,225,189,236,194,171,186, 41, 2,
- 55, 95,104,110, 21,206, 75,142,184,113,246,148, 35, 46,182, 20,121, 79,115, 98,167,151,137,145, 62,187,140,240,212,125,241, 63,
-202,130,126,190,202,202,249,212,161, 72, 94,194,209, 22,243, 97, 17, 95, 62,253, 90,249, 31,227,126,195, 79,254,248,143, 81,195,
- 68, 10,138,113,202, 76,113,146,101,135, 61,226,125, 13, 93, 23,132, 4, 87,158,187, 41, 36,129, 13,149,131, 73, 0, 70,229,191,
- 25, 75,119, 56,240,236,102, 9, 57,227,172, 37,132, 64,202,137,166, 17, 78,185, 51, 90,178,232,141,248,175, 99,204, 76,147,236,
- 60, 99, 18,127,252,172,113,108,183,157, 4,187,132, 9,173, 36,193,208, 25, 67, 14,129, 20, 50,171,101, 37,129, 69, 42, 81, 85,
- 25, 95, 25, 80,145,217,124,193, 55,223,188, 19, 15,184,147,176,152,148, 50,181,107,152,194,196,221,253,134,155,155, 25, 83, 84,
- 12,195,132,241, 34,240,139, 9, 86, 87,115,134, 48, 82,205, 90,118,135,137,245,174,199,186, 6,215,180,172, 55, 59, 64, 81,187,
-138, 56, 68,194, 36, 2,190,126, 56,224,189,225,243,239,125, 94,118,182,137,171,235,107,150,171, 57,179, 89,139,182, 26,235,197,
- 70, 92,207,100,218,228,219,153, 20,116, 45,148, 70,141,194, 87, 25,231, 3, 85, 83,161,141,162,106, 42,214,187, 45,174, 4,172,
- 88, 45,182,202,187,119,111, 65,195,172,105,120,123,251,150,231, 47, 62,166, 91,175,137,122,100,159,182, 52,243, 57,218, 40,230,
-139, 5,247,235, 7,154,166,229,219, 87,175,249,252,211, 79,208, 85,195,187, 7, 1, 97,237,182,247, 84,222, 81,121, 71,127,232,
- 8, 33,210,247,189, 68,117, 31,195,144,200,116,125, 7,202, 19, 74,154, 36, 5,233,125,132,108,161,149, 64, 85,142,176,177, 41,
- 51,197,145,195,112,203,195,122,203,253,237,154,187,251, 45,207, 94, 92,115,245,236,138,171,235, 45,179,197,156,217, 98,137,106,
-102,152, 74,244, 47,202, 86,100,229,192,120, 48, 94,236,112,174, 66,217, 30,229,156, 0,121,106,143,109, 61,245,204,115, 88, 59,
- 54, 15, 27,233,220,163, 48, 43, 66, 8, 5,123,161,201, 24,140,117, 56, 35, 0, 33,163, 18, 70,139, 62, 72, 23,129,231, 17,181,
-125, 40,226,219, 67,201, 11,112,206,226,172, 76, 77,142,211, 19, 95,196,180, 39,208,218, 17, 80, 83, 80,180,226,101,167, 0,114,
-194, 9, 70,115,114,154,156, 69,205, 42,173,201,156,219,217,164, 9,164,172, 3,143, 69, 93,159, 50, 79,164, 86,199,148,176, 34,
- 82,121, 68, 79, 42,245, 30,147,251,236,160, 83,239, 37,110,124,168,216,127,168,131,254,181,129, 48, 74,253, 83,157,158,239,143,
- 52,159, 30, 75,199, 93,167,116,120,237,124, 46, 41,103, 41, 17,199,137,245,102,131, 47, 15,208,235,183,183,188,121,245, 53,251,
-237,142,187,135, 29,183,253,132, 55,142,121,211,224,156,102,191,219,243,135,127,243,111, 97, 93,141,183,158, 52, 14,194, 47,246,
-150,118,181, 98,220,119,252,236, 39, 63, 33,117, 61,179, 75, 41,168,155,237, 3, 87,207, 46,217,245, 91,126,116,185,160,158, 55,
- 12, 74, 83, 93, 92,113,117,249, 9,255,251,255,224, 63,224, 63,252,127,253, 71,132, 41, 72, 6,117, 10,172,150, 75,198, 48,209,
-206,102,220, 63, 60, 48, 14, 61,147,214, 60,203,153, 31,254,224, 7,242,239,195,200, 71,215,207, 78, 95,229,110,191,227,221,219,
-183,180,109,139,213, 34, 82,211,103,148, 80,163,141, 88,210,180, 99,179,221,113, 51, 78, 24,239, 81, 33,161,181,145,203,142,111,
- 72,104,166, 8,187,125,199, 20, 71,166, 40,225, 36, 38, 5,172, 74, 56,157,112,229,162, 25, 57,203,247, 61,197,181, 41, 25,221,
-151,110, 43, 63, 17,115,156,173,104,142,191, 71, 78,101, 15, 85, 46,157,250,104,137,116, 24, 39, 33, 15,198, 85, 98, 49,171,102,
- 88, 55,195, 85, 13,190,158,161,155,133, 64, 95,188,132,158,248,186, 22,244,170,243, 40,111, 81,174,136,244,140, 57, 61,148,199,
- 17,149, 81,103, 10,245,114,216, 40,245,107, 12,102,234, 95, 68, 51,173,254, 74, 23,221, 15,129,150, 62, 36,184, 57,217, 87,131,
-140,243,136,241, 84,192,141,119,143,201, 83, 57, 63,249, 50,207,233,128, 18, 23,153,216,222,190,225,229, 47,126,138, 75, 48,140,
-129,172,141,188, 55, 12, 88,113,245, 8,223, 61,100,156, 85,116, 49, 17,138, 6,194, 40, 85, 24, 5,186, 48,188, 77,217,193,102,
-234,202,208, 54, 13,227, 40,184,227,113, 24,112, 85, 37, 14,153, 16,101, 18, 83,114,211,149,150,247,215, 20, 33,196,128, 85, 10,
-103,197,101, 49, 77, 17, 91, 57, 17, 38,197, 64, 91,105,114,156,138,120, 47, 83, 57,205,126,123, 96, 57,151,144, 20, 83, 65, 38,
-114,119,127, 79, 72, 80, 89,161,219, 25,227, 49, 74,184, 5,125, 63,224,189,228, 49,108,119, 91,148,145,247,207, 16, 2,190,241,
- 68, 21,203,148,199,114,191,222, 99,172,167,153,205,232,199, 81, 10, 90,148,195,223, 98,136, 99, 96, 26, 15, 92, 95, 95, 48, 95,
-205, 72, 4,154,166,230,226,234,130,229,106, 65,211, 84,248,202, 83,213, 21,198,121,218,182,197,213,173,132,251,180, 77,153, 80,
-153,211, 14, 85, 59,139,175, 28,205,172,198, 24, 77,211,212, 60,228,132,115,158, 93,183, 23,127,187,119,220,175, 31,136,133,221,
- 30,114,162, 27, 58,114,138, 76, 67,143,171, 20,221, 97,203,234,242,134,221,126,207,199, 31,127,194,221,221, 29,205,124,193,195,
-118,199,213,229,138,108, 43, 30,246, 29,206, 56,250, 97, 16,149,123,206, 76,227,200,208,119, 44, 22,115,250,219, 59,180,209,132,
-105,196, 89, 75,156,146,116,194, 42,147,115, 41, 56, 37, 15, 64,144,172,199, 75, 96, 34,230, 72, 76, 48,141,137,105,232, 24,186,
-145,245,174,231,238,254,129,155,119,183,188,120,126,205,245,205, 5,151,215,151, 84,203, 57,245,124, 89, 60,238, 51,178,107,192,
- 8,196, 70, 91,115, 26,105, 43, 5, 88,141,211, 89,228, 53, 78, 26, 18, 99, 37, 59, 33,231, 44,175, 81,156, 8, 97, 44, 86,189,
-132, 53, 6,111,132, 39,225, 76,150,206,219,233, 19,161, 45, 69, 65, 82,135, 73,220, 56,199, 6, 68, 43,133, 47, 96,173,202, 89,
- 89, 85,123,153,114, 11, 65, 82,132,122,199, 70, 39,197, 76, 8,137, 41, 10,220, 44, 28, 73,118,103,171,111, 78, 2,115,125,194,
-175,163,207, 98,205,203,231,105, 35,245, 75,254, 46,146,251, 78,153,124,234, 88,224, 51,143,231,111, 62, 85,133,252, 27,148,118,
- 79, 34, 52,127,157, 95,252, 55, 30, 90,234,159,219,217,121,188, 28,102,228,193,155,205,230, 24,109,137,211,200,253,237, 45,155,
-205, 3, 89, 25,110, 31,238,217,237,118,236,118, 91,214,247,111,217,108,215,100,101,200,245,140,201,104,198, 0,127,237,175,255,
-117,174,158,221, 16, 99,100,189,189,199,140,189,128, 83,230, 21,205,172,229,139,191,248, 11,134,221, 30,235, 45,182,170,184,190,
-122, 78,204, 19, 99, 28,104,231, 11,116,101, 89,221, 92, 49,191, 92,146, 12,100,109,248, 59,255,238,191,199,239,253,193, 31,240,
-167,127,242,167, 40,147, 49, 10, 66, 25, 99,205,102, 51,140, 49,188,123,243,154,139,229,146,139,203, 11,102,179, 25,203, 89, 43,
- 73,107, 33,156, 34, 86,251,193,242,252,230,134,203,203, 11,140,177, 5, 60, 83,177, 99, 71, 74,137,170,192, 81,172,115,120,239,
- 9, 49,178,219,108,216,108,246, 76,163,140,210,250, 97,194, 58, 79,211,182,100,109,137,218,240,250,237, 59, 17,150,196, 81,216,
-236, 26,244, 73,204, 81,248,195, 41, 23, 16,147,122, 84,101, 30,119,223,231, 74,205, 92, 70,238,197,110,150, 74,167,117,124,163,
-203,184,179,162, 54, 66,146,242, 77,139,107, 90,124, 61,195,214, 51, 92,189, 40, 73,102, 45,190,153, 99,219, 89, 33,185,249,194,
- 79, 47, 29,185, 49, 40, 39,188,116,153, 46,157,187, 39,206, 46, 23,234, 3,170,209,252, 63,162,254,251, 55, 60, 83, 79,166, 98,
- 49, 74, 72,205, 24, 72, 33,138,120, 71,107,116, 74,224, 69,205,127,234, 0,206, 60,175, 20,193, 97, 74,153, 28, 3,111,190,250,
-146,245,235,151,216,156, 56,196, 68, 31,101,190,100,173,236,222,173,113,164, 81, 2,150, 36,222, 86,212,196, 90, 43, 42,103, 80,
- 89, 68,116,219, 97,160,106, 28,149,115,236,182, 7, 46, 46,151, 98,145,212,154,105,148,117,139,117,150,110,183,167,174, 42,226,
- 20,168,231, 45,227, 56, 18,146,248,204,141,177,130, 62, 45,209,170, 93,215, 97,173, 76, 9,150, 87, 30,171, 51,202,106,226, 36,
- 88,225,182,118, 76,195,128, 81,138,166,117,212,181, 67, 59,205,237,253,154, 97,202,248,170, 34, 5, 81,162,119,135, 3, 23,171,
- 25, 97, 74,172,215, 91,170,202,113, 56,116, 69, 96, 10,195, 20, 49,214, 96, 43,199, 16, 38, 46, 46, 87,108,182, 82,208,219,217,
-156,144, 97,156, 2, 83,223, 99,181,130,144,232,135,192,106,181,228,234,147, 27,166, 60,145,117, 98,117,113,193,108, 57,103,117,
-185, 98, 62,111,241,206, 83,213,242,140,214, 77, 75, 53,159, 99,235, 10, 93, 85, 40,227, 30,181, 71, 74,132,170, 86,105,234,166,
-162,105, 42,170,198, 23, 96, 76,205,208, 31, 78, 26, 21, 95,121,188,177, 76, 93, 79, 54,154,186,109,185,187,191,227,122,177,162,
-239, 7,162,134, 48,181, 76, 99, 15,123,205,106,185,192, 26,203,245,229, 53, 63,251,249, 79,185,186,188,196,250,150,205,221, 91,
-158, 93,204,217,247, 29,149,149,137,203, 52,142,236,182, 91,230,139, 21,222, 59, 98, 8, 2,132, 49, 53, 83, 55,202,247, 52,101,
- 1,166,100, 69, 34, 17,242, 99, 64, 73, 76,177,248,176,245, 41,125, 44,149,255, 62,196, 61,135,126, 96,189,222,114,119,251,192,
-179,155, 11,158,191,184,230,242,102,201,234, 82, 60,238,213,124,129,105, 22,232,186, 69,185, 74,198,241,136,203, 70, 41, 71,214,
-197,126, 91,198,210, 86, 11, 61,211, 56,139,245, 98, 11, 76,100,134,161, 39,198, 1,210,132, 54, 98,221,110,188,165,169, 13,222,
-138, 24, 14,117, 92, 43, 5,134,113,100, 26,167, 50, 46,143,132, 16,132, 83, 96, 52,195,160,232,140, 46,226,114,135,175, 69,104,
-238,156,112, 6,140,214, 37, 94, 62,150,112,173,227, 94, 62,202,172,242,120,201, 70, 86,159,198, 90, 41,222,198, 22,238,197,145,
-127, 97,206,146, 73, 31,139,189, 58,211,167,201, 52, 46, 98,143,100, 27, 72,239,117,221,249,215, 30, 44, 74,253, 38, 75, 25,191,
-246,208,225, 76, 49,253,244, 47,243, 87,213, 1,229, 15,172, 3,212, 83, 92,151, 82, 88,235,104,154, 25,195, 48, 16,115,228,203,
- 47,127, 73,204,145,151,175,223,240,139, 47,190,230,246,110, 75,219, 52, 76,211,129,119,111,190, 97, 81, 59, 94,124,246, 59,116,
-125,228,217,103,191,195,234,226,138,177,223,147,166, 3, 93,191,193,246, 3,213,172,101,222,212,172,102, 51,254,195,255,243,255,
- 5,163,145,192,131,126,192,245, 61,139, 69,205,162,174,153, 95, 8,195,125, 8, 19, 95,124,249, 83,150, 87, 23,124,244,233,103,
-204,151, 11,254,253,255,249,255,134,127,242, 39,127, 70, 78, 1, 44,236, 14, 59,177,170,236,119,228, 24, 9, 57, 83, 85,190,164,
-194, 13,180,203, 5, 38, 11, 13,169,235,247,196, 40,249,193, 55, 55,215, 40, 5,117, 93, 81,249, 74,138,164,115,194, 44, 47, 29,
-154, 42, 99,182,170,170, 24, 99, 18, 14,129,171,200, 89,227,135,137,144, 50, 73, 89,194, 97,192,249,138,207, 63,255,156,237,102,
-203,246,237,158,170,246,132,176, 71,199, 64, 74, 74,236, 98, 41,156,156, 11, 34,234, 16, 37,186, 4, 28, 29,139,250,249,190,232,
- 49,238,240, 84,208, 51,104, 37,118, 73,237, 12,218, 53, 84,237,146,217, 98, 73, 61, 95,210,206, 87,184,102,134,169,230,152,122,
- 38, 98,199,170, 70, 87, 13,206, 59, 25, 85,150, 81,151, 58,238,118,173, 92, 88, 31, 81,193,234,201,148, 9, 85, 88, 66,239, 69,
-149,242,155, 69,232,127,245,164,179,255, 30, 11,254, 9, 55, 57, 78,196,195,192,120,232, 24,187,158,156, 51,174,242,228, 16,113,
-109, 77,246,162,149, 81,199,111, 24, 39,182, 37,133,223, 76,158, 70,126,241,147, 31,227, 83,102, 59, 6,134, 0,202,123,244, 20,
-176, 54, 98,108,198, 40,205, 20, 38,180, 50,114,104,137, 84, 8,103, 68,204,102,143,225, 77,133, 96, 88,162,169,101,151, 62, 10,
-115,160,235,122,156,183,248,170, 98,191,221, 98,173, 99, 10, 16, 99, 16,140,106,140, 69,180,169, 33, 67, 93, 25,177, 95,134, 76,
- 44,175,153, 51, 6,149, 34,211, 48, 10, 5, 83,131,183,154, 93, 63,114,113,225,168,106,249,196,221,126, 32, 37, 77, 8, 17, 99,
- 19,202, 8, 88,166,170, 77,129,209,204, 64, 69,182,251,158,166,117,140, 83, 0,165, 25, 67,102,177,170, 25,166,145,213,245, 74,
- 18,215,172,161,106, 90,172,117,236,186,142, 97, 28,209, 36,210,148,104,156,227,217,245,115,180, 81, 36, 21,105, 26, 79,179,152,
-209, 46,231, 92, 92, 95, 51, 91,204,169, 43, 71, 93,214, 69,117, 45,186, 16, 83, 85,248,182, 69,251,170, 48,210, 31,113,165, 90,
- 9,216,200, 87,142,186,169, 89,173, 86,220,237,123,102,179, 25,125,183,199, 90, 75, 72, 35,206,104,218,166,102, 56,244,216, 89,
- 67, 63,245, 40,163, 72,161, 32,149,199,200,238, 1, 46, 47, 47, 25,250, 61,155,135,123, 46, 47,150,188,121,243,138,155,155, 43,
-190,125,245,146,231,215, 55,216,170, 97,189, 61, 48,175,100, 90, 48,134,137,186,241,108,183, 91, 22,139, 21, 49,132, 19, 48, 44,
-166,136,117, 6, 29, 74,130,102, 22,222,190, 78,138,172, 18, 42, 69,162, 86,146, 98, 88,154,197,227,229,255,152, 46, 18, 99,102,
-236,133,231,190,239, 70, 30, 54, 59,222,221, 61,240,236,106,201,179,103,215, 92, 63, 47, 0,155, 85,135,155,207,177,117,131,241,
- 13,202,122,180,182, 36,165, 73,198,160,241,101, 52, 45,197, 79, 57,139,118,186,188,199, 28,109, 93, 81, 59,139,189,179,108, 54,
- 59, 82,138, 56,167,241,149,165,105, 60,117,229,241, 94, 46, 4, 41,101,134,105,100, 24, 12,195,104, 37,199,125,156, 4, 35,157,
- 36, 56,102, 40, 71,138,140,228, 61,245, 96, 5,216,102,109, 33,105,218,114,246,148, 40,219, 24,138, 85, 77, 46, 30,198, 9,130,
- 92,107,139,118, 86,132,188,198, 22,152,142,150,196,198,179,176, 39,206, 10,249,209, 93,134,146, 38,234, 88,228,173,156, 5,137,
- 15,180,229,127,169, 39,252, 55,117,234,191,185, 16, 63,205,212,254,103,218,185,228, 76, 70,188,180,190,174,208, 90,115,216,111,
-232, 54,247,124,252,226,138,119,247,239,248,211, 63,253, 51, 94,124,242, 61,254,141,127,243,239, 48, 78,129,221,246,158,111,191,
-185,100,251,230, 21,219,205,150,127,233,111,252, 33,171,103,159,176,221,110, 25,118, 27,214,239,190, 97,187,123,192,199,204,204,
-125,204,205,229, 5, 97, 24,248,211,255,246,143,153,198, 30, 29, 43,118, 41,115,227, 43, 76, 93, 99, 43,203,139,143, 63,193, 86,
- 53,219,195,158, 38, 91,126,245,179,191, 64, 39,197,116,245,140,191,245,175,254,141,211,190,105,156, 38, 64,159, 70, 50,235,135,
-123,102, 77, 83,232,110, 3, 83, 76,108,119, 59,154,170,166,219,237,101,124, 89, 87,204,218, 57,149,115,220,221,222, 22,206,186,
- 97, 28,197, 62, 18, 99,162,170, 43,177, 93,148,113,234, 48, 12, 50,234,155,132,181,127, 56, 12, 82,100,179,132, 9, 56,231,217,
- 30, 54,160, 52,171,213, 5, 75,175,160,255,150, 56, 5,134, 48, 18,147,145, 91,119, 22, 31, 89, 78,249, 44,177, 44,151,196,183,
- 99,214,239, 81,233, 94, 44, 31, 89,226, 74, 99, 42,118, 41, 36,111,219, 84,134,108,156, 16,221,154,150,118,177, 98,113,113,205,
-124,121,129,107,196,191,106,170, 86, 82,207, 92,133,118, 5,197,170,149,224, 88,141, 22,150,250,153, 56, 79,189, 39,252,146, 22,
-146,194,149, 63, 70,156,129, 86,249, 49, 49,176, 36,147,253,211,213,238,252,223,159,170,238,189,191,112, 74,137, 48, 78,164,190,
- 99,220,110,217,222, 63,112,216,110, 81, 25,234, 89, 75,179, 92,208,196, 57,186,174,113,222, 61,166, 79, 41, 85, 40,124, 98,158,
-143, 49,176,185,127, 7,211, 72,154, 2,195, 16,137,165,171, 16,168,137, 69, 49, 49, 14, 35,113,202,160, 53, 33,103,166, 34,198,
-147, 93,186,116,233, 33, 78, 56, 3,206, 90,166,113, 98,181,154, 75,162,152, 82, 12,163,208,181,154,182, 97,183,219,163,148, 98,
- 28, 39,234, 34,150, 83,206, 19,131,136,237,186, 62, 20,181,178,231,208, 77,104, 45,211,162,186,114,228, 16,200, 90,242, 38,180,
- 74, 24,173, 25,199, 64,229, 13, 77,235, 48, 86, 58,238,253,110,164, 31, 3,205, 76, 10,116, 78,137,125, 23,169,219, 22,178, 20,
-206,113,140,100,244,233,226,188,221, 71, 46,175,231,116,195, 72, 61,107,200,192, 24, 3,203,229, 37,206,214,108,247,123, 17,136,
- 77, 17,239, 12,171,217, 18,149, 19,227,216,115,121,125,129,171, 12,214, 91, 22, 23, 75, 46,159,221,208,204,151,204, 22, 45,144,
- 36,187,189, 21, 27,171,173, 42,148,115,104, 39, 69, 73,214, 67,250,148, 93,129,210,130,105, 69, 83,215,158,229,114,206,195,235,
-183,212, 77,131,214,154,186,174,217,239,197,213, 98,148,226, 48,116,144, 46, 8,211,132,213,142, 97, 26, 9,211,128, 85,158,126,
-191,225,238,237, 43,170,118,201,125, 42, 19,147, 97,224,242, 98,201,159,255,248, 39, 60,127,246, 12,109, 45,251,237,134,182,154,
- 49,132, 32,171, 19, 35, 22,194,152, 98, 17, 35,202,190, 25, 43, 30,114,194, 78, 58,211,152,139,107,164, 36, 5,151, 80, 38,125,
- 74, 36, 59,243,125, 40, 93, 44, 92,146, 14, 58, 69, 69, 26, 18, 99,232,216,239,123,182,119, 59,238,222,109,121,126,187,225,250,
-249, 21, 87,207,175, 89, 92, 94, 80,207, 23,248,197, 66,138,123,213, 10,153, 78,107,114, 41,130,162,157,209, 88, 39,144,180,202,
-137,200,176,109, 27,218,121,195,108, 37,162,230,195,254, 32, 43, 31, 35,226, 55, 95,121,218,198,225,141, 52, 46,213,104, 25,188,
- 99, 24, 71,250,126,196, 90,205,161,159, 24,114,146,243,175, 56,114,200, 9,109, 19,253, 32,120,117,115,178,127,155,211,217,116,
-204, 65,231,152,161,226, 29,149, 22,247,141,117, 22,235,107,124,185,232,201,250,208, 60, 34,166,213, 83, 53,114,126, 82,166, 37,
- 41,241,168, 43,179,239, 91,106, 50,144,142,254,242, 39, 29, 54, 31, 40,232,233,131, 7,154, 8, 12,222, 11, 99, 81, 71,147, 90,
- 49,183,169, 72,201,213,148, 68, 47,245,129, 2,175, 74,126,116, 86, 39, 27,213,249,159,117, 20,224, 61, 13,115,209, 39,139,157,
-183,142, 60,245,244,187, 59,140,154,120,123,255,138, 87,175, 95,243,175,254,245,191,134,117, 53,175, 94,253,146,245,102,203,183,
- 47, 95,114,121,117,205,199,191,255,175,115,249,236, 19,178,118, 12,221,129,195,253, 91, 30, 94,126,201,195,183, 95,242,230, 97,
-195,231,223,255, 62, 84,142,121, 93,243,179,127,242,167,124,251,238, 21,159,127,254, 25,202, 90, 76, 85,203,225, 22, 52,151,151,
- 87,212,213,146,126,154,232,251, 1,210,150,215, 47,191, 97, 49, 95,209,206, 26, 62,254,228,134,197,197,130,183,247,235, 2,159,
- 73,104, 20, 99, 8, 24,231,113,117,203,253,122, 77, 54,142,166,157,177,104, 26,192, 9,190,182,236,143, 46, 86, 11, 14,135, 3,
-205,124,134,181,238,148, 80, 52,140, 83, 9,213,241,194,218,142,241,116,179, 27,199,137,172,160,239, 71,161, 66,133, 40, 55,228,
- 65, 84,205,139,197,138,245,102,199,219,183,119,204,204,132, 27, 6,226,216,145, 84,102,159,196,142,164,131,196, 21, 30,115,197,
- 5,187, 42, 31,161, 8, 65,142,201,123, 71,181,166,208,156, 68, 40, 19,143,241,189, 26,114, 54,104,237,112,190,162,110, 91,234,
-249,140,106, 49,163,185, 88,226,103, 75, 76,213,144,173, 43,108,117, 67,182, 71,239,248,209,206, 1, 89,231, 39, 23,196,252, 62,
- 89, 56,137,244,254, 36,224, 75, 69,244,103, 20,217, 9, 76, 70,159, 82,144,180, 92, 10,149,250, 32,206,245,253, 68,192,227,142,
-240,172,159,226, 60,177, 78,157, 90,146,239,250,196,179,202, 69, 98,120,246,108,229,163, 7, 94,149,247,112, 62,165, 13,230,227,
-207,207,110, 31,234,152,145, 80,214, 27, 42, 70,114, 63, 50,237, 59,186,237,134,253,195, 27,182,119,239,136, 83, 79,213,204, 88,
-236,175, 72,221, 21,213,124, 73,174,107,241, 0,107, 83,240,202,114, 41, 35, 74, 18,222,244,250, 37,116, 3,155, 62,210,105, 75,
-208,137, 74,141, 88,151, 81,214,138,216,104, 24,113, 74, 49, 41,216,163,152,200,212, 40,170,148,113, 94, 49, 41,217, 91,206,173,
- 99,102, 28,111,167, 3,243,197, 28,171, 45,253, 56,178,235, 7,234,182,197, 52, 51,186,251, 59,156, 22,177, 80, 68,145,148, 33,
-132, 76, 12, 9,133, 33,134, 64,237, 53,206,104,186, 41,210,182,142, 48, 6, 98,232,241,126, 69,138,195, 41, 49,174,169, 45,235,
-205,192,205,205, 92,224, 44,185,227,126,179, 33, 98,240, 85, 13,122,196,146, 25, 38,176,181,226, 48, 70, 46, 22, 11,214,187, 61,
- 93, 63,177, 88,205, 68,165, 29, 50,237,194,177, 31, 15,204, 86, 11,176,134,253,212,115,249,236, 25, 33,194,110, 24, 65, 27,140,
-142, 44, 86, 45,179,186,166, 63, 28,208, 10,150,215,115, 76, 99, 48,149, 99,117,125,197,242,226,138,217,114,193,108,190, 0,173,
-169,219,154,170,174, 49, 85, 85,200,133, 22,227, 93,129,144, 8,115, 95,165,146,112,103,203,153,166,193,228, 76,101, 20,139,229,
- 28,229, 45,158, 86, 68, 98, 74, 65,215, 49,145,209, 85, 77,222,108,137,125, 39,200,101, 15,219, 16,184,110, 23,108, 31,238,105,
-231, 45,195,230, 29,109,229, 24, 14,145,205,186,166,114,134,113,127,203,213,197,140,215,175, 95,177, 90, 93,136, 24,112,191, 99,
- 94,105, 42, 99,216,236, 59,178, 18,240,149,202,114, 81, 27,178, 98,204,130,175, 34,130,202,233,113,245,150,133,248,152,148, 38,
-169,179,179,191,236, 71, 53, 26,149,227, 41, 94,250,232,122,201, 89,220, 23, 99, 72, 28,198, 61,183,135,158, 55,155, 29, 55,119,
-247,124,116,247,192,243,103,151, 92, 93, 93,208, 94, 45,105, 47, 46,112, 77,139,173,103,224,106,146,113,168,242, 97,180, 34, 89,
- 7,166, 70, 85, 51, 84,181,195,183, 59,170,214,209, 46, 91,110,182, 43, 14,155, 29,227,190,147,241,122,150,125,186,116,248, 14,
- 77,198,107,112,222,224,172,126,212,232,160,229,235, 10, 81,244, 30, 33, 17, 82, 66, 7,232, 85,194,106, 78,197,252, 9, 42,186,
-224,169,197,229,145,105,148,193,121,201, 24,177,206, 82,213, 45,190,105, 11, 47,163, 20,114,163,207, 70,133,250, 12,135,254, 94,
-243,156, 5,134,163,116, 62,219,169,255,230, 38,224, 44,100,229,195,130,157,223, 20,180,242,151,181, 26,138,167,123,129, 99, 1,
- 63,125, 67,242,111,238,214,159, 76, 9,138,170, 58, 43, 9,117, 24, 14, 7,182,235, 7,140,142,220,175,239,249,107,255,242,223,
-164,174, 91,118,251, 3,109,221,208, 54,151,124,246,217,239,209, 52, 45, 65, 65, 63, 78, 76,195,150,221,195, 3,187,251, 55,188,
-126,245, 37,247,111, 95,178,188,184,225, 98,181,224,250,230, 10, 72,252,248, 39, 63,102,177,186,160,154,205, 49,198,226,219,250,
-196, 66,119,206, 1,138,253,238, 64, 63, 78, 56,239,228, 54,159, 18,243,217, 12,215, 58,154,166,129,251,181,228,213, 43, 69, 63,
-141,164,125,241, 47,174,215, 92,174, 46,208, 74,241,229,175,190,228, 71,223,255, 1,206,153,226, 43,215,167,100,187,148, 19,219,
-251, 13,214, 30, 73, 71,238,116,187,139, 5,221,120,204,235, 62,133,177,148, 75, 87,152, 4,146, 48, 77, 19, 33, 6, 50,250, 20,
-218,227,189,103, 60,108,216,237,118, 16, 37,116,226,144, 2, 33,101, 73, 85, 11, 81,194, 53, 98, 42, 35,249,199, 44,224,148,121,
- 34,142, 75, 20,238,118, 46,128,135,130,253,156, 98, 32,171,140, 45,226,159,170,174,168,219,134,102, 62,167,154,205,168,230, 51,
- 65, 72,106, 83,172,103,250,113, 92,172, 16, 50,159, 82,143, 49,173,138, 39,180, 57,206,114, 5, 8,137, 28, 69,132,149,203,220,
- 79, 25,141,201, 74, 98, 38, 53,103,201,105,234,105,132,249, 83,105,104,177,125,157,255, 33,186, 60,115,167,252,164, 82,108, 57,
-129, 43,242,175,153,239, 43,193, 16,157, 63, 96,167,184,227, 82,225, 37,229,172, 60,196, 71,214,180, 28, 14,249,233,175, 41, 66,
-208,190,239,232, 54, 91,246, 15, 15,236,215, 27,186,221,142, 56, 13, 76, 83,144,195, 8, 45, 25,217,117,133,113, 22,138, 32, 45,
-133,169,132, 99, 40,114, 10, 76,219, 13,187,135, 7,134,110,224,208, 5, 92,109,209, 10,234,218, 66,134,113, 8,168, 84,252,200,
- 89, 66, 90,180,146,209,247, 9, 66,100, 13,113, 74, 88,103, 75,119, 98, 11,219,160,168,202,173,163,174, 27, 30,214, 59, 1,212,
- 0,206, 58,134, 49,226,188,149,226,160, 96, 26,165,219,111,234,138,190, 31,241, 94,139, 46,100,140, 56,173,208, 5, 84,148,115,
-166,118,150, 48, 6,218,198,115,115,125,193,225,112, 32,101, 77, 12, 66,195,187,186,110,216,108, 70,246,219, 64, 93, 91, 82,212,
- 84, 85, 37, 66,209,105,194,122,241, 95, 39, 5,202, 41, 34, 9,231, 61,214,203, 62,253,242,242,146,105,156, 48,218, 75,158,131,
-115, 44,102, 45, 41, 70,250,113,196,183,141,176,195,155,138,118, 49, 99,121,113,201,108,177, 96,177, 90,209,180, 51, 50,138,197,
-106,137,243,162,101, 49,174,236,141, 20, 39, 95, 50, 33, 23,121, 83,185,176,197, 92,238,138, 50, 85,210, 70,211,204, 26,102,243,
- 25,227,174,167,170,107, 66,223, 83, 85, 21,195,152, 74, 90,160,227,176,223,227,151,115,166,105, 66, 41,195, 24, 2,174,242,132,
-105, 66,107,197,126,125,143,111, 87, 60,188,125,197,199, 31,191,224,225,118,131, 51,158,111,222,188,225,234,242,146,164, 97,189,
-221, 96,105,104,138, 93,118, 8,137,161, 23, 11, 44,221,129, 88,136,123,147, 42, 9,101, 41, 23,150,133,122, 79,215,242,221,179,
- 63,103,158,240, 18, 84,126,252,241, 36,206,142,153, 97, 10,116,125,207,118,187,225,254,254,129,183,239, 46,120,254,236,154,171,
-231,151, 92, 61, 59, 48, 95, 93, 80,205,123,170,182,197,212, 53,198, 87,194,103, 87, 6,173, 44,217,149, 49, 54,182, 88, 96,231,
-216,182,167, 93,118, 76,151, 29,161, 19,219,112,223,203,123, 64, 44,183,242,181, 24, 37, 96, 23,107, 29,222, 43, 82, 54,196, 8,
- 85,200,132,136, 8, 56,131, 4,203, 12,177, 39,166,240,152,251,240,157, 41,182,156, 17,206, 59, 98,174, 49,214,208,148,104, 86,
- 99, 44,214, 9,119,223,186, 50,109, 48,250,148, 10, 7,249, 73, 28,235,251, 63, 30,121, 48, 74,165, 95, 95,212,207, 85, 68,239,
- 43,225,127,155,189,249, 95,221,132,243, 93,181,252,111, 59,130,127,242,249,249,116,161,193, 24,205,225,176,135,156,120,251,230,
- 21,127,240,251,127,192,191,245,175,255,109,140,245, 76, 33,209, 13,129, 49,100,214,155, 29,235,205,142, 67,183,101, 56,236,232,
-118, 27,222,124,243, 21,239,222,188,226,171,175,190,164,174, 43, 62,249,244, 99, 62,249,232, 57,139,249,140, 87,175, 94,243,171,
- 95,125,141,114,142, 33,102,150,109,131,175, 28,139,249, 12,173, 50,202,192,253,253, 29,187,237, 1,235,107,250, 67,143,213, 53,
-111, 95,191,225,254,254, 14, 92,113,169, 43, 37,254, 77,196,204, 25, 99,196,148, 81,250,106,177,196,104, 77,183,223,178,219,239,
- 9, 97,226,114,185, 32,101,197, 56,142,220, 63,108, 48, 70, 83,213,117, 17,245, 72, 1, 24, 7, 17,172, 48, 72,236,234,113,212,
-115,252, 30, 25, 99,168, 43,131, 70,118,227, 33, 69,116, 84, 76, 33, 18,114,164,174, 43,178, 51,140,131, 98,119,216,147,211, 64,
-138,129, 17, 67, 72,160,162, 4,102, 68,161,183,158, 70,235,199, 27, 54, 37,186,247, 56, 29, 72, 57, 75, 65,207,143,147, 26,165,
-228,193,119,206, 80, 55,158,217,124,198,242, 98,193, 98,185,164,153,205,241, 77,131,182,246,136,165, 43, 32,163,252,152, 92,116,
-124,237, 79,185,235, 69,169,122,182, 31, 87,200, 97, 24,167, 72,154, 2,177, 31,137,211, 36,225, 52,136, 71,221,199, 10,162, 35,
- 59,243,168, 10, 63,231, 47,159,101, 18,156,162,103,149, 58,117,206,167,113,127, 62, 83,103,158,176,142,169, 96, 38,159,198, 45,
- 62,229,188, 76,114,144,157,146, 9,211, 9, 57,169,202,175, 61, 61,118, 39, 63,171,100,203,231, 98,183, 81,199, 63, 47, 37,194,
- 84, 70,226, 99, 64, 41, 67,221,204,197,226, 21, 35,198, 90,172,111, 48,198, 19,167, 76, 31, 7, 82, 62, 48,141, 3, 67,223,209,
-239,247, 12,135,142,169,140, 78,107, 53,241,240,238, 45,219,245, 6,149,193, 27, 77, 74, 17,165, 52, 97, 12,228, 32,151,230, 8,
-132,242,253,247, 10, 76,241,166,135, 24,240, 72,254,131,107,106,182,251, 3,179, 89,131,177,150,177, 31, 25,134,137,122, 38, 68,
-191,253,221, 3,115, 99, 81, 4,177,188,197,128, 43, 94,221,164, 68, 45, 93, 87,178,171,236,186,161,164,168,101, 84,146,244,183,
- 20, 70,156,150, 11, 79, 83, 87,220,223, 13,252,240,119,111,152,198, 1,239, 12,175, 95,239, 9, 65,115,177,242,196, 56,208,119,
-137, 24, 69,240,103,141, 69, 1,251, 67, 79,213, 56,198, 16,176, 78,254,254, 73,129,173, 28,117,219,162,181,230,226,226,242,132,
-186, 5,196, 91,110, 31,243,182,155,249, 76, 46,167, 77,205,108, 46, 69,119,177, 92, 48, 95, 94,224,107,217,151,187,170,194,215,
- 13,237,114,113, 82, 46, 11,171, 62, 63, 25,169,230,152,164,200,103,153,234, 72, 42,162,236, 97,117,229,240, 89, 49, 91,180,140,
- 93,199,124, 49, 99, 51,142,180,179, 25, 73, 73,152,145,173, 60, 93,119,192,229, 92, 92, 4,153, 67,119,224, 98, 49,103,125,127,
-199,124,222,210,237, 54, 24,165, 25,167,196,190,210, 24, 50,222,104,230,149,231,229,215,191,226,114,181, 96,156, 70,134,224,200,
-147, 8, 26,199, 97,100, 28,122,218,182,133,245, 3,195, 24, 72,190,126,196,198,126,231, 2,171,158, 76,186, 30, 89,233,103,119,
- 89, 85, 76,213,103, 36,181,116,124, 22,202, 32,108, 82,153,126, 26,217,247, 19,119,155, 3,111,238,182, 60,123,123,199,139,231,
-107,174,159, 95,115,113,117, 41,121,238, 75,121, 13,108,221,128,159, 73,215, 94, 66, 98, 76,101,136,198, 99, 76, 77,237, 59, 92,
-211,144,230,163, 96,185,187,142,225,176,103, 28, 7,134,174,103, 26, 6, 57, 59,114, 34,197,114,185,214, 18, 57,238,108, 98,242,
- 25, 27, 34,198,136, 54, 35, 19, 79,162,186,120,140,117,125,175, 78,105, 37,184,217, 42, 6,129,220,120, 39,107,157,169, 46,223,
-151, 72, 38,200,126,221, 10, 17, 15,101,202,145,146, 80, 42, 62, 1,218, 28,241,183,231,206, 47,165,126, 77,167,126, 14,161,255,
-144,101, 70,169,255,238,203,192, 95,103,111, 83,239,229,204,254,211,168,223,211, 25, 95,190, 59,236,208, 42, 51,111, 27,126,255,
- 95,250, 30,191,247,187, 47,112,206, 19, 19,244, 99,228,229,203,183, 84,182,162,219,190, 99,216,110,232,183, 27, 94,127,253, 5,
- 63,255,233,143,185, 93,175,153, 82,230,226,250, 25, 23, 23, 23, 92, 44,231,196,113,228, 31,253,183,255,136,140,224, 48,251,125,
- 71, 72,153, 69,172,201, 41,178, 88, 52, 24, 3,251,253,174, 40, 65,101,207,121, 68, 7,190,125,243,134,203,231,215,165,219,206,
-143,180, 28, 45, 5,208, 89,205,106,185, 18, 12,167, 54,124,244,226, 99, 94,191,249,150,183,111,122,118, 23, 43, 52,153, 89, 91,
- 11, 62,210, 40,154, 70,146,220, 66, 74, 28,142, 62,247,210,221, 74,168,137, 40, 54,187,195,129, 41,201, 97, 22, 99,102, 24, 38,
-250, 97, 96, 26, 37,143, 60, 37, 24,134,137,205,118, 47,130,154,251,215, 76, 67, 79, 10,162,130, 31,146,116,243,148,110, 60,161,
-138, 58, 23,180,118, 37,212, 68, 14, 55,123,204, 32,214, 90,188,197, 81, 20,159, 71, 0,138, 53, 70,148,162,133,165, 92, 87, 30,
-239,228,166, 42,219,136, 72, 14, 2,213,224, 56,198, 66, 46, 64,143,182, 15,117, 70, 70, 59, 39, 10,230,199,164,163,152, 72,227,
-200,212, 15,132,253,150,177, 63, 72,151,162, 20,190,174, 32, 54,184,208,160,189, 71, 89, 43, 98,164,227,235, 81,224, 57, 57, 63,
- 29,191,159,156, 33,229, 96, 82, 60,194, 54,114, 41,174,199,220,246,148, 74, 97,207,242,251, 40,173,158,112, 17, 85, 74,103, 58,
- 16, 78,152,201, 84,254, 28,125,142, 92, 56, 27,105,230,156, 37,205,234, 56,174, 63,137, 19,197,133,128,173, 49,141, 19,111,111,
-150, 24,206, 35,195, 94,107, 43,100,193, 24,153,166,145, 62, 76,236,247, 19,235,187, 29,219,135, 7,186,190,195,232,204,210, 43,
-126,249,139, 47,164, 64, 40,249,186, 40,175,113, 28, 3, 68, 57,140, 67,146, 93,186, 82, 10,155,161,114, 86,166, 48, 36,140,210,
- 36, 36, 22, 51,146, 78, 17,188,187,105, 66, 27, 1, 67,117,157, 48, 26,156, 6,173, 44, 49, 36,156, 85, 76, 83, 96,214,182, 60,
-236, 14, 0,180,141,147,233,147,214,164, 40,223, 27,171, 53,181,213, 56, 35,163,208,121,235,233,246, 19,215,215, 13,181,183,220,
-175, 55, 76, 83, 34,132,140, 82,134,170,182,220,173,119, 12, 99,102,182,168,200,102, 98,182,172,185, 93,111,153,207, 43,246,135,
-129,229,213,130,205,161, 35, 25,141,118,138,229,245, 37, 57, 37,170,186,129,172,104,155,150,105,156, 80, 10, 22,139, 57, 33, 69,
-134, 48,113,245,236, 25,245, 76,224, 71,109,219,210,180, 21,203,197,226, 84,196,235,153,116,229, 85, 35,107, 38, 74,218,151, 50,
-250,236, 18, 39, 36, 50,173,146,140,219, 83, 58, 35,105,150,145,143, 22,241,151, 73,138,197,106,206,250,254,158,197,114,206,230,
-254,158,202,214, 76, 72,224,142,245, 21,169, 63, 96,140, 97, 10, 1, 82,230, 48,245, 92, 92,172,164,139,223,237,169,235,138,110,
-183,198, 25,199,246,238, 13, 87, 55,207,136, 49, 80, 27,197,237,195, 29,139, 90, 94,175,205,118,195,220, 26,234,122, 46,211,207,
-190,163,106,196,134,151, 67, 32,100, 89, 29,166,227, 95, 51, 61,238,206,243,185,112, 54, 62, 82,214, 78,239,121,117, 54,229, 58,
- 35, 50, 74,180, 87,241,182,199,199,197,237, 56, 37, 14, 67,199,174, 15,108, 30,182, 60,220,174,185,126,115,199,245,243, 11,174,
-159, 93,113,117,189,100,190,156, 81, 47,230,232,118, 41,185, 14,174, 6,227, 64, 21,122,164,113, 88, 7,218, 89,178,247,164,202,
- 97,107,143,107, 61, 97, 24,152,186,142,225,112,224,176,219,211,231,158, 41, 8, 43, 33, 29,183,119, 39,157,131, 64,177,142, 11,
-184,152, 17, 39, 68,204,223, 9,122,209, 37,127,222, 27,185, 0,219, 97, 44,128, 55, 33,184, 86, 85,133,170, 44, 56,141,177, 6,
-167, 13,199,204,107,165,244, 89, 23,243,235, 53,107,199,127,236, 95,214,117,255,182,157,249,135,192, 51, 31,112,177,125,231,150,
-198,135, 96,149,234, 47,211,224,255, 38, 97,158,140, 34, 41,129, 14, 49, 6,134,254, 64,156,122, 22,115,139,247, 29, 23, 43, 17,
-163, 28, 14, 19,251,135,158,208, 29, 88,213, 35,239,194,158, 47,190,252, 25, 63,251,139, 31,179,217,238,200, 25,174, 86,151,252,
-224,123, 63,164,157,181,100, 18,191,252,226,151,124,243,242, 37,222, 85,160,193,186, 66, 25,154, 34,186,239, 49, 6, 30, 44, 92,
- 94, 92, 17,179, 41, 41, 79, 66, 90,234,246, 7,116,201, 62,206,101,100,120, 60,192,143,135,115,140,145,217,108, 38, 86, 52,231,
-137, 49,112,113,113,201,171,238, 37,155,237, 86, 18,139,154,150,126, 12, 24,173,136,113,143, 49,134,113,156, 4,224,146, 3, 41,
-245, 52, 77,141,214,154,105, 28,121,184, 23, 27, 95,204,226, 33, 13, 33, 49, 78,129,253,161, 99, 24, 39, 14,221,192, 16, 18, 40,
-195,161, 27,136,221,134, 54,236,176, 58, 75, 94,184,134, 6,161,187,229,199, 59,225,137, 88, 38,160, 34,203, 49,198, 87,159, 96,
- 46,138, 16, 51, 99,152,100,196,155,146,228,254, 26,137,104,205,113, 34, 76, 61,227,208,209,119,123,252, 97, 43,204,231,156, 4,
- 56, 17,197,134,162,203,120,242, 8, 99,200,165,128,159,139,136, 52,160,146,122, 4,171,100, 81, 54,135, 97,100, 58,236, 25,183,
-247, 28,118,130,239,132,132,175,106,102,243, 37,205,124,129,169,103, 18,167,122, 18,181,148, 81,215,233,125,149, 31,121,205,249,
-177, 72, 75,161, 13, 20,179, 44,160, 11, 14, 50,159,252,167,191,126, 93, 37,113,138, 71, 91,224, 41,202,241,220,229,159, 31,183,
-245, 39,139,233,241,247, 76,246,113,196, 87,238, 55,218, 40,180, 3, 93, 27,156, 82, 39,210,159, 61, 94,140,202,106, 38,147, 75,
- 81,159,168,198, 1,215,174,176,205, 10,223, 62,176,125,184, 99, 26,247,164,212,179,217, 30,176,214,131,149, 92,122,109,100,236,
-157,198,136,205, 18,188,147,140,248,197, 53, 26,173, 50,104,241,225,122,111, 4,228,100, 45,253, 56,224,154, 26,107,101,164, 62,
- 14, 3,179,118,198,172,109,121,251,213, 75,170,218, 17, 38, 17,200,237,118, 3,243, 69, 37,218, 16,173,137, 33,210, 54, 2,248,
-216,238, 70, 42,103, 48, 74,209,239,122,218,218, 81, 25,217,227, 26, 5,181,151, 84,177,231,207, 47,216,108,118, 56,239,120, 88,
- 63,176, 59,100,174,158,205,232, 67, 96,187, 15,216, 90,131,203,152,218,176, 27, 59,146,201, 76, 42,209, 94,180,116, 97, 4,107,
-112,206,209,206, 27,146, 18, 2, 91,156, 36, 67, 43,133,196,114,177,196, 56,207,238,208, 49, 95, 46,248,222,199, 63,148,245,155,
-115, 52,179, 25,214, 59,116,153,162,205, 22, 11, 50, 10, 91,215,204,151, 75,140,117, 50,129, 50, 22,101,205,227,228,231, 56,122,
- 54, 90,244, 70, 89, 46,253,218,148, 32, 5, 37,187, 87,140, 88,184,114,206,180,203, 22,235, 52,245,106,129,210, 74,162, 90,117,
-203, 56, 5,170,166, 69, 31,182, 69,168,154, 36,158, 86,101, 14,125,135,243,158, 48,142,144, 96,234, 58,148,151,148,178,110,183,
-149,116,194, 28,177, 57, 10, 51, 62, 7,186,253, 30, 87, 87,212, 85, 43,145,199, 57, 48, 77, 35,174,170, 24,246, 19, 67, 10,140,
- 83, 32, 34, 10,239, 84,186,245, 92, 86, 67, 49,199, 15,164,153,229, 39, 92, 8,117, 86,188,148,100,240,148,247,182,172, 30, 82,
- 9,108,138,136,179,101,236, 35, 83, 63,210,117, 35,247,155, 61,183, 15, 15, 92,223,222,243,236,197, 37,215,151, 43, 46,174, 47,
-168, 47,246,180,243, 57, 85, 35, 98, 91,172, 71, 57, 95, 4,162, 50,226, 78,133,105,161,236, 81,125, 46,161, 58,214,251,146,208,
-184, 3,221, 17,247, 3, 99, 31,152,198, 73, 58,242, 41, 48,133,200, 20, 99, 17, 1, 23, 63,190,178,100,149, 31,191, 23,241, 40,
-226,145,245, 84, 74,162,153, 48,102, 56, 9,233,156,235,112,206,130, 45,177,205, 89, 65, 45,231,141, 49, 21, 74,167,147,242,253,
-215,113, 95,206,249, 50,246, 67,133,250, 67, 51,251,191, 74,145,255,205,160, 25,190,211,245,124, 32,146,229,113, 20,255, 87,236,
-212,211, 73, 80, 39,185,218, 49, 8, 48, 33, 77, 3, 99,127,192, 16, 49,106, 18,181,224,184, 37, 29,238,112, 83, 15,221, 45,235,
-111,127,204,183,191,252, 51,118,219, 3,218, 26, 62,121,246,130,223,249,225,239, 49,159,205,113,206,114,183, 94,243, 95,253,215,
-127, 68,211, 52, 12,211,196,172,109,105,170,138, 48,101,124,213,162, 24,185,184,184, 96, 49,175,112, 78,227,148,225,118,191,197,
-251,134, 89,219, 18, 99,100,187,217,178, 27,247,132,130,190, 60, 65,151, 16,118,240,124, 54, 67,105,205, 20, 2,187,253,142,218,
- 90, 42,239,249,244,211, 79,185,187,187, 21,107,206,225,128,117,174,228, 47,123,148, 82,120,175,202, 5, 34, 82, 85, 53,117,213,
-224,172,147,131,161,128, 43, 84,204, 76, 83, 44,187,229, 72,206, 81, 44,106,200,232, 71, 62, 55,147, 85,162, 86,129,224, 53, 6,
- 47,122,245,156,138, 86,193,150,245, 70, 81, 47, 40, 78,126, 76, 93, 82,251, 78,188,255, 66, 99, 50, 58, 51,169,130, 70,204, 98,
-109, 50, 64,156, 70,250,253,142,110,183,229, 80, 73,172,161,202,160,194, 68, 26,123,180,247,143, 99,248,163,234, 83, 61,218,155,
-228,166,124,236,226,143,209, 47,103,158,250, 16, 24,251,129,126,183,163, 91,223,177,223,175, 57,236,183,196, 48,225,170,138,110,
-190,101, 54, 95,137, 46,194,121,121,200,142,163,243, 36, 2, 30,217,241, 61,122,220, 31,227, 22,203,231, 29, 99, 22,181,136,206,
-148,113,104,237,138, 6, 64, 14,237, 99,209, 62,234, 29, 84,217,221, 39,108, 89, 29, 28,197,113,250,164,228, 63, 42,243,181, 42,
-112,137, 99,168, 67, 9,110, 48,216,211,207,133, 64,117,182,242, 0,217, 9, 31,255,191,126, 58,253, 18,222, 64,194,199, 76, 24,
- 39,124, 59,167, 94, 92, 80, 47, 55,204, 46,174,233,247, 15, 60,188,252,130,106,190, 96,202,137,152, 51,149, 53,196,156, 80, 33,
-163,163, 68,237,142, 25,130,214, 12, 57, 82, 23, 22,124, 34,147,140,194,215,178,115,174,173, 99, 72, 9,235, 61,179,217,140,219,
-119,239,138, 47,187,102,179, 61, 72,246, 64,140,184,178,106,153, 98,194, 88, 77,234, 37, 12,164,118, 22,167, 19,222, 56, 82,234,
- 69, 69, 63, 4,172, 86, 24, 21,241, 70, 46,206,179,214,178,221,141, 44, 87, 45, 74,105,198, 24,100,181, 48,129,171, 12,174,129,
-111,223,236, 81, 30,148,201, 84, 11, 75,202,137, 97, 26,169,231, 53,166, 18,223,183,169,229,194, 63,155,175, 80, 58,179, 90, 45,
-217,111,118, 24,109,112,206, 83, 85, 86, 70,244, 90,243,189, 31,254,128,229,229, 5,237,124,142,169, 60, 85,211,144,148,116, 90,
-199,100, 75,101, 45,139,229, 10, 87, 85,242, 12, 42,141,241, 94, 94,167,227,235, 76, 9,143, 58, 53, 70, 25, 76,146, 34,103,117,
- 9, 25,145,245, 80,214,229,125, 98, 21,179,213,156,186,245,152, 73, 51,155,205, 24,198,128,169,106,124, 61, 81,213, 53,117,221,
- 8,190,183,116,193,198, 26,246,221,158,213,108, 94,116, 42,242,254, 20,207,180,144,239, 18, 25,111, 29,179,218, 51,245, 29,214,
-104,166,126,100, 50,242,121, 10, 73, 34,115,222, 97,130,136,217,250, 50,122, 30,163,116,235, 9,117,182, 22,146,201,105, 38, 63,
-153,120,157, 46, 49,200, 26, 69, 25,125,138, 48, 62,229,146,171, 68,210, 71,129,104, 46, 23,148,210, 8,149,174,121, 76, 19,251,
- 49,176, 62,116,220,173,119,188,187,219,240,252,230,146,103,207,246, 92, 93,207,185,184, 90, 49, 95, 46,168,102, 45,182,105, 49,
-117,131,242, 21,232, 90,158, 13,201,147, 46,150, 65,193,199,106,235, 5,212,229,157, 16, 44,171, 3,218,108, 9,113,195,225, 48,
- 49, 76, 19,195, 48,150, 92,247,137,113, 12,146,246,150,213,169,225, 57,159, 36, 30, 57, 29,199, 99, 68,165,200, 88, 70,245,126,
-176, 28,186, 30,107,141,136,103, 99, 34,141,145, 24, 34,174, 10,120, 31,138,112,206, 60,230,170,124,168,198,170, 71,245,172,253,
-181,163,247,239,252,248, 79,207, 99,255,110,199,253,222,239,153, 63,200,166,121, 26,165,250, 87,250,115,143,249,223,138, 20,228,
-112,158,207,103,252,236,167,191,228, 7,223,255, 30, 38, 91,194,112, 96,115,127,207,230,221, 29,111, 95,222,242,245, 95,252, 5,
-253,253, 23, 92,175, 50,217,205,200,126,198, 71,159,124,130,177, 17,235, 34,219,237, 3,255,229,223,255, 7, 56,235, 88, 88, 79,
-206, 9,103, 52, 70, 3,206, 72, 81,207,134,135,135, 7, 46, 47, 62, 33,198,145,113,236, 24,134, 3,206, 85, 76, 33,208, 52, 70,
-196,105,227, 88,132,108, 79,181, 11, 70,105,218,166,197,121,207,187,183,111,217,172,215, 92, 45,151, 92,124,250, 41,135,195, 1,
- 95,213, 60,127,246,156,174,219, 19, 82,194, 58, 79, 34,211, 31, 14, 92,172,174,216,237,247,228,156,105,218,153, 36, 45, 21,126,
-127,221, 52,244,195,116, 42, 72, 49, 4,134,113, 96, 24,122,134, 97, 60, 66,199,176,198, 48,169, 32,156,105, 21, 10,228,192, 96,
-136, 56,140,236,166,140, 59, 33, 98,143, 88,225, 99, 54,128,120,145, 77, 33, 49,165,242, 53,106, 33, 76,101, 9, 71, 8, 81, 14,
- 25,171,181, 88,127,186,142,205,253, 61, 90,101,161, 61,245, 61,227,108,142,173, 91,185, 45, 91,161, 39, 1,232, 2,182,200,199,
-253,125,201, 59,214, 74,147,244,145, 17, 47,212, 58,178, 40,255,227, 56, 49,116, 61,113,136,152,168,113, 8, 24, 67,197, 76, 26,
- 34,131,146,221,153, 49,229,101, 72, 65,108,129,211,200, 52,141, 66, 67,203,143,190,246, 35, 58,249, 4,148, 72,114,136, 25,235,
-177,190,193,213, 51,124, 51,195,249, 26,223,120,148,175, 30, 47,168, 37,154, 88,149, 32, 28,175,207,118,249,103, 5,253, 24, 9,
-167,207,248,206, 89,113,134,139,148,177,255,169, 32,156, 68, 86, 71,187,121,146,235, 77,161,145,157,162,140,243,177,235, 79,146,
- 47,159, 21, 97, 18,112, 81,213, 52, 84, 77,203, 98,117,197,176, 95,211,239, 55, 40,231,233,198,137,218, 72,240, 79,119,232,145,
-235,132, 92, 66,181, 86,140, 49,158,173, 97, 20, 83, 12,132, 50, 53, 48, 73,172, 54,117, 93, 99,171,186, 64, 59,100, 20,217,212,
- 13, 47, 95,127, 69,221,214,132, 40,192,144, 97,154,112, 78, 51, 77,147,140,141,199, 17, 3,180,117,203, 56, 76, 24, 37, 66,178,
- 48, 5, 86,173,197,164, 32, 5,171,220,241,134, 41,242,252,197, 13,111,111,223,162,180,225,176,239, 73,104, 46,111, 4,167,106,
- 28,162, 24,111, 18,217,142,132, 96,168, 47,230,120,231,128,140,247,226, 23,174,154, 86, 80,196, 26,246,219, 61,139,197, 66, 16,
-156, 65,160, 53,151,179,150,118,185,164, 93,173,184,184,186,196, 21, 5,123,214,134,166,174, 69,255,129,162, 93, 44,104,102,237,
- 35, 76, 89,105, 25, 89,159,194, 56,244,233, 53, 69, 41,129, 3, 21, 13, 70, 46, 17,196, 39,177,153,147, 46, 61,171, 82, 0,147,
-198,183, 21,179, 69,139, 11,150,166,109,200,106, 96,202, 89,198,253,109, 75,181,175,233,199, 94, 58,251, 36,235,143, 97, 28, 36,
-188, 36,101,140,243, 36, 14, 5,241,155,137,125,135,177,150,202, 90,156,150,156, 8, 63,159,163,196,155, 74,223,119,242, 99,215,
- 49, 12, 3,227, 20, 25,166,137,160, 52, 83, 12,162,159, 73,114,249,212,249,209,186,246, 29,227,231,241, 61,201, 9,101,142, 57,
-106, 85,143,186, 22, 45,193, 77, 58, 7,130,202, 16,229, 50,127, 12, 67, 73,249, 88,212,193,230, 76,223, 71,134,112, 96,187, 31,
-121, 88,247,220,190,219,240,209,213,156,235,103, 23, 92, 95, 95,176,184, 90,210,172,150,248,249, 28, 63,155, 97,188, 18,142,124,
-137, 87, 70, 25,193,207,218, 4,118, 0,103,168,173,196, 49, 87,174,146,248, 87, 93,236,193, 1,246, 12,210,177, 15, 35,195, 24,
- 24, 67, 58, 57,144,142,123,110,253,132, 3, 33, 95,183, 49,226,252, 73,112,242,173, 79,163,184,164,140, 22,209,109, 24, 35, 99,
- 63, 82, 53, 53, 85, 35, 24,108,227, 29, 88,119, 34,112,254,166, 70,219,190,239,249,126, 42, 58,251,176, 7,247,145,141,157, 63,
-188, 96, 87,156, 14, 27,242,119,119,232,167, 59,219,185, 67,173,136,126, 84, 81, 63,234,227, 45, 78,149, 65,239,169, 88,139, 61,
-226,137,197,238,252, 55,202, 74,252, 32, 90,161,173, 67, 37, 69,232, 3, 49, 79,220,190,123,205,127,250, 95,252, 23,188,125,251,
- 47, 97,115,102, 58,244, 28, 54, 59,190,250,226, 27,110,223,221,130,134, 31,254,224,115,254,229,213, 51,116,179, 98, 72,150,251,
- 77,207,221,118,207, 31,253,195, 63, 65,161,248,104,117,129,241,142, 24, 38,246, 93, 87,176,151, 51, 30, 30,238,240,181,227,122,
-182, 96,223, 5, 22,141,167,219,239, 80, 73,211, 79,154,251, 77,143,173, 86,216,170, 70,119,182,236, 99, 31,133, 33,167,215,160,
-124,135,174,175,175, 25,199,145,166,109, 88,111, 54,229,128,147, 76,233, 69,187,160,239,123,134, 49,240,118,183, 69,145, 73,106,
- 71, 91,213, 34, 0, 60,116,220, 3, 55, 23, 75, 46, 46, 46, 81,198, 48,132, 3,125, 63, 50, 13, 19,251,205,158,109,183,103,215,
-239, 25,199,137,126, 72, 68, 28, 33,102, 12,153,103,115,141, 63,162, 30,181, 65, 41,139,201,148, 61,185, 45,152,209,116, 38, 82,
-204,103, 40,214,116,210, 18,228,116,156, 8,164, 71,143,120, 25, 7,198,148,153, 66, 70,143, 8,205,143,200, 52, 14, 18,202, 49,
-155, 81, 85, 13,198, 10,110,241, 56, 71,214,194,143, 58,185, 37, 36,112,200, 98,172, 71, 57,125, 74,249, 75,177, 8,244, 98,102,
- 12, 73, 46, 46, 99, 98, 10,145, 49,106, 66,178, 48,100, 14,227, 30,181, 57,148,149, 69, 40, 22,149,145, 24, 38,194,208, 51, 77,
- 35,161, 16,217,148,214, 82,184,157,195,215, 13,222,215, 88,235,208,166, 66, 59,143,211, 22,173, 43,178,171, 49,245,140,170,157,
- 11, 72,164,246,103,129, 72,103,142,142, 82, 4, 31, 73,119,103,126,123, 85,196,134,250, 28, 93,171,206, 98, 23, 31,157, 12,223,
- 9,113,201,197,154,247,157,199, 54,191, 55, 9,147,139,137,177,150,228, 16,229,109,101,112,125,131, 54,137,235,203, 21,239, 94,
-191, 36,197, 36,227,240, 33, 34,218,202,132, 50,114,137, 74, 26, 82,200, 56, 5,214, 36,161,190, 77, 34, 94,115, 90,131, 19,161,
- 25, 26,150,173, 8, 58,135, 41,176, 90,174,216,236,118, 56,171, 24,251, 61,171, 69, 11, 41, 49, 14, 9, 99, 5, 61,171,181, 38,
- 78,129,229,108,134, 51,154,135,125, 71, 93,121,166, 41, 81,251, 50, 33, 82, 90,224, 49,149, 38,231,196,103,159, 95, 48,165, 1,
-109,225, 97,115,160, 27, 21,151,215, 23,236,199, 3, 67,140,248,185, 67, 57, 77, 61,243, 12, 83,160,157,173,240, 77, 69,138, 1,
-107, 13, 41, 76, 66, 98,116,142,172, 50,227, 20,184,188,190, 34, 3, 85, 85, 83, 85, 53,202,104,218,102,198,197,213, 21,237,114,
- 33, 99, 91,107,201, 90,163,173, 16,203, 22,139, 5,181,175,201,136, 67,196,121, 47,212, 67,165, 72, 73, 52, 14, 42, 27,217,167,
- 31, 29, 23, 74,203,120, 37,107,114, 18,129,150, 46,171,165, 35, 80,200,228, 36,197, 93,203,175, 85,214, 48, 95,173, 8,219,158,
-171,155, 21,211,235,183,212, 81, 49,141,138,122,190, 64, 63,220,163, 67,196,104,136,113, 34, 17, 73, 68,148, 81,244, 7,193,218,
-122, 95,139,226, 59,139, 88,118,134, 37,103, 77,229, 61,157,222,201, 68,134,204,118, 63, 96,172,167,114, 30, 82, 34,133, 76,194,
- 16,181,101,204,137,196, 35, 8,229,152, 13,206, 19,123,245,177,190, 28, 39, 81, 39, 4, 84, 17,206, 30,155,130,199,180, 71, 82,
- 38,100,205,168, 34, 86, 37, 70, 18,228,120, 42, 66, 18, 22, 35,147,174, 64, 22,173,208, 20,232,167, 29,219, 93,207,250, 97,205,
-229,221,134,155,103, 91,174,111, 86, 92, 92, 45,139, 32,119, 65,189,236,113, 77,131,170, 42, 84, 85, 9,142, 87, 91, 20,146,218,
-166,140, 33,153, 10,109, 42,162,237,197, 86,235, 53,182, 82, 24,175,209, 42, 16,167,137, 97, 63,209,199,200,148, 50,125, 12,101,
- 2, 81,206, 43, 45, 66,204,227, 74, 82,104,112, 5,204,100, 68, 16,125,252,190,196, 50, 69,213, 58, 20, 59, 95,192,245, 61,126,
-239,240,181, 36,165,154, 83, 4,186, 32,114,209,246, 76, 75, 84, 84, 7,239,143,223,127,243,136, 61, 63,201, 62,127,162, 14,250,
- 13,200, 88,222, 75,131,122, 28,189,168,247,236, 71,249, 24, 91,123,178,243, 60, 46, 12,211,249,223,130,247, 51, 37, 5, 30, 82,
- 66,105, 78, 94,199,140, 49,142, 41,137,224,234,225,238, 22,215, 40,246, 63,251,130, 47,127,254, 21, 94,107,102,149,167,114,142,
-105,234,249,248,251,159,210,247,151,252,206, 15,127,196,205, 71, 31,179,235, 3,127,242,147, 47,249,230,213,175,248,111,254,244,
- 39,164,168,184, 92, 45,200,198,138, 47,157,204,172,170, 33,101,246,135,142,136,166,106,150, 52,179, 21,149,179, 92, 94, 92, 48,
-142,153,168, 3, 93,114, 28,214,123, 62,251,221, 21,127,254,139, 95,208, 13, 29,104, 87,114,230,243, 73,224, 37, 55, 57,195,126,
-187,163,109, 91,110,174,175,113, 86, 19,134,145,171,203, 75,188,177,164, 24, 89,239,118, 52,179,150,119,247,107,190,126,249, 82,
- 50,147,187, 81,196,103, 70, 60,189, 99,129, 37,212,117,131, 82,138,170,169,241,117,203, 55, 95,126,205,161,235,232,135,129,190,
-239, 9, 99, 32, 4,141,242, 53,109,227, 89,182,150, 54,239,177, 89, 22, 2,199,194,115,178,219,144, 30, 69,111,167, 14, 86,161,
- 84,122, 50, 37,137, 49, 49, 77, 81,108,111, 65,120,242, 33,196,194, 28, 59,138, 77, 18,132, 72, 30, 36,202,177, 31, 38,170,250,
- 64,181,217,157, 18, 2,181, 54, 98,147, 43,205,172, 68,126, 58, 73,164,115,146,107,108,156,112,223,115, 73, 65, 18, 12,165, 22,
- 1, 79, 70, 86, 14, 73,186,251,132, 33, 25, 91,222,111, 73, 18,238, 66, 18,168,198, 52, 49, 77, 3,227,208, 51,246, 61, 97, 26,
- 5,109,153,133, 93,110, 93,198, 85,138, 88, 80,148, 24,135,181, 53,174,110,241, 77,131,159, 45,168,102,115,252,124,142,107,103,
-216,186,194, 86, 78,104, 91,165, 59,123,100,206,171,211,101,229,187, 89, 9,199, 60,231,223,198,108,250,248,223,213,111,157,165,
-240, 20,247,172,109,233,244,141, 35,233,136,217,193,230,238, 29,235,183,111, 88,181,154,202, 43, 54,219, 32,193, 23, 57, 32,185,
- 86, 89,198,141, 41, 83, 89,168,140, 34,134, 64,142, 48,107,164, 51,116,149,197, 84,114,196,212,222,241,250,245,107, 89, 23,105,
-195, 97,187,151,244,196, 49, 96, 84, 36,198, 64, 12,137,102, 86,147, 74, 68,159, 34,211,120, 75,136, 17,107, 69,132, 57,141, 35,
-243,202, 18,250,137,166, 49,120,109,176, 86, 46,113,207,158,173,120,243,238, 13,219,125,207, 56,101,180,174, 1,195,219,183, 29,
- 87, 47, 42,146,137,248,198,147,181,163,153,205,105,155, 57,253, 56, 98,140,116,100,166,110, 37,109,203,200, 52,102,113,121, 37,
-120, 86,239,176, 5,176,210, 52,173,160,154,173, 37,102,240,133,239,237,189,199,215,197,123,110, 45, 9,129,159, 24, 35,232,207,
- 92, 86, 55,170,112, 26, 82, 86,160, 37, 96, 73, 29, 93, 30, 50,202, 2,101, 48,254, 72,252, 75,232,156,138,231, 59, 31,125,154,
-242, 60, 24, 67, 61,159, 17,209, 44, 46, 22,172, 55,107,212,152, 9,221,128,241, 21,205,124,197, 20, 18,134,196,152, 70,114,204,
- 39,146,224, 20, 3,187,221,158,203,213,101,209,248,104,172,241,140, 65,166, 44,214, 88, 97,186, 3,201, 56,121,248,178,156,206,
-182, 76,136,178,210,100,163, 37,191, 92,235,147, 64,244,253,243,255, 88, 42,206, 27, 71,117,102,177, 61, 50,204,181, 86, 56, 99,
- 48,165,240,101, 50, 54, 41,180, 14, 76, 83, 20,138,212,227, 21,129,233, 92,184,202,145,120,169, 68,172, 22, 34,195, 52,176,233,
- 71, 30,246, 29,183,235, 13,207, 30, 86, 60,187,190,224,234,234,192,178, 27,104, 23,115,220,188,193, 52,179,178,115,175,201,202,
-150,137,154, 67,169, 18, 44, 85,206, 24, 83, 25, 76,101,241,109, 69, 93, 75,247,158,163, 92,220,186,253, 72, 74, 19,100, 45, 83,
- 44, 99, 48, 90, 97,205,113,146, 41,144, 31,171, 13, 86,139,125,216,187, 18, 12,227,164,240,103, 10, 62, 54, 66, 26,132, 7, 50,
- 14, 61,182,151,215,194,121, 65,126, 59, 95,225, 42,217,249,203,104,222,114, 30,252, 97,127,123, 63,249,121, 81,207, 39,207,207,
-249,158,238,183, 87,172, 75,154, 90, 42,108,142, 84, 96, 27, 89, 29,243,214, 31,143,174,124,102, 25,206, 69, 72,161,143, 23,137,
-247, 83,195,212,113,187, 42, 59, 78,111, 29,218,195, 98, 57,231,221, 14,222,188,188,163,106, 87,116,251, 29,155,251, 59,172,201,
-124,250,233, 11, 62,253,252, 99,254,218, 31,252, 30,207, 47,111,120,254,252, 35,190,248,250, 27,190,252,250, 27,254,248, 31,253,
- 19,254,232, 31,255, 5,206,205,184,122,126,205,205,213, 5,222, 42, 82,204,204,154, 57, 77, 85, 67,204,194,233,245, 53, 90,103,
-198,110,135,110, 22,236, 15,123, 46, 63,250,132,215, 95,189,225,143,255,201,207,153, 45, 86, 44,191,254,150,207, 63,255,132,255,
-199,255,231,255,205,126, 28, 74,198,121, 1, 77, 40, 17,186, 12, 67,207,253,254, 64,237, 60, 87,151,151,204,234, 25,139,186,197,
-150,110,111, 24, 70,134, 24,248,230,203, 47, 24,167,192,122,187,165, 31, 60, 15,235,123, 62,125,241, 17,151,171,229, 73,164,145,
-147,168,237, 93,211,144, 80,204,151, 11,126,240,187, 63,226,213, 55, 47, 9,111,223, 97,171,186,236,201, 29, 19,134,105,236,201,
-169, 39,196,158, 41, 74, 24, 3, 49, 22, 49,207,211,139,213, 49, 3, 24,192, 20, 69,250,113, 95,156,144,221, 80,136, 71,234,146,
- 20,246, 35,113, 78,149, 46, 53, 36,152, 98, 96, 8,153,205,126, 40,153,236, 50,130,211,199,215,250, 24, 45,104,205, 9,173,217,
-214, 13,243,118, 70,211, 54, 84, 77, 83,148,211,134, 99,107,155,179, 18,239,188,156,124,114,171, 77, 71,251,144,124, 94, 78, 17,
- 98, 36,197, 64, 86, 26,131, 38,161,203,126, 47,145, 77, 20, 75, 92, 42, 16,141, 36,175,123,158, 18,202, 70,180, 75, 18, 22,133,
- 70, 59,135,173, 27,124,219, 82,181, 45,190,110,177, 85,141,245, 14,231,205, 73, 64,120,234,176, 79,169, 76,234, 47, 41,188,255,
-188,249,180,143,107, 5,101,132, 45,174, 66,192, 58,248,249, 79,255, 28,198,145,103, 23, 13,251,221, 1,180, 92,167, 77, 86,167,
-110, 42, 20, 54,134,181,130,213,204, 33,137, 77,236,116, 0, 57, 98, 76, 52, 77, 75,215, 13,140, 83, 96,117,177, 36,198,162, 89,
- 32,227,156, 35,165, 36,152,216,110,143,209,150, 48, 13,104,148,232, 75,128,113, 28,168,139, 71, 93,229, 68,206, 26,231, 4, 69,
-106, 43, 67,206,145,155,235, 5, 67, 63, 50, 14,145, 20, 50,235, 53,124,244,201,156, 47,126,249,142,122,102, 57, 28, 38,108,171,
- 24,119, 7,230,171, 37, 77,229, 25,131,132,158, 92, 92, 92,144, 82,164,242, 94,236,120, 33, 80,249,178, 98,243, 14, 99, 28,117,
- 41,216,206, 57,148,210,226, 93, 47,185, 3,199,124,133,170,174,203,191,151, 5,133,150,213, 81, 58,166, 23,157,177, 55,142, 78,
-136,227, 78,247,216,218, 37,162, 68, 3,235,199,177,117,202,229, 70, 43, 54,134,211, 5, 65,103,104,218, 25,221, 16,152, 45,151,
-180,243, 57,170,151, 2,120,216,237,229,217,232, 58,226, 52, 8,204,103, 26,113, 78,188,219, 26, 67,136, 9,231,235,178,166,177,
- 24,227,136,217, 8,191, 95,137,144, 51,134,204,106,113, 73,183, 89, 51, 37, 48, 49,209,214,254,177, 41,211,250, 20, 26,244,235,
- 38,190,231,221,250,241,178,250,168,233,207,104, 35,201,104,198,104,121, 47, 89, 93,180, 57, 18,149,173, 77, 89, 81,105,117, 2,
-139,101, 2, 58,138, 32,237,172, 28, 65, 22,161,102,138,114, 63,234, 67,164,155, 2,251,174,103,183, 59,176, 94,239,121,182, 57,
-112,125,232,185,184, 88,178, 92, 45,152, 45, 70,114,219, 98,218, 17,124, 37, 99,120,229,100,205, 81,244, 49, 89, 75,103, 92,107,
-143,178, 53,198,206,176,190,198,121, 75, 53, 51, 84,111,225,118,157, 24,198, 12,148,117,164,149,203,161,181, 22,109,164,107,247,
- 90,227, 74, 28,113, 85, 57,156, 51,184, 18, 9,109, 77, 73, 72, 45,223,195,116, 20, 31, 78,145, 73, 79, 40, 59, 98,237,128,243,
- 61,149,247, 56,239,241,149,116,239, 56,115,154, 6,217,223,182,160,127,183, 83, 56,138,209,206,148,200,252,186,204,202,243,223,
-163,120,119,143,222,220,179,157, 75,254,144, 95, 78,229, 83,118,243, 81, 20,165,201,167, 17,255,249, 67,162,149, 18,251, 13,165,
-139, 50,150,102,233,113,233,192,243,213, 31,240,227, 31,255, 5, 95,252,236,151,180, 77, 37,209,128,206,114,183, 57, 80,109,122,
-214, 93, 70,177,231,239,253,131,255,152,175, 95,189,225,175,255,237,127,147,159,255,234, 91, 72,153,103,207,158,243,209,243,103,
- 16, 69, 84,166, 17,114,221, 56, 69,188,245, 52,237,156,136,194,234, 76,235, 20,179,198,151,212,181, 5,147,219,241,243,175,191,
-229,147, 79, 52,247,155, 29,207,167,204,183, 47, 95,151,125,218,163,127, 57,103, 24,198,129,251,117,192,105,203, 20, 38,241,194,
-214, 13, 6, 24,199,145,168, 53,223,188,122,137,114,134, 77,183,231,208,143, 44, 22, 75, 41, 80, 41,145,141, 38, 42, 24, 66, 96,
-225,101,159, 94, 57, 47, 95,171,214,108,183, 91,170,186, 97,117,125, 77,159,196,115, 58,141, 35, 33, 27, 98,144, 67,214,234, 72,
- 42,120, 90, 78, 42,239,163, 85, 90,124,163, 71, 91, 21,231, 22,150, 34,190,202,197,151, 46, 10,242, 2, 84, 43,220,227,148,206,
-112, 67, 42,158,198,192, 74,105, 33,162,157,198,117,143,183,121, 99,164, 51,175, 43, 25, 99, 55,181,193, 26, 87, 68, 75,141, 36,
- 91, 85, 30,172,125, 36,186,149, 78,125, 76,144,148, 38,102, 41,216,249,104, 67,201, 98,233,202, 41,144,226,132, 14, 19,152,137,
-172, 29, 89, 25,166,148, 81, 5, 88, 67, 86,104, 83,246,132,198,130,245,167,124,247, 92,196, 78,169,248,222, 93, 85,137,150,161,
-146, 28,108,235, 75,215, 97,212,147,247,255, 83,150,237,211, 9,250,191,248,128, 25,121, 14,117, 73, 54, 75,121,228,205,155,111,
-216,220,191,101, 53,179,168, 2, 31,194,136, 16, 83, 23,223, 67,206,130, 8, 54,186,164,178,105,195,148, 35,109,107,209, 26,234,
-202, 23, 59, 95,102,185, 88,242,197,175,190, 98,190, 88, 96,172,101,191,223, 10,175, 58, 38,230, 51, 79, 12, 29, 65,105,225, 29,
-164, 84, 86, 57,138,186,169,152,134, 94,162, 63,135,137, 56, 77,180,181, 37,199,136,247,162,201, 72, 10,156, 86, 60,191,185,225,
-205,187,215,196,168,216,238, 50, 55,207, 46,216, 29,166,211, 8, 56, 37,216,237, 35,186,206,164,237, 22,227, 28,179,197,138,249,
-108, 37, 66,192,170, 46,209,149,153,166, 17,108,108,211,204,228, 32, 46, 7,168,181, 30,173,181,116, 73, 70, 99,180, 48,190,125,
-121,221, 85,113,105,196,148,176,214,160, 74,140,103,228, 49,209, 48,147, 37,171,254,184,111, 61,254,247,148, 78,186,136,168,197,
-235,159,145,177,180, 62, 77, 98,202, 88, 27,133,210,101, 93,105, 52,198, 91,150, 23, 75,154, 89,131,113,226,162, 24,250, 1,109,
- 69,141,127,216, 39, 2, 82,228,156,213,210,232, 27,139,115, 53,253, 48,225, 92,197, 48, 70,230,243,101,201, 45, 87,120,111,113,
-190,166, 15,137,166, 94,114,216,236, 8, 41, 11,159, 2, 45,107,173, 41, 23,125, 0,167, 60,143,239, 22,116,197,147, 80,223,227,
-186,238,116, 14,156, 69,126, 27,117, 42,238,206, 22,247, 72, 44,123,118,173, 65, 77,197, 58, 38,162,180, 40,248, 83,146, 74,101,
-154,251, 24,189,157,148,240, 19,166, 8,105,200, 76, 97,160, 31, 34,219,253,196,110, 63,177,217,239,121,118,181,226,249,213, 5,
-113,181,160, 93,205,241,171, 57,106,214,160,171, 22,237,206,196,132, 50,202,194,104,137,125, 85,214, 11,177,206, 41,234,218,176,
- 88,213, 92, 94,206,121,253,250,142,187,251, 3,135, 94, 80,186,198,185,194,119,183, 39, 22,188,215, 74,194, 95, 42, 79,221, 84,
-212,149, 76, 29,101, 58, 36, 76,121, 82, 62,229,215,167,152,144,254, 35, 19, 99, 96, 28, 3,186, 31,232, 75,167, 95,215, 21,222,
-123,112,246, 4,173,177,223, 69, 96,158,117, 19,234,124,236,158,158,198,105,170,116, 26,131,156, 18, 51,142,197, 61,231, 39,133,
-252, 40,136,200, 80,108, 47,138,104, 10,240,191,252,114, 99, 52, 57,155,178,191,148,177, 94,176,146, 15,171,138,234,249,168, 6,
-214,103, 5,253,120, 46, 30,129, 39, 70, 37, 18, 22, 95, 45,105,170,138, 79, 62,186, 97,186,172, 88, 53,134,155,171, 37,127,247,
-239,254,103,220,222,221,163,181,101, 12,150, 55,247, 29,191,122,219,241,159,255, 87, 63,102,102, 52, 47, 62,190,230,111,253, 79,
-254, 13,126,242,211, 95,242,240,176, 97,214,180, 92, 45, 23,120, 45, 73, 76, 70,105,250,126, 36, 12,145,166,105, 48,141,101,152,
- 70, 22,139, 21,211,112, 16, 81,144,147,206,224,255,249, 31,253,199,252,206,223,252,183,249,215,254,181,191,205,127,245,247,254,
- 62,191,243,233,231,252,141,127,229, 15, 33,100, 76, 22,162, 89, 42, 55,241, 99,125,143, 49, 67, 73,240,121,249,230, 45,222, 88,
- 42,231, 8, 33,176,222,108, 88, 94, 92, 50,164,128,237,123, 98,215,211,245, 61,214, 24,230,109,195, 20, 2,253, 56, 50,107, 26,
- 9,109, 81,138,118, 46, 97, 46,125, 8,244,125,199,254,208,227, 92, 5, 40,140, 17,240, 74, 12,137,148, 3,228, 72, 24,247, 12,
-155,123,116,232, 78,150, 20, 9,111, 17,159,105,140,169, 20,239,116,218,137,105,253, 56,246,149,231, 44,159, 68, 19,234,124, 87,
-140, 18,177,157,210,101,212,116,116,131,229, 39,214,173,163, 69,204, 20,241, 80,204,226,179,150,113,175,116,223,170,116, 68,222,
-123, 81, 22,123, 71, 66,162, 24,115,210, 68, 25,253,200,222, 15, 69,196, 74,254,178,182,167, 72,197, 99, 81, 79, 49,226, 66,100,
- 28, 7,209, 59, 40, 77, 86,197,246, 18,166,211,197, 75, 44, 40, 14, 99, 93, 1,134,192, 52, 77,146, 24, 86,213,212,227, 36, 34,
-172,226,205, 55,101, 21,112,220, 37,158,180, 38,164, 15,203, 71,127,203,130,254, 62, 26,249, 47,115,166,124,104,138,246,212,169,
-146, 36,176, 39, 4, 14,155,123,246,155, 59, 94,125,251, 53, 23,171, 5,253,237, 22,239, 61,241, 48, 65, 78,130, 98,141,153,108,
- 32,134,128,245, 18, 91, 25, 67,128, 12,214,105,170,202,151,181, 5,120, 95,159,118,247,198, 74, 40, 70,136, 9,107, 28,135,126,
-196, 59, 77, 23, 68, 96, 7,210,213, 76,253, 68, 51,111,164, 3,204, 50,233, 81, 37,150,213,212, 86, 46,150, 73,196,141,198,105,
- 9, 91, 9, 3,195,152,233,250,196, 24, 29,207, 23, 51,190,252,241,183,204,151,150,160, 96,156, 18, 81,103, 24, 0, 19,121,119,
-119, 71, 72,153, 16, 34,243,249,130,144, 20,214, 86, 52, 85, 35,116, 47, 99,112, 70,203, 46,211,138,128, 78, 41,133,171, 60,206,
-122,172, 19, 17,167, 41, 93, 86,202, 2,136, 49,214,161,141, 40,153,209,134,120, 54,225, 60, 22, 50, 73, 21,147, 6, 89,198,116,
-185,100,110, 39,116, 73, 8,203,101,237,149,117,126,212, 31, 29, 9,138,229,121, 32, 79, 24, 35,153,240,104,205,114, 53,103,183,
-239, 81,122,193,208,247, 60,172, 31, 48,222,162, 6, 25,209,134,225, 64,202,142,113,156,112,174,102, 10, 17,107, 45, 99,202,120,
- 91,203,106, 42, 36,154,118,134,178,136, 16,119,236,113,190, 38, 99,137, 89, 19,147, 38,161, 8, 57,113, 24, 70,185,216,158, 39,
- 4, 62, 9,238, 82, 69, 84, 90, 46,197, 8,116, 42, 69,177, 84,230,156,158, 92,100, 85,209,146,156,156, 31, 90,227, 84, 70, 23,
-113,108, 76,154,152, 20, 46,105, 82, 82,114,126, 28,127,143, 19,163, 66,115, 50,134,150, 95, 55, 68,161,191,197, 24, 25,166,142,
-174,143,172,119, 27,182, 15, 59,246,119, 91,186,231, 23,172,246, 75,102,253,146,106, 53,199,207, 35,182,206, 66,166,115, 78, 60,
-238, 69, 52,172, 16,135, 79,109, 52,182,210, 84,141,167, 93,180, 92, 92, 92,114,115,125,205,235, 55,107,238,238, 55,108,247, 59,
-166, 16, 1, 45,239,159,178, 78,244,101,244,222,212,158, 89, 91, 75,226, 94,209,221, 24, 43,235,150, 24,196,249, 49, 13, 35,227,
- 16,152,198,145,169, 20,120,225, 69,100,162,134, 73, 43,134,174,147,201,144,145,162,110,140, 8, 89,127,253,216,252,204,151,203,
- 19,241,205, 35, 20,225, 28,231,122,174,246,123, 28, 55,126,216, 50,103, 98, 38,152, 72,138,194, 75, 15, 70, 17,140,194, 25, 57,
- 92,114,130,144,116, 65,143,230,167,163,171,247, 72,114,231,187, 72,173, 53,153,154,217,108,197,124,182,228,250,114,193,226, 69,
-131, 9, 3,159, 60, 91, 49,141, 59,126,252,227,159, 72,108,159,157,241, 15,255,241,207, 25,186,200,197,213, 51,190,247,217, 53,
- 23,151, 23,220,109,246,252,221,255,236,191,100,222, 84, 92, 46,151,248, 52, 96,146,198, 16, 25,135,129,202,213,146, 78, 22, 2,
- 83, 12,248,156,216,239,215,212,117,197,252, 98, 37,221,131,175,248,179, 63,251,199,116,120,254,230,191,254,111,242,159,254,255,
-254,191,252,249,159,253, 41,255,187,255,245,191,143,138, 96,148, 41, 33, 18,234, 4, 47, 80,101,164,149, 65, 44, 34,105,228,219,
- 87,175,184, 88,173,136,177,216, 70,194,196,221,250,129,113, 28, 49, 86,130, 6,130,209, 52,149,231,112,232,136, 33, 72,156,162,
-179,108,246,123,222,222,222,146,141,225,242,230, 25, 97,220,209,143, 35,118,233,169,155,134,221, 86,128, 52, 99,140, 37,223, 92,
-209,237,119, 28,214,107,244,217, 37,238, 20,133,124,150,176, 20,211, 25,230,247,113,186,248,104,227, 56,170, 61, 75,206,239,227,
-251, 68,118,122,185,172, 80,100, 13,119, 76,113, 43,175,117,105,102,163,202,152,242,123,135,148, 9, 83, 98, 42,159,163,148,140,
-155, 76, 9, 97,176, 85, 37, 15,122,185,213,234,178,219, 18, 7,181,193,106,143,113, 94,240,145,104, 66,152,164,168, 7, 75,140,
- 9, 29,166, 83,167,164,138,197,197, 90,203, 56,141,196, 56,149, 21,207, 99, 72, 3, 64,138,161, 92,118,228, 98,112,204,147,215,
- 74, 9,119,218, 40,162,126, 76, 54, 60,250,237, 69,235,251, 47,182, 37,255,117,235,177,156,147,136,150,138,253,115, 58,236,249,
-241,159,252, 9,222, 91,236,229,146,212,223,210,119,129, 48, 69,154, 99,215, 88, 82,161,142,151,116,163, 76, 65,166, 74,236,173,
- 49,146,178,134, 50, 92, 92, 8,170,181,242, 53, 9, 77, 55,244,116, 99, 96, 53,175,177, 90,113,216,247,180,141,227,205,250, 32,
-140,243, 8,222, 90,185, 60, 31, 58,234,198,209,239, 7,180, 50, 88, 45,171, 55,109,149,100, 95,123,131,107, 44,237,188,230,245,
-219, 59,172,175,120,251,245,129,143, 62,187,224,103,191,122,197,197, 71,158, 41, 70,250, 16, 81, 14,180, 21,175,246, 24, 19, 13,
-134,183,239,222,137,190,164, 63,176, 92, 46,153, 42,137, 53,246,197, 57,131, 50, 2,153,138, 25,107,149,236, 85,141,125, 20, 51,
-150, 92,107,153,226,232,242,255,165,144,107,109, 10,187, 63, 63,198, 4,228,140, 53, 6, 91,132,110, 41, 70, 65,132, 30, 19,184,
-120,108, 80,142,246, 92, 74, 7,127,196, 14,107, 10, 8, 72, 41,114, 12,164, 28,112,222, 50, 29, 14,204,151, 45, 57, 37,106,231,
-232,119, 45, 15,109,205,195, 93,135,179,101,156,159,164, 97, 72, 49, 98,181, 37,134, 72,200, 9,231, 13, 83,136,180,182, 98, 24,
- 14, 24,111, 73,121,164,170, 42, 76, 47, 20, 65,249,147, 13,169, 40,249,181, 22,193,222, 20,199, 39,146,205, 39, 57, 28,229,125,
-127,180, 90,230,130, 58, 62,143, 61, 20,171,215,177,185, 59,179,130,161,229, 25,215,242, 61,176,134,242,236, 37,140, 73,104, 45,
- 63,198, 36, 19,140, 99, 17,231, 60,150,225,220,222, 90, 4,186, 99, 84,244, 33,209, 13, 18,106,181,126,216,114,191,221,242,236,
- 97,197,205,238,154,229, 85,207,124, 53,209, 44, 6,170,249, 12,221,212, 40, 87,161,109,133,210, 14,237, 12,201,120,146, 81, 37,
-210,181,197, 86, 51,170, 89,207,108,117,193,234,102,199,250,126,195,221,221, 61, 15,235, 45,251, 67, 79, 78,178, 30, 84, 74,236,
-188, 78,131,209,242, 30,179,206,200,170,170,146,117,142, 42, 94,246,106,154, 24,251,129,225,208, 51, 12, 26, 61,140,228, 49, 22,
-128, 88, 36,132, 2,131,210,234,244,163,214, 50,246,183,231, 33, 21, 71,187,206,241,195, 88,131, 61,125, 28,227, 26,159,114,217,
-229,245,210,143,105, 49,167, 23,245,233,216,254, 59, 56, 59,185, 23,130, 74, 24,149, 37,152,163,124, 40, 43,157,186, 73,250, 20,
-112,112,252,189,245,251, 25,178,156,199,105, 66, 80,153,202,181, 84,245, 12,239, 61, 57, 77, 44,103, 53, 85, 54,140,253,196,223,
-254, 27,127,139,223,249,254, 15, 48,206,243,231, 63,253,130,215,183,107,148,157, 49,191,184,161, 27,122,254,225, 63,254,115,238,
-238,238, 24,186,129,203,229,140,153,215,212,106,194, 41, 39,144,138, 44, 48, 25,107,133,181,238,156,197,121,137,131,108,231, 45,
-182,110,169, 42,195,253,183, 95, 19,187,142,175,254,226,207,120, 88, 63,128, 10,220, 62,220, 50,165, 9,156,193,214, 21,169,123,
-244, 40, 63,170,223,143,135,165,188, 65, 23, 23, 43, 80,154,135,187, 59, 86, 23, 43, 54,219,173, 48,170,157, 99,225,107,134,110,
-196, 26, 77, 93,213,144, 18,109,211,160,179,236,150,199, 20,137,100,246,135, 3,117,215, 19,166, 9,163, 45,219,205, 22,101, 29,
- 99, 16, 92,231, 24, 69,104,146, 82, 98,236, 6,172, 49,197,242,148, 31,135, 48, 69,241,152, 83, 62,243, 95,158, 49,154,203, 98,
-228,216,181, 31, 49,184, 90,149,189, 82, 41,238, 24, 73,102,202, 89,114,218, 99, 82, 66,189,147, 28, 48,193,166,150,189,123, 25,
-108,151,101,153, 62,147, 75,234, 71,250, 20,103,157,129, 6, 93,224, 23,199, 9, 82,206,177,224, 90, 13, 42, 37,140,230, 9,160,
- 38,151, 56,217, 99,230,179, 42, 7,180,247, 98,221, 19, 34,151, 46, 92,116,241,232,166, 50,141,144,124, 38, 69, 14,147,220,170,
-199,137, 48,142,140,227,200,197, 52, 49, 91, 46, 72,185, 70, 41,137,197, 77,233,132,249,126,242,158,253,239,239,159, 92, 70,211,
-194, 41,216, 31,118,220,189,122,205,237,203, 87,252,222,239,253, 46,191,216,191, 37, 25,205,254, 48,224,178,194,101,141, 46,223,
-205, 88,112,187, 57,201, 78,125, 74,129,198, 91, 98, 12,248,170,149, 76,109, 35,196,192,237,182, 35, 3,135,195, 1,165, 36, 28,
- 99,183, 59,176,156, 55, 12,253, 22, 84,195, 24, 34, 77, 85, 51, 78, 19, 55,171, 11, 14,219, 53,139,197,140,135,245, 22,231, 45,
-251, 93, 47, 34, 54, 13,222, 26, 1, 8, 53, 22, 84, 98, 8, 19, 89,107,222,222,109,185,126, 49,103,219,237, 88, 92, 26,116, 5,
-177,216, 24, 51, 50,170, 78, 41,158,198,152,206,106, 14,221,150,204, 68,140, 83,233, 42, 19,179,166, 37,198, 10,211, 46, 81, 37,
- 58, 85, 91, 35, 88,229, 41, 20,123,165,125,236, 76,203,243, 17, 74,252,172,214, 26,101,159, 90,116,116,105, 70,244,153, 80, 82,
- 29,173,136, 39,103,200,177, 50,154, 19,144,234, 56,185, 58,157,167, 89,124,206,228, 76, 24,123,210, 52,146, 67,160,239,247, 24,
-157,208, 4, 81,198, 19,153,207, 26, 54,235, 7,198,105, 40,156, 4,233, 86,167,105,160, 93, 52, 60,236,239,217,108,215, 2,173,
-169,171,178,179,215, 5,166,213,115,177,156,179,217,247, 84,117, 37,207,158,182,197, 50,154, 49, 89,152,255,233, 3,238,166,167,
-245, 65,125,192,214,150, 31,201, 74,101,250,150,146,144,227,162,206,104, 93, 22,105,250,248,245,235,210,197,203, 25, 98,148,172,
- 62, 68,127, 19,197,162,122,106, 64,206,116, 34,133, 49,155, 75,144, 20, 90, 23,189, 81, 36, 78,138, 33,140,236,199,137,221, 52,
-177,237, 7,118,135,137,231,155,129,171,171,158,229,213,129,116,177,196,204, 27,204,108,134,173,103,226,116,177, 85, 97, 80,120,
-148,246,100, 93,227, 76,139,170,122, 76,219, 80,207, 27,150,203,150,203,203, 5,235,245,150,205,122,199,102,189,165,239, 6,153,
-194,158,133, 67,228, 20,202,164, 33,139,150,160,170,132,252, 8,228, 24,100, 95,238, 29,182,115,152,174,199,116, 3,251, 44, 99,
-249, 97, 28, 9,233,236,251,158, 31,191,183, 54,149, 93,166,214,210, 85, 89,103,139,186,216,138, 15,219, 60,138, 22,142,137,105,
-143, 83,239, 71, 8,199, 7,183,132, 79, 68,144,249, 73, 24,134, 42, 94,218,227,176,196,156, 57,210, 68,239, 84, 68, 17,197,143,
-120, 20,229,233,147, 10,251, 3,160, 27, 37, 97, 46,109, 59, 43,177,163, 20,162, 90,199,139,229,140,219,183,239, 56,140,137,159,
-253,252, 75,146, 49,252,249, 95,252,148,205,250, 22,101, 59,190,120,249,138,135,205, 65,118, 33,229,239, 53,246, 3,238, 82,163,
-147, 60,244,227, 40, 30,238,156,160,169, 23, 50,234,112,114,248, 59, 47,170,222,132,101,121,253, 17,221, 48,162, 81,124,118,189,
-228,205, 97, 3, 90,114,211,223,222,223,129, 49,184,186, 18,188,107, 8, 79, 86, 23, 90, 89,249,126, 22,181,116, 66,130, 44, 46,
-174, 46, 25,199,145, 67, 39,169,105,149,246, 18,210, 48, 14, 52,243, 57,222,121,172,214, 52, 85, 77,140, 81, 66, 94,234,154,126,
- 24,104,218, 57,175, 94,189,146, 96,139,146, 41,174, 98,241,195,106,133, 81, 26,157,164,227,218,231, 40, 9, 65,165, 76,171,227,
- 43, 84,198,240, 74,231,114,219, 78,143,100,181, 83, 0,143, 62,113,176,101, 44, 47,239, 31,171,229, 61, 36, 33, 5,242,208,167,
- 44,132, 40, 21, 51, 42,137,117, 39,196,146,229,173, 4, 18,121,124,175,201,133, 67,166, 3, 83,121, 67, 31,134, 30,187,183, 36,
- 18,227, 52,226,187,170,196,134,138,149, 13,101,137,170,228, 44, 43, 75, 50, 25, 27, 19,218, 78, 5,199,153,201, 49, 16,130,216,
-214, 68, 92, 19, 11,223,192,160, 11,140,198, 89,203, 56,106, 70, 53, 50,230,241,228, 67,205, 41, 18, 85,148, 41,132, 17, 97,222,
- 52,142,244, 93, 71,223, 29,152,134,142, 24,158, 51,203,151,162,160,118, 34,194,226, 40, 6, 60, 30,108,127,101,188,210, 63,139,
-139,192,211,231, 71,107,197,110,123, 32, 12, 35, 95,253,252,151,124,239,211,207, 88,249,204,159,253,215, 19, 49,149,247, 65,202,
- 56,107, 48,186,192, 63, 98, 70,233,132,247,150,156, 35, 86,131,243, 48, 77,229, 61, 92,194,122,166, 16,232, 7,121,189,178,134,
-113,236, 81, 90, 19, 66,143,175, 26,134, 78,209, 13, 3,222,138,176,213, 42,205, 52,141, 88,103, 36,132, 70, 69,200,150, 20, 50,
-117, 43, 88, 82, 84, 46,182, 43, 71, 86,145, 97, 28, 81,206, 10,244,102,102, 57,236, 96,182,108,217,142, 61,190,105, 37, 81,204,
- 57, 82,209,196,116,253,158,152, 2, 99, 25,225,135, 24,216, 29, 54, 24,109,177,247, 2, 64, 26,250, 17,176, 44, 22, 11, 66, 12,
-152,104, 33, 71,172,119, 39, 18,156,236,255, 11,183,160, 96,125,143, 54,213,105, 12,197,247,110, 74, 30,186, 58, 77,172,114,206,
-144,164,248,230,194, 76, 79,169,116,237,198, 64,193,140, 30, 93, 16,143,168,226,210,185,199, 40,174,141,174, 99, 60, 28,132,219,
-191,219,145, 67,164,239,186,146,114, 54, 48, 77, 93, 33,194,237, 32, 4,226, 20,132,213,239, 38, 50,178, 74, 27,167,137, 74,105,
-172, 57, 83,146, 43, 77,138,129,126,191, 21,142,186,209,162, 45,209, 22,165, 50, 49, 41,250, 41,208,245,195,169, 27,230,201,101,
- 69,125, 39,117, 51,243,148, 89,126, 50, 97, 41, 93, 58,120, 8, 49,161, 85, 44,208, 36, 32, 42,225, 78, 41,133, 86, 70,214, 45,
- 38,203,143, 58, 75,131,169,181,224,150, 79, 48, 27,117, 98, 53, 64, 58, 61, 98, 34,194, 46, 5, 62, 64, 84,134,160,100, 26,152,
-213, 72,140, 91,166, 62, 50,236, 39,186,253,129,195, 97,203,197,208, 81,119,115,170,161,195,207, 70, 76, 45, 28, 10, 92, 35,147,
- 94,227,208,120,208, 65,124,236,206, 66,229,100, 87, 62,159, 49, 91,205, 89,110,246,108,239, 55,108, 55, 59, 14,187, 3,227, 36,
-194,227,170, 22,209,111,229,236,201,145,112,116, 75,104,173,192, 30, 93, 24, 71, 99, 68, 70,197,196, 52, 26, 6, 45,186,141, 97,
-152,232,167, 73,166,131,165, 88,166,156,176,225,168,110, 70,194, 19,136, 17,109, 52, 58,137,204, 48,199, 92,118,164, 17,210, 49,
-223, 85,127, 32,122,245, 67,148,155,115, 43,122,122,114, 38,165,146,160, 21,131,120, 50, 69, 8,112,228, 91,115, 26,151,156,223,
-212,100,231,156,222,243,204,231,247, 50,165, 53,132, 64, 54, 61,235,135,129,126, 7,119, 38,240,174,185, 67,235,196,127,242,159,
-255,125,254,155,127,244, 51,246,218,252,255,153,251,211,104, 93,211,244,190, 11,251,221,211, 51,188,195,222,251, 76, 53,117,117,
- 85, 87,207,221, 86,183, 37, 89, 45,227,150, 49, 32, 12, 49, 96, 28,219, 64, 0,199, 96, 45, 49,153,149,176,178, 18, 2,193,100,
- 49,100, 97, 12,100,241, 37, 31, 2, 49, 24, 72,156,196, 96, 67, 28, 2, 14, 88,198,150,108, 89,150, 37,203, 18,178,213,221,170,
-174,174,170,238, 26, 78,157,121, 15,239,244, 12,247,148, 15,215,253,188,239,187,207,169,106,203,178,147,160, 94,123,213,169,210,
- 57,251,236,253,238,231,189,175,251,186,174,255,255,247,231,244,180,165, 86, 53,235,205,200,249,110,164, 82, 6, 71,160, 49,153,
-108, 53, 85,227,132,104,228, 28, 40,139,115,134, 24,183,128, 98,183,217,114,235,246, 11,144, 13, 49, 41,124, 31,113, 14,140, 94,
-176, 60,125,137, 7, 79, 46, 49,214,113, 99,214, 50, 59, 59,229,157,247, 31, 19,208,220,189,127,159,197, 98, 73,221,131,186,243,
- 28,247, 30,124, 80,138,137, 42,183,222,132,209,150,152, 5, 78,147, 67, 98,179,222,178, 88, 44, 4, 32,131,194, 26,135,209,226,
-117,191,121,227, 6,179,166,161,157,181,248, 97, 96, 12,158,133,158, 75,218,154,113,244,187,129,116, 2, 67,161, 30,213,237,140,
-172, 20,149,173,233,198, 13, 65,203,158, 78,251,145,208,111, 65,121,116,173,208,217,237,117, 11, 19,187,121, 74, 9, 75,105,186,
- 93,171,103,110,232,186, 8, 22,167, 98, 97,237, 33, 83, 88,105,189,223,151,145,166,145,112, 46, 97, 5,106,175,183,200,165,160,
-147,101, 92,234,115,166,243, 30,227, 29,166,247,104, 59, 8, 79,188, 20,210, 89, 87,203,229, 74,155,130,162, 5,148, 35,105, 41,
-236, 89, 89,178, 25,177, 78, 24,239,106,178,228,164, 44,135,106, 10,101, 15, 16, 15, 42,255, 9,205,169, 20, 86, 24,157, 40, 45,
- 69, 42,132, 32,224,136, 20, 37, 24, 39, 78, 94, 81,225,169,199,113, 36, 13, 35,113, 24,241, 62,144,111,221,166,158, 67,110,107,
-185,220, 20,114,159, 62, 28, 67,135, 95, 29,101,199,230,239,106,107, 51,191,106, 24,212,193, 2, 42,111,225,232, 71,114, 31,217,
- 62,185,194, 15, 3,159,249,226,231,249,206,183,190,129,173, 23,220, 58,185,195,246,222, 22, 69, 68, 91,209, 56,132, 44,241,168,
- 49, 39,180, 1,223, 71, 42, 35,233, 46,203,249,140, 20, 36,158,181,109, 91,174,118, 27,162, 49,140, 62, 82,215, 14, 91, 89, 46,
- 87, 87,180, 78, 16,198, 17, 24, 66,198, 36,197,233, 98, 6, 49, 18,194,200,172,169,184,186,184, 20,175, 47, 22,157,203, 68, 39,
- 39,106, 99,112,214, 16,253,136,115,154, 74, 25, 30, 94,118,204, 78, 78,121,178, 90, 83,207,107,214,125, 32,185, 37,168,134,182,
-170,177,149, 34,134,129,144, 6,102,149, 33, 36, 17,222,165,113, 44,207,117,160,239,197,246,165,163,102, 62, 95,146,213,165,140,
-235,125,195, 60, 37, 78, 78, 78,246, 83,158, 9,138,164, 39,210, 90, 10,226, 85, 79, 22, 16, 69,126,142,144,114, 60,202,202, 53,
- 68,163, 81, 57,200,202, 35,176, 15, 45, 82,170,116,110, 73,147,113,229, 34,157, 4,202,162, 21,196, 72, 14,129, 52,140,248, 93,
- 71,191,222,176, 94,173, 24,250,158, 97,219,209,119,221,222,111,142,210,116,187, 13, 93,183, 22,141,204,238,146, 28, 18,190,243,
-232,164, 72,117,198,135, 32,220, 5,229,104,173,149, 75,234,216, 81, 59, 75,162, 33,143, 25,103, 2,198, 52,132,208,163,140, 37,
- 37, 97,127, 96,106,188,210,140, 64, 34, 21, 10,229, 65,228,122,208,216,148,153,217,241,148, 65, 77, 18,149,137,161, 41,157,127,
-142, 81, 34,184,179, 20,115,241,140,103, 12, 7, 33,180, 20,116,153,214, 24,163, 48, 73, 23,240, 84, 66, 37, 85,154,255,137,119,
- 82,198,250,234, 72, 29,207, 20,150, 36,207,110,206, 10, 21,100,237,219,107,184,234, 3, 81,239,232,136,108,195, 72,231, 19, 55,
-122,207,162, 31,136,203, 1,183,156, 67, 28, 48,205, 9,166,106,201, 38,161, 76,133,209,142,108, 44, 90, 87, 36, 83,161,109,141,
-171, 71,104, 91,204, 98, 78,115, 50,103,113,181,102,183, 94,211,109,122,134, 97,192, 40,141, 51, 96, 85, 70,229, 72,140, 30,227,
- 21, 42,121, 74,204, 93,153,110, 39,225,226, 88, 77,101, 5,136, 51,106, 75,175, 52, 57, 38,226, 24,240, 94,166,136,211,153,100,
- 83,140,130,159, 75,145,148, 53, 73,101,201, 74, 46,249,189, 49,150, 17,163,201,251, 93,206, 20,176, 33,183,200,103,209,127,228,
-131,184, 67, 29,255,179, 8,238,114, 86, 34,104,202,226,103,142, 89, 10,198, 36,194, 74, 37, 5,107, 63,254,205,233, 41, 82,205,
-135,239,233,101, 18,166,121,255,157,183,121,238,185, 23,121,251,205,183,104,219,154, 27,103, 75, 82, 28,113,181, 99,237, 45,237,
-141, 23,120,239,254,125,154, 27, 45,175,124,252,121,118,223,121,143,211,106, 70,171, 28, 51,147,217, 94, 61,224,198,217, 66,124,
-238,125,143,154, 47,196, 59, 91,198,142,243,197, 12,165,102,172,186, 1, 27, 18, 75, 55,163,169, 42,162,247,156, 63,126, 64,248,
-212,199,153,181,210,233, 69,159,121,233,227,207,211,184,175,177,243,137,247,223,123,151,231,239, 60,199,221,247, 54,188,246,202,
- 39,248,224,222, 7, 79, 5,128, 83, 70,181,137,186,170, 25,131, 23, 29, 77,206,204, 22,115,241,100, 43,197,232,125, 65,128, 30,
-108, 19,135, 91,191,116, 16,214, 84,116,125,207,102,187, 67, 91, 39, 20,186, 66,162, 67,107,218,118,198,213,118,139,206, 2, 1,
-201,190,199, 25,131, 54, 14,147,236, 51, 72, 66,233, 82, 39,169,215,179, 73, 68, 83,193,126,118,175,166,158, 77,211,251, 46,137,
- 60, 42,139,125, 69,161, 69, 32,149,133,175,220,247, 67, 1,224, 8,196, 35, 39, 97,100,231,148,168,170, 40,129, 37,106,154,255,
- 72,214,122, 42, 7, 14, 89,139, 7, 91,200, 31,251, 55,206, 65,220,147, 63, 20,145,140,146,221,153, 50, 2, 23,177,133,153, 62,
-125,196, 16,228,235,224, 48,102,140, 41,115,126, 46,250,135, 33, 68,188, 15, 44,111,222,100, 22,151,212,109,131,173, 76,153,140,
- 29,239,217,217, 99, 51, 57, 10,186,248, 40, 27,218,223,200, 78, 93, 29,161, 30,148,130,190,239,209,198,240,240,209, 67, 62,241,
-233, 79,177, 56, 91,210,125, 51,242,249, 47,125,137,111, 93, 93,136,154, 91,131,181, 10,124,177, 12,149, 85,139, 41, 89,217, 37,
- 90,140,182, 54, 12, 62,114,118,118,163,240,247, 19,151,151,151, 2, 99,201,114,232,196,148,208, 70, 68,115, 57, 39, 66,128,182,
-109,176,198,176,235, 59, 26,231,216,108,182, 37,231, 72, 51, 12,129,186,182,101, 29, 34, 90,150,229,162,165,169, 52, 99, 63,226,
- 3,132,206, 50,132,196,122,157, 88, 93,118, 36,103,112,243,138,217,141, 68, 50, 35,163, 50, 68,103,112,246,148, 25,134, 60, 4,
-146,246,140,118,131, 15, 35, 57,121,200, 3,253,208,179,235, 47,241,113, 3,219,138,174, 91,115,118,114,134, 74,145,202, 25,154,
-242,156,167, 24,201,149, 59, 74,210, 43,202,101, 2,218, 76, 2,198, 84, 44,229,133,203,161, 82,193,164,232, 67,150, 64, 40,221,
-166, 86, 24, 50, 57,143,232, 16,246,127, 62,251, 64, 8,158,177,239,217,173, 55, 92, 62,121, 66,223, 73, 48,145, 31,228,249,243,
-195,192, 56,140,194, 25,215,226,202, 24, 6,191,119, 54, 52, 77,203,229,147, 43,134,222,147, 82,166,109, 43,185, 0,164, 36,214,
-192, 44,177,169,193, 15, 52, 85, 45,103, 75,240,140, 67,194,107, 67,221, 46, 68,143,144, 34, 9, 83, 38,146,210,189,203,232,187,
-128,146, 50, 31,234,128,202, 71,162,217, 41, 79, 93,149, 21,173,222,183,134,185, 96,165,101,250, 21, 77,201, 66, 40,118, 89, 83,
-190,175, 84,154,190,152, 51, 62,101,172,145, 6, 33, 41,185,172,230, 50,173,205,228,107, 19,228,107,171,144,242, 94, 53, 74,220,
- 0,109,229,104,107, 75, 93, 89,140,202, 4,239,217,238,192, 26, 37, 5, 55,140,248,224,105,162,120,199,171,121,196,181, 3,166,
-154,131,157, 29,146,224,156, 69,155, 6,109, 20,206,214, 40, 87, 99,171,134,166,106,153,183,115,198,147, 51,118,235, 13,219,245,
- 21, 99, 63,200, 42, 51, 5,114,144,201,103, 72,145, 84,108,183, 19,177,114,250,200, 33, 30,213,213, 50, 5, 45,171, 27,225,146,
-200, 10,113, 12, 1, 27, 66, 56,208,121,162, 96, 29,245,148,162,147, 19,217, 24,185,145, 60,115, 40,171,107, 80,154,227, 52,158,
- 41,141, 43,171,201,198,112, 56,242,212,193,164, 91,108, 80, 69, 32, 85,212,213,178, 5, 73,123,245,116,206, 71, 9, 92,249,186,
-245,231,122, 64,128,252,189, 42,101,116,202, 60,124,255,109,198,221, 21, 23,231, 3,231,235, 83,214,187,129,135, 79, 30,243,202,
-203,175, 50,191,113,135,240,224, 17,209, 84, 60,188,184, 98, 28, 3, 87,187, 43, 86, 17, 94,125,254, 14,159,250,212,167,200,253,
-134,156, 18, 29, 17,173, 36, 5, 77, 59,205,108,177,196,103,197,232, 3,205,108,193, 15,254,134, 31,226,175,254,226,207, 19,250,
- 14,123,162,120,252,240, 46,223,126,107,198, 98, 57, 67, 43,197,114,113,147,229,172,230,246,217,130, 15,206, 87,172, 46, 47,120,
-229,197,143,241,228, 94,205,231, 62,245, 57,126,246, 47,253, 12, 62,199,107,111, 0,107,237,222, 69,208,247, 3,198,136,192, 40,
-165, 68,215,117,123, 79,187, 41, 69,172,235,118,178,111, 84,138,182,169, 37, 31, 61, 39, 22,203, 5, 90, 27, 70, 63,210, 86, 53,
-198, 42,118, 93,143,139, 9,140,165,105, 90,182,221,192,197,227,199,168,126,141, 13, 91, 81,210,170,201,114,115,189, 83, 63,140,
-207,242, 95, 83, 89,125,204, 47,200,249,195,237, 46, 31, 57, 26, 46,130, 18, 38,116,100,158, 60,171,153, 97, 28,203,127, 19,233,
-124,140, 30,239, 71,234,170, 41, 42,101,189, 39,223, 97, 28,202,214, 40,163, 48,217, 94,219,177, 77, 49,167,178, 99,157,166, 69,
-135,224,137,235,225, 67, 74,178,192,181,193, 26,177,111, 25, 45,194,151,137,100, 21, 67, 1,130, 40, 13, 68,124,200,108, 55, 43,
- 17, 90,133, 32,251,246, 16,153,159,156,208,206,103, 88,103,201, 69, 84, 38, 40, 88,246, 29,207,161,112,171,191,105,254,245,143,
-122,221, 99, 74, 24,231,216,108,174, 88,158,156,242,220,157,155,124,235,205,111,242,125,191,225,135,120,235, 47,253, 52,239, 46,
-150,146, 42,165, 21,149, 53, 36,175, 74,119, 6,149, 51,178, 66, 83,147,114, 57,227,172,136, 33, 99, 17,122,142, 33, 81,149,220,
-118,237, 28,171,243, 75,180,209,133, 35,160, 81, 72,204,233,201,114,201, 56,138,111, 92, 70,139, 3, 57,102, 94,186,125,139,119,
-190,243,128,179,179,166, 16, 10, 51,139, 89,131, 51,134, 24, 51,166, 50,188,247,104,164, 62,185,201,119,238,174,232, 3, 98, 41,
- 82,129,100, 71,244,163, 43,230,203,138,179, 89,195,237,147, 83,116,157,208,173,195, 44,102,178, 62,240, 21,253,110,199,176,219,
-225,140, 66, 41,143,143, 61, 62, 70,208, 21, 42, 71, 84,150,188,121,107,229,103,110,157, 36,198,153, 24, 8,193, 96,138,253, 76,
- 28, 33, 81, 82, 11,141,217,235, 66, 52, 19,232, 40, 73,144, 78, 40, 46,160, 40, 90,134, 34, 11, 67, 77, 28,246, 20, 9, 33,208,
-117, 29, 87,231, 23,140,195,192,102,179, 17, 64, 79,121, 86,131, 23,254,188,247, 30, 82, 22, 87,130, 17,178,157, 42,120,224,121,
- 92,176, 89,119, 52,237, 2,165, 59,114, 30,233,251,192,110,215,179, 88,156, 16,162,136, 69, 49,236,191, 46, 87,183, 84, 90,149,
- 12, 13, 41, 44,144,169,107, 71, 24, 61,214,206,246,142,157, 73,251, 99,148,218,235, 69, 14,239,153,124,141,242, 57,157,225,154,
- 76,228,200, 57,117,141,127,168,142,168,233, 7,155,155,181,146,163, 96, 16,187,219,100, 19, 53, 70, 4,147,222,138, 61,242, 80,
- 31,166,166,243,184,158,171,107,107, 66,163,197, 69,229,140,166,173, 29,181,179, 52,149,149,180, 72,163,168, 10, 52,105,232, 7,
- 20, 18, 12, 22, 66, 34,135, 4,193,163,252,128,154, 5, 84, 29,192,138,152, 78,105,139, 50,226,134, 80, 49,201,116, 67, 87,100,
- 83,227, 92,131,171, 7, 92,237,168,103, 53,253,118,139,239,122,252, 56, 8,205,114,136, 36,239,139,158, 66,250,216, 16,165, 33,
-136, 65,126,222, 99,193,201,250,224,203,180,240,104,178, 88,244, 65,164,132, 29, 71, 79,178, 18, 6, 31,149, 42,209,145,121, 63,
- 26,215,230,104, 31,250,116, 71, 69,161,120, 77, 41, 86, 71, 7, 98,154,240,112,165,160,155, 73, 1,188,239,244,229,207,198, 82,
-204, 67,146, 78,112, 42,244,211,184, 38,163,228, 7, 6,215, 85,216, 83, 71,127,244, 65,206, 24, 18,175,189,242,113,238,189,255,
- 62, 90, 65, 59, 95,240,232,114,203,123,143, 46,232,253,200, 87, 95,121,149, 7,247, 30, 17,253,192,251,239,189,207,237, 87, 62,
-206,105, 99, 88,156,156,113,117,217,241,193,131, 7,188,112,243,148,218, 53, 92, 60,122,200,174, 15,204,151,183, 69, 45, 62,236,
-112,179, 25, 79,158,172, 81,174,230,203, 95,250, 94,254,222,223,241, 59,112,109,205,159,251,127,255, 55, 44,230, 13,109,227,176,
- 86,241,203,223,252,101,200,138,139,171, 13, 95,190,115,155,239,255,210, 23,184,247,103,127,138,251,247,222,227,147, 47,191, 76,
-223,109,121,229, 99, 47,211,214, 45,190,219, 92,123, 24, 67, 8,130, 3,116,142, 48,140,104,164,155,234,250,158,166, 0, 48,114,
-241,243, 42,173, 25,123, 57, 0,102, 77,195,124, 62, 99,209,206,152,207,231,197, 38,225,168,171,134,171,203, 43,218,249,130,148,
- 18, 87, 87, 43,140,171,208, 85,141, 82,154,126,183, 97,105, 35, 42, 15,178,159, 82,106, 95, 92,158,233, 92,143,146,194,212, 71,
- 4, 12, 60,109,111,249,149,194,137, 38,232,144, 58, 42,236,122, 82,210,151,203,222, 24, 34, 57, 13, 28, 9,237,201, 41, 51,250,
- 40,202,228,242, 38,118,117,141,171, 90,180,220, 95,246,187,108, 17, 99, 74,145, 17,107, 84,225,225,167,184,255,117,218,199,140,
- 78, 23,201,131,197, 38, 43,161,218, 9, 46,215, 16,140,140,145,189,242,114,211,206,251, 57, 1, 49,120,250,237,166, 36,162, 5,
-194, 56,226,251,145,116,243, 22,205,108,134,171, 5, 19, 89,130,168, 72,154, 61,171, 93, 63, 69, 77,252,168,117, 83,254, 21,250,
-224,158,241, 15, 31, 18, 24,138, 98, 59,241,177, 87, 62,206,197,213, 57,183, 95,126,153,151,158,187,205,246,254, 61,116,211,160,
-140,162, 42,133,105, 44, 41, 83, 40,185,124,134, 24, 8, 17,172,149,174,199, 40, 25,237,102, 31,246,249,239,117, 83,145,179, 97,
-179,219, 48,250, 76,211,218,125,225, 87,100, 78,151, 11,198, 97,160,114,142,232, 61,221,110, 71, 12,137,121,219,208,119, 29,214,
- 22, 84,106, 9,126, 49,186, 36,150,145, 57,191,236,105, 23,115,206,215, 29, 67, 84,116,131, 6,229,208, 74,220, 8, 97, 13,151,
- 87, 35,231,116,188,239,174, 88,158, 56, 94,120,113,201,173,219,167, 44,150, 53,237,172,162,118,150,177,106, 36,205, 49, 12,132,
-180, 35,132,132,173, 18,195,216,179,221, 24,140,178, 92, 93, 94, 10,101,172, 80, 37,109, 85,244, 47, 24, 57, 96,181,248,235,149,
- 53,104,107,139, 46, 36,239,133, 79, 41,136, 7, 57,165, 36,216,229,156,100, 85,152, 2, 67, 63,224,125, 96, 24, 61, 49,142,236,
-118, 59, 54,155, 13,219,237, 22,107, 12, 93, 63, 16, 99, 20, 69,122,161, 70, 98, 12, 41, 70,154,162,255,208,102,178,122,214,212,
- 33, 98,237,192,110, 39,233, 98,237,108,206,118,213, 49,244,137,113, 28,101, 89, 20,188,164,193,197, 68, 74, 26,109,170, 98,109,
- 77,248, 97,192,206,103,248,173, 7,165,104,154,138,203,174, 67, 23, 90,158,113,178,198, 50,185,164,178, 77, 15,113,126, 54, 0,
-204, 42,179,135,237,100,100,213,146,139, 14, 33,229,201,234, 76, 1,176,104,170,202,210,212, 53, 77, 83,224, 44,206, 97, 10,116,
- 39,164,132, 15, 14,239, 3,222, 59,134,177, 34,148,194,151,138, 75,107, 42,232,154,252,204,212,112, 47, 90,212,114,193,176, 70,
- 81, 59, 75,101,181,252,179, 4,241, 24,103,169,140, 66, 35, 23,201, 97, 55,200, 4,123,140,164,209,193, 40,235, 53,211,142,232,
-118,142,174,103, 40, 87,161,140, 32,103,117, 57, 99, 20, 14,180, 35,153, 10,101, 42,180,213,216,166,193,213, 21,195,118,203,176,
-221,208,111, 55,140,125,199, 24, 10,165, 49, 31, 26, 5,239, 99, 33,114,122,198, 32,151, 61, 31, 34, 41,133,114,177, 46, 86, 75,
-235,138, 42, 62, 96, 55,187,129,202,197,162, 44, 45, 62,196, 36, 22, 34,179,231, 85, 31,146,160,246,131,148, 73,205,172, 14,119,
- 46, 74, 65,158,236, 72, 19,112, 72,163,240, 83,199,190, 79,239, 41,160,146,152, 8,101, 95,155,202, 3,191,223, 37,230,105, 92,
-163,143,198, 56,135,169,192,211,193, 51,114,160, 39,208,138, 80,184,196,157, 79,140, 25,182,131,116,120,173, 51, 52,202,115,115,
- 49,227,201,213,134,245,197, 5,121,115,197,237,231,231,140,122,100, 48,240,222,195,199,252,192, 23, 63,203,230,242,138,180, 29,
-216,110,183,196, 33, 96,103, 53,155,109, 79,192, 50,107, 23,252,149,175,189,206, 31,249, 99,255, 15,198,110,205,170,228,149,159,
-181, 75,148,171,120,120,126,137, 87,154,245, 56,242,242,203, 47,226,117,228,199,255,226,207,240,248,241, 67,154,166, 34,134,192,
-217,201,146,219,183,110,178,122,127,115,109,132, 29, 66,216,187, 13,118,193, 83,213,117,121, 45,229,117, 24,135,129,211,211, 83,
-134,113,100,177, 88,144,203,239,175,235, 10, 80,184,170,162,109, 91,108, 85,209,117, 35,202,136, 56,236,254,131,135, 84,117,131,
-143,145,101, 12,152,232,104,234, 25,159,120,229, 85,118,143,191, 77,223, 13,130, 43,204,250, 25, 33,226,181, 55,234,135, 20,150,
-195, 4,230,122, 30,192,135, 5, 15, 28,192, 67, 79, 9,191,166, 27,126, 65,111, 22,170,133, 60,103, 25, 50, 81, 4,117, 41,226,
-163, 24,124,180,117,152, 74, 2, 53, 36,170, 83, 14,200, 97,244, 84, 77,162,170, 51, 85, 35,151, 20,109,100, 4,138,142, 76,233,
- 2, 41,230, 82,152,194, 83,211,136, 67,240, 10,234, 58, 58, 73,105,133, 81,134,140, 59,128, 49,140,129,113, 32,132, 80,118,180,
- 17, 18,104, 60, 67, 17,242,196,113, 20,139, 74,215,115,114,118,147,217,169, 80,241,140, 85,178,163,213,148, 16, 29, 57,229,254,
-102,194,104, 62,242, 66,165, 68,181, 61,155,207, 49, 74,211,198, 5, 47,222,186,133,201,137,122,121,138,173,103,130,200, 85,129,
- 76, 64, 25, 69,142, 16, 83,164,117, 53,163, 79, 69,196,168, 88, 46, 90,250, 93,135, 54,173, 40,204,125, 79,189, 88,160,163, 98,
-179,237,233,134,161,196,134, 38, 42, 87,179, 89,239,120,238,185, 83,249, 92,237,140,205,122, 77,244, 3,126,240,168,156, 89, 46,
-231, 60,184,119,193, 98,225,136,113,196, 40,249, 59,180,213,248,172, 24, 66,226,201, 78,177,184, 85,113,247,242,130,199, 3,164,
-100,138,211, 2, 48, 10,155, 96, 54,175,233,115,160, 27, 71, 62, 56, 31,120,112, 57,112,115,113,197,171, 31,191,205,243, 47, 45,
-152,213, 53,109,219, 50,111, 90, 97, 57,116,142,148,123, 32, 8,118, 52,202, 57,181,235, 71,218, 49, 80,141,129, 42, 8,185,173,
- 74,178, 26, 83, 25, 81,100, 27,185,236,105, 37, 43,150, 20, 66, 9, 22, 26, 33, 70, 84, 70, 52, 23, 49,145,195,128,239,118,140,
-187, 29,155,205,150,152, 20,221, 48,178,235,183,164,156,217,108, 55,197, 26, 39, 19,149,202, 85, 50,178,213,236, 39, 83, 10,104,
-155,102,127,193, 55,214, 97,171, 10, 23, 18, 77,179,100, 28, 19,209,139, 46,105,187,218,144, 83, 68,169,196,110,183, 41,133, 61,
-144,194,136,171,102,120, 63,208,119,134,249, 13, 97,176, 27,165,177, 74, 49,118,163, 4,137, 88, 71, 72, 25, 55,125,143, 90, 81,
- 25, 83,206,244, 74, 86, 98,153,103,139,168,158, 44,106,215, 93, 23, 83,200,209, 4,211,177,165,216, 86,149,163,169, 28,117, 35,
-226, 82,231,220, 62, 68, 41,101,161, 83,134, 16, 8,161,198,123, 95,104,149,225,232,189, 82, 68,199,124, 88, 80,104,113, 33,152,
-146, 92,167,197, 70,237,140, 22, 20,171, 21,241,179,182,194, 41, 80,164,253, 52,111,216,201,179,217,239, 52,155,121, 71, 51,219,
-209, 44,123,234,197,128,157,141,152,186,198, 52,243, 50, 29, 44, 58, 34,163, 65, 87, 50, 53, 52,146, 81,161,156,248,223, 77, 93,
-151,203,145,188, 38,227, 70,116, 17, 49,166, 18,136, 37, 26,178, 24,164,192, 75,172,173,232,142,234,202, 97, 10, 24, 73,206, 45,
-113, 16,248,224,177, 93,239, 9, 49,203,139,103, 77,233,152, 97, 12,162, 46,212,123, 53,225,145, 47,249, 41, 64,128,153,210,166,
-142,216,211, 89,229, 67,170, 85,241,237,170,233, 22, 87,140,206, 49,149, 47, 52,243, 20, 97, 78,237,129, 54,234, 41, 70,252,228,
-254,184, 94,216,143,246,190, 36,108,213,242,206,131,115, 62,247,197, 47,115,190,218,112,255,173,111,227,180,162,173, 29,119,223,
-123,135,212,117,156,204, 42, 46,214, 34,152,104, 12,204, 93,166, 87, 35, 91,163,120,112,126,197,119, 30, 8,156,162,106,106,186,
-190,103, 36,208,106, 67, 42,236,234, 71,143, 46, 88,158, 25,222,120,227, 13,186,237, 21,125, 30,137, 74, 17,149,227,114, 61,240,
-151,254,251, 95,162,207,153,139,110,195,213,213, 21,203,197,140,215, 62,241, 42,127,245,245, 55,121,231,189,239,144, 8,124,235,
-205,215,121,233,197, 23,120,251,253,119,143,246,214, 1,133,166,239,101,220,174,141, 97,219,237,168,156, 67, 43, 69,223,247, 84,
- 85,197,110,183, 35,165,204,213,229, 37,149, 53,212,117,197,108, 54,167,105,106, 78, 78, 78, 48,198,208,117,131,160,103,199, 17,
-148, 97, 54,159,177,217,118,244,195,200,106,181,226,228, 70, 77, 91,207, 48, 54,177,250, 96,135, 86, 30,178,133,108,174,121, 73,
-255,122,181,217, 31,218,221, 63, 83,224,167, 28,105,174, 9,195,246,172, 41, 37, 35, 62,193,197,234,125,122,153, 86, 25,149, 53,
-218, 72,154,214,124,177,100, 57,159, 49,107, 27,156,209,196, 24,217,172,214,172, 54,107,250,174, 35, 36,217,177, 87, 37,128, 70,
-167, 72, 54,177, 8,205,212,254,160, 56, 94, 49, 60, 77,195, 82, 74, 95,219, 13, 30, 46, 96,166,184, 20, 44,198, 4,241,224,171,
-161,216,223, 34,137, 68, 80, 1,157, 35,236, 34, 97, 28, 24,250,158,110,183,165,219,172,153,111,207, 56, 61, 59,165,157,207,168,
-219, 6, 99, 13,198, 77,192, 5,132,100,199,117,222,195,225, 61,150,127,213, 59,245,167,255,251, 4,241,233, 54, 91,110,221,188,
-141,182, 21,228, 68,213, 46,113,237, 28,227, 12,182,132,140, 72,135,149, 14,140,122,216, 99, 99, 23,115,203,250,114, 32, 4,143,
- 82,134,190,239, 89,156,157, 22,206,248, 6, 99,173, 8,130,208,236,250, 1,231, 52, 77, 93,115,126,113, 78,104, 42,172, 54,116,
-163, 71,145, 89, 46,230,248, 49,160,181, 28,170, 66, 23, 84, 84, 77, 77,239, 7,124,231,121,188,246,216, 27,103,252,133,187,151,
-220,235, 34,171,172,132,120, 26,163,136, 63,179,198,144,185,169, 96,225, 42, 22,205, 9,243, 49,178,222,238,120,120,229,185,216,
-220,227,249,135, 53,175,126,236, 54,207,221, 88,176,152, 85,204,102, 18, 36,228,188, 39,229,129, 16, 70,178,178,140, 65, 49, 6,
-193,142, 58, 31,168,134, 64, 85, 75,154,150, 50, 70,108,164, 5, 88, 52,177, 24, 38,187,111, 74, 81,232,119, 49,144, 67, 32,251,
- 72, 24, 70,182, 87, 79,216, 94,158, 19,253,200,102,215, 49,248, 68, 55,120,172,149, 56, 90, 99,180, 8,131,181,132,200,212,109,
- 75, 83,213,212,174,218, 95,250, 67, 8, 7,241, 41,138,224, 35, 33,122, 34,144,179,166,105,107,170,166, 98,113, 58,231,228,100,
-134, 31,101,197,102,157,161, 31, 6, 65,244, 26, 65,238,170,156,202,165, 62, 73, 33, 85, 74, 70,254, 41,225, 92,141, 54, 61, 33,
-137, 21,181,114,150,249,188,193, 90, 77, 72,146,131, 42,104,234,178, 6,213,122, 31,195,172,245,209,104, 93, 79, 53,129,107, 53,
- 99,154,226, 26, 35, 8,224,170, 60,147, 19,141, 77, 31, 17,248,166,142,212, 71,225, 39,200,222,185, 92,200,211,179,210,171,235,
-235,128,163,230,161, 76,144, 11,129,118,207,253, 87,147,238,164,172,145,209, 34, 12,246, 49, 18,251,145,203,117, 66, 61,217,210,
-182, 43,230, 39, 43, 22,167, 43,102,103,103, 52,243, 5,110,214, 99,155, 25,184,154,236, 92, 65,206, 90,193, 1,151, 58,169,141,
- 52, 33, 88,135,182, 22,235, 92,153,156,110,217,110,182,116,187, 30, 79,148,117, 28,154,172,178, 92, 62,178,193, 78, 4,194, 61,
- 51, 36,151,233,160, 52,193, 62, 6,236, 16, 2, 33,101,116,217,209, 8,132, 94,239, 5, 69,234,200, 63, 61,249,209,247, 62,118,
- 35, 2, 45,231, 28, 22,185,225,216, 50, 6,210, 19,120,164, 36,239,168, 44, 42,103,193,222,197, 34, 24, 41,164,184,162,132,159,
-168, 76,135,224,150,162,155, 47,121,191, 19,156, 32, 31,204,211,207,236,213, 33,211,249,196,233,237, 23,121,225,213, 79,241,246,
-207,252, 37,238, 63,122,136, 85,240,210,139,119,232,186,158,133,179,164,148,104,219,134,186,157,195,184, 35, 12, 3, 47,221,113,
-248,149,229,254,189,129,183,238, 62,228,185,214,112,121,177, 97,126,170,185,245,252,199, 25,208,212,205,130,246,198, 41,118,237,
-121,254,133,151,120,252,232, 46,183,110, 46,248,218,195, 15, 24,251, 30,157,224,114,183, 70, 59,203,206, 7, 94, 57, 59,229,201,
-229, 5,159,250,220,103,248,251,127,219,111,227,191,255,198,191,203,215,190,241, 75,124,249, 11, 95,224, 79,253,233, 31, 99,126,
-178,124,106,148, 42,123,164,148, 19,253,208, 23, 24,139,136,131,200,121, 31,255, 23, 67, 64, 27,195,106,181,226,198,233, 41,166,
-236,215, 66,136, 88, 99,168,235,166, 8,238,114,225,118,103,188,247, 52,133, 3,223, 15, 3,249,106,197,201, 92,225, 82,207, 56,
-238,112,185, 20,187,172,158,125, 35,252, 13, 64, 79, 62,108, 68,124,184,196, 29, 11, 34,121, 6,161,154,167, 8, 82,166, 76,233,
- 76,109, 29,139,197,130,229,201, 41,103, 55,206, 56, 93, 46,153,183, 53,206,202, 27,127, 49, 95, 96,159, 56,206,207, 47, 24,251,
-238,224,212,208, 10,147,235, 67, 34, 26,250,200,130,115, 93,224,119,224, 53, 8, 23,251,217,169, 69, 42, 19, 44,133,214, 9,101,
-229,115, 89,109,241,163, 20,246,152, 34, 62, 6, 84,200, 36,173,196, 97, 16,252,190,176,183,155, 53,219,245,154,211,179, 51, 22,
-167, 39,212,109, 75,213,212, 88,107, 73, 86,161, 83,190,150,238,246, 97, 20,229, 95, 77,167,174,174,137, 27, 37, 5, 47,199,196,
-124,185, 40,174, 85, 41, 80,139,229, 9,166,170, 8, 41,210, 90, 1, 29,150,101, 27,214, 41,114,244, 98, 27, 13,153,202,166,178,
-119,135,177, 11,228,236,169,172,176,223, 67, 8, 12, 99,160, 89, 84,164,164, 36,252, 68, 41,218, 90, 19,188,231,228,100,201, 48,
-140,244,155, 29,126,204, 44,231, 21, 77, 83,177, 89,175, 49, 70, 98, 94,189, 15,220, 60,155, 19,162, 39,164, 76, 23, 32,154,138,
- 15,158,236,120,119, 21, 88, 97,240,206, 50,120, 47,135,116, 86,228,168, 65, 37,158,172, 70,170, 60,114, 98, 20,103,198,114,107,
-209,176,136,129,237,102,224,254,131,129,110,117,143,221, 75,115, 94,254,216, 41,179,121, 35,171,155,217, 9, 89,201, 10, 50,122,
- 47,164, 56, 91, 19,162,208,233,134, 49, 80, 13, 94,208,192,101,215,168,116, 33,207, 21,212,106, 74,161,184, 58,196,205,147, 83,
- 32, 71, 79,240,158,177,219,209,109, 54,108,215, 43,252,208,177, 27, 3,253, 24, 65, 59,172, 54,212, 78, 72,118, 40, 67, 91, 34,
- 92,171,186,150,177,110, 33,225,197,152,232,250, 81,114,238, 17,243,198, 56,200,215, 42, 69, 68, 4,125, 74, 75,103, 58,155, 53,
- 60,206,147, 37, 76,147,114,194,143,158,186,149,201,161,177, 51, 66, 12,251,120,222,169, 33,243,227, 72, 61, 63, 67,171,109,201,
- 85, 72,104, 43, 77,130,209,169,156, 81, 98,241, 99, 15, 10, 99, 31, 98,100, 38, 18,168, 81, 7,135,140, 86,135,231,250, 40,134,
-213, 20,199,140, 51,186,184, 85, 74, 61,209, 26, 93, 46,224, 49, 40,188,201,184,160,240, 90,147,146, 41,187,127,181, 7, 64, 77,
-240,158,252,244,138,118, 15, 85,219,231, 61,146,137,135, 24,220,114, 73, 53, 71,113,201,148,169, 69,204, 90,242, 42,198,196,208,
-119,108,214, 91, 86,151, 87,204, 79,102,156,172, 87,156,220,184,201,252,228,132,122,177,192,182, 51,116, 51, 71, 85, 50, 49, 82,
- 90,139,162,223,105,148,145,181,118, 46,171, 69, 7,204,180, 22, 48,150,214, 36,165,201,221, 64,240,146,136,232, 16,118,192, 52,
-122, 80,218, 92, 59,143, 82, 78,251,117,108,136, 17, 43, 86,170,194,244, 78, 1,163, 20, 33, 78,254,116,181,127,177,153, 68,111,
-197, 2,101,237, 97, 60,152, 83, 6,123,216,139, 84,214,236, 81,139,198,136,152, 38,149,157,101,192,163,178, 18,149, 95, 78,251,
-176,123, 10,241, 40, 77, 35, 78,117,224, 34, 79, 22,137, 92,198,241, 83, 17,152, 20,216,249,168, 72, 40,173,121,249,149, 87, 89,
-117,153, 59, 55,111,241,157,183,223,166,210,154,155,103, 11, 78,230, 45, 58,103,162,181,180, 85,203, 39,158, 59, 97,110,192,135,
-154,104, 18,201,104,148,142,104,149,120,178, 94,241,220,173, 79, 48,170,115, 78,195,200,102,125,201,226,249,143,177,238, 54, 60,
-184,123,151,136,230,225,253,183,120,242,248, 33, 74, 69, 82, 28, 81,203, 5, 99, 31, 8,131, 40, 83,157,155, 49,155,223,224,107,
-223,186, 32,180, 3,191,230, 43,127, 59, 63,250,123, 53,127,246,199,255, 20,143, 46, 55,252,208, 87,127, 35,111,188,241, 58, 39,
- 77, 75, 55, 12,242,115, 80, 50,218,228,120,191,140, 8,104,140, 54, 83, 43, 76,219,182,242, 3,142,162, 2,143,222,179,219,110,
- 37, 89, 41, 38,170,170, 69,105, 45,104,205,130,102, 77, 19,103, 93, 27, 30, 93,174,121,169, 94,178,126,252, 0,227, 47, 33,121,
- 34, 90,226, 93, 39, 95,161,202,207, 80,255,247, 55, 68, 33,248,203,255, 84,249,153, 77,137, 0,123,198, 66,222,107, 36,116,193,
- 73, 50,133, 91,112, 0,237, 76,159,227,136, 77,124,164,177,201, 36, 21, 5,207, 88,222,108,117,221,112,114,178,228,230,205,155,
-220,188,117,147,211,147,211,253,168, 78, 17,105,230,115,176,154,144, 50, 23, 23, 87,120,239, 81,218,148, 55,141,197,153, 4,166,
- 20, 75,173, 65, 89,116, 6,163,227,225, 98,165,167,105, 84,137,200, 60, 58, 24,166,142, 94, 14, 49, 17,167,144, 82, 25,249, 26,
- 84, 93, 19,140, 65,133, 32,254,224, 40, 23,103,149, 19, 49,143,232,152, 72, 41, 48,248,145,190,219,177, 93,175, 56, 89,223, 96,
-113,114,202,124,185,164,105,103,184,198, 21,236, 35, 37,240,226, 0,227, 56,214,183, 28,116,117,106, 15,243,120,122,202,242,140,
-144,113,122,170,178,218,175,206,180, 41,207,150, 42, 62,112, 20, 85,219, 82, 55, 14,109, 34,206, 24, 66, 14, 36,149, 4, 32,211,
-192,160, 35,138,150,148,118,204, 27, 69, 74, 3, 90,105,124, 31, 80,133,246, 22,124,207,208, 7,152, 80,170, 49, 17,119, 3,179,
-179, 37,105, 12,212,117,205,182,219,145, 48,172, 59,207,162,133,166, 81,108,118,107,162, 86,248,100, 25,187,145, 23,111,182,100,
- 21,217, 38,207,118, 23, 24,187,154,116,186,228,175, 62,250,128,157, 50, 36,101, 25,125, 46, 0, 35,241,120, 7,162,224,108,147,
- 70,101,195, 85,138,168, 69,195,106, 24, 56, 67,113, 54, 59,161, 31,118,156,119,129,225,238,134, 68,226, 99,119,102,204,150, 51,
-236, 92, 81,185,150,170,174,160,106, 75,254,132,102,244, 1, 55,120, 6, 55,208, 86,174, 0,137,202,202, 42,235,242,156, 9,164,
- 75, 30,165, 68, 86,137,196,193,169,145,188, 64,138, 66,148, 20, 67,159, 52, 41,155, 61,119,190,109,103,216,166, 69,219,138, 69,
-187,160, 54, 14,109, 20,195,232, 89,143, 43,134,173, 39,238, 32,134,200,214,175, 9,106, 68,133,140,209, 21,219,177,103, 86,207,
-168, 75, 76,234, 48,116, 36,239, 25,131,228,168,251, 49,145, 91, 45,151,227, 90,118,232,153,130,138, 54, 10,107, 91, 84, 10, 24,
-109,136, 49, 97,210,200,216,107,154, 51, 11, 5, 7,236,138,182,100, 54,107,168,117,222,231, 61, 29, 50, 33,166, 73,173,218, 71,
- 50,235,169,193, 43,150, 87,233,216,167,115, 96, 58,229,228,204,217, 95,170,201,232, 28,209, 73,166,115,135, 96, 41,185,196,104,
- 45,142, 64, 56, 38,147, 23,118, 74,217,169, 79, 69,111, 58,211,242, 4,204,201,106,175,166, 87, 40, 82,217,160,161, 20,217, 8,
- 13,210, 29, 93, 60, 2, 98, 43, 83, 17, 48, 35,145,204, 48, 4, 86,187,200,197,118, 96,185,241,220,218, 68,110,220,242, 44,207,
-122, 73,128,155,247,152,102, 64,213, 51,178,157,161,116, 45,211, 28,196,201,161,141,134, 90, 2,118, 48, 21,202,181,152,118,129,
- 91,108, 25,250,142,177, 31,165,176, 39, 17, 98, 82, 44,191,135, 11, 72,129,246, 76, 49,215,249, 40,122,245,120,108, 62,117,134,
- 57,202,156, 94,171, 99,213,224, 20,161, 46, 89,191, 89,171, 3,198,245, 72,153,174,148,168, 49,109, 73,221,145,131,104,234,184,
-133,229,173,114, 46, 89,184, 19,204, 38,239,133, 98, 2, 54, 17, 48, 1, 89, 0, 41, 82,255,211,135, 28,174, 7, 36, 96, 46,254,
-226,151, 62,246, 50, 95,123,253, 45,182,155, 21, 97,232, 89, 46,102, 60,255,252,115,178,251, 81, 80, 53, 45,139, 89,203,114,214,
- 18,186, 53, 94, 69,118,157,103,209,182,156, 45, 90,102,149,103,237, 35, 23,157,167,215, 53,151, 81,177,125,114,129, 25, 34,155,
-221,142,245,110,135, 54,134,147,147, 5, 99,236, 80, 57, 9, 82,246,236,148, 11,127, 69,138,129,147,211, 27,204,231, 75,252,144,
-248,230,183,222,230,235,223,122,135,183,238, 62,224, 31,250,159,254, 46,126,207,239,249,199,248, 47,254,179, 63,194, 95,248,137,
- 63,197,247,127,249,215,161, 93,195, 55, 94,255,101, 86,155,181,144,143, 14,219, 7,241,115,154, 18,107, 88,194, 12, 8, 1,148,
- 98,187,221, 80, 91,139,247, 35, 77, 93,149,220,231, 26,107,221,254,245,152,118,114,125,223,147,209,140,163, 8, 46, 98, 82,120,
-239,121,225,198,146,135,239,189, 95, 70, 77,154,156,197, 90, 51, 5, 35,236,237, 86,211,115,241, 17,241, 62, 31,218,137, 31, 95,
- 4,246,184,198, 67,142, 77,254,176, 63,159,159, 30, 49,231, 67,214, 64,150, 8,211,202, 57,150,203, 5,183,110,223,226,214,237,
-219, 18, 20,226, 36,123, 93,229, 64, 61,246,146, 47, 80,128, 50, 93, 55, 20,165,124,192,165,233, 64, 40, 76,102,109,200,218,138,
-127, 87,167,103,216,213,170,136, 6,143, 93, 0,215,148,253,147, 34, 57,165,107,186,136,105,100, 40, 35, 82,179, 23,224, 9,104,
- 35,226,125,143,207, 81,130, 38,118, 27,118,155, 53,179,229,146,197,242,132,147,211, 51,102,203, 19,154,217, 28, 87, 89,140, 21,
-156,164,177,178,115, 60,222,249,127,104,110,146,250,149, 44, 73,142,131, 54,212,145,241, 96,207,241,147, 14,197, 90,102,179,134,
- 60,136, 29,106,175, 30,182,153, 33, 38,114,200,104,101, 56, 89, 24, 70, 31, 72, 89,179,235, 19,139, 90,227,195, 64,163, 28, 41,
- 5,156,149,216, 96,157,179,232, 90, 42,135, 79, 50, 61, 50,218,240,228,209, 10,109,160,105, 28,227, 40, 29,110,215, 5,148,173,
-193, 36,170,182,101,183,221,176, 38, 50,218, 10,218,138,111,127,240, 16,143, 92, 46,198,144,168, 49, 40,149, 24, 21, 4, 45,126,
-115, 21,193,230,204, 92,139,175,250,211,191,238,123,121,255,157,119,184,247,214,187, 68,155,104,201,120, 5,187, 81,241,222,251,
- 59,140, 31,185,121,219,211, 38, 69,110, 37, 82,213, 90,183,119,163,132, 16, 25,134, 17,103, 45, 67,235, 69, 0, 25, 19, 46, 79,
- 26, 16,233,144,149, 78,232, 92, 4,126,229,208, 77, 49,146, 66, 20,198,187, 22, 65,155,117, 13,224,208, 78, 49, 63,169,168, 93,
-195,169,157, 17, 43, 67,111, 96,213,111,232, 55, 91, 46,159, 92,176, 90,173,232, 66, 15,212,216,188, 64,105, 67, 84, 61,218, 4,
-226, 24,105, 76, 77,183, 91,113,165, 53,205,108,198, 98,113,194, 24, 2,219, 97, 96,232, 3,193, 11,120, 69,246,175, 81,224, 56,
- 89,206,235, 24, 2,202,137, 69, 45, 5,143,115,146,145, 96, 84,161, 7,106, 37, 57,222,229,105,177,214,130, 3,171,210,222,159,
- 30,179,218,139,156,211,209, 26, 77,115,189, 59,159,108,169,162,150, 87, 71,116,200,184, 95,171,198,114,113,182, 9, 82,113,179,
- 40, 83,166,117, 70, 48,194, 57,150, 80,168,152, 80,113, 66, 77, 79,168,109,217, 63, 79,157,251,164,217,202,165, 94,229,105,186,
-144,179,104, 7,204, 65, 59,147,141,172,139, 53,130,242, 86, 5,148,149,146, 34,229,178, 90, 49,134,164, 12, 67,140,116,222, 51,
-248, 53,195, 32, 32,164, 97, 56,225,116,244,180,227, 64, 53,247,216,214,163,235,128,114, 51,180,107, 5, 55,173, 53,218,213, 36,
- 99,200, 70,166, 64,214,141,152,122,129,155,117,132,177, 39,140, 30, 63,122,162, 47, 19,110,226,225,236,217,159, 71,165,185,152,
-158,179,252, 17,209,171,251,131, 43,179, 15, 82,121, 90, 69,168,181, 42,129, 21,215,247,220, 41,149, 31,238,180, 35, 85, 28,141,
- 87, 36,221, 76,165, 52, 1, 19,247,168,193,116,244, 98, 79, 36,185,201,103,120,252,131,201, 41, 31, 21,119,174,137, 35,166,180,
-179,148, 18,247,239,221,163,105, 22, 52,117,197, 11,207, 63,135, 41,171, 5,149, 51, 85, 85,115,114,178,192,170,140,223, 73, 39,
-101,180, 56, 0,110, 46,231,220, 92,244,208, 43, 30, 93,156,147,236,140, 43, 31,153,205, 91,114,132, 85,239,247,211,132,172,149,
- 76,171,147, 98, 59,140,220,187,255, 8,223, 13,188,242,242, 43,204, 79,207,176,166,162,117, 13,177,223, 17,147,231,155,127,229,
-231,248,143, 47, 30,243,233,207,127,142,223,245,187,127, 23,191,241,111,253, 13,252,203,255,210,255,134, 47,127,225,211,124,241,
-203,223,195,207,253,220,207,241,205, 55,222,160,235,251,210,217, 38,148,145, 55,129,143,145,148,227,254,114, 53,120, 79, 63,244,
- 88, 51, 35,248, 17,133,162,105, 26,102,243, 57, 73, 73,208,136, 42,158,237,132,198, 71, 97, 72,247,195, 64, 46,225, 36, 67,183,
- 35, 47, 43,194,216, 9,176,225, 87,185,175,253,213,236,117,243,190,170, 31, 9, 31,243, 95,123,182, 60, 37,183,181,179, 25,139,
-147, 19,150, 55,111, 80,207, 90,180,171,229,176,200, 17, 59, 86,228,156,241,253, 64, 28, 70,174, 46, 87,248, 84,102, 11, 73,198,
-226,186,140,177,116, 73,119,155,118,127,199,197,153, 3,180,247,187,106, 4,142,187,247,227, 66, 43, 54, 56,137,180,220, 23,245,
-201, 78, 7,228, 28, 72, 62, 49, 70, 79,240, 61,187,221,154,245,213, 37,235,171, 11, 78, 78,110,176, 56, 57, 99,182, 88,148,136,
-217,154,228,100, 55,167,203,190, 93,235,167, 51, 22,242,209,175,211,119,121, 5,255, 26,145,175,197,174, 84,185, 10, 31,252,126,
-106, 55, 36,136, 30,156, 53, 16, 35,173,181,108,122,143,211,137,121, 91, 49,164,145, 33,106,176,146,215, 93,149, 78, 93,108,111,
- 25, 31, 19,149, 51, 44,230, 51, 82,140,180,173,208, 15,119,219,142,190, 31,184,117, 86,239,215, 23, 40, 73,179, 90,239, 6,110,
- 61,127,194,147,245, 14,188, 34,181,115, 46, 66,226, 98,117,197, 16, 19,119,102,138, 71, 93,166, 82,153, 23, 80,156,213,115,222,
-246, 91, 46,117, 70,231, 26,157, 60, 21,129, 19, 21, 24, 52,252,244, 95,248, 25, 82,202, 60,103, 52, 39,181, 98,211,121, 26,103,
- 33,100,198, 49,241,240,145, 39,171, 29, 39,165,161, 80,204,246,190,102,107,229,184,140, 49, 50,122, 89, 41,140, 62, 18, 82,150,
-236, 70, 99,209,206,237,121, 9, 74, 91, 1,106,133, 8,190,120,141,147, 76, 19,180,113,212,205,140,197, 9, 66,122, 43,195, 49,
-173, 45,235,208,179,186,127,193,253,187,239,115,241,232, 17,195, 48,146,219, 22,123,227, 6,243,122,193,188,189, 65,174, 79, 36,
-112, 36,142, 48,118, 50,178,183,150,238,201, 3, 54,126,203,102,220,242,228,241, 21,214,212,232,236, 72, 3,248,161,120,157, 19,
-248,209,179,108, 91,252,174, 39, 37, 7, 74,149, 56, 89, 71, 12,158,153,209,164,224,101, 95,157, 68,244,105,149,134, 36, 35, 94,
- 89,233, 29,240,181,153,169, 75, 62,226,149, 76,194, 52,109,175, 37, 2,230,156,247, 22, 62,209,204,168,131, 94,170, 20,226, 24,
- 19, 33, 39,188,162,164,221,129,201, 69,225, 95,138,170,193,144,178,196, 39,167,156, 24, 66,192,143,177,184,169, 38, 71, 75,177,
- 75,239, 93, 93,229,215, 19,119, 62,139, 53,179,114,150, 38, 59, 26,101, 81, 41,151,136, 97, 83,104,129, 19,233,178,184,234,203,
-223,143,182,226,166, 65,166,130,219,126, 68, 93,110, 37, 79, 35, 68, 78,188,167, 29, 3,205, 24,168,102, 1,219, 72, 70,132,113,
- 53,202, 58,201, 22,208,166,216,225, 28, 90, 7,156,245,216,102, 70, 10, 35, 49, 68,252, 56,136, 78,194,143, 18, 62,149,226,181,
-115, 40, 37, 41,248,228,131,115,199, 62, 21,194,120,237,237, 46, 69,247,250, 49,176,247, 17, 38, 80, 33,161, 84, 68, 27,201,230,
- 85, 33,236,199, 21,250, 40,131,125,130,212,164, 36,220,244, 24, 34, 62,200, 27, 99,244,161, 28,164,229, 34,176, 39,255,112, 77,
-141,156,179,122, 74,237,206,209,110,253,240, 85,159,221,184,197,207,255,252, 47,160,141,230,254,195, 15,152,205,106,218,166, 46,
-201,110, 98,223, 73,133, 3,157,115, 44,168,214,200,108,230, 80,118,198, 48, 70, 94,184,117,202,227,111, 63, 68,155,154, 77, 31,
-113,243, 51,230, 55,158, 35,165, 72, 55, 6,250,221, 21,214,104,182,235,149,216, 84,202, 8,233,209,249, 99, 94,121,238, 37,110,
-223, 60,163,153, 47,177,182,161,173, 90,154,153, 37,197,192,122,181, 99,251,228, 17, 63,251, 19,119,185,255,222,183,249,125,255,
-250,191,204,191,245,111,253,126,254,217,127,250,159,228,214,173, 91,252, 61,191,229,183,240,155,126,211,111,226,199,127,252,199,
-121,243,205, 55,247, 74,200, 49,196,235, 86, 49, 5, 87,155, 21, 85,137,243,155, 53, 45,198, 57,225, 4, 27, 91, 4,131, 25, 99,
- 69,212,215,143,158,156,161,235,123,114, 86, 2,120,208,134, 28, 61, 15, 31,188, 43,196,168, 41, 16,225,187, 22,132,191,177,189,
-250,245, 68, 49,117,212,169, 31,235, 40,212,119,217, 11,151, 34,155, 51,218, 24,234, 89, 67,179,156,227,218, 86, 66, 23,148, 65,
-101,129,130, 80,138,122,246, 1,167, 12,157, 31,229, 98, 84,172, 84, 94,121, 40, 81,171,101,109,118, 36,136,203, 79, 77, 23, 14,
-194,191,227,103,242,248, 57,124, 90,104,167,202,254, 95, 46, 14, 98,137,218,191, 9,247,191,239,112, 0,166, 16,137,190,199,119,
- 35,221,106,195,250,201, 21,179,197,130,249,201,137, 76,125, 78, 79,139, 13, 78,114,218,173,227, 40,179,185,176,116,212, 36,110,
-213, 60,171,253,253,149, 43, 29,149,130,152,161,110,103, 92, 93, 93,225,172, 67,105,143, 70, 44, 84, 85,173, 9, 62,208,182,142,
-203,208,211,154,204,114, 86,243,120,227, 89,247,137,100, 0,167, 80, 90,144,190, 26, 75, 24, 70, 92, 93,179, 88, 44, 8,222, 83,
-233, 74, 56, 16, 93,207,229,213,150,229,204, 48,111, 27,182,235, 45,203,121,205,229, 85, 15, 70,225,172, 69,101,195,218, 39,220,
-252,132,135,187,129,123,235, 14,231, 52, 55,158,107,184,217, 52,188,247,238, 37,131, 79,204, 73,188, 52, 38,186, 12,107,149, 73,
- 42, 16,108, 38, 69, 56, 33, 81,107,135, 31, 51,157, 50,204,106,197,103, 62,253, 2,231,151,151,188,255,254, 90,136,117,217,176,
-233, 35,230,201,136,182, 91, 42,163, 49,229,113,109,148,172, 12,141, 58, 8, 44, 67, 82,132,172, 73,130,252, 2, 91,161, 93, 37,
-137, 92, 58, 73,222,183, 18, 55, 81, 28, 61,201,199,178,221, 40,192,148, 8,218, 56,134, 81, 44,169,227,224,185,188,186,228,253,
-251,239,242,240,209, 67, 84,138, 52,202, 49,111, 78, 89,204,159,103, 55, 58,250,177,198, 53, 75,186, 92, 51,238, 50,173,170,201,
-235,192, 75, 47, 62,135,214,153, 56,247, 52,106,137,242,107,226,213, 57,221,122,141, 74,154, 52,102, 86, 87, 91, 66,144,177,125,
- 28, 3,237, 89, 67, 30,227,158,205,157,179,160,128,115, 12, 40,149, 48,101, 7,110,140,197,106, 43,228, 52, 13,202, 30, 24,234,
- 50, 17,151, 14, 59, 78,163,224, 82, 40,100,125,165,203,132,167,236,177,245,225,253, 65,209, 27, 8,184,167, 4,149,164, 36,110,
-148, 16,133,146, 86,186,120,227,172,228,108, 56,183,167, 84,230,172, 8, 81, 52, 29,253,152,216,237, 70,186, 97,144,100,179, 16,
- 36,252,164,124,222,169, 67, 79, 81,138,125, 46,161, 68, 6, 69,219, 52, 44,102, 50, 14,175,178, 43,121,232, 69, 35,102,109, 97,
- 42, 36,116, 10,160, 98, 1, 91,153,194,194,144, 52, 62,107, 12,202, 72, 8,217,118, 27,136,113,197, 56,142, 44,251,129,249, 48,
- 72,215, 62,235,209, 51,143,173, 91,140,107,196,223,174, 43,178,178, 96,181, 76,192, 77,144,169,172,243,178,122, 16,152, 12,209,
-143,164, 48, 8,133, 49, 6, 41,238, 69, 47,161, 52,168,164, 32,137, 51,197, 30,119,230,199,163,246,143,220,199,229,137,252, 19,
- 80, 37, 86,114,242,180,135, 32,201, 63,206, 89,162,181, 4, 31,177, 78,132, 23,178,183, 63, 40, 21,253, 24, 15,242,125,142,247,
-226,234, 90,222,250, 94,233,151,143, 40, 96,234,169,168,215,163, 3,172,235, 6,222,124,235,109, 82, 78, 60,122,244,128, 91,183,
-207, 4, 84, 80,254,172,210,162,214, 84,198,162,178,194, 84, 51,130,170, 88, 13,154,176, 81, 52, 77, 77, 82,137,155, 39,115,238,
- 95,108,152,235, 26,223,175,185,122,108,216,245, 35, 57,244,168,148, 8,253, 8, 68, 14, 36,250,140,211,154, 69,237, 80,113,160,
-223, 38,124,184, 98,104,102,216,249,140,170,157,115,187,158,177,189,188,164, 34, 48, 94, 62,226,143,254,161, 63,200, 63,251,191,
-248,231,248,145, 31,249, 17,254,195,255,240, 63,224, 63,255,207,255,115,190,252,165, 47,241,187,254,209,223,197,227, 71,143,248,
-201,159,252, 73,190,241,198, 27,244,125, 15, 74, 4, 42,192,222,199, 62,159, 47, 72, 41, 51,134,136,241, 65,246,206,214, 81, 87,
- 45,193, 11,215, 89,107,232,118, 61,125, 8,152,170,193, 26, 71, 72, 35,206, 24, 20, 35,195,176, 66,169, 80,212,158,166,220,214,
-210, 65,113,174,142, 46, 82, 71,201, 94, 31,230, 67, 63,216, 73,174, 63, 43,211, 14, 56, 95,139,104, 60,248,181, 14,201,123,135,
- 34,249,116,180,232, 52, 6,223,199,152, 66, 73,113,146,248, 75,237,138,141,132, 44,135,175, 15,212,139,158, 56,140, 0, 84,190,
-103,244,137, 49,100,250, 81, 18,239,134,126,160,202,194,101,215,197,130, 50,125,191,215, 32, 52, 71,251,170, 61, 50, 55,198,253,
-200,235, 35,173,127, 41, 99,157,222,243,193,167,116,183,253,231, 79,186, 76,167, 18, 49,196,253, 63,253,232, 25,187,142,245,234,
-130,234, 73,195,226,228,140,197,217, 77, 41,238,203, 19,102,139, 57,174,113, 84,149,236, 90,173,211,104, 43,168, 81,101, 52, 89,
-165, 67, 23,116,228, 92, 57, 22,219,165,148,159, 18,222,237, 61, 70,251, 29,103, 76, 71,121, 13,197, 50, 67, 22,170,155, 15, 1,
-104, 72, 33, 83,181, 26,171, 13, 49, 25, 66,206, 12, 62,113,179,109,232,199, 43,102,243,134,174,135, 28, 21,203,153,116, 32, 57,
- 68, 84,237,128,204,110,187, 67,161, 56, 93,182,108,183, 27, 50,154,222,203,148,207,123, 56,187, 49,231,242,209,154,230,206, 41,
-111,172, 59,222, 63,223,241,210,201, 28,157, 71,110,220, 60,195,205,231,220,190,239,249, 78, 90,115, 47, 69,110,229,145, 87,219,
- 26,223,117,244,217, 19, 48,204,149,226, 76,195, 16,162, 48, 6,178,231,181,215, 94,225,147,159,125,133, 87,195, 72, 91,125,155,
-247,222,126, 76,165,106, 82, 28,232,134,200,176, 25,217, 85,235,162,136, 54, 88, 83, 9, 34,181,232, 15,148,113,132,108, 64, 59,
-208, 21,198,181,216,170,193,184, 10, 91, 57,140,137,228, 33,136, 16,177,144, 46,115, 20, 1, 81, 78,153, 48,122,134,110, 96,189,
-217,176, 90,173, 88,173,175,120,242,232, 49,247,238,221, 37,196, 30,229, 12, 89, 85,108, 83,205,147,171,204,213,147,199,188,115,
-190,225,114, 59,176, 13,145, 45,137,117,231,105,173,225,249,217,156,155,139,150,197,188,225, 51,159,124,133,231, 78, 91, 22,218,
- 50,179, 75, 66,216, 49,140, 59,186,174,151, 20,199, 40,232,111,171, 12,109, 85,211,179,195, 85, 21, 33, 21, 75,103, 18,244,111,
-244, 35,186, 88,230,166,240,166, 76, 70, 89,249, 25,251,148,241, 26, 97,241, 39,137, 81, 22, 48, 78,249,125,170,172, 81, 11, 98,
- 72, 29,233, 84, 4, 42, 35, 35,111,117, 52, 93,157,124,216, 99, 8, 37,143, 65,114,211,181,145,149, 91,211,212, 52, 89, 83, 99,
-200,133, 7,143,130, 68,148,236,244,172,217, 13,137,221,110,160, 31, 6,250, 16, 8, 83, 65,223,219,190,138,149,186,236,217,157,
-145, 73,102,229,236, 53,162,103, 85, 85,184,166, 46, 48,164,140,114, 9,180,223, 35,204,125,204,104,155,209, 81, 86,201,186, 92,
- 58,140, 53, 40, 45,169,193,221,118, 20, 70,197, 48,226,135,129,166,239,169, 66,160,106, 6,108, 61, 67, 59,143,170,102,100, 91,
-147, 85, 89,241, 24, 39, 23,243,108, 73, 41,162,117, 36,235,145,108, 44, 42,200,170, 48,143, 61,113, 28,136, 57, 20,225,121, 32,
- 7,225, 56, 20,161,220,245, 78,253,248,160,253,107, 89, 97, 38, 5,102, 8, 1,239, 61, 85,101,241, 94, 24,233,163,181,184,146,
-161,124, 8, 34, 18,123, 74,138,169, 92, 2, 34, 33,197, 50,238, 83,135,126,237, 41, 98,220,164,198, 86,170,196, 16, 78,234,229,
-233,215, 71, 92,162,110, 24, 75,214,117,162,170, 28,109,219,162,114,198,106, 73, 29, 83, 70,203, 15, 58, 43,208, 53,217,106, 76,
-115,155,155, 55,111,179,139,145, 55, 63,248,128,139,203, 75,249,124,202,210,184,134,231,207,110,179, 75, 22, 63, 6,102, 39, 39,
-108,214,163, 28, 78, 71,175, 71,107, 53, 39,117,197,139,183, 79,217,245, 27, 54,195,200,166,243,116,157,199,163,184,113,227, 22,
-183,111,156,113,231,198, 25, 90, 53, 52,181,227,234,193, 3,254,211,255,228, 63,225, 71,127,228, 71,248, 47,255,248, 31,167,239,
-122,222,250,214,155,188,247,206,187,124,254,243,159,231, 71,127,244, 71,121,253,245, 55,248,147, 63,246, 99,124,251,157,239,112,
-180,145, 38,197,200,106,181, 66,151,177, 96,101, 29,221,208, 11,155, 60, 69,118,187, 29, 85, 85,203,110, 41,139, 53,206, 90,135,
-143,114, 33,170,172,197,230,129, 20,123,108, 46, 86,182,130,101,253, 27, 29,191,127, 24, 67,224,233, 2,125,205,249,157,143,255,
-169,190, 75, 19,153, 15, 11,249,148, 80, 41,147,163, 92, 16,166, 0, 9,165, 53,202, 85,232,166,197,206, 22, 84,222,131,214, 84,
-190, 21, 86,188,143,116,131,103,179, 27,232,123,143,239, 18, 49,120, 76, 93,149,219,255,244, 20,166,189,240, 39, 39,245,140, 64,
-238,250, 56,253, 89, 92,242,244, 21, 79,120,225,125,104,210,228, 95, 85,194, 26,139, 65,216,243, 70,203, 24,214, 16, 11,137, 45,
-224, 7,216,110,215,172,214, 87, 52,231, 79, 88,158,156,113,114,122,131,211,179, 51,218,147, 37,139,197, 66, 2, 55, 42,131,118,
- 66, 54,211,133,143, 45,127, 95,122,230,162,117, 72, 80, 84, 71, 26,152,195, 26, 75, 23,173, 93, 74,224,251,145,126, 16,232,137,
- 37, 99,172,145, 53,134, 14,196,172,240, 94,172,102,179, 89,133, 31,165, 35,210, 40, 17, 82,229,120,184,140,165,204,205,179,133,
-168,229,179,168,135,155,155, 53,171,213,154,161, 79,220,186,189, 20,203,155,145, 96,164,109, 63,224, 19, 44, 79, 22,172,183, 91,
-102,139, 57, 79,186,192, 59, 79,214,212,214,178,219,246,156, 46, 27,118, 99,224,172, 85,124,230,249,231,120,231,189, 13, 23, 38,
-243,110, 74,188, 28, 2,175, 25, 67,149, 44,137,138,160, 51,219, 60,114, 63,121, 46,115,228,244,198,156,239,253,254,239,225,108,
-233, 72,227,192,175,253, 82,205,246,201, 95,102,117, 53,150,187,152, 98,236, 37, 87, 32,132,145, 24, 71, 82,240,164, 88,145,167,
-214, 93, 75, 10, 29,198,161, 77,133,182, 21,166, 48, 19, 92, 93,163,141, 23, 57,233, 96,241,122, 26,224,107,177,136,141,158, 56,
-140,116,219, 45, 87,151,151, 92, 92, 92,240,248,241, 67, 86,151,231, 98,199,139, 53,219, 46,115,239,188,231,114, 28,185,223, 95,
-242, 15,254, 51,191,151, 63,250,135,254, 35,186, 16, 81, 65,168,159, 89,193, 42, 6,214,187, 13,183, 98,135,122, 48,242,203,111,
-190,195,243, 39, 51, 94,125,225, 22, 47,223,156,115, 82,213,228,228, 57,127,114, 65,223,201,243,168,178,198, 25, 57,159,115, 74,
- 50,102,182, 72,115,160, 53, 57, 13, 4,223,163,103, 11, 81,149,187,226,129,119,142, 49, 37,162, 82,172,251,129, 33, 71, 9, 98,
-205, 2,133,153, 40,103,249,154, 79,253,144,214,104, 38, 94,126, 89, 33, 26,163, 75, 14,131,224,200,199,224,241, 62,210, 23, 23,
-143, 15, 18,108,101,140,166,105,148, 20, 54,155, 36,222, 28, 45,244, 60, 20,218,102,148, 13, 68, 60, 62,101,186, 49,176,238, 6,
- 58, 47,228,181,156, 15,141,225, 36,232,155,118,255,141,181,180, 77,216, 83, 35,235,186, 97, 54,107,152,207, 91,234, 89,139,173,
- 44, 33,101,172,143,194, 32, 16,244, 35, 49, 33,252,130, 50,194,183,197,154,102,157,161,178, 10, 91, 98,137, 99,200,108, 55, 35,
-227,152,104,135, 72, 51, 38,102,243,145,122, 54, 98,155, 1, 21, 70,116,189, 64,185, 90, 10,122, 89, 71,100,244, 62,216, 76, 68,
-232,186, 36, 62, 76, 81,216,153, 28,124, 33,205,245,228, 16,101, 2, 19, 2,230,214,114,246,175, 31,118,229, 92,203, 42,207, 74,
-237,111,238,146,135,171,246, 64,144, 3,225,109, 26,149,199,253, 8, 69, 4, 74,197, 48, 31, 11, 49,174,252,133, 33,148, 75, 64,
- 16,224,199, 30, 13,155,143,243,220, 14,249,184,123,112, 96,137,221, 99,207, 23, 47, 29,144,210,251, 28, 89, 83,178,138, 49,114,
-187,115,206,238, 25,185,166, 16,202, 82,201, 58,142,202,160,116, 67, 51,187, 65,204, 53, 15,207,183,220,125,116,129, 87, 21,203,
- 27, 47,130, 59, 1,179,224,244,236,121,154,246,132,171,237, 14, 91, 57,214,235,115,172,133, 56,121, 65,203,193,120,214, 84,204,
- 13,204,156,102,117,117,206,229,250,146,243,203, 11,250,110, 75,238,119,248,237,138,251, 15,222, 39, 19, 89,158,158,178, 88,158,
-114,235,230,115, 60,122,124,206,157, 23,238,176, 92, 44,249,249,191,252,151, 81, 74, 81,213, 53,247,238,223,227,245,111,190,206,
-103, 63,253, 25,126,219,111,253,251,185,115,251, 54,231, 79,158,176, 94,175,247,215,152, 73,109,150, 82,162,170,228, 86, 57,107,
- 91,172,177,184,202, 73,178,145,147,241,145, 46,224,136,126, 28,247, 66, 13,194, 6,252, 5, 86, 5, 84,158, 84,153, 9,133, 40,
- 98,213, 33,142,239,153,145,244, 49, 39,224, 90,228,226, 81, 75,255, 97, 86,177, 67,225, 87,197, 99, 89,118, 91,199,140,232,163,
- 63,167,143, 50,206, 81, 96, 20,204,234,134, 91,103,103,220,186,117,139,118, 62, 71, 91, 39, 74, 82,142, 98, 97, 11,177, 80, 84,
-166, 66,138,170,234, 26, 87,201,135,209,134, 28,101, 31, 55,198, 40,163,249,148,158, 25,177,167,116, 88, 5, 77, 29,250,212,209,
-164,167,149,240,240,148,215, 93,145,149,190,254,253, 79,136, 95,107, 49,206, 96,156,198, 90,208, 58,210,180,154,147,147, 10,133,
- 4,243,132,152,196,254, 52, 14,116,219, 53,221,118, 67,183, 89,211,119, 91,250,126, 32,120,177, 71,165, 16,137, 49, 31,222,115,
-123,144,211,177,214,133,167, 46, 36,211,247,199,181,223,171, 82, 38, 36,136, 81, 49,172, 47,249,169,255,230,143,179,189,255, 62,
-202, 7, 66,200,248,148,152, 47,140,236, 37,149,101,232, 3,183, 78, 27, 44, 9,101, 29, 23, 23, 61,139,121,141, 82,162,240,175,
-234, 10,163, 27,186, 62, 16,131, 47,120,223,136,211,134,190, 31, 57, 57, 89,176,235, 6,148,242, 40,163, 72, 89,179,222,142,184,
-170,194, 56, 45,158,107,219,240,173,199, 43, 60, 48, 87, 6,171, 20,231, 67,143,173, 45,117,202,156,157,148, 53, 83,159,232,124,
-192,231, 76, 54,134, 78,193,144, 35,171, 20,184,159, 19, 79, 72,184,218,242,119,125,245,251,248,129,207,127, 22, 21, 18, 70,107,
- 28, 25, 66,224,205,187,143, 48, 90, 81, 27, 88, 84, 10, 87,101,154,214, 81, 85,117, 17,181, 57,156,171,229,223,171, 6, 91,207,
-153, 47,150,204, 78,150,204, 79,150,212,243,150,122,214, 96,234, 10, 76, 73, 30,143, 1,252, 8,222, 75, 39, 21, 2,190, 27, 24,
-182, 27,214,107,249,216,172, 87,108,174, 46, 25,187, 13, 67, 31,120,180,169,249,250,253,129,175,175, 18,119,189,225, 73, 82,188,
-243,232,156, 71, 23, 23,164,156,113, 25,110,161, 88,238, 89, 11,137,207, 63,127,198,103,150,115,218, 16, 25,188,231,151, 31, 92,
-240,164, 27, 72,202, 48,115, 13,219,135, 87,116, 93,194, 90,205,172, 53, 60,127,251, 38,179,102,198,118,187,195,213, 21,218, 56,
-124,212, 44, 22, 75,226,216, 97,194,142,198, 89,214,157,199,204, 78,105,150, 39,248,152,232,252, 72,172, 42,122, 96,136,194,237,
- 15, 73, 70,224,195, 24, 25,188, 32,146, 67,148,238, 61,164, 44,103,254, 52,254, 46,105,108, 62,202, 10,214,135,136,247,242, 53,
-247, 62,178, 27, 60, 93,239,217, 13,129,110,240, 12, 99,113,142, 40,141, 49, 66,217,108,154,134,186,174,169, 42, 87, 86, 67,154,
-152,193,199,204, 88, 58,253,193, 71,250, 16, 9, 49,239,189,220,185,100,193,103, 14,148, 74,103,141,136,166,231, 45,167,203,150,
-147, 69,203, 98, 62,219,235, 88, 92, 93,236,129,147,198, 44, 22,180,116,136,101,162,144,174,137, 99,173, 81,184, 2,204,169, 92,
-133,214,150,156, 53, 33, 36,161,224, 13,125, 1, 17,133, 50, 1,140,101,242, 25,143, 98,201,203,244,185,156, 29,135, 96,217,130,
-207, 45,138,180, 73,252, 27,199, 81,162,159,251,129,161, 31,158, 18,202,229,103,188,249, 18, 41, 56,117, 86,249, 89,252,244, 36,
-121,203,229, 69,141, 73,198, 38,222, 39,140, 14, 50,146, 40, 28,228,227, 12,235, 84,240,132,185, 32, 6,213,116,248, 21,170, 16,
-133,198,163,212,193, 5, 53,165,134,113,124,224,151,170,170,143, 9, 96,165,163, 19,203,196,129, 99,175,180,248,188, 99, 86, 52,
-205, 9, 89,183,188,241,214,187, 92, 60,185,162,105, 90, 94,253,244, 23,152, 47,207,168,155, 5, 15, 31,159,243,232,254, 3,134,
- 48,178,122,252, 24,159, 70,206,110,157,178,219, 40, 6, 63,200, 69, 68, 29, 46, 33,163, 15,172,125,230,219, 31,220,165, 27, 2,
- 67,206,248, 44,183,254, 6,152, 23,114,210, 7,119,223,101,215,109,249, 53, 95,252, 94, 62,255,185, 95, 67, 55,246,252,223,254,
-207,255, 9, 63,250, 79,252,147,252, 71,127,232, 15,129,214,108,135, 30, 3, 92, 93, 92,240,147,127,246,207,242, 11, 63,255,243,
-252,186,239,251,117,252,115,191,247,127,206, 95,252,217,159,229, 79,255,217, 63,195,213,234,138, 12,146,233,157, 97,187,221,114,
-178, 88, 22,124,162, 7, 52,195,216,147, 21, 56,215, 18, 17,225,157,120, 90, 19,181, 81,196,209, 23, 75,147,154, 20, 20,251,199,
-125, 18, 56,230, 15,149, 82,169, 15,129, 57,124, 8,128,244, 67,186,216,227,124,229,253, 15,247,195,219,253,189,226,120,162, 67,
-229, 41, 14,162, 92, 4,130,247,248,113,192,120, 41, 0,134,170, 64,106, 74, 96, 74, 93,161,212, 66,114,138, 71, 47,111,128,144,
-168,125,192,185, 10,103, 52,171,245,154,180,237,100,202,209,203,104,213, 88,119, 8, 90, 57, 42,234, 19,198,248,248, 35,166,124,
-173, 88, 62,221,169, 79,185,238,234,233,203,143,210, 96, 42,172,138, 24, 34,235, 97,195,147, 71,247,248,228, 39, 95,193,213, 30,
-255,248, 10,163, 90,177,100,197, 68,138,153,174,219, 48,244, 91,186,221,138,250,234,130,171,203, 83, 78, 79,207, 88, 44,207,152,
- 45,230, 52,179,133,240, 9,106, 89, 73, 76,128, 18,173,203,100,107,186, 96,233,227, 11, 23,251,213,155, 42,110,150,168, 12, 41,
- 4,186,205, 6, 83,108,111, 83, 87,162, 13,140, 49, 74, 54,119,153, 48,204, 26, 67, 40,135,146, 86,242,223,107,101,112, 78,112,
-159, 87,125,192, 42,197,144, 18,166, 22, 10, 88,215,111,105, 42, 91,176,168,129,186,118,116,125,130, 44,129, 39,182,105,184,247,
-100,195,233, 89,195, 7, 23,107,250,152,152, 25,168, 83, 68, 59, 73,186,235,214, 43,162,134,106,105,249,225, 47,126, 10,211,156,
-113,190,217,241,228,242,130,135,231,231, 60, 90,173, 9,253,192,166,247,116, 49, 51, 51,138,223,244,189, 95,224,135,191,252, 61,
- 56,239, 75,164,111, 2,149,185,115,235,148,121, 45,137,124,117, 5,174,209,100,147, 14, 36, 48,227, 4, 50,100, 43,172,173,209,
- 86,198,241,202, 58,180,173, 80,211,135, 41, 69,192, 54,228, 28, 80, 69,235, 66,229, 72,157, 34, 42, 8, 57, 16,252, 64, 24, 7,
-188, 31, 25,199,145,222,123,118, 30,222,189,204,252,194,197,150,203, 1, 78,116,195,205,106,206,187,253,138, 55,191,243,237, 66,
- 65,180, 52, 57,240,105,167,153,187,138,183, 6,207,121,204,124,241,213, 87,249,245,175,188,192,155,223,120,139,175,191,251, 62,
-189,202,124,176, 89,115, 53,142,216,143,127,140,113, 43,150, 59, 99, 53, 57, 65,211, 72,192,142,177,166,140,151,165, 17, 8,193,
- 51,175, 29,201, 79, 19,190, 34,104, 78,197,206,156,181, 76, 50,162,184, 6,136,226,148, 26, 99, 96, 44, 1, 71,114,113, 53,251,
-216, 84,165, 64, 79, 28,146, 20,247,186,157,137, 82, 42, 19, 60,133,143, 25, 31,202,135,207,210,169, 23,145, 71,140,144,145,194,
-238,170,154,170,174,105, 42,121,191, 91, 23, 72, 72,247,236,189,103, 24, 2,253,232,233,203,170, 55,149,166,161,120,217,138,195,
-202,236,171,215, 52, 77,216,227,101, 53, 5, 18, 83, 26, 70, 37,175,131,210, 2, 55,154,104, 53,186,156, 75,169,228, 80,168,156,
- 10,136, 73,154, 15,201, 10, 80,228,108, 25, 75, 40,204, 56, 14,244,187,158,221,118,199,124,177,163, 93,118,212,203, 1, 59,155,
-163,219, 30,237, 26,172,109,208,186, 65, 41, 73,252,147,245,157,229, 8,205, 86, 38, 36, 73, 46, 7,209,147, 67, 32, 12, 25, 63,
-246,216,107,138,228, 9,205, 57, 37,193,112, 72, 72, 83,135,150,237,240,235,163,163,107, 58,208, 99, 46,210,255,148,136, 58, 19,
-146,220,134,149,214,215,212,213,249,248, 48,207,249, 32,160,152,178,211, 17, 16,129, 82, 74,210,161,142, 58,157,103,186,159,167,
- 72, 91, 83,225, 80,121,130, 32,136,178, 79,105, 67, 72, 10, 91, 47, 9,121,198, 27,111,188, 75, 86,142, 87, 62,253, 25,154,182,
-165,170,150, 84, 85,139,115, 53, 31,127,105, 9,163,103,123,249, 16,191,217, 18,135, 29, 79, 30,110,241, 97, 32,230,242, 80,228,
- 32,223, 91, 78,244, 49, 19,157,229,162,243, 40, 45,183,215,124, 92,136, 70,207,172,109,100, 36, 51,238,120,243,141, 95,226,165,
-231,111,243,240,241, 3,214,155, 43,134,205,154, 79,188,252, 50, 15,214, 43,208, 2,229, 8, 93,199,253,113,160, 94,205,120,244,
-224, 17, 47,191,244, 10, 95,253,234, 87,249,202, 15,124,133, 63,252, 71,254, 48,175,191,241, 58, 33, 10, 63,123, 12, 61,182,178,
-248,232, 89,111,214,220,188,117,131,221, 48,160,208, 52,213, 9, 73, 67,239,123,124, 18, 55,186, 99, 32,141, 91,114, 50,196, 18,
- 3,170,212, 88, 34, 23,244,179,254,244,167,138,146, 46,151,129,201,177,112, 8,236,249,104, 66,202,222,195, 58,125,254,130,215,
-156,208,209,138, 99,191,187, 56, 21, 72,169,168,218, 51, 58,235,189,142, 35, 70, 9,253, 24,250, 14,211, 88, 17, 85,161,176,100,
-180, 17,173,131, 53,134, 88, 53,162, 54,173,229, 64,209,222, 99,130, 71, 87, 50, 42, 51,174,188, 81,175, 54,236,186,145, 97,240,
- 24, 27,229, 80, 50, 83,166,189, 92,136,210,244, 74,168, 67,154,156, 81, 92,179,152, 9, 4,227,128, 45,222,251,102,143, 52, 4,
-178,159,212, 40, 85, 67, 30,169, 43,131, 55, 1,223, 93,240,230,235, 87,188,252,241, 87, 88, 93, 60,224,115,159,253, 50,247, 30,
- 92, 16,180, 34,165,226,149, 79,129,190, 91, 49,250, 45, 99,119, 69,191,185, 98,179,184, 96,190, 56, 97,177, 60,101, 54, 95, 82,
- 53, 53, 85, 93,225,170,170, 92,170,245, 30, 6, 34, 48,137, 50, 49, 48,122,191,227,220, 99,105,147, 34,102, 77, 10, 35,227,250,
-138, 26,141, 31, 34,214,148,239, 41, 3,186,194,170, 14, 31, 2,149,115,204, 27, 77,231, 7,146,182,120, 15,182,245, 36,163, 48,
-166, 34, 38,143, 1,210,216, 81, 25, 45, 99,213, 8,207,159,205,232,183, 29,235,117,199,236,164,225,106,227,153, 55, 53,187, 93,
-207,217,233,140,135, 87, 27,176,134,213,168, 88,245,145, 86, 89, 76, 14, 56,147,168,108,230,246,178,162,157, 55,100, 50,151,151,
- 87, 12,195,136, 86,134, 27,103, 55,121,229,229,155, 44,190,240, 9, 89,113,216,138,221, 40,170, 99,103, 13, 55,110,156,160,195,
-192, 48,246,132, 97,192,239, 86,164,193, 19,134,158, 59,179,154,126, 24,153, 47, 42, 82,147, 48,243, 57,186, 94,162,170, 57,186,
-154,161,221, 12,227, 90,140,173,247, 93,163,169, 27, 92, 59,195,212, 13,166,170,197,239,175, 53, 73, 75,124, 40,214,128, 21, 8,
-142, 53,137,172, 35,209, 68,114,246,132,236,137, 41, 16,115,164,247,137,123, 87,138,208,222,194, 95, 94,225,116,228, 21,171,185,
- 21, 71,182, 4,206, 85, 70,101, 43, 17,181, 6,190,244, 66,141,223,141,220,237, 61,184,138,143,127,254,115,124,254,139,175,176,
- 60, 89, 82,181, 21,124,243, 77, 76, 24,121, 18, 34, 95,123,239, 62, 47, 36, 69,171,117, 1,192,128,115,150, 20, 7,241,158,163,
-113,182, 66, 69,177,176, 85, 70, 51,168,140,178,146, 67, 97,181,150,247,128,207, 56, 83, 17,202,232, 59,145, 40, 33,105,132,172,
-132, 70,154, 68,173,110,132,120,179, 79,145,212, 66,150, 41,247,248, 40,225, 32,251,251,255,116,150, 76,174, 39, 85,246,223, 98,
-115,211, 81,186,253, 24, 68,244,152, 83, 46,182, 84, 83,194,149,116, 17,193, 69,250,190,161,107,122,250,190,162, 31, 71,129,211,
-228,116, 32,205,165,124,116,202,232, 35,109,150,124,109,102,234,142,167,247, 75, 86, 40, 25,122,179, 47, 38,229,103, 76,153, 76,
-234, 12,166, 56, 60,140,202,101,244, 78, 17, 27,154, 67, 72, 5,138, 97,180,140,253,200, 56,238, 24,186,145,121, 55,208, 14, 3,
-179, 69,135, 93, 46,112, 77, 11, 85,131,113, 51,148,105, 80,182, 45,194, 61, 77,102, 74,161, 44, 95, 95,206,216, 28,104, 72, 98,
-193,211,154, 72,252,112, 75,219,135,169,225,127,101, 9, 91,215,255,236, 52,226,139, 49,238,199,168, 7,112, 70,186, 54,178,205,
-199,221,217, 83,197,250, 24, 75,171,180,136, 36, 62,204, 98,164,148,226,186,182,250,184,123, 20,242,144,117, 51, 80, 53, 95,255,
-198, 55,185,113,251, 5, 78,206,206, 24,125,135,177,146, 66,101,148, 0, 91, 98, 8,116,221,192,163,199, 23, 68, 47, 35, 77,223,
-239, 4,249, 88,210,136,212,209,247,228,163,120,110,173, 53,248, 16,143, 10,161, 92, 66,116, 85,179, 60, 59,227,222,253,251,244,
- 62, 98,171,154,191,248, 51, 63,197,107,175,189,198,233, 98,201, 95,249,133, 95,224,203,223,243, 61,252,177, 63,241, 39,104,150,
- 51, 76, 86, 56, 5,129,132,138,226,229,125,255,131,119,249,115,127,126,224, 31,255, 61,191,135,223,246, 91,127, 43, 15,254,227,
-123, 60, 58,127, 66,202,138,170,105,104,218,134,172, 21,202,106, 86,155, 13,109, 83,177, 9, 91,188,135,213, 48,210,231,136, 49,
-142,106, 81, 17,135, 14, 21, 37,208, 65,105,158, 82,164,171,191,161, 93,250, 71, 17,229,246, 1, 41, 42, 93, 19, 55, 62, 29, 41,
-154, 39, 81,156, 58,190, 84,168, 18,166,162,246, 36,173,174,235, 24,118, 61, 85, 93,161,141, 69, 43, 91, 46,162,230, 80,116,109,
- 85,110,225,114, 24,164, 42,144, 99, 32, 56, 97, 39, 75,183, 85, 58,172,203, 13,113,219,225,199,158, 16, 52,174,114,184,130, 5,
-182,214,124,168, 32,112, 90, 65, 73,142,123,218, 91, 76, 38, 81,227, 52, 66,211,250,105, 95,121,134, 60, 98,109,102, 62,171,113,
-156,241,240,131,154,215,191,249, 58,119,110,191,128, 70, 17,195,200,237, 27,103, 60,120,178,146, 21, 69,202,135,227, 40,102, 24,
- 3, 97,179,165,143, 25,229,131,192,110,198,158,208,180,196,186, 38, 86, 21,177,154,212,194,250, 48, 49,155, 58, 40,107, 37,133,
- 81,151,253,228,228, 55, 78, 25, 98,100,123,249,132,182,174, 36, 34, 83,137,231,218, 90,241,247,199,161,112,186,107, 43,182, 78,
- 47, 80,154, 62,100, 78,202, 14, 86, 44,172, 34,136, 21,118, 75,162, 31, 60,139,121, 67, 74,176, 90,141, 84,141, 33,102,161,216,
- 13,222,115,122,182,148,157,186, 79, 44,206,230, 60,188,218, 96,116,194,184, 76,101, 21,149,211,204,103, 21,205,172,198, 22,118,
-246,172,169,209, 74,120,216, 90, 5,188,223,242,157,239,124,128, 86,154, 27, 55,158,163,157, 45,113,206, 74, 96,240,118, 43, 43,
- 56,165,200,253,192,110,189, 99,187, 94,115,113,126, 69,221, 84,196,148,153,159,157, 81,181, 48,107, 90,154,102, 65,213,204,113,
- 85, 75,221,204, 48,238,128,246,116,174,194, 89, 43,211, 29,109, 48,133, 40, 7,186,156,101, 86,246,238,218, 8,184,164,178,164,
- 81, 94,235,168,197,159,156,180, 56,135,238,190,191,227,228,206, 77,190,252,185,207,241,232,207,253, 21,190,125,177,198,231,142,
- 89,180,124, 81,201, 4,229, 97, 26, 57,211,153, 31,122,174,225, 99, 39, 13,247, 98,194, 40,207, 11, 39, 11,190,231,115,159,227,
-214, 11, 55,228, 50,145, 21, 87,231,107, 62,222, 86,168,155,167,252,228, 79,254, 28,155, 82,143, 78, 77, 13, 57,209,214, 53,155,
-245,138, 24, 19, 86,233, 98,235,117,196,232,177,109,131, 87, 82,208,135, 16, 80,101,237, 20,115, 42, 16, 22,209, 77, 73, 7,158,
- 8, 58, 18, 84,216, 83,221,180, 86,123,210,232,241,185,175,167, 58,158,147,240, 56, 68,117, 38,236,146,132,128,120,202, 46, 61,
-196,201,154, 38, 89, 10, 90, 27,234,202,209,212,142, 93, 39,127,191,179, 14, 83,201,197,161,170, 44, 77, 83, 51,155,181,116,187,
-129,174,239,233,124,197, 48, 6, 98,242, 37, 25,238,163, 49, 14,234,218,180, 87,237, 39, 8, 7, 17,175,218,211, 1,117,249,189,
- 70, 75, 82,156, 66,239,195,104,244, 17,233, 84,190,238, 3, 76,199, 26, 75,182, 9,157, 36, 93,178,239, 7, 98,138, 12,193, 51,
-142, 35,141,247, 84,237, 64,213,206,112, 85,196,212, 1, 83,133, 34,158,115,251,149,115, 54, 70, 56,116, 85, 35,121,236, 74, 99,
-141,163,170, 5, 90,100,127,165, 7,181,250,235,228, 83,170,167,196, 57,147,194,126,234,100,166,162,190,231, 22,151,142,140, 15,
- 73,255,122,166,208,239,147,188,212, 51,216,209,125,118,251,212, 81,237,203,187, 34, 82, 81,213,167,124,235,173,247, 56, 57,187,
-201,237, 59,119,184,184,186, 32,165,129,110,183,162,109, 87,116,221, 64,202,176,221,238,120,244,240, 62,219,113, 93,136,120, 94,
-242,144,243,100, 1,153,244, 4,153,211, 91, 55, 25,134,192,110,183,185, 6,143,145,188,115, 67, 78, 10,165, 29, 63,240,235,191,
-202,127,251, 39,255, 27, 98,240,248,156,184, 92, 95,242,240,225,125, 62,243,169, 79,243, 51,127,225, 47,240, 3, 95,253, 42, 57,
- 5,186,110, 39,152, 72, 99,101, 4,150, 35,187,161, 67,231,158,102, 85,243,198, 27,223,228,215,126,207,151,184,113,227, 6, 15,
- 47,158, 20, 24,136,147,155,169,151, 55,214,242,228, 6,195, 24,209,121,144,236, 99,229,100, 84,150, 51,217,143,140,113,141, 13,
-131, 92, 56,179,222, 51, 9,210, 94, 59,241,215,250,217,170,143, 76,100, 83,223,165, 83,207,101,210, 35, 14,135, 35, 18,205, 84,
-188,149, 58, 26, 92, 79,147, 25,181, 39,206, 37, 68,208,211,117, 29,219,245,150,249,108, 67,229, 36,207, 88, 77, 55,217, 56,141,
-200, 74, 38, 65,137, 73, 85, 6,148,115,226, 37, 50,166,140, 77, 29, 88,139,178, 21,166,106, 48,151,107,182,155, 13,195, 40,106,
-224, 80, 72,126,198,216,189,122,253,195,146,233,142, 71,240,215, 96, 52,249,224, 40,209, 71,157,177, 82, 17,157, 71, 84, 78, 60,
-124,240,152,243,135,239, 50,159,205,185, 56,191,228,221,239,188,207,114,126,194,147, 71,143, 88, 44,111, 48,171, 52,109,101,138,
- 54,197, 72, 40, 71, 4, 77,194, 17,112,105,192, 38,133,246, 10,250, 0,121, 32,135,154, 48, 24,176,134,100,116, 25,135,138, 66,
- 94, 23,246,129,178, 14,237, 44,217, 88, 1,124, 40,133, 46, 99,209, 24, 35,161, 91,145, 67, 39,200, 76,113,238, 96,156,221, 11,
-228, 0, 9,163,209, 16,163, 38, 2, 49,129,115, 21, 49,130, 81, 81,214,119, 38, 99,172, 76, 1,170, 74, 83,213,150,213,106, 3,
- 6,170,218,240,248,178,103,177,168,241, 99,100, 76,129,203,117, 79, 59,171,184,218,236,136, 41, 81,183, 80, 55,138,182,173,169,
-235,154,186,109,104,219,185, 96,127,141,166,118,186, 88,157, 52,179,166, 41, 28,131,219,204,219,153, 0,139, 52,144,131, 16, 46,
-203,186,202, 25,195,242,244, 6,103, 39, 39,108,183,107,118,187, 55, 80,186,231, 51,159,127, 21,211, 26, 76,149,153, 85,194, 90,
-111,103, 51,234,186,162,106, 26,225,224, 87, 21,182,170,208, 78,180, 17,206,186,107,108,242, 28, 68,136,171,162,100, 92, 16,211,
-126,138,165,180, 80, 7,141,107,112,117,196,185,142,171,203, 29,119,110,206,249,216,171, 47, 80,187,138,215, 94,126,158,175,159,
-175,121,168,224, 5,157,248,204,178,229,227, 55, 20, 15,227,192,153,213,124,236,108,193,227,171,158,183,214, 61,151, 17,126,232,
-123, 63,205,243, 47,191, 72,158, 57,236,201,138,249,233,156,231,111,158,240,201,207,127,150, 71,227,150,244,189,175,241,141, 95,
-122,135, 97, 72, 12,195,200,141,153,100,215,163, 4, 40,131,150, 9,138,115,150,202, 90,130, 31, 49,198, 48,198, 40,231, 23,154,
-224,227, 30,225,230,102, 13,181,209, 88,141,132,212, 16,240,153,253,251, 99, 18,132,238, 27, 49,117,160,130,198, 40, 69,219,143,
- 94, 72,164,197, 90,118, 72,234,204,101,223, 46, 65, 75,114, 81,150, 41,226,174,239,169, 58, 71,189,171,228, 57,168, 66,185, 56,
- 20,177,112, 85, 49,111, 27,134, 69,203, 48, 14,244, 62,208, 15, 35, 62, 68,194,148, 56,169,174,175,151,249, 8,144,214,177,174,
- 71, 61,245,239,186, 60,119,214,136,106, 62,234, 84, 72,121, 92,179,237, 30,195,170, 50, 2, 96, 51, 90,163, 42,135, 77, 19,226,
- 43, 49,142,158,120,181,198,247, 35,205,172, 39,206, 7, 98, 59, 98,155, 30,215, 54,216,170, 1,215,144,212, 20, 20,147,203,196,
-192,162,105, 69,255,100, 44, 38, 70,112,245,161,168,255,138,162, 49,159,242, 26,127,183,223,159,203, 14,254,195, 14,192,235,234,
-250,167,161, 24,207, 90,232, 82, 41,248,242, 2, 77,118, 9,253, 84,225, 47,249,208,199, 95, 65, 78, 40,109,247, 98, 33, 87,181,
-188,249,246, 93,234,118,206,233,141,155,124,231,157,111,115,121,245,132, 97,216, 0,137,126,220,162,181,116,130, 62,120, 82, 78,
- 82, 88,147,160, 9, 73, 7,229,118, 46,232, 83, 99, 52, 97, 28, 75,100,109,217,169, 20,161,159, 41,169,116, 70,107,126,224, 7,
-126,144, 87, 95,251, 36,159,251,194, 23,121,235,205, 55, 88,111,183, 44,103, 51, 30, 62,122,196, 75,207,189,128,206, 10,167, 20,
- 42, 6,114, 84,248,236, 81, 70, 44, 36, 49, 12,212,174,162,114,162,112,127,231,157,119,248,205, 63,252,119,178, 92,156,162,148,
-161,174,106,102,243, 57, 49,103,106,231, 88,175, 55,188,190,122,157,229, 98,201,203, 47,190,132,188,237, 34, 74, 55,204,155,134,
- 56,108, 24,243, 10,173, 7, 41,124,198,236,211,200,166, 29,107,230, 89,229,250,254,178,165, 14,124,244,167,119,230, 41, 31, 16,
-191,170, 0,116,166,117,138,222,191,118,233, 96, 71,204, 5, 71,155, 63,132,118,166,158,218,221,167, 76,214, 98,225,232,251,142,
-237,102,205,110,214,208, 56,139,177,210,137, 70,165, 72, 38,162,157, 43, 96, 11,246, 97, 48, 76,221,104, 22, 95,105,178, 30,140,
- 69, 57,139,118, 21,174,174,169,235,134, 77, 83,177, 90,239,232,198,190, 4, 14, 69,192,238,223,148,236, 37, 38, 7, 96, 78,158,
- 48,198, 73,147,172,150, 3, 43, 31, 36, 57,178, 67,151, 91,253,148, 61,110,117,192,170,200,249,234,146,135, 15, 30,114,178,104,
-185,115,235, 57, 30,221,127,200,167, 62,253, 25,186,174, 35,250,142, 48,142, 56,215,208,206,230, 92, 93,174,168,171, 26, 35,222,
- 40,172, 9, 84, 70, 81, 41,141, 83, 26,167, 21, 78,101, 44, 17,147, 53, 38,105,241,239, 7, 85, 40,129,153,172,197,246,151,141,
- 28, 6,114,241, 41,246,165, 24, 64, 21,107,218,250, 2,167,161,114,154,156, 12, 33,141, 88,163, 24,199, 40, 99,249, 16,153,181,
-114, 97, 8, 49, 19, 10, 62,120,244, 9,131, 65, 89, 65, 79,207, 22, 45,231,143, 55,180,109, 77, 24, 53,187, 93,143,202, 9,107,
-145,172, 2, 39,196, 61, 87, 25,158, 92,110, 81,214,224,115,166,247,129,186,209, 52,115, 77,187,176, 52,237,140,186,153, 81, 55,
- 45, 85,177,143, 25,165,105,141, 20,145,202,153,114,208, 58,172,211,210,201,153,105, 76,170,208,197,193,111, 84,233,172,157,197,
- 42, 71, 93, 87,124,229, 7,127,144,205,166,103,219, 7,198,236, 81, 46, 83,169, 10,103, 28,117, 83,227, 42,139,173,202, 74,198,
-217,253,179, 98, 43,153, 18, 89, 87, 73, 39, 86,108,107,199,161, 32,211, 51,104,108,137, 70,181,150,202,213, 52, 85,198,169, 13,
-149,178,188,252,220,130, 42, 27, 24, 3,159,253,204,231,184,253,254, 67,206, 47, 55,188,173, 96,232, 59,206, 86,240,241,179, 22,
- 98,224,189,187, 87, 60, 12,142,183, 54,112,122,235,140,223,254, 63,250,123, 56,107, 90, 82,191, 35,108, 7, 46, 46, 47,248,254,
-175,254, 58, 30, 93, 60,228,252,209,123,188,242,220, 41,246,213, 19, 46, 30, 94,114, 50,215,220,190,125, 34,107,213,172,168,235,
-154,164, 13, 41, 21,228,106,148, 64, 24,171, 37, 55, 34,100, 81, 92, 7,239, 25, 83, 68,207, 23, 96,101,114,101,148,156,183,222,
-100,192, 95, 75,101,123,186, 8, 78,117, 35, 22,110,253,232,139,224,180,120,212, 67, 44, 2,207, 76, 73,238, 60, 80,229, 20,136,
-248,109,144, 34,221, 15, 3,253, 48,210,212, 94, 46, 91,229,194, 45,110,167,154,197,208,210,117, 3,179,126,160,235,164, 91, 15,
- 33, 18, 38,140,114,206,215, 51, 16,242, 71, 64,152,166,142, 61, 63,157, 7, 49,229,185,235,167, 18,232, 14,152,219,227,198,116,
- 95, 91, 21, 88,163, 36, 7,162,156, 71,185,164,192,133, 24, 24,118, 3,177, 15, 12,219, 30,219,108,112,109,203,108,185,160,110,
- 27, 92,179,192, 84, 75,112, 86, 26, 18,177, 15,144,208, 66,190, 51, 34,252,117,182,198,254,245,118,224,127,189, 99,248,143, 10,
-150,216,195,195, 38, 37,125, 74,152,146,231, 62, 5, 89, 28,119, 70, 83, 97, 63,220,254,242, 81, 58,209,225,243,234,124, 64, 94,
-230, 50, 33,208,218,162,148,101,179,235,233,135,129,147,155, 55,120,231,221,111,115,126,249,152,245,234,130, 20,199,242, 14, 52,
-226, 13, 84, 25,171, 68,152,145,130, 88, 62,152,116,147, 5,204,161,202,141,100, 62,107, 48,192, 56,116, 52,102,130, 44, 40,180,
- 21,145,197,201, 98,193,231, 62,253, 5,190,244,107,126, 13, 70, 91, 22,203, 83,154,217,130,121,219,208,109,214,140, 97, 36,101,
-120,241,197, 23, 24,250,142,121, 83,211, 21, 15,101,244, 65,184,196, 41,161, 80,197, 49, 16,121,248,248, 49, 49,102, 78, 79,206,
-112,214, 21,165,165,208,184, 82, 74, 52,117, 77,223,143,108, 54, 3,111,127,231,219,220,188,117, 11,237, 22, 56,151,113, 68,110,
- 54,145, 97,183, 66, 89,121,109, 76,114, 18,154, 80,134,187, 74, 95, 15,204,249,176,184, 78,117,116, 43,157,138,123,140,177,140,
-162, 15,254,244,156,210,126, 77,113, 12,153,157,210,209, 14,111,168, 41, 32, 37,149,173,187, 46,111,166,130, 60,206,236,179,199,
- 83,134,126,232,216,172, 87,204,103, 53, 77,109,112,141,197, 58,139, 51, 10, 93,213,229, 38, 43,204,239,131,111,118, 18, 88, 32,
-212, 47, 99,177,198,162,173, 41,113,153,133, 27,158,130, 92, 78, 58, 69, 55, 72, 90, 30, 49, 72, 60,106,209,151, 40,253,244, 5,
- 84,224, 26, 89, 75, 58, 86, 46, 5,125,202,116,214,133, 16,163,205, 36,124, 81, 24, 45,118,186,166,114,212,149,132,106,220,185,
-117,155,211,147, 27, 92,156,159,163,173, 97,187, 93,113,243,230, 77, 82,130,247,222,123,155, 55,223,250, 14,159,255,252, 23,121,
-238,246,141,146,133, 14,218, 36,148,142, 64, 32,165, 81,246,154, 41,203, 88, 61,201,215,172,179,218,239, 0,115,146,144, 20,144,
- 41,208, 36,108, 72, 41,161,189,240,200, 67, 6,223,109,216, 92, 93, 17,252, 88, 86,136,197, 83,159, 4,190, 97,108, 66, 91,240,
-126, 64, 41,133, 79,105,143, 45,202, 41,161,181,232, 22,182, 91, 79,213, 86,236,134,145, 49, 26, 66, 12, 84, 90, 81, 87,150,205,
- 46,208,214, 14,235, 42, 46, 87, 29, 99,210,212,181,101,219,143, 88, 7,205, 76,211,206, 44,205,172,102,177,152, 51, 95,156,226,
- 92, 67,221,136,203, 67, 43, 69,163,237, 62,101,210,150,115,195, 88,133, 53, 22,156,112,200,141, 18, 47,189, 81, 10,103,220, 53,
-110, 5, 36,188,247, 56, 87, 51,143,138, 49, 71,146, 10,104, 28, 70,203,133, 81, 27, 74,138,158, 41,197, 89,242,178,181,158,242,
- 45,196,186,151,148, 66,169, 36, 40, 88,201,168,221,239,141, 81, 6,231, 26,140,245,180,179, 25, 49, 87,108,103, 61,159,249,212,
-103,121,231,219,239, 48,236, 70,162, 95,179,188,233,248,251,126,224,215,240,231,254,234,155, 92,237, 6, 54, 97,228,172,203, 60,
-222,121,186, 24, 88,145,121,232, 61,205,173, 27,252, 67,191,251, 31,230,229, 79,190,202,229,230,130,205,163, 7,248, 39,151,124,
-226,181,215, 88,173,207,233,245,200,139, 31,187,133,233, 7,134,214,146,230,138,166, 86,156,158, 44, 36,112, 40, 4, 76,211,224,
-163,220, 66,156,209, 88,171,232,183, 61,167, 51, 67,239, 7, 50, 10, 31, 18, 58, 4,250,232,153,181, 53,217,137,203, 72,208, 22,
- 25,165,227,245,206, 86,233,107,103,181,209,215,151,161, 49,231, 98,129, 19, 22,190, 0, 98, 74,223,154,229,124,141, 49, 29,116,
- 44, 18,164, 78, 55,142, 84,189,101,215,245, 52, 77, 77, 93, 85,212,141,100,148, 87, 90, 99,173,161,170, 44,109, 83, 51,111,107,
-118,125,195,110,215,179,235, 71, 6, 45,107, 4,166, 36,208,103,114,141,243, 51, 66,221,195, 92, 50,239,167,147, 90,107, 65,160,
-107,233,212,157,209, 36,157,138,246,171,224, 95,175, 77, 40,244, 94, 52, 36,123,249,178,134, 48,166,196, 45,107,114, 42,204,150,
-126, 96, 28, 71, 54,221,142,152, 51,182,114, 44,150, 39,204,151, 75, 22, 39, 3, 85, 59, 8,104,171,170, 80,206, 21, 10,157,164,
- 2,166,164,193, 68,204,211, 68,185,255, 95,253,223, 51,252,240, 35,174,184, 74, 34,190,208,229,150,118, 28,241, 58,165, 0, 77,
-126,228,169, 91, 86, 90, 31,254, 59, 50, 98, 44,180,203, 98,157, 18,209,195,249,249, 99, 94,120,241, 69,238, 61,184,203,122,189,
- 98,189,122, 66, 78, 30,171,229, 5, 55, 40,218,214,113,186,108, 81, 68,134,193,211, 13,129,222, 7,124, 46,214,187, 36, 10,223,
-202, 90, 42, 87, 49,115, 53, 49,140,156, 84, 6,231, 42,102,141,100, 51,159,158,156,178,152, 47,104,155, 57,167, 39,183,137, 93,
- 7,109,139, 31, 34, 15, 31,157,243,218, 39, 94,197,184, 74, 56,236, 10,174, 86, 87,204, 78,103,156,158,158,176,123,252, 4,109,
- 20,149,105,184,125,231, 69,190,247,251,190,151, 47,125,239,151,121,254,197,231,249, 3,255,230, 31,224,209,147, 11,158, 92,174,
- 56,187,113,139,182,105,168,171, 70, 64, 39,202, 80, 87, 21, 39,243, 37, 77, 21, 72,202,161,212,200,227,243, 71,132,116,201,243,
-207,189,202,220, 69,134,126,131,138, 29, 3, 90,240,184, 25, 76, 78,232,164,176, 86,139, 32,173,236, 6,159, 30,175,239,247,226,
-215,146,190,244, 97,154,146,211, 53, 72,203,241,255,239,169,205,185,188,175, 38,177, 73, 17,195,149,164, 67,140,150, 0,147,227,
-221,149, 53, 37,239,216, 26,154,218,162,141, 40,246,201,137, 28, 61,132, 17, 98,133,194,149,124,130, 92, 60,217,105, 31,237, 58,
- 41, 69, 4,244,160, 80, 88, 12,224, 98, 36,249, 81, 62,191,209, 56, 43,135,132,241, 70, 20,166,193,139, 94, 65, 85,242,198, 85,
-250,218,229,102, 58, 36,142, 95, 27, 77, 42, 22,193,105,199, 92, 14, 57, 35, 66,193,113, 28,249,133,159,255,203,196,208, 51,142,
- 91,186,237,154, 87, 62,246,113, 94,251,196, 43,124,229,249, 23,184,247,232, 33,207,221, 57,195, 25,205,249,147, 11,186,221, 6,
-109, 62, 41,226, 42, 20,179,118, 46, 20,176, 50, 10,214,166, 70,235, 10,109, 26,193,230, 26,185, 68, 24, 35, 2, 41,179,207,174,
-158, 70,241,101, 57,149, 37, 42, 54,231,145,224,199,210,213, 8, 15,156, 28, 73, 41, 22, 37, 47,248, 24, 25, 70,168, 43, 83,116,
- 70,162,138, 15, 9,134, 20,152, 16,232,214,200,229,199,185,138,148,122, 92, 85,211,141,158,237, 16,112, 86,225,156, 35, 71,121,
-109, 78,150, 51, 30, 93,238,232,199, 36,211, 40, 31, 25, 99, 98, 54, 83, 84,141,166,110,106,234,102, 78, 59, 91,202, 71, 59,195,
- 25, 75, 91, 57, 92, 81, 89,239, 15,212,169, 11, 55,154,202, 85,152,218,145,166, 67, 88, 43, 84,146,139,214,180, 23,205,104,180,
- 73,164, 84, 19,131, 0,116, 60,153, 72, 40,193, 68,250, 40, 29, 75,126,142,122,242, 87,107,189,231, 14,176,183, 92,234, 50,121,
- 74,144, 60, 57,142, 98,229, 75,130,128, 53, 54,211, 46, 23, 4, 53,224, 77,226,196,103, 46, 86, 27,218,179, 27, 84,179, 37,186,
-153,209, 52,150,197,252,148,239,249,244, 23, 96,177, 96, 55,118,180,218,146,214, 35,187,221,150, 39,171, 43,124, 14,124,254, 11,
- 95,224,213,215, 62, 69,248,224, 17,102,220,112,203,106,252,205, 91,220,127,240, 1,111,189,253, 58,167,167, 13,183,206, 22,184,
-208,240,120, 97,105,182,138,202, 40,156, 85,132,224,233,187,129,198,181,164, 84,138, 48,137,232, 3,221,110,199,141,197,146, 92,
-192, 76, 99,140,204,148,240, 61,148,179,232,202,161, 48,144,138,155, 70,235,103,173,173, 71, 69,173,220,163, 9, 71,231,194,100,
-107, 75, 69,157, 46, 19, 49,181, 15,139, 10, 19,146,172, 48, 74, 98, 18, 75, 88,215, 15,212,157,163,105,133, 20, 58,142, 13, 85,
-109, 69, 68,166, 53,149,181, 52, 77, 69, 59,171,153, 13, 13,109, 87, 83,117, 61,118,218,173,167, 15,223,170,239, 3, 97,142, 24,
-151,199,117,137,167,210, 73,101,252, 46, 14,143,105,196,110,203,180, 80,240,208, 26, 99,142,181, 96,229,243, 42, 35,219, 91,107,
- 36,175,162, 4, 41,169, 97,196, 43, 45,136,217,174,103,179,221,226,125,192, 85,151,156,158,156,114,227,198, 25,203,179, 5,179,
-147, 37,110,222, 98,218,185,176,228, 77, 45, 83, 68, 37, 97, 85, 90,243,255,159,162,254,145,221,251, 20,153,119,148,188, 54,189,
-144,251,206,111, 18, 52,148,127, 79,229,215,135, 91, 81,186, 22, 90, 37,162, 75,205,122,181, 33,147,185,127,255,125,174,174, 46,
-233,135, 30, 69,196,232,204,107,175,188,204,162,118, 44, 92, 98, 86, 91,140,242,228, 52, 98,173,165, 31, 34,151,171, 29,143,214,
-129,221, 8,221, 48,136,234,213, 88, 22,243, 37,103,167,103,244,235, 43, 82,127,197,124,222,178,152,183, 56,103, 75,177,117,204,
-155,138,198, 25,182,235, 21,239,223,191,207, 55,190,241,117, 98, 76,220,187,255,128,197,172, 97, 28, 61, 79, 46,206,105,172,227,
-133,148,249, 13, 95,249, 65,222,122,239, 93,148,114,228,164,121,245, 19,159,230,185, 59,207,115,126,126,201,143,254, 19, 63,202,
-127,250, 71,254, 40,111,127,235,109, 30,159, 95, 96,172,101,236, 7,140, 50, 4,109, 24,135,158,202, 58,134,126,128,172, 8, 57,
- 80,213,138,209,143,140, 62, 96, 76,102,232, 55,140,118,141,211, 17,159,148,236,140, 35, 88, 35,249,205, 41,179, 31, 43,105,125,
- 61, 17,236, 56, 99, 60,127,200,244, 70,156, 0,170,176,190, 15,209,133,123, 86,128,145, 55,157,240,155, 37,163, 88,216,244,135,
- 49,246, 68,157,178,198, 96,141,197,148, 95, 27,107, 69,237,233, 28,198, 40,121,227,206, 27, 92,109, 49, 78, 75, 1, 39,146,147,
- 39, 69,131, 46,201, 87,162,152, 23, 53, 45,169,136,194,212, 94,110, 49, 5,130, 31,138,159,158, 66, 83, 36,132, 67, 46,123, 50,
-242, 79, 65, 72,186,217,218,162, 72, 61, 88,238,166,225, 85, 58,178,175, 41,149, 81,229, 13,191,191,176,104, 69,223,109, 33,195,
-249,249, 99, 86,151,151,156, 44, 91,206,150, 39,188,246,202,203,220,185,117,155,219,183, 36,125,238,197, 87, 95,102,183,185,160,
-223,109,200, 68,174, 86, 23,124,230, 51, 95, 32,171,138,152, 13,103, 55,110, 98, 10, 85,207,185,170, 8,183, 42,212,228,131, 47,
-135,207,113,215, 68,161, 86,233,146,213,153, 99, 32,135, 1,210, 32, 22,211,164,136, 33,137, 7,215,203,206,210,148, 75,115,206,
-148,174,171, 76,120,140, 4, 52,165, 4, 33, 40, 84, 25, 73,198,148,153, 53, 34,190, 26, 7,168,235,134,221,144,216, 14,123,121,
- 44,198, 88,250, 78, 32, 50, 93,215,209, 15,146, 71,159,178,198, 71, 47,185, 40, 78, 97, 43, 69,221,214,212,245,140,166,153,203,
-248,189,110,105,156,229,100,214,224,172, 18,183,131,214, 24, 45,207,140, 53, 22,109, 28,149,173, 68,145,110,101,117,162,247, 5,
- 93, 28,203,114, 82, 91,148, 10,133, 63, 96, 9,209,136, 46,198, 66, 40,150,209, 92,198,194,233,232,162,106,173, 43,246, 71, 91,
- 46,166, 69, 65,109,109, 97, 71,116,101,250, 52,173,179, 36,201,205,184,154,218, 90,122,165,177, 68,102,217,240,218, 23,191,192,
-139,253,192,118,136, 34,137,200,154,198,107,178, 79,216,126,199,205,220,147,163,167,111, 18, 62, 4,190,255,139,175,176,108, 52,
-138,200,246,253,183,169,171, 22, 69,199,197,176,225,151,223,125,128, 38,240,226,237, 59, 52, 54,114,115, 62,199, 25, 69,125,218,
-162, 30, 67,211,214, 88,103, 73, 65,186,107,231, 42,217,184,104,181,183, 26,215,117, 37, 5, 92,233,194,177,151, 92,247,140, 32,
- 98,181, 53,226, 66, 1, 81,177,255, 53,152, 20,135,198,128,235,225, 42,197, 41, 21,227,148,186,153,247,212,200,235,206,170, 92,
-246,238,145,113,244, 34,130,235,106,118, 77,197,108,104,104,218, 74, 4,104,133, 87,226,156, 52, 55,109,211,208, 54, 53, 77, 45,
- 83, 34,239,195,209,122,246,169,101,113, 33,225, 29,114, 40,174, 3,172,213, 81, 36,179,181, 70, 50,223, 43,187, 15, 21,155,116,
- 4,166, 92,164,247,228,188,146,170, 54, 21,117,140, 37,107, 37,151,240, 18, 40, 85,122, 13,201,250, 24, 61, 73, 27,124,200, 92,
- 93,109, 8, 99,224,234,124,195,250,226,138, 91,183,231,156, 61,119,139,217,233, 41,205,114,196, 52, 1,219, 44,208,166, 69,153,
-170,172,164,121, 58,165,237, 87, 63,130,255,149,124,142, 99,162,216,180,167,216,243, 66, 56,146, 58,151,241,200, 49, 48, 67,107,
-202,205, 71,210,218,142, 11,253, 30,150,147,179, 64, 44,148, 17,152,138, 18,187, 82, 38,243,232,201, 57,209, 52,124,240,232, 33,
-138, 76, 55,116, 24,163,185,177, 88,240,249, 87, 94, 32,109, 47,168,180, 38,122, 79,244, 3, 90,129, 69, 17,187,158,211,182, 18,
- 12, 38,150,213,214, 50, 4,133,171,231,204,231, 55,112,170, 2, 59,146, 93,199,220, 89, 22, 37, 15,123,244,145, 24, 61,235,221,
- 21,231,239,221,227,173,119,222, 97,179,235, 36,139, 88,107,188,223,114,126,177,193,105,205,174,239,120,225,149,231, 24,199,196,
-237, 27,207,241,179, 63,247, 87,137, 74,211,143,158,209, 43,140,117, 52,243,154, 20, 34,175,189,242, 10,175,127,253,107,244,221,
- 37,219,237, 21, 99,244,228, 97,139, 15, 61,182, 50, 84,161, 70,107, 67,240,137,206,123, 26,111, 25, 58,143, 54, 21, 70,121, 78,
- 22,142,188, 11,132,156, 81, 41,224,180, 8, 54, 98,210,164,164, 9,217,160,209, 88, 60,166,108, 33,173, 50, 71, 17,138,101, 23,
-148, 36, 35, 92,248,207, 19, 98, 88, 29,252,105,207, 20,116, 25, 83, 90,119, 84,100,138,181, 77, 21,184,144,202, 98,149,155, 70,
- 88,178, 39,151, 14, 93, 86, 49,169,252,119, 35, 86,170,214, 81, 59,133, 49, 89, 70,158, 57, 32,155,221, 0,121,148, 3, 39, 38,
-178,138,228,236,100,100,202,244,247,150,131, 56,101,200,158,156, 71,185, 20,228, 64,244, 3,126,236,240, 99,199,208,247,164, 16,
-202,243, 29,129,136,205,142, 56,141, 93,143,244, 5, 7,191,247, 1,144, 52, 17,177,236,164, 91, 48,134,245, 16, 57,191,186,226,
-241,189,187,188,252,226, 29,158,187,115,131,229,188, 1,163,152,205,231,232,198,210,143, 61, 97, 37,136,201, 97, 55,160,115,230,
-147,159,124,149,215, 62,249, 50,143,206, 47,216,110,123,198,113,197,124,121,139,211, 27,207, 81, 53, 75,146,118,104,237,112,102,
-154,116,148,110, 82,107,146, 58,252,251,148,126, 24,189, 39,244, 29, 33,193, 56,140, 12, 93,102,236, 21,195, 38,146, 7,207,250,
-106,160,203,154,216, 52,232,113,164, 46,122,130, 74,101,134,228,101,175, 8, 12,222, 66, 26,176,170,196, 39,103,209,177, 84,149,
-129,236, 81, 38,177, 13,154,171, 62,211, 26, 69, 26, 51,163,246,100,101,169,231, 11, 30,221,127, 68, 80, 25,101, 53, 99,113, 14,
-212, 45,184, 10, 92,101,112, 77, 75, 51, 91, 82, 53, 51,154,118,198,172,109,152, 55, 21,179,218, 81, 25,141,211, 34, 66,114, 70,
-112,185,146,125,238,112,174, 65,215, 53,218,200,197,196,150, 96, 17, 17,246,137, 2,192,104, 93, 50,211, 3,218, 86,178,203, 69,
- 73, 2,101, 17,101,198,152,101,100, 60,122,240, 94,222, 7, 10,172, 51,228, 41, 82, 21,201,200, 78, 42,203,165, 42,183,224, 3,
-217, 40, 84, 85,145,250,154, 24,125, 81,202,195, 34, 87,168, 52, 98,212, 64,229, 28,117,223, 50,143,153,109,239, 25,123, 41, 94,
-169, 82,228, 20,139, 83,196,176,208, 6, 67, 98,245,248, 93,137,121, 30, 71,250, 49, 96, 92, 69,221, 88,150,203, 37, 95,248,244,
- 11,172,206,159,112,243,100,193,217,141, 57,198,102,114,244, 44,103, 53,149, 86,204,234,150,156,132, 91,239,154,150, 24, 19,206,
- 58,241,162, 71,104,107, 37, 62,244, 16, 25,146, 42, 60,142,192,102,232,169, 79,150,178,210,152, 4, 3,249, 0, 65, 17,145,168,
-192, 84,148, 50,215,104,133, 83,105,156, 60,221, 41,167,107,133, 52, 33, 29,127,222, 39,133, 30, 64, 84,185, 96,194, 85, 81,200,
-135,160, 24,250,145,110, 55,210, 53,158,174, 31,105,187,145,218, 88,180,147,231, 27, 99,113,117, 69, 85, 85, 82,220, 43, 75, 99,
- 53, 99, 97, 62,236,215,167,229,111,159,130,105,246, 62,172, 61,201,244,192, 43,157,110,237,202, 24, 84,114, 24,151,177, 85,162,
- 82,135,230,115, 18, 7,114,180,127, 87, 79, 93,170,149, 41, 26,166,146,226, 40, 47, 74, 36, 37,133, 9, 19, 72,205,145, 48,140,
-201,176,218,245,156,239,214, 60, 94,119, 92,173, 55, 60,191,245,220,186,221,115,114,107,160, 61,147, 73,144,105,230, 40, 59, 67,
- 23, 34,221,255, 48, 58,245,239,134, 6,125,138,185, 61,165, 82, 77, 47, 98, 62,234,210, 85,241, 6, 78,233,100,114,118,101, 18,
-145,221,118, 75,207, 64,223,247, 24,205,129, 50,167,165, 88,121,223,161,230, 45, 26, 77, 83, 47,216,172, 86,108, 87,107,116, 76,
- 37,101, 9,180,181,124,236,249, 23,232, 67,166, 15,153, 97,220,178,221, 94,200, 27,220, 86,172,134,200,234,209, 57,117,211, 16,
-178, 97, 12, 29, 49,105,162,171, 56,185,253, 49,230, 65,144,126,231, 79,206, 25, 71,121,184,149,131,144, 34,167, 55,111,162,208,
-220,122,254, 5,158, 92, 94, 17,180, 38,228, 76,179, 90,209,143, 35,219, 97,199,251,119, 63, 96,190,156,147,115,164,219,109, 89,
-175,174,246, 98,172,205,118, 83, 10,164, 97, 67, 39, 30, 89,227,168,116,133,107,150,156, 44, 22,180,181,197,233, 68,214,146, 75,
-174, 68,122, 42, 88, 80, 68,169, 43,171,139, 34, 50,116, 14,171, 52,149, 45,133, 73, 43, 81,205, 22,127,231,113,166,219, 97,218,
- 34, 60,244, 41, 32,229, 48,174, 42, 33, 9,230, 48,198,154,200,114, 19, 53, 73, 33,129, 25, 19,111, 91, 84,218, 18,225,171, 11,
- 68,101,186, 17, 59,231,168,107, 71, 93, 25,156,201,104, 37, 59,229, 28, 71, 82, 80,101, 9,159, 72,201, 98, 82, 32,235,128,210,
- 82,237,178, 18,191,187, 42, 54,133, 28, 11, 12, 36,140,114,136, 22, 48, 82,156,246,161, 69,253, 46, 20,177, 26, 87,201,164,198,
- 26,183,143, 88,213, 31,182, 75,211, 6,109, 68,157,107,172,120,117,179, 2, 55,155, 81,183, 21,183, 23,160,179, 28,184, 77,237,
- 64,137, 64, 40,167,196,118,181, 18,145,102,244, 60,122,248, 8,173, 53, 47,189,244, 49,140,115,228,156, 25,135,158,126, 12,172,
-118, 35,187, 49,243,202, 39,207, 56,189,121,179,236,237,237,100,191,144,231,163,160, 57, 39,192, 76, 70,130, 45,146, 46, 93,101,
- 72,120, 53, 50,166,145, 77,128,128, 4,182,156,111,183, 12, 42,211, 23, 5,178,173,172,136,124,148, 0,166,180,149, 28, 2,111,
- 13, 49, 6,180,169,100,197,145, 76,185, 92, 73,150,194,106, 20, 78,121,164,140,173, 99, 34,140,137, 59, 47,220,226,226,242,138,
-174,207,216,214, 16, 60,248, 62,148,247,147,162,174, 43,234,166,161,170,154, 61,112,164,174,107,234,186,194, 57,209,146,180,181,
-163,118, 22,103, 53,149, 45,225, 57,214,146,181, 36,161,233, 66,131, 51,198, 10,170, 84,233,114,136,203, 37, 45,134, 64,142,146,
- 93,129, 50, 56, 50, 1,241, 91, 39, 25,106, 48,140, 1,162, 72,146, 66, 89,171,200,204, 65, 86, 19, 83, 84, 53, 41,203, 68, 70,
- 70, 26, 16,133, 11,160,140,198,182, 51, 50, 3, 41, 5,180,177,184,198,178,180, 13,174,246,244,189,103, 28, 51, 67, 8,204,198,
- 72,223,143,210,145, 14, 35,195,232, 73, 41,160,114, 68,169, 68,213,180,204,231, 51,116, 6, 87,213,220,168, 28,218, 10,105,211,
-213, 21, 41,120, 62,246,226,115,228, 20, 88,156, 46,168,103, 21,201,247,156,158,157, 82, 57,203,172,109,200, 40,134, 97,160,105,
- 22, 37, 37, 83, 84,238,214, 88,250,161,163,117,114,137, 23,225,190, 4,178,100,107,168,107, 89,233,228,105,242, 80,214, 90, 28,
-157,209, 31,222,220,229, 3, 41,244, 67,194,146,114,249, 76,211, 28, 60,229,103,243, 38, 38,114,166, 15,114,225,233,251,158,110,
- 87,209,205, 26,186, 82,188,181, 82, 40, 43, 22, 55, 99, 37, 27,161,174, 43,170,202,137,120,210, 74,168, 83,142,169,172, 86,190,
-139, 10,254, 40, 69,242,218, 68,175, 76,105,246,105,115,165, 6,237, 53, 96, 5,243,170,143,118,230,250,232,252,146,207, 83, 10,
-123, 65,228,230, 56,146,172,101,212,254,218,232, 63,166,140, 79,208,143, 35,235,174, 99,236, 58, 54, 93,207,102,183,229,118,223,
-113, 54,142, 44,110, 6,234,152,176, 46,160,173,104, 64,254, 7, 81,212,127, 37,163,249, 61,111,190,136, 58, 76,177, 15,237,247,
- 28,211, 3,165,147,132,141,170, 84, 68, 65, 9,101,165,224,239, 54, 91,201, 2, 46, 89,218, 85, 85,211,117, 59, 18, 2, 78,240,
- 36,178, 78,212,206,114,227,230, 41,151, 79,206, 89,156, 44,229, 1,219, 68,182,193,176, 94,247,108,198,145,168,160,243, 3,163,
- 31, 64, 25,252, 40, 9, 71,117,229, 48, 57, 97,171,138,246,228, 6, 39,139, 83,170,230,132,186,110,112,214,210,182, 13,203,197,
-156,232, 61,143, 31, 63,230, 47,254,212, 79,240,224,225, 99,206, 47,174,208,202,112,251,121,207,173, 59,119,176,179,150,175,189,
-254, 58,227,112,151,222,123,208,137,223,253,143,253, 30,134,126,203,118,187, 37, 19,217,174,215, 88,165, 72, 62,162,179,162,219,
-245,108,155,142,202,213,164, 44,249,200,195,213,138,198, 90,114, 24,153,153,204, 73,165, 48,166, 69,229, 40, 74,211,164, 9,211,
-248, 43, 5,116, 74,232, 4,198,106, 42,163,105, 42, 75, 93, 89,172,214,194,242,215,250, 67,166, 52,135, 93,123,230, 72,247,160,
- 14,214,150,233,159,122, 42,234,229, 54,127,192,194, 22,142,179, 82,101,124,170,142,148,166,101,148,181,223,191, 43,140,205, 88,
- 19, 81,121, 36, 6, 69, 24, 69, 81, 78,142,152, 56,162,188, 67, 87,101, 20,173, 45, 90, 23,210,215,116, 41, 41,250, 11, 82, 57,
- 82, 98, 64,165, 80, 48,154,115, 78, 78,192,186,150, 49, 36,130,210, 88,231,132,214,102, 93, 1,211,148,241,217,209,247,167,180,
-222,123, 93,165, 43, 54,101,215,101, 80, 70, 99, 84,102,220, 93, 50,174, 31,179,108, 64, 87,167, 5, 37,234,233,187,157,116,143,
- 74,118,175,171,213,134,205,118, 71,219,182,108,119, 59,121,238, 77, 67, 51,215,184,106,198,233,169,161, 27, 60, 24, 9, 66,249,
-218,215,127,145, 31,248,245,191,129, 91,119,238, 16,117, 77,196, 20, 27, 77, 89,159,232, 3,236, 67,229,194,137, 54, 65,126, 14,
- 30,168, 34,201,121,146,115,244, 67, 71,174, 44, 23,221,134,203,245,154,205,174,163, 78,153,214, 56,146,207, 12, 99,198, 85, 74,
-246,230, 90,137,191, 56, 37,170, 36,249,215,209,251,178, 11, 85, 12, 62,224, 3, 92,109, 6,124, 86, 12, 62, 98,181,120,157,189,
- 31,233,123, 79, 86, 20,124,180, 76,223,140, 46,239,165,186,162,174, 90,234,170,166,174,106,172,149, 75,148,177, 22, 87, 85, 52,
-101,188,106,173,162,170, 14,122, 11,235, 28, 49, 43,108,249,249,107, 93,149,169,202, 36,190,205, 88,103, 81, 36,194, 48, 8,231,
-126,148,176,142,172, 20, 86, 75,183, 26,179, 98, 12,158,108, 44,218, 71,250,212, 65, 89, 27, 77,171,217,156, 82,233,163, 65, 69,
- 89,255, 40,171,132, 70,151, 68,252,153,181, 69, 25, 77,180,137,228, 35,174,140,233,173,211,180, 85,194,182,145,161, 15, 88, 31,
-240,163,199,182, 21, 49, 38,154, 81,200,104,193, 75, 74, 87, 46,204,242,138, 76, 10, 1,103, 20,206, 8,106, 24,149,176,206,161,
-245, 12,147, 51,139, 69, 75,179,172,105,230, 13,126,183,225,236,185,219,180,179,133,172, 13,148, 46,147, 20, 71, 55,120,193, 76,
- 91,139,209,153, 77,183,229,230,233, 29,214,155, 29, 89, 85, 50,214,213, 14, 83, 59,170,166,150, 75, 49,135,130, 23,203,100, 37,
- 29,133, 27,125, 55, 75,235, 36,162, 61,176,216,143,226,136,243,209, 57,146,243,145,144, 58,239,185, 49, 57, 75,240, 75, 55,140,
-184, 93, 71,179,169,169, 92, 69, 85,201, 4,193,166,188,143, 11,183, 90, 38,122,117, 85,209,212, 21,245,232,241, 33, 10,196, 50,
-167,239, 46,250, 58, 10, 94,158,152, 20,123,225,246, 52,170,209,170, 92,178,211,126, 10,118,152,206, 73, 76,172, 62, 26,199,171,
- 73, 48, 56, 97,235,202, 27, 50,146, 74,164,114,249,125, 28, 98,204, 69,152, 42, 56,221,115, 31,217,244, 3,155, 93,199,213,122,
-203,115,219,129, 91, 59,207,217, 45,143,173,101,253,102,173,197,170,143,184, 85,253, 74,198,238,127,163, 74,248, 95,201,231,121,
-198, 62,167,228,134, 24, 50,165, 0,201,173, 59, 21,153,191,182,229, 33, 80, 73,110,204, 42,145, 74, 38,116, 12, 30,103, 43,230,
-179,154,197, 98, 73, 93,183, 60,188,247, 30, 99, 8,152,170,146, 23,163,228, 56, 47,230,115,108, 81, 81,239,250,158,110,179, 99,
- 23, 51, 99, 10, 92,108, 59,118,163, 39,107,176, 85,121,147,212,150,128,220,234, 99, 55,162, 76,160, 25,192,174, 59,124,184,135,
- 81, 18,160, 80,215, 78,216,194, 77,195, 11,207, 63,207,139, 47,190,200,213,195,247,121,120,255, 33, 55,111,220,228,226,201, 57,
- 95,248,204,231,248,228, 23, 62,199,106,189,230,203,223,243,125,184,170,226,141,111,125,147,247,222,127,143,221,118, 77,109, 21,
- 63,246, 99, 63,198,111,254,225,191,131,213,250,138, 15, 62,184, 71, 68,222,240,227, 56, 22,213,127, 70, 23,241, 73,179,152, 51,
-175, 26, 94,189,179, 96, 97, 6, 76,106, 8, 73,209, 5,200,218,177,235, 37,155, 93,231,136,201, 1,155, 51, 22,139,213,153,202,
- 40,106,107,168,157, 40,140,181,226, 8,204,112,132, 60,221,147, 2,143,222, 10,215,108, 32,165,224,105,246,255,156,222,192,106,
- 10,232, 41,251, 78,173,165,216,236, 71, 98, 89, 18,150,166,217, 64, 78,138, 20, 34, 62, 71,100,209, 29,138,165, 80, 50,231, 77,
-172,208, 49,200,135,149, 72, 76,180,151,184, 89,145,139,151, 46, 86,214, 64, 18,195, 40, 93,135,181,150,106, 54,227, 76,215, 52,
-179,196,152, 50, 65, 75, 78,182,115, 50,194, 55, 69, 57,175,141, 46,248, 80,189,127, 77,180,146, 95, 75, 87,168,100, 21, 84,196,
- 84, 99,191,102, 8, 35,126,216,144, 66,207,233,201, 2,239, 51, 90, 91, 90, 53,103, 28,122,156,177,108, 55, 27,238,189,255, 62,
-239,222,253,128,249,124,206,141,155,183,169,154,150, 97, 76,140, 99,160,178, 53, 84,144,178, 38, 43, 67,191, 27,184,220, 94,240,
-223,253,169, 63,193,255,248,119,254, 14,176, 51,218,229, 25, 40,197,118,179,161,110, 26, 41, 98,211,129,153,100,237, 97,115, 41,
- 80,106, 71, 54, 14, 85,215,232, 81, 70,151,175,191,241, 77,126,246, 47,253, 28,233,226, 1,126, 16,241,234,102, 24, 49, 88,114,
- 18, 34, 89,206, 1, 50,146,175,173, 52,227,224, 49, 74, 49, 14, 17,165, 42, 70, 31,112,149,146,212,179, 32, 54,186,136, 92, 24,
-235, 90,113,117,185, 38, 43, 85,232,139,150,193,135, 50, 81,200, 7,107, 90,233, 62, 52,101,101, 16, 35, 57,201, 1,235, 42,135,
-173,107,234,198, 81, 87, 86, 10,156, 86, 88, 39,222,235,172, 4,149,171,141, 37,163,100,231,238,196,230, 38,158,229,136, 86, 72,
- 94,117,140,165,139,135,188,247,156,139, 77, 80,153,204, 56,110, 14, 48,169,201,168, 88,158, 31, 93,242,182,147, 47,201,141,218,
-145,181,140,140,179, 86, 66,149,203,242, 61, 40, 39,186, 14,114, 89,215,100,112, 46, 19,213,128,169,106,124,237,169,114, 34,196,
- 76, 21, 18,141,143,178, 11, 30, 61, 41, 30, 82,199, 84,138, 56,131, 88, 3,157,136,243, 92, 83, 50, 14,156,163,153, 85,216, 70,
- 46, 14,138,200,205, 59,119,168, 27,241,247,199, 32, 5,116,244, 94,162, 69, 67, 36,198, 17,101, 43, 82, 12, 24,235,200,218,145,
-162, 97,140, 34,234, 82, 85,133,169, 43,178, 18,106,168, 78, 83,140,105, 46, 40,214,201, 79,254,209,235,216, 41,110,152,163,252,
-136,107,140,145,163, 95, 31,232,147, 71, 73,129, 64, 44, 43,181, 97,244,116,131,103,219, 13,212,117, 71,237,164, 32,214,245, 81,
-247,172,132, 42, 89, 85,242,222,157,154, 18,173,194, 52, 99,120,166,212,237, 53,239, 71,194, 57,181,103,199, 78,126,123, 43, 81,
-187,198, 98, 74,147,169,148,190,238,114, 57, 26,189, 43, 93, 38, 54,147, 43, 75,233,130,252,133,156, 3, 38,219, 2, 47, 50,215,
-240,205,162,217, 41,151, 33,192, 39,133, 79,145,188,238, 24, 70, 79, 63, 4,250,110,100,220,141,204, 22, 21,117,237, 74, 92,172,
- 57, 40,156, 83, 74, 7, 5, 96,230, 25,184, 11, 71,226,181,143, 34,186,253,245, 20,239,107,136,218, 15,161,201,125, 20,124, 6,
-101,202, 62, 70,110,204,170,220,224,180,158,252,208, 34,134,146,215, 87, 30,162,166, 22, 78,112,221,212,180,117,131, 43,183,162,
-249, 98, 65, 55, 12, 60,119,118,147, 87,110,157,162,181, 4,222,247,222,211,220, 94,112,239,209, 35,190,253,224,156,251,143,183,
-172,119,158,144, 20, 85, 51,167,106,151, 84,117, 35,246,245,228,233,251, 53, 62,139, 45,143, 36, 1, 29, 99,191,165,235, 54, 50,
-218, 3, 76, 25,139,174,102, 51,134, 97,224,237,111,183, 44, 42, 71,142,112,254,232,156,237,213,150,205,213,150, 87, 94,123,141,
- 79,191,242, 9,158, 59,187,201,162,169,184,125,231, 57,190,240,185,207,115,235,206,109,126,234,167,126,146, 63,243,167,255, 36,
-255,253, 95,249, 37, 86,171, 13,191,243,183,255, 78,222,125,239,125,126,252,207,254, 57,174,174, 86,104,165, 8,227, 40, 5, 56,
-238,200, 24,172,110,153,217,204, 11,167, 53,117,142,228,164,217,230,134, 39, 15, 87,188,252,242, 11,152,213, 21,249,210, 11, 45,
- 42,169, 34, 78,211, 56,173,169,140,161,178, 7, 15,176,158, 0, 26,215, 68, 49, 71, 55,108,125, 61, 46, 87,113, 72, 21,201,197,
-146,144, 75,241,223,235, 41,178,222,123,210, 35, 71,251,169,146, 85,109,178, 41,152,128,120, 68,123, 74,152, 56,177,215, 41,189,
-146, 8, 39, 93, 86, 18,115,156,132,188,166,146, 70,233, 36, 9, 91, 57,147,116, 33,218,229, 41,253, 72,237, 81,174,202,214,184,
- 22,148, 83,184,100, 72,198, 18,109,181, 79,185,147,125, 88, 9, 91,208,135,128, 33,173,244, 83,182,158, 82,228,139,117,172,223,
-109,121,252,240, 3,102,198,243,226,157, 91,124,251,141,111,176,156,181,180, 77, 3, 40,194, 32, 65, 59,179, 90,172,137, 55,111,
-220,228,241,197, 5,222, 7,182,219,142,217,201, 13,154,186,225,226,241, 19, 54,155,173, 36, 51,161,233,124,226,241,229,138,102,
-177, 96,136,129, 95,252,249,191, 68, 63, 6,126,240,171, 63,196,197,147, 39,188,249,230, 91,216,202,242,183,253,240,223,201,216,
-117,100, 37,113,195, 86,105,146, 10,228,216,243,224,193,123,196,113,160, 54,154,110,125,201,195, 7,247,184,127,239, 46, 23,143,
-159, 48,222,127,196,205, 74,172,122,221,144,113, 90, 70,130,147,211,196, 89, 67, 24,189,136,169,178,224,117,167,117,138, 53,142,
- 20, 36, 95, 32,102, 69,214,154, 49, 6, 57,236,172,101, 12, 3,161,184, 8, 70, 95, 4, 71, 74,149,245, 24, 37,195,219,202, 52,
- 33, 79,133, 51, 18,131,136,243,246,143,208,196,100,119,150,122,138,208, 84, 98, 59,155,152,222, 5,135,112,205,163, 44,143,141,
- 46,133, 85, 34, 54,197,251, 91,158,213,164,192, 32,223, 67,241,114,203, 74, 38,202,229, 38, 70,121,191,147, 75,128,141, 71,233,
- 44, 54, 66,165, 37, 65, 48, 37, 48, 6,165, 44,218, 53,132,161, 35,147, 48,202,202,215, 31,163, 52, 18, 51, 77, 12, 1, 21, 53,
- 54,103,178,178, 84, 49, 49,250, 72,240,161,176, 48, 98,129,182, 36,226, 56,136, 5, 77, 35,133, 91, 67, 51,107,168,106, 41, 94,
-174,182,168, 74,149,166,198,178, 88, 46, 81, 74, 83, 85, 21, 93, 24,246, 22, 84, 91,214, 92, 41, 10,105,177,170, 28,131,143,162,
-187,176,142, 24, 16, 33, 46,128,115, 18,135,170, 20,185,160, 91, 67, 8,251,143,105, 61,122,157,228,249,209,132,151,235,199,252,
-161,152,231,107,139, 61, 14,136,214, 9, 89, 86,212,243,195, 24,216,245, 3,205,174, 47, 46, 8, 17,116,106, 99,196, 34, 87,132,
-174, 50,253, 43,250, 28,107,240,209,160,178, 92, 14, 39, 72, 90,126,202,137,197,177, 9,247, 40,109, 78,208,136, 22,157, 45, 58,
-218, 61,100,106,178,169, 82,168,111,170, 8,228,152, 72,146,250, 16,203,178, 95, 95,148, 45, 78, 84,169,196, 72,235, 35,133,253,
- 52,217,148, 14, 94,165, 44,151,129,156, 25, 66, 18, 46,192,197,154, 20, 51,126, 8,156,156,136, 96,208, 8, 7,193, 94, 47,234,
- 71,192,151, 15,235,150,175,199,103,126, 52,156,230, 56,192,229,111, 70, 55,127,252,156, 92, 83, 94,239,181, 13, 83, 12,103, 65,
- 64,106, 35, 7,123,137,110,173,156,140,144, 69, 88, 99,176,218, 97,148,101,183,235,121,114,177,226,135,190,242, 27,185, 61,111,
-232,250,129,119,223,191,199, 55,190,245, 30,239, 61,186,224,193,229,154,157,151,192,128,170,110,121,233,227, 31, 71,161, 25,135,
-145,208, 15, 12, 93, 7,217,227,140, 28,108, 22,141, 50, 10,173, 2, 93,191,147, 32,123, 50,131, 15,251, 31,238,110,119, 1,218,
-176, 90, 95,112,101, 29,173,210,220,123,242,152,147,118, 46, 29, 67, 85,241,217,213,154, 87, 95,254, 56, 79,238,125,192,110,117,
-197,242,228, 38,171,203, 43,254,145,255,201, 63,202,151,191,231, 75,252,193, 63,248,239,241,237,119,222,229,143,252,103,255, 25,
-223,255,253, 95,225,159,254,167,254, 25,254,252,159,255, 73,190,246,181,175, 51,134, 94, 50,211, 53, 40, 55, 99,219,237,120,241,
-197,207, 48,111, 27, 92, 86, 12, 25,198,161,229,237, 7,239,243,213,191,253,135,233,190,246, 11, 52, 78, 17,209,164,104,247,118,
- 54,138,226, 55,151,241,218,132, 74,206,121,194,189, 22, 1, 76, 9,209,217, 43, 72,211,225, 86, 62, 41, 67,133, 43,160, 14,214,
- 32,165,143,160, 13,135,110, 29,196, 99, 29,211,196,139,201, 68,157, 15,225, 40,123,152, 75, 1, 92, 25, 8, 49,224,227, 64, 21,
- 50,117,200,184, 26, 76,149,112, 21, 84, 85,177, 56,218,114,107,206,134,140,116,235,162, 6, 55,147,100,110,159,125,160,209, 84,
- 56,148,146,104,205, 84, 24,214,202, 88, 74, 74, 69,193,170,170, 61,193,112,159,104,151,143,126, 93,124,245, 42, 70,206,239,127,
-135, 71,239,125,139, 59,103,115, 22, 55,150, 52,117,195,208,245, 92, 93,174,184,188, 90,179,221,118,168,156, 57, 89,206, 89, 46,
-102,220,121,225, 5, 78,111,221,228,253, 15,238,243,232,241, 37,171,171, 21,183,110,220, 32, 7,143,142, 35, 58, 5, 1, 79,164,
- 68,232,119, 60, 92, 93,241,242, 39, 94,225,193,221,247,217,172, 87,252,220,184, 37,198,200,147, 39,231, 60,124,244,144,153,150,
-117,205,110, 24, 73,170,230,133, 23, 95,162,105, 91,174,206, 47,121,252,232,161, 48,243,201,248,110, 75,240, 61,202,100,250, 97,
-160,181,142,202, 26,198, 20,217,165, 72,149,101, 91,238,163,172,185, 84, 22, 43, 98,206,106, 31,173,233,163, 39, 68,141, 65, 17,
- 83, 64,103, 87,252,199, 18,218, 81,213, 21,227, 24, 72, 89,188,237,104, 75,223, 7,241, 62,167, 36, 17,172,198,148, 9,103, 57,
-212,224, 40, 89, 78,124,189,131,247, 52,177, 46, 99, 91, 41,252, 41,150, 40, 81, 35,250, 12,125,244, 60,202, 26, 93, 16,164,130,
-245,206, 68,193, 15,138,197, 40, 79, 79,217,254,182, 64,206,146,224, 23, 66, 40,146, 42,176,101,255,172, 85,145,176, 41,113, 75,
-136,158, 65,131,146, 61, 59, 90, 17,162,228, 16,232,202,129,178, 37, 80, 37,137,245, 54,137,159, 61,133,128, 42,218, 17,179, 79,
-212, 83, 88,101, 48, 37, 36, 37, 86,134,232,125,233,206, 51,169,210, 80,176,189, 85, 83, 73,228,103, 91,225, 42,115, 32,215, 89,
-209,204, 24, 52, 51, 87,201,133, 54,202,217,238,156,219, 7, 93, 89,103, 25,131,103,232,123,218,217, 92, 46, 76, 24,198, 16,193,
- 86,132,156,112,214,146, 20,140, 81, 84, 5, 42,136,183,223,143, 30,239,143,139,250,245,110, 83, 29,219, 96,167,243,225,175,231,
-184,127,170,113,204, 89,228,170, 99, 76, 48,122, 92, 55, 80, 91,131,179, 2, 94,202, 57,203, 68, 77,137, 24, 82,112,222,165, 81,
-209,147,237,241,218, 59,254,163, 39,196,211, 58, 96,143,142, 45, 5,219, 84, 82,103,242, 81,134,201,113,160,152, 50, 7,187,238,
-196,179,184, 70,155, 59, 96,237, 50,250,154,221,245,186, 62, 71,239,129, 87, 70,155,253, 37, 73, 23, 80, 88,200,138,109,239,201,
- 23, 87,140,227, 64, 93, 87,162, 65,146, 23, 64, 93, 19,163, 61, 45,102,248,176,174,252,195,254,253,184,224,127,120,134,246,223,
- 28,143,251,211, 75,130, 92,200,109,211, 27, 82, 44, 40,114,149, 79, 90,210,217, 42, 43,105, 73,163, 31, 25,148,230,198,217, 45,
-140,171,240,222,243,157,247,222,231,191,250,147,127,134,215, 94,125,129, 15, 62,184,207,189,251, 23, 92,109, 6, 66, 82,120, 52,
- 41, 91, 78,110,220,230,133, 23, 63, 70,138,158,110,125, 69, 26,118, 60,119,182,224,149,207,190,200,114,217, 50, 95,204,196,235,
- 27, 37,187,125,183,235,216,238,182, 44, 78,150,248,148,121,247,253, 15,120,235, 59,239,179,237,250, 61,235, 58, 43,195, 54, 68,
-242,172, 37,249,145, 52, 40,174,186, 45,205,233, 41,219,190,227,239,254, 45,127, 55, 31,188,253, 6,119,223,251,128, 71,151,151,
- 12, 99,228,207,252,233,159,224,183,252,189,127, 15,255,194,191,248,251,248,183,255,157,223,207,106,187,225, 39,127,234,207,243,
-237,239,188,195, 63,244, 15,254,131,252,173,191,241, 55,242, 95,255,215,255, 37,119,239,190,203, 48,116, 40, 51, 67, 69,232, 2,
- 60,186, 92,115,182,108, 89,123,197,207,191,254, 30,203, 59,175,210, 46,206,196,159,173, 34, 74,101, 70,101,136,200,206, 45,150,
-219,124,136, 1, 19, 21, 65,139,151, 63,151,157,220,225, 25, 72,207,132,182, 80,216,255,135,203, 96,190,198, 84, 46, 57,134,135,
-212,182, 41, 4, 48, 79,221,127, 56, 2, 2, 31, 84,176,199,183,105, 93,232, 92,117, 93,211, 54,129, 89,155,136, 81, 83,103, 75,
-133, 19,222,182,170, 48, 90,242,174,181,171,228,112, 53, 71,118,146,189,232, 79, 20,207, 89, 75,128,131, 20,251, 98, 19, 49,210,
-153, 83,198,104, 73, 29, 82,236, 14, 72, 98,245,108,111, 34, 39, 11,143,238,189, 71,149,119,220,123,251, 27,220, 79,129,223,252,
-155,255, 46,124,204,188,255,198,155,212, 77,203,174,144,178,172,181,216, 33, 80,213,137,166,117,104,231,120,225,197,151, 88,239,
- 70, 98,244,144, 2, 58,121,108,142,132, 41,178, 49, 8,200,229,124,179,225,209,189,251,156,222,188,193,227,135, 15,184,124,244,
-128,170,174, 81,192,246,242,130,159,250,137, 31,167, 46, 98,179,213,102, 71,238, 55,188,250,234,171,248,237, 57,111,252,210,207,
- 81, 91,205,173,179, 19, 82,202,124,251,238, 61,238, 62,184,199,195,139, 21,207,147, 73,141,101,200,176,141,129, 62, 38,218,146,
-220, 5,224,135, 32, 93,127,140,120,149, 73, 74, 19, 66,201,145, 63,112, 55,112, 6,118, 33, 80, 23,161, 99,191,235,100,111,157,
-196, 37,225, 51,152,114, 67,119, 90, 81, 85,166, 64,167,142,139,114,249, 59,125, 33,132,133, 88,198,209, 73, 98,116, 17, 59,157,
-113,134, 28, 19, 33,121,220,145, 29,143, 44,121,239, 49, 75,146, 88, 82,145, 52,137,102,141, 41,145,181,105,111,171,242,251, 81,
-191,221,239, 58,141,177, 34,200,211,197,169, 81,126,173, 74, 80,142,114, 26, 76,222,143,109, 15,211,197, 50,221,113,149,124,173,
- 5,145, 58, 17,215,178, 31,101,162,100, 28, 57,136,243, 39,149,105, 80,178,134, 96, 32,232,140, 85,145, 28,188,124, 46,228, 18,
- 81,183, 13, 85, 83, 97, 42, 67,214,133,207,160, 21,211, 0, 44, 75, 5,192,104, 75,223, 15,164,148,104,219, 22,239,165,232,165,
-224, 81, 10,134,221,192,114,126, 34, 58,146,148,240, 73,163,156,198,199, 32, 23,187, 24, 8,101, 31,157,125, 96, 28, 70,198, 97,
- 44,185,243,161,236,212,205,181, 6,144,163,105, 94,254,144, 44, 8,173, 37,113, 79,231, 41, 22, 91, 95, 27,183, 63, 19, 28,118,
-141, 76,151, 24,134,192,214, 14,114, 33, 42,180,202,186,174, 69,232, 87,242,198, 39,114,157, 86,106, 31,193, 45,164, 56,245, 93,
-106, 76,222,135,176,236,199,235,186,136, 80,141,189, 86,227,174,223, 66, 14,163,245,195,173,230, 89, 72,139,220, 25,115,193, 24,
- 23,240,213,181,194,126,200,107, 48,214, 96, 1,147, 4,144, 54, 33,106,173, 51,232,202,146,181,161, 31,101, 13,150,201,216,186,
-114,135,104,238,227,130, 94,110,184,233,104, 7, 18, 11, 10, 53, 23, 8, 11, 71,121,219, 40,245, 76,178,215,241,247,163, 10,139,
- 93,237,243, 98,143,198, 30,197,210,150, 21, 79,135,122,126, 36,131, 92,125,200,139, 41, 63, 3,189, 7, 24,164,156, 5,250,144,
-165, 75,108,172,193, 39,133, 81,150,147,229, 41, 85, 91,113,118,227, 20, 63, 26, 30, 92,172, 56,191,188,194, 89, 75, 86,153, 16,
- 69,237,174, 82,197,199, 95,254, 4,203,121,195,184,187,130, 48,240,153, 23,111,241,137,151, 62,199,199, 63,246, 60,143,238,127,
-192,147, 39, 79,184,119,254,136,243,203, 21, 87,235, 29, 40, 75, 24, 7,172,206,124,236,197,231,121,233,227,175,242,210,115,119,
-104,170,138,229,233, 13,238,222,127,200, 59,239,221,101,181,217, 17,149,162, 31, 50,139,166,102,187, 93,241,137,151, 94,230,147,
-175,126,156,247,223,121,135, 95,252,133, 95,228,135,255,142,223,204, 39, 63,253,121,126,246,103,126,138,203,203, 13,231, 31,220,
-229,143,255,177, 63,206, 63,242, 35,255, 56,255,218,255,238,223,230, 95,249,125,255, 2,187,221,134,247,222,123,135,127,255, 15,
-254,251,252,250,175,252, 32,255,252, 63,255, 47,241, 99,127,242,199,248,229, 55,126,153,111,126,243, 45, 84, 54,220,123,231, 46,
-172, 46,168,102, 13,239, 62, 94, 81, 47,159,227, 43, 95,249, 44,111,188,254,117,130,239,167, 0,194, 18,151,150,100,142,158,216,
-131, 34,116,144, 7,198, 24,117,200, 62,191,166, 82, 45,251,244,114, 25, 56,206, 28, 63,236,204, 11,170,180, 20,111, 81,195,170,
-242, 49,189,137, 14, 69, 86,232, 75, 7,204,103, 86, 7,230,191,100, 33, 91,154, 70,192, 42,117,210,100, 44, 74, 87, 24, 83,227,
-234, 6, 87,181,104, 87,163, 92, 13,174, 42, 36,166, 90, 66, 92,140, 69,219,114, 75, 46,163,251,125,194, 92,121,142, 20,182, 28,
-198,121,207,160,103, 74,168, 83,135,160,169, 61, 72,167,188,103,140,202,144, 4, 56,242,238,183,191,141,238,206,121,225,102,203,
- 11,183,207,248,198, 55,190,201,189, 15,238,177,186,184,228, 91,111,125,155,219,207,189, 72, 68, 81,215,141, 48,170,163,167,239,
-119, 52,245,162,168,105,229, 48,218,118, 61,221,110, 71,165, 19, 70, 69, 44, 69,157,159, 50,195, 32,161, 54,235,213,154,118, 54,
- 99,232,122,118,126,196,123, 79, 8,145,245,102,205,108, 54,227,206,157, 59,248,186,226,242,201, 57,239, 40,232,214,151,108, 55,
-107,174,158, 60,228,198,141, 19,110,222,248, 56,174,174, 89, 15, 3,223,122,251,109,134, 97, 36, 87,154,117,231,217, 40,197, 42,
-101, 28,226,156,144, 49,108,137, 69,214, 9, 67,198, 23,207,242,224,161, 31, 18, 78, 37, 17,170, 41, 77,109, 21,102,200,152, 44,
- 49,158, 99,200, 36,157,137,217,208,197,184,143,183,157, 84,198, 19,148, 67,198,168,121,191, 35,165,116,220,130, 36,150,206,127,
- 28, 70, 12, 80, 57,139,114,142, 17, 47, 33, 48,198,146, 40,177,206, 26,114, 10,196, 80,230,240,197,151,157,147,136,218, 38, 37,
-178,116,251,153, 20, 18,193, 75, 81,207, 33,144, 66, 32,199, 67,226,164, 8, 26, 37,196, 69, 89, 43,126,120,103,161,150, 73,221,
- 20, 80,111, 93, 75, 10,126, 2,102,148, 34, 26,166,210, 39, 29,117, 46, 99,221, 44,151, 19, 85, 14,122,148,162,178,197, 71, 30,
-189, 20,127, 43,196,196,233,156, 52,214, 82,183, 45,218, 57,112,138,100, 74,135,169, 21, 36, 15, 99, 79, 26, 71,198,174,195, 76,
- 19, 56, 37,175,161,177,194,136, 8, 94,180, 70, 35, 80,217,134, 49,102,198,177, 71, 89, 75, 8, 81,114, 17,156,149, 49, 59, 74,
-194, 93,124,241,140,143, 35,195, 24, 36, 15, 64,179, 23,187, 29, 9,198,247,240,182, 61, 74, 57,171, 61,169,109, 31,144,178, 47,
-178, 82, 23,210,113, 29,226,217,105, 94,206,194,142,240,163,162,211,194, 79,208, 74,162,109,235, 16,177,133,212, 54,173, 47, 82,
- 76, 71,217, 32, 83,202,228,148,177,126,172,122, 63, 26,243, 31, 97, 95, 49, 90, 66, 85,172, 21,180,178, 50, 69,208,150, 15,106,
-121, 37,171,225,163,132,172,167,102, 1,121,175,238,167,104,143,242,132,205,156,240,211, 28,162,197,173,214, 56, 99,168,140, 61,
-180, 55, 74, 97,157,197, 90, 9,156,170,139, 64,212, 32,221,124,202, 9, 91, 87,118,143,136,204, 89, 61,181, 63, 47,251,132,105,
- 89,159, 19, 49,196,114,208, 7, 98, 25, 33,164,124,204,121, 87, 71,204,176,227,162,126, 56,252,164,176,155,253,218,254, 56, 93,
-141, 15,217,167,231,167, 43,249,135,117,254,234,200,138,160, 14,170, 69, 48,133, 40,151,133,130, 53, 42,206,206,110,113,251,214,
- 29,218,185,163, 31, 94,229,253,123,239,179,219,238,112,201, 99,114,121, 33,109,230,198,157, 23, 88,220,184, 77, 55, 38,116,222,
-241,133,215, 94,224, 75,159,251, 52,227,230,146,111,191,245, 22, 63,254,245, 95,100,181,222,162,141, 37,145,184,220, 14, 60, 90,
-143,104,103,137, 62,112,115, 86, 19,222,189,199,119,222,127,196,249,106,139,210,112,235,198, 41, 57,195, 23, 63,253, 42, 87,151,
- 43, 30,156, 95,241,100,189,193, 84,134, 79,124,226, 69,126,211, 15,253, 16,163,207,252,210, 55,190, 78,192,242,223,254,196, 79,
-243,213,191,229,215,242, 59,255,129,223,193, 31,251,191,255, 95,249,224,254, 99,170,118,198,159,248,127,253,183,252,147,255,212,
-143,242,191,254,231,127, 31,255,251,127,247, 15, 48,250, 45,253, 85,199,127,247,227,127,134,183,190,115,151,255,213,255,242, 95,
-228, 51,159,255,181,252,244, 79,252,105, 30,191,243, 54,231,239,125, 64, 88,159,209,222,186, 77,123,114,135,182, 50, 60,122,247,
-117, 78,218, 36,129, 12, 49,227, 35,132, 36,147,141,132,240,188,149, 79, 48, 89,152,244, 20,206,195, 33,163,248,153,124,241,130,
-121, 76, 71, 8,216,242,198,165,236,158,229,141,165,247,221,203,222,147, 90, 18,220,246,194,187, 28, 65,165,253,159, 73, 69,220,
- 54,125,158, 54, 75, 80, 72, 72,185, 16,165, 42, 73,101,115,226, 83,214,206,161, 92,133,114, 66, 92, 83, 86, 86, 11, 74, 59,180,
-177, 40, 43,243,211,148,101,231,169,212,180, 54, 82,251,175,109,218,245, 75,230, 77, 57,172,138,127, 53, 23, 36,176, 36,199,141,
- 37, 56, 38,179,126,252,144, 86,121, 82,240, 60,126,235,107,196,245, 35,238,124,254,179,124,242, 19,159,228,221, 15,158,240,250,
- 55,191,133,246, 29, 23, 87,107,134, 44,232,208,155, 55, 12,179,198,201,222, 56, 12,140,131,101,182, 88,226,180,102, 49,155,241,
-248,193, 67, 54,171, 43, 78,230, 53,149,211,248, 33,161,115, 34,120,207,118,183, 35,219,154,113, 24,120,244,224, 17,119,239,222,
- 37,133,145,211,179, 83, 22,139, 5,198, 40,174, 86, 87, 60,120, 16,153,207, 37, 52,102, 49, 95,112,229,206,247, 23,250,211,211,
-155,108,186,129,171,123,247,185,247,193, 61, 54,151, 87, 56, 35,135,240,106, 8,108,172, 97,173,160, 81, 80,165,196,152,160,213,
-154,193, 71,234, 70,227,140,162,239,165, 67,206, 25,252,152,137, 85,162, 41,249,226,139,153,231,106, 8, 24,163, 8, 57,227,209,
-100, 29,241,209, 50, 36,193, 52, 43,163,174, 93, 20,149,150,203,214,190,225,136, 7, 11,149,144,193, 52,222, 39, 58, 58,129,252,
-228,102,191, 10, 42, 97,158, 40, 28,198, 30, 8,148, 33,142, 24,103,229,194, 25, 35, 89,137, 29, 47,169,140,182, 78,254, 30,159,
- 8, 99,196,143, 98,129,138, 33,144,252,136,202,177, 60,175, 10,109, 42,249,176, 21,198,214, 96,107,116, 93,201, 51,229,148,132,
- 6,121,128, 81,148,214,169, 76, 86,202, 74, 64,133,120,180, 74,148,192, 39,116, 36,251,176, 7, 23, 77,228, 65,152, 38, 72,138,
- 62, 69,234,217,172,252, 25,133,113, 53,186,170, 68,252, 89, 41,148, 77,228,108,228,232,235,131, 40,242,135,129,237,213,138,218,
- 54, 82,140,116,102, 12, 18,218, 98,180,193,102, 67, 76, 1, 91, 59,161,218, 70,131, 31, 3,201, 56, 98, 62, 52, 97,193,123, 66,
- 66,112,213, 33,209,123,207, 48,122, 6, 47, 29,188, 41, 86, 98,246,105,102, 89,176,202,121,154, 4,151,157,243, 94,229, 61, 69,
- 47,235, 82,248, 15, 11,182, 61,164,102,191,214, 59,106, 30,143,234, 64, 8,145, 97,244,123, 48, 89,204,153,161,138,184,114, 73,
- 10, 69, 84, 23, 98,220, 99,169,247, 21, 42, 23,218,100, 62,164, 64,102,117, 32,158,230,107,236, 83, 25,171,103, 37,107,185,125,
-148,120,190,158,100,122, 56, 51,142,226,151,143,167,217,164,242, 61, 31,160, 85, 73,101,146,202, 34,170, 60, 10,144,153, 58,114,
-103, 77, 25, 20, 30,224, 55,117,229,168, 43, 71, 85,137,128, 89, 21,187,111, 74, 9,235,172,221,147,176,184,118,235, 80,135,208,
-141,163, 66, 31, 66, 40, 35, 89, 83,198,179,105,175,126, 60, 22, 24,236,173, 74,215, 34,113,202,155, 86, 29,190,169,167, 67, 94,
-126,181,169,112,215,235,123, 62,112,195,201,251, 12,248, 12,232,218, 49, 95, 44,202,109,199,136,247, 90,105,116, 78,244,227,134,
-190,207, 96, 22,124,254,139,127, 11,243, 69,203,221, 15,222,230, 83,159,120,142,143,191,252,121,238,190,243, 46,223,120,253,155,
-188,255,157,183, 56,127,114,193,217,141, 37,102,214,114,113,126,197,173,147, 22,103,165, 24,249, 32,123,180,237, 48,210,214,150,
-109, 63, 48,196, 64,242,208, 63,124, 66,202,112,247,209, 57, 31,123,233, 5,190,242,149,175,240,206,187,239,242,238, 59,239,112,
-255,241, 5, 63,253,243,127,153, 7, 23,151,156,175, 59,176, 21, 47,119, 91,214,171,115,116, 50,252,125,191,227,119,243,127,249,
-195,255, 39, 30, 61,124, 27, 99, 45,255,207, 63,246, 95,240,219,255,129,223,206,147,203, 39,252,123,255,254,255,161,196,102, 6,
-190,249,198, 55,248, 87,255,181,255, 45,255,198,239,255, 3,188,242,226,239,226, 79,252,177, 63,202,176,190,228,254,189, 15, 56,
- 83,138,187,111,191,197,103, 63,253, 42, 58,246,244,219,142, 56,110,241, 99, 34, 68,161,104, 9, 89, 53, 18, 16,187,210, 48,193,
- 87,212, 20,176, 80,198,175,249,200,131,122,116, 17, 76, 37,103,125,122,142, 20,234,232, 89,143,251, 8,195,169, 53,218,191,153,
- 39, 62,249, 53, 3,124,161,197, 77,221,214,193,151, 69, 42,185,246,198, 72, 12,102, 93,215,212, 37,126,177,106, 26,234,186,198,
- 85, 98,243, 80, 86,188,229,170, 0,140,148, 78,211,167, 17, 81, 16,177, 28, 24,229,162,161, 10, 44,166, 76, 13,210,244,126,200,
-215,239,224,186,172, 17, 12, 17,162,116, 68,111,252,226,207,240,252,188,226,249,219,183,248,220,171, 47,242,205,191,114,151, 95,
-254,218, 95,229,236,206,139,132,126,199,235,111,191,201, 75,207,221,226,228,236,148, 49, 36, 54,155,181, 60,139,102, 73,240,138,
-104, 29,163,247,204, 81, 84,206,176,152, 53,228, 48,208,109,215,204,108, 36,102, 65, 24,143, 17,214,235, 21,219,245,138,122,190,
- 68, 43,197,110,183,101,189, 94, 3,137,186,109,153,207, 21,179,197,130,140,162,170,107,230, 51, 1,184,156,156,158,144,149,102,
-183,219, 8, 47, 65,107,250, 97,100,181, 94,163, 20,188,252,177,151,185,124,255, 62,179,232,121,252,228,146, 93, 8,140, 17, 42,
-205,190, 67,143, 49,147,124,134,214,144, 20,100,163,165, 11, 53, 10, 31, 50,149,171, 32,139,224,109, 62,111,137, 23,107,146,201,
-248,156,132,236,135, 60, 79, 49, 20,214, 63, 7, 42,223,158, 38, 89,122, 42, 97, 7,132,253, 28, 39, 5,217,171,107,113,177, 98,
-143, 89, 21,216,253,161,157,139, 58, 95,246,253,210, 31, 7,239,139, 13, 43,239,145,210, 86,110, 48,114, 62,165, 36,123,108, 63,
- 50, 12, 3, 33,248,195,249, 22, 39,190, 68, 81,230, 91,183, 39,248, 41,235, 80,206, 8,210, 43,151,120,155,161,180,175, 49,239,
-139, 53, 49, 19,125,220,219,162, 38, 70, 67, 46,236,115,229, 71,121,178,140, 17,166,132, 22,155,103,170, 43, 90, 43,232, 86,241,
-191, 27,148,115,162,166,159, 28, 24, 90,163,188,116,252,132, 72, 30, 70,178,143,172, 47,215,130,230, 45,100,197,113,236,101,103,
- 75,198,217,138,193, 15,178,206,170, 43,238, 63,186, 39, 56, 88, 36,149,210, 56,209, 84, 8,136, 71,240,174,163,143, 12,165,168,
-123,127,136, 71,229, 40, 65,243, 88,103,114, 13, 43,173,132, 90,137,150,122, 99,203,205,114,130,206,100,100, 42, 28, 75,243, 16,
-139,221,109,234, 98, 39,124,172, 42,122,157,148, 50,227,232, 11, 88, 62, 81, 85, 65, 10, 97,105, 86,199, 16, 24, 75,168,203,177,
- 86,108,175, 17,123,134,247,206,179,150,221, 2,221, 58, 38,198,125, 88, 66,229, 71, 69, 87,239,215, 71,251, 73,198, 81,173, 59,
-254,159,150,191,203, 28, 81,233,172,145, 21,160,181,186, 68,218, 90, 41,232,206, 74, 81, 55, 70, 8,140, 5,201,109, 37,103,120,
-130,134, 28,122,235,167, 85,188,211,136, 53, 70, 67,138, 18, 73,233, 75, 65,151, 66,159,246,187,236,105, 15,118, 80,208,231,195,
-245, 71, 29, 5,174,252,127,197, 34, 87,172, 74,228,253,140,120,175,198,173, 28, 89,213, 68,149,209, 70,179,221,174,209, 10,156,
-214,244,187,142,182,210, 44, 78,102,124,242,211,223,135,113, 51, 30,221,191,203,223,246, 27,126,128,231,111,183,252,197,159,253,
- 57, 30, 60,120, 76,101,160,235,119, 84,141, 40,130,183,187,142, 93, 31,104, 77,199,114, 57,199,173, 6, 98,148,120,203,152,224,
-201,213, 22,175, 20, 67, 57, 19,116, 58,224,118,222,189,255,136,199, 23, 43, 42,173,185,121,227, 12, 87,215,188,254,198, 91,244,
- 49, 98,218, 22, 21, 53, 15, 31,220,163,223, 4,254,212, 79,252, 52,187,224,249,135,127,247,143,240,211, 63,249,227,188,243,230,
-123,220,197,240, 19, 63,241,231,248,189,191,247,127,198,232,119,252, 7,127,240,255,184, 31,233,221,123,240, 30,255,202,191,254,
-175,242,239,252, 27,191,159,175,254, 29, 63,204,127,247, 95,253, 87,220,185,243, 2,221,106,205, 15,126,241, 11,204,102,134, 52,
-110,233,194,134,152, 70, 82, 18,238,117,156,214,127,229, 22, 26,163,108,136,212,196, 77,159,158,147,242,179, 84,124,152, 75,226,
-152, 20, 56,133,178, 28, 44,105, 50,190, 62, 8,213,246,123,116,241, 8, 28, 88,210,185,132, 67, 24, 25,195,235,107, 98, 17,133,
-115,226, 81,157,118,197, 85,101, 5, 52, 81,201,131, 47,192,151,242,166, 75,185,140, 54,165, 64, 68, 47,178, 39, 83, 73, 66, 27,
-202, 2,150,164, 4,227,200, 68,154,154,110,240,165,203,216, 43, 51, 73,104, 50,201, 15, 12,219, 43,172,239, 80, 42,114,249,224,
- 33, 15,223,250, 6, 55, 95,121,129,109,220,210,141,129,216,111,121,251,157,247,248,190,211, 91,204,106,203,110,179,230,188,114,
-184,197, 9, 89, 69,250,190,231,234,242,130, 74,103, 76, 14, 56,187,164,138,145, 24, 37,208,103,222, 84, 56,157,217, 94, 93,210,
-154,196,234,234,146,110, 76,140, 49,243,238,221,251,120, 12,237,124, 78,219, 52,116,151, 59,110,223,190,205,124, 33, 92,248,237,
-110, 71, 85, 85,156,156,158,177, 88,204, 9, 33,210,204,230,135,206, 53, 36,140,117,251,176,160, 27,183,110,113,235,185,231,121,
-180, 56, 71, 15, 3,219,199,143, 25,140,226,241,227, 43, 60,169, 36,177,201,138, 37, 23, 84,168,236, 89, 51, 73, 73,230,118,202,
-146,212,150,146,194,232, 92,120,220, 6,159,215, 36, 50,157, 31,139,224, 80,151, 16,160, 61, 70, 30,163, 53,174,146,152, 90, 82,
-198, 76, 36, 67,178,116,202,169,124,228, 76,223,245,144, 18,166, 50,140,218,160,181, 47, 63, 95,201,180,119, 70,239, 19, 8,115,
- 54,168,168, 75,206,125,185,108,202, 76, 94,186,196,164, 24,250,158, 16,179, 4,218,120, 47, 35,119,239,137,126, 36,134,233, 98,
- 32, 89, 1,146,124,105, 37, 95,221, 88,137,241, 53, 14,140, 4,200, 40, 51, 69,252, 78,139,237, 88, 96, 79, 17,178,222,163, 87,
- 21,162,211,152,138,150,214, 78, 6,195,229, 34, 48, 77, 63,149, 86,184,170,194,100, 89, 41,152,178, 78, 18,152,146, 76, 84,115,
- 10,232,193,147, 67,134,232, 81, 33, 16,255, 63,180,253,217,147,101, 87,118,230,137,253,246,112,198, 59,249, 28, 30, 51, 2, 9,
- 36,144, 3,115, 6,147,243, 88, 85,100,145, 44, 14,213, 53, 88, 85,203,164,146,117, 61,182, 76, 50,153,254, 0,246,131, 30,101,
-146,245,131, 76,166,150,153, 36,211,216,234, 50,171, 42,235, 26,154, 85,236, 34,153,153,100, 50,153,137, 4, 18, 51, 16, 0, 34,
- 16,163,207,126,231,123,166,189,183, 30,246, 62,247, 94,143, 8, 36,201, 86, 9, 48, 55,120, 4, 60, 60,220,253,158,115,214, 94,
-107,125,223,239, 43, 74,108,213, 48, 62, 31, 7,159,181, 96, 49,155, 7,104,146, 8, 92, 0, 79,213,139,226,152,218, 25,156,242,
- 16,175,166, 41,177,196,200, 88,209, 24, 95,196,141, 49,126,229, 81,215, 20,101, 77, 89,249,172, 0, 16, 68, 90, 61,181, 30, 93,
- 38, 49, 98,195, 40,219,121, 62,185,246, 32,160,118,101, 42,150, 1, 92, 97,133,103,140,135,175, 24,223,125,218,165,197,109,173,
-151,176,118, 57,219, 55,198, 80,215,254, 9, 83, 55,214,187,127,194,178,175,105,140,231, 37,212, 13,198,154,213,243,107,173,152,
-187, 53, 52,249,147,135,144, 37, 71, 67,138, 39,132,128,226,169,102,244,201,229,240,179,180,101,206, 61,225,232, 18, 23, 67,178,
-124, 71,206,114,167,174,131, 75, 71, 71,146, 36,142,137,219,162, 30,107,226, 72, 7, 70,134,215,166, 88,107, 3, 32, 44,112,137,
-215, 79, 38, 79,170,240, 90,113,147,181, 46,228, 69, 27, 31,228, 16,148,161,198, 88, 76,227,179,164,253,219,202,110,244,228, 1,
- 72, 60,113,124,123,246, 55,238, 62, 85,100,247,227,172,111,254,251, 8,187,144, 86,129, 29,112,164, 82,107,112, 62, 14, 52, 78,
- 34,148,140,232,228, 41,139,197, 28,165, 98, 16, 25,183,158,255, 12,105, 46, 40,203, 51,126,253,111,125,147,217,249, 9,223,254,
-247,223, 99,182,152, 96, 22, 83, 68,150,161,133, 65, 7,149,105, 81,248, 76,114,157,104,170,198, 95,100, 89, 22, 81, 86,126,143,
- 86, 89, 71, 45,188,232,197, 45, 25, 76, 46, 92,227,134,170,153,163,112,204,138, 5,159,255,220,203, 60,127,235,121, 62,248,224,
- 67,206,207,199, 94, 21,171, 34, 38,147, 51,238, 61,254,136,239,255, 80, 51,153,205,120,229, 27,191, 72, 57,254,215, 28,156, 62,
-228,221,183, 51, 58, 29,197,243,183,158,163,223,239, 51, 28,158,135,241,160,230,224,224, 49,255,135,255,234,191,226,127,245, 63,
-255, 95, 48, 58, 27,241,189, 63,249, 35, 18, 21,113,244,201, 61, 58, 29,205,214,165, 46,150, 10, 43, 93, 24, 97,179,220, 7, 53,
- 97,183, 40,132, 69,216, 85,103,106,157, 93,187,160, 87,188,246,165, 34, 93,248, 40, 64,127, 48,144, 23, 2,121,214,116, 51,126,
-220, 45, 85,208, 64,132,155,194,173, 20,166,237, 56,190,253,179, 74,234,181,223,247,187,125, 21, 8, 98, 82, 43,111, 61, 87, 97,
- 76, 31,188, 34,206,134,194,216, 42, 85,195, 3,101, 60, 62,231,232,224, 17, 74, 74,186,189, 14,151,111, 61,231, 81,139, 34, 6,
-153,248,245, 67,232, 80,252,181,161,137,178, 20,129,242, 63, 11,107,113,182,166,174, 23, 60,252,248, 99,206, 31,223,227,250,238,
-128, 84, 43, 30,124,240, 62, 7, 31,223,102, 96,103,140,147, 24,135,226,228,228,156, 71,143, 14,232,124,240, 62, 66, 56,226, 36,
- 97, 56,158,178,219,219, 8, 57,227,150,170,158, 51, 60,247,254, 99, 37,125, 56, 68, 89,204,201,179,140, 60,141,217,217,220,228,
-240,224, 17,216,138,249, 98, 65,103,176, 77, 57, 43, 56, 61, 59, 99,119,255, 10, 73,146, 16,167, 25,231,195, 49,189, 16, 0,145,
-101, 25,163,209,136,197, 98,225,147, 0,175, 92,165,170, 60, 3,123, 62,159,179,189,189,197,254,254, 62,247,238,223,227,202,149,
-171, 44, 22,115,164,194,163, 55,211,148, 36, 75, 57, 19,150,141, 75, 59,236, 40,197,244,193, 49, 38, 64, 64,140,241,211,175,198,
- 16,128, 62, 14,219, 24,159,197, 32,253,255, 47,203, 38,100,141,107,210, 88, 16, 73,144, 74, 80,154, 21,224,200, 88, 23,246,203,
-225,160,164, 60, 72,166,141,246, 80, 82,160, 5,248,144, 73,207,156,104,240,193, 41, 18,129, 17,146, 70, 10,106, 97,144,162, 34,
-144, 69,124,183, 45, 9, 22,159, 8,156, 69, 42, 31,241, 42,148, 71,231,214,117,237,109,166, 65,235, 81,215,181,143,144,109,124,
- 66, 98, 93, 86,152,166,161, 41,107,172,115,193, 71,220,230, 98,251,206, 95, 71,177,199,115, 42,239,148,240,221,183,195,136, 38,
-120,149,181, 47,186,117, 19,106,187, 47,248,182,197, 43, 7, 95,179,223,131,107,144, 33,183,188, 49,190, 33,177, 97,100,219, 54,
- 86, 38,160, 74,149,143,224,116,194,219,242,104,157, 75,117,131,171, 26,132, 53,184,166,194, 25,139, 41, 13,139,233,130, 56,138,
- 40,202, 10, 99, 26, 86, 2,233,128, 78,109, 28,105, 22,161,226,136,218, 54,104,161, 88, 20, 11,154,180,231,161, 92,225, 57, 95,
-214,134,170,241, 59,244, 42, 8, 22,141, 9,216,238, 16,204,180,116,126,180, 55,187,244, 54,223,214, 17,227, 59, 79, 17, 82,225,
- 2,113, 82,171, 48, 8, 89,227,188,215,134,186, 33, 76, 85, 46, 6,129,121,241,164, 13, 28,121,187,124, 43,171, 26, 33, 26, 31,
-145, 27,198,106,141,241,217,236,237,116,198,173,249,228,219,189,253,133,181, 55,159,214,177,203,149, 10, 94,170,139,182, 59,177,
- 22, 55,254, 12,187,246,143,167,165,174,144,186, 79,199,214,134,132,192, 48,134, 79, 34,159, 27,159, 36,109, 97,247,220, 5,161,
-252, 51,216, 90,131, 38, 72,254,151,123,234, 16,204,161,130, 81,191, 61, 45,136, 53,219,146,167, 8,153,229,232,189, 49,205, 18,
-171,233, 95,100,127,202,106,140, 13,191,239,213,158,118,201,212,181, 23,208,162,127, 85,184,205, 95,165,147,111,156, 68,171,246,
-103,189, 28, 23, 96,133,240,157,131,138,200,179,156,110, 55,231,227,143,238,242,224,193, 29,207, 76,126,249, 39, 56, 61,155, 51,
-216,232, 81, 86,167,124,227, 43, 47,112,248,240, 61,222,248,193,155, 12,143,167,164,169, 67, 42, 75,148,167, 36,221, 46, 69, 99,
-121,116, 52,162,177,150,110, 63,103,180,168,153, 22, 37, 72,207,175,182, 97, 80,168,180,246, 41, 77,202, 43,132,215,167, 60,173,
-205,198, 2,206, 52,188,249,246,123,124,230,230, 13,254,206,175,253,109,110,191,247, 1,227,209,132,163,209,156,210, 22,140,199,
-143, 57, 58,233,147, 38,125,110,236, 95,227,103,126,233,151,249,227, 63,250, 99, 30,220,125,159, 63,251,246,127,199,253, 71,159,
- 96,108,179,138,209,116, 22,225, 42,222,120,235, 13,254, 55,255,229,127,201,255,250,191,248, 47, 56, 61, 62,225,224,195,247,112,
-179, 33, 7,143, 14,125, 98,212, 32,193, 42,135,105, 73, 72,237,202,226,194,177,107, 5,152,145,226,217, 39,213,229, 69, 40,130,
-158, 92, 60, 89,212,131,215,179,181,181,137,150,176, 36, 87,163,119,199, 90, 81, 95, 33,100,219,160,132, 86,135, 97,157, 91, 37,
- 37,105,129,210,120,209,155,106,199,252,190, 40, 27, 83,135, 61,125,131,108, 26,132,112,156,157, 30,240,198,107, 63,160, 46,231,
-236,110,111,241,167,239,191,199,111,254,222,239,209,219,189, 68, 62,216, 3, 81, 99,132, 98, 60, 58, 99,115,163, 71,234, 12, 56,
-133,152,207, 65, 72,234,217, 2,217, 52,200, 88,161, 92, 77,206,130,121, 61,165, 60, 93,160,147, 4, 51, 29, 83, 76, 39, 76, 38,
- 51, 54, 58, 57,231,231, 35,110,127,116,151,247, 63,254,132, 90, 68,108,110,109,147,230, 25,103,227, 5,101, 93,123, 46,187,105,
-192, 90,138,197,130, 97, 40, 74, 90, 57,104, 74,154,126,159, 88, 69, 92,190,188,207,100, 50, 38,237,118,216,187,118,147,254,198,
- 46,227,241,132,135, 71, 39,108,109,111,163,226, 24,135, 32,201,114,226,204, 11, 5,187,253, 62, 55,111,221,194, 58,199,240,124,
-200,222,254, 62,198, 24, 30, 62,124, 72,127, 99, 64,148,248, 56, 83, 7,204, 22, 5, 73,146, 82,214, 11,178, 44, 99,120, 52,164,
-172, 74, 26, 28,249,160,207,213, 56,227,232,116,140, 89, 84,126,252,238,189,138, 32,125, 66,155, 13, 1, 32,206,212, 8,225,131,
-129,140,245,129, 41, 58,142,137, 26, 71, 55,209, 56,211, 80, 57,208, 65, 0,232, 39,170,110,137,236,245,226,103,175,215, 81,194,
-250,192, 22, 17,160, 68, 56,156,109,112, 13, 56, 29, 33, 92,236,139,183,113, 52,194,132,161,160, 11,188,138, 16, 16,238, 86,177,
-153,203,107,214,250, 76,121, 0,219, 24, 31,196, 22,132,115, 77,221,248,213, 70,240,195,155,160,228, 23,107,170, 94, 29, 14, 42,
-173,245, 83,170,216, 23, 89,169,188, 51, 68,218,176, 63, 23, 72,169,151,221,157, 23,163,152,149,166, 74, 71, 33, 60,104, 37, 15,
-183,206,171,215, 81, 62,202,117,217,216,132, 6, 80, 69,145,135,212, 90, 31, 22,132, 18, 8,235, 35, 94,133, 53,184,218,224, 26,
-131, 48, 13,212, 53,174,174,153, 79,103,148, 69, 77,154,118,169,235, 41, 90,235,101,186,162, 16,146,249,162,242, 43,172, 56,163,
- 52,150,198, 89,104,252, 10,211, 24,139, 85,202,143,220, 27, 31, 40, 83, 85, 13, 85,109,168,106,191,171, 94,214, 14,215,106,166,
-196, 19,210, 40,187, 28, 76,203,144, 43, 31, 73, 65, 18, 43, 47,244,138,181, 71,175,134,113,185, 9,226,220,170,110,168, 27,111,
- 11,108, 3,101, 86, 63, 39, 15,191,105,107, 79, 21,220, 16, 38, 20,240,186, 17, 75,225,235,122,209,111, 51,219,185, 96,187, 19,
-171,142,189,157,146,184,167,157, 86,171, 16, 40,249,148,246,107, 77,105,247,233, 97,101, 79, 64,118, 62, 85,250,189, 86,224,165,
- 20, 62,131, 67,249,104,225, 40,140,220,147,128,192,141, 34,237, 67,150,194,115,181,105, 28, 58, 44,145,150, 5, 91,138,213, 28,
-191, 45,232, 81,164,151,136,188, 86,165,106,173,183, 61,248,174, 92, 99, 77,176, 63, 93, 40,234,254,253,166,246,176,127, 19, 62,
-198, 88,187, 84, 65,183,177,117,207, 26, 99,252,101, 59,247,167,138, 62,130,235, 55,111,113,116,120,128, 45,231,173, 20, 15,132,
-242,131, 84,161, 72,163,132,221,237, 29,170,170,228,244,244,152,205,173, 13, 54, 55,119, 57, 59,159,177,189,191,139, 53,115, 94,
-184,113,131,135, 31,125,196, 39, 31,125,196,124, 54,161,180,134,142,142,208,145, 64, 38, 49,105,119,147,135,159, 60,228,124,110,
- 80, 81, 68, 83, 72,182,250,187,100, 91, 30, 75,105,165,164, 42, 27, 78,143,143,105,202, 18, 37,189, 93, 70, 9, 25,198, 72, 79,
-104, 34,133, 31, 97, 90, 26, 62,186,119, 15,245,167,127,202,111,255,198,223,230,193,189,123,228, 7,143,185,125,231, 99,170,217,
-156,195, 71,143,201,147, 1,239,124,240, 1, 63,241, 15,127,151,175,124,109,198,244,143,254,144, 89, 63,227,240,145,163,116, 14,
-164,194, 8,175, 48,149, 52,140,199,231,124,239,213, 87,249,103,255,242,223,240,155,255,201,239,241,127,254,223,253,111,145, 38,
-163,107, 44, 90,117,144, 42,162, 17,181,231,148, 35, 80,194,231,201,183,118,152,101,180, 40,235,133,220, 46, 69,143, 23, 47,123,
-185, 28,141,175,198, 72,226, 2, 19,125, 37,156,243,201, 26, 34,116,126,182,245,136,175, 91,222,194, 97, 66, 5,175, 38, 82,249,
-108, 45,103,145, 90,160,180, 39, 8,250,208, 23, 21,114,175,229,114, 42,208,122,154,125, 55, 82,130,173,121,243,213,239,113,122,
-244,144, 44,150,188,123,255, 54,119, 63,190,203,255,254,206,199,252,214,223,253, 93, 26,145,241,252,103,191,192,108,182, 32,141,
- 5, 91,157,203, 8,215, 96, 10, 11, 33,125,171, 25,142,153,156, 28,211,233,230,228, 27, 61, 54, 82, 56,154, 13,185,127,239,144,
-203,151,246,105,202,146, 56, 73,169,209,232,180, 75, 81,157, 81, 89,137,145, 41,231,227, 25,221, 94, 31,169, 34,116, 2,101, 93,
-211,205, 50,143, 90, 45, 42,239, 26, 48, 6,161, 21,146,138,122, 30, 49,155,140,201,146,148, 44,239,113,227,249, 23,184,116,245,
- 42, 42, 74, 16, 66,179,119, 89, 16,165, 57, 31,222,185, 67,237,160,108, 28,157,222, 0, 21,107,106,227,175, 77,161, 52,166,170,
-208,177, 15, 43,153, 47, 22, 1,121,155,160,148, 98, 60,153, 16,197, 49,221,110,215,243,192,243, 12,133, 34,205, 82,159,208, 22,
-107,191,227,243,243, 23,172, 82,158,234, 70,155,121,237,227, 88,189,146,208,162, 21, 52, 70, 34,133,101, 81,213,228, 54, 70, 68,
- 26,109, 27,122,113,204,188, 50, 30,109,236,132, 23,161,181, 57,213, 65, 9, 29,197, 18,169, 67,254,180, 2, 37,195,216,221,121,
-136,143,112,254,184,236, 5, 88,126,199,221,212, 6, 45,188,168,168,181,229, 90, 43,124,214,119, 56, 52, 56,219, 96,156,193, 10,
-136,162,216,143,195,219,221,189,243,123, 89,225, 31,110,222,123, 28,212,245,214, 9, 47,190, 12, 32, 16,144, 88, 39,177, 78,172,
-165,180,121, 93,134, 23, 97,122, 70,134,176,198, 67,149,214, 59, 86,103, 2,156,198, 44,137,117, 75,112, 82,187,219,149,224,180,
-135, 45,201,112,168,109,145,166, 46, 76, 25,150,162,176,166,246,154, 3, 33, 16, 77, 3,193, 86, 22,122,182, 48, 61,105, 24, 14,
- 71, 32,189, 75,164,170, 74, 63,209, 10,139, 48,165, 52,117, 61, 35,203, 58, 68,113,202,162,110,168,173, 35, 86,210, 23, 19,169,
-189,128, 48, 28,245,151,123,238,246,249,111,237, 42,145,113,109, 76,125,113,109,219,102,103,182, 83, 14, 65, 26, 71,228,105, 68,
-146,104,210, 36, 34,142,147, 48, 62,118,222, 5, 98,253, 36,160,106, 68,208,112,153,165,144,187,213, 93, 24,107,105, 26,191,211,
- 87, 85, 67, 89, 86,148,149, 95,173,173,186,114,150, 90,177,101, 87, 46, 68, 16,253,138,165,107,237,130, 24,175,157,166,182,113,
-224,238,217,190,234,103, 53,156,159,214,149, 95,252,204,226, 83,145,232,171,103,238, 90, 97,199,175,163, 86,141, 76, 72,138, 11,
- 49,209,235,248, 89, 41, 37,250, 89, 99,238,117, 56,191, 87,223,233,101,112,197,186,189,173, 9,227, 15, 47,148,243, 39,219,102,
- 57,126, 55,171,110,190,177,193, 87,106,131, 88,193, 81, 47,199, 33,246,130,255,248,175,218,169,127, 90,215,126,243,185, 91,252,
-230,111,252, 38,255,183,255,203,255,137,166, 44,194,139,232, 59, 7, 29,199,108,109,110,177,181,217,231,241,163,251,104,173, 73,
- 59, 29, 70,179, 41, 27,219, 27,204,202, 49, 95,251,252,231,249,209,159,127,135,106,116, 70, 34, 18,138,185,101, 99, 43,161,168,
- 43,180,141, 40,167, 53, 39, 15, 62, 65,165, 29,190,242,147, 95, 98,239,210, 21,210, 56, 97, 49,155,178,119,105,151,131,163, 35,
-246,175, 94, 99, 54, 91,176,217,237, 18, 73,193,163,131,135,124,255,213, 31,112,255,193,125,228,154,104,143,112,177, 11, 90, 84,
- 41,148,214,242,222, 39, 31,115,233,141,215,248,189,223,249, 29,254,240,223,255,183,244,143, 51,142,143,166, 76, 71, 99,234,102,
-202,241,217, 1,255,225, 79,254,130,223,250, 91,191,200,189,219,111,145,198,146,249,124,204,237,187,159,160,162, 8, 83,251,159,
-113, 36, 29,105,156, 80, 84, 37,255,175,255,230,255,205,223,254,181, 95,229,249,151, 95,230,248,195,247,176,165, 33, 75,251, 12,
- 54,251, 28, 14,143,194, 88,221,211,178,252, 8,201,174,217, 4,237, 42, 90,114,205,206, 32, 46, 28,184, 60, 40,102,229,202, 16,
-203,240,157, 11,111,107,176, 66,255,119, 40,255,144, 22, 43, 91,155,148, 43, 23,133, 20,114,217,169,123, 5,112, 0,157,132, 20,
- 55, 29, 70,119, 82,251,189,163, 12, 92,230,213,186,200,171,166, 93, 93, 83, 21, 99,238,125,252, 1,245, 98,196,105,181, 96,123,
-115,147,126, 39,227,124, 54,230,232,224,128, 89, 97,121,235,205,119,232,245,122,124,225,165,231,233,171,133,247,139,167, 57,170,
-147,227,170, 26,187, 24, 50, 63, 63,164, 28, 57, 98,246,113, 70,208,207, 35,152,121,229,122,154, 36,116,187, 3,102, 69,195,104,
- 86, 32,116,204,231,190,240,101, 68,103,155,114, 49,163,177,126, 55,175,227,132,233,116, 70, 55,203,136,162,136,121, 51, 9,164,
- 44, 95, 48,181,141, 81,141, 70, 58, 88,204, 11,242,218, 34,116,194,104,178,160, 59,136, 49,117, 65, 93,215,108,110,109,115,173,
-110,184,247,232, 0, 91,215, 72,173,169,235,134,170, 90,208,235,246,208, 42, 90,174,203,146,216,115, 25,196,218,207,180, 40, 12,
-251,151, 46, 81, 85, 37, 77, 93,161,179,140,114, 81,248,149,133,240, 15, 89,140,197,214, 13, 56, 71,109,131,160,208,249, 93,165,
- 86, 80,215,134, 72,203, 0, 99,241, 86, 28, 83, 53,212,149,193, 56, 71, 81, 85,164, 73, 70, 39,142, 40,171, 2, 99, 3,102,213,
-132,204, 60,173, 72,117,176, 82,134, 21,137, 23, 64, 25, 26, 83,161,173, 70,248,106,226,119,139,218, 95, 51, 46,248,143, 91,165,
-180, 9,197,188,237,152,140, 49,168,160, 29, 48, 97, 74,214,178,186,235,218,250, 17,174,113,136, 56, 10, 93,156, 15,242, 89,185,
- 31, 28, 66, 74, 34,229, 49,163, 44, 83,198,252, 62, 61, 10, 98, 57, 41,181,215,134,132,192, 32, 63,212,212,172,188,194,126, 4,
-109,155, 64,210,112,254,239,182,181, 69,199,169,255,121, 90,127,176, 80, 90, 5, 32, 14, 40,169,112, 77,179,252, 51, 75, 85,181,
- 49, 62,254, 86, 11, 92, 85,249,137, 73,221,128, 49, 97,245, 96,150,197,221, 26, 24,141, 39, 68, 73, 26,126, 38, 13,113,148, 32,
-149,183,168,249,209,190, 36,142, 83,172,105,147,233, 26,186,218,211, 0,163, 56,241,159,223,137,181,206,213, 11, 97,109, 75,127,
-187, 0, 77, 17,203, 67,253,133,157,117,248,147, 82, 18,162,169, 99,242, 44, 33,203,124,254,121,146,100, 1,223,139,183,161, 53,
- 13, 85, 99,150,142, 28, 47,112, 19,203,195,143,175, 59, 13,101, 85, 83, 85, 53, 81, 89,133,209,127, 21, 14, 1,126,165,216, 22,
- 97, 41, 86,212, 55,159,232, 24,166,128,210,173,237,201,185,104,196, 14, 7, 2,177, 62,248,119, 79, 51, 8, 62,141,209,242,236,
-145,251, 90,212,235, 51, 26,188,103, 54,238, 98,181, 18, 87, 33, 84,107, 21,143,189,242,238,183,111,234,197, 27,251,191,191, 84,
-191, 35,150,169, 90,109,244,165, 8,106, 63, 17,102,251, 4,117,158, 84,254,230, 90, 26,225, 67,150,114, 20,112,124,145,246,135,
-129, 72,249,211, 68, 20,233,160,220,243,121,216, 74,137,208,129,249,139,192, 61,195, 72,224,184,120,130,114, 63, 38,131,189,253,
-128,209,120,206,239,252,222,223,227,235, 63,243, 11,188,117,251, 14,147,194, 7, 33,108, 12,186,244,183, 46,147,100, 93,186, 81,
-205,163,123, 31,208,217,216,160,150, 25, 73, 62,160, 88,204,248,249,175,125,145,183,127,248, 67, 62,124,239,109, 16, 11,154,166,
-228,124, 92,115,105,175,203,209,180,225,100, 14, 58,217,226,107,175,252, 44, 95,252,242, 79, 48, 62, 63,225,243, 55,175,179,213,
-233,241,221, 87,223, 96,127,208,197,206,198, 92,218,187,140,138, 58,124,251, 15,255, 61,167,119,222, 35,142, 99,126,242,155, 63,
-197,175,254,226, 47, 51,155, 76, 56, 63, 63,247,157,105,235,141,181, 43, 3, 94, 24,133,112,116,112,140,214, 49,127,231,239,255,
- 19,190,247,173, 63,102,116,126, 72, 19, 41,242,126,143, 65, 22,161,108,205,241,120,198, 47,253,202,111,112,114,231, 14,227,195,
- 71,212,182,228,124, 62,195, 53, 13,145,133,218, 9,154,122,142,165, 96, 54,159, 48, 45, 13,255,228,127,252, 63,225, 79,254,240,
- 63, 96,202,194, 3, 89,146, 46, 70, 41, 74, 59,199, 81, 34,157, 2, 19,121,155, 5,107, 41, 74,206,122, 11, 87,155,121,220,222,
- 41,173, 17, 85,138,181,145,150, 88,203, 31,110,201,112,161, 32, 47,187,120, 21, 14, 9,210,219,108, 2, 39, 29,161,150,251,243,
-118,124,175,117,224,173, 75, 63,218,215, 64,162, 35,242, 36, 33,203,210, 16,236,225,255, 27,167,169,223,115,234,224, 49,247,203,
- 55,207, 88,168,231,124,240,230,247, 57,120,112,155, 98, 62,199,168, 28,213,217,101, 82,103,152,120,192,239,254,227,255, 17, 63,
-255,235,127,147, 47,126,249,101,164,171, 40,206,206,153,142,103,168,188, 79,146,118, 16,206,139,149,100,164, 56, 63, 63, 33,149,
- 17,105,150,144,119, 58, 24, 33, 73,187, 93,242,188,235,149,202, 85,133,177,142,206,246, 14,215,110,222, 32, 78, 61,244, 37,235,
-246, 49, 72,154,186,194,212, 6,103,252,195,123, 81,148,104,173, 48,117,233,163, 68,173, 79,149,139,211, 14, 27, 59, 59,204,202,
-138,225,120, 76,150,165,108,244,123,104, 42,164,169, 41,102, 99, 58, 89, 70, 81,248,191,175,177,142, 72,107,138,249, 28, 37, 4,
- 81,164, 89,204,166, 28, 60,122, 72, 55,203,232,230, 25,199, 71,135,108, 12,122, 12,135,167, 76, 70,231,148,197,140,243,179, 19,
-238,223,187, 11,117, 77,170, 35,102,211, 49,199, 39,199,204,139, 2,219,120, 97,212,241,233, 41,166, 49, 36, 56, 50, 41, 73,148,
- 68, 73,136,148,239,154,173, 84, 52,141,135,199,184, 80, 28,147, 84,209,233,102,228,169,102, 81, 46,120, 60, 90,208,168, 20,156,
- 65,135,177,113,146,106, 58, 93,208,177, 69, 69, 14, 33, 29, 66,106,210, 52, 35, 10,168, 87, 21,210,177,252,184, 81,181, 40,110,
-127,233, 41, 47,102,212, 65,115,161,148, 10, 41,132,126, 93,132, 37, 56,147,253,231, 17,200, 64,158,243, 65, 40,173,210,165,170,
-189,181,179, 50,126,141,215, 56,135, 84, 17, 73,156,147,102, 93,116,228, 11,156,140, 37,105, 39, 35,235,244,233,244, 55, 72, 58,
- 61, 68,154, 67,148,225, 84,140, 17, 26,233, 36,194, 53,184,166,192,214, 37,210,250,152, 95, 97, 42,176,198,119,183,206,173, 89,
-172,196,202,246,107,220, 82,192,135,245,153,245, 66,133,152, 96,239, 45,241, 22, 62, 99,188, 53,206,248,130,238,156,133,218, 34,
-109,133, 48, 53,212, 80, 77, 45, 31,223,254,196,127,127,243, 17, 85, 89, 34, 84, 66,156,118,104,170,154,162, 88, 32,227,136,164,
-219, 67,233,148,209,100,204,168,156,208,143,123,148,165,197,108,110,160, 6, 61,234,166, 93,185, 26,154,208,165, 91,235,188,134,
- 66,136, 0,129,138, 72,211,200,167, 58,182,221,186, 23,141, 96,141,165, 54, 13, 2, 72, 35, 77,150, 70,228,105, 76,150, 39,100,
-121, 74,158,251,112,158, 86,232,170, 35, 29,196,175, 17, 89, 18,135,251, 59, 33,203,114,178, 44, 35,205, 82, 63,130,142, 60, 12,
- 72,133,233,156, 49, 22,131,103, 33, 88,227,213,238, 34, 60,155,180,246, 73,147,145, 2,173,180,175, 75, 74,145,165, 62,143,163,
-147,166,164, 73, 68,154, 68, 68,177,207, 64,208,145,246, 97, 43,170,253,111,155,176, 38, 62,149,115,255,227,114, 76,156,107,252,
-129, 72,172, 42, 93,171,253, 49,117, 69, 85,150,148, 69, 73,177,168, 88, 44, 74, 15, 8, 2,159,236, 23,154,107,173,125,173,245,
- 1, 82,114, 53, 61,119,126,114,174, 94,188,113,233,247,133, 92,169,143, 87, 99,211,213, 40,179,149,215,139,181,253,233,250,239,
- 47,201, 55, 74,173,172, 98,122, 61, 53,201, 91, 62,148, 86,104,165,194,168, 84,133, 67,129, 8,106,231, 21,130,246,201,241,132,
-120,194,130, 32,158,241,195,107,223,175,108, 69,167,223,227,231,126,241,151,248,155,191,254, 91,108,239, 94, 97, 94, 24, 4, 49,
- 81,148,177,183, 61,224,193,221,219, 72, 41,200,250, 27, 8,229, 47,140, 47,125,238, 37, 62,124,247, 61, 62,188,253, 26,147,209,
- 28, 91, 73,174, 95,191, 66, 69,205,209,121, 1, 58,231, 27,223,248, 6, 95,255,242,215,185,119,255, 1, 63,251,115, 63,195,225,
-227, 7, 20,227, 17,111,189,245, 54,181, 20,100,177,160,215,201,249,214,159,125,143,195,211, 51,132,157,243,210,243,151,232,110,
-108,114,231,147,123,252,232,245,215,248,233,159,250, 41,126,230,167,127,150,199,135, 7, 76,103, 51,223, 9,133, 37,155, 91,218,
-253,188, 23,244,228,248,132,221,189,203,252,204, 79,189,194,127,255,237,111, 83, 24, 71, 47,213,244,100,195,120, 52, 70,103,125,
-190,246,245,175,179,152,142, 25, 15,207, 0,193,116, 58, 99, 94, 84,126,151, 36,101,200,123,118, 88, 43,120,124,120,198,223,254,
- 91,127, 27, 44, 60,184,255, 9,105,150,250,196,163, 98, 78,164,125,174,184,112,107,105,107,159, 18,129,251,151,120, 15,214,130,
- 94,196,133,172,241,245, 87,115, 69,156,146,107, 57,236, 33, 0, 37, 16,186,164, 88, 93,127,109,103, 41,133, 23, 57,197, 81, 68,
-150,249, 98,158,101, 62,177, 43, 73, 19,127, 35,198, 17, 66,201, 11, 98, 62, 28, 40, 26, 78, 79, 30,115,255,147,187, 20,149,161,
-180,154,173, 75, 55,184,113,235,121,126,229,111,252, 50,157, 44, 65, 54, 5, 81,164,232, 38, 9,166, 44,120,247,237,119,160,105,
-200,149, 68, 98, 64, 89,146,204,255,191,243,195, 99,162, 56,245,133,218, 9,242,222, 6, 89,183,199,230,214, 54,189,193, 22,183,
- 62,251, 18,187,151,246, 73,178, 14, 82,199, 28, 29,159,144,102, 25, 89,150, 6,175,105,138,115,126, 28,236,130,224, 80, 10, 15,
-210,136,162, 8,227, 32, 78, 50, 46, 95,187, 70,146,230, 28, 30, 30, 97,112,108,239,108,145,199,138,166, 42,177,198, 80,150, 21,
-113,156, 50, 43, 10,111,177, 18, 80,149, 37, 85, 85,145, 36, 49,139,197,130,241,112,136,115,142, 56,138, 56, 27,158, 48,155, 77,
-121,252,248, 49, 90, 41,238,222,185,131, 49,150,241,120,204,108, 58,165, 42, 61,117,108, 94, 86, 44, 22, 5,101, 85, 49, 26,142,
- 56, 25,142,217,218,218,240,108,253,170, 33, 81, 18,141, 67, 75, 15, 2, 42,235, 26,108,120,221,130,151, 60,207, 19, 54,183, 6,
- 24,107,144,113,194, 39, 71, 35,162, 36,193,212, 13, 42,100,100, 39,137, 38,235, 8,164,183,134,248,108,116,173,124, 70, 67,232,
-144,149, 82,171,168, 91, 21, 48,173, 1, 37,235,218, 67,226, 69,184,159, 47,144, 79, 16,204,214, 33, 98,214,249, 21,161,181,126,
- 37, 88,214, 13,101,227,213,221, 77,109,151, 58,129,180,211, 69,197, 41, 34, 8,211,148,146,232, 40, 70, 39, 25,105,183, 75,156,
-117, 16, 81, 12, 90,226, 84, 43,205,181, 8, 91,131,173,176, 77,133,116, 94, 55, 99,234,210,171,212,133, 12, 83,245,182,176, 7,
-212,108, 8, 75, 89, 2,187,172,161, 93,145,186,214, 82,212,238,172,156, 9, 30,248,112, 8,176,190, 64, 8, 26,255,126,229, 56,
-122,124,204, 39,119,238, 18, 73,201,240,228,136, 52,203,105,172, 63, 72,107, 41,153, 76, 38, 36,121,135, 56,237, 97, 12,204, 22,
- 51, 10, 83,209,139, 50,138,202, 16, 95,218, 67,230,121,192, 69,187, 37,120,202, 6, 22,133, 13, 93,107,164, 36, 73, 28, 70,233,
-145,127,198, 47,239,239,118,178,107,188, 56,208,127, 92, 18, 58,245,213, 91,154,132, 67, 91,176, 8,182,107,162, 36, 77, 72,210,
-148, 52, 75, 73,243,140, 44,247, 7,248, 52,246, 69, 95, 7,170,159, 23,209,182, 5,221,219,241, 90,241,158, 82,138, 40,208, 0,
-227,240,185, 35, 29, 17, 69,138, 60, 77,232,118, 50, 58,121, 66,150,196,164, 73,132,142,124,188,179, 10, 69,189, 21, 38,250, 6,
- 87,173,124,234, 63,142,144,246, 84, 81,183,254,117, 92, 71,157,187,139, 69,189,174, 42,202,162,162, 40, 42,138,181,162,238,163,
-113,253,179,111,117,160, 13, 13,177,107,197,193,254, 57,173, 94,184,182,251,251, 75,165,113,107,245, 8,210,253, 54,254,114, 89,
-212,197,197, 7,246,210,119,248, 4,132,222,255, 0, 37, 74,251, 28,105,213, 22,114, 37,195,175, 87,111, 44, 79,212, 92,200,209,
-125, 42, 28,227, 9, 47,225,179, 10,186, 31,103, 87,156,158,159,115,120,124, 74,221, 56,238,221,123,196,124, 90, 49, 28, 21,116,
- 51,205,233,227,187,140,199, 35, 58, 27,155,160,124, 97,184,178,179,201,124,120,194, 15,127,240, 3,112, 53,189, 52, 34, 77, 98,
- 10, 99, 57,153,150,100,219, 87,248,230, 79,190,194,103,159,191,193,243,207,221,228,165,207,190,192,159,126,231,219,236, 95,218,
-195, 84, 53, 73,146,243,133,175,254, 20,145, 72, 72,226, 1,151,174,188, 64,111,176,141,171, 75,104, 10,106, 99, 57, 31,142,216,
-191,180,207,199, 31,127,204,241,241, 49,191,253,219,191, 67,175,223,227,227, 59, 31,211, 88,179,220,167, 5, 61, 34, 82, 10, 22,
-139, 5, 39,135, 71,124,233, 43, 95,165,183,181,207, 59,239,189, 15,179,115,114, 51, 39,201,114, 84, 62,224,224,240,144,175,190,
-242, 13,190,255,253, 31,160,106,203,228,244,156,162,174, 88, 40,135,212, 18, 83, 55,193, 1,172,168,138,134,209,120,206, 63,249,
-167,255,132, 63,248,131, 63,160,223,239,210,235,246, 57, 59, 57,164,155,197, 56,219,248,241,162,112, 63,246, 50,253,113, 98, 69,
-177, 70,126,146,114, 45,193, 77,172, 70,119,203,221,155, 16, 1,216, 34,151, 34,205, 22,186,208,142,238,219,232,213,229,190, 92,
-248, 27, 43,142,180, 63,185,231, 41,121,230, 79,249, 73,154, 16,167, 73,216, 37,171,176,235, 91,141, 13,149,116, 28, 30, 62,194,
- 33, 56, 25, 78,216,190,116,157,221, 75,215,184,126,227, 50,219,253,156, 94, 18, 65, 49, 67,150, 37,182,174, 88, 44, 22,148,101,
- 73,174, 20,253, 65, 15,157, 70, 1,180,231,136, 84, 76, 44, 99, 58,155, 91,232, 44,167,172, 13,243,162, 34,235, 13,136,243, 46,
-155,123,187,136,200,195, 60, 44,254,161, 48,159, 23, 60,124,248,144, 72, 41, 54,250,125,162,216,103,173,139,176, 11, 94,207, 94,
- 78,210, 60,164, 4, 42,242, 78,151,173,173, 45,102,179, 25, 39,167, 39,244,122, 29,118, 6, 93,191,155,181,150,170,174,112, 72,
-234,198,231,177, 11,188, 37,104, 49,159, 19, 71, 17, 77,237,247,142,121, 39,167,170, 74,134,163, 51, 38,147, 49, 85, 85,178, 49,
-216,164, 88,148, 84, 85, 77,183,211,163,147,231, 88,107, 24, 79,103, 12,135, 99,142,143, 79,152,205, 22, 12,199, 99,170,144,162,
-214, 20, 21,177, 80, 68, 64,228, 28,105,164,208, 90, 82,213, 6,107,124, 50,150,195, 11,112,227, 68,209,237,119, 49,214, 18,231,
- 93,142,207,167, 88, 33,169,170, 42,228, 50,224, 5, 83, 29,223,113,131, 37,138,252,161, 45,138,162, 85,194, 86, 20, 7,239,241,
- 90,164,111, 75, 27,108,201,131,142,229, 68,199,219, 17, 87,174,225,213, 53, 38, 47,228, 91,180,206,168,170, 49, 52, 22,154,218,
- 82, 22,126,164, 75,221,120, 56, 75,146,121, 45,129, 16, 33,116, 37,236,135, 35, 77,154,250,172,119, 17,198,238, 43,232,141, 5,
- 87,226,108,137,169,106,164, 19,208, 24,108, 93,161,176, 56,211, 44,133,125,237, 14,223,153,128, 78,198,119,153,206,218, 48, 0,
- 11,227,247,150, 95, 47, 86,227, 95, 97, 45, 52, 77, 88,118, 7,124, 50, 65, 27, 80, 89, 62,120,231, 54,167,199, 39, 72, 28,211,
-209,144, 36,201,145, 58,161, 44,107,210, 36,101, 60,157,209,221,216, 33,202, 58, 44, 22, 37,211,233, 24, 29, 71, 40, 43,104,156,
-160,115,245, 50, 36,217,154,112,108,165,133,106,227, 86,101,176,179, 37,177,239,114, 99,173,131,250, 92,132,159,190,183, 64, 55,
-141, 7,235, 68,218, 23,255, 52, 77, 73,146,136, 36,245, 69, 62, 78,162,144,128, 40,131,179,192,119,236, 81, 28, 17, 39, 49,113,
-146,144,100, 9,113, 18, 19, 37,113,184, 70,252,225, 68,134, 44, 9, 23,248,255, 38,116,233, 88,143,147, 86,202, 43,199,147, 88,
-147,198,145,255,251,226,136, 52,246, 25,243,157, 44,166,147,197,164,177,127,182,168, 16,225,171,180, 90, 22,117, 95,204,219,247,
-255,135, 20,245,149, 72,252,217, 69,189,166, 46, 75,202,178,164, 92,148, 20, 69, 69, 85,251, 68, 57, 17,154, 25, 63,225,190,216,
- 72,175,174,109,255,186,168, 91, 87,182,127,127,153,170, 69, 32, 1, 5, 20,162,210,109,158,181,122,202,146,244,172,194,122,161,
-139, 15,182,156,213, 23,208,190,133,209,187, 10,169, 58,172,162, 60, 87, 22, 3,214, 66, 59, 86,185,218,171,157,199,167,119,234,
- 10,199,116, 60,229,209,253, 7,188,249,163, 55,120,252,240, 1,179,201, 24, 41, 44,195,195,123, 44, 38, 39,168, 36, 33, 31,108,
- 16, 39, 9,105,164, 72,133,225,181,239,127,151,211,179, 83, 82,221, 33,142, 52,121, 79,115,112, 58,167,191,243, 28, 47,125,233,
-203,236,239,109, 82, 78, 70,124,247,219,223,226,198,245,107, 68, 73,194,254,254, 21,223, 85,197,146,141,157, 45,166,227, 17, 73,
-154,176,177,181, 73, 89,142, 73,226,154,110, 23,148,138,105,140,227,229,207,126,150,247,222,123,151,155, 55,111,242,207,255,197,
- 63,231, 87,126,245, 87,249,249,159,255,121, 94,127,227,117,202,208, 93, 95, 40,126,192,116, 60, 98,255,242,117,126,253,119,254,
- 62,175,189,250, 67, 6,162, 64, 21, 19,146, 94,151,162,209,196,113,202,206,149,171,228,157, 62, 31,191,245, 14, 81,211, 48,169,
-230,204,108,237,237, 92, 97, 97, 47,144,222, 87, 44, 53,191,253,247,254, 62, 31,126,252, 49,143, 31, 62, 32, 75, 19,142, 30, 63,
-102,208,237,120,186,154,240, 99,246,214,230,127,225,109,213, 63, 92,184,150,197,234,157,101, 18,145, 20, 23,199,241,207,178, 35,
-182, 60,229, 85,247,190,178, 79,174,135, 27,172, 58,117,181,188, 30,226, 72,147,165, 9,157, 48,186, 75,179,140, 36,203,136,211,
-108, 57,126,111, 45,115,171, 3, 3,140, 70, 99,238,221,127,128, 78, 50, 94,252,236,231,249,252, 23,191,200,243,183,174, 97,171,
- 25, 71, 15,238,241,209,187,239, 99,138,130,254, 96, 16, 66, 56, 36,169,138,125, 71,211,235, 17, 15, 6, 24,231,147,250, 36,177,
- 15,248,136, 82,162, 36,165,104,188, 66, 88,199, 9, 40,205,108, 54,103, 60,154,224, 28, 76,166,115,170,186,226,225,253, 7, 84,
-197,130,141,126,143, 56,214,228,121,238,247,185, 97, 71, 73, 24, 89,198,105, 78,214,233,145, 36, 41,221,110,151,205,141, 13, 6,
-131, 62,117, 85,242,232,225,125,182, 7, 61,242,196, 71,101, 54,193,131, 43,116, 68, 81,122, 8,199, 98,177, 96, 58,157, 4,143,
-250,192,143,237,226, 56, 28,216,253,107,145,231, 29,250,253, 62, 91,155,219,100, 89,135,141,141, 77,122,221,142,143,108,157, 45,
- 24,143, 39, 12,207,199, 88, 7,113, 28,211,235,245, 40, 27,203,100, 58,195, 52, 13,137,144,100, 18,175,221, 72, 53, 69, 97,150,
-121,229, 77, 99,209, 65,100,183,189,189,141,147,146,188,215,103, 52,157, 49,154, 45, 2, 43,220, 5,188, 43, 68,169, 69,105, 95,
-192, 34,173,194, 40, 54, 9, 9, 91,138, 56,100,169,123,108,174,244,157, 96, 8,231, 96, 25,225,203,242, 57,229,159, 43,173, 23,
- 90, 46,133,125, 34, 28, 4,156, 16, 33,229,205,187,116,106,227,130,186,219, 80, 87, 13, 85, 81,210, 76,167,222, 13,162, 53, 70,
-128, 49, 53,166, 88, 32,170,210,219,197, 92, 19,214,135, 22,233,227,144, 16,174, 66, 52, 21,152, 5,216,106,105, 43, 83, 8,104,
-106, 76, 49, 67,186,102,185,106, 19,107,148, 66,130,162,189, 13,129, 18,161,179,195,217,176, 47, 95,123,230, 89, 3, 77,248, 60,
-198, 4, 44,173,245, 69,199,203,195, 89, 76, 22,188,243,198, 59,184,166,161, 42, 22,212,101, 9, 50, 34, 78,186, 30, 30, 83, 86,
-212, 64, 54,216,166, 81,158,166, 55, 25,141,208,105,140,173,106,172,142,200,175, 92,198, 69,113,144,193,174,197, 95,135, 78,221,
-133,239, 65,171, 80,212, 99, 95,104,229,154,237,181,237,210,155,218,107, 1,148, 86,164, 65,189, 29,199,138, 40,214, 75, 50,218,
- 82, 88, 27,132,137, 42,242,153, 29, 58,142,137,211,152, 56, 73,151, 99,241,168, 93,203,169,112, 29, 56, 86, 26,175,160,235,242,
-135,101, 47,246, 78,151,163,252,132, 60,245, 93,121,146, 68,228, 89, 66, 39,243, 59,254, 52,120,191,117,164, 2,135, 64,135,103,
-137,199,195,250, 49,188, 94, 75,169,116,127,253,162,238,214,133,242, 14,231, 76,128, 29,213, 52,107,157,122, 89, 84, 84,149,183,
- 83,182,130, 97,191,202, 86, 79, 21,245,246, 75,176,214,162,110,238,239,252,254, 58,238,115,217, 45,173, 11, 31,150,241,146, 79,
-119,233,159,214,201,121, 27, 10, 97, 68, 22,186, 47,229,191,176, 85,160,252, 42,204, 99,169, 10,119,235,194, 43,177, 20,198, 40,
-185, 58, 88, 60,203, 78,208, 2,102,148,147, 40, 39,188,159,181,156,179,152,143, 24, 15, 15,152,142,143,160,153,161,132,160,179,
-185, 77,167,191, 65,164, 37,123,155, 61,222,248,225,171,220,189,115,111,153, 40,182,181,179,205,241,249,156,205,221,171,124,230,
-179,159,229, 39,190,242, 85,142, 30, 61, 98,122,126,202,243,207, 93,195, 15,157, 34,146, 44,231,252,228,144, 36, 86, 92,187,122,
-147,241,104,202, 55,190,254,147, 44,230, 51, 46, 95,218, 33,209,130,106, 81,208,239,111,114,126,126,206,221,143,239,176,187,189,
-195,171, 63,124,149,237,173, 29,190,243,157,239,240,220,173, 91,252,167,255,248, 31,243,173,111,127,107,249,160, 91, 23,148,251,
- 7,152,102,111,255, 58, 95,251,218,215,120,245,219,255,158,190, 54,116, 6,219,100,157, 13,186,189, 62,181,140,121,229,149,159,
-226, 47,254,228, 91,164,210, 80, 53, 5,231,139,249, 50,154,178, 29,113, 11,225, 40,203,146,159,248,234, 43,188,248,194,103, 56,
-120,244,216,119,163,139, 5, 77,109,200,242,140,198,121,196,200, 50,146,116, 93,223,176,100,252,187, 21,226, 82,172,148,151,235,
-170,142,245,189,250, 18,244,193,186,183, 93, 46, 31,176,171,110, 94,172, 16,146, 97, 13,212,142,221, 85,200, 49,111, 11,123,162,
- 35,178, 44,241,167,236, 78, 70,150,231, 36,105, 70,148, 36,168,120,173, 83, 95,191,222,148, 34,138, 99,254,228, 91,223,230,210,
-222, 37, 34, 29,113,245,242,101,250,189,140, 56, 82,188,255,206,187,220,255,228, 19,170,198,248,252,232, 44, 99,176,181,131, 84,
- 17,198, 88,202,162, 32, 74, 98,162, 44, 7, 17, 33,163,212,143,112, 43, 47, 62, 75,179,140,186,170, 73, 18, 95, 60,135,103,231,
- 60,248,228, 46, 69, 89,146, 36, 9,213,162,224,225,131, 7,140,135, 67,250,189, 14,121,154,144,103, 25, 74, 71,204, 23,139,160,
- 0, 86, 40, 29,209,235,247, 67, 68, 35,244,178,156, 60,139,201,146,136,253, 75, 59, 36,177,230,232,209,131,240,144, 74,168,235,
- 50, 40,209, 37,141,113, 68,113,204,124, 54,243,130, 55, 4,253,141, 1,113, 28, 99,172, 35, 73, 18,186,189, 14,214, 90,118,119,
-119,233,100, 61,156,131,237,237,109,226, 56, 97, 81, 44, 56, 58, 58, 66, 8, 73,183,215,103, 52,158,176,179,179,203,230,214, 22,
-227,233,148,209,116,202,172,242,128,165, 76, 8,122, 90,161,165, 33, 73, 53,101,225, 53, 85, 72, 15, 96,177,214,162,148,162,219,
-237,178,181,179, 71,131,160,172,106,142, 78,206,168,172, 63,184, 74,231, 72, 35, 80,137,243, 60,107,173, 67,113, 72,136, 90,110,
-124,232,210, 85,184, 46,252, 36, 39, 36,110,173,117, 42, 82,170,167, 98, 61,219, 17,229,186,112,217, 6, 50,166,181, 94,184, 91,
- 91, 71,227, 4,149,177, 84,149,161,170, 74,234,162,160, 28,158, 33,108,237,149, 37,166,198, 20, 83,154,233, 8, 59, 31, 99,203,
- 25,213, 98,140,173, 10,168, 23,136,186, 68, 52,115,100, 61, 67,154, 5,110, 49, 69,152, 5,182, 44, 16,141,247,229,139,178,192,
-206, 71,168,118,108,238,188, 15,157,229,155, 23, 3,182, 42,124,137,143,125,109,109,122,166, 42, 49,198, 79, 75,132,245, 97, 62,
-194, 26,191,171,111, 5,184,109,225,168, 26, 30,223, 63,228,227,247, 63, 66, 43,197,108, 50, 34,138, 19,156,136, 64,197, 40,173,
-189,128, 46,239,162,187, 3,140,136, 80,194, 49, 60, 62,246,184,216,170,193, 70, 49,189,171,215,145, 58,241,135,140, 64,118,116,
-203, 84, 79,135,177, 30, 60,211, 22,245, 36,246,105,152, 75,252,119, 16, 91, 54,141,161,110,106,156,243, 62,245, 56,210,196,145,
- 47,182, 81,164, 66,129,110,159, 9, 50, 76, 45,125, 68,175,239,152,253,142, 61,138, 99, 84, 20,249,183, 54,150,116, 45, 17,206,
-219,220, 90, 87,150, 93,138,215,226,200, 79, 95,243, 36, 38,203, 82,127,239,165, 94,147,147,103,137,223,239,167,254, 80,226, 11,
-186, 66, 69, 26, 21,133,206, 60,132, 64, 41, 21,249,176,167,101,252,248,143,159, 92, 94, 92, 91,250,215,213, 94,208,130,133,223,
- 51, 30, 69, 92,151,158, 98, 88,134,241,123, 85,213, 30,137, 28, 58,117,221,174,176, 3, 93, 78,181, 83,138, 53,251,158,186,113,
-105,243,247,215, 49,177,235,233, 57,237, 13, 36,214, 44, 74,207,242,150, 63,235,215,114,173,135, 91,239,190,132, 92,197,201,201,
-117,204, 94,171,166, 12,223,123, 27, 26,175,195,254, 76,135,206, 94,133,189, 70,155,233,126,209,234,230, 3,189,221,146,253,220,
- 32,168, 81,210,248, 55, 33,112, 50, 98,251,242, 85,226, 36, 97,163,147, 97, 22, 83,126,244,250,155, 12,103, 37,137, 84,164,157,
-136,105,209, 16,119,118,185,118,243, 26, 55,110,238,209,137, 82,230,211,146, 27, 55,174, 97, 77, 65,167,211,225,203, 95,254, 6,
-223,127,245, 53,158,191,117,141,217,248,140,233,112, 76, 20, 41, 78,207, 14,169,138, 49,139,241, 41,199, 7, 15, 57, 59, 61,195,
- 56,120,225,133,231,249,240,131,219, 76,199, 83,158,127,254, 51, 60, 58,120,196,214,214, 54,223,253,179,239,210, 31,244,249,167,
-255,244,159,242,111,254,237,191,189,192, 12, 22,194,115,205, 23,147, 49, 27,253, 30,191,242,203,127,139,247,222,126,155,163, 71,
- 15, 89, 20, 53,215, 66, 12,236,162,210,124,225, 11, 95, 38,209,142,215,127,240, 29, 98,233, 83,148,138,198,132,194, 32,189,248,
- 8,239, 68,144, 58,227,239,253,221,191,207, 91,111,189,205,221,123,119, 89, 20, 37,101,109,217,191,188, 79, 85,207, 16,152,101,
-167,254,228,107,188,138, 84,117, 79,228, 4,184,117, 64, 48,235,209, 76, 79, 97,250,215,186,240,118,252,190, 60,157, 47,187,115,
-121, 65,175,177, 18,203,249,235,166,221,169,231,185,199,194,166,121, 78, 20,128, 41, 42, 14,108,247,118,180, 47, 61,198, 84,235,
- 8, 99, 28,111,189,241, 38,177, 86, 28, 63,126,200, 70, 39,101, 99,115,147, 69, 89,115,237,198,115,124,246, 11, 95,196, 42,197,
-131,131, 67, 54,119,246,216,189,245, 60, 66, 43, 38,103,167,212,243, 25,174,170,136,148,246,193, 45,210,143, 8,133,116,184,198,
- 35, 76,243, 94,151, 98, 60,242,106,251,249,140, 59, 31,221,166, 92, 44,112,214, 49, 24,244,105,170,138, 98, 49, 71,224,188, 2,
- 56,205, 16, 65, 40, 23,197, 9, 85,109,145, 90,147,100, 57,101, 85,129, 49,228,113, 68,162, 4, 90, 88, 98, 45, 25,244, 58,108,
- 13,250, 52, 85, 73,177,152,224,172,207,150, 46,203,198, 63,208,156, 39, 26, 42,165,136,130, 23, 58,142, 19,140,177,116, 58, 29,
-250,131,190, 87,220,207, 11, 54, 55,183, 24, 13,135,108,108, 12,136, 34,205,120, 52,102, 60,153,160,148,166,211,233,146,166, 25,
-157, 78, 23,169, 52,227,233,140,143,238, 61,100, 97,173,127, 93,140, 99, 43,142,144,206,144,247, 18,154,178, 13,102,241, 28,119,
-161, 4,117, 99, 25, 12,250, 12,182,183,153,149, 37,157, 78,206,131,135,143, 89,212,222, 50, 22, 9,200, 34,136, 50,252,131, 84,
- 41, 15,215,136, 98, 34, 29,163,132,242,221,246,242,128,167, 66,130, 85,155,110, 21,112,169,225,112,184,124,254,180,186,140,181,
-148, 54,169,218,130,196,210, 19,221, 24,255,117, 52,214,127,173, 69, 89, 82,151, 37,182,170, 40, 71,199, 84,179, 49, 90, 88,108,
- 49,135,249, 20, 22, 35,170,233, 41,245,252,156,122, 54,166,158, 14,169,167, 67, 40, 38,152,217, 16, 51, 59,135,217, 16, 89, 22,
- 80,206,125, 16,139,245,172,119, 55, 27, 35,202,105, 56, 40,176, 20,201,186, 54, 28, 62, 80, 15,125,106, 89,216,175, 59,231, 61,
-231,206, 93,232,230,165,107,255,124,232,210, 91, 47,184,240, 36, 62, 83, 53,188,251,230,187, 12,207, 70,104, 33,153,140,206,201,
-242, 14, 78,198, 76, 22, 5,113,146,113, 54, 26,209,219,222,163,209, 41,149, 16, 68, 56,134,199, 71,100,121,238,239,155,188, 67,
-247,234, 21,164,140,124, 67,167, 88, 78,214,150,108,118, 99,151,154,135,150,112,166,213,202,154,218, 42,213,107,211, 44,147,220,
-124,147, 39, 66,129,146, 75, 64,144,135,251,176,188,103, 91, 82,159,210, 17, 90,199,129,222,231,113,207, 75,193,218,218,170,174,
- 37,154, 26,107,177, 1,132,214,194,178,226,200, 31, 56,178, 52,165,155,167,116, 50, 63,229,203,178,148, 78,150,146,165,254,208,
-236,245, 0,114, 25, 35, 44,149,242, 1, 80, 58, 36, 59,182, 5,190, 69,226,138,191,250,248,125,117,164, 12,177,172, 97, 53, 65,
- 16,184,217,186,166,174, 42,170,178,166, 88, 84, 20, 69, 73, 89, 53, 30, 29, 44,101, 16,159, 43,191,114,208,107,207, 68, 33, 67,
- 36, 70, 0,115, 93,223,243, 69,221,133,249,149, 92, 18,115,188,175,113, 57,142, 23, 23,243,103,127,156,104,106,105,222,183, 43,
-179,125,187, 11,107, 67,228, 87,187, 25,183,196,202,182,116, 32, 23, 50, 99,151, 55,241,218,168,161, 45, 4,237, 88,118,125,236,
-239,132,192, 8,175, 44, 68,174,198,114, 33,245, 24,231, 4,121,111,147,237, 75,251,212,117,197,222, 70,151, 55,127,248, 67, 62,
-188,251, 8, 25, 69,236,110,164, 84, 6, 92,220,227,133,151, 95,230,249, 91,183, 40, 38, 83,180, 45,217,221,187,204,209,201, 25,
- 73, 2,211,233,140,143, 62,126,192,249,249,132, 63,250,195,127,203,241,225,125, 62,254,224,125,238,220,189,205, 98, 49, 98, 49,
- 63,229,241,253,143,176,117,197,213,171, 55,249,224,246, 7,188,253,214,155,252,210, 47,254, 34, 47,191,244, 18, 63,120,245, 85,
-190,244,165, 47,115, 54, 28, 50, 24,108,240,253,239,127,143, 27, 55,110,242,171,191,242, 43,124,231, 79,191,179, 20,252,120, 73,
-175, 70,217,154,205,110,134, 33,225,235, 95,255, 41,190,247,167,223,225,244,124, 72,172, 5, 82,198, 52, 54,101,182,104,248,165,
- 95,254, 89,126,248,253, 63, 65, 22, 51, 54,163,132,227,217,140, 10,159,253,141,240, 73, 90,206, 90, 70,195, 57,191,247,219,191,
-203,100, 58,103, 60, 29,241,201,253,123,212,141,227,234,149, 43,212,213, 4,225,234,224, 59, 22,203,228,162,139,169,108,159, 94,
-212, 47,184, 63,214, 36,143, 75,181,168,115,203, 7,176,191,174,214, 59,115,133, 82,173,194, 83, 95,120,205,245,154,173, 82, 74,
-239,166, 72,211,132,124,109,252, 30,167, 57, 58, 73,208, 81,228, 41,115, 34,236,224,165, 68,104,205,193,193, 33,111,191,245, 22,
-229,124, 78, 93,204,185,178,189,129,107, 10,238, 63, 62, 68,198, 41,151,111,222, 96,235,242,101, 18,191, 51,225,218,245,231,194,
-168,207, 49, 57, 58, 96,114,240, 24, 89, 21,244,123, 25, 81, 18, 97,154,154,114, 62,197, 54, 53,227,225,144,217,104, 68, 51,159,
- 51, 61, 31,178, 24,143, 16,214, 48, 58, 59,101, 60, 30,163,180,242,105, 98, 74, 81, 85, 21, 85, 93,161,173, 65, 56, 88, 20, 37,
-141,131, 52,237, 80, 86, 53,211,217,156, 36, 77, 61,172,168,169,137,133, 35,194, 17, 71,210,219,229,109, 67,172, 20, 89, 28,113,
-124,116,192,249,249, 41,198,194,124, 81, 99,172, 66, 69, 49, 85, 93,163,180,199,123, 70, 81, 68,150,119,232,116,187, 72,169,216,
-220,220,198, 57, 56, 63, 59,103,103,123,155,162, 40, 40, 43,111,255, 44,203, 10, 29, 69,116, 58, 93,178, 44,167, 40, 42,102,139,
- 5,157, 78,151,178,174,249,240,222, 61,230,198, 32,165, 32,119,130,190, 20,164, 49,196,153, 66, 6,132,180,197,135, 84, 32, 60,
-150, 53, 75, 82, 84, 20, 83, 90,203,214,230,128,143, 63,185,207,180,244,161, 48, 49,142, 60, 2,149, 9,146,196,243,251,211, 56,
- 70, 43, 77,164,163,165,224, 74,173, 95, 3,226,162,206,167, 69, 14, 59,215,142,225, 87,249,213, 66,180, 88,226,149, 40,211,186,
-181,103,143,115,212,214, 35,119, 27, 99,105,170,102,217, 53,217,197,144,249,248, 12,170, 26, 55,159, 66, 49, 69,212,115,104,166,
-216,114, 78, 61, 27, 83, 77, 70, 44,134,103, 44,198,103,152,249, 8,170, 9,178,156, 33,234, 26,105, 27, 95,160, 45, 80,150,212,
-147,115,100, 51, 7, 97, 86, 15,245,160, 60,147,109,174,128, 9,153, 4, 1, 84, 19,150,196,161,171, 55,190,168,135,113,189, 11,
-191,246,133,194,174,162, 63,173, 97, 58,154,242,250, 15, 94, 71, 90,137,109, 74,176, 6, 21, 39,136, 40,245, 83,137,186,198, 10,
- 72,250, 3, 42, 17, 97,181, 34,114,134,249,249,144,238,160,199, 98, 81, 16,245,251,228,123,123, 40, 21,163, 36,203,149, 71, 59,
- 93,107, 1, 48,214,177, 92,137,197, 97, 52, 44,214, 92, 97,214,249,241,187,143,122, 13,135,128, 48, 74,246, 90, 43,207,182,247,
-128,169,150, 87,161,150, 49,167, 74, 69,161, 75,142, 67, 65, 15,224, 31,177,246, 58,175,241,227, 61,217,180, 9, 99,120,239,223,
-137,148, 38,137, 34,242, 52,165,219,201,232,118, 82,242, 60, 35,207, 51,178, 52, 38, 77, 19,146,184,237,130,213,138,241,174,159,
- 81,212,165,190, 56,105,254, 49, 69,253,169, 46,222,121, 7,208,122, 78,201,178, 83,111,218,162, 94,122,207,125, 89, 81, 86,158,
- 95,209,174,156,116, 40,232,190,176,175,138,122, 43, 46, 6,124, 81,151, 50, 92, 88,237,200, 83,182,226,182,213,248,221,231,189,
- 94,244,234,185, 79, 25, 51, 56,231,150,209,167,173, 92,197, 4,127,167,107,163,231,240, 96, 7,191, 3,241,197,188,245,187, 59,
-103,150,169, 52,235,187,120, 25,140,246,178, 69,147,182,251, 89,185,194,253, 8, 37, 46, 32,251,220,133,112, 1,205,165,253,203,
- 36, 89, 68,191,147, 81, 77,103,252,232,213,215, 40,171, 26,173,225,198,141, 61, 78, 71, 53,159,255,210,215,217,186,180,207,245,
-155, 55, 73, 84,132,194, 48, 31,141,217,236,119,185,115,231, 35, 14,142, 78,184,125,251, 35, 78,143,143,185,122,105,159,205,254,
- 22,157,238, 38,131,141, 77,182,119,247, 72,226, 1,113,212, 3,161,120,227,205,215,217,220, 24,240,252,115,183,120,248,224, 33,
-183,111,127,196, 55, 94,121,133,211,225,136, 56,203,216,222,221,225,147,187,119,249,254, 95,124,159,127,248, 15,254, 1,145,142,
-184,253,254, 7, 75, 42,155,115,142, 75,253, 62,163,225, 25,189,193, 46, 63,247,171,191, 74, 61,124,192,163,219,183,121,116, 50,
- 69, 39, 93,116,166,168, 22,134,151, 95,250, 9,250, 91, 25,175,189,250,109,154,211, 17, 70, 41,102, 38,208,226, 2,114, 82, 34,
-169,172,230,235,175,252, 44, 55,175, 93,226,240,225, 3,176, 53,179,249,194, 83,198,164,243, 2,191,101, 82,218, 90,198,222,242,
-125,119, 49,123,207,137, 11, 50,185,139, 28,126,247, 12, 52,255, 10,181, 40,132, 88, 34,101, 91, 20,162, 63,133,250, 81, 83,123,
-242,215, 82,250, 83,122,200, 30, 78, 90,161, 92, 59,122,239,100, 68,105, 28, 44,103,209, 74,204, 18,198,238, 14,248,195,127,253,
-175,120,231,213,191, 96, 35,247, 22,150,211,243, 49,163, 73,193,151, 94,121,133,237, 75,151, 24,108,237,120, 65,150,210,164, 74,
- 32,235, 10,105, 26,100,146,145,167, 25,179,241,144,225,232,156, 78,175, 79,214, 31, 96,235,134,233,233, 25,195,227, 83, 14, 15,
- 15, 41,230, 11, 22,211, 9,139,217,140,211,243, 49,198, 89, 6,155, 27,212, 54, 98, 56, 45,136,147,132,205,205, 62, 66, 10,108,
-237,104, 76,141,138, 98,102,101, 67,213, 52, 68,169, 47,198,199,199, 39,244, 58, 61, 76, 83, 98,194,200,210,119, 54,146, 44,139,
-137,181, 66, 88,255,103, 59,131,109,250,155,187,108,239, 92,162,191,177,201,172,172,252, 24, 91, 72,102,211, 25,117, 93, 51, 28,
-142,232,111,108, 32,117, 4, 82, 17,199, 62, 48, 6, 1,113, 18,211,201, 50,154,186, 70, 72, 65,154,231, 30,178, 34, 60, 71,218,
-154,134,166, 44,176,245,130, 60, 77,249,248,254, 67,198,139,130, 72, 75, 98,235, 72, 5,244, 18, 79, 6,115,206, 11,245, 12, 80,
-150,150,110, 55,103, 50,169,232,100, 41, 73,150, 81,184,134,172,215,231,236,209, 9,179, 69,197,185,115,200, 72,208,111, 36, 89,
- 87, 17,167, 26,169,172, 87,191, 71, 49, 90,249,177,187, 12,118, 89, 25, 70,233, 74, 5, 47,116,216,244,202, 16,102,226,156, 93,
-237, 57, 67, 17,151,235,215,102,152, 16,185, 0, 62,114, 2, 12, 80, 91, 23,146, 5, 3, 2, 59,228, 89, 84,139, 25,102, 54,198,
-140, 78, 89,156, 13,185,123,239,152, 15, 31,156,114,190, 48,228,105, 70, 7, 11,213, 28,204, 2,211, 20, 56,103,189,141, 80, 72,
-132, 83, 68, 82,163, 29,136,178,196,204, 38,212,243, 49, 74,121, 63,190, 8, 22, 79,107,252,193,110,125, 65,224,150,124,123, 19,
-246,234, 30,158,131, 51, 97,138, 23, 22, 99, 33,170,149,176,115,245,164,111,131, 51,130,187,183,239,113,239,227, 7,228, 73, 76,
- 93, 46, 80, 74, 80, 56,141, 83, 49, 58,138, 25,143,198,116,187, 3, 92,148, 81, 37, 41, 40,141,157,207,169,230, 19,122,189,140,
-241,162,160,187,123,137,108,115,211,179, 36, 34,137,212,173,234, 59, 68,215, 58,223, 17,251, 96, 28,252,189, 27,169, 37,174,121,
-105,129, 13,161, 58, 77,227,217, 36, 34,112, 41,252, 14, 93, 6, 87,212,106, 58,231,215,180,122,213, 41,183,157,185,246, 10,116,
- 31,123, 42,151,228, 53, 31, 28,214, 98, 95,253, 62,189, 9,147,129,198, 52, 56,227, 9,148,113, 20,121,183, 76,238, 39,124, 89,
-158,145,102, 73,216,213, 71,232, 40,124, 13,218,139, 30,165,146,126, 4,175, 52, 74,135,228, 71,173, 61, 65, 80,168,139,220,142,
- 31,163,243,186, 56, 81,182, 23, 28, 63,109, 22,133,109, 90,161,156, 47,228, 69, 81, 82, 44, 10,170,170,193, 26,191,126,209,203,
- 78,189,117,152,249, 67,136,159, 74,177,212,202,168,231, 46,111,254,190, 23,182,173,198,226,237, 7, 47,149,234, 50, 88,207, 66,
-234, 90,123, 81,217, 39, 54,174, 43, 51,125, 24,165,175,189,176,214,173,129, 34, 92,232,204,141, 91,178,131, 91, 52,160, 23, 55,
-120,228,163, 90,190,208,161,160,175,157,190,151, 49,174, 98,181,159,127, 18,116,178, 92, 2,136, 22, 81,170,201,243, 14, 74,193,
-165,221,109,110,191,251, 62, 7, 15, 15, 73, 34, 65,156,104, 74, 11,187,151,111,112,237,198, 45,190,246,141,111,112,239,206, 71,
- 84,229,140,157,173, 29,142, 30, 61,228,141, 31,254,144,243,225, 24,235, 4,183,158,123,158,253,221, 75,212, 69,195,100,178, 64,
- 39, 49, 22, 67,183, 63, 64,168, 20,235, 34,166,179, 17, 58,169,153, 79,167,220,189,115,143,126,167,203,215,191,254, 13, 62,252,
-232, 35,190,246,141,175,115,247,222, 39,244,123, 93,234,186,164,219,233,240,230,155,111,241,159,255,231,255, 51,254,226, 47,254,
-130,241,100, 18, 38, 22, 2,217, 52, 88,103,232,246,123, 92,187,117,147, 95,250,230,151,248,240, 7,223,101, 56, 42,136, 58, 61,
- 68,226,104, 74, 1, 46,229,107, 63,253, 53,110,191,247, 42,229,241, 1,141,132, 81,213, 96, 90,245,119,136, 6, 52, 40, 54,119,
- 47,243, 27,127,235,215,248,232,237,183, 72,133,163,105, 26, 14, 14, 30,115,253,242, 46,213, 98,238,163, 0,195, 65,201,173, 69,
- 68, 58,177,150,204,182, 60,137,187, 11,239,179, 62,197, 89, 67, 39,138, 16, 33,233, 4,225,128,214,170,189,195,141,172,214,108,
-144,202,171, 90, 35,189, 58, 61,183,145,135, 74,120,128, 69,154,133,162,222,233,144,230, 9, 81, 26,163,147,196,135,107, 72,143,
-237, 20,178, 29,221, 10, 30,126,248, 30, 15,222,127,139, 23,111, 92,102, 54, 29,243,234,107,111,240,187,191,247,247, 65, 74, 78,
- 78,143,145,192,160,215,243, 55,184,146, 52, 77, 73,221, 84, 72, 29, 19,119,187,196,145,166,168, 74,132,148,116,123, 61,198,167,
-103, 76,206,206, 40,138,146, 69, 89,145,229, 25, 91, 27, 3,102,243, 5,247, 14,142,169,157,163,211,239,113, 62, 42, 57, 31, 23,
-116,122, 57, 27,219,125,242, 36, 65, 32,153,204, 39, 24, 39, 49, 66, 51,153,207,168, 77, 77, 81, 20, 84,139,134, 52, 73,176,214,
- 7, 80,216,208,133,197,218, 39,182,101,177, 70,184, 26, 43, 52,113, 54, 64, 70, 41, 8,136,210,148,107,207,221,162,155,119,152,
-142,198,116,187, 29,143,161,117,144,164, 9,123,151, 46,249,174,201, 26, 58,221, 14,131,126, 63,100,183, 39, 68,113,132,177, 13,
- 78,192,249,112, 24,242,197, 3,154,181, 46,104,138, 25,121,146,208, 56,120,116,120,136, 49,142, 8, 72,129,126,170,145, 52,196,
- 73,228,169,117,133, 15,162, 73,210,136,170,108,136,195,132,165,209, 48, 45, 11,236,164,100, 58, 91,112,232, 60, 14,117,208, 40,
-242, 92,144,100,138, 40,150,203,215, 90, 5, 47,113, 59,169,107, 17,196,178, 29,181, 47,187, 58,233, 39, 30,139, 5,139, 98, 65,
-146,196, 75, 26,161, 8, 83, 34, 25, 82,182, 68,112,220, 56, 41,176, 2, 26, 39, 48, 78,248,195, 72, 59, 45, 52,214,239,215,235,
- 6,202, 57,197,217, 33,143,238, 30,240,241,157, 17,143,143, 38,124,124,239,152,131, 79, 14,216,205, 5,219,221, 8,105,203,160,
- 72,151,116,147,140,110,148, 96,206, 39,124,244,198, 7, 20,143, 31,225, 70,231,212,227, 83,242, 44, 90,101, 2,173,217,136, 91,
-176,249, 50, 85, 82,128,179, 62,149, 14,227,247,239,174,221,183,135, 67,139,112, 65, 84,103, 67, 32,202, 82, 32,104, 48,149,228,
-213, 63,255, 17, 77, 81,162, 37,212, 85,129,210,154, 90,166,160, 98,140,105, 40,230, 37,105,167,135,204,187, 20, 1,113,107,167,
- 19, 76,179, 32, 73, 53,227,178,100,243,202, 53,226, 78,207,239,175,117, 91, 96, 69, 56,144,176, 68,134, 91,107, 16,176, 44, 52,
-237,215,232,130, 82,223, 25,150,207,118,107,219,245, 8,203, 46, 61,214,171, 14, 84,173, 61, 11, 68, 59,141, 81, 10,161,253, 91,
-203, 76, 89,214,129,117,103, 84, 88,101,216,160, 38,111, 66, 40,146,181, 54,216, 96,189, 91,161,157,238, 37,185,183,201,249,130,
- 30,173, 33,209, 87,201,108, 42,140,223,219,162,238,227,155,163, 21,250,247,175, 80,204,159,197,144, 95, 6, 98, 57,183,204,134,
- 55, 77,229,133,114,101,237,189,234, 69, 73, 89,122,157,149,144,129, 7, 19,233, 37,243,101, 53, 85, 8,220,134, 96,235, 83,159,
-185,186,253,251, 90,203, 37, 8,102,101, 63,107, 79, 79, 43,139,145, 90, 75,221, 90,239,203,150, 81,167, 23, 60,229,173, 79,148,
- 11,227, 90, 90,191, 99,248,102, 90,174,239, 58,133,206,217,128,171, 21,225, 64, 33,212,218,180, 64, 92,164,154,181,130,172,144,
-100, 36, 3,133, 76, 10, 15,153,104, 71, 51, 2,129,179, 48,155, 77, 25, 12,250,196, 74,242,193, 91,111,115,118,122, 78,150,101,
-136, 56,102, 97, 53,183,110,221,226,133,207, 60,199,199,239,191, 67, 44, 29, 85, 49,231,240,240,144, 60,207, 25,141, 38, 88, 39,
-217,217,218, 35,214, 41, 82, 37,140,102, 5,139,178, 90,250, 7,141,243, 60,239,166,174,144, 88,234,170, 34,203, 58,100,105,198,
-209,225, 17,247,238,125,194, 23,190,240, 57,166,211, 17,159,255,220, 75, 60,184,119,151,217,116, 66,150,166, 60, 62, 56,164, 40,
- 74,126,235,183,127,135, 63,250,163, 63,242,230,152,128,131,140,156, 35,205, 35,166,243, 5,191,241,119,254, 30,119,222,121,139,
-163, 15, 63,160,168,230, 24,153,161,162,140,209, 98,202,207,254,226,207,243,248,238,135,184,217, 33, 70,214,156,205, 42,138,144,
- 61, 45,133,162,211, 25,144,244,122,168, 40,227,119,127,235,215,249,228,189,219,148,163, 49,211,179, 51, 98, 5,123,187, 3,102,
-179,145, 47,234,107, 57,245,235,239, 95,152,206, 60, 49,130,247,137,104,254, 48,247,100,124, 33,237, 88,214, 31,177,214, 40, 84,
-171, 61,105,155,241, 44,130,181, 82,173,237,217, 91,225,158,192,119, 5,105, 26,147,119,114,242,110, 70,146,182,170,216, 36, 4,
-108, 40, 15, 10, 9, 55,168,169, 11,126,240,167,223, 98,118,122, 72,130,229,181, 31,126,159,157,157, 77,182, 55,250, 28, 63,186,
-207,124,116,142,105,106,242, 78, 78,119,208, 67,164, 49, 42,143,137,179,132, 98,116,142, 43,102, 72, 83, 33,157,161,156,207, 72,
-164, 36,209,145,183,222,196, 41,105,183,199,165,203,123,196, 81, 68,156, 36,228,189, 1, 58,142,216,219,221,229,228,116,200,193,
-225, 49, 82, 75,250,189, 14, 74,250,100,186,209,116, 76, 81, 89,146,180,195,124,177, 96, 94, 44,200,210,156,162,168,151, 2,196,
- 80,247,136,148, 36,139, 37,253, 44, 33, 75,180, 79,198, 82, 49, 22, 65,183,155,163,112,152,198,160,117, 76, 39,239, 17, 71, 49,
-231,195,115,226, 52,101,255,242, 62,206, 26, 14, 30, 63, 36,146, 18, 29,172, 71,105, 28, 99,155, 26,165, 37, 89, 26, 83, 21, 5,
- 69, 81, 82, 87, 53, 82, 8,172, 49, 36, 90,161, 4, 84,139, 5,145,132, 65,175,195,209,217, 57,163, 89, 1,214,145, 0,131, 84,
-163, 48, 8, 41,169,140,163, 40,125,148,171,142, 36, 77, 99,137,148, 6, 12, 58,211, 12,199, 19, 34, 20,163,233,148,145,115, 24,
- 43,232, 58, 73,172, 13,113,226,149,189, 58,210, 8,180,239,214,218,135, 87,187, 31, 95,138, 47,229,242,173,237,208, 35,229, 31,
-206,173,240, 82, 0, 66, 9,175, 96,142,244,178, 48,160,100, 64,156, 58,154,144,147,109,240,113,187,126,113,236, 39,136, 69, 99,
-104,154,138,122, 54,101, 49,156, 33, 42, 75,102, 5, 3, 1, 29,105, 41,167, 99,118, 7,154, 88,251,164,199, 60, 74, 81,214,241,
-254,107,175,243,253,255,238, 79,121,252,254, 7,136,242,140, 68,195,214,238, 22, 81, 30,131, 48,136, 40,196,180,134,245,144, 11,
-138,214,214,169,226,237,109, 54,140,224,195,174,125,137,240,246,186,129, 22,238,227,183, 28,225,231, 33,253, 10, 98,120, 58,225,
-237, 55,223, 37,209, 17,206, 53,190,176, 57,129,149, 9, 8,201,108, 50, 37, 78, 51, 92, 20,163,122,125, 22, 18,180,214,204, 79,
-143, 73,252,183,207,162, 54,108, 94,190,138,206, 59,136,128, 9,143,180, 23,144,181,207, 98, 27,216,240,174, 45,212,161, 9, 91,
- 30, 60,194,171, 96, 77,136, 82, 53,198, 43,185, 91, 6,124, 0,144, 69, 97, 63,172,117, 43,126,148, 79,237,205,125, 3,160,195,
-234, 85, 5, 42,167,255,119,197,229, 95,241,219,109,219, 36,134,166,177, 85,232,199, 73, 68,154,121,182, 69, 22,216, 22, 58, 14,
-205,132,148, 75,110,125, 59, 61, 20,218,231,160, 72,237, 17,224, 66, 71, 94, 99,240, 68, 81,255,180,226,254, 36,249, 84,132,125,
-186,187,144, 47, 29,214, 5, 77, 80,191,151, 94, 36,231,133,114, 13,198,186,112,192,144,203, 98,174, 46, 20,244,213, 52,218, 90,
-139,122,249,230,165,223,143, 34,189,156,215,199, 45, 83, 86,235,229, 56, 34, 90,210,223,164,103, 49,183,197, 84,178, 82,196,203,
-117,184, 88,187,203, 90, 21,122, 25, 78,103,173, 74, 81,182, 76,222, 0, 79,112,107, 97, 47, 23, 31,248,114,121, 17,173,212,239,
-110,229, 93,127,226, 7, 6, 23,109, 81,203,194,190,132,234, 40,190,242,165, 47,241,232,222, 93, 62,124,247, 61,234,218,146,117,
-115,230, 70,112,235,165,159, 96,123,107,147, 68, 54,136,106,198,240,228,132,155, 55,110, 80,213, 21,143,143, 14,137,147,148,237,
-205, 29, 92, 35, 40, 22, 13, 22,197,120, 81, 48, 28, 79,160,170,169,235, 18,173, 36,184,134,217,108, 66,177, 40, 89,204, 11, 16,
-146, 40,138,232, 15,122, 56,219,240,224,193, 39, 92,190,180,203,143, 94,253, 62,223,248,250, 87, 24, 14,207,185,117,235,121, 6,
-131, 77, 30, 31, 28,243,202, 79,126,147,131,195, 35, 30, 31, 29, 81,153, 6, 37, 28,159,217,219, 36, 78,165, 31,239,111,222,224,
-197, 27, 87, 57,254,209, 31,209,152,134,243, 34,166,196,161, 83,197,222,254, 13,110, 93,189,202,251,111,126,139,147,179, 99,226,
- 60, 97,178,176, 24,171,137,116, 15,169, 82,162, 36, 3,169,249,197,159,251, 37,170,201,148,225,163,199,236, 12,186,116, 18,197,
-206,238,128,179,225,233, 18,102,240,151, 49, 12,125, 99, 46, 86,169, 71,150, 11,216,154,101, 6,146, 99, 41,132,108, 53, 19,237,
- 30,244,169,152,223,245,155, 20, 31,180,225, 90, 22,119, 24, 77,106, 37, 72,210,152,188,147,145,229, 25,113,154,160,147,196, 71,
- 82,234,208,165,175, 89,217,100,164,216,232,230,124,231, 15,255, 29,183, 63,120,135,155, 55,111,176,185, 57, 32,142, 34,202,217,
-152,186,156, 83, 85, 37, 8, 65,191,223, 35,235,118,253, 13,227, 12,162, 41, 24,158, 28, 98,155,146,106,177,224,236,248,152,106,
- 62,103,115, 99,131,188,191, 65,190,185, 77,127,123,123, 9,201, 72,178,140,172, 59, 64, 72, 69,191,223, 39,207,251,124,120,247,
- 46, 82, 74,246,246,246,232,230, 93, 4,142,243,225,136, 69, 81,163,163, 4,231,240,190,219, 36, 97, 56, 28, 35,133,247,201, 90,
-219,160, 4,116,178,132, 60,213,116,178,152, 68, 71, 84,198, 49, 43,107,170,198,146, 37, 17, 18,131,214, 26,235, 32,138, 19,250,
- 27, 27,116,186, 29,138,178, 96, 58, 29, 35,156,227,236,244, 4, 83,215, 8, 33,200,211,132, 94, 55,247, 95,199,249, 41,155, 27,
- 27, 68,145,166, 40,138,224,113, 95, 32,112,228,177, 87, 9,151,243, 41,166,152,225,170, 5,165,181,220,125,116, 12, 50, 66, 56,
- 75,166,156,207,249,142, 99, 12,154, 69,229,161, 46, 82, 75,172, 53, 20, 69,133,176,150, 56, 85,204,203, 2,140, 99, 58, 47,169,
-164,100, 81, 91, 98, 33, 73,164, 37,138, 64, 69,146, 56,142, 81, 42, 70, 74, 15, 33,105,131,191,218,110,125,201, 55, 8, 15,248,
-246, 89, 34,148, 87, 81, 35, 86,224, 34,161,229,178,195,179, 66, 6,140,171, 14,224, 20,137,145, 26, 39, 21, 86,250, 28, 56, 41,
-117, 64,199,224, 99,120,157,195, 53, 53,182,170,112, 85, 73, 42, 29, 91, 61,201,238,142, 98,239,114, 78,172, 45, 66, 58,148,214,
-222, 58, 40, 28,218, 25,158,123,110,147, 91,159,221,103,247,250, 62,251,183,174,147,108,111, 80, 71, 18,153,103,184,214, 34, 37,
-228,178, 32,250, 41,168, 13, 66, 67,127,141, 59,227,149,240,206,239, 6,194,226,203, 55, 69, 24, 23, 50,204, 91,181,184,196, 73,
- 73, 99, 5,175,191,250, 38,147,243, 9, 73,228, 95,159,186,105,112, 40,162,204,147,225,202,162, 36,206,114, 84,191, 79,147, 36,
-148, 66, 34,129,217,233, 49, 91,131, 46,243, 98, 78, 35, 53,219, 87,174, 35, 18,207,125, 88, 31,251,182,124, 17,236, 42,128,197,
- 5,117,188, 84,242,105,214,185,101,137, 4,111,179, 33,148, 36,144, 71, 67,168, 75,164,137,244, 42,175, 92, 41,189, 26,247,135,
-220, 7,161, 86, 20,202,245,167,139, 92,198,153,134, 6,100, 45,185,205, 7,142, 25,159,107,161,189,152, 47, 77,227,192,182, 88,
-217,227, 86,122,173,213, 20,152, 86, 79,166, 61,255,222, 55, 11,218,199,227, 94,240,169,115,129,115,223,186, 86, 28, 79,200,140,
-214,106,214,170,216,135, 78,221, 54, 75,161,156, 39,202,249, 55, 47,148,115, 23, 68,195,190, 9, 18, 23,242,224,173,245, 34,232,
-186,105,208, 75, 97, 3,171, 0, 14,173, 20, 81, 75,240,106,205,238,237,220, 62, 68, 30, 34,220, 26, 72,100,157, 8,214, 10, 85,
-196, 26, 40,236,201, 96, 22,175,195, 82, 66, 16, 57, 9, 17,222, 38,230, 20,194, 69, 40,185,130,241,183,129, 12,106,121,177, 8,
-148,208, 75,206,179,114, 62,219,217,134,120, 62,107, 89, 42, 51,157, 3, 39, 47, 66,253,187,189, 46,105,146,112,118,114,130, 20,
-142, 36,129, 36,207,153, 23, 48, 24,108,161, 20,228,169,192,204, 27,174, 93,190, 4,198, 50,159, 78,185,114,245, 50,174,182, 28,
- 62, 60,161,152,214, 40,157, 18,117, 34,116,236,125,209,253, 78, 66, 89,205,113, 86, 48,155, 78,177,182, 97, 49,171,112, 70, 96,
-148,247,241, 74, 9,189, 65,143,186,140,248,209,107,175,241, 19, 95,120,137, 65, 39,229,236,244,140,126,127,147, 31,124,255, 7,
- 72,157,241,255,249,175,255, 27,254,209, 63,250, 79,249,225,235,175, 45,113,151,105, 28,163,112,124,248,222, 59,136,238,183,248,
- 95,254, 79,255, 1, 87,174,239,113,124,251, 1,167, 39, 39,104, 91,115,229,185,125,190,251,103,223,227, 63,251, 71,127,151,180,
-191, 73,164, 31,177,153,116,120,116,214, 80,155, 8, 33,187,204, 22,150, 40, 79, 24, 13,167,188,251,254, 7, 60,119,245, 10, 31,
-189,158,208, 85,138, 60,106,232,101, 25,113, 20, 83,215,139, 53,177,155,120, 2,137,124, 49,115,120, 29, 12, 36,240,118, 27, 43,
- 37, 70, 58,148, 20, 88,105,113,202,243,186,149,112, 40, 28,181,108,252,222,118, 13, 17,226,111, 88, 15,226,105,132, 64, 75, 31,
-149, 41,165,244,129, 21,202, 63, 56, 44,142,166,241, 5,163,189, 1,101,235,138, 8, 15, 76,199,170, 91,179,225,100,220,223,218,
- 99,231,242,117, 50, 95, 61, 56, 62, 27,178,123,233, 26, 89,183,195,108, 58, 97, 50, 28,114,247,131, 15,136,133,228,101, 11,121,
-175,131,173, 75,180,114,100, 89,130,107, 28,121,183, 79, 99, 14, 24, 77,103,148,101, 77,156,192,124, 54, 39,235, 15,188,194,218,
- 89, 84, 20,145,197, 17,103,195, 49,179,217,130,141,237, 13,118,247,118,152, 76,231, 76,166, 5, 27,131, 1,121,183,195,238,222,
- 30,167,103, 31, 83, 45, 74,159, 57,158,119,168, 66, 68,103, 85, 87,164, 73, 12, 14,170,170, 66,144, 33,132,194, 24, 71, 81, 53,
-140, 43,195,112, 50,227,210,222, 30, 77,211, 16,139, 54, 33,203, 80,150,115,186,145, 98,103,103, 3, 33, 29,103,103, 25,143, 30,
- 29,112,109,127,223, 39,166,229, 29,159, 67, 46, 4,157, 44, 99, 40,252,195,181,169,161,155,229, 40, 36,211,209,136,166,134,210,
- 57, 6,157,156, 52,142,153,157, 23, 8, 91, 97,231, 11,148,243,113,194, 11, 33, 24,214,142,174,246,152,214,147,241,140, 40, 74,
- 60,239, 93, 8, 84,236, 99,136,139, 69, 69, 63,132,185, 72,229,239,219,190, 84, 76,133,101,138,163, 87, 66, 90, 56,146,220, 7,
-180, 68, 26, 31,216,179, 28,247,138, 11,246,199, 54,217,172, 77,152,244, 60,117,131,179,171,157,110,219,248,214,214,248,215,197,
-249,176, 16,159,166,166,112, 97,250,227, 11,184, 66,106,223, 5, 43, 33,208,206,145, 88,129,232,110,194,118, 73, 86,213,168, 88,
- 99,103, 99,226,216, 18,103,130,100,144, 18,119, 83,162, 88,177,121,105,143,221, 43, 87,232,102, 41, 52, 87, 48,162, 65, 39, 41,
- 82, 71,232, 78, 15,155,230,168, 52,195, 74, 95, 28,156,106, 57, 28, 43,198, 56,206,249,232,212,240, 32,179,214,160,156, 95, 45,
- 88,235,104,156, 3,235,139,184, 53, 22,173,244,170,160,227, 16, 40, 78,142,207, 56,120,124, 12,206,139,207,202,218,129,212, 72,
- 25, 83, 53, 53,117, 93,147,196,254, 96, 97,226,136, 74,123, 1,177,171,189,118, 35,201, 50,206,199,231, 68, 89, 7,180,191,143,
-188, 80,213,175,194,132, 2,101,253,248,216, 24, 75, 82, 69,148,117,132,113,102,205,146,235,150,246, 96,223,206,185,181,251, 52,
- 36, 65, 74,187,108,180,218,105,223,242,208,191,150,170, 38,195,218, 86, 10,235,119,249,126, 95,129, 8, 33, 56,158,204,103,189,
-179, 1,111, 67,211, 73, 76,218,100,212,117,237,189,248, 85,205,130, 18,112, 75, 17, 95,155, 91, 33,228, 69,226,165, 64, 34,157,
- 10,235, 98,187,202,145, 8, 52,194, 39, 27,201, 79, 11, 26, 91,190,255, 36,248, 93,172,108,112,246, 25,122,163,214, 45,246,228,
- 63,214,249,215, 95, 25,135, 50,134,186, 89, 53, 44,198,132, 21,169,243,107, 84,157,198,209,242,116,229, 99,222,220, 26, 36,166,
-245,149, 7,160,204, 90,144,251,106,167,245,236, 24,206,103,165,216, 60,237,223, 99,153, 24, 36,156, 90,138,195, 84,179, 10,105,
- 88,191, 64,252, 73, 76,132,208, 7,133, 67, 47, 63,143,181, 22, 67, 56,193,134, 17,255, 42,165,199,255,125,181,115, 12, 54, 6,
-188,250,234, 15,153,207,166, 36,169,192, 20, 48,173, 74,174,220,124,153,173, 94,135, 88,207,184,125,251, 45,158,191,241, 60,151,
-247,174,113,231,147, 71,244,123,125,186,105,204,220,204,253,206, 10, 75,167,219,193,226,200,243,148,126,175, 3,198,219,150, 58,
-217,128,241,228,148,178, 44,113,206, 16,233, 20,231, 26, 31,167,169, 35,138,166,196, 9, 71,150,199,220,191,127,143,233, 98,206,
-215,191,254, 21,238, 63, 60,225, 23,127,225,151, 57, 60, 58,231,232,241, 1,121, 28,243,217,231,159,231,195,143,222,131, 6,142,
- 78,135, 92, 31, 92, 69, 69, 17,199,143,238,112,247,241, 25, 55,191,250,211, 60, 28,253, 59,204,241, 24,109,107, 70,167,135,116,
-178, 75, 28,159, 13,185,246,194, 23,249,240,221,247,217,232,118,233, 68, 51,230,149,135,107, 88, 23, 51,157, 54,196,166,224,237,
-119, 63,228,167,255,241, 63,196, 36, 41,103,103, 15,216,221, 72, 48,117,141, 86, 17, 84,139, 11, 69,124,233,129,253,180,198,253,
- 2,130, 95, 44, 67, 43,156, 19, 75,129,164, 10,184, 90,171,164,223,214,186, 26,101, 45, 70,250,120, 75,235, 44,177,211, 40,227,
- 79,205, 70, 26,111,103, 90,162, 11,107,127,232, 20, 16,107, 31,101,235, 66,118,186, 88, 45,194,150,162,138,229,105,216,195,147,
- 1,201,205,231, 94,192, 93,218,231,193,131,187, 8,109,201,251, 3, 92, 93,147, 9,197,100, 50, 99, 49, 91,112,247,195,143,144,
-117,195,181,203,251, 12, 54,251,184, 60,162,183,179,143,107, 44, 66, 40,110,216,136,147,163, 35,106, 25,161,133,198,184,154,178,
-170, 81, 18,104,106,132,171,137, 59, 9,157, 78,159,249,108, 66, 66,195,151,190,242, 69, 94,123,237,109, 14, 15, 79,216, 28, 12,
-184,188, 55,160,172, 43,206,142,199, 20, 69, 77,150,103,100,221,140, 69,229,167, 61, 77,101,124,114, 25, 80,213,181,239,118, 7,
- 93, 26, 99, 57,159,204, 56,154,213, 72, 21, 81, 54,126,247,171, 36, 8,229, 35, 69,141, 41, 41, 22,142, 78,183,199,214, 70,151,
-186, 44,248,236, 11,207,243, 71,127,252, 45,226, 52, 37,206,114,250,253, 1, 27,253, 62,105,154,176,127,105, 31,107, 44,113, 20,
- 51,232, 71, 65,141, 13, 85, 83,177,168, 43,108, 49,227,248,240,128,225,233, 57, 69, 85,114,114,120, 66,228, 96, 97, 27, 42,225,
-152, 91,152, 57,137, 43, 42,198,165, 97, 43,213,148,214,139,100,165,244,129, 28, 66, 43,206,143, 70,164,187,125,138,178, 68, 99,
- 73,107, 24, 72,197,185, 49, 84, 86,178, 40, 29, 73, 97,200,114,183,220,211,122,113,152, 12,175,223, 26,135,184, 13,197,104,243,
-186, 3, 72,198,226, 99, 90, 91, 28,103, 11,164,177,107,199,188,218, 88,148,138,252,254, 92,250,125,165,146,106, 25,255, 43,133,
- 32,118, 14,229, 64,139, 30, 8,131,117, 13,113, 30, 65,145, 99, 41,208,218,161, 98,137,234,102,116, 6,125, 6, 87,174,144,239,
-110,123,161,152,173,209,206,249,116, 55,157,160,211, 14, 58,237, 18,176,121, 56,105,112, 81,184,167,172, 89,170,218,145, 4,223,
-186,197,184,102,233, 80,171,202, 38, 60, 3, 37,126,234,238,191,247, 40,246,227,104, 43, 5, 38,172, 23, 63,254,248, 1,141,241,
-247,156,214,154, 2,129, 69,146, 36, 57,101, 99, 40,235, 25, 91,253,109, 22, 74, 81, 71, 49,196, 49,162,242,187,251, 40,210, 30,
-202,131, 36, 74, 82, 92, 43, 52, 13,163,223, 72,251, 73, 71,235,110, 50,141, 37,137,189,226,189,110, 84, 16, 57,175, 28, 79,214,
-134,144, 39, 97,151,108, 10,132, 63,216,107,213,238,134, 35,111, 89,214,173, 77,121, 61,162,123, 61, 45,205,173,136,122,132,105,
-237,218,225,174,181,213,185, 56, 66, 59, 75,236, 12, 89,147,250,162, 94, 55,129,215, 99, 86,128,155,229, 36, 55,208, 47,181, 66,
- 56, 17, 4,222, 22,108, 3,118, 93,164,245, 12,202,233, 51,194,197,126, 44, 70, 91,172, 40,255, 45, 94,215,134,215,205,173,133,
-201,172,146, 49, 87, 59, 79,223,205, 75, 26,107, 80, 70,122,164,178,168,151,113,182, 46,252,220,154,166, 65,235, 40,236, 49, 66,
- 44,158,183,139,172, 83,220, 90,250,219, 10,226, 32, 3, 2,178, 85, 72, 63,235,155, 93,137,166,159,254,102, 69,187, 71,112,107,
-228,176, 54, 54, 78, 10, 42,109,215, 48,132, 43, 98,143, 88,138,177,214,181,162, 50, 28,114, 37, 17, 64,212, 22,115,183,178,200,
- 57,255, 39, 21,146, 56, 75, 56, 63, 57,103, 52, 26,145,166, 17,196,130,163,217,130,207,239, 95, 38,166,228,133,231,246,121,103,
-254,136, 79, 30, 60,224,240,160, 96, 54, 41,120,241,197,235,184,106,129, 45,102, 40,229,200,122, 25, 86, 57,202,106,225, 1, 25,
-166, 98, 58, 57, 69,200,156,119,222,186, 77,146, 41, 54,182, 98,156,105,124,120, 64,156, 80,215, 53,198, 25,148,214, 36, 90,210,
- 84,130,211,227, 83,186, 27,219,232, 40,162,215,237,177,181,181,195,116,234,225, 3,127,240,111,254, 53,191,254, 55,127,133,255,
-227,135,239,162,133,226,108, 86,162, 30,157, 66, 18,243,245,203, 55,120,120,112,194,213,175,253, 18,229, 31,255, 1, 40,184,122,
-117,159, 8, 71,181, 24,243,207,254,197, 63,231, 87,127,234,235,124,114,243,135, 76,138, 9,155,221,136,147,121,137,181, 21,200,
-152,166, 49,184,133,227,222,131,199,212, 90, 82, 40, 69,227, 44,103,195, 51, 46,119,246,233,117, 7, 12, 23,227, 11,202,245, 11,
-187, 33, 39,159, 58, 69,138, 11, 59, 34,231,111, 16,225, 33, 54,202, 73, 79, 77,114, 14, 29,226, 21,173,173, 48,198,162,164, 70,
-107,127, 49,214,141,162, 14,171, 32,185,182, 66, 81,203,194,236, 87, 66,137,214,212,141,166,110,170,165, 16,198,143,189,228, 82,
-229,188,126, 83, 72,124,232,197,135,239,190,131,178,198, 83,206, 54, 55,113,103,142,197,116, 70,183, 59, 64,197, 29,172, 72, 49,
-166,102, 81,149, 28,157, 29,161,116,131,141, 46,179,213,191,142,173, 29,198,105,132,142,217,186,249, 2,253,189,203, 76, 39, 19,
-102, 69, 69,119, 99, 3,148,198, 84, 11, 31,168, 16,212,185, 82, 8,206,135, 35,172,180, 92,191,113,131,201,164,228,221,183,111,
-179, 40, 10,106,219, 97, 58, 26, 17,107,201,193,233, 9,117,217, 33, 73,182,233,247, 58,108,111,246,120,120,255, 17,166,242, 5,
-182, 44, 74,142, 79, 78,201,211,136, 60,221,230,124, 56,162,208, 29, 34,173, 57,159, 44,200,180,192,233, 16, 99, 28,249,200,210,
-122, 49, 65, 56, 67,214,233,145, 37, 9,163,201,156,173,173,109,142,143, 79,184,114,229, 38, 8, 24,157, 13, 89, 36, 49,253,141,
-126,152,166, 74,242,174,103,105, 47, 22, 11, 22,179, 57,194, 26,154, 98, 78,167,147,177, 88,228,156,207, 43,162,184, 67, 39, 51,
- 84, 85,133,113, 48, 53,142, 74,101, 52,101,129, 74, 52,211,178,194, 74,197,162,106,232,198,158, 2,103,173, 67, 90,201,116, 52,
-165,108, 44,177, 82, 52,101, 67, 47, 73, 57,181,134,194, 42,226,170, 65, 78, 26,210,184, 32,146, 10,171, 21, 78, 69, 56, 25,225,
-156,183, 80,137,240,102,132, 37,110,187, 91,225, 81,187, 72,225,139, 33,126,210,216, 34,125,101,240,119, 91, 97, 1,131,116,194,
- 23, 27,185, 54, 74,150, 2, 33,125,120,140,107, 12, 82, 58,210, 72, 16,101, 17,164,154, 56,145, 36,219, 93,116, 51, 67, 80,147,
- 68,150,142,104,200, 19, 77,183,215,165,187,181,131,234,118, 17, 90,160, 92,141, 51, 46, 20,244, 12,153,118, 32,206, 32, 73, 65,
-106,172,169, 16,194,248, 75,213,130,107,108,187,125,198, 41, 16, 86, 32,140,192, 10,143,174,245, 97, 29,128, 10,251,126,240,201,
-112, 82,226,155,102,255,245, 47, 22, 21,167,103, 35,170,202,144,233,152,186,174,124, 62,187,214, 52, 78, 80, 11, 71, 35, 4, 42,
-246, 46,145, 90,107, 76,104,216,156,177, 72,237, 35,162,107, 99,201,226, 4,235, 68,184, 46,220, 18, 36,165,219, 3, 68,164,208,
-117, 8,233,210, 17, 81, 20,194, 94,214, 1, 90,136,149,165, 89,248,162, 43,164,255, 28,113, 44, 61, 34, 54,241, 8, 88,239,118,
- 88,217, 91,125,231,110, 81,238,233,201,224,211,113,165, 98, 21,227,221, 82,232, 26, 67,154, 37,116,234, 28, 99, 12, 2,225, 29,
- 30,130,149,147,234,201,209,121, 27, 7,173, 36,202,170,167, 8,152, 23,243,206,197,179, 35,194, 5, 79,141,222,219,189,192,178,
-150,185,167, 59,122,150, 54,204, 39,243, 49, 86,131, 28, 95,203,252,100,218, 56,139,180,222,178,186, 76,163,116,126,138,167,117,
- 8,144, 0,177,204,186,125,114,159,189, 28,191,183, 39,223, 22,189, 41,197,133,221,182, 12, 99, 50,177,198,147, 93, 21,130, 11,
- 25,107, 56, 28,202, 89,172,242,221,156,210, 38,196,179, 74,116, 43,172,176,110,233,107,124, 82, 76,237,214, 58,199,213,239,133,
- 48, 83,231,130,181,115,101,169,192, 65,131,160,147,231,140,198, 67, 22,139, 5, 91,251, 57,229,204,209,219,216,161,147,119, 24,
-228,150,135,247, 63, 97,115,107,147, 78,190,205,155,175,223,101,111,107,159,243,179,115,178,184, 33,141, 35, 6,155, 61, 26,145,
- 50, 91, 24,100,237,112,117,197,116, 60, 34, 79, 83,230,115, 75,222, 29, 32,132,135,129,224, 20, 69,227, 71,127, 89, 39, 35, 78,
- 98,138,170,192,154,138, 72, 69, 36,121,135,219,183, 63,228,206,195, 3,126,235, 55,127,143,131,131, 17, 87, 46, 95,229,124, 56,
-228,206, 71, 31,241, 59,191,245,107,116,243,156, 98, 90,211, 80,115,116, 50,194, 41,193, 91,175,125,159, 23,191,244,203,124,225,
- 11, 63,205,209,204, 82, 55, 53, 71,135,135,188,248,252,139, 28, 60,120,192,230,214, 46,215,158,255, 28, 14, 56,120,248,104,153,
-147,238, 79,118, 30, 44, 99,106,195,189,123,247, 48, 8, 58,131, 13,138,121,159,179,199,199, 36,233, 57,253,172,179,140, 72,109,
-127,194,171,139,240,105,155,218,133,155, 46, 92,132,194, 6,102,181, 8,168, 70, 11, 66,248,177,188,148, 18,101,195, 40, 73,121,
- 27,145,148,146,186,150, 84, 33, 43, 64,174,173,118,116,139,146, 21,146, 40, 86,216,200, 67, 34,154,186,198,154, 6, 23, 8, 93,
-226,137,149,207,250, 74,160,156,207,120,251,245,215,168,207, 78,208,182,194, 57,131,194,224,234, 10, 41, 36, 81,146,163,163,132,
-162,156, 51, 47, 70,244,183,123,164, 27, 93,140,210,204, 75,131, 41, 43,156, 80, 40, 45, 72, 51, 77,220, 29,208, 79, 50,198, 71,
- 7,156, 29, 29,177,115,253, 38, 74,107, 22,101,227,137, 92,117, 77,222,201,232,117, 59, 76, 38, 99,182,171,130,171,215,174,242,
-240,254, 1,195,209,144, 52,113,204,231, 5,179,233,148,126,175,203,206,206, 22, 90,251,168,205,189,157,109,142, 31, 31, 48, 30,
-158,145, 36, 9,206, 52,156, 12, 71,152,166, 98, 50,157, 17, 39, 49, 87,158,191,225,247,191,117,193,108, 81,161, 83, 77, 39,207,
- 73, 58, 61,226, 88, 98, 77,205,249,240, 28,240, 34,184, 71,143, 15,217,217,222, 2, 33,216, 28,244, 73,210,152,170,170, 56, 31,
-157, 83,149, 11,182,119,183,169,155, 26,225, 26,210, 56,230,250,213,171, 62,212,101, 50, 70,154,134,189,173, 13, 14,143,142,249,
- 76,109,249,137,113,193,172,134, 55,239,124,196,159,124,247,207,105,170,154,243,162,161,167, 5,113,172, 24, 79, 43, 18, 9,243,
-178,166, 19, 71, 62, 69,205,120, 53,180, 86,154,217, 98,129, 70,162,133, 64, 88, 67,170, 36,211,198,144, 26,137, 94, 88, 22,179,
-154, 56,154, 35,149, 67,170, 28, 37,148, 79, 13,108,237, 80,210,139,227,106, 83, 67,227,119,189,106, 73, 51,244,145,169, 86,216,
-112,184, 98, 25,219,105,140,245,169,109,194,163, 75,253,180,111,149,236,214,250,126,157, 54, 64,132,164, 38, 22,146,184, 73,145,
-253,140,180, 28,144,218, 5,145, 2, 73, 73,108, 23, 36, 90,120, 69,114, 27, 38,148,104,112,177,223, 3,235, 8,210, 28,155,102,
-216, 40,133, 56, 6, 29, 33,106,133,172,107,156,105,150,145,170,206, 47,168,189,232, 79,130, 78, 52, 86, 72,108,101,113,202,239,
-175, 17, 2, 29, 69,190, 25,146, 18, 43,220,114,253, 88, 89,203,112, 50,163, 44, 42,159,247,144,166, 68,177,230,244,188, 36,237,
- 14,176, 50, 98, 54,157,208,233,116, 81, 81, 12, 74,161,243,148,210,250,102,199,195,121,116,112, 5, 8,207,179, 95, 71,161, 10,
- 46, 52, 96,254,153,221,120, 69,118,184,103,149, 84, 24, 97, 86, 49,169,173,144, 45,212, 12,132,207, 2, 73, 35, 69,146,104, 79,
-113, 75, 18,178, 52, 33, 77, 98,226, 88, 47, 27, 74,177, 38,122, 19,107, 14, 26,255,133,178, 6,112, 89,153,171,215,131,198, 92,
- 28,225, 76, 74,158,187,144,200, 39,168,170, 10,156, 37,106, 65, 55,114, 77,119,181, 30,183, 43,196, 50,125,174, 21,236,174,249,
-231, 46,194,181, 86, 88,185, 11,224,176,165, 71,168,157, 24,182, 69,187, 85, 68,182,188,142,181,134,245,211,162, 87,219,177,253,
-242,181, 88,130,226, 86, 83,106,107,124,180,121, 85, 87,104, 37,212, 42,228,254, 9,168, 76,123, 90, 18,161,237, 86, 75, 91,147,
- 31,129,135, 71,239, 82,233, 46,151,202, 65,183,150,191, 45,158,254, 74,197, 90,172,106,216,135,105,169, 48, 18, 26, 9, 77, 72,
-120, 50,141,193, 57, 79, 3, 91, 1,239, 86, 63,178, 11,169,171,203,175,217, 46, 25,242, 45, 52,165,229,218, 11, 7, 29, 37,233,
-230,138, 69,100, 40, 22,115, 78, 38,146, 23,191,244, 89,174,239,237, 82, 13,239,211, 73,251, 76,102, 35,100,234,168, 22,167, 40,
-177, 1, 86, 35,101,130, 78, 35, 50,237,252, 94, 44, 50,216,186,160,151,118,217,251,202,215,137,187, 25,200,132,172, 51,160,110,
- 12, 58, 82, 72,105,105,234, 5,182,158,240,209,135,183,201,123, 61,170,179, 35,138,170, 96, 49, 95,160, 68, 66,164, 12, 47,223,
-186, 73, 49, 58,231,225,189,251,188,240,249,175, 49,154, 20,212,229,156,217,120,204, 11,159,251, 60,223,251,193, 27, 52, 86,210,
-139,225,165, 91,151, 56, 58,155,242,224,193,135,116,122,191, 73,190,255,121,212,221, 63,163, 40, 27,238, 31,205,216,234,244, 40,
-103, 51, 70, 11,131,147,138, 65,183, 67,226, 20,234,100, 24, 20,163, 6,215,212, 32, 29,135,143,238, 48, 63, 63,226,242,102,151,
- 15, 63,177,108, 14, 46,115,240,201, 61,174, 61,119,149, 36,206, 88,148, 69,184,200,219,107, 72,134, 61,229, 90, 28,110,155, 33,
-188, 34,206, 44,127,237,239,191, 48,126,111,213,153,120, 74,150,113, 62,172, 66, 26,183,162,203, 9,129,172,253,117,163,194,190,
-172,197,124,202, 80,176,147, 38, 66,164,150,186,246,214, 28, 63,190,180,107,135, 63, 63,113,178, 33,187,221,235, 42, 5,211,179,
- 57,101,105,121,243,157,247,184,190,191, 69, 47,141,112, 77,205,240,228, 8,157, 38,244,227,136, 72,106, 30, 31, 30,112,118,126,
-159,179,131, 59, 60,255,153, 47,178,119, 85, 17, 77, 53,121,167, 67,158,165, 40,233,125,219,157, 60, 39,137, 53, 27,253,140,123,
-159, 28,241,248, 99,195,149,207,188, 76,186,113,137,209,249, 17,167, 39,247,121,238,214,115, 60,247,220,117, 62,190,243, 49,163,
-227, 19,118,247,174,112,237,202, 54,163,201,152, 36,219,192,170, 57, 91,187,151,232,166, 49,229, 98,134,146, 2,131,101,103,163,
-199, 43,175,124,131,127,255,239,254,144,241,112,136, 86,130,217,116,194,217,112,194, 71,143, 79,249,155,127,243,215,112,197,148,
- 78,175, 79,229, 20, 78, 39, 68,189, 77,140,107,168,203,154,170,130, 36, 77,185,188,127,205, 11,222,164,161, 92,140,137,116,196,
-151, 62,255, 34,179,241, 4,179, 88,208,212, 21,202,149,228, 73,138,116, 21, 90, 24, 76, 89, 48,153, 25,100,148, 50,155, 47,168,
- 22, 11,242, 88, 19,199,138,189,237, 30,103,231, 35,140,174, 81,166,225, 87,191,244, 34, 61,187,224, 15,255,252,117, 78,107,135,
- 18,146, 69, 85,179,208,254,181, 50,198,191, 9, 41, 49,141,161,182,144, 16, 19, 43, 69, 85, 89, 76,164,160, 49,108, 72,193, 1,
-150,142,141,233,212,138,106,214,176,200,107,148,145,196,117,130,198, 33,165,239,206,193, 63, 27,132,240,169,103, 90, 27,112,218,
-103,145,203,214, 42, 38,151, 98, 55,156, 64, 58,133,177, 2, 21,172, 91, 46, 52, 32, 86, 72,156,136, 2, 18,217,235,122,148,146,
-232, 88,135,117,163,135,174,120,251, 88, 76,108,115,114,105,136, 92,131,116, 21, 52, 5,218,213, 68,194, 18,197, 18,165, 29, 50,
-137, 33,242, 25,235, 66, 39,136, 56,131, 40,245,197, 92, 71,160, 52, 40, 11,162,128,170,240, 10,119,106, 47, 6, 13,246, 48, 41,
-149,159, 54,134, 46,153,112,111, 88, 7,202,121,193,152, 85, 14,235, 12,174, 6, 21,101, 76, 22, 5,103,211,146,102, 54,195, 84,
- 83,116, 71,251, 46, 95, 70, 24,145, 96,101, 68, 83, 65,222,239,227,164,166, 22, 22, 34, 9,181, 9,137,122,160,162,152,186,177,
- 62,110, 54,201, 66,110,186, 89, 50,213,219,167,124, 43, 32,147, 50,120,215, 3,152, 76, 4,177,148, 53,214,175, 72, 85, 72,123,
- 20,218, 31,208, 4, 36, 90,144,197,138, 60,141,124,252,106, 22,145, 38,146, 56,150,232, 72, 44,227,149,165,192, 51, 6,194,212,
- 85,184,245,198, 80, 92,116,230,184,167,105,149, 74,107, 92, 18, 19, 91, 75,102,253,250, 51,214, 10,103,109, 16,133, 7,251,154,
- 12,142, 7, 15,229,101, 25, 5, 36, 36,200,229,145,228, 2,179,195,139,136,213,242, 47, 94,175,101,109,226,222,211,157, 40,171,
-117, 2, 43,165,186, 8,110, 33,143,250, 93,125, 46,193,211,147, 0,133, 64, 11,129,150, 97,104, 35, 89,186,186, 90,123,120, 89,
- 54,104,228,234, 4,208,126,144, 88,247,172, 45,171,166,127, 80,170,213,208,226,153,249,230, 23,235,247,218,200,189, 61,125,137,
- 39,190,207, 64,124,243, 10,191,240,102,125,124,158, 81,114,181,159,185, 48,206,121,154,102,183,132,205, 44,119, 58,110, 13,138,
-226, 85,217, 18,205, 98,238,247,131, 89,234, 5, 9,181,129,205,141, 45,102,147, 49,123,219, 91,196, 17, 56, 97,121,252,232, 33,
- 87, 47, 95,194,153,154,249,116,142, 18, 41,253,141, 14,149,107,144, 81,196,230,230, 46, 55,175,220,228,227,247, 63,228,224,248,
- 17,189,141, 14,143, 15,142,137, 83,159,187,188, 40,230, 36,137, 36,137, 21,157, 60,102,115, 99,155,173,237,125, 94,126,241, 11,
-188,255,254, 91, 60,184,119, 7, 91,195,198,198, 22,101,105,121,237,181,215,184,254,252, 75, 56,106,174,221,184,202, 39,119,230,
-188,246,218,155,252,204,207,254, 12,223,249,139, 87, 3,255, 89, 49, 24,244, 25, 79, 75,186,121, 66,146, 36, 92,186,126, 19,247,
-189, 63, 99, 86, 44, 16,147, 41,151,119,246, 88, 44, 10,156,147,108,239,238, 50, 57,123, 76, 85, 54,104,225,177,185,142, 42,204,
-252, 28,147,209, 41,247,239,125,194,198, 70,159,114, 49, 35, 17,134,147,163, 35,164, 22,184,140,165, 15,212,173,150, 62, 23, 71,
- 75, 79,210,228,254,178,188,251,240, 66,250, 67,154, 79,131,147,193,123,187, 62, 70,147, 33,136,163,221,123,181, 93, 59,210, 99,
- 52,149,112,212,117, 74, 83,215,152, 48,126,122,230, 9,119,237,197, 63, 59,126,196,230,102,159, 56, 73,249,222, 95,188,206,139,
-207, 93,230,249,155, 87, 56, 57, 61,128,200, 49, 60, 59,165, 44, 26, 78, 78,142, 73,115, 13,141,224,116,188, 96,110, 30,241,220,
- 11, 41, 11,215, 80, 76,199,116, 59, 25, 46, 73,188,240, 74,116, 80, 81, 74,222,223,228,241,163, 35,122,131, 35, 6,187,123,100,
-121, 78,119,176,137,177,160,227,136, 75,151,175,242,209, 71, 31,147,117, 55,248,204,103, 95,192, 57,193,201,201, 41,247,238,223,
- 39, 18, 48,137, 52,189, 60,195, 57,201,233,104, 4, 42, 98,247,242, 21,190,249,211,223,228,238, 71, 31, 97, 77,195,254,213,107,
-140,230, 5,159,121,233,139, 92,189,126,131,242,252, 49,195,209,148,217, 98,193,254,165, 75,140, 39, 99,148,173,137,133,165,105,
-106,210, 44,163, 76, 98, 54, 55, 54, 81,113, 66,175,219, 37,206, 59,244, 55, 54,112, 88,198,163, 49, 27,155, 27,244, 92, 31,165,
-181,183,132, 69,154, 70, 10,202,178,166,113, 21, 91,219, 59,156,159,158, 98,154,146, 56,138,209,194, 5, 74,154,101, 60,158, 82,
- 46,134,124,227,243, 47, 48,156,140,249,243, 55, 62,196,184,136,218,121, 17,211, 2, 75,207, 10, 10,235,200,252,178,216,191,246,
-198, 46,215,115, 74,174, 30,144,153,146, 20,182, 97,129, 36,170, 29,233,194, 98,147,134, 58,106,208,145,241,107, 19,113,241,186,
- 82, 50,196, 89,138,214, 24,212, 74, 46,221, 18,148,229, 19, 74, 77,216, 13,107,164,181,254,192,103, 5, 66, 24,164,169,188,138,
-222, 42, 48, 6, 97, 5, 81,236,119,189,137, 90,233,136, 16, 9,177,130, 68, 57,180, 48,196,194, 32,155, 25,182,156, 35,109,233,
- 69, 97, 58,242, 29,112,146, 32,162, 12,116, 2, 81,130,147,113,248,127,254,255, 47, 31,106,146,176,111,182, 8,219,128,173,150,
- 7,140,229,197, 44, 21,166,170, 49, 38,236,232,157,163,177,198,143,196,157, 47,148,214, 58,238, 63,120,196,124, 81, 97, 76, 29,
- 66, 63, 34,166,179, 25,121,167, 75,237, 44, 85, 85, 16, 7, 11,102, 99, 45, 73, 55,163, 16, 18, 33,108,152,102, 24,191,159,119,
-132,195,143, 92,227, 78,240, 68, 63, 41, 2, 7,190,117, 25,124, 74, 30,136,184, 24,213,173, 37,196,145, 15,235,201,179,196,147,
-220, 66,135,238,127,230,171, 8,238,191, 60,222, 89,112,177,194,112,225,249,225,148, 47,236, 81, 20, 97,147, 20, 44, 24,173,125,
-184,142,148,168,200,187, 75,214, 27, 10,132,244, 37,125,249, 60, 10, 12,128, 31,251,112,249,235,255,115,225, 16,176,242, 7, 45,
-113,233, 23,127,111, 61, 9, 85, 60,161,130,151,216, 37,184, 45, 88,194, 27,131,110, 71,212,254, 40,228,219,155, 22,118, 33,156,
-127,176,218,144, 79, 40,145,152,144,229, 43,165,239,186, 68, 40,166,173,138, 81,224,144, 46,156,220,228,186,167,221, 44,125,149,
-136,139,249, 31,180, 22,183,128,181, 81, 45,101,204, 10, 47,146, 89,126,102,177, 58, 44, 56,119, 33, 31,199, 61,137,168, 93,223,
- 97, 8,129,179,142, 72, 38,204,138,134,249,116, 70,127, 67, 49,156, 85,168,120,131, 36, 77,184,124,105, 7, 45, 22,156,156, 60,
- 34,210, 62,145,169,223, 25,208, 44, 28, 39,211, 49, 73,226, 79, 67, 91,131, 13,122,131, 77, 30, 31,158,114,116,118,196,233,217,
- 57,147,201, 24, 99,231, 36,145, 64,201,134, 60, 73,201,226, 20,235, 26,230,211,115,102, 99,131,112, 49, 31,127,240,144,141,141,
- 77, 46, 95,222,226,214,141,207,240,222,187,239,162,132,162,168,252, 62,243,210,254, 14,175,189,245, 22,184,136, 44,205,121,239,
-253,143,249,207,254,198, 47,121,213,169, 53, 68, 74,112,255,254, 67,138, 26,222,126,253, 53,110,223,190,205, 87, 94,249, 41,254,
-229, 63,255,175,169, 26, 67, 81, 87, 28, 28, 29,177,185,185,205,100, 50,231,243, 95,252, 10,135,247, 62,226,116,116, 68, 36, 64,
- 57,131, 19, 77,216,231, 9, 26, 83,241,232,224,128,207, 93,187,206,233,209, 99,116, 22,129,181, 28, 29,159,208,123,110, 55,140,
- 44, 27,164, 92, 9, 86,120,130, 37,248,164, 15,243,105, 97,164, 88,142,239,159, 42,242,206,121, 5,178,115,207, 72,115, 91, 27,
- 95,133, 49,149, 12, 99, 83, 27,168, 95,118,105,133,252,241, 55,145,181, 13, 15,238,127,196,100, 58,226,234,245, 27,236,109,110,
- 82,204,206,104,108,195,246,206,128,241,249, 1,105,210,101, 50,173,208, 58, 97,103,255, 26,183, 62,251, 50,121,111,143,162, 40,
- 25,158, 28,162,149, 34, 77, 83,108,149, 99,123, 93,172,169, 17, 88,210,110,143,254,230, 54,211,241,132,209,241, 67, 58,137, 36,
-142, 98,118,119,247,176, 14,138,218,208, 56,152, 21, 5,143, 15,143,184,121,243, 57,162, 56, 98, 81, 46,184,113,243, 26,212, 13,
-143,239,223,163,223,237,146,119,187,108,237,238,115,114,126, 70, 85, 20,124,225, 11,159,231,235, 95,253, 10,206, 58,206,134, 67,
- 70,211,130, 40,235, 50, 25, 77, 72,117,198, 98,122, 78, 99, 5, 15, 31, 63,102,103,208, 97,119,144, 99, 77, 73,132, 37,178, 18,
- 87, 53,140,135, 6, 21,103,188,244,242, 75,164,157, 62,139,170, 34,235,166, 24,103, 25, 78,198,108,109,110,146,101, 25,211,201,
-148,218, 84,108,108,109,144,102, 61, 70,211, 57, 81,148,240,153, 23, 63,203,240,248,144,243,227, 3, 34,169,232,118,186, 94,189,
-109, 26,108, 53, 39,239, 68,124,249,179,207,241,193,135,159, 48,171, 12, 40,129, 54,150,210, 58,250, 90, 49,175,106, 58, 82, 1,
- 13,206, 88,154,202, 44,139,185, 18,122, 73,130,235,201,136,185,169,152, 9,136, 13,184, 66,224, 74, 65,149, 55, 40,219,160, 27,
- 25,196, 66,194,167,181, 33,131, 96,204,250,231, 85,171, 36, 15, 83, 36,215,170,149,195,117,100,140,193, 81, 19, 65,176, 72,130,
-182,254,192, 39,181,246, 29, 33, 50,248,154,157,223, 75,122, 74, 18, 42, 10, 32, 46, 9, 66, 59,132, 6, 37, 45,145, 73,176,105,
-234, 9,140,174,198,105, 13, 42, 65,168, 4,151,100, 56, 29, 35,227, 12, 17,165, 56,169,177, 23,185,113, 94,119,111,106,104, 42,
- 47, 4,148,109,246,184,195, 26,135,107, 28,182,177,148, 85, 13, 50, 66, 73,141, 17,190,185,114, 8,111,253,138,115, 30, 60, 62,
- 94, 90,213,108,240,175,235, 56,166, 26,142, 24, 12, 6, 52, 69,205, 98, 54, 35,207, 50,132,148, 20,174, 33, 73, 83,143,104,166,
- 9,107, 50,191,243,174,154, 2,157, 38,160,148, 63, 56,216,112,159,173,177, 69, 60, 66,250, 34, 76, 69, 60, 25,225, 25, 36, 97,
-173, 40, 77, 73,129,142, 36,113,172, 73, 18,143,101, 77, 83,159,146, 22, 71, 62,165,173, 21, 67, 91,203, 19, 79,245, 53,212, 56,
-226,153,129, 94, 79,233,182,218,142, 61,210, 68, 54,246,207,129,200, 23,117, 65,136, 4,143, 60,181,142, 53,235,171,144, 34,104,
- 9, 86,129, 83,255,145,106,249,197,231,222,122,244,229,210,253,176, 54,121, 88, 67,114, 95, 92, 45,200,101, 70,194,210,212, 23,
-174, 25,159, 54,104,208,214,218,101,134,247, 69, 26, 91,136, 41,116, 14, 39,109,240,222,217,144,124, 21,132, 21, 98,101, 99,243,
-234, 76, 95,220,109,216,159,138,181,244, 52,255,193,238,130,112,238,211,204,251,178,253,109,185,138,132, 93,158,224,196,147,160,
-210, 39, 3,102, 46,254,215,135, 60,248,111, 95,203,196,143,182, 11,131, 86, 62, 73,107,123,235, 18, 74, 73, 62,250,224, 29,226,
- 4,170, 98,138,214,254,107,143,181,162,104,230,108,246,123, 84,101, 69,175,219, 67, 42,197,143, 94,125,149,162,178,100,249,192,
-239,254, 17, 68, 73,206, 27,111,189, 69,214,233,114,245,234, 53,164, 20,244,123, 57, 81,156,114,126,248, 0,173, 50,250,157, 93,
- 48, 53, 31,126,240, 62,141, 43,217,216,236,114, 62,156,210,147,187, 76,230,115, 30, 63,126,200,193,193, 67,246,246,159,163,219,
-233,249,204,223, 52,163,223,235, 50, 25, 14,153,205,107,175, 59,176,130,141,243, 51,254,244,219,223,225,103,126,238,167, 49,206,
-171,123,203,186, 36,142, 61,128,101, 54,171,248,226,103,191,202, 31,253,219, 63,160, 90, 28,178,221,223, 96, 50,172,252,248, 91,
- 8,156,240,222,200, 71, 7, 71,252,236,151,191,204,124, 58,164,116, 9,141,105,152,142, 11,210,106,227, 98,142,253, 51,110,179,
-245, 78,253, 73,167,195, 95, 70, 88,106, 19, 1,151,227,251, 11,162,145, 53, 43,221,167,172,154,214, 55, 49, 23,233,117, 23,178,
-129,113,214,122,139, 88, 53,231,209,163, 7,216,133,161,159,229, 92,218,221, 36,137, 42, 22,179, 83,186,105,194,217,217, 33,221,
-141, 75, 24, 17,243,252, 11,159,227,210,149,231, 57,159, 46,152, 21, 67, 14, 63,185,195,124, 54,101,115,176, 65,127, 48,160,215,
-235,178,179,187,139,107, 54,104,154,154,126,175,195, 78, 63,103,120,116,192,226, 44, 38,234,244,169, 85,140,211, 49,139,178, 98,
-231,242, 62, 95,253,122,206,209,225, 17, 74, 75, 62,249,228, 14, 31,223,249,136, 65,183, 75, 81, 54,244, 54, 54, 24, 77, 39, 24,
-235,216,142, 18,174, 93,185,194,157,251, 15,120,248,240, 33,253, 94,207, 11,158, 44, 62,184, 38,203, 56, 59, 57, 33, 78, 52, 58,
- 78,152, 45, 22,148,243, 9,243,209, 49,229,102,135,157,126, 70, 30, 41,138,166, 36, 78, 18,175, 29,136, 34,102,211, 49, 78,106,
-178,110,135,198,150,244, 6, 61,148, 86, 62, 81,206, 57,180, 84,212, 69,197,209,193, 17,121,191,207,246,246, 14, 72,205,104, 52,
-198, 52,134,237,173, 29,250,157,196,223, 19,117, 67,156,229,126,252, 11,124,238,229, 23,217,252,211, 31,114,114,112, 70, 30, 71,
- 84,166, 1, 36,165,146,216,162,162, 78, 52,169, 80,224,188,110, 70,167,241,146,189,174,148,198,214, 53,145, 51, 36, 74, 82, 89,
- 75,109,161,174, 36,182, 22,212,166, 33,113, 13,206,233, 11,147,183, 86,192, 11, 96, 92,131,196, 71,142,218,176, 99, 20,214,199,
-144, 74,214,210, 2,241,250,141, 54,251,196, 52, 22,140, 66, 89,231,215, 64, 58,194, 9, 11,202,128,176,184,196, 65,211, 16, 89,
- 73, 92, 75, 18, 37,145,202,249, 0,159, 52, 2,157,162, 19,141, 83, 37,182,169, 16, 10,164,140,128,144,228,165, 20,104,133, 83,
-222, 67,110,219,180, 68,231,112, 86,130,212,126,204,219, 62, 22,165, 31, 93, 75,169,252,253, 41, 28, 85, 83,179,168,141,143,232,
-149, 18,227,239,224, 0,218,137,169,157,224,209,209, 9,221,193, 54,135, 15,143, 41, 22, 5, 91, 27, 3, 63, 70, 15,140,114,172,
-193,154, 10,103, 35,116,172, 49,141, 37,202,115,132,109,252, 62, 61, 52,117, 50,138, 40,138, 41, 34,142, 16, 90, 97, 28,158, 91,
- 31,156, 68,198,216, 96, 83,107,239,181, 53, 97, 42,226, 41,161,247, 82,232, 42, 61, 18, 54, 10, 41,124, 81,164, 67,162, 91,228,
- 97, 77,193,167, 46, 37,203,140,118,255, 87,216,103,213,246, 31,147, 55,226, 46, 30, 0,132, 8,185,236,145,159, 70, 44,139,122,
-235, 4,108, 51,210,197,138,238,214, 30, 70, 90, 64,140,120,162,202,184, 31,223,204,124,154,152,239, 89,211, 76,231,158, 96,121,
-240,116,247,254,164, 32,112,125,178,224,214,232,157, 38,164,211, 53,141, 65, 87,141, 65,181,254, 98,185,202, 48, 23, 86, 32,164,
-241,234,101,235,133, 3,203,128, 23,107,195, 55, 78,240, 14,138,229,159,105, 71, 49, 82, 6,218, 81,123, 80,112,172,246,239,194,
-219, 78,158,252, 70,151,106,119, 39,158, 56, 9, 62, 1,192, 23,238,194, 8,230,226, 67, 95,114, 49,240,123, 53,146,201,210,140,
-225,135,119,216,232,105,170, 69,133, 82, 25, 89,127, 19,103, 29,253, 78,194,245,155, 87,153, 78,135, 60,126,248, 9, 14, 71, 85,
- 22, 94,220,133,225,115,159,251, 28,143, 31, 61,162, 42, 75,108, 85,147, 72,159, 7,156,119, 58, 68,105, 7,161, 21,253,237,203,
-204,230, 51,230,181,193, 54,134,162,172,153, 77, 71, 84,101,197,238,118,159,199,143, 63, 97, 99, 99,128,115, 21, 59,187, 27, 76,
-167, 83,122,131, 13, 6, 91,219,124,255,135,223,227,234,141, 27, 28, 29,157,240,249,159,120,133,241,232, 46,105,150,241,225, 71,
-119,184,245,220, 45, 62,120,231, 45,138,178,164, 42,253,131,244,253, 15,111,243,252,231,239, 3, 63, 75,158,119,152, 79,103, 84,
-229,140, 69, 53,103, 56, 30, 49,154,206,217,249,210,231,216,189,244, 28,231,103, 83,204,188, 65,210,132,211,151,255,249, 91, 7,
-199,167,103,196, 89,202,230, 70, 31, 97, 22,212, 56,166,181, 31, 81,213,117,181, 2, 36,172, 93,106,226,153, 23,232, 95,109, 4,
-255, 36,101,233, 73,127,167, 88, 79,130, 16,235,211, 22, 46, 40, 76,151,211, 26,231,158,185, 6, 16,194,171, 93, 35,173,113, 13,
- 40, 25,177,152, 45,188,128, 79,119,113,210,103, 1, 68, 81, 70, 36, 28,219, 66, 48,154, 47,120,254,179, 47,177,189,115,153,186,
-241,163,221, 56,246,167,226,195,195, 67, 78,143,142, 73,179,132,110, 64,172,110,108,108,176,185,177,193, 70,191,135,118, 13,143,
- 30, 60, 96,255,242,140,221, 43,207, 97,117,202,227,179, 33, 50, 73,217,217,217, 69, 73,137,105,106,138,197,148, 52,209,116,179,
-132,249,108,206,193,227, 67, 58,105, 70, 81, 84, 40, 89, 48,159, 79,113,174, 33,141, 21, 31,222,185,199,205,155, 55,184,122,245,
- 26,105,154,122,108,166,242, 2, 46,154,154,243,115,199,209,227, 9,135, 7,143,176,213,140,243, 3,248,204,141,203,100, 81, 68,
- 89,150, 60,247,220, 45, 18, 4,102, 50,162,167, 99,166,227, 51,192,144, 37,154,222,181,203, 76, 39, 83, 14, 31, 31,210,237,245,
-217,236,245, 25,143, 39, 28,159,159, 18,105,205,195, 7, 15, 56, 62, 57, 35, 75, 19, 52,150,205, 94,134,116,134,126,127, 64,218,
-233,241,181,111,254, 52, 63,241,141,175,243,195,239,125,151,121,237,109, 97,165,177,100, 6, 42,231,232, 72,205,184,105,216, 20,
-146,133, 49,100, 82,133, 76, 8,223,101,106, 37,131,181, 76,210,246, 28,145,244,244,188,202,192,188,118,228, 13,164,181,161,169,
- 42, 26,180,231, 85,104,237,141,107, 54,232,103, 2, 3, 29, 39, 49,182, 1,137,231, 93, 24,139,148, 22, 43,236,178,192,200,208,
-221, 75, 33,113,198,208,216,134,166, 22, 80,148,129,128,151, 16,197, 21,153,241, 57, 9,117,221,128,105,136,140,163,108, 26,166,
- 69,137, 43,102,216,186, 36,235,196,108, 95,222, 97,103,103,203,187,129,172,163,158, 22, 84,205,196,211,215, 54, 59, 68,221, 30,
-116, 37, 34, 2, 17,123,150,130,107, 59,146,198,248,183,150,173, 97, 5, 77,237, 87, 23,126,207,107, 17,194, 80, 25,139,142, 3,
- 84, 73,105, 44,214,231, 33,160, 80, 34,226,189,219, 31,210, 56,129,116,126, 50,163,164, 36,203,114, 76,211,208,233,246, 60,255,
-188,174,201,226, 24,211,212,204,138, 57,162,147, 35,147, 24, 81, 58,180, 80, 52,172,208,205,141,131, 88, 71, 88, 60, 11, 95,172,
- 77,198, 76, 99,151,112, 49,214,152,250, 79,238,144,151, 58,152, 54,129, 77,249,130, 30,135, 32,146,184,141, 91,141,252,120,220,
-191,175, 86,208,151,165, 54, 76, 92, 20, 59,179, 54, 49, 20,226,137, 49,246,211, 65, 99,109, 17,116,106, 77, 48,169, 91,122,159,
- 11, 63,103,121, 17, 96,182,238, 73, 95,195,208,138, 39, 28, 53,207,226,186,127,218,196,224,199,218,220,220,106,109,108,157,123,
- 66, 54,207,133,110,124, 9,248,122,226,185,231, 1, 64,102,201,215,215, 85,101, 9, 7,222, 0,134,247, 30,184,150,222,230, 5,
- 42, 94,240, 36, 77, 0,208,180,167, 32,105, 47, 72,239, 47,218,224,228, 82, 57,216,238, 94,124, 49,246, 31,171,132, 93,123, 64,
-139,149,240,205,173, 94,208, 86, 56,208, 42, 63,219, 17,188,104,125,201,110,245,199, 5, 23,131, 27, 46,238,127,130,208, 79, 71,
- 44,230,115, 20,158,222, 52, 43, 42,250,121,159, 94,167,203, 64, 11, 18,165, 24,149, 37,243,233,132,126, 55,163,110, 74,146, 52,
-227,198,141,107,124,252,201, 93,164, 20, 76,134,231, 20, 69, 73,156,118,216,222,187, 74,154, 86,156, 28, 28,243,224,225, 67, 94,
-122,249, 37,146, 52, 70, 41, 73, 93,150, 76,134, 67,174, 93,189,201,241,129,100,120, 62,229,165,151, 62,203,123,239,189,133,165,
- 98, 92,140,209, 58,163,187,209,227,209,225, 1, 47,190,240, 89, 38,147, 5, 87,175, 60, 71,146,116,216,191,188,207,189,187, 31,
-145,191,221,231,197,207,188,192,193,221, 59,228,121,202,217,124, 78, 89, 27,172, 53, 12,207,135, 52,139,138, 78,154,114, 58,153,
- 32, 99,133,117, 13, 39,231, 39, 60, 58, 56, 32,202, 94, 33,206,122,236,238, 94,162, 25,142,225,228,204,143, 34,105, 16,141,165,
-211,219, 32, 78,124, 6,249,246,246, 22,103,247, 62,100, 94, 27, 68,150,251, 16,131,198,143,250,108,136,129,108, 49,173,235, 60,
-247,191, 10,235,248,175, 55,153, 90,243, 31,175, 17,230,214, 89,207,127,213,147,123, 20, 69,216,166,225,232,209, 99,222,126,253,
- 61,226, 40, 99, 58, 29,113, 62, 62,163,223,189,132, 64, 97, 26,133,173, 36,131,205, 61,146, 62,236, 93,185, 70, 85, 90,154,106,
- 78, 85,142,137, 35,199,181, 27,207,113,114,114,198, 15, 95,253, 62, 91,155, 3,175,216,142, 35,118,118,182,232,166, 25,155,155,
- 91,244,250,125, 78, 78,135,156,205,224,149,157, 91,104,161,217,223,189,204,224,210,142, 7,176,204, 38, 92,187,114,153, 72, 43,
- 6,121,202,254,246, 38,239,126,112,143, 52,233,146,165, 41,231, 39, 39,216,166, 98,123,103, 19, 37, 29, 91, 91, 27,196,113,206,
-193,193, 99,202,173, 45,122,221,156,188,147, 50,157, 77, 72, 84, 77,154, 40,122,217, 54,253, 94,204,195,251, 61,180, 4,170, 57,
-145,176,108,108,110,241,230, 59,111,179, 53, 47,217,239, 15, 80, 82,178,152,141,233,246, 7, 84,179, 17,206,198,212, 8,186, 89,
- 70,189,209,227,228,248, 4, 37, 21,253,222, 96,169,214,159, 79,253,155,176, 57,166,156,147, 48,240,201, 99, 56,100,149,128,176,
- 92,186,188,199,207,252,234,175,242,157,255,240,109,226, 72,135,112, 20,144,206,119,220, 37, 14, 19,107,230,133, 97, 16,197, 62,
-199,220, 58,104,204, 42,157,209,121,129, 93,229, 44,145,131, 60,210,212,214, 48,169, 29,105,101, 73, 42, 16,113,131, 81, 13, 66,
- 58,255, 12, 10, 15, 90, 99, 26,148,210,152,186, 21,105,249,124,105, 39, 88, 10,207, 28, 38,172, 22, 87, 96, 42,165,212, 50,107,
-219,186,134,186,174,189,207, 89,107,106,165,104, 38, 49,115,165,136,172,197,149, 37,118, 58,167, 25,143,105, 70, 35,204, 98,140,
-116, 13, 73, 39,226,100,183, 75,245,153,231,217,220,218,162,169,107,206, 79, 78, 40,103, 51,159, 9,223,237,208,221,222,166,187,
-123,137,120, 99, 11,213,239, 33,178, 20,161,180,159, 90, 26,227, 71,239, 85,129,171,188, 98, 29, 2, 61, 13,137,210, 30, 18,175,
-163, 4,165, 98, 63,117,136, 34,140,169,145, 82,161, 85,204,163, 71,135,156,158,143,232, 14,182, 25,158,143,160,241,207,237, 60,
-239,112,116,124,204,222,222, 37, 30, 62,120, 72, 28,105, 22,243, 57, 81,154, 49, 91,204,217,220,223,243,133,174,165, 58,138, 80,
- 80,132,247,169,171, 72, 99,132,223,167, 27,227, 2,198,219,239,109,133,116, 75,209,107, 75,195,123,178,155,108, 9,163, 42,164,
- 46,250,188,116, 69, 20,251, 48,161, 54, 97,172,101,197,171,144, 13,208,142, 80,172, 93, 89,188,158,181,144,118,159, 18, 40,182,
-158, 57,225,214,187, 91, 21,162, 73,173, 92,139,181,118, 97,133, 19,194,103,108,224, 6, 60,107, 52,176, 62,130, 23, 60,179, 65,
-121,178,144,255,216, 26,126, 97,159,206, 5,145,241, 69,189, 88,120, 22, 6, 59,230, 42,176, 70,248, 53,120, 88, 43,121,188,186,
-127,141,106, 99,209,117,221, 96,140, 90, 27,151,216, 0,135,183, 33,134,117,181, 23,145,225,102, 90,118,227,235, 24,206, 39, 50,
-215,219,192,251,245,177,193,122,152,189,146,161,195, 95, 55,217, 47,145,162,110,169,116,111, 73, 57,171, 29,188, 11,167,241,149,
- 1,114, 61, 20,246, 89, 3, 99, 33,124,151,208,212,158,168, 52, 30, 85,244,246,188,210, 51,239,244,152,207,231,228,123, 9,194,
- 24,122,157,174, 39, 57, 41,137, 49, 6, 29,105,198,147, 17,231,195,115,110, 92,191, 78, 30,199,140,134, 67, 78,207,199, 20,139,
- 5,121,167,131, 49,135,212,101,197,116, 52, 38,142, 54, 25,143, 71,212,101,193,102,191, 79, 93,148,140,199, 5, 95,254,210, 87,
-120,251,173,215,233,246,186,244, 55, 59, 32, 35, 30, 62, 58,231,254,251, 31,145,100, 17, 91,189, 30,199,199, 67, 94,249,230,207,
-211, 52,142,247,111,127,192, 55,191,254,101,162,110,143, 94, 18, 49, 28,141,168, 5, 20, 65,163,105,157,227,236,236, 12,225, 32,
-138, 34, 63, 90,108, 74,142,142, 15, 80, 58,103, 52,153, 80,154,134,193,214,128,225,105, 68,199, 36,104, 21,148,239,194, 43,108,
-139, 69,193,201,241, 25, 81,164, 48,206,210,219, 28,176, 37, 51, 30, 79, 74,166,211,169,215,244,200, 39, 20,158, 75,188,204,255,
-127,255,121,194, 22,250,148,111,243,153,133,253,201, 27,206, 58,166,147, 49,111,189,241, 22,243, 89,197, 98, 94,210,235,117,216,
-219,217, 68,106,193,100, 58, 67, 52, 18,165,114,202,218,145,247,251, 52,141,225,248,248,152,210, 52, 68, 73, 77,150, 71,232,164,
-203,139, 47,127,142,243,225,144,183,223,120,141,205,126, 23,209, 73,121,120,255, 30, 89,156,114,124,116,198,141, 23, 94, 98,251,
-202,103,232,109,236,114,255,112, 68, 20,151, 36,177,162,172, 23, 92,185,118,149,180,147, 51, 61, 59, 13, 19, 2,127,163,166,105,
- 70,180,155, 81, 22, 5,157,110, 23,211, 44,152,207,167, 72, 12, 82,150, 94,251,209,235,241,248,209, 3,138, 98,202,139,159,253,
- 12, 91,253, 28,209,204,152,143, 70, 44,138,138,141,222, 6,238,242, 30, 90, 72,178, 72, 48, 29, 14, 33,138,249,226,151, 95, 97,
-119,107,128, 86, 2, 83,150,152,166,130,166,164, 42,231,152, 38,246,127, 95, 85,178,189,217,103,107,208,231,224,241, 33,101, 49,
- 39, 75, 99,166,179, 25,166,170,188, 3,193, 25,146, 36, 70, 75, 65, 93,206, 56,126, 60,100,107,111,143, 81,189,192, 22, 99,250,
- 27, 27,220,188,126,133,111,124,245, 39,120,253,222, 1,139,186,102, 32, 19,166,182,194, 58,199, 68,212, 36,214, 81,133,135,110,
-131,207,158, 55,198, 19,232, 26,107,209, 82, 82, 10,207, 8, 23,206, 18, 43, 77,209, 52,140,139,154,222, 2,108, 44,105,116,140,
-144,208, 24,185,180,158,181,235,193, 54,120,166, 69, 74,138,128,178,118,214,250,142, 87,201, 37,162,212,218, 21,171,220, 52, 53,
-166,153,211,148, 37,206, 26, 79,158,195, 49,179,150,217,104, 76,125, 52,161, 30, 78,169,198, 83,220,124, 78,236, 12,145,176,164,
-169, 96, 99, 51,194, 30, 75,212,217, 67, 78,251, 3, 76, 99, 40,231, 11, 98,169, 73,163,152, 70,103, 44,210, 7,156,228, 29,162,
-141, 45,242,221,109,242,173, 45,146, 94, 7,221,233, 64,164, 17,174,193, 84, 5,214, 6,255,180,142,130,198, 32,116,205,149, 35,
-142, 83,207, 79,211, 49, 14,207,237, 23, 8,234, 69,197,189, 59,159, 96, 67, 72,213,232,240,156,249,120, 74,154,102, 88,103,137,
-226, 4, 99,253, 3, 63,137,227, 0,194,242,118,208, 78,191, 79,221,142,113,195,189, 38,149,164,105, 26, 47,154,148, 42,248,161,
- 45, 24, 71,211,248,169,133, 31,189,235, 0, 9,147, 33, 93,243, 98,103, 44,150, 98, 46,175,125,104,209,178,177,110, 59,116, 77,
-164,189, 40, 78,201,150,137, 18,200,114,174, 29, 47,251,151, 82, 60,235,192,143,123,102, 19,192,143, 41,240, 66, 8,159,212, 40,
-236,234,247, 60,248, 98,201, 96,247,211,100,241,169,253, 66, 59,206, 23,252,120,248,204,179,166,143, 79, 47, 48,215, 82, 47,215,
- 58,245, 11, 19,137, 39,186,114,156, 11, 65, 53, 62, 37,207,186, 96,235,172, 13,101, 89, 82, 85,134,186,105,168,235, 6, 93,213,
- 30,180, 64,128,207,172,119,215, 74,136, 37, 81,110,245, 13,177,242, 3,139, 85,113,111,199,246,170, 45,224,178, 45,254,114,217,
-197,175,211,231,228, 90,108,222,122, 55,189,250,161, 60, 61, 18, 89,122,253,172,187,160, 80, 20,235,136, 90,231,150, 54, 44, 17,
-130, 25, 86, 22,130,134, 89, 49, 37,221,212,140,138,134,233, 28,146, 40, 65,201,148,211,225,132,198, 53,136, 72,208,217,216, 12,
- 99, 59, 65, 83,149, 60,126,116,198,205,235, 55,176,174, 97, 81, 45,168,108, 77,217,148,220,189,243, 33,157,222, 22,221, 88,179,
-187,183, 71,109,193,138,152, 89, 97,249,204,173,207,128, 41,153, 14, 79,201,122, 17,175,189,249, 42, 89,156,162,147, 20, 39, 52,
-239,191,119,155,189,205,109, 94,249,210, 23,248,236, 23, 62,207,255,243,255,250,127,231,231,127,250, 23, 40,203, 25,184,154,235,
-151,247,249,179, 63,249, 22,131, 75,251,252,222,239,253, 54, 78, 41,156,105,188,226,213,121,223,103,156,104,206, 71, 99, 68,156,
-251,192,150,208, 41, 77,139,154,186, 42, 73,243,156,253, 65,202,105,172, 25,107,127, 49, 72,106,111,203, 80, 17,210, 57, 78,142,
- 30,162,116, 8,144, 80, 17,163,197, 25,187, 91, 59,212,118, 14, 74, 34,131, 51,225,162,246,245,233,155,237,211,119,232, 65,228,
-184,126,131,173,135, 1, 5,160,197,250,190,168,101,253,171,214,230, 22, 20,182, 74, 11,143, 83, 77, 34, 34,173,151, 93,141,183,
-164,132, 45,156, 16,254,215, 1,217, 58, 58,122,196,191,250,103,255, 15, 54, 58,155,228,221, 28, 65, 67, 81, 84,236,110,238,115,
- 94, 54, 76, 23, 99, 34, 37,216, 76,186, 8, 33, 57, 59,122, 64, 83, 7, 10, 87, 39, 67,187, 62,105, 63,101,107,179,207, 79,126,
-243,155, 36,121,135,199, 15, 31,179,185,179,237, 19,208, 74,131,213,154, 91, 95,253, 38, 55,111,220,162, 56, 27,115,244,232, 33,
-166,154, 18, 13,186, 84, 83,199,248,228,140,238,214, 22,221,205, 75,222, 91,111, 45,211,201,152,110,167,203,116, 50,162,169, 22,
- 12, 71,103, 60,126,252,136, 78,167,195,245,235,215,217,238,119,185,121,181,135,142, 4, 81, 26, 83, 86, 21,103,199, 39, 92,218,
-223,102, 99,163,135,169, 74, 68,221,208,177, 13,143, 70, 67, 14,199, 19,242, 52,229,198,238, 46, 90,123, 59, 87, 89,150,100, 27,
- 3,164,210, 44, 22, 11,198, 69, 69,191,219, 69,162, 40,231, 53,186, 23,133,135,169, 33, 75, 37,231,167, 67,164,204,185,190,191,
-139,180,142,106,190,240,227,211, 72, 82,215, 53,189, 60,166,104,230,184,102,142, 35, 66, 19, 83,205,103,228,177,226, 55,126,229,
-103,121,243,163,143,121,253,221, 59,204,155,146, 26,111,133, 45, 42,152,162, 57,179,134, 65,164,160,110, 16, 66,178,192,162, 35,
-137,171, 33,113,146,153,115,204,241, 88,225, 28,136,132,163, 40, 97, 54, 83, 36,137,194,197,198,211,204,140, 65, 59,208, 2,164,
-112, 72,103,144, 78,130,177, 56,209, 96,141, 8,170,112,233, 31,210,182,241,250, 12,169,124, 66,154, 5,179,124, 70,249,189,105,
-211, 24,154,197,130,114, 52, 97,122,114,194,228,116,200,252,124, 66, 61,171,113,141, 64, 33, 72,132, 32,195,146, 56, 75, 37,160,
- 25, 87,212,155, 2,230, 53,139,238, 25, 66, 7,114, 93,156, 82, 56,137, 54, 49,206, 65, 93, 53,160, 20, 38,150,200,110,138,238,
-229,116, 46, 95,161,179,127,153,205,173, 1, 89, 39, 69,104, 65,156,229,225,235,212, 96,189, 56,185,118,142,134,208,241,106, 63,
- 93,240,170,125,197,221,187,247, 40,107,160, 19, 33,148,196,212, 37,197, 98,198,214,206, 22,211,249,130,110, 39, 99, 49,157,160,
-165,160, 44,203,165,136, 42,221,200,137,178,132, 58,132,225,248, 36, 59,175, 79,104,234, 18, 39, 53, 78,121, 82,167,176,198, 39,
-217,153,136,218, 52,136,198, 55, 89, 42, 52, 74,222, 31, 93, 47,189,245, 82, 58,148, 0, 84, 32,198, 41, 69,172, 34,226, 72,134,
- 98,238, 59,244, 54, 78, 85, 4,182,187, 12, 28, 10,175,199, 90, 5,247, 32, 86,228,184, 37, 47,176,197,183, 94,104,225,196, 74,
- 56,189,156,232,186, 37,183,100,249,220,106,169,132, 75, 55,149, 67,216,246,179,123, 71,129, 13, 30,138, 11,246,115,119, 17,126,
-243,172,117,223,167, 30, 46,158, 60, 28, 56,177,202, 56, 17,225,123, 89, 87,143, 11,183, 22,158, 33,150, 99,121,159,200,215, 96,
-141,164, 9,126,209,198, 88,234,186,161,168, 12,101,109,168,106,235, 69,158,101,213, 32,149, 88,141,223,215, 5, 14, 98, 13,167,
- 23,186,112, 88, 21, 83,183, 86,212,101,136, 30,212,203,152,195,192,213, 13, 85, 87, 46, 19,112,218,206,126, 37,162, 91,177,157,
-151, 92,165,229, 79, 84,240,244, 94, 67, 62,131, 96,183, 44,240,171, 40,229,229,235, 32, 3, 38,180,155,166,161, 51,133, 40,137,
-137,103, 53,157, 52,163,219,233,146,208, 80, 53,134,241,116,206,230,246, 37,134,103, 71,116, 98,197,108, 92,209, 73, 59, 8, 20,
-179,233, 57, 39,103, 39,220,184,121, 19, 35, 20, 90,231,220,249,248, 46,159,251,194,151,153, 55, 13,198,249, 2,179,181,187, 79,
-213, 56,108, 85,113,122,118,138,144,150,126, 63,103,179,183,205,227,195, 71,196,249, 54,207,221,186, 78, 47,206,185,253,193,123,
-188,123,251, 3,126,250,149,111,242,218,155, 63,228,171, 63,249, 83,124,120,239, 35,186,105, 78,167,211, 35,214, 17,113,146, 82,
- 27, 11, 74,162, 26,159,116, 36,133, 96, 62,159, 17, 37, 26,161,162, 48,253, 0,173, 35,156, 19, 52,101,197,233,233, 25,145,107,
-216,236,245, 56, 24, 77,188, 14,194,129, 16,138, 74, 42, 68, 99,168,235, 57, 8,135,214,154,227,163, 49,103,195, 33, 73,218,103,
-115,167, 71, 99, 10, 15,118,129,255,225,166,142,139,231,179,139,197, 93,132,140,224,245,132,182, 96,213,104,109,109,173, 32,170,
- 45,234,137, 82, 36,113, 76,146, 36, 68, 1, 49,185,124, 8,172,188, 55, 97,125,227,104,102, 83,134,199,135, 28, 31, 28,113,227,
-234, 85,122,221, 28, 44, 84, 85,141, 84,154, 94,191,207,104, 60,228,116, 56,102,171,223, 33,150,142, 98,177, 0,169, 41,230, 17,
-231,167, 39,164,221,156,188,211, 71, 38, 29, 94,120,249,139,252,202,175,253,118,176,123,157,113,112,239, 1, 86,194,112, 60,163,
-123,114, 74, 63,138, 16, 52, 76,199, 19,178,216,122,145,105,153, 83, 78, 20,105,127,131,166, 54,164,131, 62, 59,253, 62,213,120,
- 76,175,147,208, 84, 5,219, 91, 27,140, 70, 67, 78,207, 70,108,110,239,211,137,107,164,242, 9, 83, 69, 9,113,146,251,125,105,
-146, 80, 84, 13, 89,183, 67,108, 28,162,174,233,118, 58,124,124,124,138,149,154,178,113, 72, 87,163,180,239,148,202, 98, 65,183,
-215,243,246, 29,173,208, 81,140, 48, 80,153,154, 69, 93,161, 83, 15, 76,217,216,217, 36,205, 99, 78,207,134, 84,197,140,231,111,
- 92,227,242,254, 21,166, 85,193,108, 54,225,248,225, 67,202,178, 36, 78, 83, 36,144,103, 49,166,105, 80,218,145,198, 49, 87, 47,
-237,242,159,252,218,223,224,133, 27, 31,240,167,175,190,193,189,195, 19,132,118, 52, 53,156,227, 21,212,113, 28, 99, 10, 71, 55,
- 86,212,162,193, 56,239, 11,142,129, 72, 41, 10,103,105, 2, 42, 85, 57, 63, 22,158,206, 28, 89,218,160, 50,137, 80, 2, 39, 29,
- 85,227,173, 95, 82,123, 63,177, 31, 81, 46,151,211, 30, 45,107, 27, 84,152,208,217, 0,121,241,246, 55,141, 49, 53,214,249, 67,
-161, 78,123,100, 34,102, 90, 11,106, 59,167,113, 49,184,132, 56,113,244,186, 29,226,164,131,148, 26,211, 52,184, 98,129,173,230,
-148,245, 2, 99,107,202, 97,205,180,170,201,114, 67,148, 4,142,188, 40,136,147, 4, 33, 74, 34, 33,201,117, 76, 55,143, 72,148,
-198, 24,193,238, 96,155,189,235, 55, 73,247,118,200, 58, 25, 66, 11, 42, 83,249,107, 92,233,160, 55,208,212,149, 89, 50,194,189,
- 34,188, 9,207, 96,205,120, 56,229,224,248,148, 56,239,162,123,221, 37,196, 72, 71,154,188,211,165,156, 79,201,211,148,225,201,
- 49, 82, 64,217, 52, 24, 7, 58, 73,200,186, 29, 84, 20, 65,211, 98,119,252,195, 82, 40, 29,236,174, 62,176,196,135, 52,249,206,
-182, 17,146,198, 72, 68,227,191, 71,237, 2, 72,202, 58,207,138,112,118,109,212,237,237,203,126,228, 30, 17, 71, 49, 73, 36,194,
-254,124, 5,248, 89,165, 51,202,101, 67,232,195,184,220,114,237,235,214,129, 47,226, 73, 67,237,133,205,237, 19,138,120,177,246,
-177,114, 53,210, 94, 51, 79, 9,111,129, 95, 29, 11, 90, 38,128,120,106,161,189,110, 50,255,255,249, 31,233, 4,110, 61,178, 92,
- 56,158, 9,128, 95,219,221,183, 49,213, 34, 76,173, 77, 99, 48, 56,234,218, 80, 53, 13, 85,221, 80,215,190, 83,183,214,160,203,
-198,162,108,235, 83, 95, 47,186,171,113,187, 88, 31,183,179,190,223, 92,219,175,135,194, 93,183, 93,248,178,168,203,149, 79, 93,
-172,198, 24,106, 45, 27,253,162, 0, 97, 21,207,249, 36,166,207,127, 93,173,119, 84, 92, 76, 99, 91, 83,226,183, 30, 74,183,214,
-193, 75, 9, 89,146,248, 27, 44, 73,161, 42,137,149, 64, 9,199,253,251,159,176,255,194, 46, 78, 58,158,219,191,194, 71,119, 63,
- 6, 98,132, 86,108,239,108,114,255,225, 9, 89, 83,177,191,191,207,222,165, 61, 38,147, 9,123,187,123,228,221, 77,116,220,225,
-225,227,135,220,188,114,137,199,199,231,148,243, 41, 87,174, 94,103,120,126, 66,181, 88,176,168, 26,166,211, 41,199,135,199, 12,
-186, 39,116,122, 29,246, 46, 93,230,241,227, 7,116, 7,125,162, 88,179,127,249, 26,239,125,124,155,211,225, 57,223,253,222,159,
-177,119,229, 42,121,183,203,116, 60, 99,111,239, 18, 81, 20, 81, 91, 75, 26,107,108, 8,175, 17, 66,146,103, 41,163,243,211,149,
-215,213, 89,172,245,164,170,197,108, 78, 83,123,202,208,108,182,160, 40, 42,154,160,172, 21, 50, 80,183,108, 21,110, 66,111,221,
- 25,141,103, 52,141, 37, 75,115,178, 44, 97, 60, 41, 46,236,119,254, 99,122, 53,219, 98,173,149, 34,142,162,176, 99,211, 23, 10,
-187,146, 42, 68, 52,134,130,175, 5,177, 10, 10,218, 36, 33,138, 19,148, 86,107, 26, 10, 95,200, 5, 62,249,175,156, 78,248,151,
-255,252, 95,112,237,250,117, 62,254,240, 14,111,188,241, 35,190,248,249,151,185,118,101, 63,216,184,198, 76,199, 99,164,138,152,
- 76,198,116,179, 20, 99, 42,178, 52,166,168, 74, 36, 6,219, 72, 70,103, 21,143, 31,159, 48,173, 12,191,240, 43,191,198,214,238,
- 37,206, 71, 19, 22,198, 49,109, 42,138,233,148,108,146,112,119, 58,101,103,119, 27,155, 72, 22,231, 11,202,137,196,106, 75, 53,
-143, 49,182,162, 49, 5,147,249,130,230, 0,118,118,119,104, 74,195,201,241, 49,121,154, 16, 73,193,238, 55,190,193,131,135, 7,
- 28, 28,157,178,211,237, 6,123,169,161,110,106,108,227, 72,211, 20,172, 35,141, 83,154,198,162, 54, 4,103, 71, 39, 84, 77, 67,
-150,117, 88, 44, 10,191, 82,210,130, 88,121, 49,154,146, 80,204,167, 68,113,140,116,254,247, 85, 18,145,200, 4,131,165, 9,226,
-179,218, 24, 68,214, 33,237, 84, 20,211, 57,179,233, 24, 25,165, 36,177, 66,233, 30, 59,131,151,136, 36,204,166, 35,138,249,156,
-249,172,100,111,127,131, 52,239, 82, 25,203,198,214, 54, 63,243,213,175,176,191,177,201,115,251,251,188,243,209, 29,126,244,238,
- 7, 28, 12,199, 52, 66,114, 62, 47, 80,101, 77,220, 30,178,133, 90, 58,104, 44, 22,225,132,199, 39, 24,139,210, 17,166, 49, 62,
-202,184,177, 20,243,138,184,227,208, 74,120, 55, 85, 99, 64,121, 69,252,114,173,219,122,141,195,168,210,227,224,205,154,168,201,
-143,246,173,243,169, 87, 62,153, 55,246, 73,108,202,145,111,108,147,230,125,118,247, 43,234,217,130,197,120,138,182,138, 60,235,
-161,146,132,193,230, 38,105, 28, 17,107,135,107, 74,220,124,134,153, 77,208,210, 97, 77, 65,158,199,104, 29, 17,197, 9, 73,214,
- 65, 71,130, 44,142,176,101,137, 4,202,186, 36, 29,116,216,187,118,133,120,187,139,205,124,128,140,144,130, 40,242, 2, 72,130,
- 58,222, 6, 52,108, 59,150, 22, 64, 93, 87,196,113,194,108, 94,112,239,225, 33, 34, 74,137,210,156, 94,127,147,251,159,124, 66,
-221, 24,146, 36, 37, 73, 18, 48,141, 79,248,115,190,123, 42,234, 5, 66, 43,116,154,146,182,233,131, 33, 40,169,157,178, 42,165,
-252,179, 59,136,219,214, 15,225,198, 24,170, 58,236,216,173,165, 49,106, 57, 90,174, 27,191,207,109,167,117,126, 45, 18,138,120,
-240,159,199,177,159,246,232,245,136,213,240,113, 23,158,223, 75, 90,160,193,218, 16,222, 19,120, 21,159,246,236,105,167,198, 23,
-167,133,173, 35,107,117,224,147, 79,137,118, 87,211,222,118, 50,188,194,197,174,125,172,112, 79,215,221,191,134, 54,232,194,251,
-238,175,246,137,150,202,125, 9, 90,203,112,102,241, 76, 1,107,188,158,170,118,150,170,246,194, 56,143,216,246,207, 9, 39, 28,
-186,110, 12, 54,164,252,248, 83,147, 11,105,108,107,251, 3,187,150,143,190, 38, 96, 82,172,197,174,178, 18,206,181,187,120,191,
- 95,105, 59, 51,123,225,207, 10,231,158,218, 77,136,139,166,245,181,221,234,197, 9,194,147,211,131, 85,130,147,135,227, 8,225,
-150,120,114, 63,118,243, 95,119,222,233,114,229,242, 62,143, 30,222,227,234,206, 54,135,231,231,104, 45,217,216,232, 82, 53, 5,
-221, 94,151,195,131,199, 28, 29,159,242,171,191,240,211,220,126,239, 29,172,115,116, 54,123, 62,222, 51, 74,249,139,239,255, 57,
-253, 65,159, 91,159,121, 25, 21, 37,108,110,111, 49, 28,141, 57, 61,122,196,205, 43,215,121,227,157, 15,121,241,249,231,249,139,
-247,223, 99,103,107,131, 52,203,105,202,130, 47,190,252, 18, 56,120,248,248,128, 31,188,246, 35,110, 61,247, 28,127,241,195,215,
- 25,143, 70,140,171,134,203,123,151,184,121,235, 57,190,255,250,235, 84,101,197,251,183,111, 51,155,205,249,194,151,190,204,217,
-104,136, 20,146,178,172,125,216,129, 16, 52,214,114,255,193,125,222,122,231, 13,127,138,199,123,235,133,107, 72,147,152,186, 42,
-153, 78,231, 44,230,133,255,115,214,195,120,164,240, 2, 28,143,250,130, 56,210,204,139,146,147,211,115,162, 56,241,167, 87,233,
- 99, 10, 89, 63, 81,254, 71, 42,234, 98,169,203,144,203,124,224, 40,210,196,137, 63,213,235,200, 23,247,245,162,190,126,186,111,
-179,181,147, 36, 37,138, 34,148,246,217,198,237, 3, 81, 58,239,206,168,202,130,239,126,251, 91, 60,122,248,136, 76, 71,124,254,
-115,159,227,228,228,136,195,163, 67,146, 72,113,237,234, 85,146, 52,229,244,244, 20, 83,212, 52, 70,144,229, 61, 30,221,251,144,
- 27,215,246, 73, 34, 73, 81, 22, 84, 69, 77, 81, 41,140,147,148,243,146, 78, 18, 51, 30,158, 97,140,161,174, 11,146, 78,202,157,
- 15,222,231, 82,183,143,114, 27,140,243,136, 44, 79,200,210,148,106, 94, 48, 77, 4, 81,167,131, 22,146,133,177, 24,225,175, 67,
-173, 4,181,173,105,202,130,209,249, 57, 73,156,176,177,153,208,205, 50,132, 51,124,120,251, 54, 55,246,183,217,216,204, 81, 1,
- 78, 98,170,154, 98, 62, 71, 71,146, 52, 75, 65, 43,250, 59, 91, 60, 28, 78, 88,204, 23, 44,230, 37, 39,103,103, 36, 91, 57,177,
-138,168, 49, 88,167,168,107,203, 98, 33, 24, 12, 6, 76,166, 37, 82, 40,132,210,116,250,126, 18,100,173, 35,235,118, 61,114,210,
- 84,152,178, 68, 1, 58,150,204,102, 83,166,139, 25,187,253, 1,198, 88,180, 78,200,114, 69, 89, 46, 56, 57, 27,114,115,123,143,
- 94,154,115,118,124,202,246,246, 0,201,117, 18,237,115,223, 95,124,238, 22,127,246,198, 27,220, 63, 58,161,168,106,206, 15, 79,
- 72,240,202,239,174,138,112, 77,133,138, 21,182,105,136,165, 38,106,154,144,228,231,119,173, 6, 79, 37, 91, 20,142,184, 48,196,
-177, 37,210, 30,186,226, 66,129,145,194,210, 88,139,116, 45,142, 52, 12, 95,173, 89, 61, 23, 16,254,123, 22,248,223,119, 96, 76,
-229, 83,254,100,179, 18, 37, 73, 48, 74, 32, 59, 41,145,112, 80, 26, 74, 81,250,207, 93,140,105, 68,202, 70,222,163,211,223, 36,
-222,219, 65, 41, 73,172, 0, 83,147, 36, 26,219, 24,210, 44,195, 57, 80,229,130,178, 88, 80,105, 16, 90,146, 95,218, 97,231,234,
- 62,186,155, 65, 2, 66, 25,132, 86,129, 95,166, 16, 45,213,204, 65,211,184,150, 12,186, 36,143, 73, 9,117, 89,112,255,222, 17,
-139,202, 66,146,208,223,217, 70, 72, 77, 93, 86,126, 18,146,166,104,173,113,113,226,187,183,198, 39, 33,214,181, 33,235,118,137,
-242,156, 56,207,189,139,162,241, 41,125,166,181,115,233,176, 95, 14, 93,187, 93, 22,116, 23,138,172,239,204,155,198, 46, 11,114,
- 91,240,173,241, 83, 18,133, 88,118,223,177,214,164,145, 34,141, 86, 96,153, 56,168,220,149,146,203, 3,203, 5,175, 88,187, 54,
-181,109,122,219, 26,138,252,175,144, 93,254,244, 42, 80,172, 14,124,235,163,114, 46,226,174, 47,114,221,197, 5,107,217, 95,187,
- 59, 15,217, 4,114,237,137,105,255, 90, 15,200, 21,180, 39, 10, 77, 79,235,219, 23, 66, 96, 91,235, 90, 24,189, 55, 77,227,217,
- 29,206, 96,157, 63, 8,235, 85, 15, 38,150, 49,151, 88, 48, 34,112,146,221, 42, 95, 86,172,137, 10,218, 45,132, 20, 65, 21,223,
-194, 31, 96,109,247,206,218,104,148,167,138,248,167,165,186,173,139,215,253,231,145, 79,120, 31, 87,187,147,245,189,253,250,126,
-127,213,188,185,176, 26,128,186,177,108,111,111,179,152,143,152, 79,199, 72,107, 24,142,206,216,222,222,162,108, 38,108,232,132,
-162,154,162,100,195,119,190,251, 93,110, 94,222,166,219, 25,208,221,180,148,115,131,138, 98, 62,255,133, 47,177,189,189,201,120,
- 58,103, 54,155,130, 83, 12, 54,186,188,245,250,187,108,110, 12,136, 48,100,145,230,149,175,125,141,110, 47, 99, 52, 60,229,253,
-201, 24,140,163,170, 11,126,254,231,126, 14,221,217,224,143,191,245,199,116,187, 61,126,234, 39,127,146,239,124,239, 85,142, 79,
- 79,120,120,120,128,150,146,166,170,152, 45, 22, 28,157, 15,249,209, 91,111,177,177,189,129, 84, 10, 99,205,106,106, 35, 37, 39,
-167,103, 60,122,124,196,162, 44,151,115,110, 31, 86,224,136, 98, 63,194,158, 76,166,164,105,234, 89,199,129, 14, 39, 90,191, 44,
-142, 44,207, 41, 42, 75, 99, 29, 78, 10,174, 92,187,202,163,199,143,216,218,187,133,115, 38,224, 41,237, 19, 55,206,143,247, 99,
-186, 39,252,162, 79, 90,216,124, 2, 96, 59,146, 11, 5, 61,140,212,227, 56, 38,142,227,101, 81,215,107,227,120,169, 53, 90, 74,
- 52,130, 56,209, 68,113,236,197, 69, 74,133, 81,154, 95,154, 58,219,240,232,147,187,252,219,127,245,223,178,187,179,205,124, 50,
- 67, 72,184,117,235, 51, 88,211, 80, 44,230,124,112,251, 67, 58,157,156,221, 75,251, 60,124,116, 72,222,219, 64,165, 29, 22,181,
-227,254,163, 35,174, 93,217,131,186,162, 92,204, 41, 10, 75,109, 96,127,239, 50,195,163, 7, 24,161,168,194,205,116, 58, 28,162,
-132, 97, 58, 60,229,133, 23,111, 96, 19, 73,154,104, 58,155, 27,148,147, 49,181, 76, 24, 21, 6,234, 5,221,205,148,221,221, 61,
-164, 20, 20, 85,197,124, 58, 65, 9,139,198, 34,154, 10,217, 84,236,110, 14, 16,226, 6, 15, 31, 60, 34,237,228,196, 73,140,173,
- 75,154,166, 38,235,245,209, 74,209,216, 6, 91, 26,175, 45,200, 83,118,118,119,120,240,248,148,163, 71, 7,220,153,143, 25, 29,
- 75, 46,109,245,169,141, 97,123,123,135, 75,151,247, 25,142,198, 68,113, 74,158,101,104,124, 70,248,244,108,232,173, 80, 90, 82,
- 87, 13,105,158,147,229, 29, 92,175, 98,120, 50,100, 50,155, 49, 94,204,105,156,197,246,123, 40, 33,136,147, 24, 23, 71, 97, 84,
- 41,104,234,134, 56, 19,108,108,111,115,120,124,192,254,205, 43,236,236,109, 35, 36, 12,134, 51,182, 6,191,192,247,223,124,155,
- 59, 7, 7, 52,181, 97,124, 54, 2, 99, 61,234,210, 57, 82, 33, 3, 29,205, 4,173, 72,128,145,106, 65,229,124,108,110,209, 56,
-244, 2,146, 12,162, 4,234,186, 14,226, 80,177,150,110,197, 50,134,213, 79, 95, 13,194,133,140,103,188,104,210, 5, 38,185, 8,
-191,182,182, 6, 87,248,144,148, 48,166,247, 22,174, 6, 29, 57,132,180,152,166,193,218,130,106, 54,131,185, 38, 90,228, 68,189,
- 30, 34,141, 49,145,196, 41, 65, 36, 4,166,150, 68, 81,204, 98, 52,199,212, 6,213,212, 56, 9, 73, 55,167,191,183, 69,103,103,
-128,238,164, 84,202,162,195,132,176,193,174, 70,224,248,175,213,107,176, 77,176,143,201,101, 56,146,169, 45,143, 15,142,168, 27,
- 65,141,162,191,181, 77,212,233, 48, 60, 57, 33, 75, 83,134,206,209,217, 24,224,132,160,211,239, 51, 62, 61,161,110,106,148,246,
- 83,176, 56, 73, 80,105,134,206, 50,132,242, 98, 52, 41, 2, 90, 87, 72, 92,235,171,119, 46, 88,239, 4,198,121, 50,159,119, 10,
-180, 8,102,115,161,195,109,139,125, 91, 69,100, 24,189, 39, 73, 76,146,198, 36,105, 20, 10,185,242,226, 56, 45,130,218,125,237,
- 57,205,122,204,246,106,183,238, 39,136,114,181,119, 23, 23, 39,183, 23, 1, 87, 79, 60,159,130,182, 70, 56,150,135, 64,108, 75,
- 27,196,175, 21, 5, 23, 59,245,150, 88,234,214,246,230,225, 95, 27,236,125,106,205, 70,246,108,149,187, 91,170,248,215,131, 86,
- 86, 93,187,120,182, 61,173,109,153, 91,250, 94,232,212,149,112,104,121,241,179, 90, 99,151, 29,250,242,115, 88,139, 14,137,167,
- 90, 46,247,214,171,174,251, 66, 1,191, 96, 11,251,148,111, 97,121, 58, 94, 59,249,132,125, 16,214, 92, 8, 6, 88,118,222,238,
-211,139, 58,242, 98,122, 77,139,124, 92,165,224, 93,140,128, 21, 98,245,119, 44,157, 10, 98,109, 44,135,247,124,142, 70, 19,198,
-211, 57, 90, 69, 84, 14,242, 78,234,147,166,128,110,191, 75, 39,147,100,177,164, 42, 43,110, 60,127,157,162, 88, 48,153, 28, 50,
-157, 23, 96, 35,102,163, 41,179,233, 8,233, 12,215,111,252,127,121,251,175, 39, 75,183, 51,189, 19,251, 45,243,217,109,211,103,
-150,183,199,225, 28,224, 0, 13,160,209,222,136, 61, 36,155,106, 74, 61, 51, 36,131, 23,163, 11, 94, 40,230, 66,250, 7, 20,138,
- 80,255, 17, 10, 93, 72,186, 80, 40,228, 70,156, 17, 53, 28, 14,217,156,110,160, 27,104,160, 97, 15,204,241,167,124,101, 85, 86,
-165,207,220,254,115,107, 45, 93,172,111,155,204,170, 58, 64,147,138, 57, 39,118,100,102,165,223,185,247,247,174,247,125,159,231,
-247, 92,102,156, 23,196,141, 22,113, 28, 16,134,138,131,189,231, 72, 44,135,187,207,120,188,189,141,142, 20,237,118,202,235,175,
-189,201, 15,254,246,175,185,117,235, 58,113, 18, 99,165, 70,203,136,139,155,107,108, 63,124, 68, 85,148, 44,173, 44, 17, 4,154,
-163,189, 35, 66,169,184,176,121,145,219,111,125,137, 43, 91,155,140,198, 99,138,170,244,118,157, 5, 33,199,219,239,124,137, 55,
-222,122,135,247, 63,252, 25,134,250, 96,163, 4,189,254, 41,101,153,145,229,147,217,131, 42, 12, 67,180,210, 51, 34,155,212, 17,
- 82, 88,218,237,174, 87,177, 10,216,216,220,228,105,239,132, 76, 9,202,178,172, 11,186,241,147,143, 95, 1, 2,241,210,120, 93,
-193,217,216, 86,225, 60, 55,121, 42,146, 11, 20, 65,224,139,122, 28,199,196,113, 60, 47,234, 98,142, 67,244,156,102,141,146,126,
- 26, 19, 4,170,238,210,107,177,143, 84,222,150,226, 28,119, 62,120,159,191,250, 31,254, 61,210, 86, 60,217,126,194,230,250, 38,
-206, 24,242,162,162,209, 72,185,120,249, 10,101, 89,242,224,254, 61,210, 36,161,179,180, 76,167,221,161,114,146,147, 81,193,179,
-189, 83, 42, 39, 8,181,164, 18, 1, 97, 34,105, 68, 9,173,102, 74,239,248, 16,169, 20,121,150, 49, 30,143, 65, 5, 44,119, 27,
-216,108,194,201,233, 62,114,164,168,210, 6, 43,221,101, 70,101,197,222,238, 49,205,182, 33, 74, 83, 90,107,155, 68,113, 66,160,
- 4,163, 65, 73, 89,140, 72, 66, 69,178,210, 37, 31, 79,104, 55, 98,114, 11,215,174, 94, 68,105,201,241,225, 1,105,179, 67,154,
- 68, 28, 29, 30,179,187,251,156, 48, 9, 89,219, 90,167, 40, 75, 44, 6, 25,104, 46, 93,190, 72,179,209,161,127,114,196,189,251,
-119, 56, 18,134, 64,223, 98, 99,115,139,206,202, 26, 65,210,224,210,210, 42, 69, 89,130,148,152,178,182, 69,105,197,104, 48, 32,
-110, 52,104, 52,155,168, 64, 35, 8, 72, 26, 13,168, 96, 50,201,153,148, 57, 79,182,119, 60,120, 39,105,160, 36,152,202,160,180,
- 36, 76, 98,226,102,138, 12, 3,108, 94,144,180,219, 88, 91,177,180,177,194,175,255,230,215,185,243,217, 61, 30, 63,122,198, 55,
-222,249, 2, 73, 24,145,151,158,113, 62, 56,233, 83, 72,136,165,170, 71,163,117,188,103, 32,102,113,204,206,248,122,108,133,160,
-168, 96, 50,176,132,169, 67, 5, 22, 41, 43, 66, 93, 18,168,202,167,158,205, 82, 25,189,210, 93,214, 44, 5, 91,153, 89,145,146,
- 82,227, 68, 13,158,241,246, 25, 48,118,186, 88,245, 1,165,214, 7, 4,137,170,244,215, 45, 4, 81, 32, 17,149,197,230, 5, 85,
-105, 25, 77, 20,140, 19,154,113, 68, 20, 4, 56, 41,169,132,160,148,245,238, 83, 41,162, 56, 38,106, 55,105, 44,117,104, 44,183,
- 9, 59, 77,136, 53, 4,126,178, 80, 19,115,230, 22, 77, 33, 61, 41, 79,105, 42,227, 47,208,206,250, 41,133, 49, 22,172,100, 56,
-200, 24,246,115, 84,220, 33,208,154,116,169,139,140, 52,149,169, 40,243, 9,206, 89,226,102, 74, 16, 70,132,129, 38,219, 45, 17,
- 66, 35,132,242,222,101,165, 81, 81, 68,216,104, 80, 42, 63, 77,213, 18,159,210,166,252, 74, 78,135,161,159,224, 77,157, 74,110,
- 14,127, 49,214, 71,232, 58,103, 22,108, 92,204,162, 63,167,129, 95,170, 70,212, 6,225,162, 31,221, 39,255,105, 37,208,122,250,
-177,231,247,228, 98, 46,168, 93,224,159,136, 51, 2,107,249,202,174,253,165, 29,188, 88, 8,123,161, 94,221,212, 69, 94,188,244,
- 32,176, 72, 58, 21,103, 9,112,181,161,119, 58, 70, 23, 47, 17,205,205,222,119,222, 75,190, 8,233,226,252,161, 68,188, 56,124,
- 23,110,118,253,211,245, 65,171,114, 53,246,188, 22,206, 77, 39, 36,150,169, 45,180,110,106, 4,232, 51, 29,246,130,128,109, 17,
- 4, 48,199,124,206, 95, 78,137,111,179,127, 95, 16, 28,200,185,212,111,238,189,155,243, 66,206, 64, 97,196, 44,243,110, 33,118,
-206,206,199, 32,103,138,254,140, 57,204,194,110,223,158,217,243,159,193,208, 10, 63,126,183,214,120,104, 71, 16,210,106,117,120,
-252,240, 33, 77, 45, 41,141,143, 25,172,156,227,180,223,103, 57,109,211,109, 54,185,122,249, 6,210, 5, 8,165, 41,243, 33, 74,
-107,172,149,148,110,194, 23,191,244, 21, 14,119,119,200,199, 19,126,237,215,190,194, 95,127,247,123, 62, 78, 48, 80,126,239,165,
- 35, 34,173,160, 42,113,178, 98,216, 47,232, 92,232,146, 52, 90,244,135, 61,246, 14,246,105,180, 52,151, 47, 94,229,227,143,222,
- 35,159,244,177, 42,100,127,111,143, 63,248,195, 63,224,161,187,207,246,246, 51, 46,221, 90,225,193,163, 71, 92,217,186,192,201,
-233, 41, 2, 57, 19,174, 56, 33, 81, 82,179,190,121,129,175,254,250,111,243,127,251,127,252, 95,253,154, 65, 88,156,112,148,166,
-224,116,112, 74,191,223, 35,203, 38,140, 70, 67,146, 52,198,216,178,126,178, 76,159,212, 1,215,175, 93,231,248,244, 20,235, 28,
-105, 43,165, 43, 43,150,187, 75, 88,155, 47, 8, 58, 62,127,167,254, 42,184,194,226, 19,255,188,208,206,143,223, 64, 73,191,107,
-155,226, 35,167,157,186, 82,231, 59,245, 41,120,197,255,205,195,122, 63, 55,219,165,214,143,169, 34,207,249,206,183,190,201,253,
-207, 62,101,109,101,149,222,225, 41,167,167, 61,150,150,150, 64, 74, 84, 24,146,180,218, 68,198,176,186,190, 69, 89, 20,132, 81,
-192,202,250, 26, 79,159, 62, 33, 72, 91, 36,173, 22, 31,221,125,192, 82,167, 77,154,198,180,151, 58, 92,188,124,157, 36,241, 46,
-131, 98, 50,198, 20, 5,197,112, 72, 97, 44,151,174, 93,129,229,148,251,119, 62,161, 21, 37,148,165,161,189,190, 70,123,109,139,
-211, 97, 70,218, 89,161, 40, 74,238,125,246, 25,202,148, 44,119,189,152, 9, 87,145,101, 57,177, 80, 56, 83,176,253,232, 62, 23,
-174, 94, 37,141, 3,182, 46,108,114,241,210, 5,180,200,113,197,132,126,127,192,238,222, 33,235,197, 38,227,241,152, 56, 74, 9,
- 59,109,242,201,144,225,201,136, 78, 51,229,159,252,233, 63,230,249,225, 51, 14,118,247,184,114,233, 50,198, 88,242,178,100,148,
-149,148, 66,179,185,185,229, 85,183,166,100, 52, 24, 80, 86, 21,205,118, 27,180,244,227, 87, 5, 84,194,199,225, 42,133,177, 21,
-173,102,139,141,245, 13,142,142, 78,113,109, 67,154,132, 56,103,137,146,136, 48,137,168, 76,129, 18, 49, 81,179,129, 19,154,193,
-233, 17, 34, 8,144,137,230,202,173,107, 8, 29, 32, 31, 62,227,107, 95,124,155,254,104,132, 17, 48, 24,143, 25, 85, 5,177,212,
- 24,107, 80,224,221, 38, 82, 64,101,169, 92,229,249, 8,190,246, 97,149,102, 84, 89,118,142,114,194, 72,160,149, 37,210, 5,186,
- 78,219, 82, 74,215, 8,217,202, 23,111,103,234, 11,171,173,181,115, 10,171,236,172,123,155,131,139,106,182,185,245,159,235,108,
-137, 45,115,132,169,144, 88,164,208, 72,225,208, 26,180, 10, 80,194,239,243, 51, 59,166,156, 76,136,202,192,139,193,116, 64, 20,
- 69,196, 81, 64,179,211,166,209,106,162,154, 41, 65,167,137, 77, 67, 74,109, 81, 84, 40, 35,137,234, 24, 90,175,221,149,179, 98,
-101, 17,179, 32, 43,159,137,173,113,214,224,140,227,244,164,199, 47,126,250, 49,151, 46,221,192, 88, 69,220, 74, 9, 27,113,205,
- 47, 23, 12,250, 61,154,173, 6,105,171, 65, 16,132, 20,227,140,210, 90,194, 36, 98,208, 31, 82,149,126, 10, 18, 38, 9, 58,138,
- 49,182,168,159,123,202, 31,156,181, 68, 26,229, 15, 63, 2, 31, 40, 51, 75, 17,243,205,130, 49,198, 51,231, 23, 58, 79,223,185,
-215, 9,158,106,110, 87, 11, 3,229, 5,190,129, 38,212, 1, 65,232,167, 5, 74,122, 43,179,172,199,239, 44,212, 4, 87,103, 52,
-156,189,182,139, 89, 97,151,126,180,240, 75, 60,224,110,225, 90, 48, 63, 42, 56,177,168,149,175,197,105,246, 28,192, 76,156,231,
-156, 48,207, 16, 57, 83,187,120,165,242,125, 86,192, 61, 16,161,126,125, 97,114, 89, 7,164,185, 58,179,221,205,110,103,113,215,
- 66, 72,127, 31, 41,233,187,111,159, 33,236, 15,123, 53,167,223,152,122, 37,226,188, 22, 46,152, 93, 43, 5,218,123, 58,197, 28,
-224, 34,230, 95,248, 60, 57,103, 58, 74,159,223, 17,211, 61,185,156,167,244, 44,118,246,159, 19, 34, 47,220, 75,252,200,130, 5,
- 19,130,152, 5,201,204, 79, 52,110,102, 97, 19,103,148,206,115,165,188,168,249,245, 66,206, 15, 22,254,180,234, 99, 43,117, 24,
-209,105,119,120,114,255, 57, 65, 51,101,216, 59,225,230,173,107, 60,186,255,148,163,231, 21,237,246, 42,173,230, 42,229,184,224,
-248,232,136, 75, 87,175,208,127,250,156,172, 40, 41,171,138, 15, 62,186,131, 51, 19,126,239,119,190,202,123, 63,253, 91, 78, 14,
-119,209, 65, 68, 24, 53,216,123,126,192,106,119,157,201,104, 72, 24, 41,156,240,233, 64,167,131, 62, 75,171,203,220,188,182,201,
-246,227,231,140,135,240,229, 47,127,149,131,189,199, 20, 69,204,218,198, 69,126,246,225,251,252,229, 95,252, 37, 95,249,226,187,
-168,231,123, 36, 73,196,151,191,248, 54, 97,160,120,250,228, 96,118,178, 11,149,154, 77, 58,132,208, 12, 70, 99,138,194,251,108,
-165,246,227,117, 41,253, 62, 70, 41,205,112, 60,166,127,122,204,131,227, 83,159, 45, 45,165,143,110,180, 14,165, 35, 46, 92,220,
- 66,217,156,246, 82,151,178, 44, 72,180, 34, 73, 90,244,199,249,194, 88,234,124, 66,222,175,188, 94, 58,195, 46,118,245,105,243,
- 76, 72, 65,253,115,106, 29,248, 81,252, 20, 25, 89, 71, 57, 42, 33, 23, 58,117, 47,154,145,136,217, 58, 1, 4,166, 22, 88,149,
- 89,198,207,126,242, 67,178,225,128, 34,155, 48,234,247,248,250,215,191,202,206,211,231,168, 48, 32,142, 98,148, 14, 41,139,138,
- 60,203,209, 58, 68, 34,137,146,136,194, 24,130, 56,101,253,194,101,180, 20,172,174, 95,192, 85, 5, 72, 65,107,169,203,165, 91,
-175,243,217, 71, 31,113,184,183, 71, 35,138, 61, 22,212, 57,242, 73, 65, 20, 38, 28,156, 30, 48, 41, 42,182, 86,219,148, 69, 69,
- 16, 69, 92,184,124,153,180,149,115,114,124,132, 51, 5, 85, 57, 97,247,241, 61,154, 73,200,234,242, 18,171,203,109,112,150, 81,
- 86, 18, 6, 49, 82,107,158,237,238,113, 33,140, 41,138,202,171,197,235,206,110,125, 99,131, 86,187, 75, 24, 40,178,241, 8, 97,
- 33,104,132,132, 81, 76, 16, 87,156,238, 31,145,166, 49, 43,221, 22,141, 56, 66,235,152,194,192,225,193, 51,130, 40,100,171,217,
- 33,203,114,130,154,121,189,124, 97, 11,234, 2,146,149, 5, 78,248,192, 19, 33, 3, 28, 5, 58,140,104,119,150, 56, 29, 14,184,
-124,229, 26, 81,152,128,169, 8,149, 35, 8, 3, 84,168,153, 20,133,207,214,174, 59,227, 36,109, 16,135,161, 15, 38, 65, 96,109,
-201,214,214, 26, 69,150,147,156,142,184,121,101,139,131, 81,143, 86,187, 73,255,224,148, 86, 8,161,177,132, 2, 74, 3, 82,251,
-149,204,148, 67, 46,173,163,172,252,197, 55, 8, 52,187,147, 2,121, 82,112, 43,136,104, 20, 25,149,148,148, 50, 64,169, 10, 99,
-100,221,103,212,249,108,114,118, 53,192,154,202,239,197,149,242,133, 97,250,252,193,147,209, 76, 29,136,129, 53, 56, 83, 33,173,
-169,175,103, 6, 48,126, 20, 45,124,175, 22,196, 65, 93,140, 21, 78, 7, 88, 29,226,194, 24,151,196,184, 36,194,180, 82,138, 70,
- 72,210,136,169, 2,137,243, 51, 52,108,229, 39, 18, 30,194,101, 33,168,215, 97,181, 32, 76, 34,189,181,206, 24,172, 48, 40,161,
- 48,149,160,223,155,112,231,147,123, 76, 70, 19,118, 30, 63, 1, 21,114,225,181,155, 52,194, 16,180,160,168, 74,114, 83,178,186,
-182, 69,146, 54,253,202,173, 63,192, 56, 8,162,136, 98,114,136,169,140,159,170,164, 41, 58, 12,168, 10, 83,115,217,253,104,219,
-107, 87,188, 7,222, 85,114, 22,119,108, 0,171,234,209,187,240, 35,231,178, 44,189,255,189, 46, 92, 82, 42, 2,237,115,232, 3,
-188, 22, 70,235, 41,250, 53,240, 98,185,186, 83,247,152,117,231, 57, 40, 11,226,184,105, 24,151, 56,195,255,158, 23,244, 57,128,
- 74,206,248,239,211, 86,146, 87, 94,151,196, 28, 39,238,196, 25,103,204, 66,250, 41,103,153,101,231, 49,228,245,105,195,250, 78,
- 93, 50, 77,140,115, 51, 77,216,244,237, 69,158,187,123, 1, 50,195,172,120, 91, 55,133,121, 89,255,120,115,182,206,177, 48,126,
- 61,228,230, 36, 60,127, 61, 12,252,180,162, 50, 84, 37,243,144, 34,166,214, 63,135,146,146, 80, 9, 66,237, 15,102,122,186,179,
- 88, 12,213, 88,180,158,137,115,112,152,197, 78, 93, 45,158,168, 16, 47, 13,148, 95,204,184,158,142, 86,206,135,130,156, 63,125,
-201, 51,197,222,157,155, 22,136,179,136, 25,113,230, 79, 80, 95, 96,124, 28,157, 56, 23, 0, 51,152,228,148,198,208,136, 21,105,
- 2, 5,150,193,209, 51,198, 39,151,112, 34, 34, 89, 89,161,127,116,204,143,190,251, 35,190,252,206, 23, 81, 58,166,127,124,192,
-241,193, 46,105, 28,242, 39,255,240, 31,241,139, 95,220,225,238,253, 15,113,161,100, 48, 58, 70,218,138,108, 0, 97,103,137,170,
- 60,160,204, 75,182, 31,223,167,179,190, 68,111, 48, 68, 11, 65,110, 42,174,221,188,201,206,147,123,100,195, 62,195,227, 9,253,
-107,215, 89,191,120,153,229,205,101,222,127,255,125,162,180,129, 53,134,103,123, 7,172,109,108,114,114,124, 64,255,201, 67,190,
-252, 79,254, 25,223,255,219,111,251, 83, 49,176,212, 72,137,131,136,222,160, 32, 77, 26,140,178, 9,227, 81, 15,137,247,176, 98,
- 5, 43, 75,171, 92,216,220,228,240, 96,143,178,172, 48, 69, 78,225,188, 96,199, 73, 1,165,244,204,103,161, 89, 93, 94,102,180,
-247, 12,165, 52,229,120,136,156, 12, 9,211, 37,191,175,153,121, 37,197, 47,237,200,207, 40, 61, 92, 29, 96,120,198,115, 50, 79,
-203, 67,137, 89, 58,223,116,164, 38,229,130, 88, 72,212,209,153,206,191, 95, 10,137,181, 14, 41, 61, 30,212, 63, 33, 61,215,221,
- 90,139, 69, 32, 76,197,179,237,199,236, 63,125, 66, 35,142,216, 88, 95,231,228,248,132,193,160,199,218,198, 26,227,162, 36, 73,
- 83, 86,150,150,209, 74,114, 58, 62,166,200, 38,164, 62,174,143,194, 56,218,157,101,164, 12, 25,143, 71, 44, 45,173,224, 92, 69,
-101, 45, 91, 23,175, 96, 92,128, 49,142, 32,208,244, 6,167,236,238,238,241,165, 47,127,153,214, 74,204,254,209,144, 73,230,248,
-226,151,127,147, 70,179,129, 10,148, 31,139, 22,150,201,100,194,206,147,199,220,186,126, 25,157,180,217,125,182,195, 94,191,207,
-112, 48, 70,218, 18,169, 20,163, 73,201,230,133, 54, 81,220, 0, 33, 24,143, 51,154,173, 22, 81, 28, 18, 4, 13,202,124,194,225,
-254, 46, 85,149, 83,101,150, 78,186, 10,194,145,143, 39,232, 52,165,177,180, 76, 24, 69,140,122, 39, 84,195,156, 70, 20, 83, 88,
- 1, 82, 19,183, 87, 88, 93, 93, 35,144, 37,174,204,124, 40,147,138, 40,203,138, 48, 8, 61,158, 83,105,178,113, 78, 67,199, 96,
-253,223,187,114,128, 82, 52, 26,109,122,163, 12,227, 74,150,151,186, 68,162,194, 58, 8,147, 38, 97, 75,145, 23,185,183, 75, 9,
- 40, 50, 47,176, 19,198,161,141, 36, 63, 29,240,236,217, 14, 81, 28,211,108, 42,214, 86,154,132,166,162, 28,103, 76,172,227, 20,
-139, 22,144,214,118, 25,105, 44,186,126, 8,104, 41,105,200,136,113, 89,160,140,223, 13,143,100,192, 39, 39, 5,141, 68,208, 81,
- 2, 43, 11,170,192, 98,116,133, 81,202, 91,216,170,122, 7,138,245, 83,189,217,174,212,249,145,183, 3, 39, 37,216,250, 96,235,
-188,120,206,217,218, 31, 44, 36, 96,234, 93,118, 9,149,103, 31, 56,225, 53, 39, 82, 56, 4, 26, 29, 40, 47, 6, 75, 19,194, 48,
- 38,138, 35,210,102, 66,156,132,196,145, 38,144, 2, 79,129,119, 4,245, 70,212, 24,131, 12, 66, 68,160,106, 33,175, 4,148,143,
-151,182,126, 79,154, 23, 25, 74,131, 51,138,108, 2,247,239, 60, 5, 35,233, 54,189,216,242,249,246, 99,142,118,159, 80, 86, 35,
- 86,175, 94,246, 95, 51, 12, 73,219, 29,162, 56, 65, 43,141, 80, 39,136, 64,163,170,128,178,168,136, 26, 9,113,187, 73,208, 72,
-252, 69, 95, 5, 40, 25, 96,164, 67, 40,141, 86, 1,129,182,181, 69,145,217,120,220, 89,208, 82, 96,167,241,203,248,200,228,162,
-244, 25, 20,254, 33,226,239,111, 29,120, 4,174,148,222,162, 26,106, 61, 47,236,129,246,211, 0, 33,144, 88, 95,220,229,212, 22,
- 93, 71,123, 59,127,221,246, 53,184,246,208, 79,173, 92,181,143,221,223, 95,117,179,105,229, 12, 21,251,242, 70,194,175,254,166,
- 25,230,110, 97,140, 62, 21,179, 45,238,169,207,162,200,167,242,182,105,100,153,173, 3,109,106,131, 92,173,205,120,217,232,125,
- 6,145, 57,131,118,245, 69,124,246,118, 93,204,253, 36,198,212, 24, 94, 63,149,153,254, 64, 94,115,164,168,194,160,214, 55,128,
- 40,235,201,147,155, 10, 26, 33, 16,130, 64, 73,180,114,115, 82,159,170, 71, 27,174,246, 62,139, 51,133,218,157,139, 59, 60,187,
-115,144,175, 82,175,191,162, 88,191,138,192,243,249, 69,226,101, 74, 71, 94, 80,199,191,138, 74, 54, 63, 72, 56, 6,189, 83, 54,
-215, 55, 56,122,124, 15,107,160,217,142, 57,232, 29, 19, 69, 1, 73,179,129, 52,134, 70,156,178,190,113,129,227,254,136,160, 25,
- 32,117,201,181, 43,151,249,228,227,247,185,119,239, 51,194, 80, 51, 24, 12, 25, 14,114,118,158, 30,146,234, 54,163, 81, 73,208,
-245,126,242, 40,214,228,249,144,229,238, 21, 30,220,255,140, 52, 78,104,139, 22, 61, 42,108,149, 51, 26,158,144, 52, 86, 65, 88,
-226,164, 65, 85,250,145, 91,146, 52,200,198, 19,118, 15, 14, 73,226, 6,227,124, 82,239, 2, 29, 7, 7,187, 8, 33, 8, 85, 64,
- 81, 20,140, 71, 25,105,115,141,164,209,242,208, 92,227,159, 24, 66,105, 58, 75,203,172,172,174,177,178,188,194,201,193, 14,206,
-230,100,249,144,126,127,136, 68, 82, 86, 85, 45,128,116, 40, 37,233, 38, 13,238,125,248, 83,142,159,238, 80, 28,239,209,137, 3,
-186, 27,151, 48,166,250,143,136, 22, 92, 12,122,121, 53,101,233,165,182,143,250,129, 38,157,157,241, 15,172,169,144, 82, 97, 42,
-139, 84,154,162, 50, 68, 74, 83, 89,135,113,240,244,233, 14, 91, 75,109,122,123, 59,116, 26, 17,195,129,240, 92,241,184,201,193,
-176,160, 69, 76,187,213,164,217,110,145,118,154,236, 60,217, 97,144,141, 8, 66,141, 11, 3,194, 70,131, 36,105, 50, 26,142,113,
- 42,100,117,163,131,115,150, 60, 31, 81, 20, 57,119,238, 63,100,117,169,203,155,239,124, 25,225, 42,238,220,249,140,145,145,220,
-254,194,187,236, 62,223,231,238,221,123,220,186,121,139,180,179,194,193,209, 1,151, 47, 95, 98,255,233, 83, 78,250, 57, 87,174,
- 92,167,213,108,240,236,233, 67, 20,150, 11,151,175,176,180,180,132, 16,146, 32, 10, 24,141, 70,152,114,204, 48,243, 4,182,102,
- 20, 32,243,146, 82, 86, 8,215,160,202,188, 30, 98,115,115,139,211,147, 99,142, 14, 15,137,162, 49,205,182, 66, 58,199,100, 48,
-164,177,212, 37, 74, 83, 38,147, 49,165,144,100,163, 17,163,113, 69,127, 92,178,127,220, 35, 77, 98,226,118,140,195,122,197,184,
-149, 20,185,161, 24, 15, 17, 66, 18,167,169, 23,190,230, 99, 36, 62,211,189,118,185, 82, 20, 5,163,225, 0, 29, 70, 20,105, 66,
-101, 10,164, 82, 4,177, 65,105,229,247,232,206, 81,150, 37,133,245, 12,116,237, 12, 65, 18,179,188,186,198,233,201, 9,163,209,
-152, 70,218, 64, 9,216,126,248,152, 80,105,116,160,201, 42, 67,174, 4,185,242, 10,125, 53, 37, 69, 74, 15,138,210, 58,244, 0,
-148,122, 15,218, 80,146,163, 28, 62,221,205,105,197, 13, 54,181,160, 85, 78, 80,129, 99,142,241,246,112, 38,191, 55,149,243,145,
-160,195,143,250, 69, 61,206, 92,232,206,252, 20, 72,248,162, 98, 1, 35,252,129,203, 86,179,200, 44, 33,124,177, 11,180, 32, 12,
- 21, 81, 20, 16, 39, 49, 73, 35, 34,142, 19,162, 56, 34, 74, 35,226,216,119,167, 50,144, 62,179, 91,207, 41,136, 74,123,111,253,
- 52, 27,221,185,169, 63,219, 82,217,138,162,204,189, 88,185, 84,216,202,241,241, 71,159, 50, 26, 78, 88,238, 54, 17,206, 50,232,
- 13,105, 45,181,121,184,243,132,231, 79,158,240,201,157,207,184,126,245, 6,155,171,107,232, 32, 36,106, 52, 16, 72, 76,253, 60,
-234,245,122,132,113,132,142, 66,116, 28, 19,197,201,108,218,170,181,194,168,169,111,188,172, 21,233,243,176,144,233,116, 12, 64,
- 89,111,123, 22,117,103,108,173,163, 42, 61, 47,131, 64,212, 17,217,190, 56,120,235,169, 71,191,234, 32,152,221,148,154,106,158,
- 76, 61,226,247,195,148,153,109, 12,113,198,229, 52,237,204,229, 25,177,156,152,177, 81,196, 52,181,243,115,132, 62,194,113,230,
-154,114,102, 35,124,134, 92,186, 80,128,237,194, 40,221,214,193, 82,114, 90,176,235,110, 90, 24,236,130, 8,248,236,141,121, 33,
-183,110,214,149, 91, 99,234,135, 82, 93,204,173,239,206,109,101,176,198,107, 57,166,197, 94,212, 58,133,243,225, 45,214, 26,191,
- 38,170, 65,113, 76, 1,113,117, 81,159,254, 13,245,204, 90,224,196, 92,132,198, 89,177,220,108,180,189, 48,126, 63,255, 49,175,
-234,210, 95,134,202, 59,111,217,123, 85,125,127,245, 33, 65,252,202,135,130,197, 67, 71, 54, 30,113,249,173,215,121,182,180,196,
-184, 63,164,159,231, 84,121,238,119,113, 90, 19, 80, 34, 84,136, 14,155,108,239,238,115,245,246, 10,101,101, 56,220,125,204,141,
-235,215, 49,166,162,223, 31,242,235, 95,255,117,190,251,237, 31,210,105,109, 50, 62,205, 25, 13,199, 52,172, 87,139,142, 70, 61,
-198,147, 33,249,184,143,194,103,195,223,255,228, 83,154,237,148, 56, 54, 52,218, 41,198,150,124,255,135,127, 67,218,217, 96,243,
-210, 69,214, 86, 55, 56, 81, 39, 68, 81, 66, 24, 68,156,246,251,252,103,255,249, 63,227,191,254,255,252, 75, 78, 79,143, 25, 13,
- 7,132,129,166, 40,115,170,202, 1,154, 56,136,216,188,112,145,231,187,207,176,117,184,142, 84, 33, 66, 5,156,246,250, 88, 83,
- 50,234,239,163,117,137,149, 30, 86, 96, 77,173,120, 81, 14,235, 12,141, 52, 37, 9, 52,131,131,125,204,112, 64,224, 44, 54,155,
-208, 59, 57,193, 44, 64,103,126,105, 40,193, 11, 97,193,245,147, 97, 97,167,126,126,253,114,126, 39,117,230,164,237, 28, 56,131,
-116, 22, 45, 52,141, 70, 66, 24, 70, 12,198,185,231,238,135, 33,149,243, 29,212,233, 73,143, 70,179,193,131, 7,247,113,197,132,
-213,213, 85,150,215, 54, 40, 12,124,122,231, 1, 84, 22, 29,197, 4, 81,194, 36, 43,216,191,251,144,118,183, 75, 51, 8, 73,211,
-132,149,213, 85,210,164,193,112, 48, 98,148, 85,172,108, 46, 81, 22, 5,131, 65, 15, 29, 68,116,210, 38, 69,105, 72, 91, 13, 70,
-165,101,208, 27,176,118,233, 38,239,126,227,247, 64, 72,130,230, 50, 46,136,105,183, 91,228,214,114,225,234,117,198,227,140,149,
-245, 11,244,250, 3, 14,142,143, 89, 91, 89,162,180,130, 7,143, 31,243,149, 47, 47, 51,202, 43,250,189, 62,157,181,117,150, 87,
- 47, 32,195, 30, 75,221, 22,137, 22, 80,140,177,229, 4, 35, 13, 70, 57,208, 33,147,178, 68, 7, 33,205,102,135,251, 15, 30,209,
-234,116, 9,198, 99, 63,242,140, 99, 76,150,161,162,136,238,133,139,196,205, 38,207, 31, 61, 97,124,116,192,120, 52,193,148, 57,
- 31,125,248,115,190,242,165, 47,160, 82, 63, 42, 21,206,119,196,214, 26,202,162, 32,199,144, 54,155,254,226, 37,180,247,144, 11,
-234,216, 93,193,100, 52, 68,151, 37, 89,154,226, 76, 78,179,213,172,197,171, 22,155,103,200,180,129,114, 16, 40, 47,242,170,242,
- 10, 83, 20, 52,151,151, 89, 91,223, 34,234, 13, 8,195,128,213,110,151,181,149, 46,186, 82, 12,141,101, 52, 26,147,105,205, 4,
-137,113,165,143, 22,117, 62, 22,216, 88, 75,172, 5, 97, 32,125, 46,189,148, 36,165,143, 78, 61, 42,225,135, 79, 39,252,206,237,
-132,200, 20,232,210,239,133, 69, 85,235, 52,172, 64,214, 28,243,169,240,118,234,160,153,141, 75, 23,217, 72, 82,162,235,137,144,
-180, 2,225, 36,194, 42,148, 45, 61,200,198,121, 63,125, 24,248, 16,167, 56, 8,136,226,144, 56,209, 68,177, 34,138, 37, 97, 44,
-137, 66, 65, 20,105, 15,243, 82,254,160, 33,213, 84,124,236,167, 78,174,246, 61,171,122,143, 46,240, 56, 86,191, 39, 45, 81, 72,
-164, 9,248,217,123, 31, 49,232,143, 9,180,246,241,161,129, 34, 43, 42, 66, 44, 95,250,202,187,124,114,239, 30,149,117, 60,158,
- 84,220,184,117,155, 40,137,145, 81, 4, 22,132, 86, 4, 97, 72, 81,248,245, 81,144, 36,168, 40, 34,105, 36,160,235,144, 21,173,
- 49,218, 80, 85,245,235,198,160,181, 94,128, 61,205, 93, 75, 65, 93,164,202,202, 7,163,212,126,183,186, 0,214,235, 48,225,187,
-122,173,228,140,231, 62,181,171,170, 64,123, 50,233,108, 10,238,230, 73,160, 44,230, 59,112,102,151, 62, 77,174,155,114, 82,168,
-173,210,179,209,252,185,209,251,171,136,110,231, 27,135, 23,197,110, 62, 24,224, 76,183,109, 23, 82,212,172,245, 29,117,101, 16,
-162,244, 26,136, 5,229,188, 59,167, 51,152,119,231,117, 81, 55,115, 75, 32,245,116,209,152, 10,103, 12,198, 84,190,160, 87, 21,
-166, 42,113, 85,229,175,125,216,154,230, 58,229, 47,216,217, 4, 64, 72, 80,181,214, 65, 9,225, 5,136, 74,212, 98,196,105, 81,
-175,187,242, 41, 11, 88,158,233,190, 95,236,136,231, 99,122, 94,180,162,157,243,148,159,217, 80, 76, 79, 50,128, 19,238,151,198,
-212, 9,241,170,130,206, 47,133,231,159,183, 62, 8, 1,101,145,163,164, 98,125,125,147,201,112, 64,156,229,244,198, 71,236,239,
- 61, 7, 29,243,193, 47,126,192,181, 75, 87, 25, 76, 96,125,235, 34,227, 73,206,201,222, 33, 46,159,208,108,166, 52, 5, 84,197,
-132,189,103,125,222,184,245, 6,151, 54,183,248,206, 95,125,143, 32, 40,125,220,233,120,204,202, 70,135, 36,109,113,120,184,207,
-133,205, 77,142,247, 79, 89,233,118, 48,194,144,196, 9,163,188, 79, 16, 69,196,137, 87,169, 74, 36,207,119,118, 57, 58, 62,226,
- 31,254,195, 63,230, 47,190,249, 77, 42, 99,248,203,111,125,139,102,171,205,243,231,207,168,172,167, 5,205,125, 31,138, 48, 73,
-185,112,105,139,127,253,223,253,171, 90, 83,160, 80,129,143, 93,109,181, 90,180, 91, 9,217,222, 93,130,192,208, 94,110, 83,238,
-142,188,223,209,249,145, 23, 50, 96,237,194, 6,107,107,171, 72,103,104, 53, 35, 42, 49, 33, 10, 52,167,163, 30, 85,104,124,214,
-240, 52,221,232, 87,140, 21,156,133, 23,138,179, 73,247, 47,211, 85, 44,138, 67,166,153,192,181,153, 24,101, 45,167,199, 71,236,
-236, 60,245, 99,193, 32,160, 40,161,179,180,204,214,165, 75,188,241,214,219, 62,255, 57,207,168,138,156,221,131, 19,174, 95,191,
-198,202,214, 5,250,189, 19,150,186, 29,254,249, 63,249, 83,170,202,178,189,189,195, 40,115,132,113,147,166,136, 40, 75, 75, 81,
- 58, 86,214,151,105,117,214,121,246,100,155,211,147, 99, 90,157, 46, 40, 73, 16,199,172, 55, 82,138,124,130,196,178, 20,197,228,
-121,193,147,157,103,172,172,174,145,180,187,244,199, 57, 65,224, 15, 81,183,223,124,139,211,211, 83,150,150,186, 76, 70, 99,130,
- 40,101,169,219,101, 37,203, 57, 62, 62, 66, 6, 1, 95,120,231, 29,154,205, 38, 59,207,247,217,220,218,226,100, 48,100,148,229,
-180, 27, 41,101, 81,208, 27, 14,233, 94,186, 72,162, 59,148,147, 17,227, 81,143,192, 26,132,179, 24, 43, 40,138,146, 40, 86,124,
-241,221, 47,123,244,105, 81, 82, 20,165, 47, 70, 74, 83, 24, 67, 8,132, 73,131,229,245, 77,156,211, 4,199,254,112,230,172,225,
-251,127,251, 93,222,124,253, 38,151, 46,108,208,237, 6, 96,253, 46,174,176, 57,217,184,162, 52, 21,221,181,245, 90,147, 35, 8,
-194,152,178, 40,235,100,185, 17,167,207,159,161,176, 44,117,219,132,129,198,153,146,170,168,144, 74, 99, 6, 6, 25, 68, 68,141,
- 20,146, 8, 59, 26, 99,198, 35,170,210,162,155, 45, 26, 34,192, 85, 37,175,191,246, 26,223,248,250,215,248,151,127,254, 45,159,
-253, 13,100,198, 48,112,142,134,214, 84,194,225,140, 35,116, 94,124,133, 16, 4,129,196, 85,254,241,212,144,142,134, 18,244,173,
- 96, 55,119,252,244,193, 9,191,123,179,141,214, 32, 75,131,148, 37,170, 18, 4, 90,225,106,186,227,153, 53,158,245, 9,133, 98,
-166,243,144,136,160, 46,100, 90,161,132, 67, 82,121,244, 44, 6,237, 74,168, 25, 16, 74,130, 86,138, 56, 10,136, 2, 47,254, 10,
- 67, 73, 24, 10,130,208,161,180, 65, 40,239,123, 23, 74,227,164, 67,105,129,212,210, 11,249,166,231, 11, 37,253,161,193,249,233,
-128,197, 97,156,193, 84, 21,210,249,245,217, 79,127,242, 1,207,118, 14,232,118,150,137,227,144,202,148, 24, 87,146, 52, 35, 90,
-221, 6, 50,208,124,125,233,171,252,224,123, 63, 96,116,210, 35, 31, 79, 72,211, 20, 17,104,202,162, 34,140,252,152,221, 58,139,
- 12, 52,113,179, 65,208,108, 16,165, 49,165,117, 62, 75, 92,213, 25,241,211,155,241,169,105, 8, 47,160,243,156,145,250, 80, 34,
-124,188,173,150, 30,221,172,165,196, 5,218,227,122,181, 34,168,129, 53, 94,220, 42,209,218, 23,118,169, 37, 82,123,205,140, 82,
- 98, 38,138, 22,152,185,152,122,186,176, 63,207,131, 19, 11, 81,219,115, 5,183, 31,199,159, 19, 90,191,106, 10,248,170,105,160,
-155, 42,212,167,187,252,197,127, 59,167, 13,246, 88, 90,129, 16, 85,125, 40,147, 62,177,212,169,133, 32,178, 41, 3,127,225, 96,
- 48, 61, 36,212,226, 66, 99, 13, 24, 55, 27,181, 27, 83,249,110,221,248,195,156,169, 12,148, 37,206,150, 62, 54, 24, 55, 59, 40,
-201, 25, 96,199,206,173,236,210,175, 2, 2,237, 51,234, 67, 45, 9, 3, 93, 3,189,106,161,196,244,162, 43,207,248,201, 95,236,
-162,207,236,221, 95,209, 77,191,204,143,126,102,215, 80,255,209, 94,149,108,243, 50, 47,251, 47, 43,220,191,108,116, 47,234,108,
-237,254,112,128,142, 98, 63, 66, 20,150,245,110,202,195,187,119,249, 71,255,249, 63, 39, 54, 99,170,113,134, 29,143, 89,238, 54,
-185,191,253,132,219, 87, 46,114,255,211, 79,217,218,186, 72,144,196, 40,229, 24,244, 78,120,120,247, 14, 31, 72, 77,153,151, 24,
- 10,164,128,162,200, 57,220, 63, 34, 78, 37,198, 90,222,121,251, 58,249,112,140,138, 82,134, 89,129, 10, 19,214,150,150, 40, 77,
-197,165,203,215,232,247, 74, 46,110,172,115, 55, 73,168,218, 29,172,245, 33, 45,111,189,253, 5,218,173, 14,161,214,220,185,123,
-159,202, 88, 12, 83,251,136, 36,140, 34,190,240,246, 59, 36, 73,196,195,251,159, 81, 7,224,145, 38, 13, 47,252,210,138, 72, 75,
-250,131, 35,132,203, 57, 29, 15,169,240,136, 73,132,195, 42, 65, 37, 4,237,110,155,193,224,148,163,195, 61,180,114, 52,151, 91,
-180,187, 45,118, 75, 73, 89, 12,126,245,238,252,204,201, 88,188,152,170,244, 57,211,152,243,227, 51, 91, 91,121,138,124,196, 47,
-222,251, 33,119,239,124,198,229, 43,151,136,226,132,202, 74,118,247,158, 49,202, 38,164,173, 22,171, 43,171,100,163, 33,163,222,
- 41, 23,182, 46,210, 93,187,192,243,253, 67, 58,205,152, 43, 23, 47, 16, 74, 11,213,152,165, 36, 96,119,247, 0,235,250,188,241,
-214,155, 52, 90, 45,172,117, 68,113,196,209,225, 9, 56, 71,146, 68,196, 81, 72, 24,199, 52, 26, 41,197,100, 76, 26, 74,138, 60,
- 7,103, 72,226,144,235,215,174,121,114, 83,145, 19, 5,138,108,212, 67,235, 0, 97, 43, 4,142, 44,203,232, 46,117,177, 78,240,
-124,255,128, 36,142,184,120,249, 34,195,222, 9, 81,148,178,188,178,130,117,142, 86,167,203,181, 27, 55,249,171,191,248,119,148,
-197,132, 86,187, 77,254,188, 32,203, 11,110, 94,191, 74,103,105,149,160,145, 80,101, 99, 79, 60, 19, 62, 97, 48,136, 82,132,130,
-170,202, 17, 82, 51,232, 15, 72,148, 66,100, 25, 50, 10,177,149, 69, 37, 17, 73, 35,101,121,165, 75, 20, 5, 52,210,152,178, 40,
- 88,238, 52,176, 56, 14, 79, 6,140,243,130,141,181, 53, 2, 21, 34,180, 35,159,140,233,198, 77,156, 21,168, 40, 36,108, 8,168,
- 10,130, 34,163,152, 76, 88,106,183, 24, 13,250, 12, 78, 79, 72, 67,141, 41, 27,200, 88, 82,228, 37, 86,106,164,142, 48, 69, 73,
-160,106,145,106,160,208,173, 38,167,123, 71,148, 90,179,122,229, 42, 54,159,160,142,246,185,120,233, 2,171, 43,203, 60, 59,221,
- 70, 1, 74, 43,242,162, 34,142, 21, 85, 29,233,156, 57, 75, 36, 5,165, 53,232, 64, 81,225,188, 22,160,128, 68, 10,148,147,228,
- 88,246,134,134, 79, 30, 13,248,226,141,200, 59, 35,148, 65, 41, 79,217,242,151,126, 89,139,178,228,220, 98, 59,203, 26,156,107,
-132,130, 40,156, 9,185, 2, 25,162,133, 67, 11,175, 88,199, 85,179,113,168, 18, 16,135,154, 64,123,171,145, 79, 29,147,168, 0,
-148,118, 62,107, 93,129,172,187,107,111,113,211, 80, 3, 89,230,250,158, 26,111, 59, 77, 71, 67, 32,241,194,192,191,249,171,239,
-113,116, 48,161,209,232,250, 36, 59,103,152,100, 19, 15,183, 17,138, 70,171,193,202,198, 58,135, 7, 71,188,254,198,235, 28, 31,
-246,106, 6,187, 69, 7, 33,147,194,160,162,128,172,204,209, 90, 81,148, 37, 73,167, 77,212,105,163,194, 16, 91, 86, 53,217, 77,
- 82, 77, 11,113,253, 50, 8,245, 44,197,110,234, 80,177,245, 30, 70, 27,139,214,138, 56, 8,192, 57,116, 37,107,141,154,156,119,
-136,117,234,154, 84, 26,165,213, 76,193,173,180,242,123,250,217,200,219,205,252,247,240, 43,164, 46, 78, 39,200, 11, 32, 26,225,
-206,174,114, 95, 54,249,155, 9,216,236, 66,136,203,172,171, 92, 24,199,187,249,132,112,234,103,119,214, 97,141, 31,149,207,103,
-246, 94,235, 83,115,123,153, 99,225,235,143,159, 9,224,108,237, 18, 48,184, 90, 4,103,173,127,221, 84,181, 14,200,120,164,171,
- 53,254,117, 83,143,226, 49,149,183, 87,138,249,130, 97,102, 29,159, 77, 4,188,232, 50,208,146, 32,144,196,129, 95, 7,133,245,
- 1, 85,171,250, 1,231,189,110,231,130, 91, 22, 81,180, 51,117,252,124, 76,255,226,251,120,233, 56,229,204,222,194,186,153,183,
-206,185, 95,214,113,139,115, 19,130, 23, 71,239,191,108,143,207,185,132,175,222,160,207,234,198, 6,247, 62,253, 0, 97, 75,150,
-210,136,103, 59,199,156,158, 14, 56, 26,101,184,241,152, 36,214, 28,239, 63, 33, 82,150,195,253, 61, 86,150, 55,216,218,186,130,
- 17,142,131,221, 93,150,151,154,228,227, 1,182, 52,228,249,132,102, 43,198,153,156, 72,107,164, 80,100,147, 18,165, 75,126,254,
-139,159,243,238, 23,223,225,253, 79,238,226, 84, 74,233, 34, 94,187,241, 14,223,249,238, 95,176,188,186,238,125,194,195, 19,254,
-244, 79,254, 49,159,222,187,203,221,187,159,113,243,214, 13,142, 15,143, 16,198,241,181,175,126,149,247,222,251,126,125, 0, 18,
- 8, 97, 48,206,114,237,250, 85, 94,127,253, 54,166, 42,216,125,246,196, 23, 21, 1,227,209, 8, 41, 99, 34,173,104,198, 17,119,
-142,246,161, 97, 57, 25,141, 40, 17, 8, 21, 34,176, 88,109,145, 56,222,184,253, 26,189,195, 67,242,193,128, 73,191,135,106, 4,
- 68,233, 50,102, 80,242, 63,218,127,103, 60,157,162,142,228,180,152, 34,103, 50,236,129,201,201,199, 3, 86, 87,186,180, 91, 75,
-220,123,188,195,127,245,255,254,255,178,186,177,206,210, 82,135,241,176,207,209,222,115, 94,187,253, 26,197,168,143,201,199, 28,
- 12,142,233,247,142,105, 55,155, 68, 58, 32,142, 67,154,169,230,217,179,231,140,122,171,104, 81,177,191,127,232,199,147, 66,144,
- 38, 1, 75,157, 22, 97, 26, 18,198, 33, 91,155,107,216, 34,231,244, 96,159, 65, 85, 80, 20, 5,217,100,140, 14, 34,111,253, 75,
- 98,122, 7,187,132, 90, 18, 53,218, 56,103,104, 70, 33,121,158,209, 59,173,104,180,218, 52,219, 13,162, 32, 64, 58,203,250,234,
- 42,237, 86,147,141,245, 85,126,244,163, 31,115,218,239, 35,181,230,246, 27, 95, 96, 50,158,112,229,218, 85,138,178, 32,155,140,
-120,248,248, 17,113,160,216, 92, 95, 65, 43,137, 51,150, 48, 72,137,210, 6, 58, 12, 60, 88, 40, 9, 65,104, 68, 24, 81, 77, 38,
-152,178,244, 57,227, 85,137, 16, 41, 42,212, 52, 59, 77,162, 72, 83,100, 99, 6,167,199, 76, 38, 57, 78, 64,119,105,141, 70,179,
- 69,220, 88, 34, 76, 26, 68, 74,209,172, 42,191,134,146, 33,194,121,191,178, 19, 80, 85, 21, 75, 75, 93,218,141,148,245,213, 85,
-134,131, 1,163, 81,143,124, 28, 83, 21, 3,116, 16,208,236, 46, 81, 21, 19,164,138,177,147, 9,227,211, 99,100, 28, 17,183, 90,
- 52, 86, 87,232, 92,104, 32,157,162, 28,156,178, 30, 74,222,253,242,187,124,251,135, 63,229,254,147,231,148,214,160, 48,116,219,
- 41,121,158, 97, 45, 4, 90, 83, 9, 5,198, 32,169, 72, 67,141, 82, 6,172, 67, 75, 69,130, 32,197,171,226,157, 20,236, 13, 12,
- 15,183,143,185,125,125,131, 64, 43, 74, 81,162,107,151,132,146, 26, 91, 11,225,165,208,179, 73,228,244,129, 39,149,170, 65, 44,
-114,150,235, 29, 77, 17,187,210,214,241,208,166, 78,127, 51, 4,181,194, 56,168,173, 70, 74, 75,212, 20,129, 26, 42, 84, 52,199,
- 23,187,233, 46, 88,168,218, 70, 55,207, 6,151,106,161,219,172,139,135, 34,228,199, 63,252, 41,159,252,252, 51, 46,223,120, 19,
-173, 67,140, 53,104, 21, 80, 26, 67, 81, 20, 4, 58,194, 58,207, 8, 88,221, 88, 99,231,249, 62, 50, 10,104,116,218, 76,178,156,
-142,246,145,169, 42,140,252,193, 70, 43,168, 12,173,165, 37,226,102,115,182,151,158,238,203,167, 5, 93,107,133, 49, 10,231,206,
- 22,245,169,247, 31, 32,212, 22, 27, 42,112, 26, 33, 29,101, 41,124,138,155,131,160, 70, 55,107,223, 37,122,237,192, 84,228,166,
- 68,173, 13,154, 22, 77,137,116, 11, 45,177,251,149,182,121,231,180, 83, 98,158, 11,242, 42, 1,239, 34, 94,125,241, 99, 22, 10,
-250,226, 78,125,246,117,236,180,203,174, 85,230,214, 46,152,227,170, 90,175, 1, 78,201, 51,121,238,211,251,202,213,170,118,107,
-231, 47,125,241,174, 51,233,205,124,252, 62, 45,254,211, 3,128,173, 42, 31,172,229, 92,205, 8,240,135,186,153,133,109,161, 83,
-151,194,239,208,163, 80, 19,133,190,160,123, 27,164, 69, 75,229,247, 80,194, 45,176,221, 95, 24,193,159,229,175,207, 10,171,112,
- 47,121,255,203,133,115,179, 95, 94,248,157,150,125, 73,170,205,175,134, 2, 20,159,187,199,255,124, 60,169,227,248,228,132,141,
-245, 53,150,150,151, 57, 26,247, 24,244,251,184,178,226,233,211,167, 92,188,113, 19, 57,238,115,180,179, 67, 18, 8,118,119,247,
- 89,187,113,139, 52, 89,226,232,232,152,225,120, 88, 51,152, 53,141, 70, 76,145,229, 8,153,226,180, 38,155, 12,104,164, 41, 17,
-146, 70,107,133,206,114,131,189,131,231,108,239, 60,225,237, 47,189,201,103,247,247, 24, 77, 44, 65,212,226,194,229,155,252,232,
-199,239,113,249,194, 69,108,105,185,119,247, 30,203, 27,235,124,252,201, 71,188,246,250, 27,180, 90, 45,180, 84, 28, 28,236, 49,
- 24,143,177, 66,205, 84,156, 73, 24,114, 97,115,131,245,245, 53,142, 14,247,201,179, 33, 96,105, 53,154, 40, 29,162,133, 36,141,
- 35,178, 81,159, 34,207,232,219,146, 18,225,243,147,157, 66, 56, 9,210, 17,201,144,119,223,122,155, 39,247, 31, 64, 94,160,172,
-165,119,114, 76,107,181, 69, 85,169,255, 17,107,186, 59, 23,147,235, 61, 27, 85, 89, 96,138,140,229, 78,147,241,112,192,221,207,
-238, 16, 4, 17,221,181, 13,222,184,125,145, 91, 55,174,114,122,116, 72, 43,142,184,245,181, 95,163, 28,157,112,120,124,204,112,
- 52,162,179,212, 37,138, 66,186,203,171,140, 70, 19, 6,217,144, 70, 34,104, 54, 36,167,199,207,201,198, 94,188, 37,144, 44, 45,
- 45, 17, 71,138, 36,242, 17,187, 23, 46,110,250,241,160,176,116,154, 41,154,138,209,200,213, 99,232, 33,253, 94,143,178,213,160,
-202, 39,148, 74, 98,138, 28, 99, 32,105, 52, 88,219,220,100,239,240,128,113, 54,161,217,110, 1,117,231, 34, 5,101,145,209,110,
- 54,121,231,157,183,249,203,111,126, 11, 7,108, 93,184,194,165,102,147, 50,159,208, 78, 26, 44,119, 90, 44,183, 19,132,205,137,
-146,148,188,168,216, 63, 56,226,194,133, 54, 82, 5, 53,198, 83, 80,148, 57, 89, 89, 16, 42, 77,163,219,229,232,249, 14,227,241,
-152,102,183,227,225, 19,105, 2,161, 66,137,136,245,181,101, 26, 73,130,177,130,135,219, 79,107,205, 72, 74, 86, 90,140,203, 16,
- 66, 33, 3, 77,216,236, 80, 21, 69,141,133,246,150,174, 48, 12,200,179, 9, 85, 94, 96, 77, 69,187,149, 34,241,135, 15, 29, 8,
- 4,113,205, 54, 87,184, 42,247, 52, 44, 99,137,163, 16, 25,197,158,103,174, 67,108,233,208,205, 38,101, 57,225,181, 55, 94,231,
-143,255,254,127,194,227,103,207,153, 20, 57,217, 96,136,150,146,147,145, 37,210,202,199, 10,215,158,237, 73, 81, 17, 42,233, 5,
-110,206,163, 94, 35, 33,104, 82, 50,169, 28,198, 73, 10, 17,112,114,154,243,248,241, 1,183,111,111,160,165,166, 50, 22, 37, 42,
-180,170,230,129, 82,138, 89,118, 4,117,242,159, 80,218,119,213,117,140,171, 20,222, 70,148, 68, 1, 97, 32,102, 22, 44, 91,149,
-216,170, 32, 84,130, 40,208,190, 43, 85, 18, 33,157, 47,234,161, 70, 69, 33, 50, 8, 9,227, 8,165, 3,175,115,145,129, 15,131,
- 49,245, 10, 75, 56,132,174,169,138,178,206,195,168,167, 5,223,251,206,119,217,254,236, 9, 43,157, 53,191,105,214,146, 64, 11,
-138, 34, 35,138, 21,166, 42,145,194, 34,177,228,121,134,142, 19, 54, 46,109,209, 27,222,247, 59,116,173, 9,164, 36, 74, 82,138,
- 40,242,142, 38, 28, 42,208,164,205, 38,141, 78, 27,165,213, 12,160, 98, 42,223,177, 7,129,158,121,158,167,215,233,233, 30,119,
-218, 25, 2,136,208,250,162,239,141,110, 72, 41,252, 72,185,182, 27, 6,129,158, 69,171,106,173,231, 35,254, 26, 7, 45,101,125,
-128,177,158,243,143,112, 51,110,191,120,229,220,238, 92,193, 22,231,220, 86,191,132,147,113,102,135,254,194, 40,158,179,227,251,
-105,188,233, 66,109,242,138,116, 59,223, 18,224,237,104,194,152,179, 2, 54,103,107, 66,225, 52, 80,104, 94,224,103, 35,246,170,
-238,198,157,183,223,250, 32,156,233, 1,162,222,151, 91, 51,155, 44, 76,187,123, 83, 25,202,178,162, 44, 61,234, 91,214,194, 56,
-165, 60,220, 39,172,221, 5,186,190,175, 45,248,157,186, 82,117, 84,229,185, 52,180,105,152,188, 88,160,206,157, 9,116, 65,156,
-217,113,139,115,129, 47,139, 59,245,133,251,205,175,134,237, 43,196, 87,231,146,217,120, 9, 32,224,243,199,237,226,115, 14, 5,
-150, 44, 27, 99,170,138,141,205, 75,140,135, 3,134,123,143,145, 85,197,253,247,127,206,141,127,254, 95,240,248,199,223, 69,217,
-146,201,160,226,242,230, 21,158, 29,157,242,251,191,243, 5, 6,123, 59, 24,161,176, 74, 82,149, 21,191,241, 27, 95,229,199,127,
-251,183, 20,165, 38,140,187, 60,127,254,140,180,153, 66, 81, 50,113, 6, 55, 24,243,133,119,191,198,183,255,230,219,228, 54,224,
-214,213, 27, 60,124,178,199,247,190,253,151,124,229,203, 95,230,218,230, 22,191,248,233, 79,249,254,253, 31, 48, 44, 11, 38, 31,
- 58,214,183, 46,210, 94, 90, 38, 27, 13,121,253,141, 91,124,231,187,127, 67, 97, 42,156, 12,144,194, 17,227,184,208,214,132,118,
- 66,163,217,224, 47,191,245, 77,160, 68, 41,197,106, 51, 38, 10, 91, 44, 95,121,147,183,222,126,135,163,199, 63, 33,112,134, 97,
-169, 57, 24, 89,223, 57,184,137, 23, 5,161,105, 54, 86,184,178,117,137,111,125,247,187,140,178,138, 50, 47, 56,234,245,105,244,
-115, 8,194, 87, 90, 14,207,167,172,189,188, 76,251, 7,166, 16,226,172, 40, 67,204,189,163, 78,204, 87,105, 30, 50,226,234, 68,
- 56, 67, 41, 36,147,170, 64,138,130, 86, 8,187, 39, 37, 59, 7, 19,108,163,100,101,228,248, 79,255,201, 63,102,127,239,144,205,
-110,151,110,224,120,244,240, 83,170,162,226,163, 15, 62,228,245, 47,125,137,214,114, 23,161, 3,138,170,226,249,147, 39,236,237,
- 60,165,172,134, 52,147, 38,101, 54,164,223,239, 49,153,100, 68,113, 64,105, 70,116,219, 93,148,150, 52, 26, 77, 66, 29, 80,102,
- 57,161,116, 88, 81, 34,165, 33, 73, 19,116, 20,114,114,122,194,209,209,152,103,207, 78, 88, 89, 90, 66, 10,193,225,241,177,191,
-167, 78, 14,168,170, 9,203,171,235,148,198, 17, 41, 77, 49,201, 24, 22, 5,194,149, 52,211,136, 64, 24, 54, 55,214,120,243,157,
-183,105,180,187, 4, 74,248,209,120,183, 77, 40, 21, 39, 71,123, 28, 29,101,172,175, 47, 17,167, 77,116, 36, 8,123, 19,146,102,
-138, 19,206,223, 71,214,121, 79,191, 41, 40,198, 67,172,131,102,218,100,111,255, 57, 81, 18,250, 46,169,118,213,234, 32, 36,105,
- 47, 97,117,202,157,187, 15, 24,151, 22,113, 58, 32, 31,246, 88, 95, 95,161,213,110,249, 61,106, 33,169,202, 33, 65, 20, 67,145,
-205, 46, 46, 90, 75, 38,101,238,247,250,166,100,146, 21, 68, 73,131, 70,163,225, 71,214,129,166, 48, 37,142, 18, 33,193,102, 37,
- 70,104,143,113, 45,114,100,172, 16,174,162,154,140,253, 78, 85,105, 26,145,228,183,191,242, 69,182,239,127,131,239,252,228,167,
- 28, 71, 13,238, 62,126,142,171, 28, 65, 40,176,174,196, 73, 65,133,100, 82,130,116,190,219,141,235,136,222,208, 65, 44, 36, 90,
- 24, 63,213,145, 96,156,228,228, 56,231,254,103,123,188,254,198,229,217,184,183, 40, 74, 63,221,192,161,148,239,126, 28, 21, 74,
-106, 28, 83, 69,181,158,221,148,210,132,113, 76, 16,121, 59,150,214,194, 19,230,130, 8,103, 42,148,112,168, 58,164, 68, 43,233,
-139,172,242,221,186,212,254,254, 86, 58, 64, 41,141, 12, 66,111,205,180,162, 86, 77, 27,112, 22, 77,224,239, 43,107,124,234, 89,
-169,249,214,191,249, 75,158,109, 63,163, 42, 43,111, 75,139, 99,132,130, 48,116, 4,202,122, 70, 62,126,228,235,108, 70,158,157,
- 82,212,161, 45, 91,151, 47,251,180,180,201, 24, 81,228,126,191,173, 21, 42,138, 16,194, 55, 31, 81,146, 16, 52, 18,207, 33,176,
- 32,148,243,170,244,170,196, 24, 73, 16, 8,140,149,216,186, 83,159, 42,175,167, 93,171,176,142, 50,112, 4,198,167, 6,218, 0,
- 16, 21,202,213,121, 12, 90, 17,199,154, 32,210,168, 80, 35,181,242,254,117,165,208, 82,207,133,110,202, 59, 18, 28,198, 63,249,
-235, 28, 10, 87,139, 5,221,180,177,156, 1, 92, 22, 65, 50,115,197,187,199, 65,251,245,197, 92,144,187,192, 63,153,142,210, 63,
- 71,232,235, 22, 97, 94,204,196, 70, 94,241,110,124, 81,157,171,225,109,221, 57,251,238, 27,165,230,215,190,105, 30,186,173, 11,
-120, 93,212,167,227,120,103,189, 78,196,204,186,246,106,238, 75,159,213,197,233, 46,222,107,104,166, 24,227,178,244,220,130,162,
- 44,168, 42,131, 53,254,194,169,132, 32,144,117,184,149,146, 53, 90,121,154,154,103,209,211, 4,172,105, 16,139, 60,211, 9,187,
-217, 73,242,124, 55,254,170,226,122,230, 64, 48,165,243,188,160, 12,116, 24,241,162,192,225,151, 41,233,207,203,229, 95,222,217,
-203,207,107,215,177,206,210,239,247,216,220,218,226,206,103, 31,209,233,164, 28, 29,159, 34, 38, 67,142,159,239,178,178,117,137,
-222,211,156,178, 24,242,224,209, 93,190,254,141,223,224,223,254,187,127,203,229,213, 54,175,191,241, 22,185,117,252,248,189,247,
- 48,227, 83,146, 52,101,103,127,192,229,173, 46,110,251, 33,215,111,221,224,227,207, 62,101, 69, 71, 60,122,246,140, 48, 10,249,
-173,223,248, 45,190,255,227,247, 72,219, 75, 4,161, 96, 99, 99,137, 15, 63,126,159, 48,138,120,227, 75, 95,226,234,228, 54,255,
-250,207,255, 45, 34,140,144, 74,113,249,242, 21,170,108,194,112, 52,228,241,211,109,255,112, 51,149,239, 10, 2, 72,219, 29, 54,
-183, 46,210, 59,220,227,195,247,126,232,189,182, 65, 64, 86,248,189,239,218,202, 26, 23,183,214,249,222, 15, 31,211,108,182, 56,
- 58,238, 51, 41,188,151, 91, 42,229,195, 23,132,230,242,214, 37, 92, 89,242,116,251, 49,206, 24,142,123,167,132,105,130, 83,129,
- 63,113,202, 23, 73, 77,127,215, 29,251,223, 57,236, 5,137, 53, 26,167, 3, 90,237, 85, 86,215, 55, 24, 31, 62, 71, 9, 63,134,
-106,183,219,252,175,254,203,255, 5, 7, 39, 71,236,237,237,161, 75,195, 68,150,172, 92,190,232, 61,248, 31,191, 79, 26,133,168,
-178,226,100,255,136,157,103, 59,228,121, 65,137, 97,255,176,199,104,180,207, 91,239,124, 25,169, 29, 90,197, 60,120,120,151, 94,
-239,152, 27, 55,110,176, 62,206,184,114,237, 58,227,193,169, 23,230, 37, 49,101, 85, 49,201, 11,130, 48, 37,212,154,238,242, 18,
-131,225,128,143,159,125,204, 27,111,190,197,201,225, 17,130,146, 60,243,225, 29,206, 20,140, 71, 67,210,102,155,170, 44, 9,116,
- 64,101,124,135, 55, 49, 25,205, 36, 70, 40,205,213,203, 87,216, 61, 60,166,202,114, 2, 41,209,210,210,109, 55,217, 92,189,205,
-227,237, 71,236, 31,157,130,142, 41, 10,195,112, 60,102,146,101,180, 91, 13,239, 41,119, 37,224,136,181, 36,136, 3,202, 73,142,
- 84,138,110,167, 67, 62,153,248,145, 92,146, 82,230, 57,147,241, 24, 99,125,108,107,167,219,225,227, 79, 62, 37,137, 3, 86, 91,
- 9,161, 22, 52,210,168, 22,116,105, 63, 10,204,199,148,166, 36, 12, 67,172, 49, 68, 65,200, 68, 7, 12, 70,125, 78,143, 79,102,
-196,191, 34,175,232,245,188, 37,112,101,181,203, 36,203,144, 74, 32,195,168,102,248,199, 84,101,142, 49,134, 32, 44,145,166, 36,
- 27, 78,136,116,200,120,216,167,219, 72,248,189,223,248, 42,159,222,187,203, 94,111,215,167,166,105, 77,110, 44,129,246,187,103,
- 21, 4, 12, 70, 5, 50, 47, 73,147,128,202, 81, 79, 20, 65, 11,133, 42,203,218,210,104,189,167, 94, 8,134,131,156, 59,119, 30,
-115,235,245,139,168, 78,138,196, 33,170,186, 43, 52, 10, 53,219, 41,218,218,255,124, 14, 67, 42, 61,110, 88,232, 0,166, 59, 97,
- 41, 61,181,218,122, 92,114, 16, 42,130,200, 31,158, 4,198,135, 86,105,233, 19,215,116, 0,210,239,208,125,196,149,170, 3,178,
- 36, 86, 75,191, 57,151,245, 58,210, 56,242,113,193,119,190,249, 61, 30,124,246,128,165,165,101, 78, 38, 39,116,155, 77,164, 82,
- 32, 28,113, 18, 19, 7,138,209, 48,163,172, 74,162, 72, 80,153,130,170,200, 17,132,228,185, 97,115,115,195,187, 28, 76,197,201,
-225, 1, 54,109, 16, 8, 8,194, 16, 35, 36, 75,107, 27,132,113, 74, 18,167, 62,143, 93,131,118, 14, 91, 85,232, 64,215, 66, 45,
- 77, 96,173, 95,111,219,243, 69,125,174, 61,176,198, 98,172, 47,129, 74,121, 29,150, 87,185, 75,162, 56, 36,140,130, 89, 32,211,
-153, 40,229,250,235,205,174, 35,117, 77,152, 22,233, 69,102,165,157,238,219,103,188,254,179,234,181,122,142, 92,167,112, 58,102,
-108,153, 90, 51,229,234, 3,193,249, 14,253,252,203,105,227, 56, 21,203,205,225, 49,117, 71,111,234, 34,237,103,240,224,132,183,
-177,213,157,185, 96,161,168, 79,109,112,214,226,168,139,117, 77,128,243,205,123, 45,144,155,146, 11,207,216,191, 22,166,221,162,
-190, 63, 42, 63,197, 48,198,213,177,170,149,135, 18,213, 63,231,212, 94, 57, 69,243,158,229,223,131,122,243,230,133, 63,155, 70,
-240,169, 26,166, 47,165, 64, 77,233, 93, 11,190,197, 23,111,204, 62,254,252, 77,212, 24,208,249,219, 83,116,171, 59, 35,196,155,
-130,253, 95,245,117, 94,122,171,127, 41, 89,139, 34,149, 60,247,115, 75,249,138,207,245, 15, 70, 91, 26,110,222,184,198,100,212,
-167, 42, 38, 20,227, 49, 85, 97,121,178,179,195, 63,250,167,255,132,163,163, 62,150, 10, 25, 57,250,187,187,188,245,214,219,244,
-250,167,188,113,235, 38,131,254,128,195,253,125,191,187, 8, 34, 6,147,130,168,145, 34, 48,108,110,172,147,229, 19,168, 12, 73,
- 18, 51, 30,141, 25, 14, 71, 92,121,227, 77,190,253,183,223,103, 56, 30,177,187,183,203,179,221,231, 4,113,204, 32, 47, 40,138,
-138,253,103, 79, 89, 89, 93,227,247,127,239, 15,216,126,244,152,229,165, 46, 63,250,201,143,216, 63, 58,172, 31,222, 62, 72,192,
- 57,201,149,155,111,241,238,151,191,198,221,247,127,198,253, 79, 63,172,179,181, 59, 44,173,108,209, 93,222,228,250,245, 27,164,
- 50, 99,231,206,207,112, 2,182,247, 78, 56, 26,229, 84, 40,148, 10, 60,119,221, 41,254,248,143,254, 1,235,237, 22,191,248,209,
-247,232, 31,237,209, 72, 99, 54,175, 94,160, 16, 14, 35,167, 84,191, 87,163, 24,127, 85, 6,243,203, 14,123, 82,202, 25,243, 61,
-168, 73,114, 62,146, 49, 68,171,132, 80, 37,104,169,232, 52, 99,122,167,135,228, 85,198,112,148,241,238, 59,111,242,246, 27,215,
- 57, 62, 62,102, 52,169,232, 52, 27,188,253,133,215, 81,105,155, 94, 54, 33,203, 38,252,252,199, 63,227,224,201, 30, 79,238,111,
-115,124,124,196,254,233, 9, 63,250,249, 7,124,240,201, 35,194,184,197,181,171, 55,216,222,126,194,100, 52,166,221,106,147,198,
- 9, 58, 12,177,166,164,119,124, 72, 39,137, 48,197, 4,172,101, 82,148, 20,149,143,171,117,245,147,108, 48, 24,179,186,178,202,
-234,202,106, 61,217,242,163, 89, 83,228,100,147, 17,166, 42, 57,216,219,101,121,169,131,198, 32,108,129, 51, 5,189,147, 99,198,
-163, 9,167, 39, 3, 70,227, 9,161, 10, 81, 86,144,143,135, 30, 33, 42, 43,130, 64,209, 93, 94,162, 40, 13,214,121, 81,206,227,
-199,219,148,121, 81,163, 55,149, 15, 66, 81, 2, 41, 44, 90,122,223,111, 62,201, 16,206, 81,228, 5,195,225,152, 80,107,146, 36,
-161, 42, 75, 78, 79, 78, 24, 14, 6,116, 90, 77, 6,253, 30,119, 62,249,152,110,171, 53,139,193, 76,210,184,190, 64,123, 60,104,
- 89,100,184,170, 68, 74, 73, 81, 20,196, 81,138, 67,178,253,228, 41,205,102,131, 80, 9,108,229,161, 25, 30,215, 6,113, 24, 35,
-145, 32, 52, 73,167, 51, 27, 65,122, 75,167, 65, 84, 21,186,102, 83, 7, 58,100,116,124, 76,163, 17,115,229,218,101,126,241,139,
- 15, 72,162, 8, 33, 4,163,225,164, 30,107,107,162,200,199,140, 22,198, 17,134,186,198,180, 8, 10,107, 40,149,100,108, 45,133,
-241,240,152,166, 0,141, 35,210, 14,132,161, 55,236,147,164, 1, 73, 20,214,141,138,143,147,152, 61, 6, 37,245,158, 87,121,109,
- 66, 93, 44,148, 86, 4,181,216,107,102,197, 82,218,171,210,103,163,105,129,172,223,175,117,128, 10, 2,132,146, 62, 56, 37,136,
-144, 58,192, 9, 89,103,146,187, 25, 53,108,166, 51,114, 2, 87, 9, 6,253,140,127,251,175,255, 45, 71,123, 39,152,202, 17,167,
- 77, 42,231, 72, 27, 13,100, 16, 32, 48, 52, 27, 1,221,110,147,178,200, 40,202,140, 32, 84, 68, 73,236,109,106, 81,204,104,156,
-147, 54,218,180, 90,109,112,142,126,175, 71,149, 77, 8,149,100,208,239,209, 27, 14,217,184,124,149,205,107,215,136, 91,157,250,
- 0,195, 76,173,205,180,147,156, 22,195,218, 23,174, 85,157,138, 40,228, 66, 64,150, 56, 67, 76,147,210, 79, 4,124,110, 67, 64,
- 28,249, 64,166,121, 40, 83, 80,167, 40,250,251, 80,200, 5,255,182, 57,227, 23,171,193, 44,246, 44,164,170,126, 60, 82, 11,239,
-164,242,180,180, 89,120, 87, 93,232, 93,109, 57,116,181, 45,208, 57,139, 39,162,219, 58,179,194,206, 59,113,225, 22, 90,249,154,
- 20,231,252, 4,197, 85, 21,182,242,246, 50, 83, 21, 24, 83,249, 48, 31, 83,205,187,254,122,154,232,191, 76,253,115,215, 36, 66,
-166,163,115,103,112,174,154,117,238, 56,131,168,247,235,206, 26,172, 55, 23,215,117,208,205,114, 74,196, 2,201,206, 24, 40, 75,
- 67,158, 87,140,179,156, 73, 94, 80, 84,134,178,242, 95, 83, 74, 49,187,223,163, 48, 34, 8, 2, 63, 29, 81, 26,132,168, 59,117,
- 41, 17,142,153,144,100,126, 1,118,204,115,234,231, 34,186,197,208,122,113,174,115, 94, 28,157,191,176, 83,151,206,143,221, 61,
- 97,246,156,117,109,126,210, 16,139, 10,188, 23, 44,115,188, 52,153,231,151, 9,229,234, 24, 39,172,117,228,101, 73,111, 48,224,
-214,237,155, 28,239, 63,103,107,179,205,157,207,142,152,100,123,252,205, 95,125,155,215,222,122,135,159,253,100,159,173,205,117,
-118,239, 63,162,215,235,241,149, 95,251, 26,219, 79,182,249,228,147,187, 36, 81,200, 59, 95,252, 18,223,250,171,191, 97,121,125,
-139,201,100,194,175,255,238,239,241,173,111,126,139,110,156, 50,210, 57,178, 84,196,237, 22,187, 7, 7,116,175,104, 58, 75, 43,
-252,233,159,252, 3,222,255,233,123, 12,122, 61,134, 69, 70, 20,199,252,224,111,191, 79,138,228,205,155,175,241,239,255,221,159,
-115,249,210,101,242, 44,227,209,227,199, 51,239,130,178, 22,229,192, 56, 65,165, 82,158, 60,219,231,238, 71, 63, 39, 31, 13, 17,
- 66, 33, 80,100,149, 36, 76,219,164,129,100,231,222, 71,228,147, 17,174,217,101,156, 59, 74, 35,137,226,200,147,176, 84, 64,148,
-180,248,202,187, 95,226,206,251,191,192, 20, 25, 97, 20,176,117,121,139,220, 21,160, 37,214,189,156,233,240, 31,210,169,255, 50,
-208,208,153, 39, 50, 6, 39, 11, 63, 6, 68,209,236, 94,160,187,113,141,231,251, 71,188,245,198, 5, 26,137,162,127,124,204, 74,
-167,139, 8, 74, 78, 15,159,240, 23,255,230,125,210,181, 11,220,127,126,204,251, 31,126,200,241,193, 49,163, 65,129,181,158, 87,
-221,207,114,194, 56, 98,148, 87,188,245,238, 87,217,188,180,197,104,120,204,206,227,135, 72,155, 82,230, 25,207,247,119,137, 34,
-205,214,234, 18,189,131,103, 68,113,236, 45, 91, 50,196,212,207, 50,169, 3,170,202, 80,228, 5, 27, 27,107, 20,121,134,192,146,
-132, 1, 97,183,141, 45, 51,158,237, 28,112,176,191, 75,150,231,104, 5,171, 43, 43, 28, 31, 30,242,108,103,135, 40,136, 88, 90,
- 93,167,189,180, 66, 94, 9,174, 94,187, 73,183,217,196,149, 21,249,120,200, 36,180,132,161,162, 25, 46,211,108,117,233, 44,175,
- 32,165,226,228,232,136, 7,247,238, 50, 25,246, 88, 91,233,210,105, 37,190,192, 7,190,179,212, 82, 98,157, 79,239, 75,226, 4,
- 55,158, 48, 25, 13, 81, 74, 16,169,128,149, 78,155,202, 24,130, 72,241,165,183,223,224,224,249, 14,219, 79,119,136,211,152,188,
-240, 99,189, 48,244,207,125,107, 12,178, 22,238, 20,165, 69, 72, 69, 86, 11,216, 42, 43,208, 97, 68,212, 8,235, 52,192, 0, 81,
-227, 69,199,185,247,238, 98, 11,170,163, 67,226, 52,241,177, 67, 14,162, 40,194,150, 21,121, 94,161,162,148,236,100, 56, 75, 78,
-188,121,229, 2,255,252, 79,255, 17,255,135,255,243,255,157, 72, 9,100,160, 25,100, 21, 86, 24,116, 85, 98, 37, 84, 22,198,149,
- 87, 32, 43,169, 61,174,213, 26,130, 58,182,179,172,163, 54,168,119,141,129, 6, 41, 45, 79,158, 62,199,150, 5,155,171, 43, 30,
-121,106, 12, 66, 58,164,116,216, 74,160,116,133,160, 66,184,170,110, 4, 37,206, 84, 20,121,129,214,194, 31, 36, 42,227,187,230,
-133, 0, 19,107, 61,239,161, 50,118,238,111, 87,178, 46, 58, 1, 66,250, 29,181, 43,202, 5,145, 85,221, 12, 90,143, 55,222,223,
- 57,224, 7,223,253, 49,195,147, 9,101,105,145, 50, 96,146,231,232, 48,194, 8,137,194, 18,134, 1,163,201,132,110, 55,246,143,
-223,113,189,218,178, 21, 56,141,173, 74, 58,173,148,253,253,103,220,190,253, 22,105,154, 50,122, 56, 32,114, 21, 89,239,148, 56,
- 12, 81,105, 74, 99,109,133,180,187, 68, 24,198,148,166,168,119,217, 22, 93, 25,156,209, 88,109, 48, 65, 80,219, 73, 61, 80,102,
- 54,173,181,182, 94, 31,248, 78, 52, 8,106, 49,157,172,119,198,181,123, 65, 43, 53,235,208, 61, 18,118,158,153,238,167,192,243,
- 48,146,233, 56,123,122,144, 16, 47,185,166, 76,213,241,214, 58,168, 12, 86, 25,132,177,160,106,225,162,240,149,103,198, 81,183,
-231,186,243, 26, 97,107,207, 67,173, 22,246,231,114,166,211,171, 5,109,166,170, 33, 48, 37,212, 93,186, 47,214,211,172,120, 47,
-204,196, 10,132,171, 94, 16, 2, 76,149,246, 82,184,249, 4, 1, 87, 31, 50,168, 29, 20, 83,138,157,123,193, 6,108,107, 98,157,
-169,124, 30, 73, 94, 26,138,178, 34, 47, 74, 95,204,167,171, 8, 41,106,119,129,246,135,158, 89,114,155,255,122,149,113,168,119,
-110, 93,252, 51,175,128,175,187,241,197,174, 92,248,174, 96,222,181, 79,187, 97, 81,171, 75,229, 12,232, 63,253,220,197,156,115,
-185,192,238, 21,117,136,200,226,215,153,125,173,233,235, 11, 57,187, 74,202, 51, 31,179,248, 62,113,238,227, 85,157,144,228,191,
-167,247, 74,122, 62,243,185,201,130,192,159, 26, 61,141,153,171,151, 47,113,176,255,156,195,253, 3,172,113,196, 73,200,147,237,
-103,124,245, 15,126, 15,107, 42, 78,158,238,240, 71,255,240,239,243,253, 31,254, 24, 37,180,167,139,125,122,143,215,110,223,228,
-240,168,207,133,107, 55,248,249,135, 31,113,220, 59,229,209,179,231, 92,191,113,147,193,104,194,205,215,223,228,189,247,223,231,
- 43,191,254,155, 52,218,203,116,151, 87, 57, 62, 60,100,116,114,204,224,244,132,175,127,229,215, 8,195,144,251,247, 31, 18,171,
-136,215,111,222, 98,105,109,141,222,176,207, 55,126,227, 27,252,187, 63,255,239, 25, 78,198, 51, 86,123,168,188,157,198,201,144,
-225,184,224,249,211,109,220,100, 64,127, 56,194, 74, 13, 42,160,176,154,165,118,135, 43, 43, 41, 31,255,228, 59, 72,105, 25, 91,
-205,246,254, 41,153,161, 78,101,147,132, 65,202,229,203, 55,248,227, 63,252, 67,190,253,231,255,134,227, 3,223, 85, 46, 45, 47,
-145, 59, 67,238,124,230,183, 64,254,210,162,252, 42, 59,227,231,233, 26,166,143, 47, 29,212,226,158, 96,126,170, 15, 66, 65, 16,
-120,149,179, 16, 10, 33, 21,173, 86,155,123,119,238,211,109,182,104, 45, 45,145, 70, 33,205,214, 18,107,235,235, 52, 84,201,238,
-163, 79,185,255,224, 17,255,254,175,127,206,195,231,167,216,180,201,195,163, 62, 71,121,193,216, 56,176,130, 86,146, 50,170, 74,
- 94,187,125,157,175,124,233,117, 92, 49,228,248,224, 57,195,225, 41,227,209,136,222,233, 41, 90, 10,134,189, 19,150,218, 77, 86,
-151,150,112,206, 50,153,100, 72, 44,113,160, 8,181,164,200,114, 78,143, 14,105, 38, 9,249,176,207,120,112, 90, 91,217, 38,140,
-198, 99,239,171, 14, 67,170,162,100,123,251, 17,143, 31, 61,226,112,239,128, 86,171,205,218,198, 38,198, 66, 89, 57,172, 19,252,
-226, 23,191,160,219,106,146,196, 1,214,249,139,109,218,104, 80, 25,232, 15, 38,116,218,109,170,124, 66, 18,133, 92,220,218, 98,
-127,127,151,124, 60,166,213,104, 32,149,223,167, 89,107, 41,138,114, 78,223, 18, 18,231,224,228,228, 4,132,160,172, 10,175,109,
-168, 59,162, 52,137,185,114,229, 50, 31,124,240, 49, 39, 39, 39,180,219, 77,186,157, 54,129, 14,208, 74,131, 3, 29,106, 38,131,
-190, 39, 15, 74,143, 47,213,161, 38, 77, 83, 90,173, 6, 97,172, 80,161, 34,105,196,126, 12, 29, 4, 80, 11,116, 26,205, 70, 61,
-158,207,145, 14,148, 0, 83,148,216,178,228,180,119,202,225,193, 17,166,178,100,227, 9, 65,232, 35,100,187,157, 37,126,246,179,
-143, 57, 60,233, 81, 56,193,160,240,227,201, 40, 84,228,149,161,172,179,181, 99,237,193, 39, 86,120,169, 86,233, 32, 51,254,114,
-217, 18,130, 72, 66,164, 5, 58, 0, 25,128,212,142,188,204, 49,149, 33, 73, 18, 2,173,106, 10,230, 20, 47, 90, 35,135,241,169,
- 86, 2, 63, 34,245, 96, 30, 57,215, 23,213,120,102, 95,224,204, 76, 82, 45, 22, 68, 86,162,190, 6, 89,231,144, 78,248, 90, 80,
-121,255,241,116,108,237,172,196,217,128, 59,119, 31,241,237,111,125,143,108, 82, 1,138,178,112, 88, 36,133, 49,180,187,203, 20,
- 85, 69, 28,105,154,173,148,178,204,208,218,107,129,180,242,247,103, 16,249, 24, 85, 33, 37, 81,156, 98,173, 32, 74,155,180,187,
- 75,152,170, 98,220, 59, 98, 60, 28,145, 87,150, 66, 72, 46,220,188,201,210,198, 70,237,157,159,239,111,125,135,238,139,150,152,
-118,208,178, 14,122, 82,178, 22, 99,201,133, 36, 53,113,102, 76, 44,132,168,237,106,154, 32,244,222,253,197,248,100,143,134, 85,
-245, 42, 65,212,123,103, 63,225,153,130, 89, 48,182, 30,190,219, 51, 1, 98,243, 68, 54,191, 14,145,114,138,140, 21, 11,194, 44,
- 59, 27,121, 51,227,166,251,174,216,213,246,177,233,239,231, 63,102,218, 85,219,250,230, 81,194,174,238,160,157,245, 0, 24, 87,
-249,194,110,109,181,240,241,117,218, 95, 93,203,212,116,226, 88, 95,207,212,130,213, 78, 10,255,120, 16, 44,140,242,103,106,122,
-127,208,176,118, 58, 45,153,255, 56,206, 58,140, 1, 83, 89,223,165, 23, 21,227, 73,193, 56, 47, 40, 42, 75,101,234,248,215, 41,
- 83, 65,201, 89,135,111,141,165,172, 12, 69,229,247,239,234,157,215, 46,253,153, 84,226,236, 24, 91, 76, 9,101, 98, 94,236,229,
-139, 24,193,249,120, 93,190, 80,148,117, 93,244,117, 93, 76,103, 95,179,126,125, 42,158,152,127,158, 90, 64, 21, 78,227, 54, 23,
-255, 93,204,254,205,167,119,249,226,173,228,252, 99,212,194,207,177, 88,240,167, 55, 61, 85,100, 42,141, 49,150, 70, 35,161,221,
-110,240,217,167,119,252, 88,222, 58, 26, 65,200, 47, 62,254,132,127,240,247,255, 33,207,158,236, 82, 74,193,229, 75, 23,184,123,
-127,155, 79,238,220,227,181, 27, 87, 57, 62, 62,225,233,254, 49,119, 31,110, 99,172,229,127,246, 63,255, 19,238,221,127, 64, 28,
-198,136, 80,147, 4, 49,207, 78,142,233,245, 7, 4,113,196, 79,126,242, 99,110, 92,185,204,195,123,119,185,117,235, 54,159,125,
-118,135, 79, 62,187,195,133,205, 13,222,253,210,151,184,121,235, 53,142,135, 61, 90, 75, 29, 62,249,236, 19, 30, 63,126, 92,167,
-239,120,209, 83, 20,196,232, 32,225,198,245,155,148,227, 33,161, 52, 28, 29, 31,145, 89, 7, 65,136, 14, 20, 42, 72,184,118,113,
-139, 85,157,243,244,254,135,140, 42,195,209,168,224,104,152,225,116,140,148,138, 56,140,137,194,148,223,249,157, 63,228,194,202,
- 18, 63,253,254,119, 72,162,136, 86,171,193,164,200, 16, 74, 81,214,223,247,151,133,183,252, 42,227,247,151,233, 45,206, 20,245,
- 32,152,141,145,130, 96,186,143,147,117, 88,139,196, 74,229,199,155,166,162, 21, 37,172,111,173,209,110,182, 8,162, 22,151,174,
-223,226, 23, 63,255, 17,207,158, 61,229,147, 71, 7,124,186, 51, 32, 19,146,147, 73, 78,102, 28,102, 26, 92, 3, 4, 97,194,164,
- 44,176,197,132, 47,189,113, 3, 81,142,216,219,121,194,163, 7,143,217,219, 63, 97,101,101,137,165, 78,155,118,187, 69, 85, 85,
-220,127,240,128,231,207,118,200,134, 61,170,108,132,173, 50,182, 31, 62,228,195,247,127,193,222,179,103,116, 26, 49,197,100,192,
-224,228,144,113,150,131, 10,216,220,186,192,107,111,126,129,205,205, 45, 58,221, 14, 91, 27, 27,172,174,174,177,186,190,133, 19,
-138,193, 56, 99,105,117,157,102,103,137, 48,142, 57, 58, 62,230, 39,239,253,128,188,152,144, 23, 5, 66, 40,154,173, 46, 78, 72,
- 30,111, 63,225,217,211,109, 30, 61,184,203,253,187,119, 25, 14, 6,116,219,109,174, 94,185, 66,156,196, 52, 26, 13,194, 32,164,
- 52,134,147, 94,223, 11,220,234,156,101,103, 45,141, 86,139, 48,138,121,250,116,135,193,176, 79,167,211, 66, 41,137,169, 10,223,
-213,200,144,209,104, 76, 24, 6, 36,113, 76, 24, 6,254,185, 36,132, 15, 6,170, 59,161,180,145,122,202,152, 20, 52,146,216, 71,
- 21,103, 99,194, 58,160, 99, 58, 54,157, 30, 26, 68,221,209, 4, 82,122,223,180, 14,209, 81,140, 51,142,180,217, 70, 69, 41,207,
-182,119,188,119,186,225, 35,111,145, 1, 74, 5,124,239,199, 63,198,133, 49,167,227, 28,128, 68,251, 68,198, 97, 97, 9,148, 38,
- 9,148, 31,125,214, 30, 94,131,100, 82, 57, 74,235,104, 1,177,148,132,210,213, 69,221, 33,180, 64,105, 73,101, 28,227, 73, 78,
-156,196, 68, 97, 88, 31,232,235,105,160,181, 94,233,239,124,177,169,202,130,170, 44,102,160, 25,137,155, 93,212, 93,229, 9,135,
-202,219, 51,188, 56,169,238, 8,197,212,155,108,124,151,235,140, 47, 20,170,198,155, 90, 3,101, 33,248,230, 95,126,151,159,254,
-228, 99,156, 11,169, 74,139, 19,138, 44, 43,144, 58, 32,175, 42, 90,237, 14,167,189, 30,113,172,105,119,155, 68,113, 64, 94,140,
-233,118, 91, 8, 12, 85,145,225,156,245, 99,127,237,197,125,141,118,135, 81, 86,208,104,119, 72, 27, 13,246,158, 63,161, 42, 13,
-195, 97, 70,123,109,157,245,107, 87,105,173,174,248, 48, 27,124,138,163, 88,240, 85,139, 51,227,247,186, 41,154,238,194,229, 66,
-212,169, 91, 20,188,214,227,119,229, 11,122, 24,132, 68, 97,176, 80,208, 3, 47,216,156, 34,200,103,246,184, 26,139, 90, 23,201,
-185, 76,214,157, 3,150,213, 10, 27, 89, 7,240,212,217, 0,211, 40, 85, 55,251,187,204,249,233,204,248,233, 21,118, 22,206,179,
-112,179,139, 5,221,212, 34, 54,255,249,182,126,191,171, 45,101,166,254, 26,211,189,186,172,215, 13, 98, 90,195, 88,160,226,213,
-169,151, 78,184, 90,103, 87,119,221,117,170,175,183,232,214, 58, 50,231,124,218,175,117, 51,150,252,116, 21, 98,140, 23,185,149,
-165, 37, 47, 42,178,172,168, 71,239, 21,165,113, 84,117,168,140,146,126, 69, 52,173,149, 2,127, 32,168,172, 63, 52, 84,149, 69,
-125,241,245,203,127,166,106, 74,207,244,143,160,234,144,141,121, 23,237, 79, 77,234,133,253,186,127, 16,204,119,240,243,155, 58,
-119, 0, 56, 3,165,153,125,238,217, 61,248,226,247, 83,139, 7,138,115, 63,203,217,151,103, 15, 19,243,195,128,172,247,245,231,
- 52, 0, 74,123,255,170,115, 20,101,198,213,171, 87,217,222,126,202,254,222, 33,166,172, 24, 79, 50, 38, 39,125, 14,143,122,124,
-245,119,255, 39,252,224,251, 63, 32,160,224,181, 47,188,131, 69,243,248,193,125,178, 44,163,189,178,193,202,198, 22,237, 78,147,
-227,131,231, 12, 6, 3, 2, 37,217,121,242,132, 36,137,232,116, 59, 52, 59, 77, 30, 61,121, 72, 40, 36, 56,203,214,165,203, 28,
-158,158,242,112,251, 9,221,229, 46,127,244,247,126, 31, 83, 85,252,236,253,143,232,141, 71,200, 64,243,195, 31,254,112,118,250,
-215, 58, 32,196, 33,100, 72,148,118,105, 37, 9,121,127, 31,103,114, 78,199, 25,185, 10,188, 15, 20, 75,210,104,242,246,173, 27,
-244,159,124,198,184,119, 68, 25, 52,216, 31,140,201,140, 32, 72, 26, 68, 81, 66, 18, 39,164,105,139, 63,253,211,127,198,243, 71,
-247,249,236,131,159,215,105,110,245,190, 74,107,170,202,204,236, 48,191,220,247, 47, 94, 10, 28, 58, 63, 81,251,149,139,186,142,
-208, 42, 38,144,190,171, 48, 18,178, 98,204,163, 59,159,208, 80,130, 11,151,215, 41,242,146,181, 11, 55, 24, 84,146,143,238,124,
-198,223,190,247, 17,191,120, 60,164,143,162, 16, 22, 99,252,138, 71,214, 74, 90, 35, 28, 85,189,251, 85,182, 36,116, 5,235,157,
- 6, 71,187,123,124,246,217, 99,246, 14,198,116,218, 49,157, 78,139,139,151,174,176,186,190,201,105,239,148,157,237, 7,148,227,
- 30,143,239,127,202, 71, 31,188,207,100, 56, 68, 90, 88, 95, 89, 70, 99, 56,220,219, 33,159, 12, 72, 58,203, 92,187,249, 58,183,
- 94,127,147,253,163, 99,142, 79, 78,125,154, 94, 16, 50, 24,142,177, 78,209,238, 46,211, 94, 90, 97,117, 99,147,180,213, 38, 73,
- 27, 92,191,121,157, 27, 55,175,176,177,185, 65,154, 52, 73, 27, 93,198,163,156,253,131, 67,214,214,215, 88, 89,106,209,109,166,
- 92,188,120,145,131,253, 3,126,254,179,159, 51, 26,143,235,204,249, 4,156,224,201,211,103,148,198,146, 52, 26, 40,169,106, 65,
-152, 97,146, 23, 84,149, 37,140,162, 89,147,229,247,186, 94, 57, 95, 84,158, 11,222,237,180, 57, 62, 62,162,217,104,176,212,233,
- 32,133,164, 40,114, 78, 79, 78,234,195,149,164, 50, 37,214, 20,128, 33, 84,146,124, 48, 36, 27,141, 80, 24,108, 89,224,170,138,
- 36,246, 86,202, 60,207,200,198, 99,164, 80, 56,227, 24, 14, 70, 76,198, 25, 50, 8, 40, 75,131,214, 33,141, 86,155, 86,103,137,
-245,203,151,136,210, 6,157,165, 21,110,191,249, 14,223,255,225,247,249,244,209, 51, 50,227,109, 87,177,242, 69,103, 88,122, 39,
- 65, 36,220,172,195,210, 82, 97,145,100,214, 81, 24, 75, 3, 65, 34, 64, 11, 75, 24, 8,100, 32, 16,218,211,219,116, 16, 83, 57,
-193,112, 56, 36, 14, 67,226, 40,240,201,127,194, 91,172, 36,118,118,225,183,149, 47,236,214,122, 14,253, 52, 73,203, 23,245,122,
- 52, 91,243,191,125, 33,177,245,219, 85, 13, 35,113, 84,101, 85,135, 14,249,107, 86, 85, 25,202,210,241,175,254,213,127,207,119,
-255,230, 39,116, 90, 27, 12, 71,185,183,237, 25, 63,105, 17,245,245, 53, 73, 82, 14,142, 14,105,181, 34,132,180,116,151, 58, 12,
-134, 61,194,192, 91, 46,173, 41,168, 76, 69, 16, 70,104, 29,225,132, 34,140, 18,140, 80, 32, 21,221,181, 85,202, 98,204,100,232,
-181, 27, 27, 87,174,178,121,227, 58,186,153,214, 53,217,206, 83,196,166,123,109, 59,183,114,249, 66,186,224, 99,159,197, 26,207,
-226,206,102, 91,209,169,234, 61, 8,207, 63,135,235,209,176,154, 95,251,103, 22,177,170,242,171, 9,107,102, 99,119, 95, 28, 23,
-147,219, 22, 3,194,252,253, 50, 29,183, 51,109,212,107,251,152,179,190,219,247,252,116, 59, 47,196,179,151,182, 30,165,207,133,
-111,211,223,247,172,183,220, 64, 85,157, 59, 20,248,191,189,172, 5,125,242, 37, 48, 54,183, 88,208,167, 7,151,154,144, 55,179,
-198, 89, 48,214,214,233,108,174,254,246,238,108, 58,107,173, 90,175,140,165,168, 42,138,188,100,146,229,140,198, 57,121, 81, 11,
-228,132, 68,235,105, 60,117, 52, 79,190, 83,114,142,211, 21, 10,135, 64,203,169,103, 83,190, 24,210, 34,167, 41, 71,139,119,246,
-212,235, 57,243,178,191, 60, 80,101,113,148,114, 94, 61,253,178,221,236, 98,145,112,231,236,112, 11, 25,171,243,127,249, 37, 94,
-245,151, 22,163,122,255,236,207,170,146,178,178, 60,217,217,229, 27,191,249, 59, 28, 31,246, 56, 58,216,243, 42,115, 35,185,247,
-209,135,196,203, 43,252,254, 31,252, 1,223,249,246,191,227,198, 23, 90, 8, 41, 89,218,188,192,189, 59,247,201,212, 49, 95,189,
-113,139,189,231,219,180,147, 24,181,181,206,227, 39,207,216, 88, 89,225,195, 79, 62, 70, 7, 33, 27,151, 47,147,164, 13, 46,174,
-174,242,232,225, 67,158, 60,127,198,104, 52,228,141,215, 95, 99,115,125,141,159,127,240, 1, 82, 6,172, 93,216,162,112,134,127,
-255,205,191,240, 86, 23, 4,113, 16, 81, 90,139,208, 17,101, 94,210, 93, 15, 25,103, 61,150,149,226,116, 56,164,130,217,254, 59,
-140,154,172,116, 58, 44, 37, 1,119, 14,119,145, 58, 32, 43, 13,167,163,140, 48,237, 16, 68, 1, 50,148, 20,165,229,234,250, 69,
-174, 92,218,224,131,239,254,247, 40, 12,163,222, 9,221,230, 38,141, 78,147,147,241,192,159,232,221,252,201, 59, 85,138,186, 87,
- 24, 7,207,253,133,120,249,218,125, 1, 17,251,146,109,186, 91, 80,158, 10, 59,101, 98, 11,134,131, 33,255,250,191,249,151, 68,
-249, 49,205, 27, 91,216,108,131, 60, 87, 4, 73,202,199,247, 31,241,227, 15,238,241,254,246,128,161, 85, 24, 29, 34, 92, 78, 36,
- 33,148,130,118,179, 65,171,211, 98, 82, 85, 92,187,117,139,189, 39,123,156,238, 61,227, 91,127,243, 51,170, 94, 31, 81, 12, 72,
- 34,197,250,122, 66,175,215,103, 50, 89,153,193, 27,150,150,150,176,217, 58, 75,237,148,108,220,224,147,207,238,112,113,115,131,
- 43, 87,174,147,151, 21,198, 85, 4, 67,205,197,205, 75,172, 92,185,197,209,201, 49,221,229,101, 6,189, 94,157,117, 30,208,235,
- 15, 89,219,188, 64,171,179, 68, 20, 39,140, 38, 25, 75,203, 43,179, 11, 84, 35,141,105,221,184, 72, 18, 37,164, 73,155,214,242,
- 26,123, 79,159,210,106, 55,176, 46, 67,218, 18,147, 79, 72,155, 77,218,205, 38,215,175, 95, 99, 52, 24,249,195, 99, 32, 73,194,
- 6, 71,135,167, 44,175,174, 80,230, 21, 34,168, 59,103, 1, 42,212,164,141,148, 52, 77,192, 89, 38,227,145,135, 93, 8,239,104,
-185,125,253, 18,131,147, 67, 30, 60,184, 79,146, 38, 60,124,240,136, 52,142, 89,238,118, 61,207, 62, 74,144, 58,164, 52,214,243,
-168,173,183,110, 13,250, 67,172,149,228,227,146,124,156,209,110, 53, 73,210,132, 42,155, 80, 84, 37,206, 73, 70,163, 17,206, 10,
-116, 16,179,191,127,200, 96, 56,160,217,238,144,196, 17,161, 10, 24, 79,252, 72,218,228, 61, 26,237, 54, 81,179, 67,148, 54,248,
-223,252,239,254,183,124,248, 47,254,215,244,119,142, 48, 14, 38,149,207,138,182, 66, 50,113,160, 10, 67,170, 36, 74,248,139,163,
- 22, 16,212,249, 43,185,112, 84,194,191, 33, 23,140, 27,190,139, 49, 4,161, 70, 32,120,190,119, 72, 89, 84,108,109,108,120, 76,
-174,112,168,250,176, 99,141,193, 88,111, 5,204,134, 21,167,166,192, 52, 83,170, 48,172,189,233,222,183,110, 43,137, 14,180,207,
-113, 83, 10, 66,141, 43, 53,132, 33,166,168, 80, 65,132,140, 20, 86, 72, 74,107, 40,141,165, 44, 37,251,251,167,228,149,224,184,
- 63, 70, 74,139, 10, 36,121,101,233,143,198, 44,135, 49, 81, 28,211, 31,143,200,243, 49,198,142,193,133,148,197,132,102,154,112,
-112,176,207,218,146, 15,206,169, 76,137,181,165, 79,241,138, 34,191,199,150,138, 44,159, 96, 77, 73,107,105,157,195,103, 39,132,
- 97,128, 43, 43, 26,113,130,147, 1, 78,218,185,206,220,129, 11,234,238, 84, 87, 88,163,209,182,222, 85, 59, 53,215, 85, 77,175,
-223, 51, 34,168,245, 33,118,213,252, 57,175,106,165,123,160,188, 87, 90, 46,160,160,157,115, 84,198,167,185, 97,167, 94,237,250,
- 0, 52, 21,223, 97,231,170,246,105,226,166, 59,187,255,198, 90,132,169,252,110, 90,152, 57,199,127,234, 68,179,115,176,217, 76,
-252,119,142,243, 62,157, 68, 44,106,192, 92,173,227,169, 91,106,127, 64,112,103, 87, 0, 78,184,153, 16,207, 15, 21,166,233,114,
- 53,123,222, 67, 93,234,251,135, 90,131, 0,214,201,250, 12,106,177, 78,213, 47, 69,237,128, 19, 51, 6,142, 1,156,243, 33, 60,
-101,173,101,201, 42,203, 36, 55,228,165,245,225, 60,245, 74, 36, 8, 52,113, 20,250,117,153,174,155, 89,193,252,123, 59,129, 52,
- 18, 45,197,180,139,118, 83,188, 46, 82,190,100, 28, 34,206,101,206,214, 74,206, 51,197,216,189, 60, 31,253,124, 97,255, 60,180,
- 44,224, 5, 9,175,234, 16, 95,129,136,125, 89, 2,220,121, 75,156,227, 44, 34,207, 26, 75, 54, 41,105,173,116,248,226,187, 95,
-228,163, 15,126,204,225,193,200,199,154, 42,195,251,127,251,151, 72, 55,226,107,191,253,123,252,213,183,190, 69, 26,134,252,206,
- 31,254, 61,122, 89,197,209,254, 1,127,249,205,255,129,165, 36,230,107,239,190,197,205, 75, 27,252,198,151,191,200,113,111,204,
-205, 27,215,216, 61, 60,230,240,228,148,201,112,192,123,143, 30,162,132,160,213,238,240,187,191,245, 13,180, 80, 60,126,252,152,
- 59,247,238,241, 27,191,245, 91,140,170,156,191,254,235,191,166, 42,203,249,131, 9,136,194, 8,235, 52, 23, 54, 59,244,199,135,
-184,178,100, 43,104,114, 88,148, 8, 37,136, 67,141, 34,164,221,222,228,221,215,223,166,232, 31,146,155,156,220, 58, 14,142, 79,
- 16, 65,125,186, 11, 37, 81, 43, 36,155,196,252,246,111,253, 62,178,234, 19,139, 49, 49,134,188, 42, 88, 91,234, 48, 9,192, 40,
-111,103,161,178,179,100,162, 57, 30,102, 65, 1, 60,221,175, 77,209,155,139, 92,247,133,221,216,203, 69,113,231, 99, 92, 23,252,
-240, 88,160,196,214,211,158, 70,148,114,101,109,131,167,159, 62, 33,210,150,221,167, 79,217,186,241, 22,143,159, 60,224,241,163,
-135,124,118,255, 9,185, 3, 43, 5,210, 89, 2, 17,178,218, 77, 9,156,225,221,183,223,228,187, 63,124,143, 73, 89,113,122,210,
-103,101,117,157,227,172,194,104,201, 95,255,228, 19, 94,223, 74,185,253,198, 77, 46,222,126,131,221,221,125,198,253, 62,135,135,
-135,172,173, 45, 99,109,133, 17,146, 94,102,200, 10, 71,115,121, 13, 41, 67,170,202, 48, 24, 13,233, 13, 7, 8, 39,201, 10, 71,
- 89,228, 8, 83,114,188,247,156, 42, 31,211,110, 54,232, 46, 47,147, 54, 90,108,108, 93,152, 93, 16,165,214,156,158, 28,115,114,
-114, 66, 81,148,124,227, 27,223,192, 25, 71,158,151, 24, 59, 70,199, 99,142, 79, 78,136,211,192,231,129, 35, 25, 12,199, 12, 71,
- 3,172, 49,108,109,109, 16,223,104,146, 13, 79,233,247, 79,217,125,182,207,160, 63, 36,109, 52,104,164, 9, 73, 24,214, 36, 56,
-127, 1,139, 98,141,146,126,226, 3,102, 22,178, 33, 5,216, 98,200,187,239,188, 65,187,213,228,253, 15, 62, 66,169, 8, 33, 21,
- 78, 56,162, 36, 37,136,188,114, 94, 43, 79, 15,203,199, 19,138,162,240,151,223, 48,161,185,148,120, 37,122, 62,198,140, 10,132,
-246, 86, 41,164, 70,202,128,225,104, 66,171, 25,114, 97, 99,147,125, 37,233, 15,251,108,173, 93,129,170, 98,212,235, 99,170,138,
-138, 24,153, 56,116,216, 64, 52,224,173,219, 87,249, 63,253, 31,255,247,252,211,255,226,191,228,232,228, 4,131,164, 44,253, 85,
-123,104, 10, 80, 26, 87,214,113,148,182,162, 29,134,232,172,194, 10,200,128,170,206, 72,151,206, 33,172, 15,188, 80, 78,160,176,
- 72, 87,161, 3,255, 59, 30,246, 6,228,165, 97,107, 99,141, 86, 18,130, 43,235,149,131, 64, 9,135, 49,134, 42, 47,153,152, 18,
- 81,230, 20, 51, 90,151, 7,207, 68, 81,128,214,158,160,102,165,196,150, 1, 65, 24, 33,156, 39,202,137,208, 55, 13,149,169,175,
-167, 72,140, 21, 12, 70, 5,198, 66, 86, 77, 56,220,123,206,230,198, 58, 78, 6,148, 66, 51,177, 80, 21, 5,170,168, 88, 91,239,
-176,188, 20,146, 38, 14, 87,141, 48,101,197,230,250, 6,187,207,159,176,180,212,241, 1, 59,227, 33,113,218, 38,172,159, 53,170,
- 6,136, 25, 83, 17, 69, 13,162, 36, 69, 5, 18,103,114,100,229, 16, 66, 97,165,159,158,120,229, 63, 72,229,185,253, 66,107,164,
- 53, 40,171,253,117,231,197, 49, 27,106,225, 26,106,140,153,217,217,168,199,210,114,186, 6,157, 22, 9,231, 41,121,117,164, 27,
-162, 78, 41,155,117,197,206,249,231,172,152,142,176,125, 39,186,120, 13,169,229, 99,245,106,131,121,144,184,144,115,190, 69,157,
-162, 86, 7,140,207, 10,184,125, 73,192,202, 98,113, 18,179, 48, 24, 55,123, 57,181,206, 57, 59,167,182, 33, 60, 8,105, 90,128,
-231, 58,138,121, 45,241,123,126,102, 5,123,218,145,251,141,140,168, 63, 86,204,149, 24,210,130, 85, 32,109, 61,193, 0, 43,235,
-209,187,129,188,116, 76, 10,203,164, 52,254, 49, 45, 21, 82, 11,194, 64,147,198, 33,113, 18,215, 66, 68,253, 66, 96,218,148, 78,
-167,222,125,227,234,159,249,241, 56,179,113,248,249,113,234,226, 46,125,246,246, 57,187,195, 76,196,182,240, 49,175,122,249, 42,
-155,220,236,227,166,251,242,250,228, 55, 35, 19,189,228,243, 62,239,237, 23,222,247,130,213, 77,122,235,210,100,204,237, 91,183,
- 56, 57, 62,101, 56, 24,131,169, 8,180, 99,117,181,195, 71, 31,125,202,104,144,241,123,191,253,219,220,187,119,151, 52,109,177,
-117,225, 2,101,145,243,229, 47,126,145, 56, 84, 60,186,255,144,163,131, 61, 6,131, 17,143, 31,111,179,251,124,159, 79, 62,185,
-203,100, 50,162,145,164,172, 47,175,178,177,186,206,165,205, 11,108,110,108,210,239, 15,216,222,126,194,215,190,246, 53, 6,163,
- 49,127,253,189,239, 82,213,148,162, 41, 19,177,170, 42,146, 36,225,194,218, 5,116, 26,208,223,123,206,107,221, 14, 39,253, 62,
-135, 85, 69, 37, 52,206, 42,194, 32,101,185,213,225,237,219,215, 56,222,125,136,115, 5, 71,195, 49,123,253,140, 40, 13, 64, 4,
-168, 40,162,114,146,118,123,149,127,254,159,254,103,156, 62,187,207,193,246, 3,132,117,172,175,175,161,227,144, 97,145, 81,213,
-132, 40, 49,205, 34,158,247,217,231,200,124,175,166, 7,186, 95, 97,175,174,166,163,187,115,150,182, 80,251,241,157,208,126,167,
-174,165,226,210,198, 10,195,147,103, 92,189,188,137,173,224,244,232,128, 79, 63,254,144,191,250,219,159,241,228,104, 64, 41, 66,
-148, 12,105, 37, 49, 27,203,109, 46,109,172,210,140, 67,142, 15,246,107, 60,107,135,229,229, 85,238, 63,124,136,147,138, 73,149,
-131,128,113, 94,241, 47,254,151,255,130,102,119,153,165,149, 53, 54, 47, 92,196, 58,199,157,123,247,216,219,219,103,117,109, 13,
-161, 36,155, 23, 46,176,177,121,137, 39, 59,207, 41, 74,195,113,175,207,218,230, 22, 72,201,193,222, 1, 97, 20, 17,198, 49,199,
-199,199, 52, 27, 45,174, 94,191,142,144, 62, 22, 54, 73, 18,202,178, 96, 52, 26, 81, 86, 37,205,102,147,229,229,101,170,170,196,
- 90, 67,160,235, 76,120,227, 40,178, 9,187,187, 59,228,217,136,147,163, 3,138,201,132,229,110,151, 52,137,124,178, 26,146, 60,
-203, 24,142, 6,117, 66, 88, 66, 94,102,244,251,167,180, 90, 13,226, 56, 38, 10, 52,113,160, 73, 35,141, 45,115,156,241, 12,244,
-209,112, 76, 54,201,201,139,210,123,149, 5, 40, 29,210,106,119,105,182, 58,124,240,193, 7,132, 97,200,234,250,154, 87,248, 23,
- 69, 13,159, 81, 53,213,170,194,152,106,182, 58,211, 81, 72,123,115, 29,162,136,254,112,224, 15, 4, 86,224, 80, 68, 81,204,112,
- 56, 66, 41, 77,158,231,132, 81,192,242, 82,135, 86, 51, 65,107,201,202,198, 6, 74, 11,154,205,148,168,153, 16, 44,119, 65, 43,
-156, 82, 92,186,120,141, 27,183,110,243,239,191,245, 23,104,107,136, 43, 67, 43, 14,201,157, 69, 24,127, 51,245,101, 54, 14, 66,
- 50, 11,131,170, 34,112,208, 20,130,134,115,132, 90,160, 35,137, 14,167, 22, 86,137, 80,170,222, 67, 7, 72,229,247,253,131, 65,
- 31,173, 20, 81, 24,213, 86, 79,233,161, 62, 90,251, 14, 8, 31,213, 90, 25,207,146, 47,203, 90,133,108, 37,198,128, 80, 33, 78,
- 40,156,208, 40,237,105,114, 50, 8,176,194, 71,215,250,108,115,137,181,134,170,114,252,226,231, 31,113,112,120,236,191, 78, 81,
- 32,157,100,146,149,232, 32,246,209,171,197, 24, 45, 13,166, 26,209,110, 10, 54, 55,215,188,149,173,200,232,180, 91,104, 45, 57,
- 58, 60, 32,142, 52, 97, 24, 33,164, 38, 78,154, 8, 29,146, 54,155, 76,242, 98, 38,156,171,170,130,209,112, 72,163,213, 66,197,
- 33,237,149, 21,172,231,180,214,142,174,122,159,238,166, 74,116, 55,155,200,157,191,126, 46, 10, 92,207,215,132,233,222,125,250,
-186, 23,182, 77,139,140,157,227,193,141,169, 81,169,213,108,159, 62,231,159,184, 51, 22,106,199,153, 30,178,254, 25,188, 45,109,
-106,137,243,216,212,106, 38,134,155,237,196,167,249,228, 83,225,155,181,184, 58, 13,205,218, 69, 81,156, 89,192,179,206, 45,117,
-118,102, 67,115,179,183,173,179,179,157,248,140,243,238,196,244, 28,225,253,228,214,205, 10,180, 91,160,207, 81, 31, 0, 22,225,
-105, 78, 44,164,204, 77,179,226,133,160,172, 42,242,194,115, 49, 38,147,140,178,168,252, 40, 93, 43,162, 40,162,145,198, 52,154,
- 62,151, 34, 77, 19,175, 17,137,194,217,181, 51, 8,194, 89,177,215,103,194, 91,102,133,240,229,193, 44,231,255, 77,184, 87,195,
-104, 88,132,137, 77, 67, 61,156,152,157,195,188,175,117,126, 34, 58, 59,226,159,219,230,156, 59,155,202,230,156,120, 65,141, 41,
- 94,176,191,137,133, 60,245,179, 9,111, 44,172,136,102, 39, 54, 7, 79,119,158,241,214, 23,190, 76,149, 11, 2,181,237,199, 89,
-197, 0, 81, 90,158,223,191,199,127,119,124,194,239,254,193,239,241,100,231, 25,199,199,167, 28, 29,159,112, 97,125,157,102,167,
-203,215,190,246, 53,158, 60,221,161,209,236,208,153,148,156,244, 71,116, 55,111,250, 88,207,102,147,231,219,143, 56, 60,220,103,
-109,125,147,135,143,159,176,180,178,204,215,126,227,183,248,241, 79,127,204,253, 71,143,106,181,185,168,115,142,245,236,193,148,
-101, 19,130, 48,224,233,222, 54, 75, 8, 26, 66,112,223,228, 20, 90,160, 8,208, 97, 3,137,230,250,197, 11, 60,188,243, 33,123,
- 59,119, 25, 23, 35,158, 28,101,184, 36, 32, 12, 21, 78, 8,130, 40,165, 18,154, 55,223,124,131, 88,149, 60,188,255, 41, 39,187,
-207,176,214,209,236, 44, 51,174, 74,202,178,242,251, 47,107, 17, 74,176, 24,162, 39,206,119,216,130,255, 63,254,119, 54, 6,179,
- 14,210,154,205,242,211, 52,229, 11,239,124,145,205,149,132,254,233,152,254,225, 51, 78,159, 63,196,100, 57,113,179,195, 23,223,
-254, 58,221, 56, 33, 27, 30, 96,237,132, 50, 27,115,124,120,204, 31,252,246,111,114,241,242, 85, 12,154,131,227, 30,198, 56, 62,
-125,248,136, 74, 72,134, 56, 66, 37,113, 81,139, 72, 22,100,147,130, 81, 57,193, 42,197,198,133, 75, 28,237,239, 81,213, 42,102,
-100, 72,110, 37,199,195,156,175,124,237, 13,134,147, 33, 43,107, 43,236,238,236,160,162,140,237,237,109,150, 86,150,233, 44,173,
-160, 2, 77,127, 48, 64,168,128,178, 50, 28, 28, 30,112,114,124,136, 82,154,139, 23, 47, 18,199, 33,113,156, 48, 26, 53,249,248,
-163, 15,233,180, 98,207,253,214, 33,215,174, 93, 35, 13, 3, 98, 37,232, 46,173,178,243,116, 7, 87, 25,154,173,136, 36,137, 81,
- 74,178,191,191,135,210,130, 36, 13, 65, 57,190,244,238, 23,121,252,232, 33, 71,199, 7,148,249,216, 11,104,164,164, 17, 7, 4,
- 74, 82, 26,203,112,146,177,186,182, 65,160, 67,111, 91, 2,132, 12,144,202,103, 92, 95,185,126,149, 73, 49, 97,103,231, 9, 87,
-135, 87,233,118,218,245,225,210,119, 90, 90,107, 84,236,195,138,172,169, 80, 65,136, 12, 3, 42, 9,201,214, 58,203, 74,146,245,
-250,222,114, 4,190,179, 80, 83, 59, 86,151,170,204,137,130, 0,227, 12,165,112, 20,166, 98,229,230, 13, 6, 7,207, 25,155, 18,
-237, 42,100,144,160, 2,133,235,245,249,199,255,248,239,241,175,254,252, 15,249, 55,255,207,127,205,141, 40,100,236, 44,167,214,
- 11,140, 42, 4, 85,233, 71,164, 73,225,213,249,126, 14, 49,237,144, 4,198, 76,241,163, 94,212, 36,100, 13, 46,147, 2,161,133,
- 7,194,212, 69,103,239,248,132, 34, 47, 88, 95, 93, 37, 10, 67,172, 53, 40, 1, 74,122,148,242,244, 48,107,235,177,188,176,130,
-210, 74, 20, 33,165, 85, 56, 2,164,140, 48, 50,192, 72, 69, 85, 25,210, 56,162,189,212, 70,160, 41,138, 9, 14, 75,168, 53,141,
- 52,193,148, 5, 96,189, 74,125, 60, 65,168, 16,203, 0,173,154,244,135,135, 4,203, 41, 58,118, 12, 7, 5, 82, 94,162,170, 38,
- 36,113, 72,191,119, 66, 28, 39, 52, 27, 45,242,124, 66,156,164,158, 41, 80,149,184,202,127,205,178,200, 41,139, 2,227, 20, 73,
-171, 69,179,219, 5, 97,169,242, 33,152, 12, 33, 99,164, 86,179, 76,111, 41, 53, 66, 91, 76,165,145,218,160,140,242,158,160, 5,
- 52,236,249,195,250, 98, 65,159, 22,197,197,169,172,115, 22, 91, 89,159, 62,231,132, 63, 52,212, 44,243,105, 81,247,196, 58, 63,
-193, 16, 98, 10,102,159, 79, 8,196,249,213,156,173, 22,192, 44,102,118, 53,154,225,102, 29,103,104,114,231,225, 51,231, 81,177,
- 51, 88,205,185,108, 17,231,220,204, 51, 63,175,206,139,227, 97, 89,231,150,248, 7,149,117,110,150,145,226,206,212, 21,129, 91,
-216, 87,250, 62, 77,248, 9, 82,253,184,163,118, 84, 56, 87, 79,174, 43,131,144,101, 93, 48, 61, 45, 79,233, 0, 45, 37, 65,160,
- 8,195,128, 70, 51, 38,109,132,196,113,228, 15,168,181, 85,208, 24,139, 49, 6, 83,185, 89,237,211,211, 46,251, 87, 98,167,191,
-112,171,199,244,184,249, 62,132,133,144,151,115,121,236, 44,142, 49, 94,117, 80,168, 79, 51, 47,140,206, 63,199, 35,253, 42,242,
-220, 75, 95,175,105,128,179,144, 0,239,138, 97,146,229, 4, 65,202,181, 91, 55,233,245, 14, 8,116, 73, 16, 54, 56, 62,174,252,
-126,247,244,132,255,234,191,254,111,248,202, 87,126,141,219,183,111,209,109,183,177,192,103,159,222, 65, 43,197, 74,167, 73, 49,
-238, 19,234, 16, 81,142, 89, 95,106, 51,232, 29,242,252,201, 3,198,101,197,216, 24, 78,243,140,238,198, 38,143,119,158,240,254,
- 71, 31, 50, 28, 13,207,140,162,149, 80, 84,166,154, 77, 21, 74, 83,113,127,251, 30, 50,159,176,222,108,242,236,248,132,147,202,
-103, 67,135, 65, 76,144, 54,120,243,250, 13, 26,145,228,103, 63,251, 5, 42, 40, 57,205, 11, 38,206,143,238, 13,150,110,167, 67,
-216, 88,194, 16,242,229,119,222,230,100,255, 1,247, 62,120,143,157,135, 15, 88,217,220,164,176, 5, 89, 89, 32,165, 66, 11, 75,
- 37, 44, 78,120,161,153, 93, 28, 69, 33,206,250, 50, 95,178,238, 88, 60, 72,189,154,191,127,222,147,186,200,104,166, 54,138,248,
- 39,152, 64, 81, 20, 37, 65,156, 50, 24, 79,176, 66,163, 67,175,244, 54, 22,126,243,183,126,135,229,141,235, 28, 61,122, 0, 85,
- 78,163, 17,243,243, 79, 62,225, 55,190,242, 46,105,163,193,246,163,199,200, 48, 37, 12, 99, 86,154, 45,150, 26, 41, 71,163, 33,
- 89, 89, 50,204, 12, 89,110,216,106,166,100,163, 1, 39, 85,206,254,222, 46,155, 27, 27, 92,190,114, 5, 83, 85, 60,122,244,144,
-231,251, 71,180,186, 43,252,225,223,251, 79,216,220,216, 96, 92, 76,152,228, 19, 84, 16,179,178,190, 73,167,149,146,164, 9, 78,
- 40,223,133,149, 5,167, 71, 39, 12,199, 19,210, 36,166,219,110, 97, 42,195,209,193, 62,141, 70,211,199,181, 58,203, 87,190,244,
- 37,180, 18,180, 90, 45,142, 78,142, 9, 67, 69, 28,106,178,241,144, 92, 11,122, 39,167, 20,121,129,117, 13,172, 53, 28, 28, 28,
-227, 42, 71,154,164, 72,225,128,138,202,228, 92,186,180,197,198,218, 50, 90, 74,122,199, 39, 12,135,125, 40, 39,117,124,165,194,
-201,128,209, 56, 39, 78, 18, 2,165,253,133,192, 90,111,125, 9, 67,140,173,184,113,243, 6,215,111, 92,197, 85,198, 35, 94, 67,
- 77, 85, 24,223,229, 74,225, 39,103, 74, 50, 26, 13,105,133, 1, 74, 11,191,215, 53, 21,113,183, 77, 49,206,113,166, 68,106, 9,
- 82,178,121,233, 50, 71, 71,135,132, 73,140, 14, 36,214,228,148, 54, 32, 94, 91, 35, 76, 90,136, 64,147,232, 75,100,189, 35, 31,
- 21, 26,131, 12, 5,163,147,125,154,205, 6,255,244,159,254, 9,223,249,111,255,156,150,142,145,182, 64, 87, 6,161, 20, 10,197,
-184,202,113, 6, 6,121, 65, 16, 37,179, 3,255,116, 76,106,166, 20, 50,108,173,226, 22,245,234,193,119, 70, 74,250, 60,121,225,
-252,116,114,144,149, 84,251,135, 44,119, 59,116,154, 13, 31, 55, 92, 23,247,233, 5, 28, 28, 66,106, 80, 26,131,196, 72,141,145,
- 26,165, 35, 8, 60,185,173,180,208,238,180,232, 46,119,144, 90, 96, 10, 15, 25, 17, 88,132, 48, 68, 97,128,146, 14, 37, 43, 38,
-101, 70,238, 4, 58,196, 39, 14, 38,138,201,184,207, 64,143,232, 54,187,164,113, 76, 62, 25, 32,169,176, 22,210, 70,155,201,120,
- 68,150,101, 52, 26, 49, 32,169,170,138, 44, 27,147,132, 49,206, 84,196, 81,128,169, 10,242, 74, 16, 39, 41,221,213, 85,178,193,
- 9,145,168,176,147, 1, 58,136, 49, 72,172,170,139,186, 86, 88,231, 69,109,214, 24, 92, 96,177,194,204, 56, 34, 83,141,203,116,
- 39, 59, 93,171,121, 72,140, 31, 43,203,154,142,183, 24,111,235,189,231,178, 86,212,155,121, 48, 76, 85,121,158,194,148,125, 34,
-167,182,217, 23, 19,214,102,241,168,245, 95,214,205, 50, 65,207, 38,170, 77, 11,231,226, 40,221, 89, 55,179,233,213,136,188, 25,
-241,237,204, 14, 87, 44,224,203,103, 32, 26,183, 80,212, 23, 14, 4, 83, 53,194, 52, 99, 94,170, 26,205, 42,102, 81,211,179,175,
-185,112, 42,153,133,155,213,247,151, 47,239,213, 60,153, 78,212,212,188,188, 64, 7, 1, 66, 22,254,159,165,167,127,250,213,169,
- 38, 78, 34,146, 56, 38,142,189,195, 96, 74,128,181, 53, 7, 97, 22,201, 90, 55,184,250,124,230,249,231, 69,168,190,248,114,118,
-133, 63,251,249,127,135,232,212,151,221,102,254,246,151, 1,254,207, 81,104, 94, 44, 42,226,213,241,171,245, 29, 54, 99,143, 59,
- 87,199,150,250, 24,206,131,227, 3,186,173, 54, 55,110,222,226,228,232, 57,121, 54, 33,137, 4,121,233,106, 8,146,227, 71, 63,
-254, 17,205,180,193, 27,111,188,201,230,230, 38, 95,255,141,223,100, 60,236,179,179,183,199, 96, 48,100,255,224,152,245,245, 11,
-244,198, 19,174, 92,187, 70, 37, 29,151,182, 46,144, 87,134,135,143, 30,113,247,222, 61,142, 79,142,231,163,152,233, 78,168, 30,
-247, 77,149,232,206,248, 39, 64,158,141, 88,215,154,113, 89,177, 91,148,148, 66, 16, 90,127,226,110, 52, 98,174, 94,218,224,167,
-223,251,107, 84,168,153,152,138, 94,102, 17, 65,224,119,121, 78,161,130,136,102,218, 98,107,235, 10,111,220,188,196,119,254,219,
-255, 11, 39,135, 59,104, 12,217,100, 68,137,193, 40, 1, 6,175, 24,175, 51,158,177,243, 19,249, 11,165,248, 60, 71,249,115, 2,
- 21,206,255, 45,220,231,125,157, 25,176,193,205,232, 76, 85, 85,113,114,218, 35, 32, 3, 17, 34,100,194, 73, 17,162,226,132,110,
-171,205,225,243, 39,196,202, 80,133, 1, 63,248,209,123,220,184,114,137,171, 55,110,240,224,254, 3,150,151, 87,136, 66, 77,171,
-221,228,245,215,110,177,253,116,155,188, 8,232, 27, 75,150, 85, 60,184,119,159,245,215, 47, 49, 56,122, 78,214,239,179,212, 74,
- 9,164, 35, 8,189, 5,240,250,141,155, 28, 28, 28,144, 52, 98, 86,150, 58,140, 71, 67,140,128,193,112,194, 96, 60, 33, 81, 1,
-141, 86,135,227,227, 35, 78,251,125,210,102,155,195,163, 99, 28, 2, 21,132,148,185, 35, 27,121,157, 68, 85, 25,198,163, 17,198,
- 24, 86,150, 87, 57,156,140, 49,149, 65,202, 61,132,132, 48,212,180, 26, 41, 38,207, 24,245, 78, 25, 14,134,244, 7, 67,210,198,
- 37,198,227, 49,135,123, 71, 92,190,116,217, 91,175,242, 28, 45, 4,101,158, 97, 42,131, 18, 2, 99, 61,178,179,209,108, 19, 72,
- 24, 14, 7, 76,242,146,246,114, 23,131, 36, 47, 61,203, 58,137, 67, 92,101,200,198, 35, 58, 73,204,104, 60, 65, 8, 65,168, 3,
- 68,164, 40,203, 28, 99, 75,180, 84, 56,231,163, 34, 21,130, 48, 10,253, 8,222, 25,108,145, 17,198, 1,100, 35,164,142,105, 52,
- 27,140,203, 1, 78, 42,207,203,178,142,149,205, 13,180, 18,104,145, 80,142,135,216, 80, 17, 54,155,136, 36,133,202, 18, 36, 41,
-102, 50,130,162,194, 77, 50,164, 11,177,147, 1,213,201, 30,175, 95,218, 98,169,211, 38, 82, 9,131,147, 35, 84,125, 1, 44,140,
-161,170,197,113,227,202,210,138,196,188,115,171, 5, 72,126,207,202, 44,112,106,250, 17, 98,161,248, 40,165,235, 78,201,239,155,
-141,144,156, 12, 71,228,101, 65,187,209,160,213, 72, 16,202,179,203,103, 33, 87,210, 19,187,194, 48, 66, 5, 33, 34, 80, 30,194,
- 34, 45, 65, 18,211,238,248,100, 62,148,168,135,197, 83,171,150,191,173,173, 54,113,102,140, 10, 35,160,196, 88, 65, 26, 53,177,
- 24,172,201,145, 20,152,202, 97,109, 76, 18, 46, 99,242,194,239,161,171, 18,155, 36, 52, 26, 9,195,225,144,189,221,125,214, 55,
-215,136,145, 4, 73, 74, 85,102,152,170, 36, 10, 2,138, 60, 71,232, 24, 29, 70,116,151,150,217,237, 31,144,157, 30, 48, 72, 82,
- 58,141,101,108,160,253,232, 91,122,106,159, 80, 22,161, 21,210, 4, 40,107, 17, 14,172, 16,103, 11,171,173,247,198, 82,122,207,
-254, 12,247, 58,151,201, 78, 33, 43,211,103,186,177,213, 25,168,204,140,246,134,173, 19,206,196, 28,197, 90,139,222,108, 29, 18,
-227,236, 60, 80, 69,212,121, 29, 76,187,223, 41, 86,118, 38, 74,155,238,210,235,162,110, 23,179,205,125,177, 61,147,115,190, 24,
-241, 60,141,222, 93,200, 77,247, 77,244,249, 46,127, 26,249,190,192,130,168,121,246,139,130,187, 89, 65, 95,108,100,235,207,153,
-234, 12, 28,212,201,127,211,107,159,215,117, 85,198,214,235,139,233, 99, 77,214,170,251,186,217,171,215, 72,231,215, 34,103, 86,
-221,204,115, 87,244,121, 17,218,171, 68, 78,191, 10, 18,244, 85,138,231,179,175,139, 51,111, 47, 76,219,235,137,193,124,231,125,
-166,104, 44, 70,184, 46,204,134,167, 31,247, 74, 53,252,130, 52, 91,214, 98, 26,123, 46, 60,198, 58,135,181, 21,141, 78,131,221,
-221, 93,186,205, 54, 81, 20,112,116,120,192,242,106,206,163,237, 35, 8, 35,138,188,192, 57, 65, 18, 71,188,247,222,123,252,228,
- 39, 63, 97,117,121,133,141,205, 77,186,203, 93,218, 91,107,172, 92,123,203, 43, 95,141,225,222,225, 9, 71, 71,167,188,119,247,
- 30,199,199,135,100, 89,118,230, 48,228,156,123, 73,158,248, 60,142, 79, 73, 65, 83,123, 1,217,147,201,152,177, 16, 72,161,113,
- 65, 72,212, 72,120,237,234, 37, 62,122,255,199,140,199, 61,130, 56,228,116, 84,146, 57, 65,170, 67,180, 80,196,173, 21,132,142,
-192, 56,126,253, 75, 95, 38,239, 31,208, 59,218, 38, 9, 21,153, 53,116,187, 45, 38,197, 4, 43, 67, 15,137, 48,126,191,229,166,
-112, 90,203,108,207,239,167, 90,246,151,142,223, 29, 47,142,187,206, 31, 8,102, 46,136, 89,103, 63,127, 2,217, 41, 24, 67, 88,
- 64, 17,198, 17, 81,156,112,255,206, 93,174,223,122,157,103,135, 25,101,122,129,183,111, 92,231,104,119,143,173,173, 53,238,124,
-124,151,143,239,220,165,217,108,113,227,214,109,122,163, 9, 59,123, 7, 60,121,190,203,107,175,191,206,233,104,200,157,251, 15,
- 80,161,196,148,121,253,132,145,124,243, 91,223,164, 89,188,197,147,199, 15, 24, 78,114, 54,183, 46,146,132,146, 52, 14,201,138,
-156,110,183, 75, 28, 39, 28,238,238,240,209,207,127, 74, 28,167, 36,237, 22, 34,138,136,227, 4,147,151,244, 71, 19,210, 86,135,
- 10, 15, 60, 90, 93, 91,101,127,127, 31, 76, 65,145, 85, 94,232, 53, 28,146,101, 57,167, 39,167,148,101,201,197,139,151,189,181,
-172, 52, 32, 36,105, 35,194,148, 57,237, 86,147,120, 26,161,170, 2,186, 43,203, 44,175,172, 80,149, 57,221, 78, 7,140, 97, 60,
- 26,226, 74, 77, 86, 84,180,154, 77,194, 48,164, 42, 75, 80,154,188, 40, 57, 61, 61,165, 42, 75,198, 89, 70, 97, 5, 43,151,110,
- 16,134, 33, 74, 9, 40, 11,242, 44, 35,137, 35, 6,195, 49,206,180,169,138,137,223,163, 11, 77, 28, 69, 8, 69,157,208, 85,225,
-156, 64, 7, 33, 56, 71, 16, 6,148,101, 78,239,244,152, 86,187, 77,172, 37, 78, 74, 42,211,199, 57, 77, 24, 41, 10,167,136,163,
-152, 32,137,144,218,147,183,132, 41, 8,226, 16,145, 6,136,192, 65,237,183,150, 85,137,178, 21, 34,203,161,172,112, 81, 68, 57,
- 25, 48, 60, 48,148,131,138,210,193,206, 96,232,175, 7, 14, 10, 83, 97,240,223,211, 72, 75, 85,249,199,138, 16,222, 62,228, 9,
- 99, 83, 53,181, 92,200,245,157, 70, 89,122,138,165, 14,165, 23, 0, 58,188,117, 73, 9, 31,163, 41, 37,133,115,140,202, 2, 59,
- 17,196, 97, 68, 28, 9,194,122, 87,169,180,223,203, 75, 29, 16, 68, 1,113, 26,145, 54, 19,154,141,148, 56, 12, 9, 67, 13,194,
-206,248,229, 62,243,218,243,105,133,131,110,167, 81,135,116, 76, 72, 18,191, 67,149,170, 66, 41,139, 49, 25, 74,218, 25,225,110,
- 50,202,176,109, 75, 80,139, 23,171, 34,199, 41, 72,146,148,241,120,204,120,156,209, 89, 94,161,145, 38, 84,206, 95,244,165,210,
- 94, 77, 93, 79,187,194, 40,162,211, 72, 56,221,127, 70,144,180, 73, 71, 99,212, 82,130,145, 14,225, 20, 82, 25,176, 62,208, 70,
-105,139,181,218, 71,162,158,139, 92,253,220,137,234, 66,242,166, 91,216,215, 79, 75,230,244, 50,109,169,109,128,211, 11,137,168,
- 67, 83,156,172, 21,245, 2, 39,253,223,192, 45, 8,221,132,152,254, 37,231, 13,144,117,243,233,222,153, 44,118, 55,247,125,207,
- 89,236,211, 3,197,252, 90,235,156, 59,215, 88,156,189, 38,249, 14,219,214, 56, 87,175, 76, 23, 83, 17,223, 52,205, 79,107,159,
- 17,160, 22, 2, 50,164, 56, 43, 34, 23,162,118, 91,205,249,242, 14,176,210, 46, 68,188, 66, 69, 9, 82,214,215, 62,127, 63,248,
-233,144,153, 77, 59,230,117, 66,250, 53,192,116,141,237,166, 28,124,255, 41,182,118, 40,232, 87,103,152,243, 43, 51,190, 95,149,
- 93,254,242,238,249,252, 62,252,229,183,197,255, 22, 79,135,142,186,147,124, 69,103,254,194,231, 47,252, 46,114, 97, 63,239,106,
-107,140,144,126, 8,228,172, 37, 47, 39,172,109,174,179,187,253,140,155,215,174,162,116, 68,127,100, 24,103,142, 79,158,236,227,
-148,164,170, 12,199, 39, 39, 84,149,223, 15,157,246,122, 28, 28,236, 19, 5,146,202, 66, 97,157,127, 98, 9, 65,229, 60,233,231,
-252,253,234,220, 44,107, 8, 33,164,207, 37,126, 89,135,235, 32,145, 48, 46, 12,125, 41,145, 68,196, 34,196, 68, 1,151,175, 94,
-166,234,159,176,183,187,237, 89,207,227, 49,131,204,160,226, 20,173, 99,226, 48, 34,136, 27, 24, 39, 88, 89, 90,230,246,213,203,
-252,240,187,255, 47,170,172, 71, 28, 73,154,173,150,191, 31,133, 64,168,218, 14, 36,197, 25, 70,181,148,126, 4, 47,167, 91, 10,
-241,106, 30,252,203, 34, 15, 63,239,113, 51, 11,246, 49, 62, 43,184,170, 42,170,170,244,196, 63, 63, 71, 35,208,126,151, 91,150,
- 37, 81,156,144,151, 57,159, 60,120, 74, 17,172,241,100,183,199,114, 55,165,154,244,216,220, 90,102,235,242,239,243,189,239,191,
- 71, 94, 24, 94,127,237, 18,123,123,123,124,239, 7, 63,228,100,216, 39, 47, 13, 7,253, 62,113,160,105, 54, 18,242,158,167,245,
-221,223,222, 97,251, 89, 3,108, 65, 32, 44, 39,135,123, 28, 31, 31,179,117,241, 10, 81,218, 36, 12, 52,101, 62,198,148, 25,223,
-249,235,191,102,107,107,131,219,111,190, 69,212,238,128,144,244, 70, 35,214,229, 38, 22,191, 3, 91, 93, 89, 97, 52, 30,162,132,
-160,215, 59, 97,121,105,133,254, 96,136,169, 74, 46,108,109,178,181,185,137, 49,142,123,247,239, 1,130,119,190,248,107,172,172,
-174,114,231,238,167, 60,218,126,130, 45, 11,150, 59,109,110, 93,191,206,133, 11, 23,144,145,166,172, 42,142, 14,143, 80, 86,162,
- 28, 40,225,152,140,198, 60,219,221,231,202,149, 43,180,181,247,128, 7, 97,204,202,218, 26,237,110,151,195,195, 99, 70,135, 7,
- 76, 70, 19,198, 69, 73,107,105,153, 64, 90, 2,145, 80,140,135,148,121, 78, 18, 69,244, 78,143, 9, 34, 47,184,137,195, 24, 83,
- 26, 42,235,125,186, 73, 28,205,159, 75,129, 6, 43, 49,214,135, 33,197,129,194,133, 26,161, 36,163,254, 16, 25, 38, 4,113,131,
-180,213, 65, 69, 30,192,132, 48,216,162,172, 33,222,222,135, 92,245,143, 40, 42,129,176, 16, 33,168, 78,143, 24, 31,157,208,110,
- 47, 49, 50,138,157,237,199,180,150, 87, 25,143, 5,121, 81,113,216, 31, 16, 3,101,173,122, 6, 31,119,234,156,165, 2,138,170,
-170,245, 58,110,158,187,237,106,190,186,181,243,161,173, 93, 8,216,174, 31,170, 90, 41, 60,174,205,175,179,132,146,117, 58,156,
-191,149,128,182, 14,237,220,124, 93,167, 36, 73, 18,146, 54, 27,164,205,152, 36, 13,137,131,192,219,221,116, 77,169,115,204,194,
- 70,100, 61, 98,182,206,177,177,177,234, 11,191,242, 96, 91, 36, 56,231, 69,155, 69,225,234,125,115,229,131,112,106, 28,113,187,
-211, 34, 47, 10,140,181,148, 85, 70, 85,131, 81,122,189, 62, 43,235,107, 88, 99,234,136,223,105,238, 54, 68,137,207, 82,111,196,
- 1, 73, 28,113,106, 13,189,147, 35,210,225,128,230,210,178,255,123,206, 68,195,202,243, 13,148, 23, 42,250,169, 28, 47,168,199,
- 95, 22,200, 53, 45,190, 30, 23,187, 80,176,103,153,223,117,145, 23, 11, 7, 5, 83,213,244, 55,137,181,117, 34,155,162,254, 89,
-228,236, 58, 63, 31,191,139,217,152,155,218, 17,180, 32,118,127,113,120, 56, 19,180,217, 25,252,101,241,128,114,230,107,215,126,
-242,105,199, 34, 22, 28, 61, 78,120, 54,187,155,122,209,241, 28,122,165, 3,148, 14,113,218,179,232, 61,211,126,177, 51,167, 22,
-194,185,121,170,220, 66, 3,227,157, 67,115,113,162, 53, 22,170,106,166,216,175,234,107,161, 88, 16, 20, 71, 81, 72, 20,134,158,
-199, 47,181,103, 64, 56,191, 75,119,211,223,161,142,178,157,254,157,212, 87,222,186, 62, 87,191,207,216,239,191, 66,177,172,215,
- 45,175, 4,145,204,162, 92,197,108,196,193,153,127,155, 27,250,103, 74,122,196,130, 95,241,243, 1, 39, 51,228,236, 66,254,187,
-156,126,205,197,183,153,127,204,162,250,112,254,115, 45, 62,232, 28,227,241,152,213,245, 85, 62,254,228, 19,110,221,126, 13,235,
- 12,205,102,194, 96, 52,161,215, 31, 35,129,188,172,102, 39,207, 40,128, 52, 82, 40,229, 24,142, 75, 10, 99,169,156,163,114,130,
-106,106,147, 88,176, 69,156,241, 41,178, 8,106, 17, 47,245,239, 77, 42, 71, 6, 88,167,145, 42, 32,142, 35,110, 95,218, 98,171,
-147,114,255,179, 95, 80, 81, 50,182,134,222,184, 68,138,128, 36,136,209, 58, 68, 68, 17,205, 72, 32, 84,194,239,254,238,239, 19,
-152, 62,159,252,205,191,243, 23,210,124,130,106, 47,161,210, 14, 81, 28,123,175,227,212,141, 34, 4, 74,168, 41, 40,105,129, 69,
- 48,127,162, 77,199, 97,110,150,116,196,108, 28, 53, 67, 74,184,197,212,188,133, 0, 31,225, 59,139, 64, 7, 40,225, 89,216,178,
-254,223, 31,182,132,135,199, 88, 3,213,132,227,253,199,236, 61,125,204,100, 48, 34, 31, 79,120,242,100,151, 86,187,139, 83,240,
- 96,251, 1,131,209,144,175,125,229,235, 72, 39,137,164, 96,181,157,114,101,107,141, 75, 23, 55,121,182,183,199,195,157, 61, 78,
- 39,185,255,153, 42,131, 40, 42, 4,142, 92, 8,172, 18,252,225,175,127,157, 91,183,222,100,229,242, 13,156,140, 57, 56,236, 51,
- 25, 14, 17,229,152,231, 15, 63,161, 24,247, 41, 69,196,250,250, 26,215,174, 93, 37,142, 35,226, 36, 97, 48,202,113, 42, 98,169,
-211,228, 96,239, 57,171,203,203,100,147, 49,195,126,143, 73, 54,228,225,195,251, 96, 75,180, 51,188,249,250,109, 2, 29, 82, 89,
- 71,175, 63,230,218,205,215,249,250, 55,126,155, 27,151, 86,185,116, 97,147,183,191,248, 14,105,163, 77,146, 54,249,163, 63,250,
- 35,190,244,206,219, 44, 45,181, 57, 61, 60, 96,112,210,227,228,224,216, 31,172,108,197,210,210, 50, 82,135, 52,151, 86,137,147,
- 20, 33, 4,141, 36,193, 86, 21,194, 73,164, 80,116,151,150, 9,226,136,167,207,158,211,104, 52, 89,233,116, 73,211, 24, 21, 5,
- 76,202, 49,213,120,132, 14, 98,114, 35,217, 63,234,209,104,117, 80, 74,162,181, 67, 58,203,179,167, 59, 4, 90, 34,149, 47, 0,
- 40,141, 74, 27, 68, 73,196,160,183,135, 41,115,198,131, 30,227,222, 0,165, 3, 12,146,194, 58,194,164,141, 10, 4,194,142,113,
-147, 19,164,153, 32,109,133, 48, 14,161, 2,138, 94,159,225,254, 51,196,104, 64,104, 5, 39,123, 39,228,227,140, 48, 12,184,243,
-233, 67,118,159, 62, 37, 9, 66,150,215, 47,240,183, 63,253,136,187, 59,123,100, 8, 10,111,141,198,212,220,114, 89, 23, 74, 35,
- 37, 85, 29, 28,211,144,130, 20, 8,177,196,145, 32,136, 4, 42, 0, 33, 53, 82,251, 92,115, 85, 3,174,230,164, 74,133, 22,158,
-164,167, 23,108, 89, 82, 80, 7,203, 40,132, 82, 53, 14,213, 39,145, 37,105, 72,146, 4, 36,145, 23, 35,106,165,234,224,151, 26,
-118, 5, 53,164,198,135,236,248,127,241,163,213, 31,252,248,199, 32, 13,105,172,144,206, 96, 41,144, 74, 16, 71, 33,163,193, 8,
-173, 44,157, 86, 64,218,140, 80,129, 70, 74,201, 56,203, 22,246,203, 32,180,194, 10, 75,101, 42, 86,215, 86,105,180,154, 12, 39,
- 57, 82,133, 32, 3,156,138, 16,182,242,250, 24, 83, 50,169, 12,195,209,136,165, 86, 74, 99,105, 13, 84,224,249,249,128,176, 22,
-105,166,236,115,127, 40,168,147,189,253, 36, 99,198, 63,119, 24,103, 48,206,212,120, 93, 59,243,110, 79, 35,101,167, 0, 30,234,
-152,210,217,248,184, 86,148,155,202,103,131, 87,149, 7, 68,205,148,229, 51, 45,141,152,209,215,102, 96,150,154, 39, 98,107,181,
-185,127, 41,102,215,205,133,245,247, 44,173,117,106, 41, 51,142, 51,202,117,235,188,150,196,213, 7, 17, 31, 53, 59,133,204,185,
-217, 53,203, 78, 15,136,245,251,164, 20,179,224, 26, 21,134,232, 48, 66, 69,145,143, 30, 14, 3,164,214,200, 32, 64, 6,254,250,
- 44,180, 94,232,228,107,168,215,140,140,167,144, 4, 11, 62,123,131, 41, 43,138, 44,103, 50, 26, 51, 30,101,245, 52,216, 32,165,
- 35,136, 20,141, 52,245,215,156, 56, 34,136, 60,212,103, 74,214,155, 89, 4, 22, 88,242,214,190,180, 83,255, 15, 11,235,248,229,
-193, 29,175,136, 74,253, 15,144, 82,203, 87,236,204, 63,247,251,212,177,118,159,247,243, 76,199, 55,135,135,135, 92,185,122,149,
-239,255,224,251,152,202,210,105,119,249,253,223,249,117,126,248,147,159, 51, 24,103,236,236,157,208,104,132,228,121, 73, 26,135,
-140, 71, 25,205,134,166,213,212,244,199,134,204,250,113,254,116,244, 50, 61, 64,184,151,237,149, 23,100,150,139, 58,139,133,180,
-122, 2,169,145, 50, 34, 12, 18,214, 59, 93, 46, 46,175,240,224,211, 15,177, 78,211, 47, 44,163,162, 68, 7, 9,145, 14,125,192,
- 71, 85, 16, 71, 13,130, 32,100,105,117,141, 75,155,235,124,250,131,111,162,170,146, 98,148, 99,131,152, 50, 43,105,175,198, 51,
- 61,196,212,199, 63, 61,232,136,217, 40,108,170,242,116,243,184,195,133, 95,230,151,133,188,156, 5, 15,205,127, 65,255,196,178,
-190, 59,159,158,210,165, 63,116,185,202, 98, 5, 84, 98,194,120, 60,228,248,244,148,227,253, 67,146,102,147,181,181,117,162, 70,
-202,147,135,219,132,129,228,194,214, 38, 0, 43,221, 54,225,205, 43,252,224, 71, 63,224,163,143, 63,228,181,183,222, 98,125,115,
-139,143,238, 63, 70, 66,125,241,118, 52,227,144, 40,110,241,240,228,104,198, 97,119,245,250,165,217,108,112,237,234, 37,218,141,
-132,167, 15,239, 17,134, 1,135, 7,251,136,164,226,143,255,248,127,202,163,199,143, 56, 58, 29,112,177,189,194,214,214, 50, 89,
- 94, 16,104,191,119, 29,141, 70, 88,107, 56, 57, 57, 33,155,140,248,194,155, 95,160,170, 74,194, 32,100,239,240,132, 40, 74,185,
-127,255, 17,121,101,248,226,151,127,141,103,207,118,168, 58, 33,173, 78,135, 34,207,185,116,233, 34,171, 43, 93,202,124,194,206,
-206,128,209,224,196,175, 95,218, 13,180, 22,156,158,156,178,178,113,153,184,213, 32, 77, 83,156, 84, 28, 31, 30,128, 21,228,101,
-233, 5,120,194, 99,117,173,113, 36,113,147,110,123,137,254,209, 49,131, 86,155,200,116,168,108, 6,182, 64, 83,225, 76, 70, 62,
-156,112,122,112, 72,167,145,144, 73, 75, 18, 72,146, 56, 37, 12, 2, 4, 80,149, 37,133, 49, 36, 74,227,202,138,102,103,153, 75,
-151,111, 83,142, 70, 80, 86,228, 89, 73,152, 44, 65,146,210, 31,103,236, 61,127, 76, 26, 41,218,141, 0,107, 10,100,160,144, 81,
-138, 11, 19, 2, 52, 74,104, 76, 86, 48,177, 32, 74,141,112,138,113,110,184,247,222,251,156, 14, 74,210, 32,226,224,176, 71,145,
-244,104,181,154, 72, 41, 48,204, 5, 69, 98, 81,225,140, 32,175,170, 25,182, 83, 46, 60,179,220,172, 56,212, 13, 0,194,103,169,
- 27, 11,202,183,122, 66,250, 80, 15,185,144, 30,168,132,207, 88,240, 97, 34,211,242, 54,199,152, 74, 89,235,198,102, 42,233, 57,
-176,107,234,117,246,235,170, 69,198,131,159,115, 53,155, 13, 58,157,132,227,211,156, 40, 14,145,194, 96,132,164,178, 22, 89,239,
- 89,157, 5, 29,104,194, 40, 4, 28,147,108, 76,229,115,101,209, 73,128, 20,130,102,154,208, 72, 35,132,242, 22,199,209,104, 12,
- 50,102,156,229,158,143,110,125, 94, 64,145,151, 68,113, 76,179,213,230,232,228,132,221,157, 39, 52, 46,222, 66,117, 34,144, 96,
-133,239, 62,167,182, 42,127,171,234,177,112,173, 86,183,102, 6,116,153, 93,155,220, 66,218,218, 2, 71,126,206,173,224,140,247,
-219, 88, 75,105, 43, 42, 99,235, 76,112,127,223,123,148,183, 79,203,243, 59, 99,102, 4,208,185, 2, 78,128,176, 11,187,233, 5,
- 21,246,204, 19,255,178,107,233,220,101, 53,229, 54,156,209,126,205,214,185, 51,122, 12,118,186, 18,119,211,221,116, 77,186,155,
- 98,115,235, 98,173,130, 0, 57, 45,230, 82, 46,236,213,231, 63,147, 19,188, 32,254, 19, 83,167,128,153, 78, 16,252,164,215,212,
-246,188,178, 40,168,202,114, 54, 85,208, 90,215,214,181,136, 40,142, 8,194, 96,102, 33,180,214,250,239, 61, 19,203,177,144, 34,
- 40,255,227,138,250,226, 69,253, 87, 45,232,175,202, 96,255, 15,249,158,159, 71,146,251,187,124,205,121,247,239, 69,115, 85, 85,
-113,112,112,192,213,107, 55,217,126,244,136,131,131, 3,222, 88, 93,225, 79,254,193, 31,242,139, 15, 62,102,216, 31,209,106,198,
-244,156, 33, 14, 52,185,112,140, 71, 37, 6,203, 82, 39,102, 48, 41, 25,101,211,196, 35,102, 10, 73,193, 89,167,196, 25,251,223,
- 34, 88,199,205,134, 65, 88,169, 64,249,136,199,164,145,210, 94,238,240,225,167, 31,225,138, 49,253,172,100, 92, 9,156, 12, 17,
- 65, 92,243,157, 61,250,210,228, 25,101,220,228,107,239,190, 75,126,114,192,254,195,251,216,211, 1, 69,238, 80, 97, 76,179,213,
- 69, 7,122, 78,134, 2, 76,189, 18, 88,100,200,201, 26,174,224,147,132,188,112, 69, 44, 60, 41,126,149,195,220,252, 99,220,236,
- 52,108,140, 57,147,252, 55,101, 35, 91,235, 48,202, 80, 97,193, 12, 57, 62,237, 97,156,224,205,119,222,101,255,228,148,103,123,
- 61, 78,203, 67,110,222,184,198,241,233, 17,131,222, 49,163, 65,143, 73,239,132,241,224, 4,107, 13,247,158,236,242,217,206, 62,
-173, 78,147, 48,212, 20,121, 73, 35,142,184,118,101,147,209,225, 17, 43,203, 43, 60, 27,156, 82, 86, 5, 15, 30, 62, 97,173, 25,
- 48,204,134,100,147,130,131,131, 67,138,118,155,253,195, 35, 94,187,121, 5, 25, 68, 8,157,250,117, 64,148,178,179,127,194,187,
- 27, 91,116,187, 29,222,255,249,207,216, 27, 58, 90,205, 22,159,125,246, 25,214, 86, 76, 38, 19, 54, 55,215,105,181,219,236,237,
- 31, 97,149,230,198,229,235, 4, 58, 66,132, 41,173,118,135,225,176,135,192, 50,206,115, 30, 62,122, 68, 86, 20, 8, 41,137, 3,
-133, 80, 14,147,141, 49,197, 24, 25,104,202,210, 39, 73,201, 64, 51,204, 38,112,122,204,178,116, 4, 65,224,173, 83,206, 71,195,
-234, 32,194, 9, 73, 81, 26,132,146, 68, 82,243,218,235,111,208, 59,220,231,224,217, 83,242,227,125,146, 36, 32, 74, 52, 74, 24,
-132,132, 52,212, 8, 91, 49,236,247, 89, 93,233,210,104,166, 20, 89, 49,243,164,107,165,200,202,194,235, 16,148,194, 88, 72,146,
- 46, 38,243,182,215, 32,145, 4,141, 54,193,242, 50,205, 36,226,224,209, 39,220,127,255,231, 92,189,184, 73, 24, 40,162,118,155,
-184, 25,161, 90, 93, 48,150,114,239, 25,157,118,151,225, 96,200, 73,127,200,160, 95,176,253,244, 57,207,119,119,113, 68,236,229,
- 99, 58,221, 46,147, 96,159, 75,155,155, 72,103, 49, 82,188, 18,126, 48,189, 40,215,129,194,117,188,170, 91, 24,169,158, 21, 99,
- 10,177,112,120,150, 32,164,171, 9,155, 83,142, 6,179, 12,117,191, 14,247,108,244, 25,155,124,154,186, 85,115,195,103,250, 24,
-103,193,201, 89, 69,147,181, 5, 10,225, 15, 14, 86, 64,154,198,172,173,109,114,218,239,163,181,255,126,121,105, 65, 24,202, 98,
-136,192, 18, 6,126,122, 96,141,171,133, 83, 10,165,124, 65,213,218,143, 93,139,124,226,243,203,163,148,201,100, 76,220,234,146,
- 52, 27, 88,153, 48,201,124,103, 61, 25,143,104, 38, 33, 97,160, 25, 13, 6,172, 46, 45,131, 51,156,238,239,177,210,104,249,131,
- 31,202,107, 0,132,244,226, 56,177,144, 15,238,230, 33, 40,212,209,166,130,233,235,102, 30, 87, 90, 23,118,129, 15,178,169, 21,
-101,115,143,183, 49, 84,166, 34, 55,198, 23,175,202, 31,150, 68, 29, 20,166,181, 68,217,169,112, 78,212, 33, 37,246,108, 77,145,
-212, 89, 32,139,123,107, 57, 91, 17,138,151, 58,105,236,124,219,226,230, 96, 25, 49,157,156,202, 41, 57,110, 58, 73,117,245,225,
-112, 58, 81,173,127,223, 26, 46, 51, 61,244,248,226,174,124, 65,215, 26, 37,213, 89, 1,223, 20,190,229,206,234,139,112,130,105,
- 22, 13,194, 79, 72,168,168,173,104, 21,121, 94, 80,148,229, 52, 54, 21,132, 36,138, 3, 26, 13,239,172,137,162,144, 32, 12,234,
- 76,142, 57, 75, 96, 90,196,173,181, 24,231,127, 39, 45, 4,234, 43,111, 94,251, 51,177,208,173, 73,241,226,248,253,101,187,238,
-105, 52,235, 43,247,226, 47, 41,224,191,140, 36,119,198,167,254,119, 12, 13,249,101, 69, 93, 44,128, 13, 94,246,223, 20, 78,224,
-247,187,150, 60,207, 25, 12,134,108, 93,184, 8, 66,242,209, 7,239,227,140,225,237,183, 94,227,250,213, 11, 44, 45,117,120,244,
-104,135, 40, 20, 40, 5, 81, 44,177,206,162,148,156,243,144,234,199,150,173,255,232,103, 18,131,197,130, 74,112,190, 97,175,199,
-208,211,222, 94, 98,165,223,229,133,113, 68, 26,135,156,158, 28, 96, 77,129, 16,142, 78,154,208, 8, 34, 42, 83,160, 2, 69, 24,
-132, 40, 37,137,226,216,195, 79,226, 54,191,245,181,175,242,217,143,191,207,224,217, 99,108, 54,162,114, 2, 17,183, 89,185,176,
- 85, 63, 73,168,187,242,179, 20,191,179,194, 70,177,240, 0,125,113,218,240,178,191,211,249,195,222, 89, 77, 5,103, 68,147,182,
-182,148, 88,252, 94,201, 86, 53, 87,220, 22, 30,145,185,177,201,234,250, 22,143,118,118,217, 61, 56,229,176, 55,224,181,219,215,
-185,124,105,147, 34, 27,147,141,199,108,173,118,217,121,242,152,251,219,207,200,157, 32,171, 44,227, 44, 99,115,109, 9, 76,133,
- 53,150,219,183,175,211, 74, 18,118,182,159, 50,204,115,140,115, 44, 37, 33, 87,214,155,148,217,128,211,147, 99,182,183,159,211,
-235,245,201,178,220, 67, 99,242,146,102,146,162,195, 24,161, 67, 94,123,227,109,150,150, 58, 28,237,239, 50,238,159,210, 72, 18,
- 26,141, 6, 65,160,152, 76, 38,164,105,138,177,176,191,127,196,164,116,220,120,253, 11, 76,242,146,241,100, 66,210,104, 80, 85,
- 37,227,225, 0, 37,125,138,218,120, 50, 97, 60, 30,251,168,214,110,155, 36, 84,196,181, 13, 12, 87, 17, 69, 17, 89, 89, 18,196,
- 17,173,118,139, 70,171, 65,220,136, 9, 2, 69,158,141,145, 66, 50, 26,101,196, 73,138,142, 99,226,110,151,168,219, 37, 76, 83,
-194, 52, 34,141, 2,170,201,152,227,253,231, 12,251, 61,242, 34, 99,156,229,232, 40,197, 10, 77,179,189,196,165,203, 87,232, 13,
-250, 76,242,156, 70,146,210,235,157, 50, 25, 15,105, 52,210,153, 2, 92,214, 65, 74, 85, 89,113,116,112,136, 84,202,231, 39,216,
-202, 31,244,176,164,237, 38,174,170,184,243,225,135,104, 1,166,170, 72, 58, 45,100, 26, 49,216,221,165,236,251,125,254,233,201,
- 41,187,187,199,140, 39, 21,219, 79,159, 49, 24,141, 41, 42,199, 36, 43, 40, 12,232, 56,101,253,226, 69,190,253,253, 31, 50,169,
-217,221,226, 37,207,105, 41,188, 34, 59, 5, 90, 66,146, 58, 71, 32, 28, 97, 44, 8, 34,252, 8, 94,249,189,177,174,113,166,126,
-205, 16,204, 66, 75,180,244,209,161,179, 0, 40, 37, 9,234,192,168,249, 77, 17, 6,154,112,154, 44,168,124,158,250,148,191, 61,
- 87, 33, 79,187, 77,234, 24,206,233,229,222, 23,164,147,211, 30,159,124,114,151, 40, 22, 4,129, 15,204, 18,206,145, 77, 74,180,
-128, 78, 59,160,145, 70,196, 81, 68, 16,120, 4,172,172, 69, 84, 74, 43,159, 83, 30, 40,138, 44, 35, 77, 83,242,162,162,217,234,
-208,232,172, 48,202, 42, 31,234, 97, 44,152,138,241,224,148, 64,250,131, 76,239,244,132, 70,154,226,100,136,147, 1, 81,163,225,
- 53, 69,198,131, 97,140,173,176, 85, 89,115,207,167, 72,212,233,104,221,205, 96, 53,206,212, 42,118, 83,199,219,205, 84,107,204,
-198,218,214, 24,170,178,162,170, 12,121,145, 83, 20, 37, 69,101,234,125,177,155,141,222,221, 57,176,213,220,250,181, 48,232,168,
- 73,115,178, 30, 93, 11,181, 48,210,174, 51,214,133,170, 71,221,211,247,207,166, 15,117, 14,187,156,142,192, 61,132, 72,214, 31,
- 43,245, 52,163,125, 26, 32,230, 31, 15, 98,118, 77,156,186,215,124, 49,215, 65,128, 10, 3,180, 14,145, 97,136,210,122,246,253,
- 56, 51,241,152,130,101,196,188, 8,203,179, 84, 86,172,197,150, 37,101,150, 51, 25, 79, 24, 14,134,140,199,153, 7, 67,213, 89,
-233,141, 70, 99, 6,154, 9, 34, 31,146, 51, 75, 60,149,114,150, 47, 63,251,221,102,135, 15,241,119,235,212, 95, 68, 8,126,206,
-216,253, 87, 96,179,191,236,243, 22, 11,199,171,124,234,159,215,157,159,231,204,159, 69,233,189, 98, 44,239, 94, 20,222, 9,169,
- 41,178, 9, 15, 31,109,179,190,177,193,173,215,110,115,255,222, 93,238,222,253,148,203, 87,174,240,214, 23,222,161,119,114,130,
-113,208, 27, 14,121,250,124, 31, 29, 4,228, 69,229,193, 11,211, 81,224,212, 50, 40,230,209,129, 66, 74, 92,101,102,234,123,137,
- 34,212, 1, 81,168, 73,227,152,205,245, 53, 90,205, 38,205,102,131, 88, 7,132,202,119,155, 85, 62,193, 86, 57,137, 22, 72, 42,
-170,201,152,147,222, 0,179, 59, 96, 76,137,146, 33, 82, 70, 32, 67,180, 84,124,229,157,183,201, 79,143, 48,163, 30,161,150,156,
- 76, 10,140, 82, 92, 88, 91, 67, 6, 1,142,170, 22,159,212, 97, 14,245,207,123,126,154, 32,241, 86, 23, 41, 36,182, 6, 64,136,
-255, 80, 0,205,194,254,171,114, 53, 76,194, 85, 88,235,247,185, 66, 20, 20, 40, 86, 90, 13, 58,157, 14,250,198, 13,164, 12, 56,
-233,143, 73,218, 29, 84,120,194, 86,171,193,238,147,135, 92,186,188,193,181,139,235,188,255,243,143, 56,221,221, 38,203,198, 30,
-124, 97, 45,129,242,118, 17,229, 44, 95,126,251, 13,222,255,232, 62,119,239, 63,224,205, 27,215,144, 74,146, 4, 17,216,146,167,
-251, 71,244,250,125, 98,237,187, 28,225, 42, 70,195,138,215,110, 93,227,254,189, 7,196,161, 38,137, 18,198,253, 30, 78,231,132,
- 23,182,216,127,246,132, 34, 27, 83,149, 19, 70,253,130,165, 78,139,141,181, 21, 76, 85, 48, 24, 78, 56, 29,140,184,125,251, 45,
-110,220,126,131,195,126,143,162,202,201, 38, 99, 70,227, 49,221, 78,147,102,171,225, 35, 91, 11,203,104, 56,100, 50, 26,210,109,
- 94, 66, 73,136, 2,237, 17,159,213,132, 34,207,193, 66, 85, 25, 86,214, 87, 89, 89, 93,165,211,109, 16, 54, 83,156, 53,104, 37,
-232,159,244,121,178,189, 77, 81, 22,172,172,173,211,136, 52, 40, 80,177, 36,141, 83,146, 84,161, 92,142, 20,190, 35,159, 88,135,
- 54, 10,167, 99,134,195,156,113, 86,176,113, 41,164,213, 93,225,228,248,144,172, 40,217,216,220, 96,216,239, 81,230, 57, 81, 28,
-121, 15,186, 9,252, 20,171, 24, 81, 85, 99,156,211, 88, 39,252,110,184, 20,136,202,129,141,184,120,245, 6,249, 96,128, 43, 38,
- 4,129,226,224,193, 29, 86,243, 33,249,201,136, 88, 69, 28, 30,159,114,116,112,196,233,241,136,225,216,208,105,119,184,118,253,
- 42,237,165,117, 14, 14,142,216,217,217, 99,127,239,128,139, 55,110,114,109,107,131,147,135,219,152, 26,126,240,130, 45,201, 89,
- 2,152,119,234, 51, 97,149, 23,169, 77, 53, 54, 74,121,136,135,146, 83, 50, 37,179,177,253,153,116,199, 89,168, 20,103, 83, 30,
-235,232, 99,191,225,117,179,215, 93, 29,238, 98,235,189,128,143,117,102, 30, 70, 82,119,129, 8,223,229,126,225,173,155,252,197,
- 95, 42,170, 58, 60, 68,105, 95,132, 3,237,136, 18, 77,146,250, 61,173,115,194,243, 2,234, 56,211,162, 40, 25, 14,135, 4, 65,
- 64, 26,199, 52,146,148,210, 89, 66, 29,242,124,119, 23,226, 14,113,107,133,124,144,213,227,115,195,120, 52, 32,148,150, 64, 75,
-132,173,168,138,140,234,244, 24,157, 54,105,173, 45,123, 75,219, 76,192,101,235, 14,211,205, 58,242,105,122,218,180, 83,199,214,
- 29, 58,211,174,125,225, 99,157,243,251,242,169,232,213,152, 26,138, 82,249, 21,219,153, 16,147,186,229,153,142,213, 49, 88, 33,
-234, 14,254,108,147, 39,153,194,208,234, 2,166,117,173,145,168, 11,153, 80, 47, 88, 99,231,161, 42,204,220, 52,152,133,152,214,
-233,238,121,193,244,238,106,208,146,135,239,212, 52, 58, 83, 97,169,167,137,114,161, 99, 87,211, 72, 88,127,112,152,206, 96,167,
-186,128, 41, 88,118, 38,140,147,202,139, 54,133,156,221,167,198,121, 96, 76, 85, 86,228, 89, 70,158, 23, 84,198,103,126, 4, 90,
- 19, 39, 33,141, 52, 33, 77, 19,162, 36,170, 19,249,228, 75,189,252,174,158, 44,251,169,176,197, 34,254,227,199,239, 47,219,173,
- 47,178,115,255, 46,176,152,207,251,122,159, 87,132,207,115,229,127,149,145,240, 75,119,245,103, 50,225,189, 77,164,172, 10,182,
-159, 60,101,121,185,203,151,191,250, 53,118,158,108, 51,232,247,249,214,183,254, 2,165, 34,110,189,241, 22,151,116,192, 59, 95,
-137,217,219,223,103,111,239,144,131,227, 19, 38,165, 99, 48, 46, 25,229, 5, 69, 81,224,156, 35,144,138, 40, 8,137,163,136,102,
-210,160,211,110,179,190,178,194,114,203,147,162, 54, 86, 87,112,182, 32, 14, 3,194, 64, 49, 26,244, 49,167, 99,154, 74,163, 27,
- 41, 46, 14, 72,211,152, 40,148,140, 70,125,246,158, 63, 35, 90,238,178, 55, 30, 48, 25,231,181, 53, 66, 2,154, 86,218,226,107,
-239,188,197,163,143,126,129,166, 98, 48, 24,114, 50,201, 88,187,176, 69,123,185,141,169, 31,176, 47,216, 4,234,251,206, 56,247,
- 82,154,212,116, 66,227,220,231, 41,223, 95,181, 83,159, 27, 51,172,243,214,163,178,242, 79,124, 89, 85,136,210,219,194,172, 19,
-164, 27, 43,148, 69,238,187,222,195, 99,242,194,177,178,182, 65,150, 25,168, 12,199,135, 59,244, 14, 12,169,190, 64,255,232,144,
-163,211, 17, 73, 51,225,234,149,203,228, 15,158, 98,113,148,206,146, 15, 70, 92,187,116,137, 94,191,224,209,222, 99, 84, 24, 34,
-148, 98, 99, 99,139,251,207,183, 57, 26,100,236, 30, 28,177,218, 12, 56, 61, 61, 69, 74,199,107,183,175, 98,138,138,102,218, 96,
-125,117, 5, 37, 65,216, 10,105, 39, 28, 60,185, 79,220,104,208,239,247,216,126,178, 77, 43,138,113,101,206, 96, 50, 98,152,229,
-116, 87, 54,248,181,175,255, 38,235, 27, 87,113, 2,214, 87,215, 25, 14,250, 76,226,144, 97,191, 71,167,211, 38,137, 2,156,181,
- 76,198, 19,180,128,201,160,135, 18, 80,140, 39, 36,237, 38, 42, 8,105,164, 45, 34, 29, 82, 10, 77,117, 60,164, 42, 12,249,100,
- 66,166, 29, 26,131,108, 36,196,141,148,163,231,251, 8,107,201,134,125,250,210, 34, 69, 65,212,108, 33,226,168,134,159, 56, 26,
-203, 93, 92,101,185,116,243,150, 39,179,229,254, 62, 95, 14, 27, 60,250,233,207, 88, 90,238,178,178,186, 76,187,213,244, 83, 4,
- 97,233,180,219,117, 58, 89,133, 41,189,111, 93,106,197,184,127, 66,153,143, 40,148,240,116, 43,101, 9,173, 68, 25, 65, 89,121,
- 31,242,149,235, 87, 9,147, 16,161,160, 56, 57, 98,114,218,163, 28, 21,156,244, 15, 41,138, 17, 59, 79,182,105, 52,150,104,196,
- 1,221,213, 37,214,183,214,137, 27, 75,220,126,253, 13, 62,252,232, 14,159,126,252, 49,189,131,125,110, 92,190,200, 47, 30, 62,
-193,204,184,113, 47,245,234, 16, 8,208, 78, 32,103,125,223,220, 93, 50,141,127,214,117, 74,163, 18,178,190,205, 35,153,103,201,
-100, 51, 33,157,239,222,245, 20, 94, 83,167, 70, 6, 74,249,143, 95, 16, 39, 77,199,201, 30,143,106,103, 22, 41, 37,228, 28,182,
-226, 44, 72,207,239, 95, 89,233,112,114,210, 99, 48, 46,104,183,197,255,143,182, 63, 15,178, 45,203,206,251,176,223,222,251,140,
-119,204,155,227,155,199,154,187,186,170,171, 27, 13,160,187,209, 13, 98,224, 4,146,160, 56, 25, 33,202,142,160, 21,146,172,160,
-100,202, 22, 35, 36, 51,108, 82,176,101,138,182,131,182, 34,172,160,109, 42,108,146, 22, 67, 38, 77, 75, 34, 65, 0,196,208, 0,
-129,102, 99,238, 70,117, 87,215,248,230, 57,231,204,155,119, 56,243,217,123,251,143,125,238,205,155,111,170,106, 0,124, 21, 25,
- 47,235,189,204,151,153,247,158,123,214, 94,107,125,223,239,195,247, 32,244,125,218,173, 54, 97,168,156,195,221, 44,218, 66,221,
-247,150,101, 25,135,135,135, 76,253,128, 94,183,231,242,212,219, 17,203,253,101,242,100,138, 23,180,169,138,124, 94,152, 77, 93,
- 49, 25, 13, 49,186, 34, 12,124,242, 52,193,215,138,122,122,132,201, 83,108, 16, 53, 66, 51,237,114,200,173,118,249,226,118, 6,
- 52,105,210,233,230,130,184,102,204, 62, 35,178,105,219,196,205,186, 34, 94,206,132,112, 70, 83,107, 51, 79, 30,211,198, 56, 32,
-144, 93, 88,103, 75,144, 86,206,199,232,139,214,230, 69, 31,182, 83,196, 59,161,163,242,124,188, 32,152,143,190,101, 99, 47,123,
- 42,188,198, 28,123,231, 49, 11,150, 54, 99, 79, 22,245,230,227, 22,243,217,141,214, 24,221, 56,172,230,195,203,133,245,196, 76,
-237,219,160, 10,197,252,106, 99, 65, 67, 65,179,162,108,126,110, 33,230,158, 45,219, 28,146,140,174,169,170,146, 60,207, 93,174,
- 66,147,236,231, 41, 73,232,187, 92,122,223,247,241, 2, 31, 79, 57,107, 35, 70, 52, 7,150,153,248,207,233, 20,234,186,162,174,
-106,167,160,175,170,223,191, 80,238,241, 66,251,188, 98,250,113,201,106,207,251,183,159,215,217, 63,175,208,127,215,163,251,249,
- 40, 77, 97, 76,137,244, 20,121, 90,241,112,107,135,131,209,136, 23,175, 92, 38,242,165,219,181,239, 30,242,187,223,252, 38,227,
-180,192,250,145,243,244, 10,151,134, 54,157,230, 24, 25,208,237, 14, 88,234,117, 88, 93, 30, 16, 72,111,206,176, 54, 85,205,232,
- 96, 72,103,176,140, 30,238, 67,153, 51,206, 71, 96, 74, 90,107, 3,130, 56,160, 72, 71,248,158,143,148, 5,158, 39, 88, 90,237,
- 35,149,160, 40,114,186, 43, 61, 42, 33, 25,151,134,112,146, 83, 23,123,120,210, 39, 80, 46, 45,234,139,159,255, 60,217,112,143,
-195,237,135,228,195, 3,210,170, 66,181, 58,156,123,225, 42,149,117,214, 49, 99, 23, 3,114,142,145,186,207,154,118, 44,198, 34,
-242, 60, 47,250,115,175,141,217, 94,157,185,253,197, 24,115,130,251,236, 71, 49, 82, 8,138,188, 36,203, 10,242,170, 34,205, 45,
-249,193, 33,111,189,245, 22, 38, 79,185,117,173,198,146,243,224,206,117,150,151, 34, 14,199, 57, 59,195,156,149, 13,201, 43, 47,
- 92,230,254,189, 59,120, 81, 68, 93,187,189,213,198,218, 6,219,163, 29, 90,189, 14,231,206,157,231, 32,169,168, 42, 67,107,208,
-102,227,244,121,182,110,189,199,238,254, 24, 63,136, 48,218,242,240,254, 67,246,118, 19,170,188,164,211,141, 57,181,177, 6,166,
- 66,231, 99, 70, 7, 30,155,123, 7,116, 7,203,140, 14, 15,209, 69,206, 40, 73,120,253,173,207,145,214, 32, 84, 72,105, 36,107,
-171,203,100,211, 67,164,176, 40, 33,104,181, 34,130,192,169,176,181, 53, 40, 41,177, 85, 77, 54, 77,200,166, 41,129,144,174,131,
-147, 18,169, 11, 60, 9,165,209,164,211, 12, 63,156,128,169,169, 83, 69, 62,242,232, 44, 47, 17, 69, 29,132, 53,120, 66, 96,171,
-130,108, 82, 35,109, 65,175, 46,240,219, 45, 84, 28,161,171,146,233,112,130,244, 66,132, 31, 35,140, 69,167, 71,110,204,170, 53,
-159,123,243,117,118,119,183,217,223,188,195,153, 51,167, 81, 66, 80,100, 57,251, 89, 66,183,221,162,174, 43,198,147, 9, 23, 46,
- 94, 66, 96,168,139,156, 42,203,169, 93,182, 41, 74, 10,200, 50,116, 93, 96,152, 98, 4, 20, 85, 73,105, 2,124,229,113,176, 63,
- 34,159,166, 20,121, 5, 8,222,126,251,119, 57,181,190,206,229, 75, 23,152, 76,114, 52, 6,105, 75,246, 15,182,201,106,203, 27,
-111,126, 26, 15,203, 71,215,175,241,202,213, 75,120,191,246, 59, 84,181,125,102, 65, 87,178,217,169,219, 38,231, 90,112, 34,154,
-121,177,104,251,190,239,186,245,217,232,189, 97,101,203, 38, 75, 94, 45,100, 78,120,158,114,241,192,158, 71,224,121, 46, 67,126,
- 30, 71, 58,147, 87,193,226, 92,107,190,207,229,120,173,230,104,116,238,127,195, 40,228,149,151, 95,230, 87,127,245,215,240, 61,
- 9, 86,224,123,174, 59,243,125,247,245,132,176, 84,117, 69,150,229,148,101,133,148, 19,103, 57,140, 34,124,223, 35, 47, 74, 44,
- 9,126,224,211, 89, 90,113,235,145, 32, 32, 79,166, 28,238, 29,208,110,119,208,101, 78,158, 78,241,132,161, 44, 50,186,221, 46,
-121, 81, 48,240, 98,210,163, 3, 70, 7,187,116, 54,206,186, 14,118, 22, 39, 59,239,206,205,137, 14,214, 46,136,254, 26,105,185,
-203, 28,159,241,240,171,138, 74,215, 20,245,140,149,110,169,141,105, 38,113,238,181, 62,195, 19, 99,229,241,218, 68, 41,231,249,
-247,132,131, 20, 53,207,195, 19,124,121,207,195,107, 10,186, 23,132, 72,207,137, 65,133,242,142,197,115,246, 56,118,138, 70,245,
-238, 14, 88,141,215,123,238, 91, 55,115, 81,159, 69,206,145,185,243,159,215,104,106,217,116,219, 86, 65,109,231,121,233,199,201,
-117, 11, 5,125, 70,212,107,196,113, 98,150, 13, 43,142, 31,178,185, 54,207,184,207,213,141,141,183,174,107,234,210, 21, 99,221,
- 8, 59,177, 26,235,201,147,252,150,198, 53,111,180,157,179, 66,102,150, 67, 99, 12, 85, 93,185, 67, 65, 85,163,107,167,233,241,
- 62,238,198,252,180,142,121,150,204, 53, 59,161,184,166,107,129,185,142,192, 10,251, 68,162,218,227,239, 63,171,240,138, 5, 93,
-252,252,125,251,201, 5,111,207,252,251,103, 6,136, 90,119,163, 53,218,141,229,132,131,100,120,190,196, 22,110,167,109,140,100,
- 60,205,120,247,131,143, 88, 91, 30,112,233,210,139,172,174,166,220,187,123, 15,187,179,203, 81, 86,145,233, 18, 63,104, 17,199,
- 93,150, 86, 78,145, 23,181, 67,193, 22, 83,134,155, 5, 82, 11, 76, 61,101,125,176,140,206, 45,171,237, 14,170, 44,145,182,226,
-194,198, 58, 73, 58, 69,170,144, 78,167,139, 12, 44,101,230, 65,123,133,178,244,216,122,180, 73,125,176, 71, 81,104,100, 9,147,
-236, 16,107,107,176, 33, 73, 97,209, 90, 56,101,169,134,183, 94,121,157,207,189,246, 2,111,127,253,231,136, 67, 77,233,149, 32,
- 42, 78,157, 62,139, 84, 1,194,211, 77,135, 33, 23, 16,176,226,177,117,202,252,217, 61,126,238,231, 88, 96,158,185, 67,159, 79,
-195,236, 66,151,143,120, 2, 54, 35,158, 66, 6,164, 81, 18,123,148, 84,233, 33,101, 54, 70,104, 75, 39,142, 40,138,156,100,120,
- 64, 57,218,225,197,139,231,233,183,223,226,103,190,250,203,236, 31,142, 57,189,182,204, 11, 47,116,184,251,104,151,123,247,238,
-243,153, 55, 62,197,198,218, 26, 69, 81,176,182,182, 70, 16,132, 92,188, 48,224,238,195,219,124,231, 91, 31, 81,214,240,112,103,
- 7,133,229,220,234, 50,167,214, 87, 89, 31,124, 31,185,134,163,131, 67, 62,248,246,123, 76,143, 18,148, 23,178,113,238, 37,242,
- 98,194,230,246, 14,203, 75, 1,217, 56,101,148,150,188,248,234,103, 88, 26,108,240,192,222, 39, 43,114,190,248,163, 63,196, 36,
- 45, 81, 69, 77,232, 7,136, 50, 97,180,147,128, 45,144,166,164,204, 39, 76,167, 19,150,218, 1, 50,244, 41,210,140,113,146,242,
-225,135,239,177,179,189, 73,232, 27,210,165, 37,150,151, 6,116, 90, 29,116,145, 18,248,146,189,225,152, 59,183,238,114, 54, 75,
-241, 79,175,225,229, 30, 90, 26,166, 71,251, 68, 81,151,189,189, 49,214, 72,170, 92, 99, 77,133, 53, 25, 82, 23,116,203, 62,245,
- 52, 36, 43, 53,211,164,116,200,221, 90,211,233,116, 8, 90, 49,217,116, 74,224, 11,202,124,194,114,223, 71,170,128,155,183,110,
-113,246,204,121,124, 47,112, 97, 68,184,238,124,121, 53,118,104, 76, 21, 98,133,199,254,222, 30,182, 87, 18, 80, 83, 78,221,168,
- 50, 8, 3,188,168, 67,220, 13, 9,100, 77,114,120,196, 48,133,233,184,162,204,107,134,147, 17, 55,111,188,195,122, 91,210,245,
- 2,198,251, 83, 76,145,241,237,111,127,131,238,249, 53,118,139,138,187,143,106, 62,255,185, 47,241,249, 79,191, 66,119,107,155,
- 94,110,241, 44, 72,229,138,132,156, 53,194,174, 30,162,180, 37, 68, 16, 2, 82, 24,172,180,120, 65, 83, 36,154,252,105, 23,210,
-226,130, 90, 66,223,119,248, 77,165,240, 61,183, 55,119,232, 86, 80, 82,224,121, 14, 41,235, 73, 87, 96, 67, 79, 17,249, 77,193,
-245,154,177,189,180,141,192, 78, 35,208, 11,118,220,153,120, 76,185, 53,149,173,221,168, 90,204, 60,233, 6, 91,151,188,249,153,
- 79,243,213,175,254, 26,158, 39,145, 94, 72,220,242,177, 86, 99, 76,141,196, 39,244, 34,148,116, 32,153,162, 44, 9,131,192, 89,
-253,165,219,221, 71, 81,136,231,123,172,172,172, 48,158,140,105,247, 6,120,190, 99,208,143, 71, 35, 66, 21,144, 36, 83,210,100,
- 66, 24,184, 67,201,206,238, 1, 81, 24,145,249, 5, 86, 79,241, 14,246,104, 15, 6, 88, 33, 48,214,217,115,197,140,170, 54, 63,
-164, 24,230,230,219, 70, 16,103, 76, 77, 93, 53, 5,169,210, 84,181,113,111,186,177,172,205,172, 99,218,162, 77, 35,124,117,225,
-242,243,123,141,148,238, 49, 14,124,223, 29,148, 60,199, 94, 56, 25, 8,118, 76,251,148,205,115,163,148,155,226,121,190, 83,160,
-179,208,169,243,216,228, 80, 44, 20,233,249,216,125, 70,170,107,132, 78,179, 53,175, 69,206, 15, 5, 86, 75, 60, 44,218, 72,132,
-145, 14, 74,100,205,220,102,109,197,227, 52, 85,215,181,219, 5,225,253, 92,119, 47,142,189,233, 13, 82, 13,107, 53,162,174, 48,
- 85, 69, 89,148,100, 69, 73, 89,214,232,218,173, 42,228,204, 97,161,196,252, 92,104,153, 97,110,157, 6, 66,155,227,201,137,174,
- 53, 85, 81, 82,230, 5,117, 89, 82, 20, 37, 73,154,207, 58,117,203, 83,179, 83,159,163,110,183, 11, 65, 45,179, 88, 60, 33,143,
-177,141,226, 25,251,246, 79,212, 65,219,199, 33, 53, 39,179,187, 63, 9,142,244,169, 66, 57,123,210,212, 38, 22,172, 7, 74,186,
-109,136,108,152,246,206, 14,232, 46,172,249,248, 89, 42,180,134,131,225,152,233,244, 58, 27,171,107, 92,188,116, 25,164, 34, 30,
-103,228,149,165,208,150, 52,175,152, 78, 15, 16,214, 52,169, 89, 62,186, 12,176, 70,208,237,247,233, 44,245,200, 18,139,242, 3,
- 82, 37, 64,196,220, 62,156,242,112,115,135, 90, 73, 90,123, 9, 90,104,180, 82,156, 94,221,231,149, 83,151,121,245, 83, 47, 18,
- 44,135, 68, 81, 15,175,244, 40,139, 67,134,201, 62, 55,111, 29,114,120,235, 33,190, 20,212,182,166,211,235,242,149, 47,126, 31,
- 55,223,255, 6,117,145, 18,132, 6, 43,107,218,157,136,245,181, 85, 36, 2,109,155, 29,255,130,115,196, 46, 68,168,186,199,115,
- 70, 44,122,172, 27,193, 60, 25,246,112,162, 43,159,101, 35,219,167,131,135,132, 61, 49,176, 58, 41,146,148, 72, 97, 80, 82,147,
- 77, 15, 48, 85, 73, 94,104,130,238, 26,155, 15,239, 99,170,156, 95,219,121,200,206, 11,151, 57,125,241, 42,185, 86,236, 30,229,
-148,213, 62, 47,190,112,149, 87, 94,238,130,144,236,238,237,242,234,235,175,115,255,222, 3,178,178, 36, 73, 82,206,174, 12,232,
-181,218,124,235,131, 27,212, 65, 64, 73, 69,128, 37,148,146,241,209, 33,126,232,145,107, 15, 47,110,115,230,204, 41,246,212, 30,
-175,189,249, 5,240, 91,148,197,136,124,188,205,189,251,219, 88, 33,185,242,202,167,105,119,150,201,243,130,238,234, 6,203, 81,
-155,222,234, 89, 70, 15, 55,137,162,128, 98, 58,226,240,193, 77,148,208,244,250, 29, 74,237,180, 3,117,150,112,235,163, 15, 92,
-212,237,116,194,112,154, 99,107, 77,224, 73,238,220,185,193, 78, 24,208,107,117, 24,116,251,116, 91, 49, 86, 90, 30,110,238,112,
-227,214, 29,246,119,183,216,223, 90,229,252,198, 26,237,216,167,150, 22,233,197,236, 29, 36,156, 61,127,153,254,160,135, 31, 24,
-194, 16,148, 46, 40, 39, 99,180, 10,217,220, 61, 66, 5, 49, 97, 20,129,174,240, 76, 13,190,135,173, 42,106, 93, 32,117, 14,182,
-102,208,235,178,189,115, 68,154,230,156, 57,125, 26,165,124,132,231, 59, 46, 67,153, 83,150, 53,126, 20, 51, 88, 93,163,211,237,
-146,229, 19, 54, 55,135,180,195,160, 57, 12, 10, 58, 75, 78,164, 38, 84, 69, 54, 26,115,176, 95, 98, 76, 72,150,103,220,184,246,
- 17,235,203, 29,206, 14, 58,236,236, 76,184,113,247, 1,247,223,255, 22,210, 76,121,248,155, 21, 63,252, 19,127,138,247,174,125,
-139, 95,252, 87,223,226,223,255,159,254,121, 94, 58,123, 17,243,112,151,192, 19,140, 43, 59,183,119,206,189, 36,214,226, 3,109,
- 43, 8, 48,168,230,192,233,249, 2, 95, 57, 22,130, 43,222,222,188,128,184, 78, 93, 54,157,177,239,138,250, 66,119,174,148,112,
-161, 56, 74,225,251,146,208,243, 8, 2,255,248, 0,224, 9,100, 19,115,234,186,239,153,250,219, 28, 19,173,172,152,251,136,133,
-112,194, 50, 7,189,114, 74,233, 75,151, 47,178,188,178,194,193,225,161,251, 88, 41, 9, 61,133,174,116, 83, 59,221,194, 63,140,
- 34,172, 53,132,161, 19,206,185,216, 83,195,210, 82,215,169,165,203, 28, 79,133,132, 97, 76,109, 96,154, 37,148, 85, 69,154,164,
- 76,198, 83,234,170,164, 44, 44, 81, 20,114,247,222, 3, 46, 95,186,194,209,120, 10, 65, 1,251, 17,131,245, 85,252,184,229,198,
-232,186, 65,182,218,227,159, 71, 10, 48,194,117,143,218, 84,232,202,165,247, 85,101, 77, 85,105,106,109,155, 4,187,153,239,156,
- 38, 76,199, 21,115,151, 92,214, 8,221,154,201,136,106,220, 5,158,146, 4,158,215, 60,174, 22,185, 80,212, 23, 39,122,199,177,
-172,199,188,120,169,164,131,101, 53,246,183,199,239, 65, 39,128, 57, 66, 52, 60, 17,231, 68, 16, 13,113,205,206,199,237,179, 90,
- 44,221,250,193, 26,164,146, 88,237, 78, 19,194,136,199, 16, 34,143, 37,174,205, 19, 91, 30, 11,148, 17, 11, 46,167,230,123,192,
- 2,181,198,150, 5,117, 81,144,101, 5,105, 90,144, 23,181,195, 69,131, 19, 99,134, 1,126,232, 8,134,110, 16,177,144, 0,103,
-155,188, 89, 26, 81,119, 93, 83, 21, 37, 69, 86,144,167, 25, 89, 94, 50, 57, 46,234,207, 31,123, 63,107,156,122, 50, 1,109,241,
- 99,142,207, 7,207,218,137,127,220,232,253,187,241,191,127, 55,251,250,231,126,238,194,110,253,216,230, 38, 23, 10,211, 73,140,
-226,222,222, 30, 31,237,237, 53,113,150, 33, 74,122,116,130,136,186,212, 88, 33,241,195,144,192,119, 59,220,202, 10, 42, 11, 73,
-154,178,157,108, 81,105,159, 86, 43,198,107,251, 12, 86, 79,113,106,101,153, 55,175, 92,165, 29, 69, 88, 91, 35,108,129,169,198,
- 80,142,201, 39,143, 56, 74, 70,136,251, 9,168, 8,107,125, 98,175,162, 18,138, 23,174,190, 69, 86, 73,246,222,223, 71, 82,209,
-137, 21,173,208,240,246,237, 15, 48,133,225,254,104,159,100, 50,226,226,197,203, 4,113,212, 4,182,240,196,228, 99, 14,231,121,
- 26, 6, 86, 60,182, 50,121,202,116,231,120,100, 38,156,112,136, 5,134,191, 56, 38,234,205,195, 7, 22,174,157,217, 62, 83, 72,
-231, 37, 71,212,140, 38, 19,103,183, 74, 75,178, 97,142,231,121, 76,211,154,131,105,206,230,239,126, 68,231,163,123,180,219, 45,
-122,145, 36,140, 98,190,245,238, 45, 94,255,244,139, 92,188,112,145, 48,106, 83,215, 53,203, 43, 43,188,247,254,251,220,125,176,
-197,133,157, 11,228, 70, 99,164,160,170,171,102,250,162, 57, 76,166,236,236, 31, 48,232, 68, 20, 86,145,166, 41,248,146,206,242,
- 50,126,187,197,225,100,194,160,235,211, 10,214,152, 30, 37, 8, 17,179,182,118,133,241,100, 72,187,165, 8, 60, 15,105, 75,198,
- 7,219,216, 98, 76, 93, 21, 12, 19,205,193,246, 67, 6,253, 14, 58, 11,153,100, 25,203,107, 27, 8,157,241,240,238, 29,238, 92,
- 75, 49,149,166,213,221,160,191,212, 71, 88,197,214,214, 67, 36,134,126,167,197, 67, 1,173, 40, 38,108,181, 25, 79, 19,188,208,
- 67,219,154, 71,219,155,152, 42,231,252,185, 51,200,184, 79, 59,236,178,185,123,135,163, 36,225, 13,255, 83,156, 57,179,238,216,
-212, 66,243,112,107,155,238,202, 6,163,241, 8, 99,198, 44, 45, 45, 17, 72,137,205,115,231,139,174, 12,105, 54,193,247, 44, 81,
-219,197,184, 10,109,185,126,237, 58,105,146,160, 60,201,250,218, 26,221, 78, 11,223,247,208, 85, 73,145, 36,128,229,197,151, 95,
- 66,232,146,108, 50,162, 46,114,210, 36, 97,117,109,141, 78,111,137,209,116,196,209,209,144,163, 97, 66, 93, 7, 36,233,148,143,
-174,125,135,182, 15, 23, 87, 95,226, 40,183,252,194,219,239,243,222,239, 94,163, 91, 22, 44,183, 20,253, 65,135,127,241,143,126,
-153,191,240, 19, 63,198,127,241,119,255, 41,255,240,167,126,134,255,227, 95,253,143, 56,191,210,167,213,246, 16,163,227,160, 17,
- 23,220, 97,144, 22, 98, 32, 22, 2,223,184,189,122,160,104,160, 57, 77,151,231, 9, 60, 95, 17, 4, 30, 97,224, 19, 6, 46,218,
-215, 87,238,166,169,164,131,202, 72,233, 20,238, 82, 54,163,112,207,141,223,125,213, 64,101,212,177,178,125,214, 77, 46,198, 76,
- 63,254, 26,112,100, 54,211,160,118, 77, 19,126,162,176,182, 70,121, 1, 95,254,242,231,249,167,255,236,231,169,170, 28,140,194,
-243, 66,124,229,227, 9,213,120,228,157, 71, 60, 12, 67, 60,165,208, 90, 55,130,185,146,209,104,140,239,249, 60,122,180,201,210,
-242, 58,211,201,148,184, 31, 50, 60, 60,164, 44, 74,114,149, 82, 20, 57,117,149,163,148,224,232,112, 31, 41,160,170, 10,178,188,
- 32,104,197, 4,195, 33, 59, 55,111,209, 91, 93,163,183,188, 66, 86, 85,243, 17,180, 20,179,215,175,251,127,173,221,152,189, 40,
-106,202,162,162,168, 42,234, 74,163, 13,110, 95,174,143,129, 49,179,218, 5,242, 68,188,245,204,117, 48, 91,113, 72, 41,240,149,
- 68, 41, 15,165, 44, 82,152,231, 78, 89, 79,174,255, 22,132,106, 31, 87,212,103, 45,136,104,216, 4,246,216,105, 51,235, 47,236,
- 76,204,108,164, 11,162,177, 10, 43, 21,182, 97,103, 24,183,236, 62,150, 28,137,197, 49,252,115,162,166,143,185, 48,205,222, 95,
- 55, 0, 30, 67, 89, 86, 20, 89, 78,158,231, 78,228,214,248,206,131, 48, 32,140, 34, 55,245,242,221,122,235,132, 85,111,222,190,
- 59, 24, 79, 85,107,202,178, 34, 75, 11,178,204,185, 90,146, 52, 67,189,245,234,165,159,148,143,161,238, 22, 49,177,207,235,124,
-197, 51,199,223, 98,193, 19, 42,158,171,124,127,158,111,125,177,184, 62, 15, 42,243,120,222,251, 39, 45,238,143,255,185,209,199,
-182,140,153,181,173,172,221,152,169, 94,224, 17, 43,233,108, 62,190,239,147,164, 9,202,243,232,117,150,156,133,194,243,209, 22,
-210, 60, 35, 47,107,151, 8, 86,148, 72,191,133,140, 66,186, 43, 61,194,110,159,118,119,141,238,160, 75,153,143, 72,143,246, 56,
-120,116,159,195,251, 31,113,248,232, 22,117,153, 51,232,250,136,241, 22,175,188,249, 5,222,250, 67,127,148,239,251,210, 23,185,
-241,225,135,252,187,127,229,175,242, 23,255,189,255,144, 56,140, 40,146,146,191,254,191,255, 47, 57,216, 63,226,215,127,243, 55,
- 64,192,155,175,189,129, 87,103, 12, 90,150, 60,211,248, 94, 64,171,213, 98,227,244, 25,144, 18, 35, 45, 86,186, 23,239,113,167,
- 46,142, 19,136,102,235,147, 89,156,221, 9, 15,232, 12, 33,185,200, 95,126,242, 69,167,102, 54,144,102,103, 57,219, 81,158,200,
- 95,110,126,247, 60,239,184,115,242, 60,162, 48, 64, 73,192,106,146, 52, 99,176,186, 78,171,219,231,229,151, 95,101,154,166,140,
-106,193,254,180,164,170, 42,150, 90,110, 10,210, 94, 90,101,237,204, 25,199, 99,215,134,118,187,227,240,187,198,112,239,254, 3,
-210,162,226,193,214,142,243,188,207, 22, 93,205,139, 92,104, 77,104, 10,166,251, 7, 28, 30,142,184,123,111,139,209,100, 74,119,
-176, 14, 94,132, 23,120, 88, 61, 69, 1,145, 31,146, 21, 37,103,206,157,231,104, 60, 68, 9,131,169, 75, 38, 71, 7,248,210, 80,
- 76,143,152, 28,238,160,116,194,112,239, 17,163,131, 29, 38,227, 17,101,145, 83,149, 57,233,116, 76,183,219,118,171,148,186,166,
-221,234, 50,157, 78, 80, 74, 56,208,205,238, 30,113, 28,163,107, 67, 20,181, 64,121, 8, 21,224,251, 1,218, 64,167,211,163,221,
-238,226,135, 49,119, 31,238, 16, 4, 33,151, 46,159, 39, 77, 71,124,248,193,187, 28,238,237, 81,103, 37, 82, 73,250,131, 37, 86,
- 79,157, 97,237,204, 25,190,243,246,219,152,170,162, 72,166,148,233,132, 98, 58,164,152, 78,169,242, 20, 99,107, 38, 73, 66,146,
- 87,132,173, 30, 27, 27, 27, 8, 33,216,218,124, 68,187, 21,209,239,118, 26, 59,151,231, 80,175, 70,147,231, 46, 18,212,247,125,
-150,215,214,157,237, 10, 40,138, 18,173, 45, 55,110,220,163, 21, 15, 48, 6,222,121,231,155, 8, 81,242,242, 11, 23,104,121, 45,
-126,235,198, 62,255,175,175,254, 22, 85, 97, 8, 13, 76, 10,141, 95, 9,122, 49, 28, 30, 37,156,126,245, 28,191,243,254, 29,126,
-224,205,215,232, 32,249,149,119,222,103, 63, 45,155,162,126, 92,112, 2,160, 39,160, 43, 4, 93, 4,161,178, 68, 1,180, 90, 10,
- 63,132, 32, 86,142,254, 22,197,196, 97, 76, 28,133, 4,129, 79, 20, 6, 4,161, 71, 16,184, 93,185,231,201,121, 33,247, 61, 53,
-247,138, 59,235,219,236,205,141,223, 61,223,155,255,191,106, 48,161,178, 9,226, 16, 18,103,113,154,113,105, 77, 53,143,175, 85,
-194,117,151,198,214,104, 93,113,234,204, 89,222,249,214,219,120,202, 52, 19, 49, 67, 20, 70,243,123,207, 60,251,161, 73,227,170,
-171, 10, 41, 21, 88,168,181,158,211,214,122,253,101,218,221, 30, 65,212,230,230,237, 59,206,179,239, 41,166,211, 49, 90,151, 72,
- 44,155, 91, 15, 57,119,238, 44, 85, 85,145,151, 25, 81, 20, 33,180,161,156, 38, 76, 71, 19,124,165, 26,197,189,158,143,217,235,
-170,158,231,190, 23,165, 27, 21,231,121, 77, 81, 86,212,181, 67, 95, 59,117,251,140, 12,199,220, 18, 59,183,140, 41,133, 31, 4,
- 4,129,187, 78,252, 89,214,183,175,154,105,137,187, 79,200,185,175,255, 41,247,255,134,234,167, 26,232,139,242, 60,119,143,117,
-164,154, 70, 17, 46, 62,118, 74,187,176,120, 95,104, 50,237, 19,218,135,121,226,153,117,221,240,204,122,231, 82,211,124,164,239,
-187,232, 97,207,119, 76,144, 5,161,223, 60, 45,206, 30,195,185,108,163, 27,114,193, 72,206,129, 80, 21, 25,211,241,148,201,100,
- 74,150,185,162, 14,182,137, 87,109,211,238,180,136,226,216, 89,232,124,207,197,188,206,181,249,199, 99,107,163, 93, 65, 79,211,
-156, 52,205, 72,179,140, 44, 47,152, 38,153,235,212,173, 93,160, 49, 61, 54,228,254,100, 15,216, 83,246,170,198,206,119,180, 79,
- 43,230, 31,215,129, 63, 45,122,245,241,204, 93,196,226,174,221,206, 79, 79,207,234,252, 63,201,116, 64, 45, 32,104,133,116,169,
- 60,162,217,233, 47,118,183, 82, 57, 59, 67,187,219,193, 34,152,102, 5, 7,195, 35,140,144, 68,189, 30, 27,231,206, 98,149, 71,
- 89,105,198,211, 41, 89,145, 51,222,219,193,238,151, 72, 19,210,107,173,209,239, 41, 34, 79,242,165, 31,254,179,188,242,210,139,
-252,242, 63,255,199,188,254,198,167,248,183,255,151,255, 43,160,228,239,252,111,255, 42,237,245,151,248,220, 87,126,156,149,142,
-226,239,255,221,191,207,112,100,104, 13, 46, 66,120,138,223,248,237,247,249,247,135, 19, 60, 17,224,171, 8, 33, 32,240, 34, 46,
-156,187,200,141,119,110, 49,157, 76,232,116,122, 28, 30,142, 88, 74, 75, 58,125,223,217,107, 16, 79,213, 55,156, 56,237, 62,197,
-109, 96,159,209,161, 31, 43, 85,221,233,121,241,144, 53, 19, 37, 45, 78, 56,172, 53,142,242,181,112, 32,155, 11,148,148, 36,144,
- 62, 54,240, 8,219, 93,234,202,176,178,178,198,185,243,231, 89, 94, 91,229,149,113,193, 55,190,253, 30, 55,223,127,135,218,192,
- 43, 47,189,202,168,146, 44,111,156, 37, 12, 20,123,219, 91,220,189,119,159,189,189, 3,242,178,100, 52, 77, 81,158, 71,228,249,
-148,198,193, 68, 66, 41,241,164, 79,169, 11,231,239,173,125,118, 15,247, 25, 78,106, 50, 3,231,206, 47,227,249,109,124, 63, 38,
-157, 30, 33, 67, 67,161, 19,202,122, 76,101, 70,228,197, 14,129, 50,232,172, 96, 58, 57,100, 60, 25, 81,167, 71,164,211,132, 34,
-155,178,190,188,132, 48, 21,123,123,251,140,167, 5,253,229, 37,194,131, 3, 90,157, 30, 23, 46, 92,160,174, 13,147,201,148,131,
-225,152,149,213, 53, 38, 73,130, 82,138,115,231,175,242,232,193, 67,122,237, 14,239, 62,184,199,234,250,128,186,214, 84,218, 16,
-199, 45,142, 14,167,220, 44,238,113,233,226, 5, 86, 87, 86,121,251,155,223,160, 63,104,241,210, 11,151,233, 93, 58,135,143,135,
-212,134,233, 36,229,198,157,187,188,254,105,197,233, 51,103,249,236,155,111,112,255,206, 29,210,233,132, 97,154,144,101, 35, 48,
-130,110,167, 75,171,235, 66,106,142,210,148,164, 24,114,233,252, 69,206,157, 61, 77, 93, 23, 78, 40, 87,149, 14,134, 18, 6, 24,
-109, 9,124,159, 97,158, 83,229, 25, 97, 16, 16, 26,139, 21,146,195,225, 17,121,150, 50,158, 20,172, 44,159, 37,203,107,190,243,
-238,183, 57, 26,237,115,254,236, 42, 8,193,158, 81,252,131,159,255, 26,187, 89,205,196,106,144,130,101, 33,153,102, 53, 81, 0,
-123, 55,238,243,250,155, 63,128,146, 30, 59,187, 71, 44,175,157, 37,246, 98,148, 25,185, 14,182, 65,100, 98, 4,190,181, 68, 82,
-224, 97,240,172,192,151,182,129,186,152,121,220,170,167, 92,225,142, 67,103, 23, 13, 67, 55, 74,247,253,227,131,230, 44,225, 74,
- 53,221,152,148,174,219,247,125,213,116,154,238,207, 60,239,228,193, 84, 44,224,147, 17,246, 24,144, 34, 26,214,248, 76, 45,222,
-120,184, 49,110,247,142,180,244, 58, 1, 95,252,194,231,248,173,223,250, 77,148,148, 84,101, 73, 38, 19,176, 46,108,166, 29,196,
-142,111, 95, 59,194,152, 39, 21,166,185, 6,178, 60,167,172, 28,153,109,134, 85, 61, 26, 14,121,244,240, 17,131,193, 10,210,104,
-146,201,152,229, 65,143,253,131, 93,116, 93, 49, 88,234,179,191,191, 79,173, 75,132,213, 36,163, 35,238,239, 15, 89, 61,117, 6,
-164, 96, 80,157,166,183,186,140,105,178,185,171,178,162, 42,107,215, 81, 22, 21,101, 89, 83, 86,150, 74, 67, 93,187,181,220,108,
-127,110, 27, 57,187, 43,230,205, 10,173,137, 14,149,158, 90, 16, 44, 54,218, 3,217, 76, 4,100,179,202,104, 8,125, 79,211,110,
-205,217,112,115,209,222,236,222,212, 84,169,199,166,193, 79,212, 22, 97,177, 82, 52, 99,113,225,248, 64, 52, 49,127,200,249,191,
-101,103,157, 55, 98, 33, 93, 77,156, 76, 90,155, 59, 30,204,177,237, 90, 60, 57,189, 62, 73,195,113,206, 8, 99,106,172,169,168,
-171,146, 34, 43,201,211,156,170,168, 92,222,134, 16, 72, 79, 57,251, 90, 43,196, 11,220,225, 69,121,206,151,110,102,107,167,230,
-176, 40,172,179,196,205,172,210,198, 58,242,254, 76,160, 88,107,253, 52,245,187,125,166, 47, 93,124, 12,158,245, 15,130, 56,247,
-221,118,217,243,223,155, 34, 97,191,139,177,251,227, 63,159, 60, 97,219, 18,115, 53,173,120,140,248,102,155, 29,143,242, 61,130,
- 40,226,238,189,135,180,122, 3, 46,188,112,137,170,214,108,237, 28,240,112,251, 22,147,220, 49,153,123,189, 14,131,213, 13, 46,
- 92, 58,203,237, 59,215,249,195, 95,249, 19,124,239, 27, 95, 98,116,120,151,159,253,197, 95,224,251,126,232,223,228,212,153, 13,
-126,245, 87,254, 21,239,124,112,151,189,169,192,234,154, 78,220,226,155,191,243,219,124,233, 7,126,132,101,213,229,236,169, 21,
- 54,239,222,134,105, 70, 91,133, 28,236,237, 51, 25, 30,130,177, 72,161,192, 90,238, 63,216,226,194,159,254, 49,110,190,247,117,
- 4, 21, 69,154,210,105,117,201,178,156,238, 82,220,220,104,228, 51,227, 84,231,197, 93,216, 19,118,145,231, 21,244,185, 82,117,
-177, 19, 87, 51,160,131,156,199, 10, 46,198, 32,206,198,239,243,241,156,156,117, 64,146,192,147, 72, 17,115,176,183,203,237,219,
-119,225,214, 61,190,245,237,119,249,226, 15,254, 32, 85,158,178,182,212,101,240, 61,159,229,214, 71, 31, 48, 41,225,244,185,139,
-164,101,205,240,104,202,230,246, 46, 55,175, 93, 35,136, 2,164, 23, 96,165,203,186, 14, 60, 31, 81, 85, 14,217, 25,132,248, 66,
- 50,170, 43,170, 90,179, 59, 76,121,237,204, 89,244,131, 7,108,116,123,248, 97,140, 49,134,228,232,128,233,209, 33, 58, 50,180,
-195, 10, 41,114,172, 78, 56, 58,120, 72,236,119,209,149,165, 76, 71, 28,108, 63,160,215,186,140,178, 53,186, 42, 25, 14,199, 46,
- 13,173,179, 66,103,165,195,135,215,110,240,214,231, 46, 96, 45,108,110,237, 51, 73, 75,162,246, 18,149,174,184,126,251, 1, 65,
- 24,147, 76, 18,140,217,195, 23,150,209, 97, 65, 85, 21, 28, 28,222,163,219,109, 51, 26, 37, 84,149,192,243, 5,186, 54,220,190,
-179,205,234,160,205, 96,185, 77, 85,245,121,112,247, 1,151, 47,156, 39,157, 36, 92,185,120, 5, 25,121,100,186,226,131,247,222,
-103,127,103,135,149,165, 1,103, 78,173, 83,100, 41, 73, 58,229,112, 40,168, 43, 75, 82,212,156,221, 56,195,133,171, 87,248,214,
-123, 31,113,243,163,247,177,218,162,155,209,173,203,113,223, 37,244, 4, 81,232,211,106,183, 40, 11,137,169, 74,226, 78, 23, 33,
-132,227, 36,104,195,131,135, 15,241,165, 66,121, 29, 62,186,118,147,189,131,125, 38,227, 61,206,156,217, 96,169,215,163,182, 45,
-254,254, 47,254, 38, 31,236, 30,209,246, 66, 86,207,157,101,247,209, 35,214,145, 84,166,162, 46,160,221,181, 28,221, 29,242,218,
-249, 85,146, 73, 78,112,169, 79,191, 29,211,178, 6,131, 37,109,108, 65, 18, 75, 4, 68, 64,128, 69, 42,139, 31, 73,252, 8,164,
-103, 81,190,179,159, 5,202,173,191,130, 38, 69, 45,240,189, 6, 26,115, 12,157, 17,243,188,139, 25, 76, 11, 36, 6, 37, 20, 82,
-205, 4, 90, 52,104, 83,209,116,240,222,137,107,125, 70,163, 59, 46, 60,110,231,233,240,177,210,137,252,180, 65,250,142,215,168,
- 77,197,151,190,248,121,222,253,206,183, 27, 92,168, 96, 50,153, 16,248, 33,198,119, 0, 26,229, 5,212,117,141, 82,174,241,247,
-188, 0,207, 11, 8, 2,193, 36, 77, 8,252,144,178, 44, 9,252,128, 7,247, 54, 41,139,130,170, 44,144, 90, 83,228, 41, 66,118,
-121,244,232, 1, 75,253, 30,202,147,148, 85,137,167,156,187, 98, 60, 25, 83, 27, 77,146, 78, 49, 91,219,104, 11, 85, 85,209,234,
-245, 26, 69,123, 77, 93,215,205,200,189,166,172, 12, 85,109,155,253,185,105, 2,168,236, 44,199,214, 77, 46,213,226, 99, 34, 78,
- 68,133, 50, 27,195,207, 24,178,214, 52,123,116,199,218, 63,153,218,189,160,177, 89,144, 54, 47, 54,158,159,168,169,108, 42,190,
-152, 99, 56, 26, 46,127, 67,169, 19,230,184,224,207,254,110, 86,196,109,243, 38, 22,111,252,143,241, 59,236,162,145,237, 25,129,
- 86,110, 50,224,184,250,186, 44,169,202,130, 34,205, 40,178,156,186,170,231, 56, 88,229, 73,194, 56, 36,140, 34,252,176,225,254,
-123,106, 46, 28,158,147,112,140,179, 43,138, 74, 56, 34,167, 84, 72,233,185, 87,132,144,104, 3,149,214, 46, 79,253, 88,224,244,
-252,189,250, 39,165,183,125,183,191,158, 53,130,127,252,228,245,188,169,129, 88,124, 18,158,211,133,126, 28,110, 86, 44,236,123,
- 31,255,239,241, 52, 27, 99, 12,173, 86, 76,167,219,226,254,230, 54,183,110,223,227,212,198, 6, 97, 24,241,202, 11, 47,240,214,
-247,124,129,247, 63,188, 70, 85, 85,156,191,112,133,238,160,205,183,190,245, 54, 15, 54,247,184,112,102,132,169, 43, 70,195, 29,
-246,239,189,131,170,206,176,214,130, 95,123,231, 61, 62,124,255, 26,166, 46, 49,133, 97,243,254,109, 70,247,111,179, 42,214, 56,
-123,102,192, 71,239,191,205,214, 71, 31,160,140,102,125, 99,137,107,215,190, 69,150, 14,137, 34,159, 44,203, 56, 56, 58, 36,108,
-117, 80, 65, 64, 59, 14,216,221, 25,114,230,220, 37, 52, 21,179,140, 59, 97,213,252,194,156, 63, 22,143, 77, 67,172, 93, 44,244,
- 79, 90,137, 30, 79,242,123,188,168, 31,143,221,189, 19,222,211,227,148,164,147, 69,221,107, 58,167, 40, 10,231, 55,200,205,157,
-125,138,134, 96,134,177,236, 28, 13,121,235,141,215,185,122,106,153,183,223,221,226,165, 55, 63,207, 36, 41,104,103, 37,183,110,
-221,226,230,157, 59,156, 90, 29, 32, 61,143,188,168,232,132, 49, 66, 42,170,218,160,171, 10,163, 28, 90, 50, 47, 50,132, 23, 96,
- 17, 84, 66,114,148,101, 28,140,224,165,151, 78, 19, 68, 17,219, 71, 41,227,225, 46,173,229, 62, 58,217, 99, 56, 42,160,227,130,
- 60,178, 35,216,123,116,128, 47,246, 8,164,165,168, 82,148,168,153, 30, 29, 2,138, 48,104,147,100, 37,105,234, 14, 15, 69,106,
-185,183,157,210,187,183, 67,158,101,196,113,139, 36,183,220,188,123,207,117, 62, 26,194,208, 82, 22, 5,117,169,169, 43,195,160,
-237,209,110,249,156, 59,191,206,218,202, 10, 74,121,206,182, 98, 33,138, 98, 30,237, 12,185,127,127,147, 7,187, 35,150,250, 7,
- 4,126,192,230,118,130,180,150,237,253,132,254, 82,139,201,116,196,107,175,188,204,209,254, 62,129, 39,185,116,233, 2, 90,215,
-244,250, 61,226,184,197,210,210, 58, 31,126,116,141,251, 15,182, 81, 81,155, 75, 23, 46,243,254,251,119,184,126,253, 6,117,145,
- 50,232,119, 41,146, 41,189,118,204, 36,205, 57,200, 51,122,253, 30,158,231, 83,213,154,233, 36, 97,105,121,149,118, 28, 97,132,
-228,149,151, 95,165, 46, 42,182,247, 70,220,188,113, 11,235,105,124,207,146,231, 41,189,179, 23,184,185,155,240,179,191,254, 46,
-214,192,171, 47, 93,224, 31,253,211,255, 47,127,237,127,253,147, 92,251,185,127,193,107,107, 17,161, 41,144,161,199,209,157,123,
-124,230,133,179, 12,143,246, 40,124,201, 90,183,205, 25, 95,144, 25, 65,165, 53,149,128,200, 10, 58, 66,208, 50, 16, 73,139, 84,
-224,133, 2, 63,146,168, 16,148,175,240,252, 0,223, 11, 9,188,144,192,115,112,167,192,247, 9,125, 15,207, 63, 46, 60, 2, 57,
- 31,255, 42, 41,143, 57,231,194, 52,150,170, 99, 16,205,227, 43, 65,113, 34,236,200,237,206,103,217,225,206,120,236, 97,133, 11,
-217, 17, 2,180,174, 29,246, 20, 75,191,215,226, 71,127,248, 43,252,226, 87,191,234,198,179,218, 32, 35,167, 1, 72,211,148,118,
- 91,224,123, 97, 51,169,169,209,218, 41,185,103, 17,176, 8, 65, 20,197,248,190,207,246,230,102, 19,150,162,121,112,231, 54,131,
- 65,143,219,183,111, 49, 28, 30,112,250,212, 26,117, 93, 48,153,140, 16, 66, 33, 85,192,189,205,135, 46, 82,180, 21,115,239,250,
- 53,214,142,142,184, 92,191,200,217,176,213, 8,225,106,138,170,162,170, 52, 85,101,209,181,235,208,107, 61,163,100, 10,247,115,
- 41,183,186,152,145,217,102,135,242,121,103, 62,211, 29, 52,202,125,119,200,153,121,222, 77,115,128, 18, 96,229, 83, 11,227, 19,
-187,191,231,212,141, 39,118,234, 79,104,130,152,123,254,141, 49,238, 48,103,236, 92,255, 99,133,108,214, 15, 98,230, 85,108, 66,
-174, 30, 47,230, 60,145, 92,119, 12, 77, 19,141,184,120,193, 53,212,120,210,235,178,164,204, 50,178,212, 65,165,172,118,226, 56,
-225,249,196,173,144, 86,187, 69, 20, 71, 4,161,235,214,165,242, 26,197,253,241,189, 19,227, 84,242,212,117, 99, 21,212,148, 85,
- 73, 94, 20,110,162, 82, 85, 20,101,125,220,169,159, 44,160, 79, 25, 77, 63,102, 65,146, 79, 20, 97,158, 67, 25, 19,223, 85,113,
-127,218,232,253, 89, 66,187,199, 15, 1,150,231,140,245,159, 2,149,155, 37,143, 45, 46, 29, 78, 20,248,199, 39, 24, 11,197, 76,
-249, 46,126,178,219,235,242,169,254, 42,157, 86,155, 47,125,225,139,220,191,255,136,111,126,251, 93, 66,169,136,148,207,193,214,
- 30,213,106,206, 65,149,209,138, 58,236,236,238,177, 59, 60, 32,240,115, 14,139,156,143, 30, 62, 32,247, 20, 50,140, 24, 30, 29,
-114,235,189,111,209,243, 37, 42,153,176,185,121,159,189,221, 45, 86,122,130, 83, 23, 47,112,243,222, 14, 97,167,203,224,212, 6,
- 97,183, 77,146, 77, 72,243, 49,210,171,209,178, 98,255,232,128, 66,151, 36, 69,225, 44,111,186,230,225,189,123,180,123,109,150,
- 87, 58, 39, 25,244,226, 57,167,220, 39,222,127, 54,197, 79, 46,140,220,149, 60, 86,187,250,190,127,162,208, 47, 62,142,162,137,
-193, 61, 89,212, 37,190,239,225,249, 1, 7,195, 33,211,172,224, 51,159,251, 30,238,220,188,197, 71, 31,125,196,246,221, 45,170,
-116,202,235,175,190,204,103, 62,243, 38,119,247, 38,172,116, 87,216,220,188,199, 59,239,190,131,242, 3, 70,163, 17,113, 24, 82,
-149, 25, 85,158,225,121, 30,105, 93, 80,105,237,132, 48, 13, 12,163, 40, 50, 12, 2, 63, 12,185,120,105, 3, 38,187, 76,142,134,
- 24, 43,120,112,144,210,235, 7,244,130, 26,207, 20,140,134, 19, 38,123,208,107,199, 28, 14, 43,108,125,200,250, 90, 72, 86,142,
-144,161, 15, 66, 58,196,105,105, 40,202, 9,181, 81,236, 31,100,156,111,175,176,115, 56, 34,205, 45, 7, 71, 57, 82,194, 36, 27,
-113,106,125,131,157,157, 17, 86, 57,235, 88,150, 78, 17,158, 96,109,169,197,213, 75, 27, 92, 62,127,154,149, 65,151,229,193, 18,
- 81, 28, 59,212,102, 81, 33,164,199,229,171, 87, 41,138,146, 71,247,239,241,246,123, 31,241,206,187, 55,184,183, 61,114,190,115,
-160,253,240,144,165,150,194,199,112,184,125,192,197,139, 27,140, 39, 71,124,248,209, 50,173, 86,196,247,126,207,247,162, 75, 67,
- 58,173,240,189,128, 7,247,238,208,233, 45,193,254,152, 51,235,167,216,195, 16,199, 17, 89,158,179,187,179,205, 75, 47, 92,225,
-165, 23,175,224, 53, 20,182,186,214, 76,146,148,189,253, 67,118,183,119, 56,115,230, 12, 69,158,209, 10, 91, 76,166, 67,170, 90,
-208, 27, 44, 83,218, 12, 91, 31, 82, 87, 25,147,180,230,191,253,217,175, 51, 45, 28,253,237,253, 91, 55,249, 27,255,233, 95,227,
-230,237,123,108,151, 21, 43,189, 24, 41, 42,170, 90, 98,199, 41, 43,129,225,214,225, 35, 14,166, 67,214,150, 6, 44,121,130, 88,
-250, 12,167, 25,194, 66, 91, 72, 58, 72, 98,171,241, 45, 40, 31,164, 15, 42,144, 4,145, 71, 24, 5, 4, 65,216, 88,217,220,117,
-232, 55,157,122, 16,184,189,184,179, 74,169,249,157,204, 21, 24, 11,168,230, 90,181,141,157,169,233,222, 23,196,113, 79, 22,149,
-230,198,210,132,159, 96,108,227, 43,174,157,139,198, 19, 88,131, 83,109, 55, 66, 83,173,107, 94,127,243,117, 62,248,224,125,238,
-220,185, 79,183,219, 33,138, 98,130, 32,160, 46,114,151, 87,208,234, 97, 13,206,206,153, 78,233,118,187,232,218,221,175,166,211,
- 4,207, 31,178,180, 60,101,111,127,159,188,112, 80, 19,229, 75,194, 40,228,222,189, 59,244,123, 61,122,189, 30,251,251,251, 84,
- 69,137, 84, 62,251,251,251,236, 13,135, 20, 53,200, 86,159, 86,187, 75,167,187,196, 52,201,121,240, 96,139,181,181,117,170,202,
-184, 34, 94, 27,106,237, 32, 50,198,186, 25,137, 35,171,113,236,245,111, 18,234,132, 20,115, 45,130,131,120, 53,200,220, 6, 32,
- 51,211, 96,205, 82,222,176,245,113, 60,235,124,186, 97, 23, 58,243,133,194, 57, 47,166, 79,169, 40,207, 88, 15,158,200, 91,183,
- 44, 24,198,143,213,245,243, 14,125, 30,196,178,216,192, 29, 55,114, 39,114, 57, 30, 31,104, 47,150,133,197,204,246,230,125, 71,
-142,171, 40,203,130, 60,115,111,186,110, 30, 79, 33, 8, 66,159, 86, 59,166,213,110, 17,182, 98,188, 48,112,235, 74, 33,209,179,
-245,124,243,195, 27,227,118,243,101, 81,144,103, 57,105,146,146, 36, 41, 69, 89,186,233, 74,229, 14,126,222, 44,141,102,182, 38,
-144,139, 39,131, 5,182,187,108, 44, 80,199,211, 8, 49, 15, 79, 56, 81, 4, 79, 20,247,199, 31, 14,113,194,166,246, 73, 59,252,
- 69, 68,222,199,141, 95,212, 99, 31,251, 56,118,118,254, 92,136, 25,113,221,141,217,177, 46,222,241, 36,154,125, 97,246, 46,103,
-118, 2,220,137,183, 65, 70, 10,107,217, 88, 95,231,104,148,208,138, 67,222,254,230,239,176,188,178,202,214,246, 22,121,153, 98,
-148,101,127,188,205,169,100, 21,240, 80, 86, 33,171,140,241,193, 45, 34, 95,226, 35, 57,220,185,206, 75,231, 6,132,237, 1, 37,
- 17, 34, 59,228,220,198, 57,166, 47,189, 73,245,219,223,164,127,170, 77,119, 99,137,157, 95, 29,178,253, 96,135,159,253,153,255,
- 31,215, 63,122,143,155, 55,239,240,127,249,191,253, 61,246, 15, 39, 28, 36, 71,152,192,163,172, 42,166, 73, 69, 59, 92, 97, 88,
-111, 99,180, 97,124,116, 0, 86, 99,244, 5,172,106, 50,125, 79,244,233, 79,203, 39,150,199,238,126,123, 18, 28, 59, 95, 37, 46,
- 68,232, 42, 49,139,173,148,243, 23,252, 98,167, 62,239,112, 56,190,102, 28,173,203,107,246,107, 78, 60, 19, 4, 62,105,105,121,
-180,185,195,238,206, 62, 55,131, 27, 92,121,225, 10,185, 16, 76,222,189,201,157,221, 41, 71,249, 13, 94, 46, 60, 46, 94,185,204,
-189,251,119,249,157,111,126,131, 32,246,233,117, 58, 4,128,153,230, 44,251, 10,163, 36,217,180,196, 8, 65, 13,248,141,143,191,
- 18, 2,227, 11,148, 54,156, 13, 67,162,170,166, 28,215,236,238,214,224, 9, 6, 27, 49,120,112,255,238, 30, 93, 43, 49, 9, 24,
-165, 56, 40, 50,172, 82,172,172, 13, 40,117, 74, 85,123,120, 97,155, 73,233, 68,102, 43,107, 29, 70,163, 3, 70,147, 20,229, 89,
-210,209, 33,245, 56, 97,117,169, 71, 43, 94, 97, 60, 61,164, 42, 75,134,251,251,244, 58, 29,242, 36, 39,240, 5,161, 18,156, 63,
-183,202,139,175, 92,225,234, 11, 23,104, 69, 1, 82,107,252,198,214, 82,107,205,112, 50,225,112, 56, 34, 41, 43,242, 52,163, 99,
- 51,222,124,101,131,239,253,204, 37,110,222,216,226,231,126,243, 67,110,237,143, 24,213,138, 60, 13, 88, 82, 21,173,113,202,189,
- 59,247, 41,173,100,227,236, 69,118,247, 14,249,218,175,252, 26,167,214,150,233, 45, 13, 24, 37, 41, 15, 54,183, 57, 24, 79, 89,
-219, 56,227,212,182,182, 34,157,140,185,250,226, 75,180, 95,122,153,195,225, 1, 90,120,120, 18,170,218,165,109, 21, 69, 73,153,
-231, 32, 20, 66,122,224,183,152,214,130, 68,123,136,160, 69,111,229, 20,123,195, 45,116,150,131, 47,249,234,219,215,120,231,222,
- 8, 3,228,210, 80,151,146,255,246,159,255, 60, 90,192,154,182,212,129, 97,185, 35,169,166, 5,195,137, 34, 86, 45,250, 75, 49,
-113, 16,210, 9, 91, 40,171,168,107,237,144,176, 82,208,177, 16, 91,131, 47, 12, 97, 0, 97, 27,130, 16, 66, 95, 46,216,215, 60,
-188, 64, 33, 61,217, 56,199,164, 27,107, 42,209,216,211,100,115,175, 88,136, 9,158,145,232,230,240, 26, 55,181, 83,184,235,219,
-221, 14,154,244,174,102,127, 62,179, 74, 27,235,178,221,133,177, 72, 93, 53,200, 16,235, 82,194,132,117,119, 25,161,154,172,119,
-144, 70,226, 99,248,145, 31,249, 17,254,233,127,255, 63,224, 7, 49, 82, 40, 52, 16,117, 20, 82, 4,196, 97, 11, 33, 44,157, 78,
-136, 49,154,170,206,168, 74, 67, 85,228,160, 13, 71, 71, 99,118,118,247,248,190, 47,124,129,225,100, 76,187,221,225,229, 87,175,
-160,139,154,135, 15, 30,226,123,224,121,146,173,237, 45,192,199,232,154, 59,247,239,147,217,128,176,189, 76, 86, 7,248, 58,226,
-254,238, 17,253, 82, 48, 48, 49,163,201, 35,148, 18,172,174,175,128, 54,104, 42,116,179,138,243, 60,217,132,177, 40,152,233, 22,
-230,175,111, 23, 81, 58, 91,181, 33, 22, 1, 64, 52,130,175,102,143,109, 42,208, 22,137,158,131, 2,231,137,106,179,251,248, 44,
- 63,164,153,156, 32, 5, 86, 10,140, 20,120, 56,102,190,155, 72,219, 39, 90, 14, 97,143,109,209,243,134,116,161,217,159, 39,118,
-202, 5,202,221,220, 89,193,201,251,221,220,247,214, 8,107,141, 65, 24,215, 32, 8, 43,155,175, 47,142,113,179,243,189,191,155,
-216, 56,129, 92, 73,157, 87,148,105, 73, 94,214,148, 90, 99,133,117, 44,132,200,195,143, 3,100,224, 33,131, 0,225,185, 38,193,
- 52,185,176, 51, 18,158,214, 53,198, 84, 84, 89, 78,149, 37, 20, 73, 58,135, 58, 85, 53, 84, 13, 87,223, 87,222,239,141, 40,247,
-113,227,242,143, 3,195, 28,143,173,126,111,163,251,103,145,233,158,183, 38,248,184,136, 80,241,148,166,222, 46, 62,169, 79,227,
- 89, 9, 71, 66,210,117,205,100, 60, 98,185,215,231,238,195, 77,150, 87,215, 72,146, 41,135,135,251,148, 69, 70,150,165,236, 31,
- 28, 80, 86,238,137, 78,178, 41, 85,149,211,235, 46,209,110,183,153, 76,134,236, 31,108,227,133, 10, 21, 72,190,250,203, 63,199,
-222, 43, 87, 73, 15,247,105,213, 21,127,247,111,253, 77, 90,173,144,189,237,125, 36, 62, 63,251,143,255, 9,167, 78,173,243,198,
- 11, 87,217,158, 20,100, 81,140,151,250, 84, 70,162,100,200,131,205, 93,206, 92,188,202,245,247,190,205,210,210, 10,147, 81,234,
- 70,106,101, 69,216, 14, 92, 44,172,144,159,140,239,255,180,238,253, 57,207,199,211, 86, 36,179,110, 92, 52,184,196,217, 65,205,
- 83, 2, 79, 53, 84, 47, 37,137,148, 68, 9,197,187, 31,125,192,193,246, 46,129, 80,220,248,240, 6,143, 30, 62,226,236,229, 43,
-252,208, 31,249, 81,174, 93,191,129,180, 22,207,243,121,112,231, 46, 15,239,220,101,173,211, 33,175, 28,128, 65, 40, 15, 21,182,
- 48,190,162, 52, 53,147, 60,161,106,190,174,215,172, 13,102,168, 69, 37, 64, 97, 56,218, 57,160, 40,106, 14, 74,203,122,183,197,
- 82, 38, 8,234,154, 42, 55, 28, 86, 21,177,144,196,177,135,150,138, 51, 23,207, 98,172,179, 7, 69, 97, 72,183,219,161,219, 83,
-180,194, 54,113,224, 19, 69, 43, 40,207,137,208,246,183, 15, 81, 6, 46, 94, 57, 71,110, 44,129,167, 24,111,103, 76, 68, 70, 29,
-134,236, 15,167,180,164,224,202,133, 85, 94,122,241, 42,203,107,171,136,176,205,238, 40, 97,247,112,200,157,251,143,216,220,222,
-103, 56, 74, 73,139, 10, 83,107,206,158, 63,199, 75, 47, 92,102,235,250, 71,156,107, 75,190,244,217, 23,249,222, 79, 95,228,213,
-151, 46,241,139,191,241, 14, 63,255,141,143,120, 56, 45, 56,144,112, 88, 8,186, 67,193,114, 55,228,237,183,175, 19,196, 1,123,
- 7,251,124,234,234, 25, 46,156,215, 92,186,122,149,254,218,105,118,246, 14, 48, 70,227,251, 30, 73,158,147, 74,120,248,224, 62,
-103,206,158, 33, 80,138,107, 31,125, 72,232, 73,166,147, 49, 75,253, 37,234,170, 98, 58, 30, 83, 27, 88, 90, 62, 98,237,212, 89,
-202,218,146, 79, 71,248,109, 31, 91, 79, 81,229,148, 52,133,180,213,225, 95,190,123,147, 68,231, 40,161, 29, 93, 84,216, 70,180,
- 20, 33,100, 65,220,175,185,176,226,145, 71,134, 97, 10,165,182,220,184,191,205, 31,106,119,233,174,109, 32,252,128,122,154,208,
-145, 2, 79, 64, 91, 24, 66, 1,190, 15, 81, 87, 17,183, 92,170, 85, 16, 52, 94,244,198,138,230, 55, 59,244, 89, 39,233, 41, 57,
-183,171, 73,197,220, 70, 57, 19,246,138,121, 76,178, 99,125, 31, 23,119,121,194,194,182,248,126,227, 48,114, 93,166,177,160, 27,
-152,203, 28,188,232,196,103,110, 55,238,138,157,169,103,153,228,150, 51,167, 78,241,253, 95,248, 2,191,249,155,191, 77,191, 55,
-160, 44, 43,252,192, 67,226, 99,180,193, 83,150, 86, 20, 82,213, 53,121, 94,224, 7, 45,164,231, 64, 54, 65, 16,144,102, 41,167,
-206,158,225,204,153, 13,146, 52, 65, 42, 15, 97, 37,127,241, 47,254, 69,110,221,186,206,237,187, 55,168,140, 37,207, 11,164,240,
-217,217,155, 64,220,161,165, 74,194,184,164, 28,142, 48, 2,140, 12, 49,140,136,194, 16,165, 36, 69,181,205,217,179,103, 8,130,
-144, 60,207,209, 74, 59, 29,145, 82, 78, 80,232,169, 5,109,129,152,119,234,114, 22,108, 34,196,177, 88, 86, 90,172,148,110, 58,
-103, 13, 70, 55,170,245, 38, 31,221, 88, 57, 27,112, 44,236,171, 79,180,192,243,195,212,140,169, 97,165,108,120, 89,226, 41, 99,
-240,231,235,128,236,227, 45,255, 49, 91,235,233, 28,148,134,166, 55,119,252,204, 80,216,115,142, 61,115, 11, 29, 11,226, 62,163,
-107,234,170,164, 42, 29, 33, 48,205,114,106,173, 27, 41,130,154,147, 2,163, 40, 34, 8, 92,135, 46, 16,205,181,100,230,212,199,
-186,118, 26,135,170,202,201,211,140,116,154, 48, 25, 79,153, 76,147,198,113,226,166, 52, 78, 40,234,127,119, 69,253,147, 20,230,
- 79, 82,220,127,175, 62,242,223, 11,114,246,169,186,128,217,190,228, 99, 10, 61,243,209,207,211, 66,102,142,167, 8,101, 85,128,
- 53,140, 39, 35,134,163, 33,201, 52, 33,138, 2,166,147, 17, 82, 24,119,115,240, 20,182,212, 88, 12,163,209,136, 91,183,110,113,
-235,134, 19, 34,221,123,120,143,239,124,243, 27, 84, 89, 70, 89,229,220,189, 59,162,156,110,115,249,212, 41,126,224,251,191,159,
-213,149, 1,189, 65, 15, 35, 60,242,218, 69, 42,164,197,148,221,237,219,172, 3,163, 81,129, 41, 53, 34,240,144,194,227,218,173,
-219,252,153, 63,250, 3,252,234,207,255, 52,201, 36,165,213,238, 80, 25, 77, 94,148, 4,237,176, 81,141, 62,198,104,127, 82, 51,
-247, 68, 31,255,201, 10,190,125, 34,112,224,196,227, 54,139,181,156,189, 40, 23,118,242, 66, 56, 33,216,157, 91,183, 57,125,250,
- 44, 75,237, 22,183,110,126, 68, 86, 86,188,251,157,247,185,244,154,224,205, 55,223,164, 46, 11,118, 30, 62, 98,103,107,139, 58,
-207,137,253, 0, 79, 26, 38,101,193, 97, 90,224,251, 33, 71,121,198, 52, 77, 41,154, 49, 91, 32, 5, 45, 47,192, 52, 62, 81,217,
- 64,179,242,178, 68, 99,153,214,150, 3, 41, 24, 31,101,188,214,238,225,215,154, 90, 67,237, 73, 10,109,232,198, 62,203,203, 3,
- 52,150,209,100, 2,198,178,186, 54,192,154,154,229, 65,143,100,146, 80,226, 83,150, 41,158, 50, 36,147,148,118, 43,102, 50, 77,
- 88, 90, 93,226,222,163, 77,146,209, 4, 99, 4,195,170,230, 40,157,210,247, 5, 87, 78,111,240,210,139, 87,232,118,186, 76,179,
-138,155,239,222,228,219,239, 95,231,206,246,144, 73, 89,207,111,116,224,198,113, 47,156,123,137,255,224, 63,251, 91,252,187,127,
-254,127,196,240,254,125,210,163, 33,159,253,226,139,188,254,234,171,252,248, 15,188,201,114, 71,242, 75,223,186,201,189,189,156,
-157, 28,242,160,197,120,191, 32, 28,142, 89,234,123,224,133,228,132,132,189,101, 14,198, 46,234, 84, 91,195,246,206, 54,175,190,
-242, 10,254,242,128,163,195,125, 38,147, 49,123, 59, 91,156, 59,119,150,208, 87, 4,189,142, 11,120,241, 61,146,241, 8, 33,192,
-247, 61,234,170,100, 50, 30, 35,188,128,218,122,140,234,146, 73,145, 16,162,201, 85,151, 27, 59,154,135,195, 9, 66, 25,151, 19,
- 2, 88,105,177, 40, 60, 13,171, 29,203,133,243, 33, 81, 54,193,250, 18,225, 1,190, 96,146,164,228,149, 6, 63,192, 11, 99,194,
- 73, 66,208,168,221, 35, 1,113, 4,113, 91,208,234, 5, 78,221, 30, 6,132,190, 34, 10,125,194,208, 39,108,172, 84,158,239, 17,
- 6, 65,131,121,149,120, 13, 29, 78, 52,194,216,217, 88,214,217,171, 26,109,145,181, 39,136,150,162,185,227,203, 5,128,146, 56,
-110, 7,143, 25, 15,194,204,239, 57,198,104,102,203,122, 93, 59, 27,154, 39, 29, 5, 77, 42,209,228,139,215, 88, 97,121,227,141,
- 55,216,221,217, 99,123,107, 23,169, 36, 85,165,137,252,160,201,243, 22, 84,101,137, 31,198,236, 29,140,233,175,244,240, 98,119,
-112,146, 94, 64,158, 23,236,237,108,211, 95,234,210,235,245,208, 6,138,188,196, 8,201,167, 62,253,105,240, 36,191,248,203,191,
-138,242, 58,236,110,237,179, 63, 44, 81, 85,142,106, 27,142, 38, 83, 36, 62, 94, 16,145, 63,218,102, 60,205, 24, 44, 13,232,118,
-218, 76,146, 20,172,164,213,138,105,119, 58,116,151, 92, 51, 80,235,186,177,154,185,157,186, 84, 51,151,192,241,154,237, 56, 77,
-108, 65,119, 32, 92,232, 14, 6,215,177, 35, 26,184,139,104, 72,173,226,177,130,107,231,108, 11, 33,154, 3,151,176,115,251,173,
-157,233,116,236, 39, 95, 33,158,172, 5,226,100, 70,137,253,152, 58,240,148,183, 89, 33,159, 21,120,187,192,221,182,198,161,192,
-117, 89, 83,230, 37, 89,154, 81, 85,174, 0,207,234,134,187, 62,253,121,195, 99, 27, 78,253,220, 86,221, 8, 22, 29,193,175,162,
- 44, 10,178, 52,101, 58, 73, 24, 79,166, 36, 73, 78, 85,187,207,145,194,101, 8, 40,165, 62,174,168,139,223, 87,167,254,180,200,
- 86,219,216, 25, 30, 47,198, 79,132,202, 63, 39,153,237,187, 21,232, 61,213,114,240,172, 2,181, 40,186, 56, 49,190,127,242,123,
-154,139,194,148,162,170, 10,170,170, 66, 73,193,185,243,231,121,225,234, 85,146,233,148,218, 24, 60, 37,185,125,235, 38, 8,197,
-100, 60, 69,107,195,181,235, 35,167, 40,142, 3, 46,156,190, 64, 63,140,216, 88, 89,102,105,208, 35, 12,125,202,116,138,210,154,
-237,241, 1, 91,163, 45,234, 50,163,229, 7,212,121,201,248,240,128,181,213,152,218,100,212,182,205,246,163, 45,231,157,164,198,
-243, 12,119, 30,222,101,249,236, 95,224,252,197,171, 20,163, 9,211,163, 49,247, 30,221,115,254, 82,227, 86, 44,198,216,103,218,
-255,158,167,129, 56,126, 60,196, 83, 21,159,207, 42,232,243,142, 93, 46, 30, 6, 23, 56, 3,205,233,219,143, 2,250, 43, 43,252,
-198, 55,127,135,229,126,143,165,165, 37,142,118,246,104,245,150, 16, 69, 69, 58, 28, 18,199, 17,198,104,142,198, 71,238,243, 76,
-133, 31, 40,168, 4,133,214,140,138, 4, 97,181,251, 90, 82, 16, 69, 17,212, 21, 26, 73, 13,152,230, 64, 97,177, 76,171,138,229,
- 48,112,127, 14,248,113,139,173, 44,193,139, 3, 70,149,225,194,185, 21,234,209,152,149, 83, 27,132,173,152,251,143, 30,146,231,
- 21,237, 56,162,214, 2,101, 53,201,100,132,209,150,201, 36, 33, 73, 38, 72, 41, 73,167, 57, 65, 52,224,236,229, 11, 36, 7, 7,
-120, 85, 77,169,107, 50,223, 35, 43,106,148,144,116, 98,159,139, 23,207, 18,197, 49,219, 7,135,252,238,141, 91,220,222, 25, 49,
- 46, 52, 37,130, 90,136,121, 78,183, 16,110,227,251,171,191,246, 27,252,241, 63,253,231,152, 28,236,176, 82,215,248,155, 21,245,
- 47,125,132, 30, 11, 46, 92,189,192,231,222,120,145,203,231,214,249,103,191,248, 13,222,125, 48, 33,177, 26, 25,134,180,253,154,
- 51,103,214, 88, 94,238,179,127,184,207,251,215,111, 19,199, 46, 17,112, 48, 24,224,121, 62,105,150, 98,235, 26,165, 20, 89,154,
- 18,250,138, 60, 77, 8,123, 29, 60,207,195, 88, 75,150,229,132, 97, 4,184,200,201, 78,167,139,239,251,164, 69,141,106, 47,179,
-187,255,128, 81,154, 19,166, 25, 94,107,141,239,188,253, 62,153,177,232,121,119,165,193, 42,164, 9,104,219,146,243, 29, 75, 71,
- 25, 42, 27, 51,169,106, 50,235,225, 71,109, 94,125,225, 37,206,172,174, 83,158, 75,233,182, 91,100,135,194,141,219, 21,132, 33,
-180,219,130,168,235, 19,181,124, 90, 97,139, 40, 8, 9,124,233,114,220, 67,159, 40, 10, 9,195,160, 9,101,113, 30,244,153,218,
-218, 83,202, 89, 87,165,116,168, 84,173,143,193, 83,130,199, 66, 70,196, 44,254,227, 9,161, 41,243,206,241,120, 93,103,165,179,
- 76, 41,229,205, 25,224,198, 58, 17,155, 80,198,249,172,133, 68, 74,237,190,190, 54, 32, 44, 95,249,202,151,249,229,175,254, 50,
-123,251,135, 46,193, 44,112,118,175, 32,244, 49,104, 10, 3,211,220,112,243,189,107, 68,113,135, 65,127,137,184, 19,210,239,119,
-233,117,123,212, 69,198,214,163, 17,103,207,157,199,139, 35, 39,152,242,125,222,248,204, 91,228, 90,240, 79,254,187,159,227,225,
-131, 49, 70, 74, 58, 94, 76, 90,104,172,173,232,181, 91,104, 43,168, 43,195,206,222, 33,251, 7, 71,196,113, 72,183,221,161, 42,
-107,214, 86, 87,209,181, 5, 90, 44, 45,117, 9,130,128,188,200, 93,183,222, 68,149, 74,117,108,101, 21, 51,253, 76,211, 81,207,
-139,251, 44,235, 65, 58,206,175,197,121,176,157, 48,177,201, 5,183, 46,107,220, 90,129, 53, 26,225,205,214,128,170,177, 22, 51,
- 79, 64,155,239,190,197,147,162,186,231, 21,244,199, 91,244,249,138,213,206, 18, 53,237, 2, 60,220,158,152,192, 31,239,248, 23,
-212,237, 98,241,235, 52,133, 94, 27,108, 93,161,171,138,186,104,104,111, 89, 65,217, 20,105, 48,243,200,222,217,184, 94, 27,141,
-173, 29, 39, 95,215, 78, 24, 57,139,177,213,117, 77, 85, 86,205, 30, 61,103,154,100, 76,166,206,151, 62,183, 19, 54, 66,227, 48,
- 8, 29,251,253,153, 62,191,231,128,102, 62,174,184, 62,175, 99,183, 11, 69,242, 89, 93,251,243,146,216,158,182,103,127, 90, 8,
-201, 83, 11,251,204,131,253,216,148,193, 26,243, 84,139,215,252, 52,198,211, 97, 43, 0, 97, 24,114,254,220, 89,172,149,124,207,
-231, 63,207,191,252,149,175, 81, 27,205,181, 27,183, 17, 82,144,107,131, 31, 69,132, 97,200,250,218,128, 94,183,139, 39, 20, 81,
- 16, 64, 93, 18,216,154,100,111,155,123,187,155, 76,215, 6,180,218, 45, 20,146, 80,120, 4, 97,204,218,250, 26,117,153, 17, 5,
- 1, 86, 27,178, 94,151,178, 58,162, 29,120, 28,165, 16,183, 99,146,170, 66,138, 18, 93,167,236,238,237, 16,180, 59,200, 32,198,
-243, 53,210, 43,136,219, 61,116, 51,252, 22, 11, 48,134,103, 58, 10,236,239,113,132, 98,159,173, 76,117, 47,122,154,142,200,206,
-133,114, 44, 32, 21, 63,188,121,139,107,183,111, 50,201, 51, 38,105,198,214,158,194, 42, 65,128, 71,251,240,136,177,242,121,127,
-103,139,110,183, 67, 16,135,164, 69,206, 56,207, 32, 53, 72,161, 28, 45, 14,129, 39, 29, 46, 52,244, 60, 23, 5, 89, 89, 10, 91,
-185, 24, 72,225, 49, 83,161,100,214,144, 40,193,210,114,159,124, 56, 69, 26,131,215,246, 57,164, 70,251,146,241,116, 74, 47,240,
- 28, 29, 48,138,121,180, 51,162, 29,194,202,160,207,209,112,204, 96, 41, 32, 75, 11,198,227,132,213,181,101,146,244,128,110, 43,
- 70, 32,153,228, 5,189,158,199,100,123, 23,207, 15, 25,231, 5, 59, 89,133, 4, 6,158,228,234,185, 13,226,200,231,131,235, 55,
-185,187,187,207,131, 81,202,176,178, 24, 33,209, 77, 1,153,221, 90,108,131,172,172,171,154,253,189, 7, 88, 79, 51, 2,138, 74,
- 98,134, 30,191,250, 75, 31,176,177, 59,228,135,190,252,105, 46,117,187,252,232, 43, 23,145,250, 46,239,239, 37, 28,165, 22,218,
-146,164,200,233, 21, 33,151,175,188, 64, 16, 4,100, 73, 66, 86,106,228,100, 74,224,249,140, 70, 35,250,109,103,171, 57,215,239,
- 83,150, 57, 97,224, 97,173,101,119,111, 31, 33, 61,198,211,196,133,102, 24,219, 40,181,115,186, 97,135, 56,110,225, 85, 6,145,
- 14,201,143,246, 8,131,128,195,188,230,254,225, 17,181,138,155,241,152, 70, 89,141,176,130,208,194,197,174,229,135, 63,219, 37,
- 27,105,240,207,146,249, 37,137,153,114,245,202, 43,188,246,185, 43,156, 91, 30, 48,221,223,227,252,217,117, 70, 91, 15,136, 36,
-116, 91, 18, 47,132,168, 27, 16,119, 29, 66, 53, 84,161, 27, 99,206,109,107,178, 25,197,187,162, 46,155,113,174, 20, 52, 49,170,
-199,162, 46,139,117, 4, 49,115,220,125, 49,119,102,204,155,237,133,224,143,217,238,221, 62,134, 51, 21,200, 6, 5, 43,140,117,
- 69, 92,184,165,173,231, 5,199, 5, 66,219,249,142,223,243,148,219,187, 26,135,147,254,202, 15,252, 0,191,240,139, 95, 37, 43,
- 11, 20,224, 43,143, 90, 27,178,170,162,146, 1,239, 92,127,128,198,227,226,229, 85, 10,235,145, 22, 6, 47, 41, 89, 89,245, 16,
- 42,196,152,130,189,221, 29, 86, 87, 78,161, 4,142,239,223,142,248,220, 91,111,177,183,159,241,247,255,155,159, 33,110, 71, 24,
- 36,227, 73, 74,233, 91,116, 9, 89, 89,178,180,178,236, 20,248,141, 74, 95, 73,197,112,164,152, 76, 83, 58,237, 22,253, 81,196,
-232,168, 75, 16, 6,172,175,175, 17,183,226,102,117, 97, 93,113,247,212,194, 52,206,137,206, 84,211, 77,155, 70,123,228,138,184,
- 69,122, 62,101, 45,208, 86, 35, 2,133, 41, 43,180,133,178, 46, 81,248,110,244, 46,132, 83,232,203, 0,132,135,182,224,207,252,
-226,226,164, 30,104,102, 67, 19, 79,177,190, 61,123,130,123,162, 8, 60,166,123, 59,190, 7, 90,219,140,215, 57, 46,230,214,204,
-246,231,118,206,121,159,239,233, 27,230,188,235,210, 43,202,204,137,218,138,162,164,104,132,108,178,201, 76,119,171,162,227,137,
-131, 53, 6,211,164,221, 25, 61, 35,208,185,224,151,178, 40,201,210,156, 36, 73, 25, 79, 82,166,105,142,174,181, 3,250, 40,133,
- 31,184,131,108, 16, 4,199,157,250,211, 20,238,255,186,127,125, 82, 15,251, 31,244, 47, 49,139,207, 59,230, 26, 62, 93,113, 57,
- 59, 0, 60, 38,189, 92, 28, 25,207,198, 40, 2,248,214,183,223,229,209,230, 33,158,239,211,237,247,249,212,107, 47, 19,134, 62,
- 73, 81, 49,154, 78,201,242,156, 52,157,178, 59, 61, 66,152,134, 76,103, 52,175,191,112,137, 23, 95,121, 1, 95, 88, 58,189, 14,
- 66,121,148,185,198,179, 62, 75,189, 54, 65,168, 24, 38, 41,187, 59,123, 84, 69, 73,232, 89, 44,154, 73, 61,101,100, 98,114,163,
-208,194, 96,109,134, 39, 67,242,188,192,138,144,165,229, 13,174,223,223, 97, 58, 73,233,246,150, 8,162,150, 75,159,211,245,220,
-189,240,123,141,169,125,222,112,231, 89,135,189,185,211, 96, 14,172, 57,249,247,117, 93,115,227,250,117,190,248,133, 47,178,181,
-187, 77,150, 36,220,191,255,136,172,172, 9,163, 22, 86, 8,142, 38, 99,246, 15, 15, 81,161, 59,233, 6,161, 79,141,102,120,152,
-226,251,238,223, 12,176,172,244, 98,170,162, 98,146, 22,115,206,189,187,175,168,249,129,114,105,169,207,104,116,196,118,146,179,
- 46, 61,122,173, 54, 85, 93,208, 10, 66,116, 85, 51,232,199, 20, 73,193, 97, 81,210,233, 78, 88, 81, 17,145,175,232,118,218, 12,
- 15, 71,116, 99, 31,163, 35,198,227, 9,190, 31,145,166, 53,121, 1,161, 15, 71,135, 21,167, 47,159, 71,120, 62,133,177,108, 62,
-216,102, 98,156,152, 37, 86,240,217, 23,207,114,250,204, 10,105,158,242,104,127,200,163, 81,206,176,130, 90,138, 19, 98,196,153,
-120,231,196,141,202, 10,188, 10,150, 61,133,213,112,246,211,159,226,236,167,174,242,247,254,201, 63, 33,166,226,181,179,103,137,
- 91, 1, 95,121,227, 2,217, 55,174,115,109, 88,179,151, 24,190,125,115,143,228,116,206,121, 35,217,216, 88, 39, 73, 50,170,170,
- 70,174,173,146,154, 28,107, 12,237, 40,166,215, 95,230, 96,111,135, 86,228,147,164, 25,105,150, 83, 25, 67, 50, 77,231, 49,161,
-198, 88,188, 32, 4, 47,198,111, 45, 17, 68, 1, 70, 87,248,249,132,190,167,136, 58, 45,118,239,110, 17,232,156, 0, 69, 5, 40,
- 99,136, 45, 72, 81, 51,136, 5, 63,246,133,243,124,250,165, 46,195, 29,184,240,218,151,104, 15,119,185,244,217, 37,218, 81, 72,
-232, 73,100, 93,184,157,241,153,117,110,198,130, 94,232, 19,134, 22,191,227, 19,116, 34, 90, 97, 76,203,143, 8, 2, 71,139, 11,
-155,209,186,239, 57, 52,172,211,188,200,121,178,218, 12, 42,229, 82, 1,157, 26,189,169, 51,115, 91,175,105,178,183, 93,103, 40,
-143, 59,204, 57, 0, 69, 55,221,227, 44,244, 68,156, 88,204, 30,239,220,221, 13, 92,235, 6,138, 35, 36, 22,229,172, 72,118, 38,
-200, 83,184, 69, 4,212,117, 73, 28,249,252,240, 31,250, 65,190,254,235,191, 65, 58, 77,157,143,222,243,168,240,120,247,250, 93,
- 70,133, 96,117,109, 29, 47, 90, 34,234,244,137,218, 29,162,110, 11,225,181, 17, 50, 32,201, 15,155, 96,144, 3, 4, 10,233, 9,
-218,180,241,195, 14,127,236, 71,191,140,231,133,252,131,127,252,207, 41,178,148,180, 16,244, 91,146, 34, 41, 8, 91, 30, 71, 71,
- 7,120,210,119,235,196,162,192, 90,203, 52, 73,208, 90, 19,199, 17,235,131, 62,182, 54, 40, 79,146,231, 37, 43, 43,203,172,172,
-174, 16,197,145, 43,122,114, 97,189, 38, 23,225, 30, 2,213,132,162,204, 80,167, 6,139, 17, 30,211, 50,231,254,195, 77,110,223,
-190,199,225,254, 8,180,165,215,233,209,138, 66, 86, 6, 61,206,159, 63, 77, 47,140, 49, 66,225, 9,151,170,166,236,241, 98,228,
- 68, 19,119, 76,100,253, 68, 26,170,239,190, 86,125,204,250,113,102,213, 53,110, 15,174,235,138, 42,111,186,244, 36,165, 40, 10,
-234, 90, 35,133,211, 3,205, 72,123,243,209,187,157,141,221,205,156, 66,103, 27,107,100, 93, 85,228, 89, 70,158, 21, 76,167, 41,
- 73,146, 81,150,122,174, 99, 8,131,128, 40,242,137, 35,231,117, 63,209,169,219, 79,108, 62,251,131, 41,232,207,203, 76,255,215,
- 86,204,231, 8,212,199,246,228,143, 55,168,139,227,148,199,148,226, 79,250,179, 37,126, 43,230,181,215, 94,161,211,221,162,215,
- 95,102,154,164,236,239,239,185, 48,140,218,146,228, 5,189,126, 7, 79,106,144,146,126,183, 15,218,146, 76, 70, 68,157,144,118,
-183, 69,168, 4,126, 24,112, 52,201,200, 18,205, 82, 55,198,168,154, 66,151, 84, 10,252,149, 85,138,180, 70,245,123, 4, 45,197,
-178,172,121, 33, 94,102,245,101,195,219, 55,190,195,205,187,239, 34,144, 4,170,205,205, 27,155,156, 62,115,129,235,223,249,160,
-137, 44,116,207,110, 85,107, 60,121, 60,181,152,191, 0,254,128, 31,243,167, 21,116, 99, 12, 86,202,103, 30, 36,124,225, 17, 74,
-143,223,250,245,223, 66,249,138,239,255,222,207,241,210,229, 43, 76,178,154, 73, 86, 97,109,201, 7, 31,188, 71,133,225,224,240,
-112,238,192, 48, 89,233,196, 61,218,208, 10, 3,190,255, 51,159,226,223,249,183,254, 2,119,110,220,224,191,249, 71,255,140,131,
- 73, 70,220,142,217, 62, 26,147,214,213,220,201,161,139, 20, 97,106, 42, 1, 91,147,132,141, 94, 15, 81, 11,116,161, 57,183,188,
-132, 68,241,104, 47,161,163, 4,183,239, 60, 66, 5, 33, 86, 43,198,163,148,186, 40, 81,198,176, 87,215, 28, 14,115,206, 94,108,
-211,237,175,176,179,239,108, 93, 82, 73, 90,126,196,254,120,202, 65,150, 51,198, 82,214,208,149,138,171, 27,109, 94,122, 97, 29,
-131,225, 59, 31,220, 96,148, 25, 38,181,161,146, 46, 55, 89, 88,221,136,118,196,211,237,132, 86, 33,172,166, 47, 20, 75,194, 16,
-116, 44,127,234,223,252, 83,252,212,207,255, 20,211, 2,126,225,253, 27,172,246,125,206, 71,150, 23,150, 67,118,199,150,163,218,
-103,168,107,238,236, 78, 41,178,187,140,142,198,156, 57,125,138,170,168,184,117,243, 14, 47,188,112,149, 86, 39,102,239,240,136,
- 48, 90, 7,169,216,217,221,199, 83,146,168, 21, 19,197,109,186,189, 37, 76,173,241,252, 16,223, 15, 8,227, 54,210,115,191, 91,
- 25,240,112,154,179, 61, 44,208, 38, 64, 91,193, 70,175,224,207,127,190,195,214,161,224,163,131, 2, 35,219, 92, 30,156,161,215,
- 83, 92, 62,223,227,205, 11, 33,121, 49, 66,245,206,242, 96,235, 16, 47, 20,232,108,138,167, 13,173,206, 26,195,163,125,218, 43,
- 3,186,171, 75, 68,177, 34,142, 60,226,174,135,106, 7,248, 81, 72,228,181,105,121, 33, 94,232, 53,193, 45,178,137,182,117,251,
-254, 32, 8,230,249,232, 82, 58,129,151, 53, 6,164, 90, 88,253, 52, 80, 18, 99,154,238,218,145,206,142, 41,150, 6,107,196, 60,
-238,114,230,153, 54,198, 32,156, 79,237,100,114,151,153,173,230, 84, 51, 26, 93,160, 95,206, 70,254,179, 2,176, 48,169, 50, 66,
- 80, 27, 77,167,221,230, 7,190,244, 37,126,247,155,111, 51, 26,141, 17,192, 71,119,183,185,118,231,144,160,183, 65,105, 61, 14,
-134, 19, 44, 30,101,105,217,221, 59,228,250,245,155,188,242,210, 21, 58,221, 21,170,108,159,201,100,130, 20,138, 40,246,169, 14,
- 50,226,118, 69,212,178,124,229, 43,159,103, 82,215,252,215,255,240,103, 72,178,138, 42,169, 24, 44,117, 64,149,216, 50, 69, 88,
-151, 98,183,180,180, 68,146,166,136,102,119, 94,153,154, 64, 56,173,193,233, 51,167, 57, 26,142,157, 61, 43, 47, 88, 89, 89,165,
-183,220,195,247,220,186,193, 44,218,139, 23, 89, 22, 77, 81,215,192,209,209,136, 95,254, 87,191,197, 79,255,220,175,112,227,222,
- 3,166,121,141, 48,138,192, 11,232,180,218, 92, 58,127,142,183,222,124,157,219,219, 67,206,174,118,121,237,149, 23, 88, 93,233,
- 32,133,231,184, 2, 11, 80,149,121, 13, 89,152, 38,219,167,172, 74,159, 63, 88,180,159,224,131, 78,234,138, 26, 52,215, 99,159,
-122,108, 59,171,203,146, 34,203,201,146,148,178, 40,209,250, 88, 32, 28, 4,129,243,163,123, 30,202,243,230, 86,236,121,116,239,
-236, 96,160,157,125, 45,203, 82,210, 36, 97, 58,201, 72,167, 41, 69, 81, 97, 44, 4, 82,225,249, 14,125,220,138, 66,162, 56, 36,
- 12, 67,212,231, 94,187,240,147,178,241,110, 44,176, 91,142, 79,182, 60, 37, 79,123,126, 17,219, 57, 59,119,150,253,250,180,241,
-244,211,118,235,143, 63,144,139, 31,251, 56,108,230, 89,123,251, 79,162,188,127,226,207,197, 99,102, 59,187,248,188, 53,123,140,
-185,218, 80, 83, 84, 53,101, 93,163,181,105, 78,244, 13,175,188,185,105, 56, 28,165,154,251, 97,183,182,182,184,113,243, 54,135,
-135,251,152,170,164, 29, 69,132, 81, 15,109, 21, 90, 10,164,239, 44, 32,121, 94, 48,205, 10,146,170, 38,110,247, 89, 93, 59, 67,
-127,176, 78,167,191, 78,216, 89, 33,236,175,209, 90, 59, 69,171,211,103,146, 85, 24,169,240,162, 16, 21,121,200, 64,145,151, 5,
-105, 82,112,243,198, 61,172,242, 57, 28, 79,152,166, 21,120, 45,218,189,101, 46, 93,186,200,155,159,186,202, 7,239,188,131,173,
- 42,130,208, 39,136, 67,164,239,200, 78,199,193, 45, 98,145,206,112, 98, 63, 36,143,165,111,199,234,207,121,204,161,120,234,212,
-194, 29,114, 92,102,248,140,218,165, 22,224, 51,204,197, 72, 13,134, 81,186,157,144,106,132, 54, 59, 59,123,188,251,209,117,138,
-186,230,209,195, 7,236,108,111, 83, 22, 37, 74,121,220,122,116,151,189,221,125,222,124,229,101,166,163, 49,121, 89,147,213,154,
- 73, 94, 35, 53,188,241,210, 21,254,242,191,253, 63,225,223,250,243, 63,206,203, 87, 47,240,198, 27,159,230, 75, 95,254, 34,223,
-247,125,223,195,159,254,211,127,130,105,146,114,237,246, 29, 76, 35,106,242,173,165, 43, 36,149,177, 84, 8,210,170, 38, 8,125,
-186,145, 79, 91, 57,107, 82, 89, 84,164,165,166, 86,150,210,104, 58, 97, 72, 53,206,241,149,219,199,230,121,197,169,139,103, 88,
- 62,181, 76, 8,196,161,199,242,169, 13,202, 60,103,165,187,196, 4,203,245,173, 61, 34,223,199, 22, 53,129, 39,248,212,165, 37,
-150,187, 17,191,253,206, 29, 30,238, 38, 76, 75, 77,102,172,251,190, 0,105,155, 65,146,120,204, 9, 58,123,147, 22,139,100,201,
-214,188,226, 73,178,173,109,110,252,210,215, 25, 31, 78,153,234,148, 47,127,254, 20,239, 92,223,231, 48, 43,233, 4,154, 0,203,
-118,102, 24,225, 58,199, 58, 55,244,186, 17, 81, 32, 88, 90,234, 17,197, 81,195, 26, 7,141, 37, 77, 11,162,184,135,144, 33,221,
-238, 82,179,115, 23,180,226,152, 78,183,143,192,162,117, 73, 93, 87,148,101,197,100,154,178,178,178, 78,212, 25,176,191,191,207,
-157,187,247,176, 6,146,163, 35,206,174,172,178,214,233,176, 28, 24, 94,218,232,112,101, 57,102, 41,204, 81,213, 24,116, 77, 94,
- 10, 14,199, 25,198, 86,180, 34,133,194, 58, 53,112,220, 70, 70,109, 14,167, 57,147,195, 29,246, 54,111,211,237,119,136,219, 49,
- 81, 20,209,142, 98,226, 32, 34, 12,124,130,224, 56,180, 37,240, 61,134, 7,251, 68, 65, 64,167,221,198, 83,162,225,142,207,162,
- 86,103, 72,226,198,117,225, 29, 99, 95,143, 85,237,114,158, 7, 39,132,117,100,185,230,240, 46,103, 62,108, 37, 17,141, 69, 14,
-121,236,170,152, 99, 71,109,243,118,108,252, 4,219,136,243,148, 56,246, 93, 53,207,169, 49,134,178,114,187,212,208,247, 25,172,
- 44,147,106,203,183, 62,124,192,239,188,179, 3,126,140, 10, 2,164,112,252,248,180,168, 25,167, 5, 42,136,169,234,146,118, 59,
-160,223,239,178,180,188,198,180, 48, 8, 63,166,170,220, 56,247,232,112, 68, 93,129,181, 5, 87, 47,159,227,202,149, 75,220,184,
-187,201,246,112, 66, 94,185,194,145, 78, 19,146, 36, 35,244, 61, 66, 79,129,173, 73,178,132,162, 44,230, 56,210,162,118,118, 44,
- 4,140,142, 70, 20,121, 65,149,231,152,162,194,179, 78, 71,224,135, 33, 40,137,109, 2,112,220,218,195, 96,165, 34,183,138,175,
-253,214,183,248, 91,255,229,255,131,255,254,103,127,133,173,253, 67,178,202, 98, 16, 24, 33,208,214,144,150, 5,219, 7,123, 92,
-187,125, 27,233, 7, 96, 21, 71,227,148,131,225,132, 86,111,224,174, 63,233, 14,243, 46, 2,183, 41,175,198,130,149,115, 75,218,
- 19,173,152, 61,134,160,139, 70,177,110,102, 30,167, 38,100, 10,163,155,195,155, 70,204, 57,252,238,160, 39,148, 66, 41, 7,133,
-177,205,189,202, 34, 23,130,190,154,177,123, 93, 82,231, 25, 69, 90, 48, 29, 79,152, 78, 82,138,188, 68, 91,103,109,140, 67,143,
- 86, 59, 34,142, 35,130, 40,112, 78,135, 6,136, 99,106,131,169, 12,186,121, 78,234,178,162,200, 10,210, 52, 39, 73, 75,146,164,
- 36,205, 75,140, 53,115,237, 72, 28, 7, 14, 92,211, 10, 8, 91,238,223, 84,159,125,245,194, 79,206,118,230, 39, 11,102,131, 77,
-125, 28,159,186, 88, 64, 23,212,203, 98, 1,213,250,180, 98,251,100, 65,126,190, 37,234,227,138,250,199, 5,189, 60,149, 58,244,
- 4,155,247,241,231,220,160,103,145,118,149,166,172,106,202,230,119,173,221,232, 72, 10,231,207,156, 21,245, 57, 75, 90, 10,124,
- 63, 68,121, 30, 91, 59,219,110, 52,236,251,116,218,109,202, 74, 32,195,136,202,130,244, 98, 6,189, 13, 58,173, 13,186,189, 51,
-156,189,252, 18, 65, 39, 2,169,152, 36, 9,195,209, 17,183,110, 93,227,240,104,151, 52, 29,113, 52, 28,241,246,183,191,197,165,
-139,231, 56,125,122,149, 86,164,216,222,122,200, 15,255,161, 31,226,242,197,211,124,248,254, 55,249, 19,127,230,199, 88, 89, 91,
-227,218,205, 7,248,241, 18,126,208, 97,125,253, 12,127,248,143,126,133, 91, 55,111,130, 54,196,237, 22,185,201,233,246, 90,212,
- 85,190,104,218,124,198, 20,221,156, 68,239,216,227, 64,132,103, 21,245, 69,127,250,226,255, 47,170,219,141,117,188,234,185,111,
- 84, 48,103,236, 23, 69,193,123, 31,124,192,193,104, 76, 16, 4,116,219,109, 90,113, 68, 81,148,236, 30, 28,242,104,119, 7,105,
- 32, 80,138,188, 40, 73,203,146,172,172, 17, 82,241,249, 79,191,206, 95,249,119,254, 18,159,126,245, 5,150,122, 45, 71, 13,243,
- 61, 78,157, 57,195, 75, 47,191,196,229, 43, 23,121,241,197,151,249,234,191,252, 26,163,233, 20, 33, 32, 22,138,181, 86,135,188,
- 40,230, 66,185,178, 44,137,125,143, 78,164,176,182, 98,169,215, 99,146,228, 72, 95,144,164, 37,171,189, 46,201,120,130, 23, 8,
- 58,203, 61,140, 54,108, 92, 56,133,161, 32,182, 37,189,110,196,164, 72,152,140, 38,180,194,136,123,195, 49, 71,147, 28,145, 87,
-244,162, 24, 60,205,217, 21,159,195,225,152,111, 61, 24, 51,205, 45, 93, 41,136,141,160,237,249, 84,214, 82, 9, 87,180,149,145,
- 14,233,107,143,139, 4,246, 24,135,220,182,134,215, 37,108, 68,208, 33, 71, 11,143,137, 41,249,193,207,173,241,242,167,222,226,
- 23,126,243, 22,158, 16,132, 6,118, 19,205,212, 66,109, 21,161,178, 40,107,136,164,164,200, 11, 14,135, 99,166, 89,198,112, 56,
-100,121,109,141,165,165,101,132, 84, 20, 89,129,174, 43, 60, 97,193, 58,126,117,153,166,248, 74, 80,151,110,202,225, 41,137,174,
-107,140,214,172,111,172, 83,228, 25,183,111,223, 64, 88,203,189,219,247, 24,141,142,220, 1, 55, 75,241,171, 49,117,121, 8, 85,
- 74,167, 21, 17, 4, 17,202,143,104,119, 98,250, 75,109,150, 7, 75,172, 46, 47, 19,183,219,180,186, 3,114, 13,126,212,102,239,
-209, 93,146,163, 29,226, 56, 38,142, 34, 90, 81, 76,236, 7, 68, 65,224,172,108,179,124,238,192, 35,244, 3, 58,157, 22,157,118,
-219,121,213,103,248, 97,217, 36,175,121,202,253,153, 82, 40,207,145,208,102,225, 44,243,107,117,126, 77, 51,183,181, 9, 41,231,
- 62,108,165,142, 67, 75,102,217, 16, 82, 28,143,132,221,245,236, 49,203,249,126, 28, 47,106,173, 89, 92,231,206,167,134, 85,229,
- 64, 37,194, 90, 60,223, 35,106,119,201, 42,143,223,125,247, 17,219,195,140, 78, 55,160, 27,121,132, 18,166,211, 12,107,160,221,
-106,209,239,182, 9, 26,198, 67,220,233,145, 20,154,168,213, 65, 24, 67, 50, 30,115,116, 56, 36,207,115,210,100,140, 68,211,142,
- 67,190,239, 11, 95,224,189, 27,119,216, 59, 58,114, 89,235, 69, 77,213, 76,186, 90,113, 72,154, 78, 27, 54,187, 43,148,181,214,
- 20,101, 73, 94,228, 36,105, 74, 50,157,162,171, 18, 83,214,100, 73, 66, 50,157, 82, 20, 5,194, 83,132,113,212,208,249,220,190,
-221, 8,197, 48, 41,248,191,255,189,127,196,255,245,239,254, 67,238,108,238, 82, 91, 49,111, 27,230, 69,209, 13,230,177, 88,202,
-186, 98,115,107,135,201, 40,165,221, 29, 96, 9,248,232,198,109,162,184, 67,171,221, 37, 10, 34,119,232,106,130,110, 88, 80,205,
- 47,138,162,237,226,182,124,129, 57,107,230,222,114, 59,247,160, 31,115,221, 45, 86,187,107,218,217, 19,221,170, 68,121, 30, 66,
- 45,132,202,136, 38,211,221, 90, 96,134,131, 45, 40,210,148,116,154, 50, 29, 39,228, 89, 78, 85,107, 44, 22,233, 9,226, 56, 32,
-138, 99,130, 48, 64,121,142, 26,103,140,161,170,106,170, 82, 83, 21, 21,117, 89,185,110,191,170, 41,202,146,178,212,228, 69, 69,
- 86,214,110,189,162,164,115,120,132, 62,113, 28,210,106,199, 4, 81,232, 14, 10,193, 66, 81,127,154,194, 92, 46, 20,251,167, 21,
-117,113,162,168, 31,191, 24,158, 87,136, 31,175,168,207,235,194,255, 32,138,250,227, 93,186,125, 92, 67,192, 73, 0,191,110, 20,
-135,117,237, 10,122, 81,214,148,181,203, 15,158,125,173, 89, 81,119,182, 25, 15,223,243,241,154,128,151,178,172,185,127,255, 33,
-173,184, 69,191,215,103, 48, 88,166,191,180, 70,216,234,224,199, 17,173,118, 12,104,246, 14,182,152,230, 99,202,116,140, 29,143,
-185,119,235, 54,103,207,158, 71,133, 49,147,194,112, 56, 46, 89,217,184,192,103, 63,247, 38,105, 62,225,251,191,248, 5,254,216,
-143,255, 41,214, 78,159,225,253,143,174,241, 71,254,204,159,161,211,139,185,118,227,125,150,214, 79, 49, 46,106,174,223,126,136,
- 10, 58,196,173, 30, 82,250,252,241, 63,254,135, 26, 36, 35,104, 83,113, 56,218,231,194,249, 83, 76,199,135,243, 19,238,227,202,
-208, 19, 65, 21,199,146,186,121, 49,127, 90, 81, 95, 68,195, 46,226, 98, 23, 11,252,172,168,219,199, 56,251,238,198,225,222,223,
-219,219,229,237,111,189,141,242, 2, 94,127,233, 21,206,174,175, 19,122, 62,126, 24,115, 56, 73,232,246,250,120,210, 99, 52,157,
-226,183, 90, 76,139, 2,163,107,206, 46, 47,243, 31,255,229,255, 25,167,215, 87,136,163,128, 48,244, 8, 66, 31,233, 7, 13, 71,
-217, 67, 72,201,202, 96,133,157, 71,219,188,251,206,187,206, 39, 92, 27,218, 81,192,218,114,159, 34,207,145,214,208,142,124,234,
-188,192,148, 37,189, 94,139,188, 41,198,105, 90, 16, 7, 46, 26, 54,138, 37, 37, 21,253,245, 37,138,162, 66,120, 80,102, 71, 12,
- 34, 69, 50, 25,178,189,123,192,209, 97, 65,111,208,231,168,132,195,253, 17,129,180, 24, 5,190, 39,232, 8,184,179, 59, 97, 55,
-119,193, 36,171, 74,178,100, 33,246, 20, 19, 93,147, 75,199,165,158,171,107,155, 81,166, 93,196, 87, 90, 67, 23,120, 93, 8,214,
- 58,150,238,138, 37,209,150, 67, 99,121,237,149, 30, 63,242, 71,190,204,111,189,183,201,253,237,148,110,183,141, 46, 10,166,165,
-164, 16, 10,101, 13,190, 49,148,147,140,100,146, 33,148, 15,202,227,202,203,175, 32,172, 96, 58,153,160,235,156,178, 24, 99,170,
- 4, 83,103, 84, 89, 70, 58, 25, 51, 26,238, 49,220,219,162, 72, 39, 14,185, 42,192, 19,141, 90,217,143,185,112,233, 18,219,155,
- 15,233,117, 35,164, 40,192, 36,108,172,182, 88, 91,109,177,180,212,163,219,237,186,155, 82, 20, 53,157,143, 34, 10, 67, 58,157,
- 86,211,105,135,132, 81,139,168,221, 67, 6, 49, 65,220, 97,124,176,197,112,119,147, 40, 12,136,195,208, 21,243, 70,104, 20, 53,
-221,121, 16, 6, 4, 77,118,122,187, 21, 59, 66,161,114,163,120,207,115,172,119,169,148, 75, 37,155, 5,179,204, 72,104, 11,252,
-246,197,123, 26,182, 97,205, 47,164, 10,206,175,103,213,100,110, 47,222, 19, 79, 76, 24,197, 60, 91,220, 24,230, 4, 49, 26, 23,
- 3, 51,226, 26,199,212, 48,107, 44,117,165,155,200,108,131, 18,130, 56,104, 83,100, 5, 31,221,217, 33,205, 43, 20,134,170, 40,
-201,147,140, 65,183, 67,160, 28,107, 33, 10, 34,124, 63,160,213,138,177, 22,246,247,118,233,196, 62,189, 78,196,116, 60, 36, 43,
-115,202,170,196,234,154,253,221, 29,178, 44,103,227,236, 89, 62,184,121,143,229,245, 85,130, 40, 96, 50, 73, 9,226,134,104,102,
- 45,186, 40,240, 4,136,134, 99, 31,248, 94,147, 96, 89,187,191,175, 53,181, 54, 24,171,201,203, 12, 99, 12,217, 52, 65, 90,104,
-183,218,120,158,143, 70,114,127,111,194,255,230, 63,255,219,252,244, 47,126,157,164,168, 92,135, 43,101,179, 8,125,250,196,214,
- 54,129, 49,227,113,194,131,135,155,212,198,178, 50, 88, 99, 60, 74,184,115,251, 33,129,223, 97, 48, 88,113,160, 22,171, 49,212,
-174, 17,105,238, 79,243,164,201,167,221,235, 27, 97,154,104, 14, 83,114,214,180,104,237, 58,126, 99,176, 13,111,192, 54, 97, 51,
- 66, 74,119, 31,105,138,186,104,138,250,172,168, 88,107, 78,168,221,167,147, 41,201, 52, 37, 47, 74, 55,249, 53, 6,207,147,132,
-126,128, 31, 56,150,130, 83,252,219,102, 42, 92, 53,201,119,117,115, 29,185,111, 85, 55, 57,245,174, 22, 85, 24, 83, 55,249, 3,
-174, 83,111,181, 35, 23, 6, 19,185,209,187,231,121,127,176, 69,253, 89, 99,247, 79, 26,206,242,113,135,129,223,111, 81, 63,105,
- 63,120, 10,112,198, 52, 23,106,229,248,199,174, 75,119, 35,120,109, 78, 22,117,207,243, 8,195,208,117, 3,205,137, 95, 8,199,
-156,110,181,218,156, 61,123, 30, 33,157,122, 58,205,199, 76,178, 33,123,195,237, 6, 52, 16, 82, 87, 22,229,135,108,172,159,231,
-133,203,111,176,181, 63,230,207,254,196,255,152,203, 47,190, 74, 85, 9,148,240,249,129,239,255, 1,226,118,196,163,205, 45,110,
-223,189,207,181,235, 55,121,240, 96,155,180,208,188,243,157,143,248,246,187, 55, 89,217,120,145,180,242,153,102,134,173,237, 61,
- 38,163, 3,138,228,144, 59, 55,223,225, 95,252,119,255,136, 95,252,231,255, 3, 55, 62,120,151,213,229, 30,161, 39, 72,167, 99,
-183,102,176,134,197,216,194,197,149,199,241, 72,233,147, 23,245,197, 46,125, 49,157,237,241,162, 62,155,238, 28,163,101,155,143,
-149,138,186, 46,185,117,231, 54, 7,251, 99,116,154,225, 91, 75, 24, 4,168, 40,100,152, 36,244,123, 3,214,215, 79,177,189,191,
-207, 97, 50,166,172, 43, 66, 33,249,247,254,226, 79,240,169, 23,175, 16, 5, 30, 81,228,198, 80, 94,224, 35,253,230, 69,232,121,
- 40,169,216,186,255,128,150,231,179,253,112,147, 42, 47,121,233,133,203,188,246,202, 85,190,240,153,151,105,139,154,149,126,139,
- 55, 95,125,129, 87, 47,109,208,111,121, 76, 38, 83,118, 15, 18,162, 86,140, 82,130,100, 90,224,251,146,179,103, 6,196,237,128,
-184, 21, 50, 28, 38,140,134, 19, 98, 95,176,220,239,146,166, 41,211,105,225, 4, 43,173, 14, 15,246,198, 12,194, 22, 71, 73, 74,
- 41, 13,189, 86, 7, 95, 27, 30,140, 42, 66, 63,198, 55,134,182,181,180,125,201,160, 31, 51,202, 75,114, 51,147, 96, 53,126,232,
- 25,120, 99,230,145,198, 34, 13,172, 11,197, 43, 50, 64,149, 26,124,193,126,110,153,248,240,185,207, 15,120,241,213,211, 76, 68,
-143,159,249,218, 7,132, 49, 12, 2,205, 81,106, 24, 11,139,178,150,192, 90,214,122, 29,206,156, 58, 77,127,101,149,243, 87, 46,
- 81, 91,215, 41,182,162,144,186, 74,240,188,138, 64, 89, 2, 9, 65,163,212, 61,125,250, 20, 97, 24,176,190,190,222, 36,134, 85,
-128, 91, 39,137,160,195,217,115, 23,136, 91, 45,246,246,118,240,164, 70, 87, 83, 48, 41, 43,131, 37, 46, 94,188,204,250,250, 58,
-221,110, 15,111,118,115, 4, 60,229, 0, 78,182,214, 20,101, 65, 85, 25,144, 62, 65,220,161,172, 53,233,104,159,253,173, 7,180,
-227,102,220,238,249, 78,245, 30, 52,133, 60,240,231,239,251,158, 55,143, 69,150,194, 1,103, 92, 81,110,174, 69,142, 89,238, 51,
-187,213,252,239,164, 88, 24,209,186,195,237, 44,181,145,197,226, 47,165, 67,166, 10,117,236,102,183, 98, 94, 80,102,230, 43,151,
- 98, 38, 30,195,151, 31,175, 46,101,115, 16, 56,254, 0,225, 14, 0,238, 78,142,168, 52,186,172,240,253,136,131,225,136, 91,155,
- 99,198,121,197,254, 56, 39, 43, 13, 27,167, 86, 81,194, 16, 71, 1, 81, 20, 16,199, 33,237, 56, 34,110,119,152, 76,198, 72, 97,
-232,182, 92, 54,247,238,193, 33,181,182, 76,134, 71, 72,171,217, 63,216, 35,173, 53,155,135, 35,222,191,245,144, 81,154, 55, 17,
-211, 26,139, 98,125,101,153, 65,187, 75,153,165, 4,190, 34, 10, 35,132,176,120, 74,146, 23,121,115,127,108,162, 88, 77, 9, 82,
-163,132,196,228, 21,101,150, 83,100, 57,210,243, 24,142,167,252,229,255,228, 39,121,251,189,107,212, 72,199,243, 21, 14,215, 44,
-229, 83,114, 37, 30,171, 5,149,169,201,138,140,173,237,109,246, 15, 14, 88, 93,221,192,247, 90,220,191,191,205,222,193, 33,203,
- 43,203,132,145,143,165, 70, 10, 61,191,209, 47, 38,118,206,168,108,115,253,152, 49, 46,172,178,217, 95, 99,220,232,220, 54,145,
-183, 24, 39, 82, 51,141, 96,109, 38, 0,124,178,168,203,249,164, 69, 24,247, 92, 21, 89, 78, 50, 77, 25,143,167,100,105, 78, 85,
- 85,212,198, 77,102,102, 86,203, 32, 60,222,169,207,121, 29,205,117,229, 86,185,199, 35,249,178,170,201,138,146, 36,203,201,178,
-140,186,174, 17,205, 65, 53,138, 3,218,237,118,163,122,119,202,119, 33,196,211,125,234, 31, 7,144,121,106,145, 22,207, 87,180,
- 63,110,113,250,110,116, 89,143,139,234, 30, 23,216, 61, 77,120,245,248,199, 60,237,231, 89,180,193, 61,238, 77, 63, 30, 17, 47,
- 20,183, 5, 65,217, 19, 95,175, 25,211,221,190,118,131, 7, 15,119,168,106,203,249, 11,231,169, 12,248,126,151, 83,171, 3,180,
- 58,160,223, 63,205, 27,175,189,197,221,219,247, 41,234,154, 75,151, 46, 49, 30, 30,144,235,130, 95,248,149,159,103, 56, 60,224,
-212,234, 26,113, 16,242,246,183,126,135,254, 96,137, 23, 95,124, 3, 97, 45,166,170,168,107, 77, 93,249,212, 53,156, 59,125,150,
- 94, 43,166,221,110, 17,248, 30, 95,120,249, 50, 59,155,247,249,232,253,239,144,167, 19,214, 7,203,116,123,125,164,242, 88, 90,
- 90,230,224,112,159, 7,155, 15, 26,159,246,243, 19,134,158,182, 30, 89,140,100,125,246,227,234, 16,154, 66,186,100, 43,132, 89,
-152,144, 44,200,100, 23, 14, 4,179,235,173,219,235,211,110,119, 88, 25, 88,162, 48,162, 42, 11,118,182, 70,140,235,138,237,189,
- 35, 30,153, 45,148,231,163, 34,159,184, 21,147,165, 41, 63,248,253,223,203,231,223,120,221, 17,198,102, 89,215,158, 43,228,136,
-102, 95,106, 32,203, 51,222,255,206,183,185,119,243, 54, 63,248,189,159,227,203, 95,252, 18,251,195,125, 14,247,238, 67, 54,100,
- 37,212,100, 71, 35,178,157,130, 86,191,195,114,203, 35,241, 44,221, 94,200,221,209,136,211,131, 46,203, 65,151, 44,201, 28,232,
- 36,244,217,124,176,199,229, 75, 87,120,112,247, 33, 59,155, 35,172,241, 88, 95, 93,166,172, 74,234,218, 98, 38, 57,190, 31, 56,
-161,140,128,164,180,216,225, 4, 43, 44, 90,131, 53, 57, 45,165,144, 72,214, 7, 93,254,216, 31,253, 33,142,126,234,231, 24, 30,
-165,104,100, 19, 16, 97,231,251,221,185,224,170, 41,246, 3,169, 72,132, 65,214, 1,229, 81,192,118, 85, 16,158,173,240,163, 8,
- 21,180,121,225,106, 23, 29, 70,220,221,203,184,218,182, 4, 82,160, 12, 4,158,160,219,246, 9,219, 1,211, 50,229,202,197, 87,
-169,209, 32, 12,166,174,216,223, 31,177,178,220,162, 44, 11,140,213, 8, 63, 68,160,232,116,123, 88, 21, 18,246, 66, 76,232,115,
-229, 83, 87, 8,188,128, 86,220,161, 44, 53,227, 2, 62,122,255, 35, 94,127,235, 45, 66, 63,226,253,239,252, 22,107,203, 75,132,
- 34,199,151,224, 53, 60,246,193, 96,141,162, 40,153,102, 25,101,161, 27,239,174,160,168,106,164, 23, 96,144,212,198, 98,180, 38,
- 77, 50, 76, 93, 57,176,140,239,187,195,180,239, 17,120,126,147,211,173,240, 61,183, 15,247,154,209,186,148,224, 9,217,240,218,
-105,174,199,227,235,110, 22, 89, 42,173,125, 98, 15, 55, 7,147, 8, 39,118, 51,166,129,133,204,212,219,198, 98,106,141, 82, 94,
- 67, 13,179, 78, 48, 39,103,175, 11, 3, 10, 4, 10,107, 68,147,165,173, 49, 22,188, 89, 4,177,105, 14,212,178,129, 38, 27,219,
-192, 87,220, 4,208,177,209, 29, 59, 94,152,138,216,215,188,118,229, 12,143,118,199,124,112,152,145, 11,193,186, 31,144, 10, 31,
-105, 13,113,153,177, 44, 90, 24,157, 97,234, 18, 37, 90, 4,126, 64,167,219, 98,253,204, 6,185,129,237,195, 9, 82,248,212, 89,
- 66, 28, 10, 54,247, 71,236,235, 3, 70,211, 41, 37,206,130,231, 1,195,188, 98,156, 31,178,119, 48,228,194, 82,151, 83,107, 75,
- 20,186,134, 60,197,243, 67, 87,220,154,233, 69,150,185,112,146,209,196,112, 48, 12, 24,117,143, 56,127,234, 12,166,214,206, 70,
-106, 13, 81,127,137, 83,203, 43,220,188,117, 15,172,165, 50,218,133,193, 72,133, 69,159,136, 78,125,252,126,100,140,193, 10,235,
-108,127, 69,197,141, 59,215, 25,143, 71,252,217, 31,255,179,244,186, 61,174,221,124, 64, 82, 20,124,229,203,159,165,215,245,156,
-101,146,153,195, 97, 70,101,211,115,122, 31, 77,247,143,177,206, 90, 56, 27,183, 55, 95,203,145,113,204, 28, 7,126,194,241,244,
-248, 84,102,134, 9, 23, 18,211,228,165,235,170,164, 46, 42,178, 52, 37,203,114,178,178,116,205,160, 0,223, 83,196,161,179, 53,
-135, 97, 83,128,229,108, 86,225,244, 57, 8, 11,210,125,125,151, 91, 95,187,176,150,188, 36,203,220, 1,129,166, 97,242,125,159,
- 40,140, 92,156,112, 51,181,154,137, 46,159,218,169, 63,109,164,254,212, 78, 93, 62,185, 83,255,228,152, 86,251,137,246,239,223,
- 45,161,238, 89,202,234,197, 4,183,199,119,234,115, 88, 74, 67,121,170,203,106,222,169,207,198,239,110,167,238,254, 9,247,160,
-186,157,250,140, 51,173, 60, 5, 6,178,172,100, 56, 28,209,238,116, 89, 59,125,134, 78,175,207, 96,229, 12, 47,188,250,105,182,
-246, 14,169,106,205,195,123,247, 56, 58,218, 35, 43, 70, 28,236,111,163,179,140, 79,191,250, 42,177, 31,114,106,245, 20,157,214,
-128, 32,232,209,234,172,208,107,183,105, 5, 49,129,244, 25,116,251,244, 90, 93,234,188, 96,208,237,115,229, 84,143, 79, 93,234,
-177, 18, 75, 90,182,164, 30,237, 19,214, 37, 47,159, 63, 71,212,196,244, 73,207,195, 11, 67,231,137,173,106,142,142, 70,160,220,
-133,248,180,135,245,132,146,119,225, 1, 51,230, 24,188, 96,236,201,206,254,137,184, 85, 79, 62,217,161, 31,191, 58,230,227,119,
- 55,198, 20,243,221,164, 31,134, 72,229,179,189,119, 64, 24,132,116, 58, 49, 78, 84,107, 73,210,148,179,103,207,144, 38,137, 27,
-253,153,154, 64,193, 79,252, 27,127,146,203,167, 55, 28, 71,191,229, 19,181, 98,194, 56,198,247, 93,218,145, 64, 32, 12,124,248,
-157,107,220,188,246, 62,191,251,219,191, 73, 93,106,231, 41,174,114,198,251, 15,209,211, 67, 90,161,162,221,106,225, 9,203,209,
-254, 30, 27, 43, 3, 14, 14,198,140, 43,195,195,164,164, 21, 5,116,124,133, 41,115, 86,215, 86,137,131,152,100,156, 32, 61,159,
-195,221, 33, 73,166,121, 48, 42, 17, 65,155,225,222, 20, 63,106,131, 39, 73, 42,205, 97,146, 51,169,107, 74, 4,133,182,244, 2,
-197,165,203,103, 81, 29,159,182, 31, 33,210,146,126,109, 16,121, 66,216,241,217,154,166,140,140,160, 34,196, 72, 15,221,136,114,
-204,124, 62,108, 89, 18,150,203,161, 36, 80, 6,188,128,212, 74,118, 49, 92,125,101,192,235,175,191, 70,171,125,137,221, 3,248,
-234,191,250, 22, 73, 90,162, 11, 87,154,106,171, 88,237,120,244, 98,159,193,160,199, 96,109,149,176,221,118,209,164,210, 21, 40,
- 95, 9,116, 93, 19, 5, 49,117,109,248,212,235,175,115,241,202, 21, 46, 92,188,204,185,203, 87, 56,117,238, 60,221,165, 21,214,
- 79,159,165,183, 52,160,210, 22, 33, 37,203,131, 21,150,151, 87, 56, 26, 39,172,174,159, 65, 55, 9,157, 23,207, 95, 96,101,121,
-133,186, 9, 10,193, 42,130,208,197,162,250,158,114, 49,165, 42, 68, 27,199, 16,232,244, 7,180,186, 75, 8, 63,194, 90,193,209,
-254, 38,217,248,176, 73, 89,115,157,122,232, 53,212, 56,175, 65,194,122, 46, 59,221, 83, 30,126, 35,206,156, 89,216,132,116, 69,
-121,118, 63,147, 66, 28,103, 84, 72,123, 2, 36,117, 2, 7,203,113, 42,155, 20,174,163, 23, 51,203,161,144, 77,225,158,225, 97,
-155, 44, 9,225, 80,199,194,226, 60,199, 85, 77, 85,214,152, 90,187,136,228,217,247, 49,203, 23, 95,176, 41,206,196,116,162, 9,
-150,209,218, 5,232,140, 39, 19, 38,211, 20, 83, 90,198, 73, 77, 90,186, 48,148,181,149,101,124, 15,150,251, 45,150, 58, 33,177,
- 47, 48,117,141, 23, 68,140, 39, 9,131,229, 21,162, 86, 23,235,197, 68,253,117,100,208, 37,201, 74,182,247, 15,121,116, 56,230,
-219, 55,183,121,116, 88, 80, 90,136,162, 8,107, 44,169,117, 8,223, 64, 74,164,182, 76,243,156,164, 42,161,214,120, 77, 55, 89,
-215, 46,168, 6, 99,168,203, 98,254,250, 54,198,146,101, 5, 73,154,204, 71,253,232,154, 31,251, 99, 63, 74, 43, 12,184,115,251,
- 46,101, 85, 29,143,197,191, 27,195, 77,179, 18,156,166, 83, 30,110, 62, 98,109,109,131, 40,238,144,229, 37,155,155,155,156, 63,
-123,142,192,247, 27,129, 91,141,105,240,172,117, 89, 81, 87, 21,117,179,171,174, 11, 87,120,171,162,164, 42,221,155,174,102,251,
-243, 70, 40,103, 12, 88,189, 48,126,111,200,121, 77,135, 46, 61, 23, 82, 35,165, 59,120,155,218,253,187, 69,214, 32, 92, 71, 83,
-166, 73, 74,150,149, 84,181, 27,167,135,190, 34,142, 34, 7, 68,106,172,108,179,157,255, 9,134, 94, 83,195,170,162, 36, 77,156,
- 31,125,154,100,164,153, 91,111,168, 70, 59,209,110,187, 85,110,171, 21, 19,134,110,164, 47,149,194, 24,243, 49, 68, 57,241,252,
-206,253,105,132,158,103, 21,241,167,209,225,158, 70,251,249,184,247,159,101, 85, 16,143,165,245,124,210, 73,195,226,231,204, 78,
-240,166,121,161, 90, 51, 67, 0,138, 99,248,140, 56,249,115,206,212,178,179,177, 92,167,221,230,202,165,203,244, 87,214, 57, 24,
- 29, 49,201, 82,146,124,151,247,239,188,207,210,218,105,170,220,178,212, 95,165, 21,196,248, 65, 64,165, 45, 81,212, 97,208,237,
-208,243, 21,171,221, 46,129,167, 40,242, 2, 43, 32, 23, 22, 97,106,138, 52, 67,228, 25,121, 50,129,116, 66,232, 89,202, 68, 50,
- 60,212,104, 35, 73,210,146,178,246,160, 53, 96, 98, 52,217, 96,131, 58,205, 33, 10,152,232,138,105, 86, 34,181, 70,120,146,218,
- 86,104, 52,202,202,103, 62, 30,207,125,248, 62, 38,230,240,105,148,185, 39,236,139,226,164, 77,196,117, 65,112,247,254, 35,110,
- 63,216, 68, 9,193, 82,236,115,102,181, 71, 43,138,232, 6,146,213,149, 37, 70,195, 67,180,129, 64, 72,250,253, 1,103, 79,173,
- 59,142,119,208, 32, 64, 3,223,165,231,121, 18, 79, 72, 48,150, 27,215,174,115,237,253,235,236,239,238,209,110,199, 32, 52, 89,
- 50,197, 86, 25, 58, 25,145, 7,208,238,172,227, 73,205,193,209,136, 36,171,120,255,195,187,180,123, 3,250,129, 66, 28,109, 49,
- 60, 72, 56,119,113,131,210,207, 24,101, 37, 81,167, 79, 33, 36,249,225, 46,166,174, 16,190,207,168,172,249,224,209, 1, 87,250,
-203,236, 28,236,177, 34,218, 68,113,135,145,153, 82, 56,222, 31, 53, 26,237, 11,250,161,207,198,233, 21,234,210,195, 63, 3,193,
-248,144,205,131, 61,252, 65,196,165, 65,155,228, 48,167, 16, 53, 82,128,175, 4,161, 39,233,181, 91,116, 90, 17,203,253, 22, 23,
-219, 45,206,183, 98, 58,162, 38, 14, 67,182, 38, 7,172,234, 14, 66, 30,241,207,254,217,215, 24, 13,191,134, 8, 35, 62,119,169,
-195,173,135,154,116,148, 18,251,150,115,202,227,204,250, 41,194, 80, 80, 91,205,242,233,179,132,173, 14,182,200, 8,189, 0,227,
-213,164,101,202,242,202, 26,237,184,205,133,115,103, 88,234,183, 89, 89,233,187,131,108, 24,209,237,245,153, 38, 83,252, 32,194,
-214,110,167, 90, 87, 5,195,244, 1, 97,103,153,245,139, 47, 33,148,226,252,149,151,169,139,156,202,102,196,113,155, 32, 44,200,
-178, 97,131,211, 52, 13,227, 65,161, 77, 77, 86,104, 64, 81,155,154,188,168, 9,202, 26, 79, 22,212, 86, 54, 78, 10, 87,184, 93,
-241,118, 29,251,172,160, 43,213,248,209, 27,125,134, 39, 29,141,173, 9, 95,127,194,105, 51,123,173,107,109, 65, 59,145,230,236,
- 26,116, 28,115,133,197, 52,187, 86,131,105,240,164, 2, 7,150, 17,158,116,171, 58, 91, 99,204, 44,156, 72, 34,240, 28,250, 66,
- 59,254, 69, 61, 27, 79, 87, 37, 70, 27,180,242,176,129, 19,193, 9,137, 35,236, 89,135, 72,157,237, 81,133,144, 8, 5,182,150,
- 24, 25, 98,189,138,184, 21, 17,123,150,229, 80,240,169,165,144, 78,153, 50,174, 74,246,239,221,101,237,181, 43,244,218, 93, 34,
- 63, 32, 84,138, 86,232,130, 91, 70,227, 41,225,193,152,160,181,132, 12,150, 8,123,138,171, 27, 87,121,245,141,207,241,175,190,
-246, 47,249,206,195,175,115,144, 24,202,230,222,166,155,172,116,163, 4,133,181, 76, 53, 8, 93, 17, 26, 67,158,106,170, 48, 71,
- 8, 73,171,219,165,221,105, 81,215, 21,117,153,227,171, 38,155, 92, 11,138, 82,131,202, 41,109, 77, 90,164,148,217,148,108, 52,
- 36, 59,218,227,207,253,240,247,241,214,167, 94,225,111,254, 87,255, 79,238,238,236,146,107,139, 80,158, 43,252,207,187, 71, 91,
- 57, 15,129,154,173,164,182,119,119,249,169,127,241,211,252,241, 63,250, 39,185,114,241, 50, 69,161,249,245,223,248, 54, 95,249,
-226,103,241, 69,133,174,167,152,186, 66, 87,204, 65, 46, 70,155,249,120,221,189,239,132,121,226, 68,100,244,236, 16,103,155,196,
-190, 69, 24,215, 66, 2,155,177, 32, 27,139,174,209,115,132,235,204,147,158,103, 5, 85,169,155,245, 68, 77,224, 43,180,241,154,
-181,110,229, 64, 61,139, 24, 93,117,172,233, 48,198, 64,221,124,159,198, 77,121,156,208, 78, 52,177,187,174, 75, 15,103,196, 68,
-207, 59, 30,227, 55,215,182,247,113,129, 39,207, 31, 91, 47,168, 10,197, 98,177,158, 39, 12, 62,118,227,230,132, 5,224,121,133,
-247,113,113,246,179,208,177,139,127,254,228,136, 95, 60,181, 51,127,218,207,227,132, 25,102,254,187,123, 59,238, 74,159, 23, 18,
-224,108, 90, 2,169, 60,148,239,243,224,209, 35, 42, 60,226,126,159,246,210, 42,210,239, 83, 91, 69, 85,107,150,251,203,248, 86,
-144,142,143,216, 59,216, 5,155, 19,213, 7, 28,141,129,184,195,114,120,137,131,163,140,160,213,162,208,154, 32,106, 17, 71, 62,
-194,104,202,162,160,180,134,168,215,165,180, 53,247,118,199,124,180,121,200,225,209,144,113,154, 48, 74, 18,146,178, 96,156, 78,
- 73,146, 12,146, 2, 47, 80,108,156, 90, 99,173,223,166, 23,122, 40, 91, 99,168, 27,181,238,179,215, 28,207, 60,188,217,143,225,
- 12,204, 93, 34,246, 24,225,104, 23, 56,250,141,149,206, 88,211, 36, 86, 25,199,114,110,178,135,151,250, 61,247, 28, 8,200,171,
-138, 44, 47,232, 4, 1,253,200, 39,157, 30,129,112, 10,117,109, 13,221,211,107,180,226,134,108,229,169, 38,233,200, 71,121, 65,
- 35,146, 18,220,189,117,131,221, 71,247,217,121,120, 31,101, 5,253,254, 18, 73, 90,160,203, 41, 59, 15,238,177,183,117,192,203,
-175, 92,160,168, 42,146, 60,229,204,169,117, 14,176,212,181, 96,227,252, 5,138,221, 17,177, 20, 4, 66,176,187, 63,228,165, 43,
-231,240, 3, 24, 77, 70,248,173,152,233,184, 68,123,146,172, 50, 4,221, 30, 66, 72,198,117,141,241, 60, 90,157, 30,126,187, 67,
-107,148, 81,212, 6, 93, 57,107, 76,166, 13,121,146,210,107,135,132,113,128,234,132,172,157,191,196, 32, 56,135,180,134,139, 50,
-228,139,181, 65, 6, 18, 83, 23, 4, 30,132,202, 34,155,113,172, 53,154,201, 40, 33,201, 39, 72, 95, 48,214, 57,155,233, 30,213,
-200, 67, 84, 6,227,213,196, 65,132,242, 11, 60,149,115,245, 84, 68,182, 26,146, 78, 39, 44,247, 87, 80, 97, 11, 63, 80,244, 6,
- 61,206, 95,184, 0, 6,234, 52,193,164, 83,172,244,104,181,251,156, 59,119,137, 86, 20, 51, 30,143, 16, 88,210,116,202,185,115,
-103,200,203, 18, 63, 8, 89, 89, 93,195, 98,169,203,146, 60,241, 17, 85, 65, 39, 12,200,117,194,104,239, 17,253,181,243, 12, 86,
-151, 41,175, 92,101,114,184, 71, 93, 36,164, 89,197, 52,201, 56,123,102, 3,223, 23, 84, 85, 69,154, 89,144, 62,227,100, 74,173,
- 33,136, 44, 97, 90, 16,245, 45,121,150, 51,158,186, 28,247, 93, 95, 17, 6,190,179, 73,122,199, 98, 55, 79, 74,148, 39, 92, 23,
- 57,119,253, 29,239,203,143,239, 53, 51,127,121, 35, 94,179,110,114, 33, 27,194, 91, 93, 55,196, 56, 37,155, 68,182,102, 60,110,
-102, 49,193,141,199,188,185,134,235,218,156,196,201,206,243, 90,220,205,222, 83, 18,163, 45,101,211, 13, 90,235, 10,231, 60, 44,
- 70, 55, 72,217,197,215, 12, 78,188, 37,155,175, 45,149,219,227, 6,113,140, 31, 6, 88, 91,209, 22, 25,167, 60, 75,207, 19, 88,
- 93,179,222,239,163,243, 18,219,118,253, 89, 16,120,228, 85,205,131,205, 29,240, 34,106, 43, 57,119,241, 10,190, 23,184, 3, 82,
- 16,241,133, 31,249, 49,202,104,153,107,255,224,255,131,173, 82,132,192,117,214, 66, 56, 20,142,128,194, 88,124, 41, 49, 82, 49,
-206, 43, 68,101, 16,114,138,145,146,179,167, 87,137,227, 0,172,239,210,212, 68,128,182, 10,161, 36,149,174,201,243,148, 72, 9,
- 90,190,123, 27, 85, 83,140,174, 56,123,254, 10,127,235,175,253,207,249,235,127,251,239,112,237,254, 22,149, 54, 88, 36, 82,216,
-147,170,245, 19, 34,168,197, 40, 53, 87, 88,106,171, 25, 77,199,252,210,175,124,149, 63,255,167,255, 28,231, 78,157,102, 50, 41,
-184,118,227, 1,231, 79,247,160,204, 48,101,147,104, 87, 85, 96, 27,206,190,177,141, 24,205,204,239, 67,190,167,240, 27,193,179,
-242, 84, 99,121, 4, 37,103,209,169,141, 88, 18,129, 21, 53,210, 54, 14, 30,221,220,183,106, 67,145, 23,228,137,115, 4, 76,167,
- 41,105,150,147, 23, 5,121, 81,160,155,112,159,178,170,201,202, 18,148,179,239, 25, 99,221,215,243, 21, 74, 58,116,177,109, 44,
-128,122,126, 13, 55,147, 79,229,116, 35, 88,219, 8,228,130,227,108, 3,207,111, 14,161,199,117,204,123, 46,234,149,103,243,215,
-143, 31,116, 49,223,151, 26,251,100, 97, 63,142, 54, 60, 86,133,218,103, 6,222,139,167, 56,173,196, 83,196, 20, 60, 55,133,231,
-217,133, 73,204,127,174, 39,219, 75,225, 94,236, 52,123, 28, 23,158,215, 92, 72,174,179, 56, 22,186,200,121,202,217, 28, 98, 33,
-124,148,244,136,194,144, 23, 95,126, 17, 47,232, 64,208, 34, 47,157,146,114,124,180, 79,149, 85,232,209, 17, 74, 8,166,147, 17,
-117, 85,208,110,133,196, 94,151,192, 15,168,165, 98, 47, 41, 40,181, 38,221,217,166, 40, 10, 48,150,162,172, 56,154, 78, 25,142,
- 71, 76, 19,103, 29, 73,210, 41, 85,145, 34,132, 70, 96, 49,186, 34, 8, 66,132,133,208,143,104,133, 45,252,216,195, 23,134, 83,
-145, 36,246, 52, 70,184,200, 63,165,157,176,103,177, 81,127,218,243,252,184,222,224,241,147,209, 83,119, 97, 51,139,200,236,125,
- 99, 49, 86, 59, 15,105,163,126,119, 68, 63,179, 32, 48, 50,115, 33,209,139, 87,206,115,227,194,105, 30,110,238, 98, 52, 24, 45,
- 72, 39, 19,218, 10,142, 38, 41, 42,136, 48, 86, 81,151, 5,237,118,203,133, 68, 8,133,240,125,100, 16,184,130,238,249,248,210,
- 99,111,235, 1,223,254,230,111,163,139,156, 7,183,222,163,179,180,130,198,146,140,143,208, 89,202,206,230, 35,174, 92,121,129,
-195,195, 67,242,124,204,234, 90,159,110,216, 97,100,106,192,103, 60, 62,162, 21, 74,186, 74,162, 17,100,198, 80,150, 57, 45,105,
-153, 38, 41,173, 86,151,163, 36, 96,191, 46, 56,119,229, 69,206,182,186, 60,124,244,136,135,123, 59,172,118, 99,214,207, 94, 32,
-155,140,217, 8, 36,133,180,148, 66, 19, 8,159,170,182, 12,211,156,190,174,137,170, 17,211,163, 9,165,178,236, 42, 65, 24,250,
- 24,235, 40, 38, 97, 32,169,171,140,192,179, 20,202,130,169, 8, 60, 15, 93,213, 76, 39, 5, 74, 42,210, 86,136, 65, 51,240,218,
- 76,252, 20,171, 12, 81,171, 69,187,221, 33, 43, 74,138, 81,130, 87, 39,172,246, 86,176, 43,203,180,122,107,104,235,145,101, 41,
-231,206,159, 35, 27,143,156,135,222,148, 36, 85,193,218,250, 25,250, 75, 61, 52,154,178, 72, 89, 91,238,145, 76, 70,196,126,155,
- 34,203,233,244,251,212,117,221,248,145, 5, 94,168,136,166, 1,170, 84,232, 60,193, 51, 32,178, 35, 14, 55, 43,162,165,117, 86,
- 79,157,161, 53, 88, 37, 27,238,179, 82,150,140,146, 20,141, 64, 89,139,242, 3, 76, 90, 82, 86, 2, 99, 27,241,145, 12, 8,226,
- 46, 94, 24,179,127, 52,114,152,210,158, 91,119,121, 74, 18,122, 30,158,175,240,149,196,151,194, 21,116, 65,147, 41, 48, 43,230,
-199, 59,116,105,221, 74, 97,174, 19, 49,205,117,111, 4, 88,133,213, 18,109, 45, 18,131, 49, 18,101,105,174, 77,139,149,118, 30,
- 64, 4,242,248, 62,166,155,123,146, 60,134,201, 24,109,209,104,132,116, 34, 48,109,192,212,198,141,125,171,122,254,122,210, 82,
-162, 61,183,162,178,218,209, 13,153, 57,220,140,105,226, 61, 37,138, 26, 95, 26, 60, 37,200, 11, 77, 86, 11,188, 94, 15, 81,106,
- 84, 82, 35, 70, 21,235, 23,151,233,118, 98, 98,229, 64, 56,194,151,132,237,136, 71, 91, 9,223,252,206,117,106, 25,146,231, 83,
-166, 71,187, 92,185,252, 2, 71, 69,136,245, 54,176, 42,228, 7,127,248,143,208, 31, 12,248,233,159,251, 5,238,111,110,177,123,
- 56, 36, 45,220,138,160,153, 81,144,152,154,105, 86, 99,164,199,161,213,100,147,130,196, 30, 17,182,125, 6, 58, 68, 97,209, 22,
-194,200, 35, 8, 66,183,154,171, 53,182,214, 40, 63, 32, 43, 10,166, 69,129,242,187,148, 69,206,116,231, 62,189,165,101,254,179,
-255,240, 47,241, 95,252,157,255, 55,239,223,219,162,178, 51,191,183, 70, 41,137,209,122,161,182, 88, 12,181, 11,127,121,236,158,
- 95,155,138,221,195, 45,190,246,107,191,196, 79,252, 27, 63, 65, 24,132,220,122,176,131,181,154,174, 41, 17,101, 74, 90,231,212,
-186,154, 7,163,104, 99,209,198, 96,172,115, 35,120, 74, 18,248, 30, 97, 24, 16, 7,126, 19,250,163,240,125,137,239,187,123, 85,
- 93, 55,223,143, 52,120,181, 65,170, 10,252, 38,113, 82, 42,116,109,200,146,140, 52, 73, 25,143, 38,140,166, 41,147,172, 32, 73,
-115,178,172,108,170,141, 66,200, 26, 67,137, 54, 80,107, 75, 21,106,162, 40, 32,192,161,140,133, 53,200, 6,104,236,174,205,102,
-180,111,108,163,215,114,215,138,239,121,196,161,115,127, 4,202, 57,175,164,240,220, 68,201, 26, 12, 60,157,253,254, 73, 68,107,
-207, 27,133, 63,173,243,123, 82,200,246,251, 67,198,254,129,227, 77,127, 31,191,164,176, 4,162,230,104,127,159,221,189, 3,132,
- 23, 50, 78, 50,210,210,162, 81,244,186,203,212, 73,226,186, 74,161, 49, 82,144,219, 2, 25, 24,198,117,206,214,253,187,205,133,
-145, 80,150, 37,101,153, 99,180,179, 47, 8, 93, 55, 79,181,123,169,245, 59, 62,107,253, 54,151,214, 61,250,209,128,141,193,128,
-188,168,209, 40, 52, 62,155,219, 7,212,181, 96,101,125,131,229,245, 1,197,116, 66,167, 21, 80,154, 10,107,220, 13, 72, 26,225,
-174,155, 63,112,148,226,241,184,221, 44,176,244,229, 2, 69,206,206,181, 20,178,249,115, 78,164, 30,245, 58, 29, 58,173, 24, 9,
- 46, 46, 54, 77, 25, 44,181,240,165, 98,111,107, 31, 29,182, 24,172,172, 51, 30, 29,178,178,188,140,167,188, 6, 96, 19,224,171,
-208,121,144,165,165,204,166,124,253,107,191, 74,145, 22,124,248,222,251, 76,179,148,193,198,105,116, 85, 16,248,138,225,193,132,
-151,174,158,163, 40,115,178, 82,112,243, 81, 70, 29,244,241, 66,201,157,173,156, 80,149,172, 40, 31, 35, 96,181,167, 56,152, 84,
-108,108,172,115,231,225, 14, 47,156, 93,166,178, 62,104, 69,161, 21,221,238, 18,171,131, 1,211, 36,165, 35, 45,178,219,166,223,
-138, 72, 70, 19, 2,105,241,173,166, 37, 12, 5, 6,116,129, 52, 80,166, 83,242,105, 4,181,194, 19, 80, 22,110,119,233,251, 62,
-121, 89, 98,140,166, 29, 7, 40,105,104, 69, 30,113,224,209,138, 98,194, 32,196, 40, 77,224, 57,245,108, 81,102, 20,121, 9, 56,
- 56, 74,127,121,153,149,213, 85, 44,130,157,189, 67, 90,177,162, 61,232, 82,171,152,168,187,140, 85, 49,251, 71, 9,167,207,158,
- 39, 47, 42, 36,150,178, 40, 9,124,159,193,202, 42,113, 43, 70, 97, 41,242,148,184, 21,162,164,165,211,142,168,203, 2, 76,133,
-169, 51,242,105,206,232,208,163,183,182,140,182, 37, 66,213,248,177, 4,237,145,231, 21,166, 40, 24,141, 82,218, 6,194, 56,164,
-215, 27,176,212,191, 66,111,101, 29,217, 91,229,250,251,191, 75, 39,128, 80,105,202,202, 48, 29, 79,241,149,207,249, 75,151, 24,
- 77, 18,150, 7,125, 38,163, 33,221, 86,155,118, 28, 51,221,189,235,110,186,202,197,245,134, 13,250,213, 83,141, 58, 93, 54,126,
-234, 5, 75,218,137,236, 6,187,232, 17,159, 5,119,208,140, 55,155,238, 92, 58,124,169,110,178,207, 79, 34,140,197, 9,135,140,
-157, 11, 22, 57,161, 37,178,141,138, 90,107, 77,109,204, 19,247, 52,207,243, 48,198,144,231, 57, 66,137, 6, 70,211, 28, 26, 22,
-217,243,205,228,111, 6, 35,202,179, 18, 37,125,226,184, 77,187,107,208, 3, 77, 81, 12, 89, 89, 91,193, 10,139, 31,120,132,161,
-243, 60,203,160,197,222,193, 22,247,182, 14,121,241,197,148,206,133, 53,108,149,146,140, 14, 88,187,252, 42, 15,135, 71,136,176,
- 75,165, 53,159,125,227,117,222,124,249, 60, 70,151, 28, 29,236,179,187,185,201,141, 59,247,185,126,119,139,237,195, 49,219,251,
-135, 28, 77, 10, 74, 83,147, 43, 73,106, 45,219,147, 18,245, 96,143,151,207,159,130,162, 36, 79, 82, 78,157,241,144,109, 65,212,
-106, 97, 76, 72, 41, 61, 84, 16, 82, 34, 57, 76, 74, 16,153,115, 53,148, 5,181, 53, 12,214,207,241,159,255,181,255,136,255,244,
-127,247,127,230,230,230, 30,229, 66, 66,155,157, 89, 3,159, 24,177, 62,121,175, 55,192,181,155,215,249,250,215,127,133, 31,255,
-147,127,138, 78,111,137,205,173, 29, 46,109,172, 49, 25,151, 28,141, 15,169,117,233,154, 35,235, 10,250,226,191,231, 44,102,206,
-235,157, 71,225,188,176, 7, 77, 81, 7,129, 54, 77, 51,215,120,213,101,147, 37, 79,195, 39,168,107, 67,154, 53, 76,246,241,148,
-163, 73,194,120,154,145,165, 57,101, 89, 35,165, 68, 27,199, 63,169,117,141, 53,181, 19,232, 97,231,145,181, 82,186,137,165,240,
- 36, 90, 27,202,178,116, 92,129, 52,165,200,115,116, 93, 97,173,153,107,185,194, 48, 32, 8,188,121,190, 61,194,204,149,252,194,
- 24, 87,212,191, 91, 21,250, 83,119,215,207, 65,141, 62, 77,249,254,244, 56,188, 79, 86,172,159, 53,114,255,189,226, 75,127,223,
- 72, 84,107,144,166, 66,218,154, 60,155, 16,181,221, 9, 78, 53, 68,181,186, 76,169,202,140, 36, 29,147, 21, 5,135,163, 35,210,
- 60, 33,207, 83,202,186,166,172, 29, 7, 30,163, 9,149, 36, 84,130, 94, 39,102, 99,109,157,165,150,135, 48, 21, 85,145,210, 14,
- 61,214,250, 45, 62,245,226, 37,178,201, 33,201,100, 76, 85,164,196, 94, 68,187,191,198,222, 81,134,239, 11,198,201,152,190,233,
-208,139,215, 81, 65, 31, 99,106,108,165,169,140,113, 35,182,127, 13, 60,224,197, 21,134, 49, 98, 65, 4,226, 20,167,179,157,209,
- 92, 96, 39, 45, 82,207, 70, 81,141, 39, 83,131,239,121,124,207, 91,159,101,111,103, 31, 83,150, 8, 83, 49,157, 78, 89, 95, 89,
- 98, 99,165, 71,233,119,200,234,138,201,104, 66,224,135,115,134,188, 39, 61, 36, 78, 44,165,108,205,175,124,237, 95,242,254,187,
-239, 18,201,144, 7,247,182,216, 56,189,129,177,134, 44,157, 82,100, 9,189, 78,140, 39, 44, 15,182,183, 56, 24,215, 8, 60,222,
-185,190,195,173,251,135, 4,181, 37, 48, 37,173, 56, 33,108,121, 68,182, 98, 16, 67,175, 19,113,116, 0,155,163,148,193, 96,157,
- 44,211,236, 12,167,244, 58, 93,170, 60, 35, 48, 53,103, 87,150, 24, 7,146,225,225, 17,215,110,222, 38,192,176,178, 54,160,149,
-164, 24, 36,121, 94,207,215, 17,163,225, 1, 83,233,158,235,170, 42,221, 90,192,166, 40, 79,208,235,181, 92, 54,188,130,118,187,
-195, 96,169,199, 82,183,131,175, 20,166,174,201,166,123, 12,143, 14, 73,178, 4,109,192,247, 35, 78,159, 59,195,218,234, 41,172,
-149,140, 38, 83, 54, 78, 95,224,124,171, 79, 77,192,206, 48,229, 96,156,226, 69,150,229,193, 10, 85,161,201,146, 28, 93, 21,172,
-173, 12, 8, 67,133, 54,150,118, 43,162, 19, 7, 20,162, 34, 8, 20, 82,184, 49,225, 40, 25,179,183,179,205, 57,255, 20,237, 94,
-159,108,114,196,210,250, 50, 65,232,209,234,180,168,173,139, 86, 21, 53,120,190,207,169,254, 50, 70, 42, 34,169,169,147, 67,188,
-238, 42,209, 96,131,179, 47, 42, 74,173,217,125,112,139, 48, 14, 24, 30, 78, 25, 44,175, 49,154,140,233,117, 98,210, 52, 37, 79,
- 39,232,202, 32,194,128, 51, 27,103,184,189,115, 27, 95, 10,124,233,246,229,202, 81,212,241,154, 8, 7, 49,115, 37,219,227,130,
- 62,179, 34,205, 67, 54,102, 25,221,139, 66, 80,123, 28,218, 97,140, 65,227,212,234, 70, 59, 37,189,242,229,137,233,159,174,205,
-124,165, 40,149, 60,161, 23, 17, 11, 7, 5, 99,204,124,175,142, 21, 40,233, 70,187, 66, 8,151,125, 93,107,242, 52, 71,251,190,
-211, 9,248,254, 28, 95,109,102,235, 42,225, 33,132,161,174,114,124, 63,164,211,237,177,127,148,225,133, 33, 81,175, 75,191,178,
- 72, 95,114,235,246, 77, 86, 90, 30,233,114,155,115,151,207,147,150,154,251,155,251, 40, 4,105,150,113,116,116,200,217,149, 62,
-131, 94,155,229,142, 79,166, 45,239,223,121, 68, 16,119,145, 43, 93,122,158,135,180, 25,103,206, 12,248,252, 70,132,248,158, 23,
-168,241,153,148,176, 59, 74,217, 60, 24,115,243,222, 35,222,187,179,197,195, 71,155,236,239,186, 44,137, 91,247,118,176, 18,178,
- 66, 35,251, 25,203, 24, 12,146,168,213, 37,108, 53,254,127,207,105, 13, 38,105, 78, 38, 13, 81,232,147,167, 41,226, 96,135,149,
-211,231,249,175,255, 79,127,157,191,244,191,248, 27,220, 63, 56,162,178, 51,162,162, 56,206, 80,255, 24,130,171,181, 80, 99,249,
-141,111,252, 38,127,228, 15,127,133,151,207, 92,226,104,120,128,106, 15, 16,121, 77,100, 44, 55,110, 94, 39,203, 82,140,173, 1,
-139, 18,238,185, 83, 56,139, 98, 24, 6,116,202,152,170,172, 40,130,192,113, 15, 2, 73,224,185,239, 69,107, 61,183, 38,202, 38,
-225, 71, 10,217,192,107, 4,165,214,100,121, 65,146,102, 76,147,148,113,146, 48,158, 56,148,171,174, 13, 74,121,212,214, 82, 91,
- 77,101,106, 7,181, 49,199, 59,243,186,174,168,202,210,165,182, 73,137, 54,150, 44,205,153, 78, 18,166, 73, 66,150,229, 13,141,
- 14,103,153,246, 92,190,193, 12,156,132, 56,222,237, 91,109, 78, 10,229,158, 86, 32,221, 11, 65, 60,183, 67, 62,238,192,158, 12,
- 61,249,253,134,183,124, 55,159,243,123,233,240,159,202,156,127, 86, 54,252,220, 74,244,244,209,189,149,138,176,221,161,213, 27,
- 32,253,136,200,135,221,189, 33,247, 30,220,100, 52, 73,169,106, 77,217,144,133,132, 16, 8,107, 27, 15,172, 83,154, 6,202,208,
-110, 71,172,245,123,116, 99,159,181,229, 30, 75,189, 22,201,104,155, 48,244,105,183, 54, 8, 60, 73, 43,244,136,219, 49, 89, 34,
-233,245,150,216,219, 25,113,250,244, 57,150,215,206,114,106, 29, 46, 95,188,204,141,219, 55,201,138,140,233,116, 76,145, 38,156,
- 61,115,154,196, 20, 46,161, 12,176, 74, 44, 56,208,159,167,105,176,223,125, 97,119, 77, 7,152,227,108,117, 33,205, 60,234, 85,
-138,198, 6, 98,102,116, 57,195,108,226,134,116,143,203, 82,175,235,132, 42, 74,145, 21, 5,113,224, 51, 28, 39,172,172,172,241,
-222,237, 77,108,216,198,147,138,193,210, 82,195, 7,112, 47, 56,223,243,145, 64,150, 36,124,244,254,187,152,178, 38,183,130,207,
-124,230,115,180,186, 17,119,238,221, 99, 50, 26, 98,139, 4,107,106, 30,109,237, 83,215,138,216, 90,162,192,217,141, 38,121,141,
- 80, 62,157, 56,102,127,152,112,174, 53, 96,165, 31, 35, 39, 37,202,212,180, 58, 29,118,135, 9, 37, 83,150,151,215,248,210,151,
-191,194,119,190,243, 14,187,251,123, 44,247, 90,232,170, 64, 72,200,141,229,197,171,151,184,125,243, 54,125,235, 58, 47,154, 67,
-149, 81, 10,227,133, 24, 83, 97,138,154,189,233, 8, 79, 9, 42, 13, 42,112,215, 71, 93, 87,248,126,200,202,202, 18,203,253, 54,
-113,224, 83,155,146, 60, 47, 40,179,156, 60, 61,164,172,114,252,192,167, 29,196, 44, 45,175,209,237, 46,227,251, 49,163,113,130,
-144, 1,113,103,137,218,250, 36, 89, 77,187,187,196, 81, 82,227, 55,235,137,209,120,130, 31, 6,156, 59,123,214, 69, 0,135, 30,
- 43,131, 62,189,182,135, 39, 52,135,219, 35, 14,118,198,244,218, 17,237, 40, 34,240, 21, 2,152, 78, 18,162,160, 69,103,105,137,
- 42, 45,144,190, 66,202, 0,161, 66,188, 72, 50, 8, 91,180,186, 75,100,121, 65, 94,150, 84,233, 16,223,243, 81,113, 76,105,192,
-163,166,221,106,113,233,242,139,216,170,192,243, 34, 76, 93,178,187,121, 7, 93, 87,108,172,175, 32, 61, 71, 9,147, 86, 83,151,
-185, 59, 48, 73,133,191,160,104, 87,114,166,100,127, 76, 65,108, 31,103,116,207,151,213, 79,218,214, 16,243, 53,154, 49,141,255,
-191,201, 60,183,243,188, 22, 55,250,181,122,102,115,117,215,175, 53,156,200, 79,159,195,149, 22, 68,159, 90,235,185,144,238, 24,
- 19,171, 26, 11,148,118,247, 86,123,172,122,158,189,238,116,109,155,233,147,243, 69,207, 0, 56,113, 28, 51,173, 45, 81,203,249,
-172,247,134,123, 36,117, 74,215,239,241,240,225,144, 81, 54, 69, 70,203,220,127,180,141,231,123, 76, 39, 9,195,195, 33,253, 80,
- 48, 62, 58,100,105,125,153,115,171, 27,124,116,103, 27,233, 71,236,142, 10,212,160, 69,145, 66,167,213, 33,240, 36,170, 78,177,
- 54, 37,240, 60,186,171, 45,206, 47,183,120,235,226, 10,127,230,251,223,226,240,104,194,163,189, 61, 62,188,115,151, 95,123,231,
- 67,110, 60,220,103, 82, 25,174, 61,220,227,197,211,107, 44, 7, 93, 20,138,216,243,104,135, 18,207, 86, 8, 83,146, 91,103,239,
-155,230, 5,117, 93,209,173, 74,140,174, 88, 94, 89,227,191,250,155,127,141,191,242,159,253,109,238,109,239, 80, 90,176,162, 17,
- 15, 10,187,248,148, 61,165,249, 18, 32,156,218, 59, 55, 5, 63,245,211, 63,197, 11, 87, 47,115,245,234, 85,210,194,176,118,238,
- 50,155,119, 43, 94,254,244,103,249,246, 59,223,230, 96,111, 7, 41, 52,158,176,120,202,162,132, 3, 18,149, 77,214,189, 54,150,
-168,210, 20, 69,229, 58,117,207, 61, 55,149,174,169,155,143,153,129,160,132,105, 10,190,133,178, 33,237, 57, 31,121, 78,146, 23,
-142,223, 80, 58,144,141, 16,181, 75,221, 83, 2, 79, 9, 38,158,164, 29, 59,213,122, 28, 7,206,150, 22,249,238, 53,162, 20,218,
- 24,178, 44,103, 58, 77,157,130, 62,119,152, 94, 23,173,234,205, 15,142,117,237, 32, 52,218, 88,180,117,120, 89,163, 13,198, 56,
-107,226,179, 85,227,246,233, 65, 38,207,235,144,159,214, 69, 63,203, 71, 46,254, 53,133,136, 60, 45, 58,246, 89,105, 59, 79, 0,
-114, 56,153, 2,180,136,141,124, 12, 75,180, 16, 38, 32,209,194,195,143, 3,186, 75, 53,135,163, 9,211, 36,229,250,141, 27,100,
-121,137,193,141,200,132, 39, 49, 6, 90, 81, 27,105, 45, 85, 86, 52,234, 93, 55,130,107, 43, 73, 44, 44, 27, 75, 93, 34, 79,144,
- 28,238, 81,213, 41,173,184,239,118,132, 42,100,176,113,150,222,250, 89,198, 57,140,134, 71,168, 94, 72,229, 69, 36,149, 97,146,
- 37,148, 69, 65, 50, 25,177,187,191,143, 14,198,212,101, 73, 82,228,196, 75, 29,108,232,110, 16,152, 69,183,248, 39,123, 92,103,
-157,207,227,165,254,137,155,168,177,104, 92, 71, 35,173,116,217,208,230,248,177, 52,104,164,180,184,193,132,235,212,103,193, 22,
-198, 24, 12, 53,158,239, 17,183,218, 60,216,220,102,169,211,193,132, 30,163, 52, 67,166, 41,157,118,204, 81, 97,232,118,186,148,
-101, 69,173, 53,202,147,110,156, 41, 44,158, 82,108,239, 30,208,105,247,233, 95, 93, 70,224,145, 76, 19,110,221,188,206,100, 50,
- 65, 88, 75,160, 20,117,145,177, 60, 88, 98,111, 63,165, 21, 66, 86,106, 58, 81, 64,174, 43,194, 56, 98, 63,153,240,218,149, 13,
-142,166, 71, 12,186, 45, 66,207,112,184,127,132, 81, 1,211,210,208, 69, 17, 72,193,189,155, 31,146,140, 15, 9,122,109,174,223,
-218, 1, 33,168,140,227,151,223,186,247,128,110,183, 67,146,166,244,250, 61,138,163, 4, 83, 87,120,113,139,131,188, 32,212,150,
- 72, 42,116,101,241,164,194, 87,142, 58, 83,102,150, 48, 48, 8,105,177,166, 34, 73, 70,164,147, 26,163, 75, 55,249, 51, 22,173,
- 43,167, 70,143, 90,116,187, 75,180,187, 75, 8,225, 83,148,134, 44,175, 64,122,148,149,133,192, 3, 79,146,229, 37,113,220, 66,
- 42,137,169, 75,186,157,152,213,181, 13,130,208,167,221, 10, 56,189,182,194,234,114,143,110,203,167,223,137,248,204,167, 95, 37,
-155, 30,177,187,189,137, 41, 75,103,233,145, 2, 95,121,120, 42,196,247, 34,176, 30,202, 11,209,165,198,160,192, 86,128,165,170,
-114,172,173, 65,151,232, 82, 83, 38, 37, 82, 8,114, 27, 18,183,122,248, 66,160,189,128, 36,203,105,245, 7, 20, 89, 66,183,223,
- 35, 73, 18, 86,215,214, 17, 42,192,243, 5, 97,171,131, 20, 78,140, 23, 46,192,140,230,201, 86,141, 36, 67,201,197,113,185, 93,
-120,157, 54, 64,151,198,190,249,248,107,221, 54, 83, 37, 39,130, 58,190, 55, 24, 99,154,131,167,105, 26, 22, 53,247, 61,195, 76,
-177,174, 65,136,249, 72,119,102, 81, 43,202,146, 60,203,136,194,214,252,243,103,223,239,241, 84, 83,160,141, 43,248,181, 49,160,
-205,188,161,176, 51,132,105,173,231,196,186, 48, 10,105,181, 32,142,114,188, 52, 71, 69, 33,158, 49,100, 85,194,233, 51, 27,156,
- 94, 94,226,244,234,128, 92, 23,236, 62,218, 36, 27, 13,209,117, 69, 81, 20,228, 69, 73,146, 21,236, 30, 14, 89, 62,220,167,237,
-197,132,158, 96,146,102,172,174,109,144, 90, 73,180,114,145,247,183,238, 19, 92, 92,166,101, 44, 45, 81,224, 55,230,187,192,186,
-215,106, 29, 20,116, 67,159,193,210, 58,231,206, 46,243,198,167, 95,229,206,230, 33,215,239, 62,224,195,107,183,184,191,185, 79,
- 45, 2,132, 10, 16, 54, 32, 18,138,149,126, 68,149, 85,164,181,161,210, 53, 71, 19,232,183, 35, 68,154,225,123, 30,137, 18, 12,
-206,246,248,155,255,201,127,192,127,252, 55,254, 15,236, 38, 57,249,124,140, 40, 62,166,169,104, 32, 50, 74, 80, 27,248,214, 7,
- 31,242,224,225, 38,175,189,250, 58, 55,110, 95, 99,249,211,159,102,227,244, 89, 30,110,110, 98, 68,192,151,255,208, 31,230, 27,
-191,253,235, 20,217, 24, 99, 44,190,106,158, 79, 81,163,148, 19, 50, 86,149,110, 28, 22, 18, 37, 93,119, 94,213, 85,179,143,111,
-168,128,214,137,231, 12, 2,173, 13,149,214,148,117, 77, 81,212, 20, 85, 69, 94, 22,212, 90, 83,215, 78, 97,111, 26,149,189,139,
-106,117, 26,137,184, 33, 40,182, 98,151, 97, 16,197, 1,129, 31,160,164, 19, 83,231,101, 65,146,185,188,244,170,170, 80,210, 35,
-240, 29, 75,160,170,106,138,162,116,171, 75,227,214, 21,149,214,232,133,162,174,222,122,229,252, 79, 62,147,244,246,156,155,252,
- 83, 41,112,207,241,143,159,124,123,140, 70,247,137,121,241, 79, 39,207, 61,219,107,253,248,199,136,103, 66,108,142,163,239,154,
-157, 88,131, 64,172,106, 7, 2,208,198, 1, 36, 28,251,189,161, 88,133,206,163,238, 80,177,142, 52, 20,197, 49,237, 86,204,246,
-230, 67,168, 51, 54,150, 91,248, 88, 86,151,122,132,126,128,244,124,180, 21, 40, 21,224,135, 49,161, 31,186,156,103, 41,105,183,
-219,180, 90, 45,218,157, 14,211, 44,113,153,196,190,143, 70, 81,105, 73, 94, 24, 38,211,156,187,247, 30,113,253,250, 45,238, 62,
-216,100,235,224,144,164,206,185,187,249,128, 97, 54,101,119, 60,194, 6, 1,147, 82, 19,134, 29,210, 36,163,221,110, 19,183,219,
- 78,109,219, 48, 14, 62,238,185, 21,139,110,134,185, 79,125,134,111,228, 68,110,250,113, 32,134,156,219, 52,102, 90,151,227, 8,
- 91, 39, 62,156,125,222,140,169, 61,219,133,130,219,143, 10, 64, 42,143,193,234, 42, 15, 55, 55, 9,219, 29, 30,236, 13, 25,103,
- 37,161,173,144, 74,161,241, 88, 30, 44,163,203,156,183,222,252, 20,237, 86, 72,208, 14,137, 91, 17, 74,122,124,253, 87,190, 78,
-145, 85, 8,225,177,181,189, 73,145,167,164,211, 49, 81, 24,210, 10,125,202, 52, 33, 25,141, 25,141, 10, 70, 73, 77, 90,106,142,
- 42,195,168,212, 20,198,210,233,196,232,178,160,211, 13,168,117,197,116,152,211,138, 35, 74, 35, 32,108, 17,182,122,172, 47, 15,
- 56,216,188,143, 40,166, 8, 93,131, 21,164,101, 77,169, 33,106,197, 24, 43,232,119, 99, 94,121,225, 2,187, 91,155,244,186, 45,
- 14,142, 18, 74, 44,163,188,160,210,134, 88, 91,148, 85,232,218,193, 48,148,148,196, 97, 64, 20, 41, 90,237, 16, 93,215, 76,199,
- 99,178,116, 10,166, 70, 87, 5, 86, 87, 88, 91,227, 43,233, 34, 28,195,136, 48,238, 98,172, 71, 93, 75,106, 45, 41, 43,205,193,
-112,200, 52,171,156,141,206, 42,106, 35, 40,203, 18, 79, 74, 34, 95, 17, 70, 62, 66, 10,206,159, 63,135,146,150, 44, 57, 34, 79,
- 70,148,101,142,239, 41, 90,113, 68,191,215,101,125, 99,157,149,229, 21, 6,131,101,150, 87, 87, 8,162,176,193, 13, 40,138,186,
- 2, 41, 48,218, 80,102, 5,186,206,169,170,146,170, 42, 16, 2,170, 34,199, 19, 22,223, 19, 40, 63,230,119,190,241, 30, 85,101,
- 56,117,238, 2, 69, 94, 82,100, 41,253,126,135,100,114, 68, 85, 38, 92,184,112, 17, 33, 21,113,187, 67, 89,105, 58,157, 46, 82,
-249, 36,135,123,248,194, 52, 54, 54, 7,218,240,148, 63,183,243,204, 17,174,179,208, 21,129,227, 31,204, 57, 9, 51,114,161,187,
-222,102,161, 44, 51,154,156,108,118,234,199,231, 2,251,216,225, 93,158, 32,149,205,236,109,182, 1,201, 44, 2, 76,102,172,112,
-107, 4, 39,163,163, 22,179, 16,102,240, 39, 7, 97,145, 98, 70, 39,147,205,148, 96,150,211,109,169,181, 97,154, 22,238,192,214,
- 80,220,168, 42,116, 85,146,219,138,184, 19, 17, 74,197, 82,175, 79,167,219, 65,231, 5,211,180,102,115,103,232,188,204,177,143,
-231,123, 88, 20,190, 39, 89,221, 56,195,205, 7,123, 72, 63, 38,203, 50,242, 50,103,237,212, 41, 76, 19,187,170, 76,129,103, 43,
-144, 10,173, 2,132,148,248,210, 66, 40,241, 98,151, 91,223,109,183, 89,237,245, 57,181,212,227,210,202,128,171,231,207, 16,183,
- 66, 30, 62,122,228, 14, 52, 81,136, 39,192, 84, 37,113, 43,102, 90, 84, 88,160, 40, 74,132,146, 14,200, 84, 22, 78,127, 80,228,
-156, 90, 93, 38,140, 90,188,253,238, 53, 74,251, 20, 86,251, 51,126,121,194, 97, 86,173,116, 24, 85,105, 4,111,125,250, 77,172,
-209,140, 70, 67,122,157, 14,113,167,203,215,190,254,107, 92,188,116,133,211,167, 78,177,191,183, 3, 77, 56,151, 21, 78,220,109,
-141, 91,123,104,173,169,170,202, 41,213,243,146,255, 63,109,255,245, 36, 89,150,231,119, 98,159,115,206, 61, 87,185, 10,153,145,
- 58,171, 42, 75,181,168, 22, 51, 61, 2,211, 24,204,130, 24, 0, 3,177,182,160, 88, 26,215, 8, 35, 31,200, 63,128,102,124, 32,
- 31, 97,198, 71, 62,242,129, 15, 52,174,237, 3,105,220, 93,236,114,185, 32,176, 52, 18, 3, 16,192,204, 96, 48,221, 35, 90, 76,
-139,234, 82, 89, 85, 41, 66,135,203, 43,143,224,195,185,215,221, 35, 43,179,186,122, 6,180, 50,183,136,140,242,240,136,112,191,
-126,126,191,223,247,247, 21, 69, 85,179, 44, 42, 86, 69,205,170,172, 89,149, 21,203,162, 98, 90,148,204, 87, 5,243,101,193, 98,
- 85,176, 88,149, 20, 69, 96,187,215,157, 65, 88,240,176, 9,123,124,219,249,159,180,198,210, 90, 71, 99, 28,214,121,140,243,225,
-107, 77,112, 45,173,170,134,197,162, 96,182, 92, 49, 91,172, 88,150,193,229,207,123,144, 34,234,200,160,193,139,223, 57,135,105,
-205, 26,250, 47,171,134,178,170, 41,171,230, 58, 81,238,179,189,144,224,101,129,243,159,153,134, 63, 71, 43,254, 34,232,228,243,
-140, 79,254, 50,112,250,139, 72,124,155,251,108,150,201, 61,121,235, 69,242,180,235,150,183,219, 70, 44, 47,213,196, 33,113,200,
-142, 51,175, 48,152, 98,202,222, 32,194,212, 21,123,145, 98, 60, 24, 50, 85, 6,235,106,116,146, 96, 68, 96,140, 70, 30,170,197,
- 28, 99, 12, 87,171,154,101,219,242,233,249, 25,166,173, 73, 18,137, 38, 48,123,243, 44,103,144,164,140,242,148, 27,187,187,188,
-118,247, 21,118, 6, 25,183,110,220, 32, 25, 36, 44,138, 21, 50, 78,105, 93,132,210, 3, 62,125,124, 74, 93, 25, 30,127,252, 8,
-107,234, 32,197,232, 33,198, 62, 63,250,255, 31,123,245,110, 82,151, 82, 6,171,203,231,154, 52,215, 51,159,251, 56, 75,233,240,
- 62, 76, 69,173,113, 72, 29,225, 60,140,119, 38,164,195, 33, 31,124,252, 4,219, 53, 17,101, 99, 24,166, 67,218,162, 98, 62,155,
-161,104,105,219, 54, 92,244, 18, 60,150, 79, 62,249,132,249,178, 36, 77, 6, 84, 85, 25,154, 0,223, 50, 25, 14, 89,173,150,124,
-242,201, 35,154, 85, 65, 91, 52, 44, 11, 65, 97, 60, 37, 17, 51,103,131, 36, 71, 88, 46,151, 11, 52,142,170,109,144,120,150,203,
- 22, 47,106, 38, 55,246,248,217,179, 75,142,238,189,202,135,239,253,140,119, 94,185,201, 64, 52,156, 94, 76,105,100,196,170, 50,
- 36,113, 30, 28,199, 4,164,145,100,118,121,140,150,150, 73, 22,113,251, 96,192, 39,231, 11, 26, 75,151,122, 5,177, 3,213,255,
-253,206, 6,195,147,198, 5,104,222,123, 98, 13,210, 74, 26,105, 80,194,226, 59,158,142,215, 18,165,193,137,134, 56,181, 68,222,
-135,192, 9,116,208,143, 11,197,170, 44, 73,198,158, 36, 73, 72, 7, 41,198, 26, 76,219, 80, 46,167,232, 52,227,237,251,247, 56,
- 59,125, 70, 91,175, 24,101,154,166, 48, 44, 23, 83, 76, 91, 17, 43, 65, 36,198, 93, 19, 17,206, 8,165, 37,173,111,240, 88,124,
- 91,226,156, 36,202, 84,231,207,175,176,149,195, 59, 67,219, 58,116, 20, 97, 76,133, 76, 6, 36, 73,194, 31,253,241,247,248,167,
-191,251, 93,190,245, 75,191, 66,148, 77,184,115,235, 54,131, 60,225,252,217,199, 28,236,141,152, 95, 62, 69, 39, 9, 22, 65,109,
-108, 8,215, 49, 54,152,156, 0, 73,156,172,243, 5, 84, 20,109, 10,114,183, 22,147, 29,225,104,123, 90,239,217,238,129,135,102,
-113,174, 13, 16,120,231,221,174,122, 67, 25,209, 59, 40,218,224, 0,231,122,137,149, 64, 74,191,150, 85, 5,215,183,205, 98,210,
-123,183,142,212,220,232,223, 67,145, 55,173,217,138, 90, 13,231,135,181,157, 66, 72,138,224, 72,183,101,200,212,155, 55, 33, 5,
-194, 89,156, 13,201,144,105,150,145,102, 37, 8, 24, 13, 51, 86,117, 70,101, 29,205,106, 25, 76, 86, 76,104, 34,150,203, 2,165,
- 37,131, 84,243,165, 55, 94,227,147,227, 25,109,211, 34, 85,140, 33, 98,186,170,120,118, 54, 99,255,106,201,124, 58,229,206,238,
-109,206,175,166, 12,227, 29,158, 62,250,128,219,247,238,115, 53, 59, 35,145, 6, 95,175, 80,113,140,211,161, 65,210,214,116, 46,
-141, 26, 8,206,141, 89, 22, 49,153, 36,220,186, 49,224,214,116,194,205,163, 29,222,122,245, 46,223,253,193,143, 57,126,246, 12,
-125,239, 14, 66,106, 62,248,243,247,120,240,250,195,192, 88, 23,146,101, 25,178,218,119, 71, 3,150,101,203, 48, 41, 88,158, 60,
-230,119,126,235,215,248,253,239,253,136,127,251,195,159, 97,191, 32,225, 71,116,198, 48,189, 35,219, 31,126,231,143,249, 27,191,
-249, 91,124,227,107, 95,229, 7, 63,250, 33, 59,227, 33,203,162,226,183,255,230,223,228, 63,255,207,255, 11,126,249,235,239,176,
-183,119,131,203,147,167,107,164,196,117,153,229,214, 90,148,220,248, 5,248,206,230,215, 88, 27, 52,252, 62,172, 16,157,247,180,
-216,110, 39, 30,214, 44, 97, 66,238,206, 62, 31, 86,172,206,133,137, 38,172, 24,109,199, 78,183,120, 39, 49,214, 0, 53,173,113,
- 84, 85,203, 50, 42,131,140, 18, 73,107, 12,181,105,105, 76,139,245, 14, 29,105, 76,228, 17,168, 46, 9,206, 5,111,139, 56, 32,
-103,214,121, 90,107,105,109,135, 32, 56,135,250,230,219, 15,254, 81,232, 68,197,214,174,169, 51, 68,232, 40, 40,108,193,209,107,
- 88, 26,185,214,103,126,145, 73,187, 23,199,191, 40, 56, 97,219,117,108,123,114,127,254,235, 47,131,214,175, 55, 0, 47,147,180,
-125, 22,123,216, 46,250,190,183, 7,180, 97,223,101, 91, 75,107, 76,103,215,103, 3, 11,178,219,177,125,102, 82,143, 21,145,238,
- 15,152,240, 98,206,175, 46, 41,138,101, 23, 17, 24, 28,155,138,178, 96,182, 44,176, 34,188,161,235,213,156,114,181, 96,182,152,
- 83, 86, 5,117, 93,210,212, 13,222, 90,198,131,156,131,253, 67, 30,190,242, 37, 30,190,242, 22,175,221,127,157,215, 94,125,155,
-219,119, 94,227,254,189,215,184,117,243, 54,123, 59, 19,226, 72, 32,124, 19, 38, 57, 15,231, 87, 83,140, 51,188,247,222,143, 56,
- 63,159,242,233,227,143, 81,145,103, 52,206,194,239,226, 35,240,186,211,164,246, 76, 96,185, 9, 37, 20,155,169,123,205, 50,237,
-236, 74,195, 69,221,105,208,183,159,255,222, 15,187, 35,186,244,123,117,191,109,187,219,221,250,176, 5, 41,100,183, 55,188,110,
-191,216, 55, 6, 18,197,209,209, 77, 26, 99, 56,187,186,162,113,129,120,180, 40,107, 18, 45,195,155, 81,192, 87,223,121,135,155,
- 71,135,164, 73,132,117,142,223,255,215,191, 79, 26, 39,204,102, 83, 22,179, 43,172, 41,241,214, 96,171,146, 85,121,193,114,117,
-197,114, 89,115, 57,133, 74, 38,156, 25,199,212,121, 10, 1,153, 84, 8, 37,168,189, 9,186,231, 88,115,152,197, 88,215, 48, 57,
- 58, 96, 94, 54,212,171, 6, 89, 22, 20,171,146, 69,213,114,103,119,135,123, 7, 67,198,153, 37,141, 64, 16,177, 88,150, 40, 5,
-117, 85, 50,189,156, 35, 85,196,197,249,156, 44,209,100,145, 68,227, 17,214,227,157, 32,137, 34,188, 15,111,122,175, 36, 94,122,
- 84,228,137, 36,248, 86,224,170, 48,197,183, 6,202, 66, 81,173, 28,202, 11, 26, 39,168, 26, 79, 20,103, 68,113,138,144, 26,231,
- 21,117,235,105,156,224,244,114,134,206, 71, 28,221,186, 67, 20, 39,172, 86, 75,140,169,169,234, 21,214, 91, 30,190,250, 42,203,
-233, 21,171,217,148, 88,194,124, 62,197, 24, 67,181, 90, 81,175,230,184,186, 64,218, 18, 45, 45, 66, 56,100, 36, 88,204,103, 68,
- 8, 76,219,226,189,197,217, 22, 45, 21,113,148, 32,165,166,110, 42,164,109, 16,214,163,148, 70,185, 26,237, 27, 42,171,249, 79,
-255,235,127,197, 31,252,225,159,177,155, 73,142,246, 6,164,195, 33,251,183,110, 99,125,139,107, 86,236,223,126,149,186,117, 72,
-149,128,206, 17,201, 78, 40,132,171, 41,205,242,138, 36, 78,136,226, 4, 21,233,224,146,168, 55,159,171, 78,207, 45, 35,141,140,
- 52, 74,107,148,142, 59,159,238,192, 88, 14, 1, 26, 42,124, 77,202,117,140,102,159,184, 21,166,231, 64,128,114, 62, 56,186,225,
- 55,122, 97,223,235,164,101, 23,125,219, 77,118,214,118, 7,118,119,192,123,231,105, 58, 7,185,170, 40, 49,214, 32,149, 10, 81,
-159,157,135, 60, 42,236,202,149, 14, 13, 10, 74,225,133, 32,210,113,208, 37,235, 32,205, 84, 42, 9,200,158, 13,133, 66,105,152,
- 76, 70,212,214,241,209,211,243,192,255, 0,116,228, 25, 38,138, 36,130, 52,141,209,217,144, 85,105, 88,150, 45,247,238,191, 22,
- 32,222, 72, 34,109, 48, 77,186, 88,182, 44,219,240,123,156, 60,123,134,232, 26,153, 69, 81,176, 51, 72,193, 25, 70,195, 17, 90,
-107,148, 80,129,144,230, 93,183,238,114,212,157,139, 92, 93, 55, 56, 15, 73,146, 48, 24, 12, 24, 13,115, 14,118,199,152,182,225,
-244,236, 28,175, 18, 62,121,118,206,253,123,247,209, 66,145,116,153,235,198, 54, 1, 85,241,130,193, 48, 71, 43, 79,170, 28, 95,
-122,227, 13,254,213, 31,126,143,210,118,113,204,222,246,241,244,155,168,236,231,112,228, 30,209, 0,168,219, 32, 33,251,202, 87,
-190, 74,146,100, 44,139,146,162, 40, 24, 15, 7, 52, 85,193,233,233, 41,217, 96,196,254,205,219, 92, 94, 93, 2,193,222, 21,239,
- 48,206,208,154,224, 30, 90, 27, 71,211, 77,207,109,231, 38,106,187,162,105,187, 41,219,217, 78, 30,103,131, 68, 46, 76,228, 30,
-227,108,215, 48, 4,182,187,117, 6,231, 76,199,175,216,248,204,219, 46,226,187,110, 2, 79,166,168,106,150,101,201,170, 44, 40,
-235, 58, 24,215,244,166, 57,157,175, 71,176,143,237, 33,120, 67, 81, 53, 44, 87, 21,171, 85,197,170,108, 40,203,134,162,168, 80,
-223,124, 59,216,196,250,107,148,232,141, 77,236,245,194,185, 85,248,187,201,247,243,130, 85, 62, 47,121,237,249,148, 54, 62, 39,
- 56,230,243,166,248,207,203, 88,255,188,157,251,139,100, 88, 88,183, 9,185, 55,129, 32,209,154,176, 55,177,221,139, 39,248,108,
- 81,143,116, 32, 49,200, 14,166, 51,173, 97,185, 90, 50,155, 77, 73,210, 4,135,167, 44, 43,102,243, 21, 6,193,229,188,160, 40,
- 42,176, 6,213,161, 0,163,209,136,241,112,200,141,253, 61,222,122,253, 53,238,221,190,205,112, 48, 96, 52, 30, 98, 77,201,124,
-122,206,108,113,197,179,211, 99,102,243, 75,138,229,101, 48,182,104, 45,182,173,217, 59,220,229,236,234,138, 69,217, 50, 28,238,
- 49, 30,236,114, 99,255, 6,123,187,187,104, 29,100, 95,190, 11, 84, 93,103, 13,139,151,191,102,219, 67,143,191,230,250,230,159,
- 67, 64, 36, 66,201,181, 76,141,173,116,164,235,132,165, 78, 32,209, 27,101,110, 93, 83, 61, 91,185, 55,251,113, 93,196,113, 28,
-199, 24,107,120,255,163, 71,225,160,141, 18,118,119, 38,196,145, 66, 41,201,120, 60,225,230,205, 3, 94,123,112,155, 81,158,242,
-222, 79,223,227,248,233, 51,210, 56,102, 62,189,162,169, 75, 22,179, 75,202,170, 96, 86, 76,241,179, 57, 73,229, 57,191,172, 57,
-182,240,180,181,212,128, 13,249, 28,196,214,145, 72,137,115,158,253, 81,198,249,180,228,112,152,128,111, 25,237,238,114,117,181,
- 64, 57,129,244,142,186, 53,120,173,144,110, 73, 22,195,238,206,132,189,221, 9,195, 81,130,146,142,197,116, 69, 26, 39, 76,139,
-166,139,149,117,148,101,203,254, 48,167, 89,148,196,120, 74, 5, 42, 2, 73,216,165, 71, 34, 34, 38, 4,180,180,181,167,106, 4,
-198, 72, 90, 33,153, 85,158,139,169,163,174, 5,203,165,161, 40,130, 83, 86, 8,154,208,120,169,113, 94, 82, 55,150,211,139, 41,
- 34,138, 25,141,119, 17, 42, 98, 54, 95,208,182, 13, 87, 87,151, 44, 22, 11,222,120,237,117, 98, 37,168,139, 57,174, 89,210,148,
- 75,164, 55,156,157, 28,243,241,227, 99,222,123,255, 35,202,213, 18,233, 44,105,172,201, 59, 57,153,180,142,139,243, 11, 76,219,
-128,179,212,117,133,115,142, 52,201, 80, 82,225, 92,131, 45,150,196, 74, 99, 60, 8,215, 32,156, 97, 86,194, 63,254,239,254,128,
- 91, 55,239,242,149,135,247,216,223, 25,145, 12,135,129, 88,154,106,158, 61,126, 68,146, 79,130, 76, 77,199,160, 18, 26,235,208,
-194, 83, 79, 79, 81,222, 6,232, 93, 7,146, 95,159,133,222,127,140,226,104,221, 88,174,139,120, 20, 33, 58,227,142,254,235, 66,
- 6, 39, 47,157,132, 98, 25,233,120,157, 19,160,250,108,117, 21, 33,149,238,180,209,157,140, 41, 10,246,176,206,249,181,124,206,
-119,137,142,206,185,173, 93,252,150, 35,101,119,232,247,239, 15,217, 71,189,234,168,107, 58, 54,183,158, 0,181,206, 44, 80, 17,
- 73,150,161,180, 70, 72, 73, 28,199, 44,150, 51,118,247,118, 56, 60, 60,228,244,252,130,203,249,138, 79,159,158, 80,172,230,236,
-140, 18, 30,190,122,151, 36,146,232, 44, 67,198, 57,211,162,161, 54,112,112,176, 79, 30, 11, 98,217,146,105,193,120,239,128, 71,
-207, 46, 89,212,142,225,104, 18,208, 15, 29, 81, 86, 53, 42,210,212,171, 5,247,111,221,192, 52, 37,145, 12,186,241, 40,214, 88,
-103,200, 7, 57,113,156,116,206,102, 49,113, 28,175,205,124,172, 13, 41,100,177,142,201,135, 3,170,166,225,253,143, 62,225,228,
-252,138, 7,119,239, 16, 43,133, 18, 16,105,133,177,109,112, 3,116, 30, 29,107, 98, 45, 72,132,229,245, 55,222,164,242,154, 63,
-249,209,123,244,218, 5,255,162, 93,225, 86,133,247,207,125,253,242,242,146,183,223,124,155,251,247, 31,240,238,123,239,241,229,
-183,191,196,249,217, 41,187, 59, 19, 62,248,232, 67,140,117,196, 89,206,238,100,196,229,229, 69,199, 30,183, 29, 84,238, 49,222,
-135,253,185,221,114,158,235, 94,219,141,194,199,175, 33,251,254,245,182,221,180,239, 58,115, 27,219,125,127,120, 12,214, 14,165,
-235,235,195, 19,118,242,157, 99,156,233, 87,190,198,225,108,215, 52,154, 45, 52, 96,221,120,132,102,163,172, 55,140,251,229,170,
-160, 40,107,138, 50,124,237,165,240,123,207,100,126,145, 22, 93,108, 89,165,190,200,210,245,231,195,229, 47,215,178,255,101,201,
-115,207, 67,239,207,175, 12, 94,202,166,124,225,138, 64,126,161,223,105,141,103,116,247,211, 58, 98,119,119,151,147,147,103,156,
-156,157,227, 12, 40,161,200,178, 24,233, 53,122, 48,160,113,146, 97, 22, 82,222, 46, 46,167,104, 29,209, 84, 37,103,103,103, 84,
-203, 37, 81,167,201,189,123,255, 46, 89,172,184,119,251, 22,195,201, 14,113, 58,228, 96,103,194, 40,145,140,178,140, 68, 74,198,
- 3,144,218,227,117,206, 96,110,105, 91, 77, 45, 64,170,146,200, 91,124,235,144, 81, 26,156,138,164,197, 9,211, 73,125,228,139,
-149, 10,207,169, 26,182, 27,159, 23,189,194,107, 66, 81,111,165,248, 2, 91,206,107,178,159, 78,250,102,157, 67, 56,219,125,175,
-236, 76, 67, 4, 10,135,236,126,214,171,247,238,241,215,126,253, 91,124,240,232, 99,164, 30,113,126,242,140,182, 44,152,140, 6,
- 92,205,102,252,147,127,250, 79,249,229,111,188, 77, 44,225,207,255,236, 7, 12,243, 33,143, 63,126,196, 32,203, 88,181, 53, 31,
-127,252, 49, 77,181, 2, 91,177, 55,156,112,190,178, 92, 22, 32,149, 6,233, 40,164,101,132,100, 79, 72,246,156, 96,172,135, 44,
-149,229,201,124,193,101,236,249,209,178,228, 77,173, 41,230, 75, 70, 89,198,188, 90, 48,153, 28, 80, 57, 88,186,150,201,193, 8,
-145, 36,252,240, 39,159,242,240,225,109,242,168,225,225,173,148,189,244, 6,143,143,151, 12, 99, 13, 14,134, 89, 74, 93, 86, 40,
- 39, 56,204, 19,164,112,220, 61, 28,243,228,211,115,226, 8,140,129,198,130,119, 18,229, 99,132,104,105, 61,180, 94, 81,183,134,
-133,119,120,175,200, 74,203,209, 72,112,123, 71, 97,157,229,242,114, 69,101,192,171, 5, 73, 58,225,224,240, 22,113,150, 97,125,
-208,249,151, 69, 77, 81,150,148,101,137,181,150, 7,119,239, 49, 72, 50,150,243, 75,202, 98,134,179, 13,214, 57, 62,249,240,152,
-119,223,123,202, 69, 13,173,131,227,203,160,183,157,205, 23,252,242, 87,223, 98,127,156, 49, 24,142, 72,148, 98,186,152, 81,170,
-176, 87,111,155,150, 52, 73,201,178, 28, 45,192, 10, 40,203, 2,146, 28,223,180,160, 4, 85, 19,156,212,126,245, 91,223,226, 27,
- 95,121,133,233,229, 49,137,214,180, 77,201,104,156, 17,233, 4,156, 65,235,136,213,170,192,122,139,198, 99,171, 21,229,114, 70,
- 26, 73, 34,181,177,195,236,209,157, 77,124,234,117,203,226, 62,251,188, 31, 66,250,224, 14,133, 39, 81, 97,247,110,173,237,242,
- 7,130,226, 2, 17, 58,201, 78,130,220, 65,178, 13,116,166, 46,161,142, 4, 66, 85,200, 91, 17, 72, 84,135, 74,117,102, 51,214,
- 6,212,171, 51,112,137,116, 28,188,194,149, 70,233, 4,157, 36, 68, 73, 76, 20,199,161,201, 96,147,213, 30, 37, 91, 3, 73, 36,
- 58,155,227, 8, 21,107,226, 44,225,134, 61, 34,203, 50,206,207, 46,121,248,218, 3, 86,149,225,143,254,228, 93,238,220,206,249,
-213, 95,249, 6,187,131, 44, 40, 40, 84,204,213,101,197,170,243, 25,176,182, 10,154,108,101, 25, 12,134, 8,103,137, 35,133, 83,
- 2,103, 13,198,180, 8, 41, 41,234,146,221,253, 67, 46, 79, 46,152,151,134,195,193, 8,233,106,156,179,228,121,142, 82,146,166,
-105,214, 78,162,190,155, 62,131,163,153,196, 56,135,117,130,201,120,132, 19, 18,132, 70,234, 4,248, 49,143, 30, 61,226,225,131,
- 7,100,105, 28,200,150, 73,138,113, 14, 61,200,185,156,205,144, 34, 39,145,142,217,249, 51,254,167,255,195,191,203,255,237,159,
-253,115,206,139, 22,107,229,115, 85,187,127,157, 94,206,157,155, 47,230,252,127,254,249, 63,231,245,215,223,224,230,205, 91,252,
-238,191,248, 93,254,246,223,250,109,222,127,255, 61,190,244,165, 47, 83, 86, 13,255,252,119,127,151,255,205,255,250,127,197,227,
- 79, 63,161,169,203,238,241,252, 86, 25,176,155, 48,175, 45, 39,204,254,124,235, 11,124,144,239,134, 9,221,185,237, 38,207, 95,
-251,184, 93, 79, 59, 79, 29,236,250,220,235,234,159,227,133,245, 84, 56,129,113,142,214, 70, 52,205, 38,155,192, 19,174, 55,211,
-161, 69, 61,145,111,109, 19,251, 82,121,215,203,164,110,235,169,254,197,123,115,241,115, 44, 72,183,229, 82,127, 81,189,249, 95,
- 70,182, 38,186, 96,250,107, 18,148,231,168,221, 27,213,139,216,146,186,189,216, 89,173,135,233,250,239,243,120, 70,227, 9,111,
-189,253,101,236,143,127, 68,154, 68, 68,120,218,214,115,124, 81, 82,172, 22,212, 70, 98,202, 18, 37, 5,141, 49,100,113, 76, 58,
- 24,113,243,181,215, 24, 15,114,210, 56, 14,161, 13, 55,110,146,198, 17,163, 44, 39,138, 83,140, 19, 84, 5, 40,227,192,204,184,
-106, 47, 57,121,214,146,165, 67,158,156,205,249,244,217, 21, 63,125,247, 61, 48, 53, 71,123,138,139,203, 25, 94, 13, 57,188,245,
- 10,174,179,189,116,210, 93, 35, 0,125, 33,123,216,109, 69,196, 75,154,192, 94, 15,236,241, 47, 68, 95,164,220, 76,233, 61, 52,
-239,172,195,120,137,148, 1,154, 18,194, 99,145,200,142,148,232,132,231,157,183,223,226,246,209, 13,254,213,239,125, 23, 87,149,
- 72,239, 88, 21, 5,201, 96,192,217,179, 25,127,248,189,159,242,245,215, 30,112,252,233, 83, 70,163, 33, 2, 79, 50, 30,178, 59,
-153,176,183,179, 67, 91,106,104, 75,126,242,209, 25,211, 74,208, 68,154,149, 9, 7,120,100, 33,151,144, 8, 79, 19, 75,206, 92,
-193,188, 10,251,236, 73, 29,209,150, 53,245,110,134,181, 37,119,110,223,102, 53, 43, 56,189,184, 96, 81,215, 52,120,158,124, 50,
- 71,221,144,236,236,238,240,147, 31,127,194,221,219, 3, 84, 36,136,163,156,183,223,184,195,199,207,158,114,113,177, 66,120,203,
- 32,139,152,205,102,140, 82, 13,206, 34,102, 5,247,198, 25,131,124,192,233, 85,193,233,162,162,113, 21,145, 18, 76,164, 71,155,
-208, 50,182,128,147, 2,107, 37,141,112, 76, 14, 50,146,212,211,182, 48, 95, 57, 6,187, 25, 7, 71, 55,104, 93,132, 65,176,187,
-119,192,211,147, 19, 70,121, 68,107,195,225,139,119,124,237,171, 95,193, 52, 45, 87,231,231,204, 23,151, 92, 45, 46,184,152,205,
-120,122,177,228,241, 73, 73,101, 5,181, 16, 56, 28,243, 39, 83, 46,202,154,218, 25, 70,195,156, 87, 15, 71, 12,243, 43,134, 7,
- 71,212,197, 10, 25, 69, 29, 81, 12,150,179, 25,137,142, 80,145, 39, 75,227, 48, 97, 8, 1,145,198,123,199,197,229, 28,231, 28,
- 73, 28, 49, 26,239, 32, 58, 41, 24, 38, 64,211, 8, 69, 83, 87, 16,103, 8,165,195,106,162,173, 56,125,250,136, 84,208,105,114,
-195,196,188,205,126, 95,239,161, 59, 14,135,115,193, 85,171,143, 82, 21, 82,224,188,192,185,176,165, 21, 82,160,163, 40, 56,115,
- 37,201,154,240,102, 76,208, 14, 11, 92,167, 7, 14, 16,123, 20, 43,240,225,177,149,128, 40,210,180,117,189,206,216, 14,107,206,
-205,174,189,255,121, 72, 80, 50,130,110, 10,142,146,152, 56, 77, 72,179,140, 56, 73, 80,177, 94, 51,221, 5,225,239,235, 11,128,
-148, 10,226, 94,206,214,189, 63, 91,195,206,193, 62,206, 88,132, 18,236,237,141,249,230, 55,190,138,243, 45,227, 73,198,141,195,
- 9,195, 56,166,105, 44,142,132,214, 52, 84,141, 67,170,152,249,124, 65, 66, 68, 54,144, 88,211,118,171,136,176, 66,177,166, 97,
- 60, 30,113,124,122, 65,150, 13, 56, 59, 57, 99,152, 14,120,122,177, 32, 83, 57, 59,153, 96,103, 48, 34,201,114,132,168,201,178,
-156,162, 88, 5, 51, 23, 44, 82, 70,196,137, 14, 18, 76,107,192, 71,104, 36,142, 60, 32,110,226,117,134,121,206,119,255,228,123,
-124,250,233, 99, 94,121,112,143, 76,167,157, 2,163, 98, 85,149, 68, 50, 40, 8,146, 56, 69,152,154,216, 21,220,221, 31,113,177,
- 56, 14,121,229,126, 59, 8,106,125,106,188,148,225,228,129,239,253,249, 15,248,254, 15,127,192,183,126,233,151,249,227,239,126,
-135, 63,254,147, 63,229, 55,126,253,175, 16, 39, 25,127,250,103,223,103, 48, 24,241,224,149,135,188,245,229,119,248,222,159,124,
-167,103, 2,175, 79,174, 53,176,255,220, 89,183, 65, 40, 89, 95,107,155, 2,239,215, 86,232,206,250, 53,218,232,185,142,130,175,
-173,178, 61, 91,214,184,215, 19, 66,183, 11,187, 16,162,115,161,115,212, 98, 99,122,180, 38,118,247,190, 8, 94,172,127, 7,245,
-245, 55,239,254,163,151, 77,182,207,231,169,191,128, 83,246,133, 72,110, 47,102,184,115,157, 53,253, 18, 38, 60, 95,128,129,255,
- 69, 27,130, 23, 69,182,110,119, 85,116,158,190,214,133, 93,186,177,225,214,118, 31,173,117,107,246,251,154,245,174,187,196,182,
- 46,111,186,127, 92,235, 28, 77,219,114,113, 53,165, 40,150, 1, 10,158, 46,137,211, 28, 33, 19, 38,187,123,236, 76, 38,236,239,
- 77,184,113,120, 64,170, 99,156,109, 57,216,223, 39,142, 34,150,139, 37, 82, 10, 78, 78,159, 98,155,146,186, 92,112,122,246,140,
-217,124, 74, 93, 46,168, 86, 87,164,113, 65, 85, 60,197, 54,134,197,172, 33, 73,246, 56, 62,187,224,244,244, 17, 7,135,154,253,
- 93, 65, 62, 76, 48, 64,148,228,120, 25,173,119,231,188,100,197,209, 31,116,242,186,178,241, 26,204,248,252, 69,183, 14, 38,232,
-155, 4,252,203,227,112,123, 27,207,117, 66,149,216, 24,128,248, 48,225,120,239, 54,175, 73, 71, 72, 25,230, 25,111,220,187,203,
- 43, 55,247, 81,174, 37,138, 34,206,231, 43,106, 15,127,246,163,119,185,115,112,128,182, 45,121,150,114,176,191, 71, 89,174,194,
-190,218, 24,170,229, 18,191, 50,124, 48, 45,120,108, 61, 75,107,201,101, 68,234, 61,169, 20, 33,254,212,123, 22,206, 97,187, 3,
-196,122,208,232,240, 70,179,134, 60, 17,204,174,174,104, 90,135, 74, 6, 24, 66, 52,102, 92,195,114, 94,114,235,238, 1, 73,226,
- 57, 63, 94, 82, 55, 18, 82,141,165,226,230,126, 70, 26,135, 67, 35, 73,116,216,183,122,130, 23,188,143, 24,141, 71, 44,202, 10,
-163, 52,211,178,162, 21, 14, 41, 29, 89,228, 73,165,199, 11,203,104, 71,163, 83, 69, 85,183, 76, 50,184,117, 24,177, 51, 26,178,
-179,187, 71, 62, 74, 25,237,236,144,100, 35,118, 15,111,132,125,173,148,232, 56,198, 56, 79, 89, 85,164, 89,202,107,175, 60,192,
-152,150,217,213, 37,213,114,193,229,236,146, 71, 79,142,249,201,163, 41, 79,102, 45, 83,167,168, 72,105,165,192, 8, 65,139,103,
- 90, 4,227,159, 72,180,220,216, 29, 17,199, 17, 94, 8, 98, 29,138, 69,164, 52,186, 59,212,165,148,228,121, 74, 44, 69, 48,222,
- 32,194, 54, 53, 77,221,176, 50,154, 89,233,185,113,120, 68, 93,149, 76, 38, 35, 6,131,140, 44,209,104, 45,185,186,188, 8,206,
- 89, 94, 80,182,158, 88,107,206,158,124,140, 41,231,196, 50,200, 20,149,138,214,193, 27,170,211,236,174,213, 22,178, 11,197, 80,
-178,219,155,203, 13,207, 99,157, 3, 44,144,170,219,105, 75, 73, 20, 71, 33,198, 87,134,143,253,245,187,134,234, 59, 20, 64,105,
-141,142, 19, 34, 29, 82,176, 34, 29,246,248,253,125,195,249, 44, 64, 73,100,191,167,143,194,247,232, 56, 76,231,105,158,147,100,
- 25, 81,146,160,226, 56,192,238, 73,152,214, 67,138, 72,248,121,189,218, 69,196, 49, 40, 25, 52,234, 82,132,253,123,164,153, 93,
-205,144, 82, 18,167, 25, 82, 69,220,186,125,196,206,206,128,209, 48, 11,206,138, 34, 97,190,106,185,154,215, 28,159,206, 40,138,
-134,247,222,125,151,197,197, 41,222, 86,100,249,144,120,184,203,201,180, 66, 38, 57,198,122,180, 78,104,140, 35,207, 7,120,231,
-200,242, 33,243,217,148, 91, 7, 19, 82, 97, 48,109,141,247,138, 52, 31,146,143,198, 12,242,160,208, 73,210,132,241,100,180,134,
-194,189,247,129,157,221,241,166,156,245, 84, 93,254,119,146,230, 60,250,232, 17,194, 11,242,193, 32, 52, 49,206, 34,156, 13, 42,
- 14, 37,201,226,168,107,140, 36,217, 96,194, 31,127,255,199, 88, 23, 92, 52, 17,155,148,251,109, 10,247,243, 50,173, 62,152,167,
-109, 91,150,203, 5, 95,253,242, 59,124,237,107, 95,227, 31,255,151,255, 5,247,238,221,229,205,183,222,230,254, 43,175,242,107,
-191,254,235,236,239,237,113,184,191,207,135, 31,188, 79, 89,174,240, 29,169,119, 61,181,139,151,172,131,187,194,109,157, 93,243,
- 42,174,185,104,250,235, 72,130,232, 72,225, 91,174,231,159,153,252,175,173,128,121, 46, 39, 99, 43, 68,198,174,161,254,110,191,
-239, 54, 60, 39,183,245, 24,234, 27,111,221,251, 71, 47, 39,185,189, 56, 78,181,255,127,159,183, 83,127, 17,241,237,249,199,254,
- 60,249,217,207,133,188,191,128,123,221, 47,100,114,227,125, 23,167,187,145,180, 89,107,131, 79,175, 13, 4, 5,235,194, 14, 57,
- 82,138, 56,214,225,214,201,217, 98,173, 3,251,182,243,141, 55, 29, 20, 87, 87, 13,171,197,130, 68,107,118,119,119,208, 58, 33,
-201,134,129, 12,163, 68, 32, 83, 93, 93, 50,159, 77, 3, 51,185, 88,177, 92, 46,104,219, 26,173, 21, 73, 98,240,118,193,225,126,
-206,120,146, 48, 24, 40,134, 3, 79, 18, 21,164, 81, 67,181,152,177,186, 90,112,252,228,140,214,120,172,112,236,238, 15,201,115,
-133,111, 27,110,222,190, 79,235, 35,106, 7, 94,168, 23,216, 9,189, 40,114,151,181,209,142,223,186, 96,214, 23,208, 53, 11, 76,
-185, 85,212,197,122,167,254,252, 99,110, 26,183,109,149,193,214, 27,214, 19,118,115,222,108,117,193,129,117,218,167,137, 71,145,
- 98,119, 50,228,238,173, 35,132,138, 56, 62,191,164,108,130,142, 84,182, 13,223,254,213, 95,198, 58,131,214,130, 79, 30,125,200,
- 40,207,248,209, 15,127,204,116, 54,229,248,170, 96,190,178,232, 40,166,241,193,135, 93, 9,184, 63,220,101, 71, 39,152,214,112,
- 37, 28, 75, 28,141,247,180, 30,116,224, 67,147,167, 17,121, 34,169, 86, 13, 58, 75,153, 87,150, 91,119,110,177, 42,150,236, 68,
- 9,141,181,248, 68,112,112,184, 71, 44, 29,139, 69,201,147,139,130,210, 89,118,118,119,144, 74, 48, 72, 99,148,112,236,237,142,
- 89,174,106,230,165,229,188,177,232, 68, 97,188, 99,190, 44,241, 14,118, 99,201, 94, 12,183, 14,134,232, 84, 17, 43, 56,186,149,
-179, 51,137, 72,163,136, 97, 34,121,112,111, 76,164, 53,181,177, 24, 15,198, 75,170,214, 4, 15,124, 41,105,219, 96,242,209,180,
- 13,163,201,152,225,104,128,105,107,170,114,201,229,229, 9,214, 20, 52,109,203,229,180,228, 98, 22, 76,137,250,226,231, 59,246,
- 46, 66, 98,113, 20,165, 33,166,229,230,254,152, 97,150,226, 92, 64,161,158, 29,159,226,124,136,205, 77,179, 12, 33, 5,163,241,
- 16,229, 29,197,170,198,138, 8,211,148,248,182,197, 71, 67, 38,135,247, 80, 82,146,231, 3,162, 72, 49, 25,230,212,213,146, 56,
-137, 49,214,177, 90, 44,113, 81,140, 37, 98, 49,157,113,252,201, 7, 12,116, 8,106,137,162,144, 70, 37,213,134, 92, 41, 59, 98,
- 38, 66, 4,130,220, 22,233, 77,118,187,243,112, 50,203,110,250,246, 91,169, 88,221,254, 90, 74,148,140,130,247,118,119,247, 40,
-138, 16,157,165,171,140, 84, 96, 32,199, 61,100,222, 49,239, 59, 41, 93,127, 31,165, 2, 49, 47,210, 49, 58, 78,136,147, 4,157,
-164,232, 52, 37,201, 50,146, 52, 67, 39, 41,145,142,137,162, 24,149,132,162,237, 5, 97, 95,175, 20, 34, 82,161, 89,232,136,115,
-200, 8,162, 40, 20,124, 17,225,157,231,242,236, 2, 47, 20,181, 9,112,107,158,103,193,202, 87, 41, 36, 17,166, 5, 45, 19,172,
-151, 28,159, 93,241,241, 39,143,121,245,193, 93,246,198, 25,206, 84, 60,126,118, 70, 52,220,195,197, 67,106, 23,136, 36,195,209,
-136,170,105,187,129,198,144, 14, 39, 84, 85,193, 78, 38, 25,199,161,161,149, 81,204,124, 62,167,173,107, 34,173,209, 73, 76,146,
- 36, 40, 41,137,147,152, 56, 78,200,243,148, 52,137,215, 40,104,120,126, 52,197,114, 21, 28, 51,133,230,227,143, 62,102, 56, 28,
- 50,154,140, 72,147, 8, 76,139,146,132,115, 46, 78, 66,227,134,224, 87,127,229, 87,104,154,138,179,227, 51,202,162,222,148,242,
-190,232, 10,127,125,183,238,183,253, 52,194,121, 62,159,207,121,245,254,171,188,241,198,235, 28,159, 28,243,222,123,239, 17, 39,
- 41,119,238,222, 67,199, 9,206, 88, 62,250,240,125,238,223,189,205,179, 39,159, 34,241, 72, 9,113,151, 49,160,187, 8, 95,221,
-133, 6, 73, 33,215,177,185,215, 98,168,251, 97,199,117,193, 47,221, 74, 39,164,169, 69, 93, 12,117,119,139,212, 70,121,209,173,
-129, 66,147, 26,194,123,162,245,215, 69,248,188,147,105,246,134, 75,108,197, 97,111, 36,154, 27,249,177,232,220,248, 62,191,168,
- 35, 62,103, 42, 22, 47,156,212, 95,154,205,126,237, 49,174, 55, 4,159, 87,208, 95,148,204,246, 69,253,199,159,191,125,238,253,
-187, 14, 41, 76,234,157,182,176,211,169,247,250, 66,119,109, 82, 15, 68,185,245,212, 30,105, 84, 96,189, 5,249,131, 7,235,130,
- 55,112, 85, 20, 68, 66,160,165,164,105, 29,151,243,101, 64, 1, 76,195,213,229, 57,243,217, 28, 65, 8,115,240,206, 34,165,224,
-240, 96,159,253,253, 61, 18, 45,144,206, 16, 73,207,225,193, 1, 73, 28,209, 54, 5,203,233, 41,237,162,102,246,108,206,236,252,
-140, 40,242,164,131,152, 87,223,120, 72,146,142, 80,164, 84,133, 96,119,255, 46,103,151, 11,108,199,236, 21,235,247,132,223,172,
- 22, 94,128,166,108, 19,229,182,187,192,207, 48,223, 63, 51,169,111,138,250,139, 16,152,107, 25,235, 66,210,191, 85,186, 69,230,
-250, 13,187, 22, 43,116, 82, 15,239, 5, 13,129,165,172, 35,201,237, 91,183,185,119,247, 46, 7,187, 59,248,170, 96,122,121,201,
-151,222,122,141,243,139, 83,150,203, 25, 59,227, 17,207, 30, 63,230, 7,223,255,128, 73,158,114,121, 81, 48,119,158,101,107,185,
- 61, 25,177, 35, 66, 44,227,194, 91,158, 85, 5, 53,158, 2,135,118,130,129, 8, 19, 82,229, 12, 75, 25,118,177,123,163, 36, 4,
- 67, 88,137,215, 9,101, 91,115,176, 59, 64, 69,142,105,211,208, 74, 77, 89,148,188,122,123,128,162,162,105, 60, 79,174, 60,143,
-206, 23,236,238,238,177, 51,204, 48,197, 18,219,212,236,236, 12,145, 2, 92, 99,200,148,197,213, 45, 17,144,197,154,129,214,200,
-198,210,122,199,180,178, 52,181,101,152, 27,226,216,115,208, 93, 15,198, 22,212,109,203,254,225, 33,217, 96, 4, 82,177, 90, 21,
- 28, 28,222,160,172,202,206, 44,195,114,243,230, 77,100,164,130,110, 28, 75, 89, 44,152,207, 46, 48,166, 32, 75, 83,198,249, 16,
- 87,149,196,206,242,224,112,200,157,253,148,166,168, 66, 3,235,187,169,214,123, 68, 99, 56, 28, 37,236, 12,243,144,124, 38, 20,
-198,194,116, 54, 95,239,148, 17,130,209,100, 12,198, 82, 44, 43,234,214,226,154, 10,211, 52, 76, 11,203,222,209, 3,188,247,232,
- 36, 38,203, 82,134,131, 24,211, 84, 8, 41, 89,150, 37,182,105,209,217,152,211,203, 25,255,238, 15,126,143,221, 44, 34, 85, 16,
- 71, 97,178,141,244,102, 50, 15, 83,247,182, 55,194, 70, 18,182,109,244, 18,174,101, 7, 88,132, 0,165, 4,206, 25,116,164, 73,
- 98,189, 81,171, 16,138,190,236,208, 67,213,253, 28,191, 38,198,234,112,232,198,122, 93,124,251,247,125, 20,233,176, 43,215, 93,
- 58, 96, 28,119, 83,122, 70,156,164, 68,113,130,142, 99, 84, 28,135,162,173, 20, 68,170,243,183,149, 8,185, 33,177, 6, 72, 95,
-130, 80,120,165,130,132, 76,134, 70,188, 94,149,172,150, 5,113,154, 97,157, 32, 78, 82,148, 14,150,161,193, 56, 5,118,198,187,
-228,105,196,197,229, 21, 79, 78,206,112, 2, 94,127,120,159,135, 15,142,120,251,205, 7,164,163,125, 30, 29, 79, 57,155, 87,236,
- 31,221, 33,207, 7, 88,235, 88,174, 10,132,240,148,197,130,225,238, 33,231,231,167,220,221, 31,177, 63, 80,100,113,130,208, 41,
- 77,211,226,156,165, 44, 75,234,170,194,180,109, 72, 25, 83,225, 57, 22, 34, 88, 60,103,105,194, 32, 31, 16,199,233, 90,119, 63,
-155, 87,184,214,225,173,231,211,199, 79, 56,188,113, 64,158,198,220,186,113,192,108,122,134,214, 26,135, 64, 71, 26,215,182,100,
-113,204, 32,205,185,115,243, 6,171,178,226,242,106, 22,194,182,214,147,224,231, 24,169,116,235, 79,107, 29,182,177,252,210, 47,
-125,147,123,119,239,242,143,255,241,127,197,227, 39, 79,104,109,144, 26,126,248,254,123,124,250,241,135,129,220,154,166,156,157,
- 30,163, 4,221,173,111, 28,187, 92,129, 62,182,204,119,241,173,136,107,131, 71, 95,228, 69,119, 93,134, 34,222,165, 8,110,173,
-140, 34,213,249, 37,200, 77,193,142,148, 90,127,236,111,235,244, 65, 41,215,206,137, 61,178,173,186,226,223,223,119,219, 39, 37,
- 92,143, 42,192,239,189,124,233, 51,112,195,231, 26,202,188,124, 82, 23, 47, 41, 22,215, 27,134,173,136, 68,196,181,207,229, 22,
-100,177,109,108, 35, 94,246, 74,110,237,180,253,103,194, 98,182, 37,121,159,229,196, 93,255,188,123,209,214,147,122, 7,193,111,
- 49,224,133, 8, 19, 99,172, 35,226, 56, 10,209,125, 81, 68,172,187, 3,165, 79,172,179,126,205,126,188,188, 56,167, 44,150, 44,
-230, 11,180,210, 84,181, 9, 69,202, 54, 20,197,138, 52,137,137,227, 12, 80,212,109, 77, 26, 71, 8, 23, 12, 70,166, 87, 51,242,
-124,194,193,193, 29, 6,195, 93,178, 60, 99,181,152,130,169,176,165,163, 89, 90,246,246,115,118,246,115,110,220, 62, 34,206,134,
- 76, 23, 13,171,210, 16,235, 9,163,201, 30, 23,151, 23,212,214,224,187,245,128, 92, 79,210,221,115, 45,215,244, 1,132,112,168,
-126, 2,223, 58,244,228,182,124,177,187, 48,251, 11, 56, 82,146, 40,146,221, 84, 37,187,238, 52, 28, 56,253,243, 19, 58, 87, 21,
- 2, 19,186,207,163,238, 66,143,162, 64, 10, 12, 31,101,184,111,164,214, 23,175,232,166, 72, 39,100, 96,147,118, 77,216,209,225,
- 1, 59,195,140,119,222,126,133,111,127,235,155,156, 95,156,115,117,117, 65, 42, 36,171,233,156,239,253,232,103,204, 86, 13,198,
-194,121,109, 41, 61,164, 42, 34,106, 26, 82, 28,214,195,204, 25,140,135, 88, 40,108,119,144, 87,206, 82,226,176, 74, 96,100,176,
-237, 84,214, 49, 25, 36,204,231, 21,249,120,204,233, 98,137,141, 64,197, 96,156, 97, 94, 24, 82, 5, 89,234,201, 82,141,109, 29,
-138,136,162,114,124,116,124,197,194, 88,238, 62,184, 75,170, 35, 46, 79, 47,144,214,178, 59,208,228, 90, 18,203, 62, 68, 36, 2,
- 4,113, 12, 6, 71,150, 69, 28,238, 13, 2, 51, 89,133,169,106, 50,158,112,227,198, 1,121, 62,160,110, 45,187,251, 7,160, 20,
-141, 13,146,156, 36,209,232, 88,177,179, 51,217,188,158, 2,218,170,164,173, 42,188, 51, 84,229, 42, 28, 20,206,225,218,154,195,
- 73,198,171,119, 14,130, 55,248,172, 64,116,196,159,200,123, 18,224,238,254,144,195, 73,206,206, 56, 39,142,130,157,238,104, 50,
-225,209, 39,143,209,157,255,126, 20,135,169,166,173, 91,102,179, 5, 77,221, 2,142,162, 44,153, 47, 91,226,124,130,140, 99,156,
- 53, 12, 7, 41,216,150, 88, 43, 90,235,168,234, 22,103, 44, 69,235,249,111,254,233,255,155,167, 79,159,113,184,191,199,100,144,
-161, 35,209, 29,134,106, 51,137,116,236,118,213, 49,221,233,246,229,219,230, 71,253,199,222, 9, 81, 42, 21,118,237, 61,217, 78,
-200,245,185, 19,206,177,238, 49,214, 14,112,161,153,149, 29,116, 31,162,124, 59,104, 95,116,166, 49, 82, 33,186, 41, 93, 70, 49,
- 82,107, 84,172, 81, 81, 68,148,164, 1,170,215,157,116, 45,214,235,162, 30, 88,248,155,223,161,255,253, 69,231, 39, 47,149,134,
- 40, 56, 80,246, 97, 34,229, 98,133,107,131, 94,188,172, 27,140, 11,146,168,166,173,241, 30,110,221,190, 19, 12,146,202, 5,103,
- 23,151,156, 95,205,104, 77,195,104,148,144,196, 30,173, 21, 98,116,131, 21, 41,232, 1,113,146,161, 35, 69,211,212,196,113,198,
-124,177, 36,141,195, 20, 94,172, 10,114, 45, 57, 26,165,184,182, 66,165, 89,224,176, 36,193,124,198, 57, 31, 8,141,214, 6,153,
- 91,107,137,227, 56, 68,133, 70,225, 26,150, 74,145,198, 9,177,214, 32, 53,117, 93, 81,215, 13, 87, 23,151,216,186,100,111,111,
- 72,150,107,170,186,130, 14,137,144,162, 95,117,165,188,250,234, 43,224, 28,183,143,110, 16, 9,193,201,233, 69,144,120,193,117,
-247, 44,191, 5,116, 75,209, 7,135, 2,112,121,121,197,235, 15,223,224,173, 55,222,226,252,228,132,147,167,159,208,150,115, 78,
-158,126,196,197,217, 41,121,150, 33,145,236,238,238, 82, 22, 5, 69, 89,116,158, 7, 91,245,198,187,245,227,173, 37,189,157,132,
- 45, 24,214,116, 65, 49, 93,100,110,104, 2,194,153, 26,154,196,222,210,216,175,207,216,222,222,184,175,113,242,154, 33,219, 54,
-200,212,203,132,251,141,169,188,118,102,198,145, 10,105,109,113, 24, 50,251,226,190,222,169, 63,175, 37, 95,135,140,138,151, 77,
-235, 98,187, 18,188,116,127,254, 34,173,185, 20, 34,100, 20,119,255,109,191,193,250,212,162,205,147,202,102, 79,225,251, 2,190,
-185,255,250,141,233,183,229, 87,207,181, 1, 66, 92, 43,238,222,191,200, 55, 47,176, 25,233,204, 2,174, 21,245,206,246,207, 90,
- 11,248, 32,105,211,161,219,143, 34,133,142,163,174,112, 69,244,215,193,134, 61,105,169,170,130,233,236,146,201,120,200,112, 48,
-228,252,244,138,186, 49,136, 72, 34, 53,196, 73,130, 49,193, 53, 46,203, 50, 34,105, 49,117, 65, 44, 61, 69, 93,144, 15, 71,140,
-247, 14,113, 2,148,114, 20,203,115,134, 3, 65, 85, 20, 88, 11, 71,183,111, 32,164, 96, 85,150, 60, 61, 62, 35,202, 71,196,131,
- 9,141,113, 36,137,160, 46, 23, 20,101,129, 23,221, 68,176,214,138,139,117, 71,170,164, 32,146,116, 30,197, 93,167, 41, 67,214,
-111,223, 45,246,176,144,142,228, 86,193, 86, 36,177, 34,214,253, 45,132,170, 36,113,184,197,177,234, 62, 87, 36, 90,145,232,168,
-187, 41,226, 72,174, 63,198, 58, 60, 86, 28, 73,146, 88,145,198,225,190,186,235,100,131,219,156,193, 89,211,173, 17,100, 96,224,
-182, 37,135,187, 35, 92, 85,241,225, 7, 31, 48, 26,231,232,170,229, 39,223,255, 25,159,206,150, 44,188, 96, 86, 58,206,157, 39,
-209, 26,107, 77,152,138, 71, 99,170,142,153, 90,122,207,220, 57,140,135,214,123,172, 12,200,128,235, 94, 71, 39,160,109, 29,177,
- 15,214,176,101,211, 48,216, 25,241,233,197,140,189,221, 29,110,238, 31,176,147,165, 76,167, 43, 22,133, 99,188,187,199, 56, 83,
-228, 84,104,219, 50,173, 28,159, 44, 42,126,118,114,133, 74, 99, 94,123,112, 7,105, 61,173,105, 88, 20, 53, 66, 10, 98, 21,225,
- 45,104,237,176,190,225,246,173,140, 84,123, 60, 45,249, 40,163,168, 13, 66, 4, 19, 22,239, 21, 89,150,113,124,122, 70,213, 90,
- 80, 17,135, 71, 71,196,113,140, 20,158,178, 44,153, 77,167, 68,145,196, 25,131,244, 14, 83,215, 72, 15,137, 78,112, 62,104,140,
-145, 48,222,233,246,162, 82, 49,189, 90, 48,208,146,221, 44,129,178, 97,172, 4,123,105,196,173,131, 1,195, 92, 17,107,201, 48,
-209, 88,111, 73,243,140,167,199,167, 88, 75, 72,145,114, 45,121,170,209, 42, 97,185,172, 16,222, 83,155,150,162,113, 24,227, 89,
- 22, 21,147,221, 61,202,213,156,209, 32,195,152, 22, 47,228, 90, 91,123, 57,157,242,255,252,127,253, 46,171,218, 80, 89,137,245,
-130, 27,251,187, 12, 34, 31,228,116, 34, 92, 7,107,219,213,174,217, 19,114, 35,169, 92, 23,248, 45,203, 85,223,249,185, 43,165,
-214, 73, 91,170,135,209, 59,243,154, 62, 21,173,127, 12,223,125, 45, 76,223,138, 40, 14,136,156, 95, 15, 34,114,227,233,160, 58,
-136, 92, 42,100,191,111,143,162,181, 78, 94, 40,137,212,186,147,182,133, 9,221,211, 57,206,173, 35,194,131, 43,159, 16, 34,152,
- 47, 65, 40,142, 82,133,221,186,144,204, 47, 46, 73,100, 20,224,238, 44, 70, 70,129,245,223, 90,195,141,155, 71, 65,251,220, 54,
-120,231, 56, 59, 95,112,113,185,160, 44, 86, 33,154, 89, 0, 34,230, 95,253,233,123, 28,188,242, 38, 86, 68,140,135, 3, 34, 1,
- 90, 41, 80,193, 94, 56,236,214,106, 84, 28, 51,202,114, 30,222,220, 97,156, 41,166,171,130, 85,177, 98, 50,158, 80, 85, 53,174,
-147,178, 54, 77, 75, 89,213, 24,227,184,186,152, 81,148, 53, 85,211, 6,149,141, 16,224, 2, 65,211,135, 49, 19,165, 35,218,178,
- 98,126,113,206,238,206,128,108,156,112,113, 53, 39, 77, 6, 8,111,209,202,179,183,183, 67,164, 53,123,123,187,236,140,134, 76,
-180,228,230,254, 14,187,163, 17, 79,159,157, 81, 54, 77,112,170,148, 93,202,221, 26,129,239,124, 53,182,248,116, 94, 8, 86,203,
-130, 95,255,214,175,241,218,253,251,252,232,207,190,195, 36,245,236, 14,194,117, 80,150, 21, 81, 20,147,166, 35,134,147, 29, 78,
- 78, 78,240,180,235, 97,213,227,240,210,111,209,243,186,167,200,155, 80,212,157,199, 88,191, 14,200,146,235, 60,130,205,138,104,
-157, 83,208, 87,154,126, 5,185,110, 60,187,234,191,101, 71, 46,186,161,170, 91,130,118,215, 93, 55, 52,169,240, 49,142,194, 64,
- 25,175,207,207,184, 43,234,234,122, 81,255,204,199,159, 59,125, 63,183,103,127, 41, 41,238, 5,147,252,207,209,165,191, 92, 30,
-247,115,224,247,191,128,244,173,103, 45,250, 32, 8,188, 54,169,183,207,105, 9,251, 8,197, 48,169,235,245,238, 68,119,147,195,
- 6,210, 15,146, 3,231, 28,117, 93, 50,157, 94, 48,200, 19,154,186,101, 85, 84,136, 40, 66,167, 49,168, 16,242, 96, 93, 48,231,
- 79, 18, 77,154, 68,184,182, 13, 5, 51, 5, 29,123,246,246, 70,236,239,143,200, 50,197,229,217, 41,229,170, 64,160,136, 68,194,
-251,239, 62,101,185,108,152, 45,174,208,131,132,201,222, 93,156,159,224,172, 65, 43,193,116,122, 73, 89,215, 88,161,240, 94,110,
-144,144,190,179, 84, 98,189,227, 81, 81,208,211,134,207,229, 90, 54,164,186, 29, 78, 20, 5,163, 29, 29, 73,146, 14,173,136,117,
-180, 70, 46,250,206,241, 90, 97,215, 42, 88,147,198, 58, 20,244,245,247,108, 16,143,117, 83,208, 55, 0,235, 70, 73, 5, 56, 12,
- 66,214, 61, 96,141, 33,141, 53,194,135,136,213,178, 40,104,138, 42,168, 4,134, 41, 63,250,211, 63,229,114,186,196,196,146,121,
- 27,214, 32, 18, 23,118,102,137, 98,110, 44,211,170,102,110, 12,165,247,180,157,126, 95, 69, 33,190,210,109,173,107,156,216,200,
- 80, 76,107,208, 82, 97,140, 37,213, 41,177,212, 60, 59,189, 32, 79,115,226, 40,102,144,101,120,111, 40,150, 75,238,221,190,137,
- 19, 37,113,214,144,226, 17, 6, 22,181,227,241, 85,201, 39,151, 51, 38,135,123, 28, 29,236,144, 38, 14,233, 13,174, 14,197,183,
-169, 91,118,247, 82,100,162,185,156,149, 44, 11,195,124,209,176, 90,121,148,116,156,157, 94, 49,155,206,112, 82,112,239,149, 87,
-137,147, 60, 24,191,212, 77,103,218, 35,193,193,217,217, 57,251,187,251,129, 8, 38,163, 53,161,203,121,143, 84,221,138, 68, 10,
-146, 52,197, 58, 71, 81, 20, 20,101,133,146, 14,165,130, 10, 97,255, 96,194,141,131, 17,194,215,196,202,146, 37, 10,233, 3,188,
-217, 24, 67,150, 5, 27,226, 40, 82,184, 62,235,221,121,156, 13,111,211,197, 98, 30, 10, 25, 17,173,151,140, 38, 59,140,242,156,
- 60, 75,104,219, 38, 52,205,206,113,114,122,198, 7,159, 60,230,227,103, 39,172, 42,139, 84, 17,139,233, 37,119,143,246,152,228,
- 9,186, 75,176,146, 82,109,246,234, 29,105, 78, 72,113, 77,122,219, 23,253,254,125,216,195,242,189,131,228,134,104, 23, 2, 52,
-100,151,158,230, 1,209,105,201, 3,209,174,103,208,247,198, 52,172,237, 93,251,251,171,222,221, 78,200,141,193,205,218,159, 62,
-236,224,133,220,216,191, 34,229,122, 24, 90,219, 41, 75,177, 97, 65,119, 13, 10,170,187,111, 71,234,107,234,154,229,213,140, 44,
- 73, 41,203,138, 36, 77, 3, 91, 95, 74,210, 36, 99,114,112,192,167, 31, 61,194,182, 22,124,196, 98, 97,120,244,201, 51, 30,125,
-252, 9,109, 85,161,188,228,211,143, 79,248,238,159,127,196,215,126,233, 87,208,113, 74, 93,148, 12, 6, 25,170,115, 37, 59,187,
-184,100, 52, 24,144,166,225, 53,204, 99, 69, 84, 94, 33, 77, 73,182,179,195,222,222, 62,109,211, 82,108, 77,236, 61,175, 96,144,
- 15, 40,203,154,198, 24,156,247, 76,167, 83, 22,139, 69,231,215,177,226,244,114,198,162,168,152, 47, 11,148,210, 44,231, 75,210,
- 44,231,147, 39, 1,233,201,146,152, 65, 26, 35,156,101, 50, 26,144,101, 57,249, 96,200,238,206,132,157, 76, 48, 76, 20,187,227,
- 33, 7,251, 59, 60,121,118,194,162,108,240,196, 93,193, 19,235, 90, 30, 86,139,190, 27, 70,195, 0,115,122,114,202,195, 87, 95,
-229,205,215, 31, 50,189, 60,229,244,228, 41, 89,170,137,162, 4,169, 52, 77,109,209, 58,230,224, 96,159,229, 98, 70, 89,172,214,
-138,134,126, 54,236,253, 51,172,237, 76,102,140,233, 36,124,110, 29,205,218, 79,224, 61,129,178, 47,216,155, 85, 99,255,120,242,
-185,113,124, 11,250, 94,175, 23, 58,187,224,174,217,236,149, 74, 97, 66,239,208,225,126, 50,143, 59,219,228,174, 6, 69, 74,110,
- 36,109,127, 89,233,216,231, 69,175,254, 34,137,108,219,240,254, 95, 36, 22,213,255,130,236,247, 95,188, 29,248,249,125,198,243,
- 13, 77,150,101, 72, 41, 41,203, 37,163,193, 14, 96,169,170,146,209, 48, 9,161, 39, 70,160,181,166,105, 27, 90,211, 34,243, 12,
-161, 99,116,156, 98,205,156, 68, 75,166,151,207, 88, 46,207, 57,216,223, 71,170,140,182, 81, 20,171, 25,153, 16,220,186,243, 42,
-109,179, 36, 25,120,222,120,243, 75,156, 79, 45,229,170,232,118, 61,253,133, 33,187,195,214,227, 4,215,248, 13, 82,244,126,217,
-161, 11,220,112,144,196,218, 34,215,251,206, 86, 87,136, 64, 58,234, 67, 44, 58,153,154,220, 34,126,244, 23,241,122, 47, 37,122,
-107,206,254,107,106,253,184, 27, 22,252, 6,218,239,191,207, 57,143, 49,158, 6,131,244, 62,216, 71,122, 79, 26, 37,220, 60, 60,
-100, 57,187, 34,114, 57,167,207, 30,243,224,214,109,138,249, 21, 63,248,209,247,241,222,176,127, 52,100, 49,109,168,219, 26, 33,
- 36,147, 46,246,178,150,142, 10, 48,210,227,145,108, 98,223,183,152,172, 91,116,194,126, 81,100,133,167,192,227, 90, 67,174, 34,
-218,233,130,131,253, 67, 46,139, 21, 31, 60, 57, 97,127,144,115,255,246, 77,134,121, 66, 49,191,224,170,178, 12, 70,187,180,118,
-197,157,125,193, 32, 83,184, 83,195,167, 21,156,175, 12,255,250,199,143,120,117, 55,227,245,163, 29, 84,234,137, 92,137,173, 44,
-137, 4, 83,183,148,117, 75, 28,199, 12, 82, 69,154,198, 12, 6, 57, 66, 73,210, 60, 99, 48, 24, 98,132,101,182, 88,160, 84, 72,
-120, 18, 30,164, 8,123, 75, 33, 60,105,154,208, 84,213,186,144, 69, 58, 66,106, 21,156, 7,173, 9,154,106,225, 89, 44,230,157,
-209,143, 38,203, 98,138,217, 28, 33, 60,123,147, 28,169, 21, 10,139,136, 36,117, 89, 82, 44, 83,166, 40,188,240, 52,214, 48, 30,
-237, 83, 87, 37,105, 18, 81,139, 64,164, 44,138,146, 36,202,104,186, 16, 24,215, 57,113, 41, 9, 90, 4,217,152, 86,193, 17, 80,
-197,154,162, 88,241,241,147,167,252,249,207, 62,226,228, 98, 78, 58,156,160, 59, 88,251,211,147, 51,110,238,189,134,246,144, 2,
-198, 89, 4, 10,213, 21,112,107,109,135, 50,200, 46, 87, 32, 88,186,186,174, 97,145, 34,234, 98, 82, 85,183, 46,114, 93,184, 87,
- 55, 89,119,205, 66,104,230, 85,215, 16,136,117,178,155,186, 70, 80,242, 91,228,225,235, 7, 85, 47, 73,235,215, 3,235,207,165,
-236, 52,240, 93,172,106,111,155,172,228, 90,246, 41,232,201,126, 97, 42,239,211, 12, 69,159,207,238,109,112,153, 20, 2,157,198,
-104, 99,104,170, 6,128,166,110,185,115,255, 62,197,108,129,148, 1, 97, 88,213, 13,195,241, 8,173, 35, 30,127,114,204,222,110,
-198, 56, 77,249,233, 15,223, 39,209, 57,182,110, 24,236,236, 83, 10,168,234, 10,111, 13,168,208,136, 15, 70, 67,202,114,202, 96,
-178, 75, 93, 87,232,189, 4,239, 13,151,151,151, 72,169, 24, 15, 71,236,239,239,119, 41,130,102, 61, 16,149,101,201,238,222, 30,
- 23, 87,151, 24,235, 80, 81,140, 20, 4,115,159,198,146,101, 41,205,249, 21,198, 89, 26,107, 65, 68,252,244,167, 31, 49,222, 31,
-243,250, 27,183,144,190,166,105, 42, 90, 87, 51,159,207,145, 82,179,183,223, 32, 5, 12, 6, 49,119,212, 4,173, 32,146,142, 72,
-252, 38,255,247,127,249,239,248,240,116, 70,233,195,107, 29, 38, 89,123,109,106,119, 29,161,206, 11,207,127,251, 79,255, 9, 95,
-255,202,151,248,229, 95,253, 53, 62,120,239,199, 20,149, 97, 55, 19,172, 86, 75,146, 76,208, 52, 21, 85, 85,240,240,225, 67, 78,
- 79,159,134,148, 60,194,115,239,187, 29,125,112,147, 13,200,109, 47, 35,179,107, 73, 89, 71,196, 92,251, 34,116,106, 30, 28,194,
-201,205,235,127, 77,250,214,101, 97,172,125, 59,122,172,161, 27, 42,122,214,123,247,239,174,141, 92,123, 27,244, 10, 16,221, 25,
-113, 73,217, 5, 16,123,241,217, 73,253,250, 78, 93,188,208, 6,246, 69, 12,118, 33, 94,126,223, 23,147,240, 94,190,123,223,232,
-247, 94,180,207,223,182,178,245, 47, 44,234, 47,139,125,221,206, 63,126, 81, 59,176,113,149,219, 4,186, 24,227,104,140,237,118,
-234,225, 77, 25, 69, 17, 73, 28,135, 73,189,155, 54,183, 39,117, 16,215, 67, 98,188,229,226,226, 28,103,234, 46,240, 33,194, 9,
- 73, 54, 24,210, 90,139, 55,130,229,170,198, 58, 72,211,132,189,189, 29,156,113,204,103, 43,156, 49, 28, 30,222,232, 88,198, 57,
-120,197,173,155,247,185,184, 88, 50,159,150,124,245, 43, 95,230,232,104,143, 56, 22, 60,120,240, 10,251,251,183,168,154,208,186,
- 90, 23,236, 70,151,139, 25,243,213, 2,219, 17,206,100,207,210, 84,226, 58,251,178,131,119, 2,228, 30, 72,184, 27,248,189,251,
- 92, 9,226, 72,160, 35,129,238,160,248, 13,116,174, 58, 72, 94, 6, 70,171,222,124,174,181, 90,195,245,122,107,103,174, 35,217,
-133,147,116, 80,126, 47, 19,140, 58,146, 72, 96,234,117,217,201, 65, 26,118,184,187,203,193,206,152,213,108, 74, 91,149,232, 72,
- 82, 21, 43,206,159, 62,229,241,167, 39,120, 37,152,215,150,171, 69, 67,227, 33, 79, 83,110,103, 9, 30, 75,233, 60,133, 3, 35,
- 4,206, 75, 4,221,129, 44,197, 90,110,178, 33,116,208, 65,124, 42,120, 62, 11,104,133,160,116, 14, 39, 5,141,115, 28,221,187,
-205,213,124, 78, 89, 86,228,131, 12,180, 96, 48,158,112,113, 53,103,144, 12, 24, 36, 3, 80, 13,135, 7, 67, 82, 4,170,134,178,
- 53, 84, 30, 46, 11,203,179,171, 2,161,130, 4, 74,105,129, 23, 30,231, 64, 43,141,173, 90, 48, 22,225, 61, 69,177,164,172, 86,
- 88,223,178,172, 22, 44, 86, 11,156,179,116, 52, 66,164,240, 44,230, 87,148,229, 2,227, 90,140,173, 81,194,227,109,141,146,142,
-178, 92,208, 52,101,240, 63,183,129,113,108,141, 9, 28,146, 78, 58,228,157, 69, 11, 21, 98, 67,141,167, 92, 21,172,230, 43,138,
-101,133,105, 44,137,214,100,121, 70,156, 68,221,110, 47,102,181, 12,147,141,245,134, 52, 77, 72,147, 44, 76, 52, 54,120,233,123,
- 33, 25, 12, 39,120, 20, 89,158,133,251, 58, 71, 89,213, 56, 20,211,101,193,191,249,131, 63,228,124, 94,224,164, 38, 78, 51,170,
-186, 66, 71, 18,211,212,220, 60,186, 73,172, 4,105, 28, 93, 35, 94,110, 27,205, 8, 37,215, 40,139,144, 98, 61,197,247,178,164,
-245, 68, 45, 55,251,240, 72,235,110, 39,222, 77,227, 29, 74, 21,166,172,160,113,143,186,199, 9,239,145,237,159,191, 77,198,219,
-178,216, 22, 98, 75,108, 21,236,147, 67, 40,226,150, 4, 84,201,181, 33,231, 38,178,186,155,137,122,187, 90,252, 90, 85, 2, 96,
-234,134,166,170,104,155, 6,103, 60, 85, 85,225,188, 39, 31, 14, 24, 76,118,184, 60, 63, 91,159,105, 42, 82,196,105,198,159,124,
-255,207,105, 91,195, 95,255, 15,126,137,193, 32, 67,107,197,178,178,188,242,198,219,236,221, 56, 2, 33,104,154,154,209,112,208,
-253, 30,125,184,146, 39,138, 19, 18, 5, 95,121,245,136,221, 97, 66, 60,154, 48, 26,141, 72,146, 4,231,108,176,135,117,225,156,
- 76,210,132, 56, 78,214, 62, 2,190,243, 21,216,158, 32,173,247, 68, 58,102,190, 92,118,215, 85,201,147,199, 79,121,245,213,215,
-217,217, 25, 50, 26,196,216,182, 34, 86,132,189,190,142,137,227, 20,157, 36,196, 89, 26,166, 82, 21, 38,246, 97, 18,115, 99, 50,
-102,113,126,193,229,114,137, 17, 33,208,197,111,177,224,221, 86, 38, 59, 8,230,243, 25,247,239,223,227,245,135,175,114,113,118,
-198,114,190,192, 54, 53,131, 65,142,247,130, 56, 13,202,132,253,131, 3,158, 61, 59,166,174,106,132,183, 93, 77,112,157,227, 92,
-128,219,173,181, 97,213,177,150,150,109,138,180,184,230,200, 41,186,179, 51, 12, 76,194,135, 72,171,237,198,111,123, 15,188,217,
-177,247,141,227,117,226,151,128,117, 96, 81,212, 21,244,168,147, 83,171,206,173,175,103,195,191, 20,126,223, 38,202,189, 28, 78,
-231, 11, 23,234,107, 63,227,231,232,223,123,226,202,139,153,245, 98, 93, 52, 95, 56,169, 11,126,174, 77,236,243, 83,123,111, 14,
-240, 60, 81,110,147,212,102, 2,251,189, 51,172,233,119,234,113,172,215, 58,245,235, 69,253,122,140,163,119,142,166, 46, 40, 87,
- 11, 76,219,146,164, 3,134,147, 93, 90, 15,117, 99,104,107,240,196,164,217,136,180,115,153, 59,216, 59,192, 26, 65,156, 12,184,
-121,251, 30, 73, 58,164, 42, 27,210, 56, 67, 71, 49, 31,124,240, 33, 69, 81,243,202, 43,247, 25,141, 19,238,222, 61, 34, 77, 70,
-193, 70,180, 40, 64,118, 46,114,109,205,124,126,197,213,124,134,239, 73, 44,162, 47,210,172, 25,158, 61,219,178,255,183,146,116,
- 23,230,214,126, 72,110,164, 24,129,165,185,197,242,236, 97, 71,169, 66,177, 87, 91,123,119,181,217,191, 71, 29, 99, 55,138,250,
-239,103, 35,249, 80, 1,242,143,162,240,245,190,251, 12, 94,202,208,122,193,100, 52, 65, 1,139,203, 11,202,229,140, 44,137,240,
-166,229,236,228, 41,243,203, 41,139, 85,201, 89,105, 56, 89, 90,148, 23, 40, 31,138, 94,166, 34,166, 85, 67,131,192, 0,134,158,
-215,225,215, 74,128,151,129, 48,253,212,238, 36, 88,225,177,128,145,176,108,106,156, 51, 28,238, 12,105,203,138,229,114, 69,150,
-107,118,247,119, 40,202, 18, 97, 20,203,105,197,248,112,130,243, 5, 67,229, 25, 9, 9,141,193,120,207,194, 43, 26, 39,185, 90,
-213, 76,203, 6,226, 24,149, 38,120, 25, 19,197, 67,172,241, 44, 22, 13, 77,109, 2, 59, 91,121, 60, 6, 99, 27,164, 80, 52, 69,
- 77,177, 88,177,156,205, 40,150, 11,218,182, 10, 50, 73, 83,211, 26,131,242, 30, 83,215, 44,103, 51,202,213,138,186, 42,105,170,
-154,213, 98,133, 20, 18, 37,161,173,235, 16,207,187, 92,134,130,107, 28,179, 89, 69, 85, 25,146, 36,172, 65,156,181, 68,145,194,
-122, 24,140,242,192,187,136, 4, 82, 40,164,140,152,207,103, 24,103,136, 99,205,100,180, 67, 83, 7, 57,157,117, 6,144, 36,201,
- 0,165,131,212, 75, 69, 33, 94,178,108, 13,151,203,130,127,252,255,248, 39, 44,107,131,210,113, 96, 97, 75, 73,146,164,120,103,
-105,155, 22,132,228,254,237, 27,196,194, 6,194,153,138,214, 41,107,125,184,139,236,174,195, 0, 73,234, 77, 52,235, 11,224,119,
-239,253,250,190, 98,171,240,211,187,187,173,253, 51,228,150,118, 93,117, 59,211, 45,232,116, 27, 70,237, 11,122, 47, 57,146, 91,
- 60,159,109,134,253, 26,126, 15,197,194, 91, 27,110,158,181,195,220, 6,249,220, 56, 85, 90,235, 16,214, 17, 9,137, 49, 14, 25,
-105,178,209,136, 56,205, 72,178, 12,235, 28, 85, 29,144,145,193, 48,200, 11,223,122,227, 21,254,202,111,188,195, 91,111, 61,228,
-246,157,219, 32, 20,139,162, 97,184,179,199,104,111,159,214, 89,134,131, 1,182,109,113,214, 19,199, 1, 77,212, 90, 32, 34,141,
-111, 43,190,250,224, 6, 90, 88,230,125, 70,120, 29,162, 64, 71,227, 17,163,221, 29,146, 52, 13, 67,137,119, 84,117, 69,221, 54,
- 33,202,119, 48, 8, 73,109, 90, 17, 71, 81, 72, 32,140, 53, 66,107,230,211, 25,171,249,138,170, 44,113,214,114,116,107,143, 36,
- 17,100,113,216, 13,143, 6,121,119,142, 10,246, 15,143,152, 21, 21,147,157, 29,164, 15,182,193,121, 18, 49, 78, 52, 55, 70, 49,
-103,103, 23, 76, 87, 21,109,103,142,217, 35,146,193, 90, 54,164, 30,122, 66, 19, 57,159,205,248, 43,191,254,235,236, 78,118,248,
-211, 63,253, 83, 38,195,148, 52,209, 68,145, 6, 33, 25, 12,135,161, 57,145,154,213, 98,138, 86, 46,156,137, 91,210, 50, 37,195,
-234,210,173,147, 43, 55,254, 29,120,223, 69, 19, 75, 18,173, 73,147,152, 44, 13,171,133, 36,214,235, 53,101, 18,199,235,218, 17,
-190,166,137,147, 40,220, 71,107, 98, 29,135, 33, 81,111,166,112,181,182,237,238,206,234,109,191,134,238, 28, 70,108,154, 72,245,
-181, 55,238,252,163,237,240,142,235,201,107,226,223, 91, 81,255,108,179,240,121,137,108,254, 11,233,207,191,232,164,254, 69, 18,
-224,124,231, 63, 78, 47,105,187, 86,212,131,164,205,190,180,168,235,206,124, 70,109,180,218,126, 99,161, 26, 32,170, 37,197,114,
-134, 53,142,170, 6, 71, 20,220,179,100,140,105, 5,117, 11, 42,210, 24,107,217,219,221, 99,152,143, 80, 50,165, 50, 30, 84,140,
-115, 1, 42, 30,142,114,210, 76,210,154, 5, 71, 55, 15,201,146, 9,210, 43, 38,195, 93, 46,206, 47,130, 53,104,101,184,113,116,
-135,203,217, 28,124,203,114,113,197,170, 44,176,221, 14, 74,138,142, 1,223, 65,221,253,197, 43,183, 58, 75,185, 38,110,200, 13,
- 99,179, 99, 13,175,239,187, 53,201, 92, 43,250, 91, 59,250,232, 57,137,135,236, 80,129,117,243,176, 70, 11,250,199, 13, 69,189,
-135,233,251, 55, 77,211, 52,164,249, 14,222, 56,154, 98,197,163,247,127,198,238,100,200,199, 31,189,207,217,233, 51,234,170,228,
-228,233, 5,113, 62,228,227, 69,205,210,121,134, 82,147,248,160, 64, 88, 24, 67, 37,160, 21,146,186,151, 48, 10,143, 23,238,243,
-215, 70,253,250,161, 31,222,125,152, 6,113,221, 10,162,106, 72,140,225, 27,111,190, 66, 53,159, 83, 86, 37,137, 86,236,141, 39,
-156,157,156, 49, 30,143,136,227,132, 97, 62, 66,120,131,181, 43, 6,169, 68, 59, 71,217, 58,140, 3,135,166,176,150,243,178,230,
-108,217,114, 85, 26,158, 76, 75,150, 22, 84,150, 5, 91, 82,231,200, 19,141, 22, 2, 87,183,148,133, 5, 43, 41,151, 21,171,121,
- 65, 93, 53, 33, 93, 76,202,160,117,246,130,186,172, 89, 94,206, 88,205,150, 84,203,138,170,172, 41, 87, 85, 88,205, 88,131,240,
-142,213,114,201,106,185, 36, 79,147,142,223,144, 48, 24,164,120, 90,100,231,220, 37,149,196, 57, 65, 89, 89,198,147, 1, 89,170,
-145,157, 36, 80,201,136,198,154,192,191,144,162, 91, 7,164,120, 92,167, 92, 80, 32, 34,116,156,162,162, 8,143,164,106, 90, 42,
-227,249,189,127,247, 93,222,253,240, 99,140, 15,236, 96,211, 6, 27,214, 88,107,218,214, 32,101, 68, 81, 55, 60,188,123,196,120,
- 16,161,132, 92, 23,237, 72,117,140,223, 40, 90, 75,222,122, 72,114,219,113, 46,138,116,103,204,210,249,190, 71,113, 88, 87,116,
-147,105, 88, 5,109, 79,221,126, 51,145,119, 19,251,102,231, 46, 55, 72, 78,103,122,211,189, 89, 58,214,181,216,144,158,164,186,
- 38,165,245,130,245,190, 21,239,176,109,139,183,174,115,167,237, 88,246, 29, 33, 88,116, 86,168,222,134, 16, 35,219,180,212,171,
- 18,211, 26, 16,146,124, 56,162,237,214, 23,113,150,145,164, 9, 73,150, 81, 20, 43,218,166, 14,182,179, 29, 58,230,132, 69,233,
- 4,165, 83, 22,139, 10, 84,194,193,157,187, 44,171,154, 72, 41,156, 9, 73,111, 30, 69,235, 12, 69,177, 12, 49,205, 77,201,151,
-239, 29,176, 55, 74, 25,239, 31,132,248,230, 52, 93, 15, 42,171,229, 18, 41, 4,105,150,145,231, 57,249,206,152,193,104,136,177,
-109,144, 85, 90,195,116,122, 21,164,111,132,220,111,169, 53, 82, 72,180, 16, 68, 66, 50,155, 94,113,231,222, 13,242,129, 38,142,
- 4,206,212,104, 29,118,244,222, 11,134,163, 17,197,170, 64, 9,193,104, 50, 92,203, 13,181,130,131,157, 33,135,131,148,147,227,
- 83,206, 86, 13, 70, 0, 62,234,106,150,223,210,175, 7, 40,123, 54,155,114,239,246, 93,190,250,165,175,240,244,241, 19,102,231,
- 79, 72,226, 64,132, 12,205,234, 24,239, 5, 7, 7, 7, 44,103, 83, 98,229,136, 59, 2,112,239, 67, 18, 69, 29,177, 18,137, 19,
-162,155,220,123,219,216,112,189,103,137, 38, 79,117,200, 74,207, 50,134, 89, 74,158,167, 12,178,148, 44, 77, 72,179,152,180, 43,
-246, 89,150,132, 91,247,239, 60,217,106, 2,180, 70,119, 63, 79,178,221, 60,116,151,153,236, 24,246, 93,237,246, 93,163,105,189,
- 11, 59,245, 23,249,183,255,251,180,109,253, 76, 17,126,206, 26,246,179,197,217, 93, 91, 84,191,200, 74,246,243,246,237, 47,179,
-182,253,188, 44,245,107,237,196,150,117,223, 47,180, 90,127,193,186, 65,118,221,121,154, 13,136,227,140,186,108, 67, 32, 70,212,
- 34,164,198, 52,142,157,201, 62, 66, 85, 44,139,146,157,221, 49, 58,138, 65,104,170,122,133, 65,242,225,199, 79, 25,164, 17, 89,
-236,241,110,137, 16, 3,178,161,231,193,221, 27, 80,167, 44,151,176, 88, 8,134,163, 29, 46,167,167,212,149,229,236,120,198, 98,
-118, 73,158,245, 90, 86,215,217,101,138,142, 61, 42,131,223,250,115,174, 70,235,110,164, 35,138,136, 53,138,209, 65,212,242,229,
- 90,255,235, 22,194,215,205, 32,174, 57,209, 93, 11,124,225, 57,169, 97,120,147,172,191,151, 0,229,230,249, 0,131, 70,196,138,
-103,143, 62,228,232, 96, 31,233, 93,103,168,114,202,124, 90,178, 90, 89,202,133,161,180, 14,131, 32,209, 9, 67, 41,185, 50, 13,
- 75, 1, 13,146,198, 7,120,174,239,230,123,133, 76, 80, 62,189,120, 53,227,164, 71,248, 16, 89, 27, 9, 80, 14,146, 72,113,235,
-112,143,175,191,122,155, 47,191,114,159, 27,187,187,188,127,231,136,223,253,189,239, 80, 92,206,160,108, 57,186,181,139,142,225,
-241,163, 51,238,222, 60, 34, 29,239, 16, 31, 90,226,178,101,148,165,232,203,138,143,206, 27, 46,140,101,129,192, 18,216,247,171,
- 38, 76,149,103,101, 75, 94, 54,220, 27, 15, 80, 74,211, 24,137,240,193,207,189,108, 91, 34, 21, 14,253,166,241, 36, 14,242, 97,
- 66,150,140,113, 2,150,197,146,229,229, 12, 87, 26, 76, 21,252, 5,134,163, 8,148, 67,106,201,106,182,100,126, 57, 71,134,161,
-136,170, 40,177, 86,146, 13,146, 80,124,157, 37, 73, 36,214, 58,188,133,214, 4,111,239,217,116, 65,154, 0, 62, 33,213, 80, 20,
-117,128, 47,163, 64, 18, 91, 46, 23,228,233,168,123, 62, 55, 19,176,119,225, 61,221,180,150, 85,213,114,190, 88,241,231, 63,125,
- 23,165, 19,106, 99, 72,117,152,112, 80,193,206, 84, 72,137, 74, 18, 22,101,205, 79,222,255,144,155,191,252, 38, 82, 71,221,164,
- 18,109,236, 55, 5,200, 40, 48,171,123, 28, 83, 74,185,190,194,164, 80,107, 89,154, 68,173,127, 23,219,187,153,245,122,206,206,
-124,219, 58,177,182,152, 21,235,216, 84,183, 33, 13,111, 37, 56, 95, 31,128, 54,123,208, 94,133,115,205,157,179,135,226,187,201,
-182,143, 63,238, 35, 13,189,181,235, 68, 54,225, 67, 35,133, 11,129, 34, 74, 40,154,170,238, 60, 35, 4,113,102,105, 76, 75, 22,
-141, 66,163, 33, 33, 27, 13,184,157,189, 66, 57, 91, 80, 45, 11, 34, 29,209,182, 21, 85, 45,104,188,192,203,136, 52,141, 57, 95,
- 45, 88, 45,151,236,238,238,129, 53, 84,214,128,147,196,217,128,243,171,115,146, 36, 93,175, 19, 86,101,197, 66,128,107,131,199,
-123,164, 53, 59,187,187, 56,107,169,234, 26,169, 36,199,207,158,145,164, 9,105, 26,147, 13,114,118,118,199,200,104, 31,211,182,
-232, 72,210, 84, 53,210, 0,109, 67,177,152,225,108,141, 84,158,209, 40,101, 60,202,195,107, 97, 45, 58,137,104, 10, 75, 81, 20,
-196, 81,204,104,156,224,141, 97, 24, 71, 44,230, 87, 12, 6, 9,201,112,132, 21,130, 49,129, 80,252, 87,223, 9,147,248,213, 63,
-251,183,188,123, 85, 98,187,213, 34,120,108,119,238,132,233,213, 83,181, 13,255,228,191,251,103,124,243, 43,239,240,237,111,255,
- 53,254,175,255,231, 63,101, 52, 26, 32, 84,132,169, 91, 22,243, 25, 90,167, 32, 20,247, 31, 60, 96,117,169,112,182,197,117,233,
-109,198,134,204,246,162,168, 17, 85, 13,117,219,177,223, 93,231, 36, 39, 58, 94, 74,194, 40, 75, 25, 14, 7, 12,242, 60, 32, 22,
- 81, 88,171, 4,141,187, 95,219,203,186, 46,196,106,157,242,215,203,229, 58,100,184,105, 26,138,178,164,138, 2, 82,212,182,110,
-147, 0,103,196,218, 89,207,246, 10,144, 46,211, 32, 10,184, 69,119, 82,247, 31,187,176, 15,255, 28, 12,254,178, 80,151,237, 41,
-253, 69, 59,244, 23, 21,112,215,127,191,247,207,177,233, 61, 10,217, 29,246, 27,226,193,245, 2,240,242,130, 43,253,117, 1,250,
-243,141,128, 23, 47, 46,252,189,127,238,181,157,120,160, 55,172, 53, 18,215, 27,137, 77,119,191,230, 31,248,231, 67, 1,187, 92,
- 52,233, 72,243, 28,165,115, 68, 84, 49, 26, 4, 95,232,214, 57, 20, 10, 99,194,139,147,196, 17,229,114, 69, 51,217,101,229, 74,
-100, 20,113,180, 55,230,201,227, 39,120, 99, 41,234, 21,220, 72,192, 90, 98,169,153, 62,187,224, 96,148,147,140, 71, 44, 76,197,
- 64, 75,116,154,226, 23,103,192, 5,162, 58, 3, 57, 96,181, 92, 97,141, 71, 70, 97,218,183, 42, 92,252, 17, 91,246,184, 46,120,
- 92, 7,217, 94, 32, 67, 9, 1,194,129,144,221,107,228, 29,253, 96, 27, 26,150, 30,170,116, 72, 25, 24,162, 82, 8,112,129,108,
-231, 44,221,222, 62, 60,134, 20, 30,229,192, 11,187,158,134,214,175, 67, 39, 5,233,137,124, 65,250, 35, 49, 86, 32,163, 1, 55,
- 14,111,241,147, 31,255,148,163,253, 29,246, 39, 41,174, 46,120,242,201, 19, 76, 93, 49,159,149,184, 70, 32, 99,205, 85,217, 34,
-128, 55,246,198,136, 69, 73,107, 60,158,136,185,107,215, 57,205,107, 83,170,245,235,221, 59,144, 57,188,112, 29, 33,185, 47, 26,
- 10,132, 15, 16,190,128,123,147,140,111,189,113,159,119,222,120,149, 27,187,227, 32,129,241, 6,229,167,188,243,230, 33,131,252,
- 87,249,215,223,253, 49,103,211, 2, 61, 76,240, 10,246,239,222,231,221,247, 63, 69,137,154,175,127,237, 30,122, 92,227,210,146,
-175, 14, 18,142, 38, 21,239, 63, 91,240,116, 5, 23, 22, 26,239, 49,194,118, 90, 39,199,194,194,123,211, 2, 45, 4,105, 36,200,
- 19, 69,170, 51,118, 85, 8, 14,169,155, 22,231, 36, 67, 3, 3,167, 48,101, 69,219, 56, 22, 87, 37,203,185,193, 89, 71, 28, 69,
- 32, 45,174, 67, 74,234,170,133, 38,164, 63,201, 36,162,114, 6, 29, 7, 79,148, 98, 86,134,164,168,214,145, 15, 50, 86,109, 73,
-154,107,242, 97,152,214,151,203,130,189,189, 49,158, 24, 39, 20,101, 83, 4,251, 83,165,214,141, 79,181, 92, 17,235, 20,161, 98,
-132,148, 56,223,144,167, 57,202, 75, 86,181,226,227, 89,193,127,246, 95,255,183,140, 4,248,182,162,168, 43, 6,233, 17, 74, 43,
-150,171,130,225, 56,101, 56, 24, 80,215, 53,249,104,200,251,207, 46,121,120, 81,240,214,221, 61,116, 20, 8,104, 50,138,131, 79,
- 11, 97, 53,161, 58,233, 87, 39, 74,223,242,189,160,211,148,111,229, 28,116,230, 30, 30,143, 13,139,152,245,245,168, 59, 29,126,
- 79,150, 12, 38, 52, 98,235,204,146, 32,251,218,238, 63, 67,150,245,190, 35,196,121,186,120,225,112,177,245,208,104,136,250, 36,
-144,248,250,130, 64,167,149, 18, 29, 33,202, 6,217,148, 80, 10, 99,195, 85,107,172, 35,137, 98,180, 80,172,102,115,162, 52, 65,
- 43,181,241,161, 39,172,177,146, 52, 65, 39, 49,222, 24,218, 89,139,214, 57,117, 91,179,179, 51, 97, 60,202,120,116,118,140, 83,
- 17,173, 11,153,230,216, 10,163,131,127,254,206,104,128,115, 26, 91, 89, 82,173, 57, 43, 10,234,170,101,160, 75,146, 44,167,170,
-106,242,225,128, 85, 85,146, 36, 41,163,241,136,187,175,188,130,177, 45,243,171, 43,102,207, 78, 16, 34, 88,193,142,198, 99, 70,
- 59,123, 8,239,152,205,166,140, 35,133,111,198, 84,139,130,103, 10,106, 41, 65, 68, 88, 31, 81, 55, 21,122,144,211, 58, 79, 91,
- 54,228,106, 78,178,179,139, 23, 10,167,192,182,142,101, 81, 33,149,102,144,229, 36,120, 42,233, 73,148,226,219,226, 45,202, 98,
-197,255,225,159,125,135, 39,181,193, 19, 3, 10, 41,236,230, 28,239,182,182,143, 30,127,194, 31,124,247,143,248,157,191,254, 55,
-184,251,202, 87,184,188,248,152, 27,169,100,119,119,159,106,185,160, 25,236, 97, 76,176,202, 29,169, 91, 56, 51,195,183, 21,214,
- 6, 84,109, 89,183, 68, 17, 40,233,145,222,225,173,166,109, 67, 82,102,164, 36, 89,162, 24,100, 49,227,241,144,241,104,192,120,
-152,175,157,246, 88,175,127, 68, 40,238, 91,231,110,127, 51, 46,240,105,172,181,212, 77, 67,209,161, 41, 66,214,225,108,165,164,
- 49,225,122,108,109,200, 87,112,141, 65, 43,133, 48,110,237,230,167,190,254,198,198, 81,238, 69,240,250,139, 12,102, 54,112,189,
-255, 92,146,220,207,131,193, 63, 15,241,252,121,246,179,127,209, 9,154,151,248,213,251, 13, 94, 30, 66, 70,186,232,213,222,120,
-166,237,188,223, 63, 11,191,135,253, 71,188, 5,251, 93, 67, 1,156,199,121,139,247,146,139,243, 75,138,178, 8,251,158, 40,200,
- 94,234,218,178,170, 12,198,181,100,121,202,206,206,152, 68,107, 76,219,146, 37, 49,113, 20, 49,189,188, 34,142, 4,216,138, 65,
-174,144,222,226, 90, 56, 59, 89,112,117,213,112,243,193, 67, 86,101,141,105, 27,164, 16,204,166, 51, 22,203, 5,117, 85,114,126,
-121, 65, 99, 61, 6,137,113,116,242,155, 16, 80, 33, 59,200, 80, 74,185,153, 82,253, 38,213,202, 95,179,135,117,207, 57,244,185,
-107,107,139,107,100,196,160,240,236,186, 82,191, 54,106,112, 29,227,211,246, 18, 17, 31, 90, 38,199,115,174,117,189, 35,159, 21,
- 88, 43,200,210, 17,166,181,156,158,156, 96,154,130,203,243, 99, 30,127,252, 33, 39,199,207,152, 47,106,206, 46,106,132, 21, 40,
-161,168,187, 1, 92,227,104, 90,195, 10,207,212, 57, 42, 33, 94,218, 10, 74, 31,138,118, 39, 26,238,250,223,110,157,128,101, 32,
- 60,175,223,220,227, 63,252,173,111,241,119,191,253, 75,188,117,231,144,161,242,200,182, 4,111,131,231,181, 7,103, 28, 59, 59,
-123, 60,124,237, 21,202,114,206,244, 98, 69, 83, 73,226, 76,178,179, 63,224,217,217, 57,109, 43, 56,186,121, 19,161, 12,222,213,
- 56,215,146, 15, 98,242, 84, 99, 26, 67,219,134,215,196, 57,133,240, 9, 30,129, 21, 22,131,163,114,142,162, 53, 44, 74,195,172,
-106, 89, 89, 71, 41, 21,141,138, 40,156,167, 17, 18,163, 52, 87,101,205,229,170,102, 94, 57,226,124,136,113, 4, 91,217,186,233,
- 26,227,136,114, 97,144, 22,234,218,209, 52, 80,149,142, 68,128,183,129, 60, 24,117,123,186,214, 90,150,149,197, 19,194, 87,202,
-162, 37,137, 37, 89,150, 32, 4,152,182, 97, 54,155,177,191,179,135,183,134, 97,158,163, 85, 68,211,180, 32, 4,249, 96,200,170,
- 40,216,217, 61, 0, 4, 79,159, 29,243,127,252, 63,253,167,188,251,254,199,140,119,119, 73,179,132,209, 48,167,109, 61, 58, 78,
-200, 7, 3,154,182,237,154, 75,168,170, 26, 21,197,204,166, 87,188,253,218,125,146, 40, 88,121,170, 72,175, 9,150, 74,199,107,
-130,154,120,126, 29,180, 37, 43, 90,239,215,183,228,112,162,131,197,165,220,184, 29,174,207, 7,185,165,248,232, 36,102,162,111,
- 70,197, 70,119,124,221, 53,132,235,182,201,235,253,252, 86, 56, 84, 7,185,111, 95,143, 82,201,117,155,176,150,208,245, 9,110,
- 81,212,145, 26,131,193, 73,164, 53,198, 89,144,130,108, 56, 88,191,247,164, 82,172, 86, 43, 78,159, 29, 35,133,100, 60, 26, 19,
- 39, 25, 69, 89, 49,155, 45,184,186,154,113, 54, 45,240,233,132,253,163,219,180, 85,129,169,235,144,190,151,166, 72, 41, 89, 46,
-171, 64,128,139, 61, 55, 15,198,236, 14,115, 50, 25,145,229, 41, 73,158,226,241,232, 56, 34, 73, 98,156,119,204,166, 83,148, 20,
-140,199, 99, 38, 7, 7, 8, 88, 59,206, 77, 47, 47, 89,204,231, 56, 28,227,193,144, 60,205,137,210,140,101, 85, 7,111,130,179,
- 75,178,113,198, 32, 19,100, 17, 20,117,203,106,177, 96, 24, 43, 38,147, 29,178,201, 1,214,219, 78, 19,223,224,189, 39, 75, 19,
- 86,171, 37,249, 32, 71,120, 79, 20, 75, 14,111, 28, 32,154,134,159,126,116, 76, 73, 32,177,110, 56, 13, 91, 13,151,243, 84,171,
-130, 95,250,250, 55,185,123,235, 22,223,249,206,191, 37,207,195,170,167, 88, 53,180, 86, 48,222,221, 69,120,195,120, 16, 51,200,
- 35, 6,185, 38,213,154, 88, 39, 72, 21,246,245,194,247,246,217,116,117,193, 16, 69,138,225, 32, 15,153, 12,147, 49, 59,227, 17,
- 59,147,112, 27,141, 71, 12, 70, 3,242,193,128,193, 32, 15,235,138, 65, 70, 62,200,201,178,140, 52,207,200,243,192,143, 72,211,
-164,115, 42, 85,107,204,218,247, 12,249, 46, 17, 46,216,105,247,126, 40,126, 77,118, 53, 93,100,184,250,218,235, 47,103,191,191,
-136,176,246,124, 38,250, 53, 11,208, 95,208,191,253,139,134,181,252, 34, 69,253,229,172,121, 54,123,175, 95,164,168,219, 23, 23,
-245, 36,214, 36, 73, 16,252,199,113,132, 86,209,214, 78,253,250,239, 99,156, 67,120,193,229,213,148,233,213, 37, 58, 86,193,196,
- 70,105,154,214, 81, 59,199, 96,148,161,227,136, 52, 77, 48, 77,205,106, 49, 35,141, 53,179,171, 5,109, 29, 52,216, 59,147,140,
-201, 48,195,181,158,166,240, 20, 5, 24, 50,188, 76,248,232,209,199, 68, 82, 16, 75,201,249,217, 5, 79,159, 30,131, 20,228,163,
- 9,201, 96,196,108,185,162,237,119,174, 98,195,102,239,167,228,222,216,163,223, 25,186,245,222,153, 53, 11,244,229, 24,201,245,
-204,164,237, 52,190,207,198,186, 94, 15, 60,216, 32,254, 91,200,136,144, 97,122, 70, 33,133,230,234,106, 70, 83, 55,156,159, 62,
-163,169,150, 44,166,103,148,203, 25,243,217,146,227,147, 26,169, 52, 89, 28, 83,148, 13, 86,134,233,165, 53,142, 86,120,230,194,
- 51, 23,159,137,128,120,238,183,239, 34, 21, 67,246,107,176, 6,197, 17, 11,199,131,189, 17,255,224, 55,190,202,223,251,171,191,
-196,173, 97, 76,108, 43,148,173,137, 68,112, 23, 20, 74, 6,211, 41, 23,252,183, 5, 16,107,199,131,123,251,180,171, 21,167,199,
- 51, 78,206, 79,217,191,117, 64, 54, 9, 54,168,243,101,201,238,222, 33,113, 42,240,194,146,197, 17, 90, 88,118,135, 9,137,244,
-120,227,240, 70,224,136,194,206, 95, 58,144, 27,189,188, 71, 82, 75, 88,121, 88, 90,207,210, 56,230,173,229,108, 81,115,177,170,
-104,162,152,165,243,204,107,131,147, 49, 68, 49,198, 67,221, 56, 86,149, 65,199,113, 88,241, 56,137, 78, 18,148, 86,152,214,130,
- 3,219,130, 64, 5,197,135,131, 36,143,209,177, 68, 68,144, 36, 81, 32, 85,105,201,104,148,146,196,154,186, 92,241,236,201,105,
-240, 44,136,100,144,222, 9, 79,221,148,232, 56, 38, 78,114,172,145,232, 56, 99,182,188,228, 95,255,139,255,142,199, 63,253, 8,
- 12,156,172,106, 38, 71,135, 72, 83, 3, 81,120,175,180, 38, 56,135, 57,199, 96, 48,160,110, 26,242,241, 46,103, 23, 87,236,141,
-135,220, 60,220, 35, 18, 30,221, 21,229,224,191,174,215,133, 58,138,244,122, 79,222,107, 51,123, 38,188,236, 12,104,122,109,123,
-176,155,141, 58,253,123,180,214, 61, 59,231, 59,125, 58, 27, 45,185,216,192,239,107,131,171,107,158, 86, 27,139, 48,209, 25,104,
-109,127,237,218,217, 35,174,147,105,233, 88,241,162,107,164,232, 96, 99, 31,112,123,164, 82,152,166,165,109,218,224,145,144,231,
-200, 40,194,225,195,254,123, 43,144, 74, 9,133,105, 13,214, 24,166, 87, 51,132,144,164,249,128, 52, 27,176,152, 23,156, 79, 75,
-106,145,242,214,151,223, 65,250, 16, 63,171,162,152,198, 58, 26, 99, 80,113,130,247, 22, 45, 61, 55, 15, 38,208,148,228, 73,196,
-108,181, 2,160,109, 67,130,161,148, 50,144,126,147, 4, 41, 37,171,213,146,213, 98, 65, 62, 26, 49, 24,141, 40, 86, 43,170,170,
- 34,207,115,108,107, 89,205,151, 52,117,205,213,108,202, 98, 89, 80, 20, 21,198, 56,226, 44, 38, 75, 96,152,105,154,214,162,148,
- 98,146,105, 34,157,144, 79,118,195,207,136, 19,144, 34, 64,254, 81,112,221,180,192,120, 56,192, 75, 79, 28, 9,238,239,238,115,
-242,244,152,143,174,230, 52,107,212,217, 95, 43,234,194,195,106,177,224,222,221,123,188,249,218, 67, 62,250,232, 3,140,105, 88,
- 45, 86, 44,230, 5,198,194,100,103, 23, 4, 36,137, 96,127,111, 72,162,233,148, 58, 81, 87, 30, 58,210,174,117, 52,214, 82, 53,
- 45,117,221,160,164,100, 52, 28,132, 66, 62, 30, 49,233,138,250,100, 60,102, 48, 30,145, 13, 6, 93,176, 79, 74,156, 38,235,143,
-113,154, 4, 5, 65,154,144,164,241,186,160,247,196, 78,235, 66,142, 72,107, 66,150,122,211,134,143,182, 31,158, 58,195, 52,227,
- 58,181,150, 53,168,175,189,113,247, 31,189, 60, 28,101, 91,175, 44,126,110, 81,255, 60, 15,247,151, 73,201, 94,148,228, 37,197,
-203,154,136,191,228,164,254,146,162,126,173, 17,176, 97,199,211,135,186, 60, 95,212,123,214,109, 31,232, 18, 38,117, 77,220,153,
- 89,188,184, 89, 8,172, 85,129,228,252,226,140, 44, 11,100, 8,225, 32,210, 9, 45,130, 56,209,100,105,202, 32,207,169,203,146,
- 44,137,185,113,176,143,244,146, 60, 77, 41,171, 21,163, 97, 26, 96, 70, 23,209,148,146,233,172,194, 43,205,227,167,199,216,166,
-230,254,205, 3,180, 55,152,186,198, 57, 71, 60, 24, 48,217, 59, 96,182, 44,185,154, 47,131,180, 70, 10,164,244, 29,171, 93,173,
-147,173, 16,215, 53,227,207,251, 48,110,199,229,174, 3, 89,174,197,209,190, 36, 12, 81, 60,159,211,190,113,254,195,139, 78,139,
-187,206,211,233, 14, 75,141, 20, 17, 55, 14,111,113,113, 49, 11, 18, 60, 60, 79, 31,189,207,217,179, 79, 80, 52,216,182, 70,250,
-176, 16,118, 46, 98,222, 26, 86, 56, 86,214, 35, 68, 68,237, 29, 13, 80,116, 50,180,207,187,106,188,144,184,206,186, 83, 4, 96,
-153,195, 44,230,183,191,245, 37,254,193,111,253, 50,175, 31,140, 81, 77, 65,134, 71,121,215,201, 1,117,215, 4,132,189,173, 64,
- 7,215, 51, 28, 74, 84, 20,243,199,196, 81,197,112, 28, 51,157,151, 92,205, 91,162, 44,227,214,157,155,156,156, 94,208,212, 17,
-249, 32, 37, 77, 83,132,177, 68,190,229, 96,103,200,120,160, 25,231, 2,229, 29,109, 27,236, 64,125,183,138, 16, 34, 90,123,132,
- 91, 60, 94,132, 74,239, 59,239,112, 11, 52,198, 49, 91,213,204,202,134,202,194,162,110,169,157,199,199, 41, 70,199, 24,165,144,
-177, 70,200,132,218, 88, 86,166,101,217, 24,100,172,145, 42,193,155, 64,248,145,145, 98, 94, 52,140, 38, 25,214,182,228, 73, 68,
-150, 4, 31,243,166, 49, 40,105, 81,194, 81, 44,151,120,219, 34, 33,144,132,178, 12, 25, 9,100, 36, 25, 12, 71,196,113, 78, 81,
- 52, 40, 37,121,250,236, 67,142, 63,253, 9,186,108,168, 11,207,133,241,232, 81, 78,130,197,185,224,177, 30,236, 95,195, 1,106,
-173, 37,210, 17,179, 85,195,238,193, 17, 39,199, 79,153, 12, 50,246,118, 39,168, 14,214,150, 74,135,194,183, 21,226, 34, 35, 5,
-178,119, 68,148, 91,156, 13,127,205,225,146, 45,216,189,247,144,223, 86,230,172, 37, 34, 66, 96,251,221,159, 16,244,237,109,111,
-247,138,216, 50, 24,233, 25,239,221,215, 55,232,230,166,225,239, 19,199,214, 19,125,127, 31,221, 59, 82,186, 77,202,156, 8,112,
-109, 20,105, 78,143, 79,136,147, 52, 72,223,186,124,243,225,206,206, 90, 75,239, 17, 72, 25, 81, 22,171, 64, 46,109, 91,140,241,
- 92, 94, 6,183, 55, 37, 52,151,203,154,167, 87, 43, 86, 85,203,237,163, 27, 28,236,239, 34, 85, 76,146,229,196,137,198, 11, 65,
- 81,150, 12,243,140, 97, 28,113,180, 63, 38,194,224,132, 39, 31, 13,201, 6,249,218,116,198, 57,135, 82,129, 16, 24,199, 26,188,
-103,181, 88, 96,219,150,253,163, 35,246, 14, 14,194, 74, 70, 74,172,179, 88, 31,138,147,105, 12, 23, 87, 83,142,143, 79,137,243,
-132, 97, 22,145, 72, 75,221, 26,164, 20,236,228, 9,145,142,217,187,113,135, 59,119,110, 81, 55, 53, 85,211,160,147,132,217,114,
-193,209,237, 91,124,244,232, 17,187, 7,187,164, 90, 18,123, 67, 38,224,112,127,151, 31,191,255, 9,231,203, 58, 16,231,158,155,
- 57,164, 16, 56,239,168,203,138,175,189,243, 14, 59,147, 9,223,253,195,127,199, 48,203,137,181,166,110, 90,146, 52,103, 56, 28,
- 34,148,231,206,237,125,148, 12, 6, 94, 81, 71, 62,177, 93, 45,104,140,165,106, 13,101,213, 4, 52, 73, 10,198,131,156,221,241,
-136,157,241,128,201, 36, 20,246,193, 56, 60,103,186, 75,232,139,186,155,210,186,251, 92,111,110, 58,234, 72,194, 98, 29,113,109,
-218, 0,197,215,117, 75, 85, 55, 84,117, 19,138,186,219,202,117,119,118,109,132, 99,157,187, 94,212, 63, 11,195,251,207,132,113,
- 60,191, 83, 23,226, 5, 6, 34, 95, 0,134,255,252,148,176,151, 59,205,125, 30, 10,240,153, 72,208, 45, 77,235,118,151,253, 34,
-247,186, 77, 96,137,197,174, 19,218,174,179,223,123, 2,151,238,164, 7,189,129,126, 18,235,181,164,237,249,223, 47, 68,138,186,
- 96,104, 32, 36, 87,211, 11,132,112, 12,242, 12, 44, 33,110,178, 49, 56,231, 73,146, 12,103, 61,197,106,133,179,150,213,114,129,
- 18, 17,145,142,153, 45,151, 24,103,104,154,150,217,108,133,179, 10,215,237,156,188, 11,110, 95,195, 68,160,133, 5,103,153, 46,
- 86,144,100,168, 56,101,190, 44, 40,234, 38,236,231,186, 9,189,135, 27,149,138,214, 83,250, 90,126,243,188, 84,103, 45,249,218,
-112, 31,214,207,161,216, 50, 74,190,166,217,189, 62,169, 32,196, 22, 87,129, 77,250,219, 86,120,139,243,221,132,132, 70,136,152,
-241,104,151, 36, 78, 40,150, 51,126,252,231,223,163,232, 38,116,225, 60,203, 85,197,249,101,193,233,172,101, 89, 55, 92, 88, 75,
- 33, 5, 70,132, 64, 12, 25, 73, 42,107,177,128,245,242,243,209, 29,161, 9,243,169, 39,245,142,175, 63, 56,226, 31,254,206,183,
-249,230, 43,135, 36,109,129,180, 14, 37, 68,231, 3, 45, 16, 74,135, 38, 64, 70,225,220, 23, 50,164,106, 9,129,148, 45, 74,148,
- 44,174, 30,131, 95,160,226,154, 52, 78,152, 78, 11,170,194, 51, 25, 31,176, 51,217,227,252,242,156,214, 56,156, 9,161, 37, 73,
-172,105,235, 21, 82,181, 8, 95,177,191,175,217,223,141, 49,141,165,105, 61,222,107,188, 83, 93, 49,233,184, 40,190,215,176,250,
-206, 73,171, 51,176, 8, 76,200, 16, 60,129,160,180,134,105, 85,113, 89,150, 44,157, 97, 89, 55,168, 52, 69,101, 41,243,182,161,
- 0, 22, 77,139,149, 10,225, 29,198, 91,172,146,120, 45, 72,179,148, 44,137, 72,165,164,173, 91,164,138,209, 17, 40,225,112,182,
- 13,114, 27, 15,145,148,224, 45,163,241,160, 43, 58,154,209,120, 7,132,162, 88, 21,148,197,140,247,222,251, 51, 82,213,146, 3,
-139,171,134,165,133, 69, 93,179,179, 51, 38, 82, 33,137,205, 58, 71, 28, 39, 20, 69,129, 82,138, 36, 73, 67,147,214, 26,188,135,
-249,124,206,195, 87,239,147,165,113, 88, 35, 69, 27,232, 61,142,147,107,222,236, 27,200, 61, 90, 59,122,169,158, 25,184, 37,173,
- 93, 55,169,114,147,221,208,231, 13,248,174, 8,175, 29,225, 58,207,246,245, 84, 46,187,235,122, 75, 82,212,135,181,176,157,161,
- 32,214,105, 23, 29, 73,179, 43,244,221,180, 30, 6,130,126,242,234,245,247,106, 61,185, 75,169,104,235, 38, 64,175,157, 70,220,
- 58,199,104,103,167,123,235,201,245,251, 55, 82,138,197,114, 65,154,100,193, 10, 53, 78, 89, 44,151,184,214,114,124, 62,231,120,
- 86,112,118,121,197,120,144, 33, 37,212,181, 33,203, 7,228,121,198,222,254, 46, 58,142,201,146,148, 81, 22, 19, 43, 75,158, 75,
-136, 21,113,150,130, 82, 65,123,222, 37,177,233, 40,162,109, 67, 20,114, 93,215,157, 44, 78,211,148, 37, 42,138,200, 71, 35,242,
- 60, 99,180, 59, 98,180, 51, 38, 75, 98, 92,107, 88,204, 87,156, 95, 78,137,210,152, 60, 22,196, 88,202,166,193,154,150, 97, 34,
- 73,210,140,124,188,139, 20,150,253,131,125,242,225,144,233,108,218,161, 19, 57,117, 83,227, 20,140,210,148,196,131,163, 37, 27,
-166,164, 66,240,189,159,126,204,202,186,205, 74,102, 91, 3,142, 96, 58,159,241,246, 91,111,241,240,213, 87,249,225,247,191, 79,
-172, 37,251,187, 99, 16,160,227,140,157,221, 3, 26,211,112,243,198, 14,137, 10,129, 78,222, 11,156,181,212,109, 67,221, 24,170,
- 38, 24, 68, 21,101, 69, 89, 85, 72, 33, 24,228, 25, 59,221, 46,125, 60, 26, 48, 24,229,100,121, 78,156,166,161,145,238, 86, 63,
- 33, 38,248,250,231, 66,117,122,246,238,154,180, 38,248,234, 87, 85, 77, 89, 55,148,101, 77, 81,134,162,222,116, 33, 99, 97,181,
- 27,112,248, 32,175, 11,133,254,133, 69,125,155,184,246,249,182,175,219, 83,176,120, 41, 81,238,139, 78,210,219, 69,253,101, 83,
- 60,159, 99, 46,243,115,101,108,226,197,191,219, 53, 6,124,167, 83,183,182,247,126,247,157, 69,172,127,161,164, 45,142, 67, 12,
-235,139,224,247,237, 29,177,237, 94,128,203,203, 75,138, 98,201, 32, 13, 54,163,109,235, 89,150, 45, 66, 40, 60,138,186,106, 89,
- 46,139,238, 32,130,186,174,200,134, 35, 44,146,195, 27,183, 65, 70, 44,150, 5, 81, 20,227,165,196,106, 65, 62, 26, 80,213, 43,
-134,131,132,233,213, 5, 94, 69,156,207,150,120,157,240,232,211,167,148, 77, 75,221,182,120, 92, 87,204, 33,234,108, 48,101,111,
-185, 41,196,245,195,174,243,168, 94, 23,235,181, 95,113,111, 82, 33,182,178, 2, 84, 39,177, 16,235,255,183,125,152,137, 53,195,
-152,107, 1, 62,215,205,132,130, 30,216,122, 65,158,237, 32,124,196,227,199, 79,120,247, 39, 63,230,242,226, 24, 33, 12,159,126,
-242, 9,171,210,240,232,211, 25,211,101,203,101,225,152, 89,104,181, 98,230, 60, 37,158,214, 65, 75, 8,101,105, 58, 71, 38,225,
-163,112,144,190,108,167, 46, 5,202, 27,118,180,228,239,252,202,151,249,251,191,241, 13,118, 35,131,106,139, 78,142,163, 59, 29,
-178,216, 2,235,187,181,133,216,124,238,112, 72,101,169, 86,151,212,229, 12,137,197,154,154, 97,230, 25,229, 9,171, 89,205,197,
-217,156,225, 48, 99,103, 63,163,109, 29, 42, 74,120,242,236,148,221,253, 27,168, 88, 99,109,203, 32,141,136,104, 72,148,229,198,
-206,144,157, 60, 11,236,116, 99,214, 86,185,194,135, 5,133,184,110,199,116,237,249, 12,245, 61,200,137,156, 12, 19,166,241,158,
- 40,137,169,141, 97,182, 92, 82, 11, 71, 35, 5,173,146, 16,135, 32,145,210, 57,174,154,150,133,113,180, 94, 49, 30, 12,184, 58,
-155, 81, 23,150, 85,213, 32,112,220,186,117,136,192, 82, 21, 5,109,109,176,173, 65,210,146,101, 57,145, 78,209,201,128,193, 96,
- 66, 81,172, 48,166,230,217,147, 15,144,174, 68,171,128,187,148, 69, 67,181,106,153,149, 13,141,138,216,223,221, 9, 33, 50, 74,
- 81,148, 21,131,193, 32,196,160, 74, 65,158,196,148,171,130,210,120,146,225,152, 36,137,121,112,239,230, 90, 42, 41,187,137, 89,
-117,230, 45,219, 94,239,107,127,109,177,217,185,139, 45, 19,155,190,152,175, 39,233,109, 11, 79,217,161, 75,157,161,202,186,136,
-247,239, 3,185,109, 11,218, 77, 88,207, 79,253,215, 10,124,103, 1, 26, 76, 32,144,244, 90,122,177,134,222,173,177,235, 92,113,
- 0, 99, 3, 68,238,141, 5, 47,152, 47, 22, 65,151, 94,148, 72, 41, 25,100, 89,152,240,197, 6,253, 82, 42,162,109, 26,154,186,
-161, 40, 74,162, 40,102, 58, 95, 80, 46, 87, 44,234,150,103, 87, 43,222,251,232, 19, 30,220,191,141,105,107, 26, 99, 41,139,138,
- 98, 49, 71, 42,137,214, 49, 89,154, 49,204, 51,246,247, 50,118, 15, 50,198,251,187,164,195, 33,233, 32, 39,138,117,151,100, 23,
-214, 29,233, 96, 16,204,127,122,148,161, 27,124, 86,203, 37,214, 26,210,209, 40,216, 97, 75, 72, 84,132,118,146,114, 89,178, 40,
- 43,106,107, 73,148, 39,139, 60, 78, 10,172, 53, 76,178, 24,173, 99,210,209, 14,174, 45, 41,202, 21,198,182, 28,221,190, 69,211,
-214,216,182, 37,142, 35, 78, 79, 78,217, 25,239,161,163, 8,167, 44,210, 27,246,134, 35, 30, 63, 62,225,227,211, 25,117,207,125,
- 88, 43, 13,194, 25,108,130,223, 43,223,252,218, 55,240,198,240,225,207,126, 76,150, 42,242, 65, 70, 85, 27,146,116,132,214, 9,
-187,147,148, 36, 10,164, 56,107, 61,109,107,168,234,154,162,170, 67, 65,175, 91,138,178,166,172,106,132, 16, 12,178,148,241, 32,
- 99, 60, 76,201,243,140, 52, 75, 73,178,148, 40,209,248,174,177, 20,124,150, 60,222,155,209,120,191, 89,253,214, 85, 77, 89,214,
- 44, 87, 37,171,238, 86, 84, 21,101, 55,169, 27, 99, 55, 60,164,158,100,215,185, 44,254, 66, 69,253,179, 19,243,117,246,251,203,
-138,249, 47, 60,169,123,126,238, 78,253,249, 72,214,151,237,210,175,155,222,124,241,162, 30, 44, 1,251, 61,133,235, 36, 61,215,
-119,234, 61,252,254,178,162,190,153,212,219,110,183,238, 41,170, 21,197,114, 65,158,166, 36, 58,193, 26,129,136, 82, 76, 11, 82,
-165,168, 40, 33, 73, 51,100,164, 25,141,134, 12,134, 41,113, 58, 64,168, 1,113, 54,226,252,242, 18,112,100,105,204,172, 42, 16,
-121,198,178,170,120,118,252, 12,239, 13,101, 85, 82,123,137,204,134,140, 39,251,200,206,201,201, 24,211, 37, 7,133, 20, 34,169,
- 20,146,254, 96,234,139, 53,215, 76,126,158,123, 21,175,113, 39,174,235,123,123, 56,241,185,100,196, 23,185, 3,250,205, 30,221,
-247, 16,146, 11,120,188,113, 30, 68,140,115, 2,137,102, 60, 24,241,228,241, 35,254,224,247,255, 29,195, 97, 68,237, 20,239,126,
-120, 73,227, 35, 22, 70,115,101, 97,137, 96,225, 61,166,155,152,133, 87, 24,160,149, 14,167,232, 92,227,228,231, 22,245,196, 59,
-238, 78, 50,254,147,191,245,109,126,249,213,155,228,182, 64, 57,139,148, 26,131,196,171,142, 84,133, 15,147,105,247,121,159, 92,
-231,188,195, 43,176, 24,156,171, 40, 86, 83,112, 45,194,129,179, 2,218, 22,105, 11,246,119, 98,226,196,241,248,233, 49,159, 60,
-185, 96, 52, 76, 25,142, 39, 60, 62,185, 96, 81, 89, 84,148,178, 51,158,144,233,132,213,229, 2,217,134,195,110,156,123, 14,247,
- 19,172,179, 84, 45, 52, 46,216,246,110, 55, 24,189,145,164,151,157,102, 21,127, 61,119,218,175,135, 62,172,243, 12,242, 28,165,
- 37, 86,120,140, 20, 24, 15,171,170,165,244,224,135, 3, 78,139,154,194,130, 5, 6,217,144,200, 43,170,162,165,105, 29, 89,170,
- 25,143, 51, 36,142,186, 42,104, 27, 67, 93, 25,178, 84, 48,217,217, 65, 69, 3,164,204,201,242, 33,239,189,247, 46,222, 87,152,
-106, 74,222,189, 30,149,247,212,101, 67, 59,109,104,157,228, 89,211, 18, 73,207,100, 52, 98, 48, 24,144,164, 25, 89,150,145, 36,
- 9, 81, 20,177,147,197,140,135, 67,244,112,151,171, 85, 77, 85, 44, 41,230,151,188,241,240, 65, 48,198,233, 34, 46,183,145, 34,
- 47, 8,251,114, 17, 84, 2, 61, 4,190,137,212,220,216, 21,203,126, 42,222, 26, 78,188,115,107, 13,250,118,228,235, 38,110,120,
-195,182, 23,235, 4, 57,185, 5,189,111,116,239,125,197, 21,126,179,170,242,226,250,185,233, 59,147,170,186,109,176,198,172,127,
-158,117, 14,111, 93,247,119, 70, 52,198, 16,197,154,166,170,113,214,173,221, 45,123,157, 78,175,119,143,181,230,242,234, 10,165,
-162,144,130,231,225,242,244,140,202,120,254,205,119,191,199, 79, 62,252,144,251,119,238,176,191, 55,161,170, 91,172,245, 20,139,
- 25,203,213,146,147,179, 83,180, 78, 73,180,226,198,126,206, 96, 32,186,252,247,173, 4, 60, 21, 28, 9,171,162,160,109,106,128,
- 96,136, 19,199,120, 31, 92,239,178, 44, 99, 54,155, 82,153,134,193,120,136, 23, 14, 97, 12,178,113, 76,175, 22, 28,159, 93,178,
-170,107,134,169, 34,143, 5,198,121,154,186,102,119,152, 48, 24,141,184,117,239, 21,246,247,194,164,111,186,216,215,253,189, 61,
-202,213, 18,173, 20,139,171, 41, 58,203,136, 70, 3,148,179,164,194, 33, 34, 73,150,164,252,217, 15,222,231,194,184, 77,155,219,
-123, 13,200,128,148,204,102, 83,190,246,229,119,120,237,238, 93,254,228,143,126, 15,173,109, 87,212, 45,142,132,209, 96, 76,170,
- 61, 55,246, 6, 56,219,224,172,163,110, 29,101, 29,138,120,213, 89, 57, 23, 85, 77, 81, 86, 72,130,115,229,120,152, 49, 26,164,
-228,121, 78,146, 5,195, 37,169,187, 8, 93, 1,146,141, 20,173, 87, 61,244,132,106,239,125,240, 71,105, 91,234,178,102,181, 42,
- 88, 45, 75,138, 85,201,178,168, 88, 85, 53, 85, 93,135,130,238, 54,196,100,231, 58,141,150, 15, 36, 58,245,206,235,119,174, 69,
-175, 94, 15,116, 17,159,137, 47,101,219,156,254,218,156, 32,215,182,250,222,139,173, 13,235,154, 37,242,210, 91, 15,249,246, 42,
- 67,249,115,246,233, 47,211,171,111,119, 63,159,151, 17,223, 67, 49, 82,108, 88, 47, 65,209,228, 67, 81, 95, 79,235,207, 77,234,
-157, 77,172,238,118,234,105, 28,135, 20, 50, 29, 12, 46, 94,180, 83,239, 25,140,166,219,213, 71,145, 98, 58,189, 2, 79,208,119,
- 14, 71,180, 22, 34, 29,129, 80, 12,199, 99,226, 36,166,105,234,110, 93,231,152, 95,205,248,232,201,199,156,159, 60, 98,185, 92,
- 16,105,195,238, 88,241,214,155,111,242,215,126,227, 87,249,181, 95,122,135,191,247,183,254, 58,223,252,198, 87, 24, 14, 51,140,
-128,116, 48,192, 70, 57,101,219, 48, 91, 76,193, 27, 36, 62, 24,132, 8,181, 62,216,182,237,126,251,116,187, 80,112,221, 53,168,
- 28,191,117, 41, 62,247,156,111,103,173,111, 51,227,157,219,252, 63,107, 93,136,163,117, 93,214,113,215, 56,245,187, 33,231,194,
- 68,124,235,214, 3, 46, 47,102, 28, 63,125,198, 31,255,201, 31, 51,159,205,240, 66,240,195,159, 29, 51, 43, 59,200,214, 58, 74,
-231,169,240, 24,194, 20,218, 19, 97, 92, 23,194,210,235,142, 55,235,132,144, 22, 37,144, 33, 34, 50,228,188,145, 8,193, 47,191,
-122,147,255,249,223,251, 45,142,134, 49, 73, 0,236, 1,137,237, 82,184,164,236,104,124,129, 30,209,177, 81, 3,153,176,117, 22,
-227, 4,214,169,224,246,102,166,180,213, 12, 5,120,235,169,170, 6,211,152, 46,115,186, 34, 77, 44, 71,251, 3,238,223,220,231,
-147, 39,167,156, 93, 92,240,198,219, 95,225, 98, 86,114, 57, 47,248,244,217,148, 69,233,120,112,239, 62,213,106,133, 55, 13,131,
- 44, 38, 17,158,221, 97,198,173,189, 29, 34,227, 40,171, 96, 70,225,133, 15,156, 32,185, 53,137,174,189,162,251, 38, 74,108, 49,
- 69,229, 58,156,102,119,188, 19,156,213,144,200, 46,165,172,169, 13,181,245, 44, 26,131,139, 36,181,113,204, 87, 21, 94, 39, 8,
-157,176, 59,152,176, 92, 85,224, 26,118, 38, 9, 90,120, 76,221, 18,233, 24,132, 33,201, 50,188,143, 81, 42,230,238,157, 91,184,
-118,201,236,234, 49,131, 52,236,184, 17,158,178,169,168,235,138,213,178,161, 50, 80, 26,203,210,133,247,198, 32,141, 25,164, 25,
- 66, 72,140,135,124, 52,102, 58,155,162,227,132,166,106,113,214,177,123, 48,225, 63,251,191,252,151,124,227, 43,111,113,239,240,
- 8,105, 93,128,252,117,104, 84, 69,183,110,113,178, 19,149, 90,191, 14,197, 8,201,108, 42,228,152,139,237, 66,189,149, 63,220,
- 29,192, 27, 23,184, 45, 72,191,135,196,165,216, 56,145,110, 69, 59,175,175,183,109, 51,172,222, 11,197,119,187, 82,228,150,187,
-156, 8,137,108,221,227,211, 17,163,188,115, 88,179,113,184,236,211, 35,101,164,120,118,124,130, 71,146,166, 57,109,107,201,243,
- 60, 88,144,122,183, 78,185, 84,221,153,190, 88, 46,113, 22,150,171,130,203,203, 41,171, 85, 9, 14, 62,250,240, 17, 73,146,178,
-183,183, 31, 32,248,170, 0,231,201, 7, 17,214, 54, 92, 94,206,168,171,138, 97, 46, 57, 60,200, 2, 60, 28,233,110,221, 19,172,
-120, 35,173,136,242,152,178, 44,169,150, 5,210,123,116,164,200, 39, 35, 84,162,105,218, 0,199,207,102, 83, 50, 21,119, 46,126,
- 14,215, 84,204, 47,230,124,242,244,156,214, 90, 6,169, 34,214, 2,103, 91,218,186, 98,144, 13, 25, 77,118,120,248,250,235,100,
-131,140, 36,201,208, 58, 97, 50,153,208,214, 53,131, 60, 65, 71, 2,215, 58,202,166,101, 52, 25, 33, 59,194, 88,217,180, 40, 36,
-139,217,146,159,126,114,134, 1,156, 10,207,171,236,207, 8, 9,109, 83, 51,201,199,124,237, 75,239,112,117,118,206,197,197, 9,
-105,154,162,162,152,162,168,217, 63,216, 67,107,201,254,222, 24, 65, 11,174,161, 53,193,216,171,174,107,170,186,161,108, 12,171,
-178,162, 40, 67, 83,147,167, 89,128,222,135, 89, 55,169,119,141,105,172,215,198, 69, 98,107,168,233,189, 64,250,143,222,134,215,
-188,109, 26,170,170,162, 40, 66, 49, 95, 22, 69, 87,212, 27,234,186,193, 88,115,109,167,238,125,112,185,180,107,248,253,245,151,
- 79,234,159, 45,220,215,139,187,120,238,223,235,251,111, 89, 29,246,111,166,141,239,204, 11,138,186,184, 94,224,175,237,108,127,
-142,164,237, 69,208,251,203, 26,130,235, 80,229, 38, 86,118, 19,237,234,215,197,204, 62, 63,169,119,217,232,155,148, 54,221, 37,
-146,169,245,110,233, 58, 9,135,181, 89,191,237,166,163, 16,130, 16,118,243,211,217, 34,236, 98,116,208, 85,206, 87, 5,101, 93,
-113,113,117,201,229,229, 5, 85, 93,178, 92, 46,168,234, 2,233, 96,231,104,143, 91, 7, 57, 55,111,222,227,224,112,192,193,110,
-202,254,222, 77,138,171, 11, 14,246,198,212,245,138,221, 27, 7,236, 29, 30,240,213,111,254, 50,183,110,221,230, 63,254,135,255,
- 75, 94,121,237, 53, 62,254,232,125,102,211,203,144, 84,118,237, 0,219, 72,181,251,104,193,141, 9,141,251,140,105,140,223,126,
-158, 62,115,115,107, 40,168, 47,210,174, 99,111,134,228,174, 80,192,141, 11,171, 13,103,125,247,220,122,188, 11,154,253,131,195,
-187,120, 98,148,138,200, 58,137,199,157,251,175,240,198,151,190,202,183,126,245,215,248,242, 55,127,141,183,191,242, 85,246, 15,
-247,113,120,150,171, 5,198,154,112,224,118,246, 31, 78,110, 77,168,107,242,254,150, 21, 83, 55,197, 70,120, 70,145,226, 55,191,
-254, 38,255,209,111,124,157,180, 45,193, 6,197,131, 35,200,237,124,111,204, 67,104, 72, 60, 2,235,193, 56,176, 34,240, 33, 12,
- 14,235, 34,108,171, 80,180,216,230, 10,225,151, 8, 7,214,122,106, 83,227, 8,127, 59, 40,132,243, 72, 87, 35,221,130,189,189,
- 29,188,181, 28, 63, 61, 14,222,219, 81,204,241,217, 37,109, 71,198,210,145,102,188,123,192,229,197,146,114, 85,147, 73,201, 56,
-106,121,237,214,152,189,221, 29, 48, 53,109, 99, 54, 41,131,221, 11, 26,118,236, 91,174,144, 91, 77,122, 15,211, 59,231, 48,173,
- 97,111, 50, 33,145, 18, 25, 76, 43,240, 54, 88,142, 90, 2,247, 34, 85,193,230,179,245,130,227,217, 28, 23, 41,198,183,142,168,
-156,224,244,120,193,252,170,226,242, 34, 52,189, 81, 44, 25, 14, 7, 56, 39,201,243,148, 36, 22, 60,123,250, 65, 48, 77,242, 30,
-132,198, 59,131, 51, 45,173,113, 20,214, 81, 20, 65, 90,247,204, 58,180,142, 56,220,217, 97,152,101,232, 36, 11,110,105, 73,130,
-206, 82,218,166,229,112, 48, 1,103, 57,157,158,179,106, 27,174, 78, 78,249,141,175,255, 18, 31,254,244,167,100,147, 1, 42, 13,
- 4,203, 8, 29,146,232,226,224,210,168,163,112, 77, 9, 21,133,228,180,238,128, 53,157, 17,140,232,162, 92,233,200,118,190,103,
-163,119,206,250,253,254, 27,217, 5, 34,172,165,106,215,226,188, 59,182,122,199,186,239,249, 61,221,107, 67, 87,208, 55,112, 97,
- 23,131,172, 2,252,207, 86, 68, 56, 29,140,106,140,233,114,186,101,167, 99, 14,242,174,214,132,166,179,105, 44,243,197,138, 72,
- 71, 12,242,180, 99, 80,136, 53,122, 36,149, 12,178,206,162, 66, 8,201,233,217,148,139,139, 75, 22, 87, 51,148,208, 68,233,136,
-100, 48,100,185,156, 82,151, 69, 88, 33,217,138, 72, 43,156, 15, 70, 63, 55,246,134,220,186, 49, 10, 32,136,247, 52, 69, 69,181,
- 92,225,189, 69,106,137, 74, 53,233,112, 64, 83,214, 36, 58,194,180, 45, 50,137,208,195,140, 56,139, 65,120,114, 29, 97, 87, 13,
- 73,150,227,101,139,240, 13,139,139, 57,239,127,114, 78,107, 76,104,248,148,195,182, 21, 88,207,104,178,203,254,225, 33,247, 30,
-220, 69, 8,193,213,197,148,159,189,251, 62,211,171, 41,105,150, 16,199,138, 65,158, 96,140,103, 62,157,178, 55,153, 16,233,136,
-198,122,126,246,238,251,148,171,130,221,201,152,159,188,255,152,105,211, 98,132,196,163,136,186,247,179,235,164,140, 87, 23, 87,
-252,230,111,252, 22,131, 36,227,207,255,252, 7, 76, 38, 99,240,130,170, 44,217, 59, 56, 64,169,136,253,189, 29,180, 52,224,170,
- 32,125,171, 44,117, 21,136,123, 85, 99, 88,149, 53, 69, 89,227,189, 39,207, 50, 70,163, 1,163,225,128, 44,203,200,210,140, 56,
-137, 55,150,196,244, 1, 91,158,107,122,159, 94,175,110, 29,182,181,180,117, 77, 85,133, 9,125,177, 42, 88,116, 69,189,172, 90,
-234,166, 89, 15, 68,126, 27, 13,222,178, 78,127, 97, 81,255, 5, 44,226,190,112, 94,218,207, 99,176, 95,203, 96, 23,159,255,125,
- 95, 4,206,255,162,172,249,231, 19,219,252, 75, 38,245,182,155,212,251,162,174,227, 0,193,111, 34,239,212, 53, 34,225,166,168,
-187,110,215, 17,164, 58,214, 56,156, 19,172,138,138,178,108,153,205,195,126, 60,210, 49,117, 99,113, 94,128, 8,241,158,113,156,
-146,229, 67, 34, 52,175,127,245, 29,108,219,242, 55,255,246,127,200,239,252,253,191,207, 98,190,224,127,251,191,251,223,243,233,
-167,143,249, 91,255,131,255, 17, 71,119, 31,224,100,194,173,135,111,211, 24, 73,217, 10,246, 15,110, 50,187,186,228,221,159,254,
-136,243,211,227,181, 46, 93,108, 21, 55,216,138,170,191,150, 34,180, 41,234,107,215,163,173,143,125,193,118, 61, 17,176,155,186,
-109,183,223,177,207,221,204, 86, 54,125,107,109,144,156,173,111,150,241,120,143, 91,183, 31,144, 12,119, 66, 34, 85,156,114,116,
-235, 54, 22, 73,148,230,232,116,192,104, 56,196, 59,203,100, 56,224,238,157, 59,236,239,238, 51,159, 47, 40,202,114,253, 6,121,
-145,132, 67,118,251,231,144,216, 37,144,222,113, 99, 24,243,119,127,253, 27,124,243,193, 45,100, 83,226,156, 9, 97, 13, 34,120,
-109,123,225,215, 36,168,158,132,226,131, 56, 2,219, 49,246,173,131,214, 90,156,151, 56,235,240,118, 5,110,137,164, 5, 47,105,
- 27, 67, 99,218, 53, 19, 90, 74,137,243, 14, 33, 3,233, 70,216,150, 65, 44,216, 31,167, 68,222, 18,235,136, 52,207, 17, 58,165,
-169, 44,243,105,205,249,180,100,114,112, 68,148,196, 52,109, 77, 26, 89, 82,109, 24, 15, 26,238,221, 24,177,151,231, 68, 54,162,
-105, 77,199,128,119, 29, 20,223,111,220,221,154, 64,215,163, 19,158,144, 64,102,140,193,182, 13, 7,147, 33,137,142,176,117,133,
-213,138,182,107,140, 18, 4,153, 80,104, 4,227,241,136,139,229,146,211,170,226,195,179, 41,199,243,146,218,198, 72, 57,224, 98,
-218,176,170, 37,195,161,102, 56, 28,226,240, 28, 29,237,179,156, 95,160, 68, 96,201, 71,145, 14,178,177,174,169,109,219,160,141,
-175, 43,199,162,114,156, 88, 79, 99, 44, 89,154,113,120,120, 20,214, 3, 2,154,178,164, 88, 44, 40,102, 51,234,162,226,217,201,
- 41,203,186,230,198,209, 1,143,222,251,136,183, 30, 62,228,149,251, 55, 72, 6,113,136, 16,150, 42, 24,187, 8,129,151, 30, 33,
- 20, 74,110,133,189,108,179,202, 59,132,110,163, 39,239, 96,230,206, 66,185, 15, 96, 17, 82,118, 95,223, 36,111,120,191,217,175,
-111,136,118,155,104, 86,177,101,170,116, 77, 35,210, 77,249,190,183,153, 93,107,215,253,166,239,148,162,187,190, 66, 33, 95,203,
- 75, 17, 56, 33,136,227,152,217,116, 78, 20,133,108,123,231, 12,195,209,168, 11,164, 81,235,159,225,156, 67, 71,154,166,105, 89,
- 44,150, 44,203,134,171,249,138,170,117, 60, 62,185, 96,120,120,147,175,253,210,183,120,118,242,140, 31,255,248,199,120, 4,139,
-229,156,198,184, 80, 64,234,154,166, 90,176, 51,202,152,140,114,218,166, 97,122,126,137,109,219,160,217,238,154,148, 72,199, 68,
- 82, 82, 45, 87, 40,165, 48,222,162,226,160,172,137, 98,205,124,122,133, 48, 14,165, 21, 82,123,168, 27, 22,151, 43,126,246,209,
- 83,140,179,228,153, 66, 71, 30,107,130,207,198,112, 56,230,232,230, 13, 14, 15,246, 16, 29,188, 92,148, 21,214, 11,102,243, 37,
- 77,211,160, 84, 68,172, 83, 78,143, 79, 24, 79,198,164, 73, 66, 85, 22,148,171, 10,225, 61,113,146,114,118, 49,231,195,167,231,
-212, 66,225, 93, 63,212,249, 53,116, 82, 85, 53,175,220,123,192,221, 91, 55,249,248,163,247,112,182,237,224,113, 65,217,212, 28,
- 30, 30,146,104,193, 40, 87,224,106,154,214, 82,213,142,166, 9, 59,245, 48,169, 55,235,162,158,165, 41,227, 65,206,104,152,145,
-103, 41, 89,150,146,164,155, 73,221,109,203, 24,217, 10,252,114, 46,188, 47,140,195,152,150,182, 14,251,244,213,178,100,177, 90,
-177,234,224,247,178,110,214,122,125,215, 55,139,215,102,210, 23, 20,245,159, 71,114,187,246,181,151,166,157,125,126,148,233, 23,
-241,101, 23, 47, 48,188,249,133,204,107,254, 2, 82,184, 23, 21,117,179, 93,140,140,187, 94,212,181, 38,214,155,164,156,104, 43,
- 52,226,179, 22,170, 54,216,251,117,143,227,189, 36,207,134,104,157,226, 61,212, 77,203,213, 98,197,120,178,139,113,240, 43,191,
-242, 87, 56,216,191,193, 87,191,250, 53,254,193,127,255, 63,230,233,147, 99,254, 39,255,179,255, 5,113,164,185,113,235, 46,127,
-229,219,127,149,223,251, 87,191,199,127,240,219,127,135,143, 63,254, 16, 21,103,140,118,118,249,244,241, 19,118, 15,239, 48,189,
-154, 81, 27,193,206,104,194,124,122,201,187, 63,249, 17,151, 23,167,155,215, 76,200,235, 42,109,191, 97,166, 59,215,177,210,183,
- 98, 5,221,122,250,118,107, 51,153, 96, 40,211, 21,114,107, 55,249,194,214,127,182,168, 91,183,126, 46, 91, 23,138,122,211, 61,
- 23,206, 9,132,212,188,245,246, 87, 80, 81, 66, 89, 85,100,105,194, 48,207, 41,203,114, 93, 88,151,171, 21,145,148,148,171,144,
- 92,167,149,226, 96,111,159,195,253, 3,116, 20,115,126,113, 30,246,143,207, 71,225,110,101, 20, 71, 64,236,225,141,163, 29,254,
-246,175,125,141,163, 76,162,155, 21,206, 27, 44, 65,182,212, 90,139,237,242,148,122,131, 28,211, 27, 62, 32,214,176,187,113, 62,
- 56, 96,121, 48,206,225,109, 77, 36,106, 34, 89, 35, 9,127, 87,211,218, 48, 49,109, 17,181,220, 58,226,213,161,176,104, 97,145,
-174,102,156, 41,178, 68,177,183,183, 75,219,180, 56,211, 53, 25, 81,194,207, 62,121,198,217,172, 36,201, 50,116, 28,116,173,180,
- 11,148,179,140,146,152,123, 71,135,220,220,223, 37,137, 5, 96,130, 87,124,191,142, 34, 48,167,197,246,254,189,223, 47, 10,104,
- 27, 67,219,180,236,140,134,104, 37,105,156, 9, 57,221, 82,144, 33, 73, 61,236, 77, 38,160, 35,174,230, 75, 60, 17, 86, 4,249,
- 92, 81, 86,104, 45,112, 2,230,141,101,148, 68,228, 89,204,112,152, 48, 28,104,112, 21,194,219, 46, 79,160,139, 57,197,227,189,
-196, 89, 69, 83, 67, 83, 90,202,178,229,204, 9, 26,235,216,219, 63,100,111,111,151,166, 88,113,121,122,194, 39, 31,125,200,163,
- 15, 62,224,217,179,103, 28, 63,125, 70, 89, 55,236,222,184,193,141,155,183,216,223, 61,224,207,254,244,207,248, 7,127,255,191,
-135,212,157,123,161, 80, 72,165,145, 90, 35, 84,184,118,162, 72, 95, 75, 72,243,157,217,139,138,130, 74, 98,173, 15,151,172,237,
-144,215,174, 12,106,243,218,173, 35, 94,251, 32, 24,250,221,122, 39,135,148,114, 75,230,198, 38,216,101,155, 97,175,122, 35, 27,
-185,241,141,247,219,241,218, 33, 27, 1, 41,187,230,215,224, 58, 20,198,110,229,197,199,113,194,108, 58,235,200,106,129, 57,159,
- 15, 6,235, 34,209, 19, 85,141,177, 36,113,140, 49,134,147,139, 57, 69,213, 96, 17, 60, 57,155,113, 81,212,252,143,255,147,127,
-200,223,250,187,191,131,115,150, 63,250,227, 63,230,253, 15,222,231,106, 58,103, 85, 6,242,215,249,201, 51,254,205,191,252,151,
-252,246,223,248,171, 40, 60, 77, 85,162,148, 98,180, 31,248, 58, 77, 85,135,134, 77, 71, 20,179, 25, 89,158,177,106, 74, 84,172,
-187,176,157,144,146,103,139, 26,107, 13, 58,145,248,186,102,113,177,226,167, 31, 60,161,197,145,106,143, 18, 38, 20, 85, 33,153,
- 12, 39, 28, 30,238,179,183,187,139,114, 14,103,161,106, 12,131,193, 8,235, 61,243,249, 18,107, 29,123,187,187, 92, 94,156, 51,
- 24,134, 0,153,213,178,160, 92, 21,220,188,121,147,209, 32,103,185,156,243,227,247, 30,227, 34, 77,217,174,219,162,160,180,233,
-138, 97,177, 92,241,215,126,243,219, 20,139, 57, 31,190,247, 30,131, 36, 97,119,103,194,170,172,184,121,243, 22,182,173,216,219,
-201,145, 88, 76,107,168, 42, 67,213,116, 59,245,237, 73,221,121,178, 36, 9, 59,245, 97,190, 46,234,113, 26,100,160, 72, 21,222,
-115,142,141,166,183, 91, 89,210,241,138,108,107, 48, 77, 67, 93, 85, 84, 69,197,114, 85,176, 88,149, 44, 87, 21,171,162,162,106,
- 26,154, 14,153,235,109,101,183,139,122, 95,111,162,151, 21, 56,239,253,103, 10, 99,159, 82,118,237,176,124,193,196, 43, 68, 23,
-153,249, 5, 9,114,159,181,145,125,225,204,245, 66,111,250,127,191, 94,245,254,165, 9, 93,107,246,247,115, 65, 31, 47, 66, 44,
-158,143,122,237, 45, 39,165,216, 4,222, 11,161,216,217,221,231,238,189, 7, 12,134, 57,171,170,225,149,215,191,204, 31,125,247,
-123,188,246,250,155,204,231, 11,102,179, 5, 81, 52, 98, 85,150, 88,167,200,178, 49, 79,158, 62, 1, 98,154, 86, 80, 55, 45,195,
-241,144,103,199, 79,185,115,231, 22, 77, 93, 48, 28,143,112,117,129, 86,154, 98, 85, 96, 59,251,192,237,125,185,235,157,238, 58,
- 91, 93, 33, 61,162,219,131, 95, 95, 83,132, 93,244,117,169,161,219, 34,195,247,236,226, 77, 12,166, 18,178,131,248,197,139,215,
- 17,194,175,253,245,189, 11, 51,204,151, 30,188,142,142, 18,138,229,130,189,221, 9,243,233,148,179,233, 37, 55,142,142,144, 78,
- 48, 93, 45, 57,152,140,184,156,206,137, 4, 36,121,222, 73, 14, 29,123,227, 49, 95,125,235, 77,226, 88,243,211,247,223,227,114,
- 54, 11, 26,238, 45,102,152, 39, 76,109,210,195, 59,119,110,242, 43, 15,239,145,215,225,144, 41,180, 71,216, 24, 44, 91,161, 52,
-221,245,219, 49,143,187,127,117,186,104,214, 36, 21, 7, 24,161,112,109,141, 50, 75,210,212,134,184,211,174, 65, 82, 74,163, 59,
- 40,213, 99,177,174, 69, 10,133,195,224,186,225, 76, 9, 79, 26, 11,156, 93, 97,219,130,182, 45,185, 59, 30, 82,196,158, 85,233,
-145, 89, 10,201, 33, 23,179,146, 79, 47, 90, 46,230,138, 73,230,120,243,238,125, 6, 89,132, 51, 37,101,125,201,209, 48,102, 50,
- 28,242,229, 87, 15,120,124, 94,112,124,185,226,248,252,138, 85,229, 8, 63, 93, 5, 93,125,183,104,241,128,241,224,112, 92,174,
-106,204,147, 83,246, 39, 67,114, 98, 98,215,160,144, 36,145, 98,156, 15,200,118, 38,188,251,228,113, 64,149,157, 35, 19,154, 44,
-210, 40, 95,144,250,134, 47,191,181,203, 43,247,239,114, 56, 62,228, 75,111,190,202, 71, 31,252,128,182, 89,146, 68, 30,173, 36,
- 74, 4,232,218, 11,143,148, 81, 55,161,118,146, 35,225,209,194,179,171, 37,151, 77,104,254,222,125,239, 3, 98, 87,161,157,103,
-152,229, 28, 29,222, 32,210, 17,251,251, 71,236,220,184,197,206,209, 17, 63,254,233, 79,121,248,165,175,240,179, 31, 52,124,255,
-221,247,121,231, 75,175, 16,171,176, 47, 55,222,161,101, 40,240, 1,105,233,214,102, 34,218,188, 63,215,171, 55,185,198,120,194,
-244,173,186,140,110,143,232,165,112,222, 7,200,190,143,215,148, 98,189,162,147,219,197,187, 63,159,252,214,154,177,227,114,160,
-212,134, 20,231, 55, 52,163, 53, 42,224, 59,200, 94, 10,188, 11,131, 67,158,231,129,231,208, 65,174,189, 13,168,148,146, 44,203,
-216,217,157,112,113,121, 73,219, 10,174,174, 2,239, 96,178, 59,193, 90, 3,182, 69,202, 16, 11,237,140,101, 50, 30,113,184,191,
-199,201,233, 5, 69,177, 98, 48,204,249,244,211, 51,206, 78, 79,121,248,240, 30,127,251,239,252, 29,190,254,245,111,112,113,122,
-202,163, 71, 31,243,228,228,132, 39,143, 31, 35,219, 18, 81,173,184,186, 90,113,235,230, 46,105,158,179,152, 94,113,254,244, 41,
-147,253,125,178,193, 8,188,167, 93, 46,137,148,162, 44, 11,132,132,186,109, 72, 71, 3,132,115,164,131, 12,147, 44,169,170, 10,
-124,220,165,167, 89,154,182, 70, 68,129,231, 17, 69, 10,111, 36, 90,118,217,238,121,190, 38, 15,226, 61,203,229,146, 40,245,148,
-101,197,120, 52, 33,142,162,192,137, 73, 98, 76,211, 2,130, 85, 81, 2, 48, 24,228,156, 29, 63,227,254,173, 61, 94,187, 53,226,
- 86,126,139, 63,248,225,187, 52,221,107,209,111, 65,188,128,247, 63,254,128,227,139, 11, 30, 60,124,139, 63,253,206,119,194,218,
-209,181,224, 90,234,186, 34,209, 49,117,235,136,116,183, 19, 23,254, 51,174,167,225,124,117, 91, 94, 28,215, 87,147,206,187,160,
-162,233,190,223,187,109, 36,180,187,218,156,197,123, 27, 16, 98, 99,105,219,118,157, 20,218,135,137, 57,203,154,171,132,191, 30,
-241,189,253,179,163, 95, 36,140,229, 69,193, 42, 47, 50,150,233, 3,224,123,227, 1,190, 64,129,190,254, 57,215,152,245, 63, 47,
-204,229, 47,107, 78,243,252, 54, 65, 8,241, 25,147, 26,241, 60, 27,252, 57, 51,150,231,131, 97,174, 61, 55,235, 53,175, 8, 49,
-247, 93,131,160,148,226,198,141, 67,230,139, 25,111,191,253, 54,143, 30, 31,179,191,127,192,197,197, 21,247,238,191,194,241,201,
- 15,112, 62, 34, 31,228,156,157,158,179, 51,222,225,123, 63,248, 14,166,170,136,145, 76, 47, 47, 25, 13, 50,190,247,131, 31,241,
-237,111,255, 58,190, 94, 50, 72, 19,202,171, 99,200, 14,120,252,233, 39, 68, 50,152,163,208,133, 95,108, 38, 56, 16,206,175,109,
- 15, 63,155,208,183,213,196,188,128,155,192,115,126,253, 97,130,144, 68, 93,244,234, 70,238, 38,175,175, 34, 16, 97,191,236, 61,
- 2,201,100, 52,224,254,253,123, 40, 33,217, 29, 13, 40,231, 23,180,229,138, 91, 7,187, 44,102,151,212,173, 37,137, 34,188,109,
-152,207,166, 72, 4,109, 93,146,101, 57,141,177,224, 28,210,121, 30,220,190,203,104, 56,230,195,143, 31,241,225, 39,143,104,172,
-217,106,182, 60, 18,193,195,123, 55,121,120,243, 8, 83, 20,148,210,224, 98, 48, 78, 18,137, 22,233,237, 58,155, 56,138, 20,180,
- 33, 79,185, 55,215, 88,251,135, 91,183, 70, 58,188,135,210, 58,164,111, 73,109,133,214, 10, 5,216,110,130,147, 74, 32,108,119,
-104, 3, 66,152, 64,228,235,210,157,172,143,176, 34, 76,141, 66, 88, 34, 97, 16,110,142,171, 10, 38,145, 38, 31, 71,136,180, 97,
- 52,202,185,127,231,128,227,147, 25, 74,197,120,235,248,193,123, 83,178, 20,190,252,214, 17,227, 97,206,108,118, 73,108, 13,185,
- 18,140,110,141,120,245,104,151,233,242,128,199,103, 51, 62, 61,157, 50,171, 90,106,211,239,246, 93, 55,181, 75, 28,138, 22,199,
-180,110, 40,206,174, 24,166,154, 56,209,164,105,136,164,188,164, 97,246,244, 99,166,182,198, 37, 2,221,128,112, 45, 19,223,242,
-218, 97,196,175,188,121,196,183,190,246, 22,175, 61,124, 72, 97, 99,222,251,224,103,180,213,146, 44,238,174, 47, 28, 86,216,144,
- 52, 37, 66, 26,152,151, 10, 25, 39, 68, 73, 66, 54,202, 73, 23, 21,183, 60, 8, 34, 78,143, 79,248,251,127,239,119,120,245,230,
- 46, 67,173, 16,196, 8, 33,153, 47,231, 44, 86, 21, 66, 41,170,162,228,173,215, 95,199, 57,203,175,254,198,111,240,189, 31,255,
-140, 47,191,245, 6,194,139,110,103, 30,209, 26,131,142,130,102, 90,118,175,161,135, 77,163,217, 49,220,189,236,243,209,123, 91,
-152,141, 84, 64, 70, 97,186,234,137,106,219,166, 53,125,184, 81,191, 37,247,107,214,124,119,136,175, 97,125,133,112,226, 51, 10,
-144,254, 12, 88,243, 87, 92, 80,143, 56, 31, 46, 47,239, 29, 82, 69, 36, 89,142, 80, 65, 3,238,125,103,246,226, 66,113,216,217,
-153, 80, 86, 37,206,121,180,142, 57, 62, 62, 33,201, 83, 84, 36,105,171,134, 36, 77, 16, 14,180, 10,215,229,209,193, 14, 23, 7,
-187,124,244,193, 35, 18, 1, 89, 36, 57,126,252, 9, 23, 39,183,241,206, 16, 73, 73,158,102,252,218,175,252, 10, 42,141,209, 73,
-204,201,227,167,252,232,143,191,203,179,227,115,110, 30, 78, 24,236,236, 34, 35,201,124,122,197, 98, 54,131,217, 50,172, 33,177,
-100,105,130, 7, 10, 91,135, 54,216,117, 90,106,103,200,119, 38, 44, 31,207,113,182, 5,103,112,198, 80,214, 37,121, 50, 36, 73,
- 34,188, 11, 77,246, 32,201,145, 82,146,166, 89,144,247, 17, 8,130, 73, 18, 83,181, 13,145,138, 88,206,230, 68,163, 1, 56, 23,
-188,244, 9, 57, 19,117,211,208, 90,139,113, 6, 47, 5, 81,172,184,181, 63,102,120,231, 62,231,243, 25, 63,249,248,113,112,250,
-239,206, 67, 47, 28,149,169,249, 55,127,248,111,249,143,254,230,239,112,243,246, 61,102,231,159,144,229, 17,222, 41, 86,203, 37,
-123,123,183,104, 26, 67,166,123,251,104,183,110,236,232,149, 48, 91, 14,154,155,146,176,149, 23,210,147,227, 88, 51,228, 94, 88,
-248,189,181, 56, 99,177,157,221,107,107,108, 32,105,183,129,179,178,134,220, 63, 11, 71,110,194,132,224,231, 23,245,207,155,132,
- 95, 84,148,175,199,111,109,166,251,231,139,251,243,133,250,218,228, 45,252,181,204,244, 23, 62,254, 47,184,103,255, 34,233,110,
-219, 19,183,248,130, 51,189,223,218,109,188,124, 95, 47,174,117,119,224, 16,210, 81, 54, 5,231,151,167, 12,242,224, 98,116,124,
-252, 3, 94,127,243, 29, 62,126,124,204,120,178, 23,228, 21, 94,178,127,176,199,217,217, 41,111,222, 61,160, 88, 92,112,117,242,
-140, 73, 26,243,244,209, 71,220, 58,188,201,191,184,248,125,226, 36,161, 46,150,120,239, 88,206, 47, 57,216,185,201,217,217,146,
- 97,150, 6,136, 7,137,247,118,141,129, 8,191,209, 54,111,192, 23,255,156, 57,126, 56,228,250, 46,244,133,207,187,236,229, 66,
- 2,239, 21, 72,143,242,138,176,214, 12, 4,182,117, 66,149,151, 24, 47, 17, 74,224,172, 65,122,207,151,222,122, 3,103, 26,116,
- 28,179, 90, 46, 56,216,159,176, 90,206,153, 47,231,193, 29,171, 92,146,143,198,156,159, 95, 48, 24,228, 36,177,198,251, 17,197,
- 98, 73, 18, 39, 24, 91, 17,199, 17,198,122, 38,249,144, 55, 94,125, 13,165, 20,239,125,244, 1,198,154, 16,175,137,231,181,195,
- 67, 14,243,140,243,249, 5, 11,229, 73,116,132,116, 26,209, 42, 18,229,137,132, 33,114,161,240, 6,105, 34,157,124,209,135,192,
-144, 8,164, 11,158,244,190, 99, 72, 89,231,104,156, 70,216,146, 52,181,193, 13,202,248, 80,247, 9,211,136,138, 52,222,128,117,
- 33,133, 11,103,182, 36, 17, 6, 39, 4,109, 7,225,250, 72, 32,173, 71, 88,131,107, 13, 73,156,208,174, 78,209,104, 36,154,251,
-227, 12, 34,207,178, 48, 20,177,227,100,190,226,217,119,150,236, 79, 50,190,252,198, 61, 50, 97, 17,174,166, 88, 94, 16, 11,197,
-158, 20,140,111,229,252,242, 91,247, 57,155,175,120,118,118,201,229,116,201,116, 89,177,106, 44, 69,235, 48, 91, 23,180,195, 83,
-120, 71, 43, 4,133,179, 68,174, 65,182, 33,162, 21,227,209, 30,142, 98,193, 48, 81,188,243,234,136, 95,255,210, 93,222,121,235,
- 45,110,220,124,200,201,101,205, 7, 31,125,159,197,226,140, 60, 81, 8,215, 34,108,159, 8, 72,135, 4, 5, 3, 38, 25, 41, 84,
- 18,145,142, 6,236, 8,141,138, 52,135,171, 21, 89,165,248,254,233,156, 63,255,243, 31,242,224,230, 95, 37, 31, 78, 88,172, 12,
- 79,159,158, 48, 28, 15,112, 58, 34,206, 98,154,186, 32, 75,198, 24, 44,231,151, 51,190,246,229,111, 80,183,130, 60, 82,232, 88,
- 99,165, 12, 57,211,221, 36, 36, 68,180,150,161,209, 5,174,244, 9, 94, 33,178,178,251,189,100,136,174,164, 99,119,179,118,124,
-243,159,145,217,250,237,227, 98,155,167,210, 93, 55,222,153,181, 2,193,175,163, 49, 55, 42,141,254,190,178,147, 84, 72,225,214,
-252, 27,225,253,154,148, 43,132, 88, 75,251,154,166,193, 59, 11, 98, 19, 4,115,116,116,131,211,211,243,176, 30,116,142,199, 79,
-158,112,239,238,109,156,183,180, 77,211, 21, 9,143, 18,144, 72,184,181,191,195,155, 15,238,240,233,227,239,241,214, 43,247,177,
-197,130, 15,127,242, 99,110,223, 62, 34,214, 41,231,199,199, 8,231, 73, 92,198,124, 53, 35, 31, 14,121,229,225, 91,204,167,115,
-156,247, 20,179, 25,131,221, 33, 81,172, 56, 61, 62,167,174, 13,247,111,221,198, 53, 43, 76,221, 18,231, 57,210,134,226, 43,122,
-199, 51,111, 81, 81, 20,194, 79,154, 6,109, 12, 77,219, 4, 68,193, 59,172,109, 81, 42,236,170, 27,221,172, 35,118,173, 13, 69,
-125,177, 92,117,196,216, 37,227,225, 16, 25, 65, 30, 71, 96, 13,109,211,172,207, 44,183,101,227,221, 75, 53,165,179, 36,190,225,
-111,254,230,175,243,254,227,255, 42,172,208, 92,151,117, 65,120,190,255,236,135,223,231,239,254,246,223,225,181,215,223,228,247,
- 63,254, 41,187,109, 78, 20, 15,169,202, 50,168, 65,154, 22,134,241,181,236, 19, 41,122,191, 14,121, 13,145,124, 17,198,188, 46,
-184,130,117,212,174,240,108, 18,250, 58,146,156, 91, 59,153,118, 69,189,237,110,221, 42,206, 90,187, 62,203, 55, 76, 40,177,101,
-209,249, 5, 38,245,151,197,149,126,145,168,211, 53, 60,189,229, 36,246,178,233,252, 51, 19,252,115, 59,251, 23, 53, 0,127,145,
-233,252,101, 5,125, 77, 14,123, 30, 73, 23, 27,239,243,207,112, 4, 60,159,129, 61, 94,244,183,121,191,121, 1, 5,253, 1, 34,
-186, 83,221,178, 88,204,201,210,140,197,124,206,106,177, 32,137, 99, 86,171, 21,101, 89, 34,133,100,181, 92,114,243,198, 17, 79,
- 62,125,196,235, 55,119, 81,190,225,236,217, 39, 76,134, 57, 63,254,225, 15, 57,252,107,223,230,244,244, 18,107, 96, 54,189,194,
-185,166,115, 28,115, 44,103, 51,148, 11,198, 32,219,171, 2,255, 18,155,220, 30, 33, 89, 79,224, 91, 48, 97,255,247,250,173, 11,
- 41, 16,130,122, 33, 98, 32,248,133, 14,182, 43,244,125,174,122, 31,101,137,192,162, 49,214, 65, 20, 49, 30,100,236, 78, 70,204,
-167, 23, 92, 25,195,222,222, 94,216, 67, 35,137,163, 32,149, 73,135,195,224,154, 21,167,156,156,156,177, 90, 45, 24,230, 3,132,
- 16,212,109, 3, 29,113,200, 90,194,238, 84, 73, 30,190,250, 16, 29,107,222,253,217,187, 56,107,120,112,243, 22, 15, 38, 3, 90,
- 87, 83, 43, 71,137, 67,123, 73, 92, 91, 98,111,168,165, 69, 41,223,177, 84,131,214, 55, 4,238, 72,148,181, 8,225,145, 77, 27,
-230, 56,185, 81,121, 24,235,176,222, 16,217,146,209,126, 10,174, 10,111, 97,231,183, 5, 77, 29,138, 17,225, 76,224, 40,244,146,
- 22,101,193, 10, 31,164,126, 74,117, 6, 60,174,203,187,143, 16, 30, 6,145,192,154, 18,100, 77,219, 46,240, 78,162,180,102,252,
-230,109,158,157, 38,172, 86, 48, 24,236,242,123,223,249,144,209, 64,241,229, 55,111, 49, 24,140,112, 85,129, 45, 87,204, 46,159,
-177, 60,125,198, 96, 50,225,141, 93, 77, 51,217,165,176, 17,165,129,243, 89,201,249,108,193,162,172,104,154,150, 36,146,164, 78,
-161,107, 79, 36, 29,185, 18, 12,116,204, 80, 71,136,129,101, 56, 84,188,122,119,196, 43,247,238,113,235,224, 6,183, 14, 15,216,
-191,117,155, 63,251,240, 17, 79,166,115,116, 57, 37, 81, 14,111,204,250,192,235,255,126,185,222,103, 43,148,208,168,200, 19,231,
- 25,101,227, 65, 9,170,203, 57,222,199,196,194,177, 90, 45, 89, 46, 11,236,206, 46,198, 7,121,102, 20, 39,100, 58, 34,201, 18,
-150,243, 25, 46, 15,129, 50,117, 83,115,114, 62,195,189,246, 10,174,147,234,201, 40,184,119,121, 23,166, 93,215,217,110, 6,168,
- 60,236,208,125, 71,138,236, 97,245, 62, 64,197, 91,215,161,224, 98,189, 59,151, 62, 16, 28,165,148, 27,103, 69, 64,250, 14,218,
-127,206,200, 70,136, 45, 34, 84,215,244,175,225,120,239,215, 83,125,223, 89,123,215,201, 45,165, 66,168, 14, 57, 91,115,124, 66,
- 99, 34,163, 8, 45, 4,222,152,245,225,239,187,117,218,141, 27, 55, 56, 62, 57, 37,138, 98,164,144,156,159, 95,112,120,176,191,
- 38,251,246,219,134, 52, 86, 12,243,152, 27,251,187,188,249,250,171,204, 93,204,189,187,119,137,133,103,118,126, 78, 60, 24,178,
-191,179,195,217,201, 49, 35, 59, 97, 48, 25,211,182, 45, 34, 10,141,151,247, 48,222,219,193,123, 67,146,231,220,123,248, 26, 77,
-213, 98,235, 10,239, 97,177, 90,146, 88, 67, 58, 25,132, 21,153, 49,168, 72,161, 85, 4,141, 33, 73, 34,108,211,160,140, 13, 48,
-189, 8,102, 51,206, 74, 44,182, 75,120,244, 84,117, 29,164,125,109,139, 23,130, 69,177,226,106,182,192,186,128,252,214, 77, 13,
- 46, 20, 62, 29, 69,100,113, 28,100,154,198,130,148,129,223,227, 45, 74,107,146, 44,227,232, 96,151,252,198, 17,227, 60,165, 92,
- 53,244,158, 90,253, 81,118,113,113,201,187,239,191,199,131,251,247,137,243,140,186,110,208, 4,228, 96,190, 88, 96, 14,242,206,
- 75, 94,116,150,192,178, 35, 93,138,142, 47,242, 25, 28,119, 99, 7,117,125,225,189, 46,250,219, 81,215,189,106,200,154,237,130,
-110, 3,105,110, 93,212,221,186, 78,189,216,146,123,243,239,232,139, 58,191,109,195,224, 61,124,203, 11, 32,113,177, 69, 76,186,
-166,105,247,108,197,169,242,194,157,253, 54, 61, 63,232,213,197, 90, 63,187,173, 5,253,188,232,213,207, 51,191,241,226,197,223,
-217,203,185,232,211,119,156,219, 42,210,174,139, 78,164, 43,150, 91, 28, 3, 33,122, 48,230,165,127,139, 16, 2,215,191,121,197,
- 38, 30, 86, 10, 9,182,165,169,107,202, 85,193,211,143, 31, 49,201, 19, 86,203, 75,156,111,152,207, 47, 56,216, 25,113,118,242,
- 9, 7,163,155,252,236,131,255, 47, 85,253, 14, 41,158,199,143, 62, 98, 48, 28,112,242,248, 19,174,102,223,162,188,188, 98,249,
-244, 9, 77, 49,133,213,105,144,121,181, 37,170,158,209, 10, 75, 83,214, 33,209, 71,117, 69,187,143,146,220,138,109,124,222,116,
- 72, 73,191, 49,148, 17, 27, 66, 93, 56,168,196,218, 52, 70,116, 65, 25, 10,137, 70, 16, 17, 58, 88, 37, 21, 74, 40,116, 7, 91,
- 43, 41,187,162, 30,220,236,172,243,140, 7, 49,245,252,140,129,214, 76, 43,139,109, 29,151,103,231, 28,221, 56,164, 44, 11,234,
-170, 64, 71,146,197,213, 5,243,229,130, 76,199,164,122, 64,107, 44, 85,211, 96,157, 71,201, 16, 4, 18, 71, 10, 99,131, 72, 93,
-171,132, 7,119, 30,208, 46, 87, 92, 93,158,176, 63,212,172,204,170, 27, 71,195,225, 44,112, 88, 97,176, 17,120, 37,240,145,192,
- 9, 27, 14,116,103, 17,222,160,108,180,158,218,193, 62,151,246,183,185,166,134, 56, 38,145, 68,168,240,220, 40, 17, 97,188,197,
- 71, 96,171,118,157,235,173,132, 70, 58,137,112,193, 96,169,238, 7, 54,239,193,182,161,121,232, 44,195,109,219,160,132,198,137,
- 8, 17, 37, 24,231,186, 92, 97,137,198,227,150,167,220, 31,198,136,113,130,136, 29, 55, 14, 94,227, 71, 31, 61,227,191,249,131,
-159,241,246, 43,135,164,206,176, 59,136,153,236,238,147, 68,193, 53,207, 90, 71, 83,172,216,207, 34,108, 36, 24,103,150, 91, 34,
-194,140, 38,148, 85, 96,233, 71, 64, 18, 57,178,200,145, 68, 53,251, 59, 57,131, 76, 51, 24,230,220,188,117,192,120,146,147,100,
-251, 72,189,131, 31, 30,242,232,233, 25,167,159,126, 8,205,130,178,184, 36,157,140, 66,177,140,100, 8,254, 80,225, 26,178, 62,
-188, 86, 1,100,247,228, 73, 76,107, 20,205, 32,162,172, 64, 69, 51,204,170, 96,146,104,166, 39,103, 92, 29, 79,185,127,120, 27,
-225,107, 4, 21, 24, 24,231, 57,190,109, 72,117,196,106, 89,176,179,191, 79, 18, 55,204,202,150,147,249,146, 52,206,137, 37, 68,
-174, 5, 37,113,113, 26,136,110,184, 96,197,185,245,250, 41, 25,225, 59,221,250,218,104, 70, 8, 84,164, 59, 69, 71,192,116, 69,
-159, 85,237,183,172, 96,251,179,161, 91, 21,246,252,141, 30, 82,239,237,164,125,159,124,232, 2,119,162, 71, 9,144,178,243, 82,
-232,179, 46, 66,211,128, 20,200, 36,134,214,116, 69, 45, 52, 71,189,221,172,148, 2, 21, 71,152,214, 32, 68,248,221, 28, 30,169,
- 20,119,238,221,230,244,236, 28, 37, 34,202,162, 97, 54, 43,200,243,172, 35,246,129,140,163,255, 31,107,231,217, 35, 89,146, 94,
-231, 39,204, 53,233,203,118, 87,251,158,153,229,206, 82, 67,129, 2, 41,174, 0,126, 89,254, 0, 9,144,126,182, 8,154,221, 89,
-106,199,187,158, 54,213,229,211, 93, 27, 70, 31, 34,238,205,204,106, 55, 43,237, 0, 5,244, 20,186,203,100,221,138,120,205, 57,
-207, 33, 69, 50, 28, 85,140,167, 67, 14, 78,142, 57,218,123,132, 28, 14, 40,150,151,248, 85,205,129, 78, 88,173,231, 40,237,104,
-138, 18, 45, 53,214,120,246,166, 99,178,196,209,214, 45, 73,166, 65,196, 66, 69, 75,146, 73, 78, 50, 74,113,237, 0,125, 48,237,
-139,120, 76,139, 18, 18, 95, 53, 65, 29,230, 27,132,111,208, 13,216,198,115,189, 88,178, 46, 86,204,102, 99, 70,217,128,170, 89,
- 96,189, 64,165, 25,251, 7, 7, 97,215,236, 12, 22,201,197,197, 53, 6,133, 74,242, 32, 24,116, 14,169,160,105, 67,129,147, 9,
-135,114,109, 88,109, 38, 41, 94, 10,108, 83, 65, 85,179,242,154, 86, 42,102,153,226,175, 30,158,112,254,213,243,240,123,142, 11,
-241,184, 78, 96,156,225,223, 62,255, 87, 62,249,239,255,131,147,135,159,114,245,243,215,204, 38, 5,215, 55, 23,228,147,156, 85,
- 49, 4, 63,140,182, 70, 13, 50, 32, 94,149, 16,104, 33,208,194,247,206,162,224, 47, 17,193,238,186,109, 43,101, 51,189,243,236,
- 90,133,165,143,171, 42, 31, 18,223,108, 15, 60,139, 34, 93,103, 99,200, 81,231,101,241,111, 52,146,219,247,154,254,165,227,235,
-219, 59,117,239,119, 7, 13,239,203, 78,191,189, 23,247,189,134,233,255, 95,228,246,151,218,167,223, 14, 45,233,157,132, 91,222,
-236,247,141,226,111,119,234,239, 10,200,145,114,183, 0,112,214, 5, 10, 92, 81,113,116,112,196,197,217,107, 38,163, 1,215, 23,
-231,140,135, 3,230, 55,151,220,125,244,132,114,189,228,250,250,156, 44, 81,156,190,122,198,253, 59, 39,156,190,252,137,249,229,
- 37, 26,199,247, 95,126,129,175, 43,174,127,254, 30, 95,175, 16,245,154,166, 42,177,150, 88,213,111, 56,225,155,239,211,191,231,
-245, 20, 59,180,185,174,211,238,172, 92,206,197, 3,138,160,238, 15,220, 30,143, 87,126,131,123,239,244,214,221,222,144, 77,146,
-159, 82, 2, 83,175, 81,126,134,173, 27, 18,160, 92,205,153,237, 77,105,202,146,155,171,107,148, 78, 89,175,214, 24, 27,112,164,
-206, 85, 28,223,185,203,213,245, 77,232,194,132,196,251,224,111, 22, 66, 81, 46,214,225, 82,140, 35,173, 39,143, 31, 99,235, 53,
- 69, 81, 34,124,136, 14, 13,236,116,139, 54,161, 51, 40, 68,131,214,157,189,184,139, 91, 13,157,181, 82, 46, 6,125,185, 29, 26,
-225,142,152, 84, 38, 28,230, 97,111, 41,164,198,118,101,158, 8, 74, 91, 31, 49,111,225, 53,151, 72,153, 32,101,139, 84, 33, 28,
-198,251, 77, 84,157,113,174,127, 70,124,204,212, 14, 95,115, 44,162,226,170, 68, 75,133, 16, 22,111, 75,164,183, 40,175,200, 82,
-201, 63,252,230, 33,147, 92, 34,244,128,155, 69,201,179,159,151,224, 44,199,211,140,163, 81,194,131,253, 17,123,195, 28, 47, 18,
- 28,208, 82,224,189, 5,229,152, 78, 4, 16, 72, 85,169,134, 68, 89,198,131,148,201, 56,101,111, 54,227,254,253,251, 76,166, 51,
- 90,227, 73,210, 9, 94, 40,190,251,241, 75,170,245, 53,216, 37,195,180, 69,232,113,188,124,130,224, 76,117,163,202,142,199,174,
- 18, 16, 10,229, 19,132,213,100,153, 38,111, 37,217,176,101,124,247, 16,245,172, 38,183,142,124, 24,232,121,235,170,164,172,215,
-172,150, 11, 70,119,198,164,105, 74, 85,213,100, 89, 32,206, 57, 23,200,105, 66, 42,126,248,249, 37,247,143,255,154,134,240,179,
-208, 74, 98,125,139,240,250,205,137, 98, 7,143,233, 85,237, 27, 10, 29,221, 51, 42, 4,214,155,254,176, 18, 91,222,243,119,165,
- 73,110,176,195,113, 57,222,235,130, 58,130,162,221,141, 38, 20, 98, 11,231, 33,250,173, 76, 80,234,107,100, 95, 56,135,202, 58,
- 16, 19,227,199,143,193, 82,200, 96, 77, 28,140,134,220,149,119,120,241,243, 43,188,247,188,124,249,138,227,227, 67,246, 15, 14,
- 34, 27,220, 33,132,103, 52, 30,161,179,156,241,116,159,209,221,187, 60,126,252,148,139, 83,137,169,214, 52,206, 51,217,219,227,
-234,250, 18, 33, 4, 55,151, 87, 28, 28, 28,113,115,125,201,157, 7, 67,202,186,100,224, 71,136, 68,134,108,129,173,213,163, 16,
-130, 52,203, 67,224,114, 20,184, 73,209, 77, 50, 60,222, 88,108,107,208, 73, 70,213, 86,156, 95, 92,208, 52, 13,206, 26, 4, 81,
-131,224, 61, 90, 4, 34,156, 49, 13,206,180,148,141,165,181, 6,148, 98,177,152,179,184, 58,103,156, 73, 82,173,169,235, 10,103,
-108, 88, 87, 52, 13, 89,146, 80, 52, 21,137, 82, 76, 6, 67, 26, 19,108,199,179,201, 24, 83, 87,252,227,223,255, 23,254,227,199,
- 83,230, 85, 29, 9,147, 61,144,156, 47,190,250,130,197, 63,253, 19, 39, 39, 39, 60,255,250,143,232,196, 50, 73, 20, 77, 93,115,
-117,125, 67,243,224, 24,239, 69, 23,252, 23,169,154, 50,230,104,108, 66,131,250,181,249,123,118,182,254, 45, 19,223,221,168,235,
- 24,165,106, 67,215,110,141,197,110,197, 91,127,232, 63,253,161, 49,250,251, 20,231,191, 68,161,190, 43, 16,217,126,200,253, 95,
- 72,177,206, 95,236,227,236,196, 33,238,248, 0,253, 95,228,107, 20,183,118, 48, 97,252,100, 41,214, 5,179,241,132, 97,150,240,
-211,203,103, 28,156, 60,228,230,234,146, 71,247,159,242,252,187,239,120,122,231,144,225, 48,163, 88,223,176, 55,155,112,113,241,
-130, 59,251, 83, 92,187,230,250,244, 5,163, 68,115,254,252, 57,162,109,120,249,221,215, 20,151,175,176,179, 67,202,170,192, 20,
- 77,175,118, 15,138, 99,191,133,171,220, 21, 36,190,115,213, 17,167, 38,155, 46, 94, 6,187,151,148,120,103,250, 7,209, 56,131,
-178, 18, 47,193, 57, 17,223,108,188,220,229,142,232, 80, 74, 79, 91,174, 41, 22,151, 20,203, 5,249, 96,130, 18, 83,234, 34,120,
- 81,199,147, 25,243,197, 10, 17, 73,125,121,146, 49,153, 78,169,170,130,182,174, 66, 20,165,177, 8,149,144,102, 57,109, 99, 2,
- 2, 87, 64,150,104, 4,142, 84, 13,152,205,102, 92,158,189, 38, 79, 20,180, 6,161, 4,173,105,144, 74, 4,101,176,119,164, 73,
-160,176, 73, 17,194, 48,148,148,224,235, 48, 86,147, 30, 41, 93,159, 57,191, 1,125,138, 24, 69,105,248,245, 71,247,208, 82, 96,
- 35,173,174, 43,106, 36, 14, 37,125,111, 11,236,236, 85,170,213,241, 99, 5,216, 77,247,172,133,139, 60,142,136,165, 8, 10,225,
-232,201,237, 10, 76, 25,166,213, 33,239, 28,144,210,163,125, 13, 86,144,139,150,223,126,114, 68,105, 20,167, 67,205,252,112,194,
-217,162,228,231,179, 75,150, 45,156, 94,157,115, 48,204, 24,103, 34,250,234,161,109, 29,163, 97,194,120,152, 98,218, 18, 79,232,
-196,108,219,130,202, 64, 15,200,198,251,136,100, 76, 81, 43,132, 72, 89,175, 27,230,203, 83,174,111,206, 80,162, 33,147, 6,172,
- 67,144,224,172, 15,204,118,228, 6,203, 42, 58, 54,122,160, 38,122, 23, 10,198, 60, 79,105,189,166,182, 65, 40,116, 84,214, 52,
-175, 46, 67,100,107,174, 89,212,107,238, 29, 30, 49,191,153,135,142, 84, 6,218, 64, 85,215,148, 77,205,120, 60,101, 54,155, 33,
-181,228,244,234,146,207,191,125,198,103,191,126, 10,137,100,164, 28,137,112,224, 37, 66,167, 17,241, 76,100, 13, 56,164,151, 72,
-173,183,194,135,182, 14,230,174,240, 20,201, 45, 1,172,232, 33,159, 27,135,144,220, 28,206, 91, 80, 43, 47,101, 24,242,137, 46,
-248, 58, 20, 58,222,219,126, 29,215,141,253, 3, 17, 80,246,254,116,175,162,192, 88,138, 80,160, 90,135, 51,166,215, 61, 8,165,
-194, 86,117, 11, 83,223,182, 45, 74,107, 14,143,143,120,249,242, 37, 30,207,233,235,215, 8, 41, 57, 60, 60, 68,225,209,198,209,
-164, 25, 22,197,116,255, 0,148, 38, 31, 14, 24,140, 39, 44,173, 69, 8,205,195,199, 15,131, 86,164,105,194,115, 96, 91,188,179,
- 76,247,246, 25, 78,166, 24, 95,163,253,102, 61,231,108,232, 29,149,212,225, 87,220,250,157,134, 79,106,141,183, 6, 15,100,105,
- 74, 34, 37,171,186,230,230,242, 10, 1,225,242,118, 41,120,195, 40,207, 24, 14, 50,242, 44,165,174, 26,156,183,220, 44, 87,209,
- 50, 40, 16,206,146,231, 41,131, 52, 76, 95,150, 55,107,134,131, 65, 16,152,121, 79,166, 36,149,179,248,186, 70, 9,205,217,217,
- 41,185,148,100, 90,163,128, 7,135,251,252,245,147,251,252,219,215, 63, 80,223, 58,210, 23,203, 21, 95,124,243, 53, 79,143,142,
- 73, 6, 35,140,107, 88, 44,150, 40,157,176,200, 37,243,197,138,201, 40, 3,239,122,160, 83,215, 4,116, 69,235,110,170,229,219,
-111,247,157,145,123, 28,199,191,237, 66,183,182,179, 17,219, 24,218,226,223, 41,198,126,227, 82,191,109, 69,219,254, 71,183, 57,
-235,183,187,116,241,150,209,252, 59,139, 4,255, 97,139,219, 27,159,243,255,225,226,220,254, 58,223,120, 49,197,251, 69,119,111,
-223, 80,248, 91,170,185,219,175, 9, 59,123,146,247,126,125, 93, 7,183,165, 12,247, 24, 90,211,226,173,101,113,115, 5,182, 33,
-213,130,171,139,107,154,163,187,212,213, 10,103, 42,246,166, 51,230, 55,151, 60,152,229,188,124,249, 2,211, 20,248,118, 69, 57,
-191, 64,154,154,243,151, 47, 17,198,177,184,188,128,182,192, 86, 75,240,142,117,177,238,187, 17,231,123,157,100, 47, 23,216,134,
- 92,109, 48,213,193,167,219,117,230, 93,122,144,234,213,238, 49,241, 74,200, 64, 83,179, 29, 41,207,210, 24,135,199,145,110,169,
- 58,117, 28, 85,117,194,186,208,117,120, 52, 13,213,106,142,111,214,180,180, 56,103,200,211,132, 60,145, 72, 28,214,180, 12,178,
-140,245,186, 32, 85,146, 98,185, 64, 40, 73, 34, 65,102, 9,109,162, 89, 23, 53,165, 13,234,208,245,170,160,108, 26,116,154,147,
-104,141,113,146,131,131,163, 16,126,225, 26, 76,219, 96,155, 22,239,131, 55, 91,250, 20,239, 29,117,171,240, 46, 12,206,100,180,
- 30,117,151, 38,120,148, 14,218,128,206,235, 45,162, 14,195, 57, 75, 91,213, 76, 70, 31, 33, 69, 64,199,134, 75, 61,240,106,125,
- 79, 84, 12,235, 22,143,235,125,198,206,219,184,161,234,132,136,225, 96,240, 46, 20, 68, 2,143, 82, 93, 1, 40, 67, 39,227, 92,
- 4, 49,135,177,177,210,138, 84,117, 81,165, 14,231, 42,132,107,201,132,100,239, 40,101,209,122, 30,204, 38,156, 78, 18, 94, 94,
-172, 88,213,130,186, 82,164,171, 5,182,109,201,147,132, 81,150,177,186, 94,115, 57, 47, 80, 2,164, 76,194, 56, 90, 56,100,166,
-217, 31, 28,224,146, 9,175,231,107, 50,221,224,141,227,102,126,142,144, 53, 74, 5,244,176, 21, 97,156,109,241,104, 45,122,251,
-235, 78,170, 99, 12,132, 23, 66,162, 85,130, 80, 26, 33, 82,172,132,214, 11, 74, 60,119,239,223,163, 92,183,168,241,136,162, 42,
- 57, 78, 52, 69, 85,146, 38, 65, 40,102,140, 65, 39, 9, 58,181, 12, 6,195,128,204, 52,150,147, 59, 71, 36,105,202,231, 95,255,
-192,201,195,199,228,195, 1,178, 41, 73, 50,209,163,113,149,146,155,217,148,183, 81,184, 22,198,222, 97,226, 18, 87, 98, 29, 80,
-198,111, 39, 81,110,159, 27,162, 23,252,117,127,238, 45, 82, 81,188,230,133,140,107,187, 77, 48, 12, 46,124, 14,108,252,123, 46,
-174, 26, 69, 32,198, 9,223,237,234,163, 55,222,249, 72,179, 11,197,166,143,188,131,109,171,166,237,192, 37,125,177, 28,136,126,
-143,159, 60,142,204,125,248,241,167,159, 72,210,148,189,189,125,156, 51,212,198,179,172, 45,227,189,187, 52, 50,163,174, 42, 38,
-179,125,234,198, 4, 44,233,186,228,206,201, 9, 87, 23, 23, 12,242, 1,211,201,148, 27, 4,167, 23, 55,220,123,120, 72,154,133,
- 51,171, 11,111,234, 9,146,209, 69,227,227, 58,206,123,143, 55,109,111,117,117,214, 50,200,114, 92, 83,210, 20, 21,151,151,151,
- 56,167,130, 19,195, 91, 18,173, 34,226, 88,160,117, 74,221,180,212,109,205,205,124,201,170,172, 73,179,140, 65,158,161, 49,164,
- 74, 98,234,154,170, 44, 56,216,223,199,182, 13, 94, 73,218,182,162, 42, 10,154,178,162,170, 91,158,189,120,205, 32,207, 24,102,
- 57,197,106,193, 64,122, 62,125,116,194, 87, 63, 62,167,174,154,158,186,232,227,239,243, 31,254,248, 57,159,253,207,255,197,221,
- 7, 15,248,254,219, 47, 72,135, 21,117, 94,114,113,102,121,254,226,140, 79,127,245,164,127, 60,182, 51, 0,164,216,141,247,221,
-209, 90,253, 25,140,182,205,197, 30, 47,243, 91,124,144,247,221, 47,219, 91,118,253, 46,171,218,219,178,198,111, 95,248, 31,186,
-200,223, 45,110,123,123, 2,220,187,198,254,239,178,197,189, 79, 0,247, 86, 17, 94,119, 40,255, 2,193,222,198, 59,176, 27, 5,
-251, 46, 84,237,135,194,101,118, 57,211, 91, 57,206, 66,210,180, 45,197,122,197,252,250,138, 52,203,105,202, 53, 77, 85, 80,174,
- 87,216,182,161,169,215, 12,210, 28, 83,215,152, 90,211, 84, 21,197,170, 32, 85,142, 76,183, 12,114,197,249,249, 57,123,123,146,
-178,106, 73,146,140,211,211, 87, 8,185, 31, 30,134,232,135,237, 66, 77,132,163,127,223,110,221,226,145, 94,198,113,249, 46,198,
- 87,198,162,168, 59,156,164,220, 68, 5,134,157,160,236, 31,190, 16,126,211, 6,116,168,181, 40,173, 66, 52,103,236,208,113, 2,
-173, 60, 10,203,245,229, 37,152, 18,169, 21,249,168, 65,120,199,104,118, 68, 83, 23, 40, 5,203,197, 53, 74, 40,234,170, 33,201,
- 18, 50,157, 83,196, 27, 51, 28,132,129,180, 50, 26, 13,153,207, 23,228,105, 66,107, 27, 90, 27, 32, 42,163,201,148,117, 89,161,
-124, 67,158,165, 36, 89, 66,219, 84,168, 84,163,148,192,154,182,215, 7,180,214,160,108, 80,105,219, 72,246, 18, 2,234,218,199,
- 12,117, 21, 82,144, 98,101,222, 54, 53,153, 20, 28,204,114,164,111, 81, 74, 97,141,136, 5,142,195, 69,165,123,208,105, 4, 16,
-141,139,227,212,144,228,234,251, 50,193,119, 56,208,110, 84, 26,211,187,122, 74, 84,212, 37, 40,161,130,160, 47, 73, 3, 84, 38,
-238,134, 37, 32,125,224,127,163, 66,103, 58, 83, 45,251,153,228,193, 40,229,179, 71,143, 40, 93,206,207,175,175,104, 76,141, 66,
-177,156,175, 72,146,140,225,100,134,109, 91,156,177,180,181,161, 40,215,180,198, 34,179,150,233,186, 65,103, 5, 89, 38, 57, 63,
-127,133,162, 1, 12, 89, 18,214, 28, 66, 37, 32, 19,172,209,160,194,247,215,253,186,134, 58, 94,246, 92,134, 16,160, 34, 17, 90,
-163, 85,134, 64,147,225, 25,142,114, 70, 66,210,150,142,187,143, 31, 50, 60, 60,166, 82, 50,250,185, 37, 69, 85, 49,172,234,144,
- 76, 40, 36, 77,211, 50,153,104,132,212, 44,150, 43,244,133,102,186,127,128, 74, 71,252,233,155,103,148,235, 3,254,234,225, 33,
- 2, 71,150, 6,176,137,142, 89,229,157, 85, 77,244,226, 77,181,217,143,239,172, 4,217,217,153,203,109, 20,246, 54, 41,206,135,
-117, 73,127,176,198,238, 43, 14,102,122, 17,169,144, 91,129, 82,253,199,140,231, 70,180,254,137, 24,244, 18,186,244,216,217, 27,
- 11,194,135,120,223,206,188, 20,207, 38,105, 68, 88,175, 25,211, 39, 46, 90, 60, 58, 85, 60,253,228, 99, 94,190,120, 73, 99, 90,
- 94,189, 62,163,110, 90,246,102, 7,220,172, 27, 26, 82, 70,163, 41,190,117, 44,230,215, 32, 4, 39,247,238,243,195,247,223,113,
-250,250,140, 79, 63,253,132,229, 98,137,115, 33, 55, 60,205, 6,188,124,125,198,175, 42,208, 3, 69,154,110,242, 60,148,210, 72,
-233,113,241, 2,239,194,133,132,214,193,110,102, 29, 74,120, 18,173, 73,210,148,122, 49,103, 57,159,115,254,250, 2,185,119,191,
- 15,183,113,214,162,133, 66, 42, 77,107, 60, 22,199,171,179,115,170,198,177, 88, 44,200, 7, 57,195, 44, 65,227,184,119,112, 66,
- 85,174, 67,252, 46, 14,219,182,120, 31,166,134,235,117,136,116, 45, 91,207,233,213,146, 39, 31,125,138, 49,142,225,112,194,226,
-230,156,167,247,142,153, 12,114,174,171,134, 91,230, 51,126,122,241,156,162,173, 57,188,119,159, 47,190,248, 19,117, 85, 81, 23,
- 37, 2,207,235,243,107, 62,254,248, 81,152,192, 73,185,123,119,137,109,207,248, 27,179,245,173, 80, 43,241,166,183,106, 59,233,
- 52, 22,136,187,232,109,215,123,218, 63,212,132,246,150,182, 55,216,222, 31,176,144,237,236,198,223, 33,164,123, 43,221,109,231,
-255, 63,172,178,127,219,110,254,109, 35,227, 15, 5,186,236,252,123,241,238,170,169,243, 16,238, 92,208, 91, 72,191,119, 1,122,
-186,185,219, 47, 25,141,116, 35,248, 0, 56, 81,125, 23, 38,165,164, 44, 66,122,219,253, 39, 79, 41,150, 55,224, 12,235,197,156,
-193, 32,101,121,115,197,112, 48, 98,113,125,131,244, 67,234,162,101,117, 83, 49, 26,230,204, 23,175,152,206,198, 92, 95,174, 73,
-235,148,239,159,189,230,228,222,148,124, 48,101, 93,102,100,121, 0, 89,236,132,115,138, 55,189,142,221, 51,231,162,143, 57, 48,
-196, 5, 82,111,228,239,178,227,229,139, 78, 64, 24,154, 10, 41, 36, 22,130,133, 41,178,238,187, 12,122,105, 36, 74,134, 28,107,
-165, 84, 44, 44, 36, 9,160, 83, 40,218,154, 73,166,201,178, 12,108, 67,185,190,198,122, 71, 58, 58, 96, 56, 24,160,181, 36, 79,
- 51,112, 3,164, 18,172,203,134,166, 42, 80, 73,142,109, 91, 6, 89, 78, 89,213,220, 92, 95, 49, 26,229, 97, 45, 80, 24, 60,142,
-186,110,201,243, 33,149,243, 92, 92, 47, 72,148,100,152,106, 6,169, 98, 58, 26,162,147, 64, 58, 75, 34,160,196, 89, 29,198,163,
- 34,116,115, 74, 73,156,179, 32, 44, 74,105,180, 22, 49,123, 62, 28,228, 90, 37, 28, 79, 82, 6,105,200, 23,111,157, 3,161,227,
-248,204, 96, 93, 11, 94,245,137,127,155,103,105,115,113,171, 56,194,115,193,114,143, 19, 97, 60,188,161,253,133,169,138,150, 33,
- 16, 69,136,168,184, 85, 10,165, 18,180, 78,251,231,207, 25,131,183, 38, 74,113, 36,194,121,116, 83,129,179, 12, 85, 67,226, 20,
-159,221, 29,208, 38,147,120, 8, 30,147,232, 64,226, 90,175,214, 76, 38, 99,188,131,197,124,206,197,213, 57,143, 31,159, 48, 25,
-229,184,182, 96, 93, 86, 72, 95, 35, 68,141,179, 38,230,199,131, 67, 97, 93, 80,146,135, 61, 35,177,112,233,138,153,205,159, 65,
- 69,248, 76, 20,120, 73, 65,146, 42, 50, 36,114,109,145,249,128, 50, 11,132,191, 59, 7,119, 25,231, 99,202,186, 66,103, 57,117,
-211, 34,171,154, 89,228,124,183,198, 4,128,211,222, 30,147,201,140,253,189,125,206,206, 47,248,246,219, 31,152, 95, 95,130, 23,
- 60,190,127,135, 3, 21, 28, 4,206,249,224, 25,223, 66,179,118,209,194,157, 2,222, 58,183, 51,181,146, 66,246,200,118, 27,139,
-174,254, 32,222, 58, 76, 58, 1,176,148,170,239,180, 2, 59, 62,248,205,195,103,218,196,175,122, 21, 38, 86, 62,242, 26,112,193,
- 50, 8,190,167, 82,246, 22, 60, 37,250,181, 79,167, 83, 9,157,190, 71, 8, 23, 98, 97,189, 38,213, 73,252, 91, 14,161, 82,144,
-146,199, 79,159,112,117,121,205,124,190,224,217,243,231, 92, 47, 74,174, 10, 79, 54, 59, 98, 94, 52, 60,126,112,159,166, 46, 57,
- 61,187,224,227,143, 62, 65, 75, 73,146,167,252,248,253, 15, 76,166, 83, 22,139, 37,199,119,238, 83, 87, 13, 74,231,124,241,229,
- 51,126,247,187,207,240,126,213, 39,147,120,231, 66,216,139, 12,209,180, 97, 20,110,251, 24, 92, 39, 37,182,173, 81, 8, 92,107,
-169,214, 5,231,103,231,180,117, 69, 46,130,213,179,181, 6,225, 58,124,171,162,170, 91,206,111,174,185,188, 89,134,220,112,239,
- 24,141,134, 92,157,157,242,240,238, 17, 82,120,188,181,164, 73,130,183, 21, 78, 56,108, 3, 42,213,212,198,112,122,126,197, 55,
-207, 78,145,195, 25,217,112,128, 74, 51,234,186, 65, 10, 24,106, 73,162,211, 55,218, 92, 47,161,172,107,254,240,199,255,224, 31,
-254,246,111, 25,205,246, 89, 45,151,164, 82, 50, 24,142, 49, 46, 52, 76,233,214,221, 35,227,219,238,157,182, 61, 78,167,231,186,
-227, 92, 95, 60,184, 45, 4,247,155, 59,245,120,137,119, 29,186,219, 85,201,191, 43,200,108,123,236,175,127,145,231,252, 29, 59,
-243,219,234,247,219, 29,240,159, 19,193,250, 54, 81, 93, 63,222,126,163,243,125,119, 71,252,190, 53, 66,191, 54,120,151, 53,111,
-171,186,242, 59,246,131, 15,239,224,111, 95,234,111, 47,110,216,216, 32, 98,231,213,237, 28, 87,171, 21, 90, 4,149,108, 91,149,
-164, 42,167,170, 10,142, 15, 15, 88, 46, 22,220, 59,184,195,233,179,151, 52,163, 49,206, 8,156, 85, 97,164, 53,212, 12, 71,119,
- 40,202,215, 28,222, 57,193,122,195, 71,159, 62, 97,189,170,241, 85,194,104, 10, 69, 85,243,253,179,111, 99,117, 29,191, 47, 47,
-222,254, 2,136,240, 32, 18,253,231,194,196,252, 61,185,177,248,109,132,118,155, 2, 74, 18, 15,199, 14, 59,235, 28,222, 5,212,
-110,107,226,197,216,161, 58,145, 88, 41,144,195, 33,180, 41, 22,207,186,168,152, 76, 70,224, 26,230, 55, 23,136,178,230,240,206,
- 3,172,177, 56, 41,104,234, 10, 15,180,198,145, 38,138,214,182,161,147,104,215, 64,216,131,183, 54,236,247,243, 60,165,172,154,
- 32,216, 65,176,183,119,196,243,235, 27, 42,235, 89,151, 13, 73, 9, 87,203, 50,192, 54,178,132,113,166, 24,164, 58,224, 87,195,
-214, 53,174, 74,194, 84, 66, 73,223,139, 97, 68, 20,231,133, 98,204,115,239,100,136, 32,236,243, 93,228,192, 91,103,113,222,108,
-186, 47,239,240,222, 68,123, 81, 80,222,122,111,227,243,227,122,172,171,144,160,147,104, 28,217, 74,209,235,158,147, 52, 73, 72,
-146, 20,173, 21, 74, 71,229,182,232,216,244, 97,143,235, 44,200,122,137, 3, 26, 20, 75, 47,240,164, 72,227, 72,156, 65,214, 37,
- 42, 90,148,146, 52, 39,145, 13,179,125, 73,122,178, 23,145,169, 32,213, 61, 90,115,140,107, 45,174,109,240,141,192, 9, 69, 93,
-121, 90,239, 17, 54,160,113,133, 22, 52,182, 6, 74, 18,173,208, 62,199,123,221,123,168,119,138,122, 73,191,103, 23, 66, 5, 90,
- 91, 28,183, 6, 86,178,227,244,250,138,102,152, 80,181, 53,199, 22,206, 95,189,198,198,174, 90, 39, 58,144,208, 70, 99,180,210,
-177, 75, 12,151,104, 85, 86, 44,174,111,184,127,247,132,182,108, 40, 43,203, 87, 63,156,114,113, 83,241,217,227, 41, 15, 14, 71,
-164,121,138, 74, 37, 50, 6,180,120,182,216,239, 91,150,219,141, 55, 61,218,151,162, 75,100,251,236,184,109, 95,186,221, 76, 72,
- 69, 4,196, 16, 62,159,143,135,122, 28,151,247, 21,244, 54,106,214,198,247, 59,136,232,174,222, 93,209,243,230,183,153,160,194,
-133, 0, 26, 66,193, 25,156, 6,146, 44, 77, 55,184,100,224,248,248,152,201,120,194,243, 23,175,248,241,217,115,174,234,132,189,
- 7,191, 70,249,132,213,106,201,195,251,119,121,121,250,138, 23, 47,126,230,238,241, 33,175, 78, 95,133,108,240,241,136,214, 58,
- 94,159, 95, 48, 26,206,152,238,221,229,230,250, 25,175,207, 23,220, 57, 74,241, 62,140,224, 93,219, 6, 20,177, 78,194,100, 66,
- 8,124,235,240,198,198, 72, 91,141,183, 45,222,134,223, 15,219, 26, 94,189,120,201,193,225, 1, 23,101,137,101,218, 23, 69,206,
- 5,177,221,243, 87,175,153,175, 87,120, 21, 38, 53,195,225,128,170, 44, 25, 13, 6, 28,236,207,112,198,160,113, 8,103,112,222,
- 96,188,195,122,112, 62,197,120,207,179,103, 63,243,167,111,126,230,240,163,207,112, 72,156,144, 84,198, 50, 30, 12,152, 74,141,
- 78,146,216,180,108,203,133, 67, 36,235,239, 63,255, 3,191,253,251,191,231,233,199,159,240,167,127,253,103,152,132,159,213,124,
-177,226,252,236,130, 71,119,199,187, 23,130,216,118,103,177,181, 23,183, 59, 35,116,209, 77,112,252,230, 57,232,166, 52,221,159,
-157,117, 49,193,210, 97,157,141, 54, 54,215,167, 95,190,237, 50,239,223,196,230,255,181,247,219, 8, 81,113,107,111,252,230,212,
-222,111,117,120,219,250,247, 55,162, 78,125, 64,223,201,237, 76,225, 91, 31,243, 93, 2,188,157, 34, 65, 8, 92, 63, 6,143,196,
- 39,215,133,109,244, 31,181, 55,246,203,173, 69,113,223,144,118,163,227,248, 11,189,179,199,232,188,102, 62,170,127,125,176, 13,
- 56,100,200,172,246,193,143, 42, 98,116,159,187, 29, 2, 19,171,230,136,240,221,161,226,117,163,153, 78,152, 38, 17, 17, 90, 96,
-209, 66, 96, 99,182,179,151, 18,153,104,218,170,160, 92,173,240, 6, 84, 54, 96, 93, 87, 60,202,135,204, 87, 43,134,105,194,157,
-195,125,188, 82,124,244,201,175,201, 71, 3,158,124,244,119, 12, 7, 35, 38,179,187,220,220,120,178,116,192,183,223,125, 73, 81,
-173,152, 30,222,225,186,146, 72,165, 73, 7, 73, 88,211,181,126, 39,200,226,109, 21, 74,119, 41,123, 39,227,229, 19,121,229, 90,
-198,221,169,136, 62,106,177,197, 62, 8,145,174, 68, 4,172, 36, 4, 86, 56, 39, 67,232,139,216,222, 47, 57,132, 15, 41, 83,131,
-193, 8,161,160,117, 13, 82, 67,109,192, 85, 5, 50,205,104,150, 55, 20, 73,202,104,186, 79, 85,149,193,110, 36, 37,121,158,176,
- 46, 43,154,186,198, 24, 79,146,230,172,203,154,182,105,177, 46, 4,135,212,117,217, 99,187,171, 98,197,222,100, 66, 34,101,216,
- 99,199, 3,188,118, 17, 30, 99,106, 46,215,225,199,175, 54, 56,110,116,196,197, 38, 74,144, 42, 72,164, 32,145,138, 68,202, 40,
- 58, 12,202,131,255,116, 50, 70,197,143, 7,193,255,220,122,139,117, 2,225,117,175, 43,232,126,209,125, 23, 93, 25,133, 69, 29,
-111,223,187,208, 9, 74,233, 16, 42,252,158, 41, 29, 98,114,181,146,164,105, 74,154,102, 33,226, 87, 42,148, 20,225,112, 18, 18,
-231,130, 96, 79,120,143,245, 50, 90,226,170, 16, 32,100, 37,206,107,140,113, 33, 81, 80, 73,180, 81, 40,111,113,190,198,218,150,
- 52,211, 72, 26, 82,175,208, 36, 1, 6, 20,231,196, 6,131, 21, 22,164, 11,108,245, 54,184, 31,140, 15,107, 11, 37, 99,138,157,
-143, 59,243, 62, 17, 15,140, 13, 0, 24, 29, 35, 75, 59, 90,130,142, 33, 41,198,122, 26,227, 88, 87, 13,151,101,201,124, 85, 32,
-135, 67,180, 74,162,143, 89, 49,222,155,177, 92,174,163,226, 95,209,180,134,166,109, 25,140,198,212,109,131,175, 29,147,189, 41,
- 66, 75,234,186,225,206,201, 93,206, 47,175, 24,207, 14, 40,141,227,219,179,138,203,210,242, 87,143, 79,152, 8,144,202, 5, 62,
- 59, 46, 70, 68,235, 45, 75, 42,125, 20,102, 47,156, 19,190, 91,137,199, 2,192,111,124,206, 91,183,130, 23,187,205,132,239,246,
-224,116,152,225,221, 24, 99,188, 11,235,139, 40, 34, 12, 77,182,219,156, 87, 91,172, 14,239, 58,156,236, 38,174,213, 69,214,133,
-212, 58,128, 75, 92, 92, 11,233, 36,132,218,160, 17,110,133,118, 53, 90,194,209,157,123,124,115, 90, 51, 62, 60, 98, 56,154,208,
- 24,139, 78, 19,170,166,225,232,232,152,249,245, 53,119,142,142,130,166, 79, 10,174,174,230, 76,166, 51,170,170, 70, 39, 18,148,
- 37,205, 39,252,235,191,127,199,239,126,247,183,228,153, 35,145, 30,169,116,127,174, 58,103,195,121,166, 36,206,152, 16, 63, 28,
-163,102, 49, 53,184,146,245,186,226,114,225,121,250,233,223,241,252, 15,127, 8, 49,162,198,161,132, 32, 27, 12,144,105,202,213,
-197, 57, 66,133,241,125, 85, 55, 36, 2,172,169,248,232,193, 9,218, 6,168,143,151, 32, 48, 56,211, 68, 43,170,199, 91,131, 18,
-154, 31, 95, 94, 97,213, 40,196,202, 42, 29, 92, 64, 77,129,222,159,112,113,117,202,205, 98, 78,174, 4,141,245, 88, 17, 0,174,
-194,133, 2,252,252,234,154, 31,158,189,224,183,255,237, 31,249,252,159,255, 55,131,209,136,225, 48,167, 44, 75,138,162,194,203,
- 67,132,168, 99,213, 70, 95,232, 7, 12,114,247, 99,140, 23,177,117,145,123,224,226, 3, 20,138,187, 96, 31,234,154,199,112,198,
-110,132,113, 49, 47,195,211, 7,101,185, 91,157,250, 91,167,194, 91,119,169,222, 30, 31,221, 6,144,236,198,165,190,125, 92,251,
- 78,159,122, 47, 22,136,106, 65, 41,222,184,208,183,133,109,239, 26,225,187, 45,129,217, 54,101, 78,110,137, 28,250,113,178, 8,
- 29, 98,247,142, 91, 8,144,254, 79, 59,123,245,126, 26,176, 29,133, 71, 15, 9,233, 42,186,109,212,235, 46, 60, 96, 3,116,121,
-171, 27, 96,187, 11,192,199,113, 13,253,232, 70,197,213, 68,162,147,240, 3,173, 91,134,249,132,100, 50,129,100,200,104, 60,102,
- 58, 25,147, 13, 7,204,246,247,184, 60, 59, 99,152,103,220, 20, 75,218,243, 20,127,182, 64,103, 11,134,131, 17, 45,130,123,143,
- 30, 81,123,199,143,167,103,124,247,226,146, 23,207,159, 51,202, 83,108, 71, 50,243,219,131,248,183,241, 18,194,251,109,247,160,
-121,143,242, 2,235, 29,214, 73,148, 10,151,159, 86,162, 47, 82,136, 63,227,110,231, 39, 69, 60,156,148,192, 74,129,243,114, 3,
-247, 17, 18, 97, 3,165,172,105,107, 50,169, 16, 50,163, 53, 13,169,151, 24,235, 16, 85,133,210, 9,166, 92, 83, 74,133,206, 71,
-120, 47,153,207,231, 36, 73, 74, 91,215, 28, 29, 30,240,226,244,140,182, 46, 73,132, 96, 81, 22,232, 36,197, 52, 53, 74, 72,140,
- 51, 36, 82, 35,188, 96, 60,200, 25, 15, 50,138,170,236,213,201, 34,166,183,201, 29, 42,160,136, 86,118, 79,107,160,197, 81,198,
- 87, 68, 9,129,242, 54,136,201,226, 75,165,164,103,144,228, 1, 68,227, 84, 28,177,182,113, 32, 34,241,214, 99,108, 19,148,230,
- 59,207,120, 24,251,123, 97,131,127,221,171,254, 98,113,222, 96, 76,131,140, 84, 52, 45, 53, 90,167, 36, 93, 26,160, 78,194,234,
- 70, 8,116,236,208,132, 4,175, 85,220,211, 59, 26, 15,141,115,216,166,196,183, 14,107, 36, 94,232,160, 52, 23, 30,161, 12,169,
-206, 72,108, 66, 98,147,200, 29, 8, 69,152,183, 81,216, 40,227,239,144, 80,120,229,176, 54, 52,134,218,233, 48, 61,113,129, 4,
-230, 84,152,104, 56, 7,202, 7, 85, 54, 50,142,162,241,125,170, 93,168,120,219, 48,150,118, 33, 32,167,117,146, 85,221,114,185,
- 88,115, 83, 86,228,249, 8,173, 83,198,227, 49,121,158, 7, 63, 48,208, 70,240,207,104, 56, 10,147,152,225,128,203,171, 75, 30,
- 60,120,136,117,150, 85,177, 2, 9,198, 56, 70,227, 9, 15, 7, 15, 67, 76,102, 89, 82, 25,195,245, 10,116, 50,224,233,189, 61,
-246,180, 10, 46,137, 36, 64, 67,136,132,175,238,128,246,110, 51,177, 19, 91, 97,232,242,125, 33, 87,126,119,197,215,189,223,221,
-178,209,245,218, 32,231, 17,214, 69,245,122,156,106,225,251,120, 74,239,216,106, 90,182, 2,152,226, 25,231, 35, 68,199,119,205,
-186, 16, 36, 34, 6,216, 8, 1, 82,163, 51,137,198, 96,188,193,225,248,249,245, 37,201,228,152,195,187,143, 48,166,101, 60, 72,
- 88,175,215,193,125, 33, 36,101, 21, 38, 97,135, 71,199,204,151, 75,214,235,130,217,108,143, 52, 75, 64, 88,170,122, 73, 54, 24,
-176, 88,102,156,190, 94,243,209, 71, 19, 28, 5, 74,201, 30,153,221,227,238,149,138,186,156,216,202, 8,129,240, 6, 91, 21, 92,
- 94,206, 25,239,159, 48,189,255, 49,230,247,191, 15,130, 74, 2,245, 49, 75, 83,172,247, 20, 77, 69, 83, 53, 12,135, 25,185, 86,
-184,166,226,254,157, 3, 6,137,198,182, 13, 65, 70, 27,146, 17,133, 13,197,181,181,150,170, 53, 44, 87, 37,231, 55, 5, 39,143,
-127,205,122,177, 38, 63, 60, 36, 4,175, 58,138,186,165, 50,130,182,110, 56, 24, 15,185, 92, 21, 88,215,177,247,195,143,218,120,
-193,191,252,251,231,252,205,175,126,197,131, 71, 15,177, 66,132,100, 73,211,176, 90, 23, 81, 51,179,157, 81, 34, 98,140,238,174,
-181,217, 89, 27, 59,239,192,115,247,206, 5, 54,129,219,140,215,183, 21,239,125,135,110,108, 79,143, 51,221,191,119,191,220,206,
- 22, 59,117,255, 94,219,218,135,130, 88,222,166, 60,247,209, 30,196, 22, 56,198,251,219, 29,191,127,167,199,253,151,236,166,223,
- 53,174,239,152,243,183, 91, 81,225,119, 29,232,111, 13, 94,121, 75,126,248,135,119,229,187,182,132,183,125,253,226,214, 40,178,
-183, 66,196, 0,148, 4,129, 78, 51,146,209,148, 44, 27,130, 74,193, 11,202,117,193, 15, 47,126,102,111,127,159, 69, 93, 5,196,
-232, 32, 67,143,199, 20,235, 53, 63, 93, 92,114, 61,191,225,242,122,193,229,249, 5, 90, 65, 85, 44, 56,191,153,211, 10, 73,227,
- 4,222, 90,158, 62,188,207,193,116,220,135,113,250, 15,112,112,195,247, 19, 5, 99,182,123,240, 4,214, 10,148, 52,104,165,112,
- 58,172, 15,116,244,245,122,191, 97,197,135, 51,103, 3, 16,234,169,125, 17,216, 35,226, 5, 89,172, 87,168, 44, 97, 52,206, 33,
- 9,123,105,178, 33,109, 83, 69,139,148,199, 53, 21, 78,138,176,215,138, 99,179,253,233,148,117,177, 98, 50, 72,105,141, 99, 93,
-148,172,151,215,100,249, 40,178,191, 85,200, 37,182, 45, 66,104,134,131,140,167, 79, 30,241,249, 23, 95,246, 19, 29, 33,192,198,
-226, 80,197, 61,148,218, 98,252,203, 32, 60, 14,172,250,152,114, 38, 58, 81,148,240,161, 72, 18,158,225,104,208, 79, 52,140, 49,
-155,196, 59, 65, 64,117,182,237, 86,114,150,232, 93, 15, 74,235,168,150, 22, 8,169,163,144, 44, 92,172, 82, 6,177,162,214, 9,
- 90,105, 18,157,144,232, 4,173,117,124, 83,253, 72,222,198, 36, 61, 29, 87, 42,253, 68,192, 89,156, 53,180,141,195,152,144, 21,
-222, 90,131,245, 45, 82,213, 56,149, 98,146,140, 70,102,148, 74,145,103,121,128,149,100,158, 84, 91,146, 52,137, 62,115,133,194,
-225,164,194,235, 12,188, 64,182, 45,109, 27, 62, 79, 39, 28,148, 82,208, 8, 19,199,173, 65,244,212, 37,254, 89, 7,202,121,116,
- 18, 52, 36,141,245,212,222,177,108, 28, 23,139,146,103,167, 87,100,227, 61,172, 23,140, 38, 19,234,186, 9,221,139, 49,104, 29,
-114,189,165,144, 44,151,203,222, 79, 62,157,206,168,235,154,182,109,153,238, 79, 25, 14,198,220,212, 55, 44,151, 75, 14, 15,143,
-112,206, 83, 22, 37, 39, 39, 83,180,146, 60,123,117,201,235,243, 75, 30,221, 63,228,227, 39, 39,100, 64,146, 4,225,166,247, 54,
- 90,205, 84,116, 36,116, 35,250, 93,157,141, 82,234, 23,179, 50,188,140,226,210,109,162,156, 16, 97, 28, 31,117, 56, 98,135, 26,
-231,223, 0, 64,117,105, 98,157, 38,201,197, 17,174,236, 53, 1, 27, 52,170, 80, 93,100, 72,240, 70,106, 9, 36, 41,173, 28,112,
-181,110, 89,154, 20,135,100, 62,191,161,174,107, 70,163, 17,214, 90,150,203, 37,247,238,221, 99, 49,159,243,234,213, 43,158, 60,
-121,194,124,177,192,123,207,245,245,117, 72, 93, 43, 10,238,220, 57,166, 42, 13,195,225,148,203,171, 53,147,137,228,232, 48, 69,
-138,224, 51,199,111,105, 39, 60, 32, 66,245, 47,189, 0,211,224, 45,212,141,229,122,177,228,232,248,136,215,243,171, 48, 1, 49,
-150,170,174, 73, 7, 41, 69, 81,160, 7, 37,139,197,146,233,100,204, 48,203, 48, 85,193,193,254, 30,163,193, 96, 3,232,145, 58,
-156, 97, 86,128,149,224, 4,222,107, 46, 22,107,254,244,205, 15,236, 29, 28, 51, 28,142, 56, 60, 56, 36, 77,115,148,240,164, 73,
-138,244,130,139,179,115,134, 89,198,127,254,205,175,248,253, 87,223,114,186, 88, 99,253, 86,216,148,135,103, 47,158,179, 40,214,
-252,230,179,207,248,241,155,175, 88, 23, 5, 77,211,112,113,113, 25,184,242,183,226,169,251, 6,212,237, 70, 80,119, 23,186, 53,
-129, 55,225,227,212,214,217,205,174,220,185, 16,199,109,141,161,109, 91,218, 72,145, 51,214,246, 73,152,239, 8,149,190,117, 87,
-109,218, 88,253, 33, 96,204,219,118, 71,155,110,188, 63,194,241, 59,157,243, 38,218,113,219,235,221,113, 31,186, 11,227,189,152,
-217, 63,211,155,222, 95,168, 78,188, 49, 98,239,230,254,127,206,165,254,198,238,226, 29, 47,232,109, 29,221,219,191,151,141,162,
-118, 91, 53,217,237, 26,149, 18, 24, 37,105, 16,248, 52,231,193,147,143,184, 46,106,214,203,146,159,207,207,249,227,183,223,176,
- 90, 46, 88, 45,230,148,101, 17,148,202,214,177, 55, 25, 81, 85, 53,101,107,153,142,198, 28,239, 79,208, 89,134, 72, 20,121, 62,
-162, 89, 87, 56,107,169,234, 10, 41, 39, 65,212, 18,181, 64,126, 75,141,251,198,234, 99, 75, 56, 24,183, 29,225,253, 54, 92, 32,
- 97, 84, 20,242,146,141,243,113, 84,173,250, 52, 73,181,245, 58,116, 10,121, 29, 45, 64, 46,124,195,164,194, 97,109, 19,213,187,
-138,253,217, 4,103, 91,202,216,177,180, 85, 9,222,224, 90, 71,109, 26,176, 6, 45,114,234,166,198,122,199,226,230,134,217,254,
- 1,169, 20,180,165,229,206,193,140, 87,103,151, 28, 29, 29,225,240,212,109, 69,219, 88,154,198,227,165,100,111, 56, 96,150,165,
-172,171, 58,216,153,122,225, 74,120, 51,132,108,116, 29, 15,115,189, 85, 12, 42,235,123,100,174,117, 93, 87,226,201,114,205,104,
-152,199,177,142,192,218,184, 31, 99, 35,136,243, 4,225, 80, 63,150,139,110, 14, 41, 33, 17, 73, 0, 90, 8,221, 11,141,132, 82,
- 64,210,115,247,149,212, 81,164,167,118, 46,116,173, 59, 5,174,194, 73,143, 49, 46,136,247,180, 68,182,209,148,232, 67, 29,104,
-234,160,236,111,113, 72, 21,244,201,165,107, 81, 73, 75,150, 91,188, 36, 16,251,202, 1,123,147, 17,195, 65,206, 72, 8, 68,119,
-177, 11, 21,133, 79, 1,235,217,217,150,164, 76,104, 90, 3,214, 0,170,239, 54, 60, 6, 47, 20, 78,132, 85,130,212, 30,229, 2,
-189,203, 90,168,173, 99,101, 44,175,174,214, 44, 74,135, 17, 41,139,139, 75, 30, 63,121,130,144, 10, 99, 12, 82, 74,140, 49, 52,
- 77,195,112, 56,164, 40, 75,246,102,123,140,199, 99, 94,159,159,145,231,195,254,239,172,150, 5,147,241,140,225,112, 72,221, 52,
- 92, 94, 93, 50,157,132,248,206,233,116,140,243,240,227,179,107,148, 82, 92, 44, 95, 50, 47, 26,126,243,241, 3,166, 35, 77,166,
-187,192, 29, 25,215, 8, 81,108,134,220, 4,247,136,110,106,248,238,243, 80, 68,129,155,235,222,215,117,112,241,121,216, 30,163,
-211,175,191,194,104,192,111,249,145,118, 0, 57,125,162, 99,164,221, 69, 90, 29, 66, 32,124, 64,203, 74,165, 17, 46, 92, 30, 66,
- 73,108,208,243, 35,172,199, 24, 88, 84,130, 87,215, 13, 87,107,152,237, 77, 98,112,139,160,109, 42, 4, 97, 7,191, 94,173,152,
- 78, 38,188,122,245,138, 97,204,161, 48,214,161,117,184, 60, 7,131, 1,203,197,146,225,104,194,108,118,192,106,117,195,151, 95,
- 62,231,191,254,246,215, 12,210, 48,153,147,189, 10,208,245, 92,251,141, 10,205, 97, 26,203,205, 77, 73,209, 88, 10, 87, 96, 92,
- 84,235, 91, 71,221,180,216, 84,147,102, 42, 10, 86, 13,166,109, 57,127,189,224,201,189,187, 76, 71, 67,188,179, 84,145, 25,223,
- 56, 75,213,182,225, 59,117, 33, 53, 50, 73,115,190,251,233, 53,167,151, 75,238, 63,189,143, 78, 18,154,186, 70,107, 77, 58, 28,
- 32, 77,131,113,150,239,191,254,154,189, 60,227,233,189, 59,156,157, 95,112, 62, 95, 5,145,175,146,241,103, 15,139, 98,197,255,
-249,242, 43,254,230, 87, 79,249,238,235,175,185,186,158,227,157,225,112,111,188,147,133,238,183, 38, 20,221,125,105, 99,202, 90,
- 72, 88,107, 49,109, 27, 8,128,113, 60, 79,252, 59,206,110,186,116, 99, 44, 77,221,208, 52, 45,117,211,246, 43, 38, 99,108, 88,
- 95, 58,222,107,239,190, 45,148,251,191, 3, 0, 97,118, 36, 17, 24,195, 73,139, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0,
+ 13, 73, 72, 68, 82, 0, 0, 1,245, 0, 0, 1, 26, 8, 6, 0, 0, 0, 8, 90,206, 70, 0, 0, 10, 79,105, 67, 67, 80, 80,104,
+111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108,101, 0, 0,120,218,157, 83,103, 84, 83,233, 22, 61,247,
+222,244, 66, 75,136,128,148, 75,111, 82, 21, 8, 32, 82, 66,139,128, 20,145, 38, 42, 33, 9, 16, 74,136, 33,161,217, 21, 81,193,
+ 17, 69, 69, 4, 27,200,160,136, 3,142,142,128,140, 21, 81, 44, 12,138, 10,216, 7,228, 33,162,142,131,163,136,138,202,251,225,
+123,163,107,214,188,247,230,205,254,181,215, 62,231,172,243,157,179,207, 7,192, 8, 12,150, 72, 51, 81, 53,128, 12,169, 66, 30,
+ 17,224,131,199,196,198,225,228, 46, 64,129, 10, 36,112, 0, 16, 8,179,100, 33,115,253, 35, 1, 0,248,126, 60, 60, 43, 34,192,
+ 7,190, 0, 1,120,211, 11, 8, 0,192, 77,155,192, 48, 28,135,255, 15,234, 66,153, 92, 1,128,132, 1,192,116,145, 56, 75, 8,
+128, 20, 0, 64,122,142, 66,166, 0, 64, 70, 1,128,157,152, 38, 83, 0,160, 4, 0, 96,203, 99, 98,227, 0, 80, 45, 0, 96, 39,
+127,230,211, 0,128,157,248,153,123, 1, 0, 91,148, 33, 21, 1,160,145, 0, 32, 19,101,136, 68, 0,104, 59, 0,172,207, 86,138,
+ 69, 0, 88, 48, 0, 20,102, 75,196, 57, 0,216, 45, 0, 48, 73, 87,102, 72, 0,176,183, 0,192,206, 16, 11,178, 0, 8, 12, 0,
+ 48, 81,136,133, 41, 0, 4,123, 0, 96,200, 35, 35,120, 0,132,153, 0, 20, 70,242, 87, 60,241, 43,174, 16,231, 42, 0, 0,120,
+153,178, 60,185, 36, 57, 69,129, 91, 8, 45,113, 7, 87, 87, 46, 30, 40,206, 73, 23, 43, 20, 54, 97, 2, 97,154, 64, 46,194,121,
+153, 25, 50,129, 52, 15,224,243,204, 0, 0,160,145, 21, 17,224,131,243,253,120,206, 14,174,206,206, 54,142,182, 14, 95, 45,234,
+191, 6,255, 34, 98, 98,227,254,229,207,171,112, 64, 0, 0,225,116,126,209,254, 44, 47,179, 26,128, 59, 6,128,109,254,162, 37,
+238, 4,104, 94, 11,160,117,247,139,102,178, 15, 64,181, 0,160,233,218, 87,243,112,248,126, 60, 60, 69,161,144,185,217,217,229,
+228,228,216, 74,196, 66, 91, 97,202, 87,125,254,103,194, 95,192, 87,253,108,249,126, 60,252,247,245,224,190,226, 36,129, 50, 93,
+129, 71, 4,248,224,194,204,244, 76,165, 28,207,146, 9,132, 98,220,230,143, 71,252,183, 11,255,252, 29,211, 34,196, 73, 98,185,
+ 88, 42, 20,227, 81, 18,113,142, 68,154,140,243, 50,165, 34,137, 66,146, 41,197, 37,210,255,100,226,223, 44,251, 3, 62,223, 53,
+ 0,176,106, 62, 1,123,145, 45,168, 93, 99, 3,246, 75, 39, 16, 88,116,192,226,247, 0, 0,242,187,111,193,212, 40, 8, 3,128,
+104,131,225,207,119,255,239, 63,253, 71,160, 37, 0,128,102, 73,146,113, 0, 0, 94, 68, 36, 46, 84,202,179, 63,199, 8, 0, 0,
+ 68,160,129, 42,176, 65, 27,244,193, 24, 44,192, 6, 28,193, 5,220,193, 11,252, 96, 54,132, 66, 36,196,194, 66, 16, 66, 10,100,
+128, 28,114, 96, 41,172,130, 66, 40,134,205,176, 29, 42, 96, 47,212, 64, 29, 52,192, 81,104,134,147,112, 14, 46,194, 85,184, 14,
+ 61,112, 15,250, 97, 8,158,193, 40,188,129, 9, 4, 65,200, 8, 19, 97, 33,218,136, 1, 98,138, 88, 35,142, 8, 23,153,133,248,
+ 33,193, 72, 4, 18,139, 36, 32,201,136, 20, 81, 34, 75,145, 53, 72, 49, 82,138, 84, 32, 85, 72, 29,242, 61,114, 2, 57,135, 92,
+ 70,186,145, 59,200, 0, 50,130,252,134,188, 71, 49,148,129,178, 81, 61,212, 12,181, 67,185,168, 55, 26,132, 70,162, 11,208,100,
+116, 49,154,143, 22,160,155,208,114,180, 26, 61,140, 54,161,231,208,171,104, 15,218,143, 62, 67,199, 48,192,232, 24, 7, 51,196,
+108, 48, 46,198,195, 66,177, 56, 44, 9,147, 99,203,177, 34,172, 12,171,198, 26,176, 86,172, 3,187,137,245, 99,207,177,119, 4,
+ 18,129, 69,192, 9, 54, 4,119, 66, 32, 97, 30, 65, 72, 88, 76, 88, 78,216, 72,168, 32, 28, 36, 52, 17,218, 9, 55, 9, 3,132,
+ 81,194, 39, 34,147,168, 75,180, 38,186, 17,249,196, 24, 98, 50, 49,135, 88, 72, 44, 35,214, 18,143, 19, 47, 16,123,136, 67,196,
+ 55, 36, 18,137, 67, 50, 39,185,144, 2, 73,177,164, 84,210, 18,210, 70,210,110, 82, 35,233, 44,169,155, 52, 72, 26, 35,147,201,
+218,100,107,178, 7, 57,148, 44, 32, 43,200,133,228,157,228,195,228, 51,228, 27,228, 33,242, 91, 10,157, 98, 64,113,164,248, 83,
+226, 40, 82,202,106, 74, 25,229, 16,229, 52,229, 6,101,152, 50, 65, 85,163,154, 82,221,168,161, 84, 17, 53,143, 90, 66,173,161,
+182, 82,175, 81,135,168, 19, 52,117,154, 57,205,131, 22, 73, 75,165,173,162,149,211, 26,104, 23,104,247,105,175,232,116,186, 17,
+221,149, 30, 78,151,208, 87,210,203,233, 71,232,151,232, 3,244,119, 12, 13,134, 21,131,199,136,103, 40, 25,155, 24, 7, 24,103,
+ 25,119, 24,175,152, 76,166, 25,211,139, 25,199, 84, 48, 55, 49,235,152,231,153, 15,153,111, 85, 88, 42,182, 42,124, 21,145,202,
+ 10,149, 74,149, 38,149, 27, 42, 47, 84,169,170,166,170,222,170, 11, 85,243, 85,203, 84,143,169, 94, 83,125,174, 70, 85, 51, 83,
+227,169, 9,212,150,171, 85,170,157, 80,235, 83, 27, 83,103,169, 59,168,135,170,103,168,111, 84, 63,164,126, 89,253,137, 6, 89,
+195, 76,195, 79, 67,164, 81,160,177, 95,227,188,198, 32, 11, 99, 25,179,120, 44, 33,107, 13,171,134,117,129, 53,196, 38,177,205,
+217,124,118, 42,187,152,253, 29,187,139, 61,170,169,161, 57, 67, 51, 74, 51, 87,179, 82,243,148,102, 63, 7,227,152,113,248,156,
+116, 78, 9,231, 40,167,151,243,126,138,222, 20,239, 41,226, 41, 27,166, 52, 76,185, 49,101, 92,107,170,150,151,150, 88,171, 72,
+171, 81,171, 71,235,189, 54,174,237,167,157,166,189, 69,187, 89,251,129, 14, 65,199, 74, 39, 92, 39, 71,103,143,206, 5,157,231,
+ 83,217, 83,221,167, 10,167, 22, 77, 61, 58,245,174, 46,170,107,165, 27,161,187, 68,119,191,110,167,238,152,158,190, 94,128,158,
+ 76,111,167,222,121,189,231,250, 28,125, 47,253, 84,253,109,250,167,245, 71, 12, 88, 6,179, 12, 36, 6,219, 12,206, 24, 60,197,
+ 53,113,111, 60, 29, 47,199,219,241, 81, 67, 93,195, 64, 67,165, 97,149, 97,151,225,132,145,185,209, 60,163,213, 70,141, 70, 15,
+140,105,198, 92,227, 36,227,109,198,109,198,163, 38, 6, 38, 33, 38, 75, 77,234, 77,238,154, 82, 77,185,166, 41,166, 59, 76, 59,
+ 76,199,205,204,205,162,205,214,153, 53,155, 61, 49,215, 50,231,155,231,155,215,155,223,183, 96, 90,120, 90, 44,182,168,182,184,
+101, 73,178,228, 90,166, 89,238,182,188,110,133, 90, 57, 89,165, 88, 85, 90, 93,179, 70,173,157,173, 37,214,187,173,187,167, 17,
+167,185, 78,147, 78,171,158,214,103,195,176,241,182,201,182,169,183, 25,176,229,216, 6,219,174,182,109,182,125, 97,103, 98, 23,
+103,183,197,174,195,238,147,189,147,125,186,125,141,253, 61, 7, 13,135,217, 14,171, 29, 90, 29,126,115,180,114, 20, 58, 86, 58,
+222,154,206,156,238, 63,125,197,244,150,233, 47,103, 88,207, 16,207,216, 51,227,182, 19,203, 41,196,105,157, 83,155,211, 71,103,
+ 23,103,185,115,131,243,136,139,137, 75,130,203, 46,151, 62, 46,155, 27,198,221,200,189,228, 74,116,245,113, 93,225,122,210,245,
+157,155,179,155,194,237,168,219,175,238, 54,238,105,238,135,220,159,204, 52,159, 41,158, 89, 51,115,208,195,200, 67,224, 81,229,
+209, 63, 11,159,149, 48,107,223,172,126, 79, 67, 79,129,103,181,231, 35, 47, 99, 47,145, 87,173,215,176,183,165,119,170,247, 97,
+239, 23, 62,246, 62,114,159,227, 62,227, 60, 55,222, 50,222, 89, 95,204, 55,192,183,200,183,203, 79,195,111,158, 95,133,223, 67,
+127, 35,255,100,255,122,255,209, 0,167,128, 37, 1,103, 3,137,129, 65,129, 91, 2,251,248,122,124, 33,191,142, 63, 58,219,101,
+246,178,217,237, 65,140,160,185, 65, 21, 65,143,130,173,130,229,193,173, 33,104,200,236,144,173, 33,247,231,152,206,145,206,105,
+ 14,133, 80,126,232,214,208, 7, 97,230, 97,139,195,126, 12, 39,133,135,133, 87,134, 63,142,112,136, 88, 26,209, 49,151, 53,119,
+209,220, 67,115,223, 68,250, 68,150, 68,222,155,103, 49, 79, 57,175, 45, 74, 53, 42, 62,170, 46,106, 60,218, 55,186, 52,186, 63,
+198, 46,102, 89,204,213, 88,157, 88, 73,108, 75, 28, 57, 46, 42,174, 54,110,108,190,223,252,237,243,135,226,157,226, 11,227,123,
+ 23,152, 47,200, 93,112,121,161,206,194,244,133,167, 22,169, 46, 18, 44, 58,150, 64, 76,136, 78, 56,148,240, 65, 16, 42,168, 22,
+140, 37,242, 19,119, 37,142, 10,121,194, 29,194,103, 34, 47,209, 54,209,136,216, 67, 92, 42, 30, 78,242, 72, 42, 77,122,146,236,
+145,188, 53,121, 36,197, 51,165, 44,229,185,132, 39,169,144,188, 76, 13, 76,221,155, 58,158, 22,154,118, 32,109, 50, 61, 58,189,
+ 49,131,146,145,144,113, 66,170, 33, 77,147,182,103,234,103,230,102,118,203,172,101,133,178,254,197,110,139,183, 47, 30,149, 7,
+201,107,179,144,172, 5, 89, 45, 10,182, 66,166,232, 84, 90, 40,215, 42, 7,178,103,101, 87,102,191,205,137,202, 57,150,171,158,
+ 43,205,237,204,179,202,219,144, 55,156,239,159,255,237, 18,194, 18,225,146,182,165,134, 75, 87, 45, 29, 88,230,189,172,106, 57,
+178, 60,113,121,219, 10,227, 21, 5, 43,134, 86, 6,172, 60,184,138,182, 42,109,213, 79,171,237, 87,151,174,126,189, 38,122, 77,
+107,129, 94,193,202,130,193,181, 1,107,235, 11, 85, 10,229,133,125,235,220,215,237, 93, 79, 88, 47, 89,223,181, 97,250,134,157,
+ 27, 62, 21,137,138,174, 20,219, 23,151, 21,127,216, 40,220,120,229, 27,135,111,202,191,153,220,148,180,169,171,196,185,100,207,
+102,210,102,233,230,222, 45,158, 91, 14,150,170,151,230,151, 14,110, 13,217,218,180, 13,223, 86,180,237,245,246, 69,219, 47,151,
+205, 40,219,187,131,182, 67,185,163,191, 60,184,188,101,167,201,206,205, 59, 63, 84,164, 84,244, 84,250, 84, 54,238,210,221,181,
+ 97,215,248,110,209,238, 27,123,188,246, 52,236,213,219, 91,188,247,253, 62,201,190,219, 85, 1, 85, 77,213,102,213,101,251, 73,
+251,179,247, 63,174,137,170,233,248,150,251,109, 93,173, 78,109,113,237,199, 3,210, 3,253, 7, 35, 14,182,215,185,212,213, 29,
+210, 61, 84, 82,143,214, 43,235, 71, 14,199, 31,190,254,157,239,119, 45, 13, 54, 13, 85,141,156,198,226, 35,112, 68,121,228,233,
+247, 9,223,247, 30, 13, 58,218,118,140,123,172,225, 7,211, 31,118, 29,103, 29, 47,106, 66,154,242,154, 70,155, 83,154,251, 91,
+ 98, 91,186, 79,204, 62,209,214,234,222,122,252, 71,219, 31, 15,156, 52, 60, 89,121, 74,243, 84,201,105,218,233,130,211,147,103,
+242,207,140,157,149,157,125,126, 46,249,220, 96,219,162,182,123,231, 99,206,223,106, 15,111,239,186, 16,116,225,210, 69,255,139,
+231, 59,188, 59,206, 92,242,184,116,242,178,219,229, 19, 87,184, 87,154,175, 58, 95,109,234,116,234, 60,254,147,211, 79,199,187,
+156,187,154,174,185, 92,107,185,238,122,189,181,123,102,247,233, 27,158, 55,206,221,244,189,121,241, 22,255,214,213,158, 57, 61,
+221,189,243,122,111,247,197,247,245,223, 22,221,126,114, 39,253,206,203,187,217,119, 39,238,173,188, 79,188, 95,244, 64,237, 65,
+217, 67,221,135,213, 63, 91,254,220,216,239,220,127,106,192,119,160,243,209,220, 71,247, 6,133,131,207,254,145,245,143, 15, 67,
+ 5,143,153,143,203,134, 13,134,235,158, 56, 62, 57, 57,226, 63,114,253,233,252,167, 67,207,100,207, 38,158, 23,254,162,254,203,
+174, 23, 22, 47,126,248,213,235,215,206,209,152,209,161,151,242,151,147,191,109,124,165,253,234,192,235, 25,175,219,198,194,198,
+ 30,190,201,120, 51, 49, 94,244, 86,251,237,193,119,220,119, 29,239,163,223, 15, 79,228,124, 32,127, 40,255,104,249,177,245, 83,
+208,167,251,147, 25,147,147,255, 4, 3,152,243,252, 99, 51, 45,219, 0, 0, 0, 6, 98, 75, 71, 68, 0, 0, 0, 0, 0, 0,249,
+ 67,187,127, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69,
+ 7,218, 10, 27, 9, 53, 42,196,130,109, 57, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236,189,105,180, 37,215, 85, 38,248,237, 19,
+ 17,247,222, 55,228, 44,101,106,176, 44, 41, 37,207,198, 42, 59,101, 83,109, 48,100,225,116, 81,134,130,102, 74,177, 76,131, 89,
+ 76, 82, 23, 61,153,234,182,164,234,162, 23, 85,171, 48, 88, 89, 84, 27,186,193,221,206,130, 98, 85, 1, 13,229,196, 5, 52,189,
+ 0,151,210, 32,176, 13,229, 65,216,198,224, 73, 82, 58, 45, 91, 67, 42,199,151,249,222,157, 34,206,217,253,227, 12,113,206,137,
+ 19,247,222,151,202, 76, 41,237,216, 90,111, 41,223,123,247,221, 27,195,137,243,237,253,237,111,239, 13,116,214, 89,103,157,117,
+214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,
+103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214, 89,103,157,117,214,217, 21,177,
+236, 10,127, 30,153,175, 1,128,189, 66,224, 90,102, 12, 1,148,230,231,157,117,214, 89,103,157,117,214,217, 85, 96, 4, 64, 8,
+ 65,183,255,243,131,119,252,206, 39,127,225,187,158,249,219, 95,252,238,211, 63,247,131,175,249,131, 94, 46,246,121,175,233,172,
+179,206, 58,235,172,179,206,158,231,145, 58, 1,232,253,228,155, 95,242,142, 95,248,190,151,190,117, 79, 57, 90,185,118,235,202,
+210, 27,190,254, 69, 47,249,198,151, 94,123,224, 67,159,125,250,233,179,235,211, 47, 0,224, 14,220, 59,235,172,179,206, 58,235,
+236,249, 13,234, 2,192,242, 55,223,178,244,189,255,112,119,245,202,209,201, 51, 40,207,158, 70, 53,154,224,197, 47,190,121,199,
+247,125,227,109,223,241,249, 39,206,102,143, 60,121,254, 83, 0, 70, 29,176,119,214, 89,103,157,117,214,217,243, 59, 82,239,127,
+228,248,249,167,119,109,235,189,234, 27,110,219,122, 29, 87, 12,121,225, 60,170, 11, 23,176, 99,247,238,252, 45,111,124,249, 55,
+ 75, 85,189,232, 67,159,121,250, 19, 0, 78,119,192,222, 89,103,157,117,214, 89,103,207, 79, 80, 7, 0, 98,198,133, 63,250,204,
+218, 39, 79,140,228,174, 55,189,108,251,139, 7, 89,142,114, 52,130, 60,119, 6,232, 47,227, 77,223,240,242,151,189,234,230,109,
+251,255,252,111,159, 60,190, 62,174,142,117,183,168,179,206, 58,235,172,179,206, 22,143,158,175,244,231, 13, 0,108, 3,240,130,
+111,188,125,203, 15,255,230, 91,246,254,248,205, 75,249, 96, 56, 44,129, 44,131,184,225, 22, 12,110,186, 9,143, 61,121,250,252,
+ 61,191,252,208,207,127,224,147, 79,188, 27,192, 5,243,247,252,124,190,152,204,188, 15,192, 14,243,237, 49, 34,250,170,118, 74,
+190,214,206,183,179,206, 58,235,172, 3,245,180, 9, 0, 91, 1,236,185,110,107,254,157,255,241,135,111,251,167,223,120,221,202,
+117,227,145, 4,160, 64,123, 94,128,165, 23,222,138, 41, 43,252, 47,191,254,225,255,240,127,254,193,167,127, 26,192,151,205,241,
+ 62,107, 96,103,230,189, 0,246, 46,248,242,179, 68,244,240,130,239,251, 32,128, 3,230,219,251,137,232,129,175,114, 80,255,170,
+ 56, 95,227,156, 28, 48, 14,202, 62,239, 87, 15, 3, 56, 6,224, 8, 17,157,189, 4,159, 19,191, 63, 46,245, 26,108,124,230,161,
+253,155, 91,235,247, 62,244, 48, 58,235,172,179,171,214,242,103, 1,202, 10,192,150, 93,171,197,215,237, 90,201,119, 41, 38, 10,
+ 60, 5, 2,136,136,216,254,132,236,207,221,111,115, 0,203,165,228,209, 79,253,209, 51,127,242,139,223,117,211,119,189,126,247,
+202,246,105,201,192,217,211, 24, 47,175,162,216,181, 7,255,199, 61,251,223,186,239,246, 61, 47,121,219,123,254,226,237,231,214,
+167, 31,186, 68,192,126, 16,192, 59, 55,177, 25, 3,192, 17, 0, 71,137,232,112,183,108,190,106, 88,134,131,230,171, 13,244,172,
+195,242, 30,102, 62,108, 28,151,103, 3,238,251, 0, 60,120, 17,127,119, 20,192,155,174,200, 90, 63,180,191, 94,235,247, 62,116,
+197,214, 58, 31,218, 31,178, 62,247, 62,212,177, 62,157,117,118,133, 64,157, 0,208, 74, 63,219,247,179,111,190,249,231,222,114,
+199,238,253,219,150,138,158, 34,161, 1, 91, 8,253, 69, 4,202,179,224,123, 8, 1,202,178,250,123,210,191, 83, 32, 46,153, 84,
+149,231, 16,222,251, 84,178,132, 26, 17,126,248, 77,175,252,250, 87,223,126,237,251,126,236, 93, 71,127,230,227, 95, 56,249,235,
+ 0, 38,184,242, 84,252, 65, 0, 7,153,249, 32,128,187, 46, 69,228,214,217,115,106, 31,223,228,235,239, 6,112,128,153,239,186,
+216,168,249, 42, 50,189,214, 15,237,215,107,253,222,135,174,196, 90,127,167,231, 68,221, 15,224,129,110,137,118,214,217,149,139,
+212,175, 61,244, 29,183,190,235, 39, 95,127,227, 27,166, 67, 5, 86,132, 76,144, 14,224,153,244, 23, 4, 72,145,134, 94, 6, 32,
+ 72,199,246,138,129, 12, 32, 34, 29,239, 51,144, 17, 81, 46, 40, 51, 17,177, 6,117, 6,192, 12, 69,132,201,112,138, 87,221,188,
+251,218, 7,127,238,123,126,249, 39,223,253,103, 47,250,237, 63,253,194,207, 3, 56,121,137,162,118, 27, 9, 97, 78,180,230,127,
+255, 32, 51,191,169, 3,246,175, 26,123,216, 68,167, 15, 19,209, 81, 19,201,239, 48,247,250,110,111, 13,236, 5,240, 94,102,190,
+243, 18,221,251,195,208,244,254, 60,187,148,235,108,243,107,253,208,254, 55, 93, 33, 96,239,172,179,206,158,139, 72,189, 95,136,
+189,255,248,101, 59, 94,203, 27, 37,202,241, 4, 80, 74,131,180, 99,214,109, 60, 79, 53,238,102, 2, 98,215,110, 3,238, 10, 36,
+ 0, 40,195,226, 19,224, 16, 94, 40, 13,252, 66, 0, 18, 90,159, 79,192,116, 82, 98, 91,175, 39,254,159,123,191,237,167, 94,251,
+146,235,190,238,159,253,234,135,239,157,148,242,147,151, 2,216,137,104, 38,181,105,162,243,119,162,166,105,247,153,205,190,139,
+ 38,174,110, 59, 12,224,112, 42,242, 54,160,125, 4,192, 17,102,126,143,185,223, 22,216, 47,213,189, 63, 98,157,136, 43,101,116,
+239, 67,179,215,186,142,206,187,181,222, 89,103, 87,169,137,139,248,155,108, 90,170,211,191,243, 55, 39, 63, 66, 98,130,149,158,
+196,202, 18,176, 60, 96,243,165,234,127,247, 21, 6, 98, 10,200, 18,212, 95,214, 32,175, 20,160, 20, 92, 84, 14, 0,152, 2,106,
+ 12,168, 17,192, 99, 0, 19,253, 61, 79,205,235, 25,204, 10,165, 84,168, 38, 18, 63,245,189,175, 61,240,224,161,239,253,253, 91,
+246,108,253, 30, 3,251,226,114, 94, 36, 34, 58, 2,157,211,244,163,149,131,221,242,185,170,237, 77, 68,116,207, 34, 84, 58, 17,
+221, 19, 69,212,247,125,181, 94, 20,186,247,161,110,173,119,214,217,215, 88,164, 14, 6, 78,223,247, 7,199,127,230,143,254,246,
+212,247,188,236,186,165,155, 9, 16,138, 89,153,109, 1,138, 53,100, 15,167, 74,188,250,133, 91, 94,254, 19,223,116,251,222, 65,
+ 62, 16, 74, 41, 32,203,116,108,173, 20,120,186, 14,202, 8,226,166, 59, 32,174,189, 29,180,245, 58,208, 96, 43, 80, 77,160, 54,
+ 78,130, 47, 60, 5,117,242, 11, 64, 53, 2,104, 9, 12, 9,201,128, 90,159,226, 13,175,124,225, 11,223,127,232,123,127,237, 31,
+221,255,159,178, 47, 62,181,246, 62,212,226,189,203, 5,236,199,152,249,136, 23,177,237,187, 20,239,155, 80, 68, 63,124,137,148,
+214,190,234,249,162,202,205, 46,197,123, 92,137,243,141,142,115,161,247,187,136, 8,249, 48,106,193,217, 14,102,222,247,213,154,
+ 91,167,123, 31, 58,198,135,246, 95,212, 90,231, 67,251,155,247,247, 10, 80,247,145,208,238,138,125,110,103,157,125, 53,128,186,
+ 4,176, 1,224,179,127,254,216,250,187,254,252,177,245, 37,164,155,216,236,122,243,171,118,255,216,247,220,121,235,245,203,162,
+ 39, 42,197,154,122, 31,143,193,147, 13, 64,110, 32,123,241, 27,144,223,249, 3,200,110,253,251,173, 20, 2,159, 57,142,234,177,
+ 15, 64,126,233,195,160,172, 7, 48,131, 9,152, 14,167,120,241, 13,187,182,253,254,191,252,175,127,229,141,111,127,239,153, 83,
+107,227, 63,197,165,203,177,183,217, 37, 81,228, 26, 96,187,219, 68, 64,251, 18,191, 63,134,154, 26, 62,219,242, 30,239,244,254,
+246, 8, 17, 29,246,222,247,110, 68,138,110,243,158, 15, 44,162,222,103,230,187, 77, 52,186,119,179,199,117, 57,206,119,198,185,
+222,103,222,215,223,204,159,141, 82,124,150,197, 0,190,227,171,124,111, 88,120,173, 27, 32,111,191,191,135,246,215,247, 55, 2,
+ 90, 62,180,255,193,132,227,112, 55, 31,218,127,160,229,227,238, 55,199,118,192,124,237,107,115, 58,102,125,110,103,157,117,160,
+ 94,155, 2, 48, 6, 80, 65, 55,133, 49, 89,111, 87,243,206, 68,120,249, 3,223,247,226,127,241,246,253,183,236,151, 83, 96, 42,
+ 37,184,156,128,199, 67,160,154, 0, 57,163,255,109,255, 12,249,157,111,153, 31, 53,236,188, 5,197,206, 31,131,184,238, 85,168,
+ 62,246,171,128,144, 26,242,137, 48, 29,150,120,213,139,174,191,230, 93,255,100,255,161, 31,122,231,159,124, 15,128,199, 47, 51,
+168,251, 27,249, 69,109, 18,204,124, 0,192,123,231,128,194, 94, 19, 21,222, 61, 67,109,109,107,171, 1,224,168, 41,209,122,207,
+140,168,106, 47,116,105,214, 62, 67, 39,183,129,239,123,208, 78,183,218,227, 58,200,204,111,186,130,231,155, 58,215, 7,191, 6,
+128,245,185,180,133,214,186, 1,223,197,239,239,161,253,119, 69,181,240, 7, 90, 94,191,119,198,113,221,141,197,202,244,236,231,
+222,103,196,126, 93, 13,126,103, 29,168,183, 61,203,208, 51,208, 75,139,189,230,255,217,205,215, 12,190,227, 61,111,121,233, 3,
+223,250,226,107, 94, 52, 25, 41, 72, 89, 2,147, 17, 80,149, 0, 49,168, 0,250,223,253,243,200, 94,249,237,238,205,206,143, 38,
+120,255, 39,143,227,253,159, 58,142, 51,235, 35, 20, 25,225,101, 55,236,196,119,222,121, 59, 94,115,219,245,250,141,111,122, 45,
+168,183, 5,229,135,254, 13,208,203,245, 33, 8, 66,181, 62,193, 15,190,241,149,175,254,205, 15,124,238,199,222,255,177,227,239,
+192,101, 42,119, 51,128,119, 48,138, 8, 55,251, 30, 7,205, 6, 24, 71,128, 71,189,141,211,143,118,246,162, 86,218, 63, 60,103,
+ 3,126,175,183, 17, 30,241, 34,203,125,209,113,223,205,204,199, 90, 26,197,188, 51, 1,232,254,123, 29,244, 34,163,247, 62, 71,
+231,187, 35, 2,244,179,222,241,237,189,140,207,202,129, 57,145,251,179, 89, 87,151, 60,253,242,172,142, 73, 71,222,115,215,186,
+ 17,213,109,254,254,134, 0,123,212, 91,167, 59, 60,150,160,141, 41, 56,155, 96, 20,142, 69,199,184,215,220,175,189,254,154,225,
+ 67,251,239,236,234,223, 59,235, 64,125,190, 89,202,123,219,155, 95,185,243,167, 14,223,245,146,123, 95,176,186,180, 52,218,144,
+ 96, 57, 1,202,137,249,164, 12, 84,109,160,248,134, 31, 15, 0,253,191, 60,242, 20,222,254, 91, 31,196,177, 83, 23, 48,232, 23,
+ 40,114, 1,193,192,167,190,124, 6,191,251, 87,159,195,119,220,121, 27,254,183,131,111,192,114,191,128,216,243, 82,228,175,188,
+ 11,213, 39,126, 29,216,178, 7, 0,235, 36, 58, 19,254,229, 91, 95,255,227,255,249,227,199,127,151, 25,127, 11,157, 34,184,212,
+128,254,158, 8, 52, 14,111,242, 61,246,154,247,240, 55,163,123, 18,185,221, 7,162,232,214,126,246,157, 51,222,254, 62, 15,128,
+239,137, 65,193,124,246,123,189,205,245, 62,102, 14,168,110, 67,185,223, 29,109,206,119, 69,121,116,255,216, 14, 60, 71,231,123,
+159,247,126,247, 27, 17, 99,124,175, 46,135, 29,188, 12,192,155,140,112, 77, 58,226, 8,116, 58,226,138,130,144, 1,244,185,107,
+221,116,170,107,222,223,123, 31,106,222,223, 48,154, 15,238,175, 85,227, 27, 26,222,174,169,195,116,239, 67, 15,204, 97, 7, 30,
+ 0,112,100, 86,244,205,135,246,219,136,222,255,220, 55,161,179,206, 58, 80,159, 11,232,183,190,237, 91,110,252, 87,239,124,243,
+ 45,255, 77,174,114, 12, 39, 37, 32,167,128,172,116, 30,157, 0,176, 4, 93,115, 19,242,215,189,213,253,241, 35, 79,159,197, 91,
+127,229,253,120,102, 84, 97,121,101, 9,101,150,161, 40, 50,244, 50, 66,198, 61,144,172,240,190,143, 60,138, 76, 8,252,236, 15,
+236,215, 17,251,237,255, 0,242,243,127, 2,200,117, 32, 95, 2, 8,168,166, 37, 94,125,219,238,235, 94,247,178,235,190,245, 35,
+159,121,250,179,208, 41,130,133,163,117,102,190,111, 78,132, 22, 3,216, 61, 23, 33,180,122, 79, 20, 93,182,214, 58, 19,209, 81,
+ 67,111,219,136,116, 31, 51,223, 61, 39, 31,126,148,136,238,106,121,191, 99,204,124, 63,234,110,102,182, 6,251, 72, 2, 44,237,
+ 6,157,172,195,247,142,237,227,207,225,249, 30,107,123,191,203, 17,229,154,245,113,209, 14,221, 28,134, 37,101,123,205,253,184,
+143,153, 47,105,251, 93, 62,180,127,243,107,189, 9,212,233,251,219,146,183,166,123, 31, 58,202,135,246,135,247,247,208,254,187,
+ 47,182, 99,221, 44,192,143, 94,119,216,228,213,237,186, 63,192,135,246,239,237,162,245,206, 58, 80,111, 7,116,218,185,146,191,
+241,221, 7,111,251,133,239,127,213, 53,119, 76,198,192,132, 74, 64,105,170, 29,133,112,175,228,114,138,252,197,223, 4, 90,189,
+198,189,193,253,191,245, 97, 60,242,149, 53, 96,219, 42,214,214, 43,128, 36, 50, 2,150, 51,194, 53, 43, 57,118, 44,229,216,182,
+109, 21,191,255,209, 71,176,255, 21, 55,227,192, 29,183, 2, 89,142,108,239, 55,161,250,228,191, 7, 93,123, 11,192, 10,138, 8,
+189,165, 30,190,127,255, 75, 14,124,228, 51, 79,255, 59, 0,103,176, 57, 10,126,209, 54,154,135,113, 17,181,197, 94,111,113,119,
+234,243,192,135,136, 30, 54,173, 73,239,243, 54,220, 89,155,224, 61,115,222,239, 40, 51, 63,140,144, 10,181,199, 23,183, 74,125,
+ 96,214,241,121,199,118,247,115,116,190, 15, 92, 41,138,218,156,203, 59,163, 40,253, 82,128,186,237, 43,239, 71,154,126, 15,122,
+183, 54,153,121,111,155, 14,226, 34,108,115,107, 61, 1,232, 70,105, 30,222,223, 57, 66, 52,186,247,161,135,249,208,254,205,172,
+231, 75, 98,198,161,240,215,253, 65,116, 53,247,157,125, 21,219,197,212,119, 91, 81,220,234, 27,110,219,242, 79, 63,252,223,189,
+226,119,191,255,101, 59,239, 24, 14, 37, 36,164, 6,116, 1, 32, 35, 80, 70,160,156, 64,153, 0,229, 4,113,195, 43,221,155,124,
+241,196, 57,252,241, 39, 31, 7,150,151,116,153,155, 16, 64,150, 65, 66,224,194, 68,226,139, 39,135, 56,246,204, 16, 37, 19, 84,
+150,225, 3,159,254, 82,125, 0,215,220, 14, 30,157, 7, 80,153,163, 97,160, 82,120,233, 11,118,222, 6,224,122, 92,190, 65, 53,
+ 7, 77, 20,185, 89,138,215,223, 0,207,110, 2, 20,142, 70,159,221, 10, 16, 11,210,180,109, 2,165, 3, 17,192, 46,114,124, 71,
+158,163,243, 61,118,165,250,239,155, 20,130,223,171,253,236, 60,231,105,142,157,133, 86,111,223, 70, 68,119, 18,209, 93, 68,244,
+128,247,117, 23, 17,237, 52,175,241, 65,242,110,227,120, 93, 73, 59,104, 34,234, 29,115,239,239,226, 17,247,162,235,249, 82,219,
+145, 5,216,145,206, 58,251,154,140,212, 45,221,126,195,143,254,253,107,255,197,187,191,227,230,159, 40, 84,134,225, 84, 1, 25,
+ 3,172, 64, 12,144, 34,112, 70,134,122,215,127, 66,121, 15, 98,199, 11,221, 27, 29, 63,121, 30,163, 97, 9,108,237,215,126,130,
+141,173,133, 0,152,113,110,189, 68, 57,173,240,130,109, 57, 46,140,203,250, 32,182,236, 1,144, 1,147, 33,104,105, 11, 24, 12,
+ 84, 21,110,221,179,101,119,191,151, 93, 55,153,202,207,110,242,188,238,159,241, 59, 95,116,179, 3,158,250,123, 19,209,226,129,
+ 22, 96,197, 2,209,117, 16, 53,182, 8,200, 22,101, 14,142,205, 56,199, 77,189, 87,124,108, 87,240,124,175,136,130,217, 56,110,
+113,206,251,254,103, 83,155,110,254,118,145,102, 55, 15, 48,243, 81,132, 41,142,119,206,113,164, 46,223, 90,111,182,137,189,184,
+251,171,163,230, 32,226,191, 20,138,116,195, 28,204, 82,204, 31,136,216,144,206, 58,235, 64,221, 70,191, 91, 6,217,235,255,245,
+183,191,224,208, 61,251,174,253,134,233, 20, 24, 23,186,229, 43, 75, 6,149, 10,189,158,192,154,148,106, 9, 66, 32,207, 92, 5,
+ 59, 1, 0, 87,238,205,118,111, 91, 70,214, 43, 32, 21, 76,191,120, 54,160,110,254,207, 4,100, 2, 27,195, 18, 95, 26,143,209,
+191,195, 59, 84,150, 0,151, 64, 53, 6,196, 86, 16, 43,176, 82,216,185, 82, 44,111, 91,238,237,120,102, 58,218, 20, 3,177, 72,
+206,210,228, 85,239, 67, 61,158,243, 65,204, 22,175,161,101, 35,217,107, 70,150, 94,140,237,152, 17, 1, 62, 27,187,168, 77,218,
+188,118,223, 21, 62,223,203, 14,234, 6,208, 31,140,206,227,158, 43, 57,161,207,164, 35,238, 71, 77,151,239,101,230,131,177, 48,
+112,211,239,187, 64, 62,218,228,221,103,173,245,240,254,214,181,230,151,106, 61, 47, 2,228,182,180,237,190, 46,250,238,172,179,
+205,129,186,165,178,139,151,238, 25,252,192,111,125,255,173, 15,188,102,247,242,238,209, 84, 1,253, 92, 3,122,169,144,151, 10,
+189,165, 12,255,252, 3, 79,124,234,230,237,189,237, 63,177,239,218,155,199, 12,144,141,214,203, 18,234,212,163, 16, 55,189, 22,
+ 0,240,178, 27,119,225,235, 95,180, 27,127,249,217,147, 64,158,107, 16, 23, 6,208,109, 95, 56,165,255,118,124,102, 3, 47,186,
+174,126,110,249,252,147,192,228, 60,120,178, 29,100, 38,198,176,178, 78, 1, 4, 46, 3,253,110,162, 39,120,155,236, 34,226,181,
+212,230,181,153,249,214,207,133,157,189, 4,175,189,154,206,119, 17, 64,191,255, 57, 26,185,235,119,177,195,149,186,142,116,239,
+ 67, 15,152,136,186, 94,235,161,176,237, 57,189,191, 38, 50,239,250, 20,116,214,217, 69,128,186,165,219,119,223,245,247,118,190,
+253,151,190,237, 5,255,227,117,131,162, 55, 84, 4, 90,214, 33, 56, 79, 21, 6,138, 49,238, 1,255,195, 31,126,233, 15, 15,127,
+248,153,223,251,181,187,110,185,151,216, 48,239,153, 81,191,231, 2,124,226,111,221, 27, 11, 65,248,233,239,190, 19,223,246,153,
+255, 15, 24,151, 64,191,103,166,187, 25, 80, 87, 0, 88, 1,235, 67,188,250,229, 55,226,135,190,249, 21,238,111,213, 51,159, 5,
+115, 9,146, 83,253, 66,102, 8, 98,156, 89, 31,143,206, 15,167, 23, 46, 99,244,244,128,233,110,102,237, 32, 54, 47,246,153, 85,
+131,123, 41, 1,247,249, 98, 87,219,249,198,128,126,248, 82,170,207, 55,185,222,206, 70,226, 70, 91,202,117,165,128,125,145,181,
+126, 69,239,175,137,208,227, 62, 5,135, 13,131,115, 44, 69,231, 27,230,225,157,232,172,179,175,113, 80, 39, 0,148,103,244,226,
+119,252,163, 27,126,233,237,255,213,117,223, 90, 85,192, 48, 23,160,190, 0, 43, 6,143, 36, 86,114,194,241, 73, 53,254,145,223,
+252,226,175, 62,244,133,243,191, 5, 64, 61,190, 86,158, 0,241, 75,217, 69,234, 0, 6,203,144,199, 63,132,252,236,113,208,142,
+ 91, 0, 0,111,126,245, 45, 56,252, 79,254, 1,222,246,107, 31,196,240,220, 4, 24,244,129, 76,231,211, 49, 45,129,225, 8,175,
+121,233, 30,252,238,219,191, 29, 43,131, 66, 31, 85, 57,130,252,204,251, 64,189, 62, 64, 18, 96, 5, 86, 18, 16, 2,143, 61,125,
+238,228,120, 42, 79,226,242, 9,229, 0,157,115, 62,224,109,178,155,142,190,158, 43,144,120,142,236,170, 57, 95, 51,141, 45, 6,
+244,123,158,227,195,122, 46, 29,185, 69,214,250,225, 69, 75,204, 46,145,221, 29, 1,122,215, 41,174,179,206, 60, 19,115, 64,125,
+247, 59,191,237,198, 95,185,247, 27,174,251,214,113, 5,148,203, 57,104, 41, 3, 43, 0, 67,137,149, 65,134, 63,123,114,227,196,
+254,119,127,238,103, 30,250,194,249,255, 11,192,113, 0, 79,124,254,212,248,243, 16, 4, 72, 35,122,202,132,166,216,171,117,148,
+ 31,122, 87,240, 33, 63,241,198, 87,224,175,126,254,251,240,182,127,252,117,184,117,103, 31, 3, 46,177, 42, 36, 94,255,162,107,
+240,203, 63,249, 45,248,139,119, 28,196,173,123,182,185,215, 87, 31,251, 85,240,185,227, 64,209, 7, 27, 17, 30, 42, 9, 8,194,
+231,191,114,246, 75,208,115,214,213,243,236, 58,207,107,139,121,181, 30,223,129,171,244,124,219, 0,253,238,231, 25,160, 63, 95,
+237,185,188,191,190,106,254,129, 5, 1,125,111,119,203, 58,235, 34,117, 0, 55,237,232,237,255,145,175,219,249,198,233, 88, 1,
+171, 5,168, 71,224, 41, 35, 27, 87,232,175,100,248,141, 79,157,254,220,127,255,187,199,255,245,249,145,252, 32,128,211,208,131,
+ 94, 6,127,241,216,133,143, 62,117,161,252,209,107,150,139, 92, 50,215, 69,112, 75,203, 80,143,255, 5,170, 15,255, 34,242,111,
+120,155,251,156, 87,221,124, 13,222,245,163,223,132,159,255,161, 10, 79,159,217, 64,175,200,113,195,206,149,198,241,200,207,252,
+ 1,170,191,249, 13, 96,176,172,189, 14,145,129,165, 2, 73,133,114, 60,193,251, 62,248,216,135,161,251,209, 95, 78, 80,191,152,
+ 13, 34,160, 80,153,121,199,115,221, 10, 52,178, 99,222,241, 45,164, 14, 54,245,219, 87,235,249, 94, 77,128,126,177, 34,198,203,
+185,214,195,251,123,104,255,142, 43, 56, 48,101,223, 69, 92,143,171,194,177,236,172,179,203, 29,169,231,183,236,236,191,104, 71,
+ 63, 67,165,180,186,157,135, 18,189,169, 4,245, 9,111,127,255,151,143,190,245, 55, 30,251,159,207,143,228, 7, 0,156, 0,176,
+ 6, 96, 10,160,124,242,220,244,163,239,251,236,217, 79, 22, 57,192, 99, 9,128, 65, 2,186, 94,125,121, 11,228,223,252, 7,148,
+ 71,127, 26, 60, 60, 21,124,224,160,200,113,203,158,109, 77, 64, 47, 71,144, 31,121, 55,170, 15,190, 3,212,239,129,178, 76,231,
+235,139, 62, 80, 86, 40, 4,240, 95, 62,255,212,211,127,249,153, 19, 71,161,123,191, 95, 22, 80,143, 70,124,110,102, 83,137,203,
+196,238,126,158,173, 3,255,248,118,152,182,173,207,102,163,124,190,159,239, 85, 1,232,166,117,111,236,124, 93,153,207,214,109,
+ 96,219,214,250,213,115,127,117, 75,217, 46, 82,239,172, 3,117, 0,217,103, 78,140,190,240,149,169,172,150,151, 51, 44,151, 18,
+203, 25,176,158, 41,254,193,247, 30,251,237, 95,120,240,169,127, 1,224, 83, 0, 78,153, 8, 93,163,183, 30,242,114,226,151,254,
+252,196,145,181, 82, 34, 47, 37, 80, 42,173,154, 51, 77,105,176,178, 5,234,177, 63,198,244,125,111,133,252,187,247,129,207, 63,
+145,126, 32, 55, 78, 66, 61,118, 20,211,223,251, 81, 84,159,248,183,192, 96, 0,100,185,110, 54, 67, 4, 18, 5,104, 92, 2, 25,
+227,103,127,231, 19,191, 7,224, 81,243,249,151, 28,212,189,186,101,223, 22, 42, 47, 50,101, 72,254,134,124,223,156, 72,247, 74,
+219, 17,132,185,219,251, 22,184, 22,247, 93,197,231,219, 6,232, 15, 99,118, 29,247, 92,167,143,153,239,243,190, 14, 68,215,108,
+179,235,205, 23,119,157,197,165,169, 83, 95, 4, 8,103,174,117,186,247,161,230,253,213,138,244,103,203, 22, 97, 1,182,232,236,
+162, 17,184, 57,143, 78, 32,215,217,215,148,205,164,223, 79,175, 87, 31,251,254,223,254,226, 3,111,251,166, 61, 7,119, 45,231,
+219, 62,123,106,252,149,255,251, 67,207,252,225,223, 61, 57,252,127, 1, 60, 5,224,156,137,206,125, 16,149, 0, 70,143,158, 28,
+255,241, 59,254,244,233, 3,135,190,253,166, 55, 85,235, 21,144, 11, 80, 63,171, 37,108,203, 91,129,106, 13,229,135,126, 14,212,
+ 91, 5,237,122, 41,196,206,219,128,124, 0,168, 18,234,220,227,224,147,127, 7,140,207, 1, 69, 1,172,108,243,158, 86, 0, 74,
+128, 39,132,222,170,192,191, 63,250,249,207,252,231,191,126,226,183,161,169,247,242, 50, 68,231, 7,208,156, 47,110, 85,183,139,
+218, 61, 8,123,175, 63,104,198,140, 30, 93,224,243, 15, 26,176,188, 44,130, 36,163,178,126,192,219, 0, 15, 48,243,123, 82, 17,
+171, 87,242,181,227,106, 61,223, 25,128,254,166,103,153, 38,216, 27,129,200,253, 94, 84,187,207,244, 58, 56, 60,175,214,220, 27,
+163,235, 95,227,203,222, 26,215, 68,231,139,174,245,230,253,213, 99, 85,143, 46,240, 25, 7,141,115,240, 64, 11,168, 31,156,209,
+152,230,136,119,223,238,230, 67,251,143,180, 40,222, 83,165,137,157,117,246, 53, 13,234, 37,128, 51,127,117,236,194,191,251,171,
+ 99, 23, 30, 4,176, 5, 58,111,254, 52, 52,213,190,110, 94, 19,183, 21,179,243,214,159,254, 55, 31,120,234, 93,175,190,105,249,
+214,183,220,177,235,246,209,249, 41,104,107, 15,232, 11,221,105, 14, 12, 20, 5,168, 40,180,130,253,244,167, 80, 61,243,176,123,
+ 59, 18, 57,144,247,128,149,213,232,105, 5, 48,149, 96,181,132, 65,191,135,135, 31, 57,113,246,127,250,183, 31, 57,100,162,244,
+ 17, 46, 98, 66, 27,207,104,141, 54, 11,180, 54,179,201,154,110,105,247,160,158,108,101,129,238,168,217,248, 31,142,192,193,110,
+176,251, 60,128,184,156,118, 24,225,152,204,187, 77,164,121,216, 59,182, 3,168,213,199,199,204,102,191,239,106, 59, 95,115, 94,
+ 41,202,248,189,155, 88, 10, 71, 46,162,118,253,128,113,152,236,168,208, 84,239,247,120, 84, 46,160,219, 0, 95, 18, 7,135, 15,
+237,191,184,181, 30,229,204, 77,119,184,230,253, 61,180,255, 98,239,175,237, 11,111, 29,153,143,155, 97, 44,113,202, 33, 72, 21,
+153,215, 29, 70, 61,238,213, 54,204,241, 85,242, 71,112,101,219,210,118,214,217,243, 18,212,165, 1,238,202,128,184, 48, 63,155,
+152, 47,137,246,161, 41, 21,128,117,197,252,233,255,246,119,190,248,179,187, 86,242,119,252,195,219,183,221, 56, 94,155, 2, 91,
+ 10,208, 32,171,235,215, 53,130, 3,189,193,236, 58, 52, 6,160, 24,152, 72,168,243, 83, 44, 93,191, 7,159,125,234,236,250, 93,
+ 15,252,249, 3,107, 27,229, 7, 61, 39,227,114,219,195, 6,208, 55, 45, 90, 34,162,195, 94, 3,155, 29,254, 70,255, 92, 47, 4,
+ 19,173,223,101,162,155,189, 45,145,167, 31,185,221,133, 57,212,230,243,249,124, 19,182,217,136,238,232,179,248,172,189, 88, 60,
+ 15,125,248, 10, 56,116,179,215,122,139,194,220, 76, 65,187, 36,247,151,238,125,232, 44, 31,218,127, 63,194,113,174,169,198, 54,
+ 15, 24,150,192,127,221,221, 51,174,231, 61,230,216, 58, 80,239,236,107,194,196, 28, 24,173,160,243,229,103,161, 39,159,157, 3,
+ 48, 52, 63,231, 57,127, 59, 1,176,118,126, 36, 31,250,238,195, 95,248, 95,127,227, 19,167, 63, 55,232, 9, 20,231, 75,168,181,
+ 18, 24, 43,247, 46, 4, 2, 81,226,203,252, 7, 9, 96,170,192,231, 43,208,217, 9,150,118,108,199, 67,199,214,158,254,214,159,
+ 57,250, 51,199, 78,172,255, 39,115,108, 67, 92, 62,213,251, 81,179,185,222,101, 6,113, 60,155,254,223,135,161, 91,110, 30,198,
+ 98, 53,200, 71,204,198,116,249, 39, 90,233,161, 48,119,206,249,172,163,208, 99, 79, 31,190,218,207,247, 57, 0,200,251,177,184,
+184,242, 8,116, 58,224,158, 43, 92, 57, 80,175,245,123, 31,186,115, 94,201,152,233, 50,119, 73,238,175,121,175,219, 34,118,168,
+237, 51,239,194,108,225,160, 94,167, 23, 57,222,181,179,206,174, 86,163,203,252,254, 25,128,101,227, 41,191,226, 71, 94,191,251,
+199,255,213,155,111,252,206, 27,183,245,242,106,194,168,114, 2, 6, 25, 40, 23, 58,114, 23,222,225, 48, 3, 18,224, 74, 1, 99,
+137,172, 84, 40, 10,194,121, 9,252,220, 7,207,252,217,255,254,135,143,189,167,148,234, 99,168, 75,233,170,171,241, 6, 24, 42,
+ 56,142, 18,143, 65, 79, 55, 59,250, 28, 30,151,165, 75,253, 70, 31, 71, 23,156, 6,119,213,157,239,115,116,223,247,162,169, 77,
+120, 24,154,110, 63,123, 85,158,151, 86,155,167,239,239,156,124,251, 37,250,188, 99, 0, 30,238,102,166,119,214,129,250,229, 5,
+246, 1,128,109, 0,174,123,225,206,254,183,220,253,134,221,223,245,195,251,174,121,221, 11,182, 20, 5,152,192,204, 80, 68, 80,
+222,209, 8, 6, 4,179, 46, 93, 35,224,244, 88,170,255,248,169, 51,159,126,207,135,159,249,195,191,249,242,198, 31, 1,248,138,
+ 97, 14, 70, 87, 43,160,119,214, 89,103,157,117,214,217,213, 6,234,246,115,122, 0, 86, 0,108, 5,112,221,206,213,252,239,189,
+238,150,213,215,125,223, 29, 59, 95,123,199,141,203,215,239,232,103, 43, 43, 57,245,114, 65,162, 82,224,161, 84,211,181,169, 26,
+ 62,242,204,232,228,145, 79,158,249,235,191, 60,182,254,209, 39,207, 77, 31, 6,240, 4,128,243,208, 57,244,203, 86,147,222, 89,
+103,157,117,214, 89,103, 29,168,207,254, 44, 1,160, 15, 77,201, 47, 67, 43,234,119, 2,216,179,220, 23,187, 6,185,216, 90,100,
+212,171, 20, 87,227,138, 47, 12, 39,242, 52, 51,158,129,166,216,207, 67,231,205, 55, 48, 95,168,215, 89,103,157,117,214, 89,103,
+ 29,168, 95, 65,112, 47, 76,244,110,191,114,184,233,235,128,137,192, 75,243, 53, 53, 64, 94,117, 96,222, 89,103,157,117,214, 89,
+103,207, 31, 80,143, 63,223,130,188,253,191, 15,234,236,253,191, 3,242,206, 58,235,172,179,206, 58,123, 30,131,250,172,227,233,
+ 64,188,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,
+179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206,
+ 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,172,179,206, 58,235,236, 50, 25,245, 86,119, 48, 0, 16, 17,
+116,191, 23,219,255, 69,255,155, 26,237,105,108,131, 55,129,102,239,154,250,111,137, 8,204, 0, 17,192,204,230,253,227,215,153,
+239,204,103,219,191,169,251,206,144,251, 55, 71,127, 35,132,208,191,101,175,217, 28, 9,243, 61, 64,222,123,212, 31,173, 39,194,
+249, 39,101,103,183, 55, 78,133,253, 99,139, 14,135,220, 59, 39,174,232,130, 23,222,204,144,103,112,243,189, 40,124, 93,219,123,
+ 18,145,158, 71, 79,109, 47,240,222,151,128, 76,100, 96,102,247,153, 48,215, 79,144,112,231,102,175,159,190, 78,128, 32, 97,238,
+139,242,206,221, 92, 51,161,144,101,194,188, 7, 65, 49,160,226, 38,190, 20,223,103,123,238, 0, 9,129, 60,203, 80,150,149, 62,
+ 38,119, 27, 9, 4,130, 16, 4, 34, 97,214, 6, 67,228,132, 34,239, 99, 60,154, 64, 41,165, 15,135,204, 25,154,255, 11, 33,244,
+ 26, 18, 18,130, 72,255,220,126,217,215,233, 69, 9,102,225,238, 3, 17,233, 53, 69,245,202, 17, 68, 96, 40,184,153, 65,100,214,
+143, 18, 40,138, 2,211,178, 52,199, 95, 66,136, 12,138, 21, 88, 41, 40,239,139,153,161,152,145,103, 25, 20, 51, 88,169,250,115,
+216, 30, 47, 39,158, 51, 66,170,255, 18,179,183,102,163,181, 64, 11,172,189,212, 90, 97,102,243,220, 1,194, 27,127,236,175, 5,
+251, 21, 30, 71,248,127,127,207, 80,138,189,207,108,126,110,253,123,110,156,159,253, 25,145,192,246,237,219, 64, 68,144, 82, 97,
+237,252, 26,148, 82,245,177, 49,167, 30, 89,247, 70,222, 33, 53,206, 55,213,218, 42,120, 54, 24,225,191,227,223, 53, 62, 59,190,
+ 62,245,103, 40, 86,193, 1, 6,215,213, 91,247,246, 61,236,185, 9,179, 70,236, 30,167, 84,165,215, 10,244, 20,203,248, 58,232,
+141, 92,129, 89,130,153, 16,142,189,148,201,251, 29,158,191, 2,113,189, 19,177,208,107,208,237,169,156, 62,247, 54,179, 31, 79,
+138, 27,127, 67,246, 89,186,220, 0, 71,100,206,195, 46,218,112, 83, 18,124,137, 63, 11, 8,251,162,186,139,171,241, 10,172,230,
+189, 73, 56,130,124,241, 79, 7, 88,239,149,121,184, 25,144,123, 40,155,215,219,190, 72, 4,223, 19,197, 27, 16, 69,191,243, 55,
+161,112, 49, 9,225,223,216,122, 1,219,159,107,204, 50, 64, 79, 77, 16,243, 23, 5,145,208, 15,136, 1, 50, 50,199,196, 6,222,
+221, 57,154,247,176,199, 37,132,104,189, 70,201, 31, 11,106, 5,173, 69, 55, 82, 31,192, 45,104,251,224,219,230, 4, 36,223,143,
+194,159,233, 51,166,166, 99, 96,127, 39, 8, 2,158,243, 35,234,215,178,210,191,215, 27, 7, 5, 27, 24,145,208,175,133,183,217,
+129, 33,165,132, 16, 2, 82, 41, 16,132,118, 16, 68,180, 41, 70,231,154, 9, 1,134,118, 50,136, 8,121, 33,156,243,199,138,220,
+ 6,197, 0, 88, 73,235,175, 65,112,166, 31, 14, 33, 52, 96,219,115, 32,242, 46,156,113, 24, 72,152,177,189, 6,176,173, 67, 97,
+128, 30, 68, 32,101,214,187,121, 63,138, 94,235,214,165, 93,207,208,142, 72,150, 21,168,170,202, 57, 4, 89,150,129,132, 0, 87,
+ 10, 62, 84,217,107,108,223, 27, 74,185, 53,103,215,185,118, 88, 18,119,187, 94,176,141,103,222,130, 36,115,232,120,211, 44, 84,
+167,250, 28,156,115, 98, 16, 89,248, 27,172,231,244,196, 27,176,118, 82,244,217,213,224,175,143, 65, 8,104, 32, 49, 87, 64, 63,
+195,193, 71, 39, 29,121,255,190,185,199,211,108,124, 36, 8, 85, 85,161, 40, 10,244, 7, 61,172, 84,203, 24, 14,135, 80,204,238,
+152,106, 39, 30,225,166, 69,245, 14,192,201,205, 55, 1,236, 4, 16,147,219, 71,252, 45,141, 18,129,136, 3,114, 14,159, 49,187,
+214, 27,255,142,252, 52,119, 15, 9,222,121,152,231,209,237, 83,236, 57, 81,153,187, 62,202, 56,154, 2, 84, 95, 96,174, 63, 81,
+ 31,148,104, 58, 62, 12,180, 97,169,117,160, 89,213,199,228,175, 41,237, 91,112,114,255,109,183,244,107,174, 20,160, 55,247,116,
+170, 29,148,103, 97,236,240,136,163,123,154, 58, 99, 29,156,184, 21,226,157,187,221, 11, 24, 53,198, 61,219, 43,147, 55, 65,153,
+ 3, 96, 14, 31, 64,189,140,154,145, 55,188, 40, 27, 13,176,175,189,249, 58, 34,135, 57,121,246, 54, 27,182, 27,142,141,186,237,
+118,234, 69,198, 76, 92, 3,148,219,123, 8,201,216,217,109, 80,222, 58,167, 48,218,111, 33, 26,234, 7,217, 46,110, 31, 40,105,
+193,197,196,115, 54, 90, 11,170, 51,162,249,214, 13,197,121,157, 97, 52, 31,191, 86,144, 8,158, 47,231,248,136,122,211, 96,165,
+191,183,215,131,201, 91,120,190, 99,102, 0, 68,218, 40,139,205,235, 21, 65,136,204, 29,181,200,132, 91,240, 58, 58,101,183, 96,
+117,244,205,238,190,104,112,211,224,206,138, 33, 33,161,252,141,218,128,142,254,252, 12,101, 85,194, 71, 11, 65,169,181,138, 0,
+208,235,107, 45,220,181, 35, 34,176, 57, 39,123,141,252,245,224,175,103,114, 0, 97,247, 91,189, 70,133, 32,148,101,137,162,200,
+ 33,149, 12, 34, 90, 86, 42,120, 47,165,148,119,188,139, 82, 58,212,186,190, 82,207, 95, 27,152,167,126, 23, 58,134,222,170,169,
+ 61, 4,143, 9,171,159, 23, 29, 97, 83,116,157, 20, 0,225,156, 20,123, 13, 26,123, 42,249,142, 87, 91,180, 88,191, 63, 43, 13,
+201, 89,175,128, 98, 96,105,105, 9, 69, 81, 96, 56, 28, 98, 58,157,134, 15,115, 43, 72,144, 99,237,194,232,208,115,102, 45,192,
+ 71,142,168, 3, 47, 21,130,179,125, 31, 65, 66,131,171,183, 56,136, 73, 71,230,177, 83,192,145, 67, 76,245,251,198,192, 79, 76,
+ 46,138,183, 81,186,195, 15,235, 68,112,130,194, 97, 54,123,172,208,191,119, 0, 33, 67,208,225, 57, 43,142,168,225,152, 94, 12,
+ 32, 19, 35,201,246, 94,110, 64,119,247,141, 98,122, 85,175,233,139, 5,244, 96,253, 48,106, 64, 33,239, 71, 62,190,248, 14,162,
+ 69, 51, 10, 89, 96,231,152,138, 26, 19, 23,243, 42, 4,124,250, 68,239,119, 10,164, 65, 61,166, 65,200,219, 24,107,148, 99,142,
+ 35,243,217,116,161,207,114,251, 52,157,125,127,246, 60, 65, 23,113,120, 84,150,240,168,120, 10, 64,158, 2,240, 50,206,101,243,
+ 16,136,218,247, 70,138,192, 46,112,110, 41,160,159,231, 70, 64, 30,149, 62,107, 79,110, 80,237,132, 77,131,121, 68,132,180, 30,
+151, 5,224, 89, 17, 63,123, 81,174,141,212,172,195,100,169,111,187,177, 43,102, 8, 33,116, 68, 46, 37,178, 44, 11,162,100, 27,
+253, 82, 12, 56, 36,244, 86, 69, 38,130, 53, 0,207,164, 35, 61,159, 98, 39, 34, 32, 51,199,165,148,159, 60,177, 8, 13, 41, 43,
+183,102, 40,113,145,125,234,152,124,234, 61, 90, 15,254,250, 38,147,122, 72, 51, 33,220, 88, 70, 89,150,161, 42, 43,119,205,132,
+208,235, 82, 41,233,162, 32, 21,208,141,245,245, 14, 29,133, 89, 27, 18,181, 4,218,225, 6, 73, 66, 4, 14, 78, 0,194, 20, 62,
+199,241, 80, 5,170,147, 10,205, 3,178, 15,171, 23, 1, 58, 32, 19, 62, 37,108,163,118,225, 40, 93,125, 15,244,187,251,207,119,
+189, 46, 40,216, 67,244,181, 82,173,155,231,104, 56,194,120, 60,193,242,210,146,142, 66,242, 28, 75, 75, 75, 32, 33, 48, 25,143,
+ 29,235, 96,239,119,176,151, 49, 7, 32, 22, 48,123,194,166, 96,234, 96,193, 50,124, 22,228,125, 0,246,119, 91,197, 74,191, 46,
+136, 98,252, 44, 13,213, 25, 74,110, 18, 18,100,118,111,206,204,243,192, 92,179, 91,198,145,209,159, 89,239, 3,204,170, 94, 27,
+ 44,235,251, 25,165, 72,124,135,197, 94,115,197,213,124,144,242, 93, 14,111, 55,180,174, 79, 0, 0, 32, 0, 73, 68, 65, 84,239,
+155,149, 16,154, 23,177, 83, 2,196, 47, 39,160,251,235,221,165, 60,136, 46,217,251, 54,206,141, 91,168,246,248, 92, 91, 48,179,
+ 94,183,155,204,221,122, 59,185,117, 50,253, 67,204,253,168, 36,240,164,133,119, 35,185,246,172,227,123,226,232, 6, 47,202,117,
+ 0,230, 45, 76,231,201, 8,114,185,208, 24,132,236, 67, 36, 32,220,193,182, 81,208, 13,118,135,154, 17,118,224, 93,219,168, 27,
+ 92, 3,122, 76, 81,123,153, 5, 63,255,203, 51,252,167, 89, 0, 26, 71,227, 51,129, 54, 62,254, 89,249,241,248,250,121,212,253,
+172, 60,127,112, 93,218, 34, 61,151, 91, 55, 15,183, 1, 95, 86, 74,211,158,142,126, 34,143,114,212, 14, 35, 19,160, 12,197,108,
+157, 5, 65, 4, 22,153,142,100,221,161, 8, 48,235,124, 53, 75,128,136, 77,110, 94, 59, 16,236,229,221,107, 90,145,155,231, 29,
+252, 59, 62,105, 17, 48, 51,173,121,232,134,158,129,195,205,220, 57,120,181,211, 2,232,115,148, 74,154,124, 47,160, 20, 60,138,
+154, 19, 27, 39, 45,240,208,198,172, 67, 2,200,253, 72,218, 7,222,232,243,194,245,225,165,168,216, 37,164, 32,168, 62, 55,110,
+210,108, 81, 90, 7,206,105,240,129,157, 57,157, 6,176, 65, 64,124, 94,241,181,137, 99,147, 48,237,192, 80,138, 33,160, 48, 28,
+ 14,177,125,251,118,167, 85, 88, 26, 12, 0, 6,166,211,137,102,118,136, 64,126, 36,225, 40, 77, 74, 78,137,106, 48, 81, 92,179,
+128,196, 84,131,172, 97,233,124,135, 60, 0,141, 84,142,157, 17,210,251, 49,237,110,157, 8,239,115,236,103, 40,161,188,247, 99,
+199,118, 1,181, 99,164,217, 77,119,128,115,162, 59, 54,247, 93, 69,193, 22, 69, 65,149, 57, 87,166, 25,239,196, 11,229,196,103,
+129,253,229,206,165,251,193, 74, 20, 77,206,202, 6,180, 30, 39,181, 60, 95,230,225, 89, 44,227,192, 28,176, 37, 62,208, 51,217,
+200,116,113,198,206,173, 31,162,228,222,151,135, 81, 78, 45, 26, 83, 6,193,195,168,157,147, 84,187, 59,110,242, 41,132, 38,120,
+199,148,180, 32,161,189, 94, 75,237,250, 15, 15,207,167, 41, 45,133,204,224,134,216, 77,152,200, 62,184,201, 45, 81,114,107,196,
+ 27,209,109,243,168,238, 36, 8,207,163,234,253,168,156, 82,140,195,108,166, 64,204, 89, 16, 41, 17, 96,173, 57,104, 1,127,227,
+249,177,239,236,176,247,124,184, 13,180,222,244,200,172, 25,106,220,108, 29,173,147,183,217,250,209,159, 91,111, 74, 65, 26, 64,
+ 36,179, 30,237,251,249,192,210, 30,209, 82,152, 27,228, 26,128,219,238, 65, 13,214,236, 57,158, 42,120, 55,101, 4, 75,150,126,
+174,164, 4, 67, 26, 42, 77,255,157,146, 58,226,210,128,174,188,252,100,155, 3,181,104,116, 78, 51, 35, 5, 74,109,164,209,166,
+154,118,222, 40, 65, 81,133,105,176, 24,228,201, 3, 15, 14, 88, 26, 56, 96,119,209,124, 38, 32, 64, 80, 81,176,228,221,250,136,
+106,231, 86,102,194,143, 64,167,211, 41,152, 25,101, 85,129, 25,216,178,101, 21,103,207,150, 94, 78,146, 12,181,202,128, 16,176,
+ 7,192,190,254, 2, 65, 54, 46, 4, 44,110,110,204,254,115,217, 10, 70,212, 30, 96,128,195,245,230, 3,163,141,248,225,114,255,
+ 28,105, 96, 80,167, 43,163,103,202,166,200, 50, 81, 59, 48,142, 35,177,194, 85,165, 92, 32,211, 78,161,123,108,138,221,115, 69,
+ 27,240, 54, 29,204,103, 67,207, 95,202, 8, 61, 22,114,194,207,255,115,184, 23,182, 57, 27,254,177,199, 14, 79, 35,237, 73, 45,
+ 44,128,151, 26,113,175,143,252, 10,248,226,189, 69, 19,248,158,230, 68,127, 41, 52,229,227,250, 30,229,241,102,226,148,145,230,
+160,153,211,121,118,120,155, 62, 37, 46, 20, 81, 83, 80,230, 40,243, 54,213,183, 31,233, 19, 55,189,158,132,248,171,241,190,204,
+193, 67, 90, 11, 79, 16,230,215,103,128,120,176,161, 50,205,166,195, 83,209,240, 28, 38,101, 94,116,239, 31,243,166, 41,255, 56,
+234, 78,129, 68, 27,128,120,155,145,151,217,180, 72, 17, 56,167,181,216, 75, 36,222,223,219,231, 60,160,142,243,181,174, 70,193,
+167,219,237,123, 8, 1, 82, 10, 51,106, 38,102, 68,233, 62,123, 76, 30,168,112, 2, 36,185,214,103, 36,116, 16,194, 59,102, 70,
+205, 68, 72, 41, 27, 2, 50, 77, 37,207,185,239, 52,159,102,111,103, 35, 40, 25, 69,251,142,182,160,136,130,159, 25,195,121,233,
+ 52,127,243,178,231,203,188, 80, 4, 22, 30, 51, 65, 73, 43, 8,172,213,236,179,175,139, 8,171, 88,146, 14,144,214, 47, 16, 17,
+138, 60,119,223, 95,179,107, 23, 78,157, 62, 13, 41,165,183, 47, 81, 82, 43, 96,117, 14,100,153,166, 84,148, 75,233, 61,135,136,
+106, 17, 29,107, 54,177,166,198,117, 74,201,230,200, 93,190,221, 87,189, 91,188,132, 8, 85,239, 20, 69,246,236, 3,124, 74,228,
+166, 60,118,188, 86,202,135,153, 71,114, 78, 78,234,122, 42, 21, 75, 17, 56,208,161,132,142,161, 10, 46, 12,207,212, 47,180,131,
+251,165, 6,250, 58,229,195, 73,231, 53,229, 12,115, 35, 72, 69,144,186,240,127,231,239, 21,126,218, 55, 20,179,209,204,208, 63,
+245,121,202,165, 81, 22,207,223,215,123, 6,207, 23, 4,176, 19,202, 37,220, 75, 67,155, 91,177, 65, 40, 2,160, 96, 67, 20,134,
+183,142,115,222, 54, 79,101,127,238,131, 13,113, 24, 65, 6, 30, 80, 76, 51, 44,144,131,118,212,189, 87,158, 21,208,237, 20, 58,
+ 19,109,212,122, 3, 44,219,162,114, 63, 7,207, 88, 88, 5,159, 42, 93,139, 83, 4,201,197,217, 86, 74, 71, 17, 16,209,226,224,
+159,100, 2, 8,201,133,237, 23, 15, 32,222, 52,108, 57,153,253,121,228,237, 6,251,154, 16,158,150,220,172, 26, 19, 73,133, 4,
+ 5, 45, 38, 37,163, 88,128,229,234,104,188,107, 33, 90,114, 89,202,219,248, 68,189, 18,130, 28,112,211,115,112,127,207, 66,111,
+228,108,162,162,121,105, 26,106,163,217,169, 93, 33,238,235, 2,146, 64, 77, 77, 26,142,224,174,103,204, 26, 4,212, 98,228, 24,
+113, 4,236, 46, 2,138, 64,177,205,148,170, 85,241,204, 58,165, 98,193,118, 22,237, 42, 4,185,244, 69,251,198,204,168,170, 10,
+131,193, 0, 68, 2,211,105, 9, 33, 8,211,233, 20, 91,182,108,193,218,218, 90, 8, 30, 81, 62,191,177,241,123, 41, 21, 54,107,
+ 87,153,168,138,137, 27,229,103,193, 62, 21,129,113, 64,229,115,147,125,115, 64, 78,181,104,212,127,102,157,104,212,110,216,202,
+127, 56,125, 6,193, 87, 67,168,186,172, 45,206,173, 71,223,187,245, 79,106,102, 42,145, 1, 64,122,229,155, 20,209, 16,162,198,
+ 6,226,205, 1,117, 12,162,151, 42,199, 93,151,132, 82,210,113,143,215, 93,252,218, 24,116, 83,107,133,227,188,183,171,194,178,
+169,105, 0,170, 89, 77,225,222, 43, 19,224,186, 78,112,161, 12, 64, 45, 52,181,247,187, 13, 3,189,252,183,249,144, 28, 94,164,
+237,111,142, 60, 47,159, 76,205, 50, 14, 75,121,199,209, 52, 69, 98,161,152,154, 74, 41,203,173,163,144, 44, 95,139, 84,132, 65,
+206,148, 67, 37,169, 32,145,124,125, 43, 5, 30, 69,174,238, 33, 76,228, 76,156,114,157, 90, 34,109, 44, 64,211, 99, 70,142, 59,
+ 5,214,137,243,104,165,216,103,212,175, 39, 63, 51, 12, 42,130, 40,149,146,185,229, 68, 14, 22,161,138,211,122,253, 86,193, 30,
+ 70,110,156,160,236,227,252, 29,121,121, 65,118,255,142,246,230, 40, 69, 68,152, 25,198,183,121,211, 9,138,223,239,107,160,148,
+114,117,233,246,111,109, 14, 61,174,253, 13, 63,214,143,208, 69, 3,208,230,173, 3, 74,106, 9,234,115,173,129,212,139,196, 34,
+167,108,158,195, 17,246,135, 72, 28,143, 86,193,205, 4,118,219,179,192,239, 59, 97, 21,243,179, 54,242,250, 56, 69, 67, 52, 23,
+ 59, 13,227,201, 4, 75,131, 37,172, 44, 47, 99, 56, 26, 66, 8,129,178, 44,177,178,178,130,141,141, 97,227, 92,131,205,218, 3,
+113,112, 51,202, 21, 68, 80,190,115,173,162,210,181,196, 26, 13,246, 64, 31,232,226,168,219,171, 60, 1, 71,149, 60,246,250, 68,
+207, 56,155,181, 30,234,153,244,102, 79,243,210,185,113,206,163,113,173,145,174, 86,162,102,254,124, 86, 66,122,145, 28,185,191,
+135,251,162, 73, 53, 99, 45,181,189,175,171,208, 73, 69,193,158,158,167,205,129,104, 68,225,137,235, 51, 47, 93,102, 75,124,155,
+191,227,228,251,251, 66,249,246,135, 64,120, 94,161,106,222,151, 54, 58, 73, 53, 25,191,220,145, 60, 9,170,206,170,208,107,102,
+168,174,109, 14,114,204,179, 34,218, 68, 34,208, 47, 17,139, 35,246,216, 91, 74, 46, 24, 74,231,186,252,252,175, 5, 58, 39,194,
+ 99,110,148, 19, 36,243,203,228, 69,206,220,210,152,102, 78, 51,152, 36, 85,159,106, 92, 67,115,156, 11,106, 97, 37,136,103, 59,
+ 14, 52,163,153,205,156, 90,102, 49, 35,101, 72, 17, 21, 29, 31, 34, 27,119,144, 60, 79,182,246,166,235, 8,210,169,163,253, 8,
+201, 81,156, 81,238, 51, 46,133,156,177,190, 56, 69,109,121,145, 11, 37,122, 18,136, 68,105, 23,121,231,104, 35, 1, 63,170,179,
+ 15,161, 10, 24, 9, 32,238,207,144,162,153, 23, 1,115,138,156,169,148,106,156, 40, 93,165, 82, 71,190, 28, 53,182, 73,169,111,
+195,205,186,237,121,243,233,234, 32, 87,205, 60,195, 81, 18,144,210, 54,218,145,206,113, 72,231, 96, 99, 42, 94,181,198,146, 74,
+ 74,140,199, 35,112, 95, 55, 62, 34, 18,144, 74, 34,207, 50, 44, 47, 47, 97, 52, 26,153,231,183,241,192, 65,248,249,107, 86,181,
+200,207, 83, 0, 7,155,178,168,115,205, 65, 90,206,103, 2,189,189,135, 41,140,214,226, 38, 79,245,103,115,114,111,112,202,247,
+160, 9,148, 10, 74, 43,245,207,172,172, 94, 5,247,149, 27, 28,170,140, 72, 42,246,122, 18,132,101,133, 92,119, 92,242,210,160,
+ 33, 61, 31,151,210,205,218, 75, 82,224,200, 73,165,254,124,234, 62,249, 30, 70,112, 45,184,233, 44, 44,234, 32,164,211,113,222,
+239, 4,205,208,227, 40,253, 60, 43, 14, 88, 46,246,174,161, 34, 64,139, 30,226,158, 44,169,205, 65,121, 1,204,252,138, 43, 40,
+209, 2, 70,140, 60, 4,227,168, 30, 51,200,164, 80, 64,109,183,229,101, 45,120, 6, 13, 79, 18,205, 86,102, 1,100,208,213,172,
+133,186, 9,212,168,162,217,120, 37, 80,184, 51, 26,245,214, 41,182, 33, 86,185,206, 4,240, 54,197, 58, 45, 16,137, 83, 58,109,
+ 16, 95,171, 54,154,156,102,136,170, 82, 12, 6, 40,113, 41, 90,232,245, 20,253, 59,135, 99,104, 80,182,118,195,168, 21,204, 42,
+202,219, 82, 45,182,243,128,149,147,174, 49,205, 0,201,212,226,111,209, 25, 8,145,206,179, 69, 90, 0, 36,202,192, 92,255, 68,
+ 83,210,231,180, 38,198, 97,136,115, 95,179,238,255,162, 57,243, 48,229, 33, 2,175,157,104,142, 51, 96, 54,145, 90,252,155, 86,
+158,135,209, 26,183, 36,148,185,225, 28, 53,158, 4, 39,150,211,224, 47,188,158, 6,204,170,118,140,144,254, 91,191,251, 92,125,
+190, 28,168,234,253,104,158,136,156,104,174,223,239, 67, 86, 21,164,148, 24,244,251,186,179,159, 82,238, 90, 9,211,127,161,215,
+ 43,176,101,235, 54, 8,202,176,115,231, 14,156, 57,123, 22,231,207, 95, 0, 88, 66,144,192,133,225, 58,136, 8,213,180,132, 82,
+181,198,194,138,205,132, 18, 33,141, 75,158,176,204, 11, 46, 72, 80,163,174, 61,153, 91,142, 58,214,197,251,131,253, 60,246,115,
+231, 30,195,213,230, 21,197,255,106,211, 59, 89,102,201, 15,232,131,117, 28,172, 53,242,170, 38, 22,163,207,219,214,220,102,254,
+ 62,222,255, 93,160, 23, 97, 69, 10,208, 83, 34,183, 69, 24,187,176,143, 69,219,126,231, 57,243, 8, 3, 69,182,187,120,178, 50,
+ 39, 85,237,225, 87,165,242, 66,199,154,174,165,171,111,102, 78,145, 95,233, 71,139,228,229,210, 41,168, 75, 67, 83,241, 9,143,
+146,246,246,135,152,146,231,116,191,157,217,185, 30,207,235, 75,169,189,131, 28,161,109,163, 41, 40,240,120,125, 49, 29,154,210,
+128,153, 45, 87,227,102, 50,190, 3, 48,235, 6, 52,162,124, 74, 68,245, 41, 49,134,207, 24, 48,207, 84,192, 7,215,131,102, 83,
+242, 62, 27, 67,152,211,176,100,193, 84, 1,181,230,130, 82, 64, 17, 58,142, 8,250, 32,176,151, 7,197, 66, 34,133,153,139,159,
+107,142,146, 90,245, 13, 17,224, 10,209,160,250,124, 49,160, 48, 17,171,226,122, 99, 97,197, 51, 29, 30,255,129,110, 3,116, 63,
+ 50,247,157, 28,159,153, 8, 34,123,226,166, 16, 53,225,240,164, 64, 63, 37,114,243,113,161, 6,212, 52,221,202,169,243, 35,160,
+232, 21, 40,138, 1,178, 76,171,212,101, 37,161,164, 68,158,103,238, 51,157,152,109,177,204,105, 99, 99,180,223, 75,169,144,231,
+ 57,152, 37,170,178, 68, 94,244, 32,136, 48,153, 78,177,235,154,107, 0, 16,178, 76,119,163, 19, 89,129, 23,190,224, 38, 92,119,
+253,245,248,202,147, 79, 98, 60, 30,226,228,169, 83, 56,117,250, 52,150,150,151,177,188,180, 21,121, 70, 88, 94, 93, 69,127,105,
+ 9, 85, 89, 2,138,177,188,178,140,141,245, 13,172,173,157,195,112,180,129,241,120, 92,231,190, 81,183, 76, 22,130,116,245, 67,
+162,220, 43,208,201,216,253, 16, 34, 0,115, 63,122,247, 59,212, 49, 24, 97,156,224,165, 72, 92, 23,179,176, 17, 72,168,131, 16,
+ 94, 84,174, 16,118,166,243,247, 32,170, 43, 62,226, 14,105, 30,187, 41,156,182,138, 27, 65, 86, 27, 88,207,162,185, 23,165,238,
+147,142,113, 45, 36, 72,138,117,219,156,129,133, 89, 1,209,210,213,141,189,246,227,246,249,179, 44,158,168,197,115, 77,134, 2,
+141,102, 76,126, 87,200,214, 22,207,126,131,153,182, 61,209,246,238,245,188, 11, 90,217,113, 45, 59,111,120, 51,197,239,137,206,
+ 56,169,238,104, 49, 96,251, 96,232, 55,122, 8,162,111, 15, 96,107,239,140,147,117,218,238,115, 61,202, 61, 19, 89,240,128, 36,
+ 65,145, 19,169,128,248, 88, 91,132,109,141,221, 45,161,124,143,181, 3,254, 57,199, 14, 78,107,165, 0,205,246, 98, 69, 84, 54,
+213, 38,182, 75,229,100,121, 86,204,157,200, 49,251,157,212, 40,200,117,135, 93,186,234,197, 26,230,185, 83,249,102,110, 21,219,
+ 48, 68,150, 37, 1,115, 30,205, 29, 80,220,153,201,193,123, 15,189,136,155,178,248,255,142,162,121, 97,114,200,182, 13,174,205,
+161,171,202, 68,113, 82, 66, 74, 21,156, 95,171,243, 37,218,218,252,166,154,196, 80, 16,149, 55,192, 95, 40,147, 22, 19, 72,213,
+ 27,183,109,108,179, 40,205,102, 63,240, 16,216, 29, 35,225, 34, 35,225,162, 96, 16,161,146,166,202,129,253, 46,104,228, 20,219,
+ 58,183, 62, 59, 95,190,120,228,166,175, 77, 86,228, 80, 92, 33,163, 12,215, 92,123, 29,182,108,221,134,167,159,250, 10,134,195,
+ 33, 50, 34, 20,189, 30,174,187,254, 6, 84,149,196,169,147, 39, 48,153, 76,177,178,117, 21,163,141, 33, 84, 37,145,231, 57,134,
+163, 33,138, 94,134, 34,235, 65, 26,205, 4,152,177,180,188,140, 44, 47,192, 74, 97, 84, 78,177,101,117, 5,107,103,206, 98, 99,
+ 56, 68, 85, 86, 40,171, 18, 43, 43, 75,200, 51,194,250,250, 8,211,105, 21,212,174,219, 60, 57,251,209, 45, 39,174,121,156,139,
+247, 41,122, 54,106,105,239,254, 48,235,186,125,178, 41, 16,192,233, 28, 26,165,136,174, 91,153,108,191,222,156, 1, 36, 35,140,
+152,177, 78,226,178,187, 5,104,244,121,249,243, 77, 1,250, 12,241,227, 60, 16,231,132,120, 50, 21,132,181,150,234,207, 18,159,
+ 11,225, 1,107,170,181,179,128,237,187,224, 71,232, 51,169,118,149, 37, 18, 43,254,141,170, 65,157, 32, 28,197, 66, 43, 59,119,
+115, 88, 23, 57,231,161,138,163, 91, 90, 44,226,246,163, 93,191, 1,140, 15,218,201,252,112, 27, 21, 29,129,173, 77, 13, 8, 18,
+161,151,220, 2,198,241,103,166,234,218, 27, 2,187, 68, 78, 62, 88, 76,169, 94,231,168,157,135,100, 77,249, 12,186,188,221, 83,
+165,153,175,167, 86,218,191,217, 86, 51,149,191,141,155,191,112,152,154,116, 63,171,187,135, 49, 82,204,108,122,177, 54,179,241,
+ 97,186, 69,175,244,204,163, 81,237,103,113,171,216,196,203, 55, 83, 93, 55,111,235,200,253, 13,193, 23,255,137,168,129,139,136,
+ 58,227,217,115, 82, 74, 71,134,101, 85, 66, 73, 9, 54,249,172,178,172, 22, 16, 9,205,136,210,163,200,220,143, 80,173,247, 30,
+ 59, 32, 74, 41, 8, 97,159, 1,145,188,142,109, 52,232,124, 80,231,232,245,222,251, 82, 68,243,122,175, 15,157, 2, 14,214, 71,
+ 74,125,220, 14, 0,233,215,248,105,132,224,122, 10,129,222,210, 50,110,186,225,133, 56,123,246, 36, 46, 92,184,128,233,100,162,
+ 95, 35,114,220,124,203,205, 24,141, 70,232,247, 10, 76,171, 10,196,192,211, 39,158, 66, 53, 41, 77,174,218,164, 21,115, 1,150,
+202,116, 56, 4,122,253, 62,148,172, 0, 18,232,245, 7,174, 7, 61, 25,165,115,175, 63,192,198,198, 16,189,158, 64, 47, 39,172,
+175, 15,113,230,220,133,160,241,144, 31,113, 7,209,247,140,225, 48,141, 0,199,190, 86, 41,212,237,119, 1, 40,233, 82, 87, 65,
+122,164,109, 0, 79, 4,234,129, 51,205, 34, 20,102,113,248, 94, 94, 94, 42, 44, 51, 86,179, 35,239,152,250,190, 88, 80,111, 99,
+ 5, 22, 97,161, 26, 63,143,246,191, 36,240,207,144,237, 16, 55, 3, 89,183, 47,138,217,170,118, 55, 11,193,246, 20,136,250,190,
+ 36,121, 79, 37,194, 15, 39,246,162,119, 89,179, 2,110,138,140,167,126,159, 11,230, 94,135,173,182, 26,234,128,222,110, 14,123,
+ 75, 71,161,190,160,141,103, 40,212, 35,170, 63,142,136, 83,221,223, 26,116, 59,133,169, 8, 66,179, 41,129, 19,205, 81, 43,223,
+152,164,239, 83, 96,110, 85,175,130, 68,250,239, 98,229,255,140,220,125,107, 74,128, 98,214, 40,108,153,153, 26,112,129,182,134,
+ 38, 13,202,221,143,220, 60,225,155,185,191, 58,168, 13,203, 32,125, 16,106, 52,114,242, 4, 57,212,104,230,225,171,184,169, 45,
+ 93, 56, 99, 48,136,151,175, 22, 28, 62, 44,222,250, 16, 81, 55, 54, 27,157,147,151, 91, 39,138, 41, 77, 97,162,174,218,181, 22,
+166, 85,236, 34,170,223,152, 6,247, 91,234,214, 14, 68,216,235,216,130,161, 15,230,246,251, 44,203, 54,151,134, 8,142,165, 25,
+ 93,205, 18, 11,217,141, 71, 49, 59, 6,208,246, 29,128, 81,182, 47, 47, 45, 97, 60, 30, 59, 7,167, 57, 4,164, 89, 51,223,222,
+137,204,167, 47, 57, 29,237,120,215,163,215,239, 97,231,174,107,177, 49,186,128,243, 23,214, 81,244, 10, 76,167, 35, 32, 47,112,
+231,190,215,225,145, 71, 30,193,198,133, 53, 76, 39, 99,147, 39, 39,108,223,182, 21,211, 92,215,187, 87, 85,133,201,100, 10, 89,
+ 85,200,243, 2, 69,145, 67, 41,133,170,146,134, 1, 81, 40,167, 19, 61, 84, 38,207, 33,242, 2,204,140,201,116,138,229, 45, 43,
+ 96, 41, 81,202, 10,253,193, 50,182,109, 21,216,216, 88,199,180, 44,155, 44,160,151,131, 79, 13,139, 73,149,207,113,114, 16,139,
+107, 18, 1,169, 52,175,154,177,116,141,194,220,118, 53,163, 39,126, 83,164,167,230, 50, 35, 76,161,179, 70,220,174, 28,159,231,
+ 76,110, 54,175,158, 90,195, 41,112,159,215, 83,193,229,200, 93,119,165, 40,122, 79,237,193, 28, 6,197,169,227, 83, 11, 14, 97,
+113, 76,141,237, 8, 76,113,137,165,104,167, 8, 72,213, 41, 55,119,191,132, 71,209, 71,186,166,149, 93,123, 2, 76,242,133, 30,
+141, 28,249,162,158, 21, 47,184,217, 36, 6,168,196,130,181, 89, 66,180, 20, 96,198, 57,239, 25, 25,187,185,138,125,119, 45,226,
+ 8, 61,170,229,110,116,156, 75,177, 9,109, 76, 3,165, 83, 20,109,239,145,140,204, 83, 57,240, 72,232, 21,215, 57,115,242,239,
+ 3,229, 31, 16,140,211,164, 0,168, 98,145, 77, 76, 41,205,123,128,181,247,158, 22, 68, 50, 43,237,249,206, 25,223, 89,119, 64,
+ 84,176, 26,206, 24,180,125,135,199,122,212,118, 68,107,252, 26, 11,152,129, 16, 71,233, 93, 77,177, 4, 67, 65, 73, 9, 65, 5,
+198,227,113, 99,188,104,144, 1,165, 4,160, 6, 53,231,126, 36, 78,141,118,182, 41,225, 79, 27, 56,199,235,112,214, 38,218,168,
+217,245,206, 55, 30, 23, 27, 15,206,177,159, 93, 85,186,151,120,175,215,115,130, 53,203,104,196,247, 43,238,253, 30, 56, 6,115,
+ 55,133,144,213, 16,148,185, 25, 4,123,110,184, 17,219,182,239,128, 42, 75,244,151, 6, 56,125,234, 36, 78,158,120, 18,149, 82,
+184,233,166, 91,113,238,220, 25,156,122,230, 25,211,147,159,221,253,117,211,251,160,167,235,217,161, 60,138, 25,229,116, 90,207,
+ 3, 96,219,177,139, 80,244,251,238, 88,150,151,151,161,192, 96, 2,166,147, 18,170,172,251,170, 91,253,192,112, 56,196,198,112,
+216,140,214, 61, 13, 70, 64,205,155,159,197,244,189, 11, 24, 76,115, 35,191, 42,192, 70,125, 25, 98,118,160, 22,111, 58,157, 74,
+ 22, 94,111,235,224, 4,128,163, 92, 13, 94, 19,212, 69,232, 35, 80,203,232,218,121,249,106,155,255,158, 23,181,207,162,206, 23,
+117, 98,147,145,190, 15,220,146,219,127, 55,219,223, 9,153, 51,154, 13,142,245,250,247,232,251,148,170,126, 22,168, 11,229,158,
+137,184, 2,136,144,193,111,147, 64, 68, 9, 80,167, 25,165, 80,158,119,217,230, 25, 45, 76,161,167,114,207,240, 58, 52, 49, 47,
+ 68, 69, 11, 33,154,127,223, 18, 57,207,141,128, 61,246, 32,200, 79, 71,140,113, 80, 38, 7,175, 77,237, 44,161, 29, 53,157,151,
+182,168, 60,213,193,104,230,226,138, 19,213, 45, 32, 95, 51,105,148,160,224,169,209,105,173, 57,128, 36,245, 80,241,220,252,151,
+ 31,241,107, 74,221, 23,237,164, 59, 18, 2,105,239,187, 89,255, 77, 30,128,192, 13, 72,166,148,232,204,246,164, 71,230, 84,212,
+100,138,126,137,236,112, 22,191, 27, 94,125,254, 82, 85,102,147,215,117,234,186, 86,157, 90,175, 65, 28,149, 91,103,194, 94,107,
+155, 99, 79, 53,191, 72, 69,232,228, 13,144,177, 77,126,226,102, 49,156,160,198, 83,160,238, 3,191, 82,108, 64,154,107, 48,135,
+214,165,216,233,121,246,254, 75, 41,161,148,116, 78,136, 16, 2, 83,211,229,141,221, 96, 22, 63,175,137, 0,204,201,164, 85,170,
+170, 92,128,142,167, 90,245, 47,204,241,228, 57,182,109,221,134, 91,247,222,134,193, 96, 25,131,165, 1, 78, 60,253, 20, 30,125,
+236, 11, 40,178, 30, 20, 41, 84,147,137,115, 26, 54, 54, 54, 32, 85, 13,206, 68, 2,215,238,217, 3,176,194,112, 99, 8, 41, 43,
+148,229, 24,204,140,170, 98,243, 90,125,156,121,150,185, 97, 51, 34, 39, 44,245,151,161,148,194,116, 90,162,223,239, 97,108, 62,
+199, 58, 67,214, 97, 40,138,220,213,206,175,111,108,232,117, 98,102, 26,184,177,166,155, 0,117,176,242,242,233,186,233, 12, 27,
+186, 85, 63, 71,250,247,118,223,103,165, 18,205,103,108, 10, 69,185,176,211, 42,252,253,213,227,162, 73, 59,122,149, 26,147,108,
+176,153,185,160,177,163,153,114,242,103,129,124,208,103,221, 58,235,188,185,177, 39,109,123,147, 5, 99,231, 76, 51,230, 8, 79,
+ 41, 84,223, 47,216,230,213,119,220,103,237, 21, 13, 80, 23, 10,196,134,149, 19,222, 84, 32, 22,105,125,145,247, 86,249, 44,224,
+ 12,242,205,137, 81,156,126,116, 74, 11,135,242,209,185, 69, 19, 95, 73, 16, 88,182,139,238, 82, 27,158,238,216,232,149,166,113,
+186, 29, 45,181, 37,159,185,121,189,103, 57, 55,177,242,189,173,156,173,161, 21,152,145,123,111,188, 95,196, 34,180, 70,226,145,
+168, 45,206,145, 39,187,236,250, 20,125,227, 33,244, 65, 53, 92, 56,254,239, 99,149,122,243,231, 28, 53,186,240,156, 48,168,128,
+166,111, 52, 62, 98, 53,119, 68,100, 42, 58,246,175,179,136,105,110,255,139,133,217,132,237,207,184,166,183, 66,183,198,213, 90,
+ 75,165, 55,128, 76,228, 24,141, 70,179, 31, 80, 3,226,126,207,120,127,206,187, 79,175,199,235,217,205, 96, 23, 34, 41,254,201,
+132,128,200, 50, 23, 81, 11, 33,160,108,215, 54, 23,117,144,139,194,253,233,101,254, 38,107,163,114,165,180, 40, 81,121, 19,240,
+132,161,214,245,151,118,196,164, 84,110,243,213, 51,228,189,110,113,169, 53,221,210,162, 56,207, 51, 55,109, 47, 29,117, 69,221,
+ 1, 9,200,243, 2,253,229,101,220,126,219,139,112,231,107,246,225,111, 62,253,105, 28,251,226, 35, 24,110,140, 48,218,184,128,
+109,219,183, 99, 60, 45,177,126,238, 28, 88, 49,178, 44, 67,158,231,232,245,122,168, 42,137, 74, 86, 16, 69,129, 91,111,185, 13,
+143,127,249, 56,170,201, 4, 96, 29,185, 47,175,108,197,100, 50,129,148, 99,167,254,182,253,229, 45, 19, 40, 43,137,141,106, 8,
+197, 10, 69, 94, 96, 99, 56,212, 3,101, 0,140,199, 99,157,142,145, 18,172, 74,148,213, 4, 36, 8, 69, 94, 96,117,101, 5, 82,
+ 74,140,198, 67, 76,203, 82,143, 56,246,148,241, 1,232,206,112, 12,227, 74,132, 90, 5,175,163,102,106,201,113,177, 25,247,155,
+106, 24,100,157, 74,165, 24, 97, 31, 71, 68, 35, 64,163, 62,143,180, 24,117,158, 42, 75, 94,164, 79,124,204, 32, 8, 33,194,104,
+152,128,103, 59,112,220,245,157, 88,176, 11,104,124,140,186, 73,209,162, 14, 4,207,222, 43, 84,214,118,148, 96,146, 30,230,213,
+ 68, 10,205, 97, 43,242, 86,106,186,126,235,122,168, 73, 20,189,206,234, 88, 22,180, 62, 5,210,245,223,137,232,218,118, 5, 74,
+213,141,219,135, 92,248,227, 50, 61, 96,110,228,254,231, 48, 6,126,190,171, 17, 45, 49,146,117,227,201,247, 77, 68,243,169, 38,
+ 52, 49,197,238,159,103,131,114, 79,249, 20,212,156, 23,239, 60,242,228,124,236,134, 10,175, 1,129,245,132,190, 56, 18,143,231,
+102,195,163, 46,235, 40, 91,255,159,163,205, 56, 4,123, 27,157, 7, 57,122, 15,208,253, 46, 81,254, 64, 20, 34, 57, 7,216,163,
+218,111, 50,204,150,205,149,219,206,102, 16, 16,148,213,237,108,179,204, 3, 45,225, 40,127,145, 9, 39, 78,178, 17,169,141, 36,
+ 4, 17,178, 44,199,116, 90,182,108, 66,129,130, 84,211,251,240, 65, 92, 36,115,229,126,196, 18,211,231,182, 35, 27, 88,183,210,
+141, 21,250,194,143, 26, 44, 3, 96,162, 53,233, 54, 46,114,244,185, 85,240, 91,128,102, 86,102,144,142,116,199,106,239,113,150,
+233,173, 65, 71,231,202,115,188, 40, 56,214,102,183,255,166,183, 92,143,203, 37, 19, 33, 10, 23, 97,206,139,112,242, 60,195,234,
+214,109,120,197,215,221, 1, 86, 10,143, 62,250, 40,142,125,241, 49,244,139, 2,227,241, 58,182,108,221,138,147, 39, 79,129, 85,
+165, 91, 16,147, 66, 85, 85, 46, 69, 0, 48,242,140,112,205, 53,215,226,196,147, 79,160, 26,143, 92, 75, 90,102,198,133, 11,235,
+ 88, 94, 94,130,204, 11,244, 5,161,172,166, 90,201,239, 34, 89,129,190,113, 14,184,210,215,108,208, 31, 96, 60,158, 56,182, 66,
+ 41, 5,145,153,238,174,102, 47,153,150, 19, 0,132, 60,207,177,188,188,140,162,172, 48, 28,142,180, 99,196, 94,160, 20, 5, 22,
+ 1, 85,143,186,150, 92,255,191,110, 38,196,110,127,178,162,235,184, 30, 94,233,230, 51,115,134, 72,180, 52,158, 11, 6, 55,169,
+ 80, 90,227,118,191,217,247,143,230, 2,120, 42, 10,142,208, 51,104, 85,123,177,179,208,217, 15, 56,204,247, 23, 53,145,213, 78,
+200,163, 69,130, 12, 75,185,103,102, 75,136,154, 42,217,177,150,109, 57,116, 45,219, 68, 60,172,157, 90,196, 69,126, 94, 63, 79,
+229,153,253, 82,179,160,108, 42,174, 85,143, 65, 45,234,125, 28,143, 27,108, 19,215, 53,242,201,190,104, 45,154, 86, 70, 20,181,
+ 50,228,197, 0, 60,229,225,197, 53,224, 46, 21,192, 97, 57, 91,235,240,153,152,129,246, 0, 57,142,210,131,247,143,157,142, 69,
+ 38,186,165, 40,117,159,106,247,218,228, 58,237,157, 21,129,113,172, 78,231,160,213,168, 47, 80,170, 75,208, 66,192,108,206,204,
+214, 27,158, 5, 98, 74,180,129,109, 83,189,214, 15,175, 10,115, 78,222,133,180,160,234, 55,209, 8,253, 22,145, 84,148,147,160,
+ 32, 95,238,242, 76,200,130,145,176, 89,150,185,104,218, 54,149, 17,182, 70,219, 92, 15, 37,165, 99, 63,152,117,244,181,190, 49,
+ 12,168,117,255,129,179,223, 8, 19, 81,219,254,231, 58,159, 43, 2, 10,157,188, 89,245, 62, 44, 50,128,204, 58, 36, 30,117,239,
+ 55, 13,170,167, 79,121,180,166, 5,123,165, 29, 0,231, 12, 64, 71,115, 76,250,124,166,101,233, 6,207,104, 5,184, 50,159,167,
+207, 93,136,204, 68,231, 85, 99, 98,149, 93, 92,126,148, 94,111,214, 20,148, 47,214, 77, 75,194,205, 78, 74,235,180, 55,129,193,
+ 47,153, 36, 33,144,137, 12, 69,209,195,214,173, 91,176,117,117, 21,103,214,206,225,201, 39,159,196,182,109,219,112,250,244, 51,
+216,178,186, 3,167, 78,157, 48,145,177,206,239,103, 89,142,213,213, 1,134,195, 33,170,170, 2, 43, 5, 2,227,244,201,147,144,
+ 82, 66, 74, 14,162, 39, 2, 99, 50, 30,163,215,235, 97, 60, 26, 1, 66,207,108, 7, 3,101, 89,130, 1,140, 39,154, 94,207,139,
+ 2,178,146,152, 76,198,200,243,220, 57, 15,186,179,153, 10,156,230,162,215,115, 99, 83,101,197,200,179, 28,131, 65, 31, 85, 85,
+ 98, 58,173, 66,173, 78, 60,132,205, 11,102, 2, 69,124, 48,226,214,220,195, 25, 45, 99, 53,251, 4, 48,137,186,132,133,169, 14,
+213,102, 85, 34, 40, 6, 11, 61, 17,174,238,115, 26, 29,231,140, 58,243, 89,245,235,177,136,206, 31,206, 82,167,107, 56,232, 92,
+249,108,205,103,126, 23,101,149, 93,211, 36, 65, 65,208,196, 51, 89,128, 40,200, 97, 10,238, 93,195,211, 72,234,165,132,219, 95,
+131,162,147, 89,236,130,135, 15,121, 76,107, 59,112,226,196, 40,208, 89,253,211, 19, 3, 69, 90, 7,148,196, 96,153,200,199,199,
+109, 25,133,201,129,198,173, 23,231,150,137, 69,109, 89, 27, 83,216, 18,162,188, 89,204,197, 76,109, 0, 66,229,123,156,187, 15,
+ 26, 55,204, 25,196,210, 42,128, 75,228,173,221, 67, 17,229, 89,244,166,222, 44, 81,179,249,100,215,216,213,175,151,244,157, 25,
+ 15,160,173, 40,204,149,102,120,109, 42,195,205,156,188,232,130,163, 92, 61, 39, 71, 25,218,185,220,238,129, 49,249,199, 44, 19,
+141,241,157, 49,160,251,237,128,133,208,147,228,132, 71,125,219,210, 47, 65,117,100,238,162,117,207, 65,204,242,204,229,241, 89,
+ 74,100,134,226,182, 51,186,139, 94, 79, 43,155,189,155, 85, 83,223,113,196, 45,220,121,251, 52,186,115, 42,188,214,179, 86,247,
+110,153,133,156,106,167, 68,153, 41,117,182, 78, 62,188,207, 20, 44, 87,255, 26,187,123,107,118, 4,169, 24,178,146,230,248,109,
+173,172, 61,150,220, 29,183, 61, 86,169,234, 72,213, 78, 91,179, 78,160, 50,244,246,116, 90,214,158, 22,199,194,182, 56, 45,195,
+174,242,196,181,158, 86, 30,171, 19,205, 14,176,142, 86,158,231,216,123,251,237,232, 45,173,224, 75, 95,126, 28,167, 78,158,192,
+181,187,175,199,147, 79,124, 9,131,254, 10, 78,157,122, 26, 74, 73,244,251, 75, 24,111,108, 56, 80, 56,127,254, 2,250,189, 30,
+144, 3, 37, 51,148,172,160,220,189,171,117, 3, 74, 74,144,153,182,167,148,132, 98, 5,161,172,208, 76, 95,223, 94,191, 15,101,
+156, 3,191, 83,216,116, 58, 69,158,229, 64, 6,228, 69,129,178,156,152,241,195,122,132,176,156, 76, 0, 0, 69, 81, 96,121,121,
+ 25, 85, 85,161,172,166, 40,122, 5,132,200, 48, 25, 79,157,195, 27,107,114,148,109, 6,195, 62,251, 83, 87, 21, 6,130, 68,110,
+178,118, 53,216, 10,211, 63,134,235,114,180,232, 30, 53, 20,236,182, 91,137,155,221,194,238,115,109,247,191, 69,107,212, 23,165,
+180, 29, 59,203,113, 63,147, 56, 33,179,201,207,176,169, 70, 65,237,129, 88,203,247, 46,170,159,243,201,161, 56,184,222, 83,107,
+ 2,143,107,106, 32, 40,229,225, 40, 90,247,186, 73,154,115, 23,173,204, 42,187, 20, 95,138,225,200,147, 84, 9, 99,102, 68,234,
+192, 53, 74,216,250,141, 92, 90,129, 10,212,218,244, 37,110, 39, 43, 76, 65,191, 95,119,158,106, 64, 51, 19,208, 57,110,149, 74,
+141,252,120,234,243, 23, 22, 93, 52, 46, 93, 84,231,222,162, 9, 72, 93,163,100,105, 85,130,130,247,163,116,251, 80,212, 96,204,
+ 1, 88,219, 77,222, 82,133,245,207,211,109, 71,189,169,204,141,252, 91,184, 9,212, 84, 44,192, 30,181,196,141,133, 30,118,152,
+171,215,119,248, 94,126,222,136, 3, 10, 62,188,230, 34,202,185,146,169,219,102, 23,165, 91, 80,112,157,224, 40,131,237,106,207,
+166, 7,124, 16,105, 19,233,114, 93,195, 12, 9,165, 35,237,210, 94, 77, 34, 44, 45, 47,227,228,137,103,220,195,228,231,206,131,
+ 13, 72,216, 40,189,174,211, 38, 15,168, 97, 34,113,255, 34, 5, 93,235,204,207,133, 16,110,128, 10, 9,161,115,167,150,114,247,
+ 20,206, 14,252,149,153,161, 77, 4,150, 18, 48,243,182,167,211,210,148,155,217,218,113,129, 60, 23,174, 63,188,191, 54,108,218,
+ 65,152,158,213, 41, 85,189,206,137, 75,227,112, 41,111,225,206, 82,179,155,235,129,218, 73, 68,164, 33,136,245, 50,153, 16,184,
+117,239,237,232, 47,175,226,228,201,147,232,229, 5, 94,117,199, 62, 40, 6,100, 89,226,153,147, 79,162,151,231,224, 44,195,100,
+ 52, 10,186,138, 73, 41,181,144,205, 48, 64, 34, 43,160,170, 10, 89,150,105, 86,201, 31,185, 74, 4, 5, 66,111,176,172,255, 93,
+149, 40, 39, 19,172,172, 46, 67, 64, 96, 60, 25,233,153,104, 74, 65,136,204,173,225, 34,215,130, 56,150,140,170, 44, 81,228,125,
+221,199, 64, 73,231,208,234,235, 63,197,100, 92, 97,121,105, 9, 91, 86,183, 98, 99, 56,132,200, 25,253,173,125,108,108, 12, 53,
+ 27, 16,213,152,199,193,149, 86,192, 27,221,135,107, 23,171,188, 70, 98,225,172,123,215,232,204, 50,105, 66,206,204,123, 55,247,
+ 40,147, 34,177, 14,153, 89, 91,172, 24, 2,222,144,146, 5, 4,105,169,243,106,203,179,183,142,146,230,139,115, 22,106,108,185,
+184,247,228,182,153,233, 77,178,212,237,222,241, 76, 7, 77,165,103,137,252,134, 9,136,132,107,186,239,238,231,172,254,245,236,
+167,213, 98, 13,130, 47,148,155, 11,104,113, 57, 23, 55,235,171, 27,121,224, 68, 27,203, 32,135, 28, 71,172,222,223,103, 34,155,
+155,159,105, 91, 60,141, 14,114,179,102,167,123,125,234, 9,180, 41,240,158,149,167,111,115, 54,154,215, 8,110, 83, 15,166,113,
+ 69,229, 68,212, 50, 48,156, 34, 79,110,222, 76, 97,219,131,157, 92,227, 31, 77, 21, 5, 42,247, 68, 30, 61,160,253,124, 58,206,
+ 87,205,182,122,177, 28, 12,100,169,193,156, 26, 93,194, 98,165,124, 51,239, 31,181, 76, 13,132,110, 53,120,198,249,114,151,198,
+ 49, 96, 1, 15, 28, 45,165,197,145, 67, 88,153, 8, 46,203, 50, 80, 38, 92,148, 27,136, 71,161,188,185,217,214,161, 64, 0,148,
+142, 29,240,163,118,123,236,230,123,155,179,118, 53,232,230,225,205,132, 64,229, 4,113,222,196, 56,171, 13,176,105, 3,239,125,
+204, 34,130,146,140,145, 41,187, 99,199,124,228,166,140, 75,131,108,158, 91,253, 0, 67,202, 42, 0,121, 63,130,242,193, 54,207,
+115,148,101, 9, 33,180,216,144,167, 83, 93,199,110, 29,144, 57,148,108,208, 92,136, 85, 82, 44, 40,132,192,206, 93,187,113,203,
+222,219,241,201, 79,124, 12, 82, 86,168,138, 30, 46,172,157,197,218,133,243, 56,117,234, 25, 92,184,112, 1,114, 58, 69, 37, 37,
+150, 6, 3, 71,133,219,180,128, 77,125,104, 48, 38,244,251, 61,227,140,100, 65, 90,104,203,182,237,216,178,109, 59, 46,172,157,
+195,116, 50, 69,191,223,195,202,234, 42,134, 27,235,152, 12, 55, 32,217,143,162, 44,187, 66,168,170,210,137,241,202,178,194,104,
+ 60,114, 64,175, 83, 71,112, 66,180,140, 8,163,209, 8,227,201, 4, 91, 86, 87, 49, 26,141, 48, 45, 75,172,110, 89,197,198,250,
+134, 46, 11,180,209,180,138,244, 55, 13,253, 18,153,153, 58, 70,112,202,178,158, 13,239, 82,112, 97,122,102,241,188, 55,195,163,
+251,106,125, 11,210, 37,145, 11, 7, 62,104, 31,129, 74,244,108,180,236, 51, 0,221, 54,122,201, 22,136,210,227,244, 15, 45,126,
+ 94,113,151,195, 84,132, 73,209, 72,106, 4,253, 24,210,137,249,184, 60,215,234,106,172,234, 62,118, 74,152,234, 48,140,182, 94,
+123, 3,207, 20,187,165, 4, 12,179,166,126,165,218,157, 34, 49,216,197,159, 90, 99,251, 40,147,168,169,146, 22,161, 90,219,113,
+ 52, 68,120, 45, 12, 65, 35,255, 61,107,129,180,148,147,181,169,232, 83, 63, 15, 5,112,222,199,199,253,211,125, 53,123, 80,210,
+ 71,141,217,214, 33, 11, 16,215,145,195,205,133, 78,245,206,166,168,123, 89, 29, 97, 83,203,184, 80,138,166, 53,213, 78, 65, 29,
+161,249, 41, 13,225,126,174,255, 70, 53,242,249,225, 48, 9,242, 38, 81,133, 10, 95,221,223, 59, 82,158, 10,106,212,114, 19, 1,
+148,193,169,182,179, 44,115,155, 55,152, 92, 11, 69, 97, 26,199, 56,129,151, 75, 98, 19,178,158,128,146, 10, 36,181, 3, 81,150,
+186,123, 28,136,176,186,101, 21, 39, 78,158,114, 20, 46,137, 76,139,190, 88,186,188, 56,121,212,187,109,159, 42,132,208, 78,132,
+ 23,221,219,124,177,205,121,199,138,247,128, 7, 17, 2,204, 58,234, 22, 36,220,100,184,122,246,183,105, 12, 67, 4,134, 4,105,
+217, 61,148, 0, 0, 32, 0, 73, 68, 65, 84,179, 4, 43,194,116, 42, 49,157, 78,131,242,179, 44,203, 65, 36,130,220,126, 61,108,
+ 7,201,180, 72,156, 95,180,206, 73,105,202,216,166, 6,208,103,122,207,220,172, 49,182,234,121,197,172,175,185, 5,243, 76,160,
+215, 91,194, 75, 95,254, 50,144, 16, 56,125,250, 52,198, 27, 27, 40,250, 3,172,174,108,193,241,227,143,162,232,245, 32,167, 19,
+ 92, 88, 63, 15, 29,172, 50,138, 60,119,205,111,124,117,182, 19, 65, 66, 90,132,173, 5,154, 36,112,237,158, 27,176,188,188, 5,
+143, 31,127, 4, 82, 74, 83, 70,166,157,171, 45,171,171, 88, 95, 63,111,202,239,178,160, 58, 33,207,245, 28,172,105, 57,213,215,
+156, 1, 18, 57,242,188, 64, 37,167,250,153, 34, 93,162, 84, 85, 21, 64,186, 37,173,173, 56,232,247, 6,200, 68,142,201,100,130,
+162,215,195,112, 99,104,174,165,242,234,203,125, 71,220,148,187, 41,127,176,139, 46,143, 19, 44,131,176,209,245, 1, 64, 56, 91,
+222, 69,135, 20, 63,103,145,179,237,141, 0, 37,161, 2,161, 30, 75,121,209,202,243, 88, 0, 26, 71,236,177,144, 13,112,213,169,
+ 23, 15,242, 34,142,206,155, 37, 53,245,176,161, 90, 21,191, 72,185,154, 95,138, 27, 54,145, 9,203,206,244,135,164,234,204, 45,
+206,121,251,194,156,224,109, 86,196,205, 36,160, 12, 23,150,207,124, 45,181, 71,169,254, 4, 34,155,215, 86,172,130, 7, 55,174,
+ 71,180,148,187,253, 59, 71,123, 11, 43, 96, 18,237,194,180, 84,105, 52,183,231,242, 27,181,222, 11, 12, 96, 9,242, 74,162,217,
+177,104, 86,195,154, 89,142, 79,152,195,175, 61, 95,138, 58, 63,197, 27,122, 76,173, 16,137,122, 50,226,140,146,160, 76,164, 71,
+124, 54, 38, 49,129,131,114,171,164, 2, 22, 97,123,206,160,142,155,163, 97,143, 22,196,195,246,211,141, 27, 87, 15, 13, 81,104,
+150,124,212,226, 61, 33,200, 8,155,226,129, 38,228, 29, 55, 65,100,122, 15, 21,158,234,189, 22,163, 9, 16,101,158, 90,188, 89,
+190, 3, 34, 84,149, 52, 68,177, 57, 54,179, 49,138, 76, 64, 86, 18,176,194, 48, 19,101, 50, 24,164,226, 30,235,245, 84,176,160,
+225,140,191,134,132, 8,153,149,136, 53,128, 41, 55,203,178, 44, 0, 39, 59, 0, 71,112, 77,225,107,218,221,180, 16, 85, 58,122,
+ 27, 14, 71,158,136,205,143,126,235,156, 56, 25, 1,149, 95,162, 22, 56, 22, 45, 83,189,252,200, 29,208,165,102,101, 57, 53, 27,
+ 49, 71,121,224, 52, 67, 85,107, 32, 4,136,101,192,174, 80, 47,195,173,183,221,142,141,225, 8,146, 21, 50, 18,216,177,107, 23,
+158,120,242,113, 60,115,226, 9,236,216,182, 11,103,206,159,197,116,184,129,213,229, 85,140,167, 99,148,211,210, 85, 36,212,173,
+132,181,163, 40,165, 66,175, 87, 32,203,122, 24,143,199,102,100,169, 94,148,121, 81,160, 95, 20,248,210,241, 71, 32, 77,243, 25,
+ 39,218, 2,112,254,194, 58,182,110,221, 6, 41, 75, 76, 39,165,187,166, 85, 85, 97, 58,157,122,233, 20,211, 1, 80,100,152, 78,
+167, 88, 90, 26,160,172, 42,148,211, 18,138,165, 3,224,202,208,255, 66, 8, 93,102,199, 10,121, 81, 96, 58,213,236, 0, 0,115,
+140, 97, 63, 1,183,167,186,107,232,139, 88,163,225, 43, 62, 31,236,179,125,241,238,198,225,191,253,158, 2, 28, 21,107,217, 52,
+205,179,177, 84, 67, 36, 95, 32,151,214, 85, 93,162,136,221,166,175,145,102,144,252, 53,109,239,253, 98,169, 5,110,143,182,147,
+ 88,169, 34,161,156,152,175,157,162,249, 9, 97,101,244, 59,236,221,175, 60, 73, 49,207,113,190,125,229,182,175,210, 12,250,165,
+ 35, 82,211,183,204, 80, 39,132,249, 70,167,254, 36,110,140, 55, 93,244,142,167, 0,125,174,224, 45, 86, 82, 35,209,115,152,211,
+142, 6,205, 57,166,148,196, 32,158,204, 21,151, 42,164, 18, 2,233, 72, 58,236, 74, 22,214,121, 54, 21,179, 49, 77,228, 71,224,
+190,114,179, 49,182,211, 91, 23, 28,229,199,109,222,212, 43, 29,112,145,186,223, 18, 54,164,223,211, 37, 20,113, 84, 23, 55,105,
+169, 61,215, 26,172,200, 43,101,243, 35, 74,247,247,174, 92,205,245, 78,243,142, 89,243, 86, 4, 32,207,114, 84,178,210, 27,188,
+249,204, 65,175,143,245,245,117,115, 46,153, 99, 10,164,148, 46,164,136, 53, 3,190,194,221, 2, 57,188,122, 98, 27, 77,101, 46,
+146, 12, 71,195, 90,150,129,189,156, 59,153,243, 84, 82,214, 14,177, 23,109,143,199, 83, 87,126,230,179, 54,126, 26, 2,224, 70,
+221,123,220,241,173, 45,141,227, 43,149,235,252, 94,157,103,150, 81, 47,114, 87, 58,132,102, 89,167,237,161, 94,179, 8, 2,189,
+ 94, 31,123, 95,244, 98,156, 61,119, 22, 85, 37,113,205,174, 93, 56,185,118, 14, 79, 62,113, 22,219,182,239,196,120, 99,172, 35,
+231,201,196,229,123, 43,211,205, 77, 8,125,205,164,148,193,136, 82,219, 45,174,172, 42, 8, 33,176,178,117, 43,136,129,201,120,
+ 12,102,133,175,124,249,113, 93,214,231,250,171,235,251, 82,153,127,143, 70, 99, 76,167, 19,128,165, 43,197,179,108,153, 52,215,
+153,140, 94, 64, 86, 18, 89,158, 97, 56, 28,161, 40, 10, 23,117,235,155,171, 29, 52, 9, 35,192, 52,117,250,106,170,211, 24,101,
+ 85,162, 87,100, 32, 20, 96, 8,140, 70,227,186,148,216, 85, 34,133, 67, 93,156, 48, 53,161,216, 34, 79,239,225,230,170,183, 0,
+122,188, 15,248,213, 40,181, 35, 39,112,177, 33,122, 91,215,195,246,156,190,161,150, 55,137,234, 76, 94, 43, 88,166,246,161, 44,
+ 51,254,158,105, 17, 32, 15,251,110, 52,223,128,162, 8,221,171,110, 66,221, 96,134, 82, 84,123, 35,229,219, 28, 19, 93,127,172,
+221, 59,236,254,231, 57,219, 65, 87, 55,204, 22,184,165, 26,169,196,165, 89,109,185,232,192, 17,160,104,238,185, 95, 70,151,138,
+132, 41, 93,254,214,234,112,208, 38,135,194,208,108,106, 93, 64, 36, 80,185,197,187,180,128,134,150,233,104,177, 23, 25,121,100,
+ 12,191,140,208, 23,140,161, 49,249,204,239,166, 22,151,146, 53, 42,174, 0,221, 33,204,166, 61,152,163, 49,155,228, 58,189,133,
+148, 61, 2,113, 70,157, 31,138,203, 22,163,102, 19,137,228, 85,170, 25, 77,252,160,204, 27,225,222,164,222, 41, 96, 29,252, 40,
+221, 31,157,202,141, 50,176,248, 88,235,156,183,242,202,181,242, 44,195,120, 60,110, 60,220,245,189, 70, 50, 2,137,175, 69,155,
+ 82, 53, 30, 42,195, 17, 29, 78,129, 32, 78,122, 66, 68, 5,134, 66, 89, 42,140, 70,211, 32,143, 27,207, 18,175,163,125, 56,186,
+190, 57,218,148, 22,138,128,178, 44,115,244,187, 75,241, 11, 1, 65, 10,178,242, 53, 22,156, 22, 35,153, 42, 41,237, 12,144, 59,
+238,213,109, 91,193,172,176,103,207,245,120,252,248, 23,241,228,151,191, 4,202,122, 88,221,186,130, 83,167, 79, 64, 78, 75,244,
+138, 28,171,203, 43, 56,183,182,102,202,211,148,139,206, 53,253,174,188,212, 14, 25,182, 93,239, 53, 34, 19, 88, 95, 59,103,132,
+135,153,115,248,170,138,157,152,202,137, 15,205,161, 78,167, 19, 35,122, 84,200,243, 12, 66,228,186,138,160,170,220,181,200,178,
+ 12,147,201,196,177, 78, 89,166,239,243,160,223, 71, 89, 85,174,244, 77, 86, 58, 61, 82,150,165,158, 4,103,174,167, 84, 82,195,
+174,172,208,239,247, 48,157,150, 16,164,244,254,175,200,211,172, 42,132,115,213,185, 65,163, 7, 20,188,231,168,192, 23,222, 17,
+183, 4,241,179,132,142,254, 30,129, 77,229,214, 83,253,219,227, 14,115,201,181,119, 49, 62,196, 28,153,124, 82,239, 17,149,171,
+181,159, 71,172,243, 73,186, 35,112,189, 96,189,125,137,144,215, 1,142,151, 70, 21,109,159, 21,141,128,246,193,156,163,160,142,
+208, 44,115,203,219, 4,101,126,148,108,129, 52, 89, 62, 22,137,221,218,202,212,124, 17,153, 5,242,121,109, 83, 83, 32,236,211,
+ 40, 23, 43,178, 32,177, 9,192,159,241,247,173,141,255,136, 90,111, 88,220, 9,174,118, 36,216,109,242, 49,181,147, 26,238, 80,
+ 71, 79, 8,114,218,126,147,151,230,104, 63,246,147,250, 30, 45,230,137,205, 26,148, 57, 57, 97, 85,237,200,121, 78,139,240, 27,
+201, 96,134, 87, 79,173,222,123, 88, 47,223, 46, 34,105,110, 16,112, 52,125,138,174,138, 35, 75, 71, 55, 67,132,211,177,152,145,
+247, 10, 72, 51, 62, 84,100,153, 86, 75,155,118,159,204,161, 96,143, 41,214, 35,192,245, 12,119, 77, 14, 93,157,122,189,129, 83,
+156, 79,180, 39, 96,202,204,217,136, 97,172,226,221,174,181, 26,216,133,163, 92, 43, 41, 49,153, 84, 40, 75,217, 0,116, 95,112,
+230,250,217,219, 18, 58,175, 86,223, 2,188, 52,162, 64, 87,154,136,122,248, 8,161,102, 87,180, 70, 82,153, 94,251, 89,221,144,
+ 72,232, 99,203,122, 64, 85, 1, 74,250, 78, 56,194,201, 99, 84,151,101,101, 89, 6, 5,133, 27, 95,112, 19, 94,120,243,205,248,
+242,151,191,130,115,103, 79, 98,125,125, 13,229,100,130,169,172,112,227, 13, 47,212, 12, 10, 79, 49, 28,143,144,231, 61,236,216,
+185, 3, 27,235, 23,208, 43, 10,228,133,237,240, 87, 59,192,131, 65,207, 12,102,169,160,148,190,182,182,191, 59,152, 33, 12,115,
+211,235,245, 48, 24,232,137,107,182,199,186, 5,248,149, 45, 91,177,117,219, 86, 44, 13, 6, 56,123,230, 20,206,159, 59, 3, 34,
+175, 28,206,116,157,179,215,206, 62,139,189, 94, 15,163,241, 8,121,150, 67, 73,133,113, 57,118,227,160,165,172,116,137, 33,169,
+ 32, 29,167,204, 51,160, 69,143,230,121,147, 18,131, 94,129,241,100, 18, 86, 87,180,116, 90,164,196, 16, 23,157, 18, 17,222, 60,
+110, 14, 0, 41,126,206, 93, 10,208, 50, 2, 64,163,131,220, 66,221,228,154,225,122,248,183, 81,158,248, 34, 2,243, 5, 68,127,
+ 97,102,143, 91,218, 89,115,107, 71,195, 77,132,248, 49,187, 77, 28, 68,211,238, 93,157,118,108, 49,225,179, 59,252,168, 94,127,
+ 94, 15,252, 60,142,194, 27,101, 87,148,200,147,181, 42, 7,103,180, 58, 77, 68,198,246,111, 90,219,166, 70, 37,111, 41,229,252,
+220,206,117, 64, 35,151,158,236, 5, 79,233, 54,178,182,175,117, 35, 69, 49, 63, 75,145,164,218,125,200, 19, 62,181,221,218, 16,
+214,175,121, 68, 80, 51,154,172,139, 68,179,118,146,131,137, 68,161,168,173, 81,130, 17,116,132,227,198,253, 13, 89,152,154, 6,
+228,134,199,170,130,171, 19,174, 63,127,254,184,189, 34, 2, 97,227,146,132,176,207,215, 37,184,206,113,198, 27,246,122,171,199,
+ 95,113, 89, 13, 43, 43,106,171,193,174,215,239, 99,180, 49,212,141,104,170, 10,194, 76, 1, 27, 14, 71,126,229, 27,136, 8,197,
+160,143,201,112,228, 54, 74,159,238, 14, 27,245,112,208,122,213, 63, 6, 95, 25,111,107,164,109, 4,109,153,148,204,150, 11, 6,
+ 27, 42,163,156, 42, 76, 38, 19, 13, 84,138, 27,226,157, 56, 5,145, 18,101,250,195, 53,130,114, 58, 17, 86, 32, 16, 9, 40, 89,
+ 51, 3,204, 82, 15,207, 33, 66, 81,244, 80, 85,165,201, 41,235, 20, 67,158, 43, 72,120, 18, 4, 11, 46, 28, 86,153, 40, 37, 81,
+ 20, 57,114, 42,176,123,247,110,252,245, 95,127, 20,253,165, 85, 64,142, 48, 30,142,116, 83,156, 44,199, 83, 79, 63,137,229, 94,
+ 31,189, 94, 31, 21, 36,118,236,220,129,167,158,120, 66,143, 70, 5, 80, 86, 85, 84, 26,201,152,152, 26,113,187,182,164,233, 37,
+ 96, 75, 13,237, 61,208, 93,225,204,189, 96,157, 79, 93, 90, 93,197,246, 29,187, 48, 30, 13,177,126,225, 60, 78,159, 58,137, 60,
+ 19,216,113,237,117, 56,123,250,180,139,178,138,162,128, 32, 97,206, 95,247, 17, 80, 82,162, 44,167, 32, 16, 38,211, 9,138, 92,
+139, 19, 43, 41, 77,186,198,212,124, 43,229,148,234,202,107, 12,165,123, 0,232,250,124,189,174, 24,153,167, 43,177,199,238, 28,
+232,152, 5,243, 28, 14, 23, 49, 42,246, 4,114,104, 48,122, 13,144,182,165,145,172, 12,206, 83,205,232, 45, 16, 62, 51, 37,167,
+ 65,132,123, 72,203, 68,230,139, 1,118,158,165,251,154, 57, 11,117, 6, 37,200, 17, 83,154, 82,236, 57,125, 6, 37, 35,118,205,
+ 10,214, 34, 89,102,213, 46,132,139, 54, 72,151, 36,116,254, 2, 33, 22, 46,183, 93, 95, 29,169,183,136,202,102, 82, 22, 9,138,
+ 93, 4,138,232, 22, 15, 42,250,221,204, 41,106, 81, 51,151, 84, 91,214, 96,136,202,140,201,112,126, 45,122,252,185, 13, 48,247,
+243,212, 60, 59,178, 39, 52,123,173,183,241, 51, 20,131,166, 55, 42, 49,246,207, 26,147,120,168, 9,180,245,247, 97,185, 88,160,
+ 1, 8, 0,149, 16,180, 16,112, 53,235,102,195, 21, 77,167,166,214,193,197,165,115, 30,104, 57, 47, 63,190,199, 20,244,119,159,
+207,167,197, 74,216,180,160, 32,160,142, 45,123, 19,213,131,199, 37,100, 49,109,207, 70,105, 45,165,116, 14,159, 82,202,244,246,
+206, 81, 78,245, 3,216,239,245,113,250,244, 89, 47,165,161,213,227,153, 29, 34,228, 61,196, 54,215,238,139,127,156,250,221,111,
+132,225, 9, 99,252, 99, 6,113,237,172, 8,163, 5,160,230,144,150,201,184,196,100, 82,186, 33, 44,241, 80, 27,123,238,126,111,
+123, 63, 74,178, 29,230,244,207,148,211, 64, 80, 80,247,111,214,134,105,184,162,197, 82, 86,184, 40, 1, 22,174, 76, 81,152, 13,
+ 43, 19, 2,194, 12,107, 81, 74, 65,120,204, 72,188,246,236,154,168,170, 10,219,119,238,194,211, 79, 63,141, 44,239,161,200,123,
+216, 24,157,115,236, 77, 85,149, 24, 44, 13, 48, 45,167,186, 77,171, 0,158,126,226, 43, 96,169, 92,205,189,109,166, 19, 70,147,
+150, 45,209, 74,117, 29, 77, 27,167,218,116,236,210, 41, 4, 91,169,160,175,149, 84, 18, 91, 86,183, 96,180,190,129,181,181,211,
+ 58, 55, 11, 6,171, 12,231,215,214,176,178,188,140,117,211,228, 70,119,171, 99, 8, 67,183, 47, 47, 45, 67, 41,157, 18,144,170,
+ 4,129, 80, 86, 21,122, 69, 15,176, 58,136,104, 78,131,237,205,110, 5, 91, 89,174,123,200,247, 7,125,240,136,205,208, 32, 95,
+251, 32, 35, 58,188,117,107,109,137, 62, 57, 72,125,233,107, 83, 5, 41, 11, 86,166,245, 13,213, 61, 47,234,225, 47,139, 20,119,
+ 35, 93,217,133,217,141, 92, 54, 13,232, 52,135,117,229, 89,218, 41,209,226,124,192,117,220,211,175, 85,201, 33, 82, 81,114, 59,
+138,182, 1, 80, 66, 4,215, 58,232, 43, 5,230, 81,240, 11, 74,130,121,219, 28,246,220,167,197,219, 4,113,113, 63,115,151, 7,
+167, 38,245, 64, 58, 9,221, 62, 83,125, 19, 53,128,169, 84, 64,210, 43, 91,128,191,105,107, 69, 27, 28, 55,181, 31,107, 92,142,
+214, 74,218, 36, 6,169,212,185,242, 48,234, 12, 15,187,153, 82,240, 5, 88,204,212,160,207,252,147, 15,193,208,159,105,238, 57,
+ 4,206, 9,178,161,181, 10,114,195, 86,235,192,177,130, 70,192, 43, 49, 52,138, 81, 65,174,161,139, 13, 27, 56, 80,178,251, 11,
+187,153, 38, 8, 29, 69,106,228,174, 26,138,217, 8, 12,235,148,129,161,128,145,158,108,102,205,170,201, 45,141, 45,165, 66,150,
+219, 19, 35,112, 37,189,126, 9, 20,245, 97,175, 29, 9,102, 64, 78,171,134, 3,146,206,245,215,181,232,126,137,162,125, 71, 27,
+ 37, 11, 79,128, 5,170,160,219, 52, 40, 59,101, 30, 12, 29, 17,142,134, 19, 13, 26,145,186,221, 87,220,251,250, 1,231, 96,212,
+185, 17,111,168,141,127,207,184,206, 4,216,206,141,202,180,114,245, 68,131, 96, 59, 40, 71,151,102,229,121,142, 74,105,144,152,
+148,140,126, 95, 96,105,105, 11, 70, 60, 68,201, 83, 16, 19,116,124,175,193, 61,227,176, 42, 67, 1, 40, 6, 5, 54,214,215, 33,
+149,196,250,198, 26, 88,217, 58,108,160, 95,244, 32,132,192,216, 76, 82, 99,201,117,191,116,179,158,108,141,127, 35, 85, 42, 8,
+131,126, 15,147,201,212,128, 38,187,242, 51,255,217, 81, 74,161,172, 42, 87,146, 56, 92, 95,135,146, 83, 29, 57,203,170,126,216,
+170, 10, 50,203,220,252,120,102,198, 84,105, 7,134,137, 48, 26, 13,221, 53,239, 21,133,121, 70,244,249, 22, 69, 97,158, 35,157,
+ 59,103,165, 32,216,116,173, 51,128,201, 25,161,148, 21,122,189, 30, 32, 8, 69,191, 48,194, 63,133, 44, 3,170, 74, 34,203, 96,
+ 82, 68, 10,113,137, 73, 40, 62, 51,209,185,245,169,148,112, 32, 5,247,140,147,118, 94,141,190,193, 94, 71,159, 13, 68, 84,253,
+194, 11, 36,187,125,246, 89, 45, 34, 30,230,197,240, 32,112,218, 22, 72,161, 38,223,215, 40,106, 91,107,184, 89, 64,175,122, 85,
+ 71,243,113,116,206,169, 25, 27,209,166,236,158,147, 68,202,162, 5,228, 21,249, 78,143,168,217, 11,106, 47, 53,110,166, 18,226,
+156,250, 12,245,162,139,136, 51, 10,199,142,214,251, 93, 40,182,139,135,153,120, 32,223,156,120, 35,194, 7,149, 90,220,207,182,
+223,209, 2, 14, 2, 71,234,252,136, 94,111, 52, 65,105, 99, 13,194, 70,214,201, 70, 1,193,161,122,162,185,212, 41,136,182, 65,
+ 6, 65,155, 86,191, 84,167,221, 83, 99,110, 87,107,250,247,176,190, 7,205,200, 56,232, 20, 69,222,195,148,168, 39, 13, 82, 24,
+126, 4,194, 33,107,208, 22, 71,164, 74,101,136,154,163, 71,125,145, 94,157, 35,143,128, 52, 65,213,187,154,226, 44, 11,157, 49,
+ 34, 64,217, 22,172,166, 21,104,175,135,241,120,234,162, 58, 33, 4,138,162, 48, 52, 46, 5, 20,187, 85, 84, 7,251, 68,130,234,
+182, 81,186, 31, 41, 43,102,173,183,247,128,221,206,142,215, 55, 70,185,191,181,209, 27, 17, 97, 50,158, 98, 60,158, 56,117,123,
+236, 72,216,188,121, 16,249, 71,148,172, 95,234,199,168,124,197, 68,122,200,140,208, 77, 86,148, 82, 58,215,156, 80,201,231,189,
+ 30, 6, 6,192, 70,227, 49,170, 74, 66,144,196,234,214,173, 88, 63,127, 1, 37, 79, 16, 97,112,112,111, 6,131, 62,134,235, 99,
+ 92,119,253,141,120,228,209,207,161, 87,244, 80, 73,198,202,234, 22,140, 38, 19, 8, 2, 38,195,145, 41, 3,171, 26,235,219,182,
+187,181,204, 66, 61,121, 76, 97,105,105, 9,227,209, 40,152,136, 86, 87,136,212,207,152,148, 10,236,181,142,221,216,184,128,109,
+219,119, 98, 52,158,214,128,105,206, 95, 74,169,133,108,130,208,239,247,141,202,157,209, 43, 10,151,151, 39,152, 97, 64,172,160,
+ 42, 56,199,167,146, 21,136,188,233,131, 92, 59, 81,202,155, 47, 95,150, 37,138,162, 0, 65, 55,204, 25,143,149,115,254,114,211,
+202, 88, 15, 58,170, 2,125,140, 21,129,170,128,133,177,247, 50,108,134,227,239, 49,219,183,111,195,218,218, 90, 34, 87, 31,231,
+209, 47,193,120,180, 84,218,121, 19, 1, 94,176, 87,205,124,255,230,177,210, 76, 64,247, 34,111,226, 80, 15,226,156, 34, 10,114,
+155, 41,134,182,209,214,214, 27, 57, 92,247,198, 8, 55,113, 73, 51, 88,234, 70, 63,152,166,166,136,137, 26,159,157,207,227, 66,
+234,136,131,194,193, 2,212,162,108,244,242,222,193, 20, 34, 66,107,157,119,178,214,220, 7, 60,154, 77,235, 36,217,133,232, 51,
+ 41, 17, 13,250,158, 20, 5, 46,106,156, 2,104,122, 99, 20,136, 23, 34,111, 42,113, 93, 40,113, 94, 49,125, 18,247, 99,246, 55,
+159,186,231,122, 40, 18,211,115,149,189,104,155,235,200, 62,236,230,100,179, 51, 4,144,104, 12,105, 73,166, 46,216, 70,193, 62,
+ 83, 82, 43,244,237,134,169,156,222, 1,141,232,157,162,116, 64, 88,175,234,143,115, 77,231,138,156, 18,212, 19, 31,214,247, 37,
+115, 67, 43, 82,209,185,205, 89, 90,229, 55,187,247,202,204,180, 44,237,109,102, 66, 71,241,189,162,192,120, 60,118, 57,240,137,
+163, 63,235,166, 55, 58,205, 84, 34, 28, 71,217, 4,116,225,205,111,247,129, 58, 41, 20,178,247, 12,210,163,239,217, 52,122,145,
+134,110,151,174,251, 95, 44,134,243,115,226,126,133,130, 75, 3,216,207, 19,117,164,150, 2,242,160,237, 44, 17,152,164,166, 32,
+ 51, 51,197,206, 84, 78, 16, 19,138,162,192,112, 99, 67,231,129, 69,134,193,202, 50,138, 94, 95,139,194,242, 30,182,238,200,113,
+254,220, 57, 96, 58, 5, 41, 21,148, 76, 41,211,253, 74,100, 57,246,238,221,139, 51,103, 78, 67, 64,104,237,142, 4,118,221,112,
+ 61,142,127,241, 81,228,153, 22,250, 85, 82, 38, 54,121, 14,198,255,186,186,110,227,244,108,184,193, 59,112,125,255,237,239,116,
+ 39, 62, 13,176,253,254, 18,136,128,209,120,136,149,229, 85, 72,169,176,177,113, 1,166,117, 58, 68, 86,224,154,107,118,161,215,
+ 31,160,200,180, 3, 83, 20, 5, 78,157, 60,129,245, 11,107, 96, 8,108,148,165, 78,203,100, 25,178, 92,183,162,173,202, 10,153,
+208,149, 19, 66,100,186,167,129,161,178, 69,170,199,133,233,247, 81, 73, 9, 41,164,115, 84,179, 44, 7,115, 5, 34,233, 58,226,
+ 1,140, 60, 47,156,194, 95, 41,101,170,167, 24, 25,233, 72,222, 41,231, 45,221, 78, 48,244,189,245, 40,244, 53,189,112,225, 2,
+ 96, 28,136,170,170, 80, 78, 74, 51,249, 79, 56,239, 67,128, 76,227,155,205,129,183,184, 4, 62, 64, 16,161, 39, 6,206,145,106,
+130, 33, 35,106,101, 62, 75,225,110,103,150,147,158, 85,239, 71,188,110, 44, 42,105,113, 40, 88,212,221, 56, 73, 26,230, 53,243,
+ 8,242, 89, 0,221, 6,230, 34,233,108, 2,177,230,136, 26, 96,238,197,212,110, 74, 35,131,117, 73, 91,163,157,171, 7,120,194,
+245,182,174,229, 92,156,152, 61,157, 20,159,137,246,252,118, 44,106, 11,122,201, 83,164,185,106, 80,225,228, 9, 54,185, 57,144,
+166, 45,151,226, 13, 31, 9,110, 62,115,152,221,142,232,245,100,143,226, 8,168, 3,102,195, 11,171, 27,243,205,185, 62,177, 90,
+ 81, 78,141, 40, 54,142,114,185,213,139, 51,212,188,243,204,201,213,241,146,215,173,173, 86, 81,215, 11, 64, 41, 83,215, 75, 94,
+179, 20,227,149,167,244, 14,117, 3,161, 40, 18, 72, 93,110, 65,225,116, 39,175, 36,198,119, 90,154, 77,123,252,144,161,173,221,
+104,125,254, 98, 78, 89, 86, 92,223,174,148,170,219,153,194, 87,236,123, 76,133,113, 4,166,211,105,240, 94, 75, 75, 3, 93, 67,
+ 28,140, 70,173, 35,101, 31,188,221, 92,114,235, 88,248,121,245,104,246, 60, 69, 42, 33,253, 55, 90,208,183, 97,128,211, 79,189,
+ 88, 85,187,125,152,253,200,220,126,142, 83,183, 39,116, 5,201, 53,235,149,172,249,142,167, 72,148,226,233, 41,109,117,239,113,
+165, 36,134, 23,206, 67, 18, 32, 68,142,229,165, 85, 44, 45, 47, 99,203,182,109, 88, 63,191,134,233,120,106,132, 87,126,105,149,
+ 30,150,242,149,199,143, 67,100, 5,122, 69, 1,145,101,184,233,133, 47,198,249, 11,231, 1, 37,161, 76,119, 55,174, 42,247,252,
+216,134, 55,177, 99, 88,131,122,200, 42,105, 48,103, 87,195,110,243,225,250,119,186,182, 93, 51, 47, 2, 82, 86,152,140, 71, 40,
+122, 3,100,131, 2, 89, 81,224, 53,175,121, 29, 62,250,241,191, 68,117,250,140, 17,231,105,114,118,101,105, 9,131,193,114, 77,
+197,151, 37,212,100,130, 34,211,247,116,219,182,237, 88, 95, 95,199,210,210, 18,202, 74,131,233,180, 50, 61,243,165,116, 85, 5,
+250, 89,215,128, 46,165, 66, 81,228,152,150, 37, 50,145,129, 88,207,159,183,142,175, 29,151,171,181, 29,108, 74,250,234,253, 74,
+201,186,236,133,252, 41,125,214,193, 37, 5, 82, 97, 78, 94,211,250,250, 58,244,122,125,200, 74, 66, 73,229,122,205, 7,148,225,
+115,104,180,192,196,182,152,230,134, 16,237, 96,224,234,197,213, 76,188,106,234,172, 56,104,202,214, 42, 34,159, 91,103,142,136,
+ 61, 74,129,121, 51, 74,111,100,188, 99,253, 21, 40, 26,232,146,138,208, 35, 37,250,204,246,170, 62,216, 70, 99, 81, 3,193, 68,
+ 68,183, 7,239,223, 16, 8,180,111,216,241,136,212,166,218, 62, 28, 46, 71, 14, 84,106,177, 90, 80,102,209, 34,104,224, 68,254,
+164,117, 12,106,203,100, 29,255,223, 53, 77,200, 94,158,187,141,126, 96,248,115,116,235,224,158, 90, 4,137,126,189, 42,133,186,
+ 7, 47, 55,214,168, 36, 64,212,206, 19, 54,207, 94, 31,129, 98,229,221,147,250,117, 89,162,244,206,117,229,107,107,108,149,108,
+ 62,227,200,110,151,239,204,178,172, 30, 79,234,205,111, 15, 7,187,160,181,230,154, 60,170, 86,167, 34,201, 40,184,245,255, 69,
+150, 59,150,193, 54, 20, 1, 17,164,170, 28,205,238, 70,186,230,185,235,240,229, 11,227,226,103, 70,120,226, 56,231, 4, 5,155,
+ 35,153,168, 87, 11,209, 96,188,113,191,230,158, 37,176,190, 62,212,202,120,197, 65,169,156, 63,109,174, 49,220,193, 48, 26,100,
+ 90,226,106,169,127,237,208,166, 82, 20,113,137, 97, 12,232,113, 73,147,160, 28,211,233, 40,232,248, 7, 8, 8,102, 64, 74, 12,
+ 55,214, 48, 92, 95,115,189,226,179, 34,135, 44,167, 53, 35,100, 30,202, 45,203,171,128, 32,172,172,172,160,172, 74, 12,150, 86,
+240,229, 39,158,192,181,215,236,214, 68, 54,135,202,222,254, 64,131, 78,211,209,174, 75, 57,237,243,101, 1,190, 10, 94,143,160,
+213, 43, 64,166, 59, 28, 33, 51,169,151, 94,191, 15, 89, 85,144, 85,137,126,127, 59,142, 63,254, 40, 38, 27, 27,186,185, 14,215,
+109,102,215,215,215,177,178,178,130, 74,150,200,242, 12, 75,185, 17,209, 65, 11, 7,135,195, 13, 44, 13,150,160, 88, 33,203, 4,
+ 68,214,131,200, 4, 38,147, 9,242,172, 64, 37, 75, 51,145, 77, 3,176,206,205,107,144,237, 23,122,140,172, 32, 66,158, 23, 96,
+102,148, 37, 59,161, 34,153, 82,181, 44, 3,138, 34, 55,142,133,233, 76,171,194,220,179, 19,227,185,123, 26, 94, 7,219, 68, 72,
+ 15,221,145,184,118,207,110,156, 62,117, 10,213,180,106, 48,211,184,194,216, 30,207, 65, 15,160,132,231,252, 29,205,136,238,216,
+159,193,160, 22,154,237, 65, 38, 34,175, 81, 85, 36, 43,115, 82,123, 16,131, 26, 52,121,152, 86,165, 8,228,169,225,104, 80,194,
+201,161, 52, 85,221,204,169, 7, 84, 34, 99,177, 70, 46, 72,228,172, 83, 11, 33,166,121,197,108,199, 32,166,220, 27, 14, 66, 74,
+224,198, 9,230, 32,202,123,248,120,216, 70,177,167,102, 61, 55,212,237,177,248,171, 73,158, 36,192,198,223, 52, 99,103, 42,236,
+179,238,247, 9,142, 71,143,134,158, 64, 44, 62,240, 59, 75,121, 64,206,126,243,148,102, 42, 36, 40, 7, 52, 64,169, 68, 93, 70,
+ 35, 56,117, 46, 97, 25, 36, 35,108,115,217,100,113,200, 83,224,114, 99, 88,139,127, 14,174,113,140,180,116,100, 93,246,214, 46,
+180, 11,233,100, 6, 92,100, 84, 47, 26, 89, 51, 81,153, 6,224, 44,207, 33,171,202,253,125, 37, 75,143,174,213, 63,155,148,211,
+ 32,117,226,119, 66,244,193, 54, 19, 34, 4, 29, 29,102, 5,235, 80, 41,214, 81,150,153, 48, 23,150,221,101, 24,141, 54,180,194,
+ 58,138,236,227,207,117,218, 12, 31,232,252,239, 17,246,203,159,149,171,180,189,201, 83,237, 59,253,159, 59,154,222,139, 4, 93,
+ 67, 30,255,153,103,198,100, 58,173, 5, 83,118, 96,147,121,181, 84, 90,244,247,204, 99, 79, 97, 50,158,224,134, 27,151, 48, 24,
+ 20, 24,142, 54,156, 14,198,150, 2,101, 66, 32,239,245, 48, 30,174, 69,236,130,118,242,172,216, 75,127,213,107,199, 30,115,158,
+103,152, 76,116,123,215,149,149, 85, 48, 43,140,198, 35,119, 45, 7,253, 62, 70,163, 49,100, 85, 25,178, 74,111, 78,167, 79, 62,
+243,255,243,246,102, 77,150, 36,215,153,216,119,220, 61,150,187,228,158, 89, 91,119, 85,119,161, 1, 98, 33, 8,136, 20, 69,202,
+134, 52,141,105,180,204,140,164, 87,189,202,164,127,130,191,162,135,249, 5,122,210,152,108,104,154, 25, 17, 52,114,200,193, 16,
+ 4, 8, 18,141, 94, 81,107, 86,229,114,183, 88,221, 93, 15,190,132,187, 71,220,172, 34, 69,170,205,218,170, 43, 59,151,155, 17,
+113,253,156,243,157,111,137,118,222,225, 90,167,170, 43,148,229, 12,187,221, 14,164, 57,102,229, 12, 93,219,122,142,196,174,218,
+ 34,207,115, 8,145,161,174, 27,116,157,153,244,123,155, 41, 48,184,210,153,166,145, 19,131,236,122,200,222, 64,247, 74, 41,200,
+ 94,130,200,236,211,251,174, 71,198, 5,100, 32,129,236,186,222,120,206,247, 6,189,224,140,161, 15,238, 29,113,238,119,237, 70,
+205,160, 61,121,213, 61,154, 89,150,163,235, 90, 67, 80,148, 29,238,223,127,128, 23, 47, 94, 66,169,222, 15, 96, 90,255,127,215,
+146,255,157,139,250, 8,181,140,143,184,125, 19,242,126, 18, 29,249,149,155, 71,140, 24, 77,119, 4,122,146, 9, 16,123,107,236,
+203, 68, 79,125, 69,136,188,243, 91, 74,126, 75, 93, 65,211,223, 37, 1,222,247,214,227,176, 49, 17,142,172, 54,217,173,220,101,
+ 19, 75, 19, 69, 58,173, 45, 24,187,202,121,152,125,194,116,102, 50,233,141,226, 68,181,189,141, 6, 37,251,114,151,219,124,215,
+ 92, 56,201,248,199, 24,102,159, 42,244, 90, 71,217,227, 72, 47,126,192, 40, 14,165,102,233,212,144,250, 8,135,235, 0,189,119,
+130,215,251, 9, 20,129, 85,111,228, 54,239, 97, 35, 68, 15,167,231, 63,164,209,182,206,176, 65,147,247, 25, 15, 33,248, 73,223,
+ 56, 29,167,152,249, 20,174, 81,131, 71, 19, 36, 16, 68,187, 82,231,103, 28, 22, 41,179,215,141,141,112,210, 27,155, 22, 35,103,
+ 14, 2, 10, 60,229,137,123,194,221,124,177,192,118,179, 1,231,132, 94,106,143,230,180, 77, 23, 77,192, 89,150,161,237,187,104,
+229,146, 38,139,133,126,239,140, 15, 9,113, 74,107,144, 11,146,153, 34,193, 4, 11, 33,173, 13, 49,206, 77,152, 33,219, 53, 13,
+179,137,208,159, 52, 9, 10, 46,217,141,141,144,140, 65, 31,111,166, 79,231,123,158,238,218,195,176,151,176, 73,113,218,116,105,
+ 21, 19,225, 25,203,236,193, 72,211, 3,140,221, 39,107,204,230, 51,236,182, 59, 48, 65,232,187, 22, 69,158,225,250,234, 13,120,
+ 46,160,146,176, 45, 70,100, 88,225,129,175,121,170, 78,112,171, 36,157,120, 7, 56,164,195, 65,238, 74, 41, 52,109, 13,217, 73,
+128, 56,142, 79,142, 32,251, 14,117,109, 12,108,148, 6, 62,252,240, 49, 46, 47, 95, 3, 26,216,109,183,145,127, 63, 35,142,251,
+ 15, 31, 34,203, 50,108,214, 43,220,220, 92,227,240,224,208,163, 58, 70, 2,167,209,180,134,232, 87,215, 53,184,232, 81,150, 37,
+242, 34,179,222,252,150, 5,111,191,130,115,110, 17, 36,237,147,247,156,147,157, 12,136,109,204, 54,135,121, 38,208,245,189,105,
+ 54, 64,102, 21,226,188, 16,200,204,148,125,215,197,132,221,116, 4, 11,162,120,153, 61, 51,186,182,195,118,187, 69, 81, 20,184,
+184,255, 16,175, 95,252, 58, 24,132, 66,228,237,255,135,145,157,246, 20,244,125,101,137,222, 5,211, 15, 5,157, 72, 89,142, 77,
+178,230,212, 24, 23,107,210,160,212, 68, 38,174,198,147, 31, 75,218,220,196,229, 51, 12,131, 97,227, 53,241,132, 28,154,136,141,
+ 82, 50,166,146, 63,205,160,194,141,117,232,123, 71,139, 6,176,252,200, 28, 68,143,119,225,225,174,124, 95,214,120, 10, 3,251,
+226,226, 28,237, 66,246,246, 8,218,208,113,231, 22, 68, 36, 78,247, 90, 83,251, 95,102,157,177, 88,224,242, 21, 66,215,225, 20,
+197, 6,105, 16,226,196, 29,167,101, 14,181,175,227,169, 40, 92,183,132, 19,154,242, 12,233,193, 13,140,153,184, 76,145,217,216,
+ 76,243, 47, 99,194, 59,122, 13,242, 22,242,187,114,207,182,182, 4,165,184,184,210, 16, 69,154,172, 44,120, 4, 37,219, 67, 76,
+ 3,100, 89,198,138, 17,122,173,209,219,120, 2, 69,128,132,134, 36, 13, 9, 29, 73, 88,180,221, 19,250,199, 59,117,182, 11,255,
+117, 7, 70,164,133,101,123, 26,166,119, 63,155, 41,100,236, 51,223,161,160,108,146, 25,105, 6, 37, 53,202,114, 6,173,164, 13,
+132, 49,100, 53,165,123,244,157, 10,144,150, 80,165,160, 39,214, 41,227, 61,186,111,156, 0,127, 47,133, 16, 6,138,117, 5, 53,
+ 66,143, 44,207, 65, 2,117,221, 24, 93,182, 71, 5, 6,205,185,176,161, 32,254,185,116,104, 68, 50, 73, 26, 67, 24,128,113,138,
+216,244,161,142,223,188,183, 76,250, 27, 35, 14,165,198,174,127, 97,147,228,159,103,251,227, 57, 49,100,140, 71, 8,142,121, 46,
+226,216, 28, 14,243, 28, 49, 11, 98,106, 2,138, 60,199,102,179, 66,179,171,140,171,166,224, 40,103, 51, 92, 92, 60, 66, 91, 55,
+ 86, 29,161,124,179, 34,132,128,234,250, 0, 70,102, 72, 33, 61,206, 5, 14, 15, 14,146,235,236,246,208,176,124, 1, 99, 46, 4,
+198,240,244, 27,159, 64,129,176, 94,175,209,182,198, 57,112,185, 60,196,102,183, 69,211,214, 88,111,214, 88,204, 22,224,196,192,
+ 56,199,197,253, 71,248, 39,255,213,127, 13, 33, 24,158, 61,251, 26,109,219,224,228,228, 4,173,141,128, 5, 17,102,179, 25,178,
+ 34, 7, 99, 28,139,197, 1,202,162, 68,215,214,168,171, 45,182,219, 53, 14, 15, 14,112,114,124,138,131,229, 17, 56, 19,158, 85,
+159,137, 28, 90,154, 85,140,200, 4,164,247,213, 31,144, 58, 77, 26, 76, 0, 74,182,200, 56, 96,251, 70,115,173, 8,232,161,192,
+ 50,129,114, 62, 3,227, 60, 50, 60,130,158,242,183,176,123,245,174,179,100, 56, 66, 83,247, 88,175,111, 80, 22, 28,243,229, 97,
+196, 68,139, 92, 37,137,254, 81, 11, 58,238,210,159, 79, 41,125,236, 14, 93,211, 29, 5,157,140,212,207,240,139,147,177,208,165,
+171,165, 5,157,141,175,215, 36,106,155, 12,144, 26, 38,108, 69,123, 56, 14, 35,162,118,186, 55,103,108,104,206,181,191, 12,230,
+235, 83, 71, 57,231,205,145, 34,217,140,216, 52,251, 61, 50,117,153, 96,182, 79, 65,239, 83, 23, 61,133, 54,238,140, 38,197, 29,
+ 49,174,110,239, 78,241,142, 77, 91,102,166,158,216,109,235, 52,220, 32,133,104, 38,108, 21, 49,106, 52, 18, 56, 37,244,253, 78,
+ 96,104,207, 66,143, 38,245,116, 71, 73,241,183,138,204,100,152,111, 10, 6,195, 7,242,240, 99,248,117,147, 13, 14, 5, 90,110,
+ 98,166,120,105, 61,226, 43,164,200, 72, 56, 61,134, 36, 35, 23, 34, 97, 45,193, 34, 20,198,203, 16, 35,105,135,142, 67,104,244,
+132, 7,213, 88,219, 52, 13, 59, 5, 95, 16, 9, 40,166,140,105,238,144,132,140,214, 43,174,232, 43, 43, 5, 19, 57,234,166, 70,
+ 38,184,153,124, 92, 33, 83,122,114,133,226,244,225,169, 35, 92, 68,216,115,112,188,157,214,149,210, 9, 31,130, 76,220,104, 64,
+244,116,133,147,115,142,237,166,178, 86,172, 58,120, 6, 7,255,127,178,147,149,227,121,248, 0, 23, 43,223, 83,206, 89,143,143,
+ 29,238,122,187, 94,208, 58,137,191,181, 22,176,108,114,181, 49, 29,145, 73,100, 72, 92, 93,215, 97, 4, 73, 57, 55, 51, 77, 9,
+ 59,215,233,113,205,127,103,121, 9, 46, 24, 30, 62,249, 24,243,249, 2,155,237, 26,154,200,144,238,148,142,242,231, 51, 33, 44,
+147,220,161, 70, 67,193, 98,108,248,239,245,102, 61, 66, 23, 24,227,222, 36, 71, 3, 88, 44, 15,144,231, 5,214,171, 27,172,110,
+222, 64,107,160, 44,103,200,243, 12,154, 8,155,213, 53,164,214, 56,152,207,209,182, 13,178, 92, 64,228, 51,252,240,135,191,131,
+ 31,255,241,191, 69,189,219, 64, 1,216,213,141,153,108,103, 51,232,182, 67, 93, 85, 0, 12,170,144,101, 57, 86,155, 13, 4,231,
+ 88, 46,150,216,238,182, 40,202,194,146, 47, 9,235,205,218, 19, 14,133, 48, 49,172, 69, 81,162,105, 43,127,214,105,251,123,154,
+ 51,128,123,146,164, 10,204,108, 92,243, 51, 24,201, 40, 48, 38,188,231,188,118,249,242, 9,154,233,120, 26,222, 22,217, 70,224,
+106,165,176,221,214,200,178,107,156,221,191, 64,211,212,232,218, 38, 34, 37,142, 72,105,255, 40, 85,253, 31,144, 72,231, 38,244,
+128,221,238,127,130,226,201, 55,210,190,145, 33, 27,119,236, 21, 72, 83,123,243, 9, 50,156, 98, 9,235, 40, 10,131,161,233,243,
+ 60,173,146, 65, 42,230, 62,222, 91, 52,157, 7, 13,130, 24, 49,211,195, 47, 78,131, 84, 66,131, 18,232,136,168, 22,201,207, 38,
+246,224,145,205,168,222, 15,229,135,235,234,116,239, 59,197,200,158, 52,121, 73, 47,184,158,216,173, 39, 90,195,148, 88,229, 15,
+189, 9,144, 52, 53, 0, 24,235,178,227, 29, 76,120,230,197,210, 52, 10, 36, 11, 97,130,216,176, 7,245,164,190,196,250,193,124,
+140, 39,170,129, 16, 86,103, 32,206, 18, 3,151,113,103,151, 58,246,249,125,180, 35,104, 48,147,123, 77, 74,155,169,157, 98,252,
+ 39,244, 66,223,183,166,137, 72,169,204,201, 64,166, 9,163, 58,102, 80, 6, 84, 65, 36,136, 8,121,185, 93,170, 21,159,154,218,
+137, 6, 15,117,198, 53, 52,122,204,242, 5,154,205, 14, 89, 94,160,237, 58,243,251, 56, 13,187, 48, 94,221, 14, 65, 16,156,129,
+250,152,139,193,236,247,100,156,143, 92,236, 52,153,253,165,249,187, 75,105,179,207, 48, 83, 16, 60, 44, 78, 26, 74, 1,235, 85,
+133,190,239,124,250, 87,168,102,112, 44,105,165, 20,200, 78, 97, 14, 5, 48,147,135,233,230,157,131, 29, 11,210,182,194,207,117,
+ 82, 62,173,172,169, 16,148,253,147, 70, 65, 52, 83,249,215, 38, 40, 36,162,234, 67, 43, 64,216, 9, 71, 58,111,247,232,145, 24,
+203, 90,190,245,141,111, 97,181,171,113,125,115,133, 55,111, 46,209, 55,207,112,124,126, 12,173,156, 85,185,138, 9, 93,182,169,
+114,240,116, 72,108,158,138, 6,205,178, 44, 96,244, 27,157, 59, 49,194,241,241, 25,170,122,135,166,170,113,112,176, 68, 89,204,
+ 76,193, 39,224,246,246,198, 41,160, 32, 88,189,164,120,176, 0, 0, 32, 0, 73, 68, 65, 84,102, 93,239, 12,255, 98,150,229,248,
+229,223,254, 53,170,237, 26,125,111,118,218,194,146, 44,171,237, 22, 7, 75,179,167,111,219, 22, 85,181,179, 72,157,185,102,171,
+109,133, 60, 43, 80,239,106,228, 5, 80,148, 51,204,202, 18,117, 85, 3,224, 80,189,209,189,183,109, 99, 60, 19,154,202, 91,207,
+122, 73, 25, 52, 24, 19,232,149, 2,227,153, 97,226,107,133,140, 17,164, 54, 57,108, 36,114, 27,241, 42,145,205, 10,100, 90,160,
+169, 42, 31, 6,212,247,246, 89, 34, 66, 15,147,241,174,181, 6, 19, 28,188,200,161, 58,227,101,127,112,124,132,174,239,209,214,
+ 53,238,221,255, 0, 47,190,254, 10, 10,189,143,215,133,126,183,211,232,223,251,159, 9,212,152,212,254,198, 93,179,116,204, 10,
+139,193, 32, 73, 35,210,147, 36,230,189, 11,102,227, 8, 20,213,132,125,236,118,114,207,125,128, 10,140,145,201,100,144, 28,229,
+135,208,222,193,249,174,248,243, 41,196, 68,220,149, 17,238,138,120,148,173, 30, 30,216,129,132, 46,205, 66,143, 8,116,233,238,
+156, 81, 76,108,211, 83, 23, 53,248,127,148, 78,152,241,198, 98,159,148, 41,114,241,210,177,140,141,238, 32,103,236,135,151, 82,
+255, 93,218, 99, 31, 60, 48,153,245,228,206, 55,102,246, 13, 78, 78,137,199, 92,148,168, 21, 23,202,208, 11,128,152,133, 95, 53,
+130, 61, 52,108,196, 37, 69,149,113,170,136,251,201, 59,124,179, 96,240,169, 30, 19,253,227, 29, 43, 37,196,193,169, 70, 34,253,
+ 88,132, 32,248,192,133,208, 66, 55,148, 81,134,215,149, 77, 56,185, 77,239,185, 67,115, 26,165,245, 72, 51,206, 18,227, 15,247,
+249,157,148,129,127, 56,121,246,188,147,166,249, 9,221, 50,204, 83, 6,188,177,120, 29, 56, 8, 4,123, 64,211, 64,196,209,214,
+219, 93, 42, 5,206, 50, 52, 85,237,205,101, 98,139, 87,179, 22,113,214,177,126,178, 15, 16,129,200,161,206, 74,221,116,192,184,
+151, 74,123,153,158,116,114, 42,140,205, 48, 82,146, 97, 24,227, 26,101,175, 35,150,145, 97,178,241,221,255,143, 82, 18, 44, 35,
+124,245,245,231, 96, 74,162,111, 59, 40, 6,220,191,255, 33, 62,253,244,111,134, 73, 74, 15, 25,215,225,116,234,154, 39,103,255,
+ 26, 43,153, 88, 68,250, 11,117,247,121, 57, 67, 46, 56, 86, 77,131,217,108,134,190,239,208,245,141,249, 92,105,246,233, 32,133,
+217,242,216,166,186,221, 26,146, 37, 3,170,106,139,197,114, 97,238,145,253,189,165, 26,194, 92,214,107, 35, 95, 43,203, 18,155,
+205, 6,140, 51,156,158, 94, 96,179, 93, 65,245, 18, 77,211, 34, 47,102,168,235, 29,132, 16,104,219, 14,139,229, 2,109,219,161,
+237, 90,212, 77,141, 89, 57, 3, 72, 34,203, 50,116, 93,103, 11,125, 11,173,148,149,187,101, 0,148,125,166, 56,250,222, 12, 30,
+156,219, 70, 72,105,136, 34, 71,215,119, 40,242, 28, 77,219,249,130,110,136,153,166, 9,231,130, 7, 40,170,101,212, 43, 5, 46,
+ 4, 24,231,144,125,143,172, 40,161,165, 66,211,109,177, 60, 60, 48, 9,119, 8,220, 5,255, 49,134,243,247, 97,161, 83, 28,232,
+245, 62,109,197,212, 52,236,199,233,176,115, 32,231,179,193, 35, 36,244, 46,148, 87, 97, 68,105, 74,234,194,152,255,226,253, 72,
+238, 72, 61,189, 11,233,222,123,253,237,249, 62,157,210,166,247, 44,226,167, 24,233,108, 26, 50, 15,187,136, 73,111,121,134,216,
+150, 48,129,109,163,102, 99,194,153, 13,216,175,113, 30,101,246, 38,241,150,216,243,235,236,187, 88,147, 58, 65, 61, 38,193, 13,
+ 55, 44, 76,235, 26, 95, 88,247, 57,238,167,187,131,107, 12, 31,199,161, 32, 67,163,224,222, 94, 44, 38,209, 36, 70, 63, 68,136,
+228, 96,126,183,108,167,255, 94,199,250,103, 29, 2, 62, 54, 49,140,162,134,194, 66,119,129,169, 69, 24, 39,232, 13,106, 20, 65,
+ 90,196,129, 52,121,111, 3,237,141, 79, 83,103, 63, 29,229,186,135,136, 69,124,141, 13, 68, 29, 22, 27,247, 43, 48,206, 70,164,
+181,208,159,158,236,118, 23,208, 40,242,220, 78,230, 49,207,195,105,239,149, 82, 46, 61, 17, 92, 91,243, 22,107,237,153, 54, 12,
+227, 55,171, 33, 47, 9, 63,245, 42, 48, 78, 16, 22, 38, 29, 76,122,134,139, 90, 53, 29,234,166,182,172,237, 97,119,201,185, 8,
+173,247,163,221,168,187, 48,220, 78, 91, 62,114,211, 61,139, 80, 86,130, 8, 48, 61,172, 8, 56,231,222,154, 52,253, 29,210,235,
+150, 54,113, 3,121, 46,224,152,216,247,169,178,144, 59,211,230,238,170, 32,209, 44,109, 84, 25, 17, 94, 93,190, 70,215, 52, 6,
+143,200, 56,238,157, 93,224,246,246, 22,245,118,227,127,182,210,166,144, 85, 85, 5,169,212,128, 68, 76,172,191, 98,103, 99, 29,
+153, 42, 49,102, 32,241,174,235,241,250,242, 21, 68,150, 67, 74,137,221,174,133,210,166, 48,159,156,158,163,106,107, 52, 85, 5,
+ 46, 4,110,175,174,192, 25,129, 9,130,224, 5, 14, 14, 14,240,242,213, 51,251, 94, 83,208, 96, 40,242, 18,135,199,199,216,110,
+214,104,186, 22,219,186, 2,148,196,172,156,161,170, 27, 60,123,246,204, 88, 17, 43,141, 44, 19,232,186, 6,101, 57, 71,215,245,
+152, 47,230, 32,192, 18,234,204,239,212,182,141,113, 51,204, 11,116, 77,143,182,110,144,151, 5,218,170,182,114, 54,147, 11,223,
+246, 61, 50, 33,192, 56, 65,246,173, 85, 7, 24,121,156,212, 61, 56, 39,180,109, 3,210, 26, 92,112,112,102,146,227,156,127,255,
+160,170, 32,255,188,115,110,131,140, 24, 55,164, 66,106,193, 23,115,228, 89,142,217,193, 18,109,211,160,105,118,195, 59,230, 31,
+104, 72,255,251, 4,178,144,117,134,219,191, 63, 39, 95,168,163,115,113,138,217, 78, 42,220, 72,239,223,155,239,131,219, 83,159,
+119,194,228,234, 46,172,149,129,241,244,164, 20, 46, 13, 32, 75,225,245,187,152,239,158,172,234,237, 82,195,194,203,104, 28,198,
+ 50,129, 93,120,187, 88, 29,210,245,105, 36,185, 9, 25,208, 6,194,211, 65, 50, 79, 64,188, 99, 19,169, 82, 90,143,226,222, 29,
+244,233,247,149,142,197,185, 39,196, 99, 82, 91, 62, 50,144,161, 24,218,245,255, 14, 30,219,211, 89,212,176,228, 56,242,172,234,
+169, 3,145,188, 20,105, 34,232, 36,240, 29, 31,180,163, 3, 44, 26,202,225,194,130, 63, 28,200, 9,124,227, 9,239,228, 31,136,
+ 80,238,163,181,129,141,205,245, 30,120,118,196,172,188, 70, 8, 8,206, 35,249,223,224, 79, 62,236,232,212, 4,245,109,152,152,
+ 66, 78, 3,129, 25,223,176,125,219,243,224,249,139,205,133,144, 64,239, 99,114, 28, 27, 77,154,227, 55,167,121,209, 66, 8,115,
+136,121,249, 89,218, 36,216,221,179,167,234, 25,169,145, 75,175,242,110,113, 19, 74, 9, 67, 58, 13,140,113, 28, 9,213,206, 56,
+134, 8, 3, 63,229,187, 13, 88, 85,215,190, 88,134, 13, 41, 11,130, 89,156, 9,148, 95,137, 56, 57, 84,104,147, 27, 64,230, 74,
+ 15,223,143, 7,187,127,119,184,112, 62, 64,132,108,138, 77,111, 13,110, 82,238, 64,184,202, 24, 14, 33,242, 14, 87,206,195,154,
+105, 75,144, 27,161, 60,230, 33,121,243,230,173,207, 31,152,205,230,200,243, 2, 12,202, 68,190,170,161,113,209,118, 95,108,238,
+ 25,159,108, 58,226, 70,107,248,187, 16, 3, 89,181,109, 59, 40,217,225,131, 39,159, 96,177, 60,178,249,235,102,119, 36,184, 64,
+223,181,168, 54, 27, 51,157,110,215,166,129,200, 50,148,197, 18,143, 63,122,138,171, 55,151,232,235, 14,196, 8,203,195, 83, 60,
+126,242, 20,139,197, 2,171,213, 53,100, 95,227,104,185,192,189,179, 83,228,185,192,174,170,192,136,144, 9,243,188, 43,104, 84,
+117, 3, 34,151,189,174,177, 94, 27, 24,127, 54,155, 33, 47,114,191,251, 39,102, 8,156,179,217, 12,196, 8,245,174, 66, 81, 20,
+158,235, 96, 10,176, 64, 47, 37,152,205,115, 87,202,232,238,133, 16, 16,156, 33,227, 28,153,224,200,243, 12,140,113,116,125, 7,
+ 33, 50,187,150, 16,118,157,195, 35,226,167, 82,131,143, 62,180, 65, 70,170,205, 14,220, 94,203,139,123,247, 7,226, 30,225, 31,
+ 78,223,118,215,247, 74, 81, 92,102,246,225,154,238, 72, 88,115,252, 30, 50,146,209,184, 51,160,177,136,221,146,225,220,121,229,
+107, 64, 90, 39,162,247,172,121,206, 85, 64, 58,100,209,217, 78, 35, 68,145, 49, 26, 49,215, 71, 40, 25,163, 73, 68,124, 58,221,
+109, 56,171, 71,100,185,176,216, 58, 40, 54,234, 10, 40,102, 72,123,230, 59, 98,184, 32,140, 80, 29,165,125,237,233,236,136, 13,
+121,210,184, 51,108,103, 96, 21,179,176, 72, 39, 13,132,158,186, 9, 83,222,188,193, 62, 52,149, 35,165, 7, 68,122, 32,165,110,
+104, 33, 25,201, 60,244,241,190,220,188,121, 88, 16,191, 73, 65, 14, 56,243, 15, 19, 99, 12,140,179,224,115, 88,210,100, 4, 69,
+203, 77,199,254, 33, 7,164,211,162,130,188, 97,140,166,216, 81, 13,140, 64,156,249, 63, 67, 18,158, 78, 72, 81,202, 66,126,209,
+ 3,158,122, 39, 7,145,162,148,116,223, 76, 3,220,201,210,108,240, 74, 72,214,211,164,163, 55,232,112,141, 88, 18,170, 2,191,
+159,156,146,242,133, 60,187,176,200,233, 9, 54, 56,227,102,162,113,247, 4,208, 16, 25, 71,103,245,231,161,115,151,119,253, 3,
+ 0,206, 32, 67, 57,154,211,162,219, 2, 63, 76,184,142, 92,147, 52,180,118,141,161, 19,168,135, 49, 67,140, 83,145, 13, 42,243,
+ 83,179, 41,254,136,126,110, 68,196, 11, 13,104,236,235, 49, 1, 29, 49, 43, 95,250,208,147,137,128, 28,215, 16, 7,239,129, 40,
+101, 46, 41,236,190,105, 13,184, 11,134, 53,192,252,140,160,152,187,231,110,135,203,134, 51, 90,107, 40,109,244,233, 89,158, 65,
+228, 25,158,126,252, 9,148,150,184,124,251, 22, 82, 73,171, 79, 31, 10,187,115,236,115, 7,227,116,243, 54, 62,245, 66,211, 30,
+165, 21, 78,207,239, 99,181,186,198,237,237, 21,138,114,142,131,163, 3,136,204, 20,197,213,106, 5, 13,224,233, 39,223,134, 34,
+142,143,159,126, 3,189, 84,232,250, 26,159,125,250, 11, 40,109,158,149,197,226, 16,223,249,206,119,177,171, 54,216,237, 86, 96,
+214, 60,166,218,109,176,217,172,176, 92, 46,177,152,207,176,152,207, 0, 50,230, 54,243,197, 2, 23,247,239, 97,177, 92,226, 96,
+185, 68,219, 54, 40,242, 28,196, 24,250,174,247, 4,192, 94,246, 67, 88, 22, 99,152,149, 11, 8,110, 52,238,121,150, 69,236,115,
+173,173, 89, 18,231,224, 76,160,235, 58, 8,193,205,115,105, 17, 13,115,191, 6,222,142, 33,211, 41,111,105, 59,186,167,190,241,
+151,166,249, 4, 80,239,118,128,214,200,202, 28,103, 23, 23,113, 26,231,223, 65, 53, 53,133,137,107,186,195, 84, 76, 79, 20,254,
+119, 21,115, 56, 99, 42, 29, 19,206,245,132,166,156,172,234, 6, 28,184,107, 66,167,184,200,235,128,236,169, 61,159,103,218, 60,
+ 38,180,151,142,234, 39,177, 17, 63,104,204, 33,167,168,222, 78,169,124,166, 8,232, 68, 4,190, 60, 58,253,145,187,249, 83, 12,
+233,125,228,167,112,236,143,247,151,251,133,241,180, 79,103,187,135,251, 56, 76, 17,227, 95,136, 77,144,220,166,166, 39,119, 0,
+222,245, 26,227,233,155, 18,153, 12, 3, 38,245,134, 73,161, 13,102, 82,243,134,225,102, 71,229,138,179,141,235, 76, 93,199, 34,
+130,149, 30,188,208, 61,212,163,227,244,179, 40, 29,141,209,208,189, 98, 32,106, 14,205, 82,112, 79, 89, 80,148, 3,246,244, 84,
+211,192,172,197,164,131,139, 92,195, 97, 10, 52, 69, 7,122,200, 91,240, 5,149,104,112,152,100,128,179,188,208, 20,235,231, 67,
+157, 40,129, 48,182,167, 29, 38,181,120,133,128,225,160,231,131, 85,171,239,150,131, 55,161,191,190,220,232, 36, 24, 35,112,150,
+131,115,142, 78,118, 32,178,153,220, 74,161,151, 18, 90, 1,109,219,122,148, 6,204,178,216, 45,148,205, 57,183, 8,134,249,153,
+195,225,104,145,156,192,203,217,189, 70, 29,236,106, 60, 91, 64, 3,219,173, 49, 36, 9,121, 11,198, 2,116,248,254,140, 82, 2,
+160,253, 61,156, 53,109, 72,142,180, 9,106,140,179,145,225, 76,164,169, 15,144, 45, 55,225,185, 93,188,123,189,156,115, 8, 33,
+198,254,134, 90,251,149,136,155,238,152, 37, 83,142, 20, 66, 46,150,217, 62,195,142,247, 65,246,239,203,165,145,119, 17,203,144,
+ 21, 57, 94,188,248, 53,116, 47,135,125,191,214,200,243, 60,122,237,142,119, 16,122,185,187,134,199, 89,168, 58,107,100,199,193,
+ 88, 44, 22, 40,203, 18,117, 93,161,169, 76,240,202,249,217, 5,222,188,189, 4, 52, 80, 20, 5,132,224,152,205, 22,184,185,126,
+139,182,174,113,123,115, 13,193,204,189,158,205,230, 88, 44, 22, 32, 70,144,109,131,235,235, 75, 3,131,215,157, 49,182, 97,220,
+164,209, 73,131, 0,237,182, 21, 90, 11,113,103, 66, 64, 48,134,213,106,133,221,110,135, 94, 74,156,158,158,161,105, 90,200,190,
+ 69, 81,150,198,223,190,239,141, 37, 44,180,137,107, 5,208, 75,133, 60,207, 33,251, 14, 82, 41,228,121,102, 63, 79,120,185, 42,
+227,220, 54, 84,218,135,193, 12,103, 8,243,195,131,227,242, 56,239,248, 56,208,137, 2,171,228, 64,117,226,214,125, 10,200,138,
+ 28,229,108,142,222,114, 0, 60,139,248, 93,233, 42,123, 6, 53, 23, 14,246,206,130, 30,156,115,239,234, 32, 70, 43, 37, 15,183,
+179, 4, 18, 48,137,121, 3,105,151, 44,162,153,216,131, 39, 38, 79,174,160, 15, 3, 91, 26,134,196,252, 53, 99, 41,210,237, 6,
+149,176,152, 7,147,185, 43,224,225,251,125,212,184, 78,201,216, 38,134, 91,126,112,114,246, 35,218,179,180,159,100,218,133, 83,
+ 81,168, 39,159,172,202,113,225,223, 79,120,164,241,244, 64,137,146,253, 14, 75, 62,208, 29, 86,122, 19, 16,123,106,246, 18,146,
+218, 66, 13, 97,248,177,240, 70,133,208, 74,204,132,215,209,215,121,244,195,251,103,187, 41,143, 34, 4, 35, 77, 29,115, 15,128,
+ 51,147, 48,221,123,204, 13, 8, 33, 92, 7,177,134, 94,224,206,165,202, 85, 81, 79, 14, 99,227,224,145,168,192, 7, 31, 75, 35,
+ 88,211, 92,244,116,199, 20,146,157, 29, 4,164,134, 29,137,223,245,115,176, 40, 64,103,184, 43,122,196,168,165, 96, 66,211,246,
+ 0, 30, 38, 73,171,173, 39, 29, 77,154,238,218,164,169,101, 32, 3,181,154, 80,142,220, 51,205,149,148,232,165,180, 69,202,229,
+ 88, 59,194, 27,129,103, 28, 90,170, 8,126,247,235,158, 61,161, 42, 65,250,140,191,126, 30, 58, 86, 61,218, 94,249,160,150,240,
+ 31,211, 8,198,121,241, 32,248,103, 33,220, 99,179, 68, 98,230, 16, 9, 33,196, 56,100, 38, 92, 29, 4,133,157,130,191, 59,159,
+ 4,151,110,151, 22,243, 49, 43,126, 32, 26,106, 50,200,204,192,202,136,220,169,192, 20, 32,237, 74,137,195,184, 4, 42,192,104,
+198,181,194,235, 87, 47, 1,169, 33,251,110, 64,212, 24, 67,158,231, 30, 49,112, 63, 91, 42,229,223,152, 44, 74, 18,140,115,195,
+221,189,105,219,214, 19, 31, 79,206, 47,176,219,108,177,219,109, 32,165,196,124,121, 0,145,229,216,213, 21,148,146, 40,203, 18,
+ 92, 20, 56, 60, 58, 54, 62,240,153,129,173, 55,155, 13,160, 9, 23, 15, 30,160, 87,214,133,173,109,240,131, 31,252, 0,223,251,
+193,127,134,139,123, 15, 48, 63, 56,194,225,193, 17,178, 44,195,114, 49,135,148, 38,132,165,151,102, 7,158,231, 57, 50, 33,176,
+221,172,253,181,239,218, 14,109,219,162,156,149,104,234, 6,220, 34,104,198,147,130,161,174,107, 20, 22,158,111,219,206,250,180,
+247,182,193, 81,195,128, 99,223, 75,125,111,226, 91,157, 36, 54, 92, 39, 58,249, 95,186, 66, 28, 20, 56,195, 35,155,101,217,112,
+222, 41,107,173,155,101,152, 29, 44,177, 93,175, 33,101,191, 95,130,244, 30,242, 51,208,251,139,217, 52,209, 59,201,121, 83, 69,
+208,176,215, 41,222,159, 51,101,225,118,223,246, 79,178,219,195, 53,174,131,218, 7,219, 90, 54,177,242,155, 66,145,200,251,154,
+132,103,117, 8,153, 71, 69,124,202, 80,109,106, 21, 30, 16,156,167,134,104, 17, 50,145, 67,139,207,119, 98,250, 9,227, 46, 90,
+158,197,113,218,251,111,222,123,132,113,104,132, 70,250,211,254,236, 52, 65,148, 35,140, 53,205, 3,162,199, 38, 73,105, 41, 25,
+ 45,117, 58, 27,138,190,142, 32, 20, 64, 71,140,247,136, 29,169,164, 47, 16, 38,113,105,152,118,132,101,173,107,165,236,164, 19,
+ 92,247,208,187,221, 17,235, 56, 27, 24,216,156,123,251, 84,157, 48, 67,141,108, 41,254, 24,131, 14,122, 85,243, 61,122,107,238,
+ 17,166,175, 65, 41,200,104,122,214,113,210, 26, 77,184, 43,141,180,171,218, 72, 60, 92,131,164, 39,158, 15,152,208, 48, 32, 33,
+ 83,134, 18, 70,173,163,240, 32, 87, 88,194,253,174,137,123,103, 35,178,151,123,102, 40, 40,182,254, 80, 11,228, 70,140, 11, 3,
+141, 43, 13, 98, 2,109,181,139,158, 11,206,173, 77,173,213,243,242, 0, 97,113,207,163,249,158, 38,200,135, 49,242,102, 63,100,
+145, 6,173,172, 70,214,238, 53,193, 56,218,190,179,159,231, 76,110,236,254,157, 27,252,156, 44, 31,130, 88,160, 34,177,132,168,
+ 97, 50,213,112,192, 54,247,214,212,236, 78,110,129, 11,250, 8,141,107, 28,115, 94, 7, 44,119, 71,104,147, 1, 11, 62,108,146,
+180,150, 94, 63,222,118, 29, 68,240,182,215,161,149,166,253,184, 36, 13, 40, 5,174,153,181, 46, 2, 84,215, 1,185, 64,211,181,
+232,165, 66,105,117,225,144, 54,247, 92, 43, 75,118, 50,141,142,118,182,175, 74,129,139,204,132,190, 88,181, 64,248,108,116, 93,
+ 64,254,180,168, 3, 99, 12,243,217, 2,171, 43,227, 0,167, 64,216,109,110,145,103, 57,110,111,174,192, 24,225,155,223,250, 46,
+190,252,242, 51,212,187, 13,170,221, 26,103,103, 23,184, 94,221,128, 19,195,253, 7, 15,192, 52,225,250,242, 18, 93,215, 99, 75,
+192,239,253,222,127,137,203,171, 43,252,234, 79,126,140,182,174,124,182,250,249,217, 25, 54,235, 45, 50,145, 97, 49, 63,132, 82,
+ 61,218,190,193,118,183, 70, 39, 13, 66,193, 57, 71,221,236, 32, 68, 6,185,149,216,237,118,145,202, 64, 89,247,196,210, 70,200,
+138,172, 4,145, 33,192,113, 46,108, 67,106,163, 99, 25, 3,231, 4, 6, 99,117,220, 52, 13,202,178, 68,215,181,254,121,224, 60,
+116, 88,132,255,187, 82, 20,104,214,205, 57,227, 26,219,197,124, 1,169, 58, 48,145, 65,245, 29,154,106,135,114,190,196,253, 71,
+143,241,236,203,207,160, 85,111, 78, 7, 78,128,124,143,202,206,238, 32,196, 77,124,185,102,116,167, 82,105, 66, 93,182,231,231,
+170, 96,144, 99,136,252,223,223,193,110, 31,168,103, 52, 34, 62,211,104, 77, 61,158,204,245, 62, 66, 57,238,176, 95,223,227, 20,
+119,103, 45, 14,252, 75,248,193,241,217,143, 24,177,168,250,131, 16, 65, 1,251, 52,130, 81, 1,219, 99, 8, 66,123,254, 23,165,
+ 68,183,100, 87, 62,149, 85,206, 2,104,149,146,105, 49,206,250,198,222,102, 97, 12, 71, 98, 2,138,218, 95,236,163,239, 25,253,
+ 25, 91,190,134, 83,191,203,123, 54, 16,164, 5,163, 35, 79, 27,231, 38,100,246,143,156,177, 8,130,103,118,255,228, 14, 74, 95,
+216,236, 77, 12,239,147,179,213,228, 66, 12, 28, 7,102,224,112, 22,117,144, 22,186,183,133,209, 59,159, 77, 48,241,117, 56,149,
+167, 73, 72,129, 84, 16,251,210,235,166, 68, 10, 97, 75,148, 74,224,146,175,119,135,182,131,217,195,233, 91, 4,100, 63, 55,209,
+185, 41,147, 77,240, 36, 24, 49, 27,146, 1, 40, 45,161,236, 52, 37,109,184, 74, 83,215,209, 78,155, 11, 14,165,164,119,220,139,
+221,254,184,239,183, 6, 20,134,197, 22,146,204,106,194,181, 50,176, 57, 17,118,187, 30,109,111, 52,193,110,194, 20,194, 74,227,
+152,117,158,243,134, 23, 44, 90, 61, 80,176,203,231,204, 56,157,153,245,194,216,206, 56,148, 28,166,239,147,148,135,228,138,165,
+107, 24,124, 40,141, 45,246,161, 10,195,255,169,116,236,140,167,141,155, 28, 11,164,118,254,255,217,137,158, 33, 64,248,180,198,
+ 55,191,253,125,212, 77,131,182,218,161,109,154,192,167,223, 20, 26, 46, 24,242,188,244,207,101,111,175, 91,150,137,104, 26,117,
+141, 71,150,101,144, 74, 98, 62,155, 89,175,117, 59,221, 75, 3,235,151,101,137,114, 86,226,250,250, 10, 7, 39, 39,104,171, 29,
+120,150,227,248,244, 2, 55,215,111, 81,100, 5,230,203, 5,178, 60,195,174,222,225,254,197, 3,148, 69,129,123,231, 15,209,201,
+ 30, 39,103,231,200,242, 28,140, 9, 20,179, 12,159,254,226, 23,168,171, 45,218,174, 71,223,247,232,187, 22,235,245,218, 7,198,
+ 8,198,237,123, 93, 33, 23, 25,202,114,129, 60, 55,129, 45, 92, 48,236,182,117,196, 21,208, 90,163, 40, 10,219, 44,154,245, 78,
+150,101,104,154, 26, 69,110,154,194,190,239, 60,130,224,222, 69,156,147, 93, 47, 49,243,188,250,233, 92,217,239, 79,126,165,163,
+ 53, 34,164, 50, 38,115,145, 71, 25,165, 82,222, 31,193, 17,207,164,148,152, 47,150,224, 60,195,102,187,217, 91, 89,167,214, 62,
+251,184, 83,180,167, 82,239,247,112, 71, 68, 92,142,141,196,172,190, 92,179, 17,141,222,236,207,135,168,212,119,193,237,225, 96,
+ 18,231, 45, 4,110,112,193,174,159, 2,126, 80,234, 3, 61, 82,202, 76, 21,104,154,222,177,239,173,197,132, 49,185,156, 0,126,
+120,114,254,163, 17, 54,207,104, 36,101,163,169, 23,249, 14,151,155,105, 41, 34,237,223, 25,236,115,236,185,163, 91,139,166,114,
+208, 68,188, 36, 97,202, 8,102,172,117,166, 4, 74, 25,136, 90, 30,198, 6, 75,180,188,113, 7,197, 24,183, 16, 41,146,252,112,
+ 29,179,184, 35,137, 24,155,212,107, 50,206,237, 14, 71,219, 8, 74,225,119,221,220, 45,209,149, 2,105,155,103,174,131,146,104,
+ 15, 99,243, 38,102,254,205, 12,155, 10,229,120, 35,110,138,229, 32, 8,107,233,170, 38,108, 65, 89,146, 83, 76,201, 46, 41, 34,
+147, 36,146,171,240,215,226, 26,224, 68, 80,206, 12,197,237,221, 45,105, 46,188,203, 10,202,202,164,156,131, 29,130,169,131,123,
+ 56,214,252, 94,240,202, 3,183,127,103,193,107, 10,139,187,224, 28, 66,112,180,109, 3,145,229,168,235, 10, 90, 42,244,210, 20,
+245,222, 39,179, 89,229, 67,240, 59, 49,206,189, 46,221,100,116, 59, 82, 26,162, 32,151,240,154, 1, 10,204,238,215, 25, 35, 72,
+ 69,216,237,106,244,125,103, 66, 94, 0, 16,227,224,121,102,254,116,210, 60,231,203,157,172, 75,204,239,111, 29,227, 24,129, 11,
+138,200,122,145,250, 84,235, 81,146,155,151,190,217, 34, 75, 1,129, 77, 43,229, 11,186, 59,240,116,210, 32,132, 77, 88,168,176,
+243, 4,203,136, 89, 27,232, 63,165,246, 14,144,195,174,129,225,240,232, 8,219,237, 14,235,205, 6,135,135,135,168,171,106,216,
+169, 91, 95,244, 89, 57, 67,150,229,144,210, 22, 78, 41,237,238, 88,249,103,192,185,229, 41,165, 32, 56,247,177,185,195,142,211,
+ 52, 63,187,122,103,158,119, 97,244,216, 77,215,225,228,232, 4,109,219, 99, 86,230, 56, 62, 57,193,118,187, 5,215, 10,223,250,
+246,247,160,123,133, 39, 79,158,224,217,139,175,112,123,125,133,170,169,112,112,112, 4, 16,240,236,217,151,144, 82, 35,207, 50,
+124,244,209,199, 56, 61, 63, 71, 81,206,208,119, 29,182,187,141,121,110, 73,217,255, 38, 28,158,156, 99, 62,159, 99,179, 89,129,
+ 67,162, 40,102, 56, 58, 58,130,148, 18, 77,219, 6, 73,136,198,225,206, 56,196,105,255, 92,215,117,131, 44, 51,153,245,125,215,
+129,177, 33, 79, 64,203, 30,194,229, 13, 16, 67,219,118,152,205, 74, 51,201,107, 4,241,192, 3,219,125,152, 60,195, 65,198, 58,
+ 90, 70,142,124,218, 7,191, 48, 16,164,146, 56, 58, 62, 70, 83,213,232,155,198,153, 7, 14, 46,104, 52,232,148,137,104,188,210,
+158, 82,148,197,210,166,253, 54,177,216, 19,217,188,111,140,100,202,242,193, 7, 66,220,164, 28,149,177,152, 8,103,205,189,220,
+238, 60,156,206, 35,103,203,132,171, 53,170,155, 83, 68,185,196,228, 45,228,154, 77, 22,115,188, 95,241,247,111,171,131,211,179,
+ 31, 69, 12,219,176, 74,167,193, 43, 20, 76,194, 68,119, 94,210, 52,248,130,167,133, 64,235, 73,121, 25, 77,236,194, 49, 49,221,
+179,232,115,104,136, 21,213,123,246,240,123,144, 6, 23,106,144, 62, 44,241,142,221,238, 94, 18,135,172, 84, 46,231,184, 35, 67,
+ 7, 25,194,193,161,132,136,197,108,122, 10, 11,231, 96, 85,234,244,221, 8, 28,238, 12, 43,149,188, 57,135,255,249, 44,216,237,
+ 19, 34, 98,150, 78,254, 12,119,188,166,128,104, 31, 67,171,167,200, 87,251,246,231,177,231,237, 72, 42,160,109,195,192,181,121,
+ 91,165,191, 35,139,220,133,201,187, 21,146,149, 1,165,156, 11, 95,240, 0, 8,235, 24, 38, 56,247,211,136, 39,173,121, 83,158,
+177,149,171, 35,132,213, 77, 99,246,234, 93,103,166,117,165,209,245,210,236,120, 67,246, 57, 84,148,248,229,159, 21,198,108,202,
+218,128, 38,112,235,244, 22,190,225,120,128, 42, 40, 16, 86,187,198,255, 76,119, 93,179, 60, 51,223,143, 15, 92, 0,145,112, 32,
+ 12, 18, 96,237, 92, 45,151,128,123, 66, 35,139, 44, 85, 67,121,103,170,238,208,209,186, 7,126, 39, 78,169, 92,212,161, 2,193,
+231,196,251,116, 10,204,161, 98,115,167,116, 2,211, 90,131,180, 33, 76,178, 4,137,105,187, 6, 82,118,232,218, 6,117, 83, 15,
+207,161,253,126,179, 89, 1,193, 51,228,121,230, 73,114,125,223,163, 44, 10,235,158,198,253,239, 65,201,238,221, 53,218,206,210,
+ 86,107,133,243,123, 15,209,118, 61,170,221,206,236,207, 57, 71,219,214,248,222,247,126,128,205,118,133,229,124, 97,242,219, 25,
+199,111,126,255,183,208,171, 30,159,127,241, 37,218,110,135,166,239, 80,239, 54,216,109,183,104,154, 29,218,166,195,111,255,206,
+239,227,209,227,199,216,108,183,184,122,251, 6, 85, 85,227,226,254, 61, 44, 23, 75,212, 85, 11, 70, 64, 83, 27, 24,188,151, 29,
+170,174,198,209,241, 41,148, 52,175,165,170, 42, 8, 97, 76,136,156,102, 93, 67,163,239,122,204,102, 51,251,124, 91, 52, 39, 51,
+166, 53,206, 35, 92,218,124,119,173, 53,114,193,130, 68, 63, 51,197,182,109,135,178, 44,237,231,105,191, 87,143,223,215,174,113,
+140,217,227,206,179,129, 89,249,163,147,220,101,153, 93, 87,129,112,124,114,134,219,213, 53,180,148,113,200, 8,189, 7, 59, 94,
+239,153, 7,205, 1,250, 30,251,243, 17, 86, 31, 89,186,134, 5, 61,130,207, 39,166,243,177,246,220,253, 28,158, 20,127, 54, 65,
+200,139,147,211,166,134,214, 17, 73,155,176,119,176,221, 91,204,105,191,231,123, 52, 88, 18,131, 72,195, 86, 34, 95,220,176,227,
+208,169,101,235,120, 63, 30, 90,172,142,100, 78, 58, 14,176, 8,171,230,190,226,171,239, 40,200, 49, 35, 61,230,201,208,132,109,
+105,104,211, 26, 27,201,232,201,239,225,138,125,200,246,189, 11, 81, 72, 61,204,125,154, 89,224, 2, 27, 38,162,249, 46, 57, 72,
+245,146,189,244, 25,230,195,141,100,113, 81, 13, 76, 70,144,228, 12,187,156,244,116,159, 30,237, 83,131,244, 45, 47, 56, 39, 54,
+ 72,144,166,236,115, 39, 99,101, 17, 9, 27,117,226, 26,231, 30,201, 65, 77,162, 67, 15, 64,131, 48,120,219,248,244,137, 50, 95,
+111,238,135,246,211,151,135,197, 96,223,248, 65, 97, 68, 48,109,106,247,185, 97, 14, 64, 64, 12,148,210,100,171,103,150, 69, 44,
+149, 49,106,209, 42,248,126,118, 90, 80, 50, 54,161,100,100,233,220, 52,172, 66, 34, 11, 90,199, 4,215,202,194,160,214,240,135,
+ 52,118,187, 14, 93,219, 89,251,207, 65,219,238, 38,127,223,105, 7,166, 63, 67, 49, 54, 86,151, 94,142,228, 32,103, 11,155,171,
+ 32, 11,222,175,169, 2,254,129, 39,151,185,105,196, 50,200, 41, 32,200,133, 82, 64, 66, 28,233, 26,217,130,234,152,180,170,149,
+ 49,137,145,210,172, 51,180,210, 94,145, 1,140,217,204,142, 63,161,164,180,199,173,194,172, 40, 80, 91, 50, 27,179,104,206,160,
+188,224,246, 25, 37,143,136,132,107,153,112,154,242, 41,103,156, 35,207, 11,116, 93, 7,173,153,191, 79,215,111, 94, 91, 4,128,
+161, 44,230,168,118, 59,124,243, 59,191,137,162,204, 48, 43, 74, 92,220,123,128, 34, 47,192, 4,199,235,203,183,120,249,242, 37,
+242, 34,199, 98,126, 15,203,165,196,205,245, 21, 62,254,248, 41, 62,251,252, 87,184,119,112, 12, 46, 50,252,236, 47,255, 28,219,
+237, 22, 93,111,246,213,155,245, 10, 34, 19,248,198, 55,190,137,175,191,254, 26, 39,231,103,120,240,232, 3,180, 77,135,183,151,
+ 47,176,190,189, 69,150,103,120,254,226, 57,230,101, 1,193, 5,142, 14, 15, 33,123,105,178, 8,200, 64,235,235,205, 6,139,249,
+124,136, 5,214,176,110,115,141,109,100,249,128,204,233, 62, 56,123, 8, 74,153, 85, 68,223,247,254, 79,119, 13,184,111, 20,220,
+253,102,126,104,112, 28, 5,179,127,215, 54,253,142, 44, 26,210, 66, 8,129,188, 40,204,127,103, 57, 30,124,240, 24,207,190,248,
+220,112,128,180,122,111,250, 59,233,169,157,240,190, 64,150,113, 40, 86, 84,204,163,103,114,120,111, 82, 32,179,220, 71,134, 35,
+ 63,157,167,231,247, 29, 25,231, 33,185,120, 79, 90,232, 20,146, 60,165, 32, 11,255,190, 15,143,190,155, 88, 56,254, 90,126,112,
+114,246,163,125,139,250,168,147,160,233,253, 56, 37,209,164,239, 5,195, 51, 54,250,218,187, 38,114, 80, 40, 55,160, 36,198, 78,
+ 71, 12,207,240,202, 78,105,207,199, 13, 65, 8,111, 82,162, 19, 31,175,206,167,225,122, 54, 49,237,107, 11,119,199,229, 44,108,
+160, 28,148,163, 45,119,137,184,241,107, 31,116,199, 49,183, 64,143, 58, 73,211, 13, 79,197,112,166,242,165,148,163,224,237,115,
+199,145, 71, 49,249, 45, 40,102, 58,153,204,185, 69, 14, 20,198, 46,127,142,119,170,105,108,240, 75, 73, 67,226,140, 94,210, 76,
+128,112,251, 43,172, 7,128, 6,192, 44,147, 88, 74,233, 39,117, 36,114,150,208, 64,197,229, 95,187,143, 41,169,145,101, 57,148,
+150,168,106,227, 86,102,178,171, 3,203, 88,206,193, 4, 55,144,116, 48,185,147, 37, 37,121,163,158,128,239, 17,146,208,220, 1,
+231, 34, 65, 59,169,176,221,236, 76,193,179,254, 0,140, 49,100, 34, 3,103,194, 76, 75,218,152,211,184,239,193, 2, 23,192, 40,
+233, 45, 40, 96, 41, 65, 52,181,188, 13,189,211,245, 8, 62, 31,154, 29,223,232, 37,154,220,112,138,247, 7,154, 50,155, 3,165,
+ 6,252,221,249,178, 59,167, 44, 21,154, 42, 57,242, 23,116,236, 38, 72,132,163,147, 19, 60,122,242, 20, 89, 49,195,205,205,181,
+189, 62, 58,146,247, 21,249, 12, 89, 81,160,237, 91,211, 12, 6,102, 65,128, 49, 20,234,186, 14, 34,203,144, 89,230, 63,231,194,
+ 79,161,154, 52,202,249, 12, 25, 23,129,172, 75,130, 50,129,243,139, 11,156,157,156,226,230,205, 43,220,127,244, 33, 94,189,124,
+142, 47,190,252, 28,143, 30,125,132,175,190,250, 12,235,219, 91,220,187,255, 16,207,159,127,141,237,250, 22,121, 89,224,234,234,
+ 45,154,122,135, 44,203,240,235,103, 95, 98,187, 89,163, 15, 60, 29,148, 86,232,186, 14,219,205, 26,178,239, 81, 87, 53, 46, 95,
+189,196,229,171, 23,150, 79,166,113,123,125,131,197,204,104,217,133,200, 48,155,205, 48,159,207, 61,138,194, 5,135,224, 2,109,
+215, 34, 19,153,247,188, 80,106,104, 62,157,179,164,227,224,176,196,162,212,192,238,230,138, 51,206, 34,215,198,212,121,145, 72,
+ 39,123,118,242,153,235,174,129,224, 54,160, 8, 68,224, 34,179,251,245, 5,186,174, 71,211,212,239, 62,255,157, 10, 78,239, 35,
+209,209, 59,164,106,152,158,208, 39, 72, 92, 97,198,196,168,206, 36, 38,101, 70,119,206,162,235, 50,174, 33,137,230,156, 38,164,
+206,137, 68,119,114,218,102,239, 95,208,211,169, 60, 93, 51,123,230,124,242, 51,162,162,126,215,120,143, 61, 5, 29,184,195, 59,
+102,130,252, 22,238,201,177,143,161, 27, 22,105, 95,164, 88, 20,140,146,238,205,211,194, 27, 75,125,246,253, 38, 58,217,161,167,
+ 48, 75,156,101,205, 34, 79,238, 97,178, 15,175,155,246,140,113,251,250,248, 64,120, 34, 29,239,112,152,213,152, 7, 75,208, 96,
+229, 49, 38, 73, 80, 48,169,132,111,190,208, 98, 55,218,243,164,247,102,116,125,199, 16, 17, 75,100, 78,161,225, 15, 23,194, 55,
+100, 44,232,114, 83,199, 37,178,182,161, 58, 48,141,160,132,232, 65,119, 49, 56, 99,140,223,147,134,156,247, 57,207, 50, 20,121,
+110, 52,236,153, 48, 76, 97,123, 15, 60,196, 62, 97, 23,107,164, 94,204, 70, 93,114,212, 77,141,174,239, 12,137, 74,193,203,203,
+136, 8,228, 52,218,158,155, 16,134,182,132, 59, 74, 68,211,163,119,244,183, 81,186,142, 99,177,221, 25,249,154, 84, 50, 50, 61,
+202,178,204,223, 47,198,200,203,250, 40, 49,124, 97,129, 3,156,151,209,241,216, 97,205,255,190, 9, 91, 61,154,116,162, 24,206,
+187, 57, 45, 14,249,136,118,241,218,132,207,132, 16,121, 8,229,115,139, 84,132,150,181,240,251,246, 36,201,143,140, 15, 57, 0,
+220, 92,189, 49,240,187,178, 48,177,221,206, 43,109,216,226, 69, 81, 64, 41,105,160,228, 96,101,230,124,210, 25, 99, 40,139, 2,
+ 74, 25,109,183, 6, 48,159,207, 33, 56,199,225,209, 41, 46,238, 61,196,118,179,134,146, 18,156, 51,100, 89,137,111,127,251, 55,
+241,221,239,124, 15,191,243,195,223,134,132,198,243, 23, 47,113,120,124, 2, 45, 21,170,166, 70,145,151, 56, 58, 57,193,179,175,
+190, 68,211, 52,184,184,247, 8,125,223, 99,117,115, 13,165, 20,170,170,178,247,201, 76,204, 89,102, 34, 87,101,111,136,106, 82,
+ 41,131,204,200, 14,121, 38, 80,206,102,104,234, 6, 74,105,156,159, 95, 0, 96,104,154, 26, 77, 91,163,174,107,228,121,142,195,
+195, 67, 75, 90, 52, 83,178, 16,194,175,231, 66, 25,229, 32,107, 51,207, 84,102,159,215, 20,165, 52, 83,187,142,252, 62,220,179,
+ 25,106,217, 29,239,103,112,153, 51,223,103,240,252, 7, 56, 23, 38, 40,199,154,102, 49, 34,200,190,199,241,201, 41,214, 55, 55,
+145,137,210, 94,197,147,222, 83, 35,222,123,135, 78, 19, 75, 94,187,203, 35,101,207, 97,134,208,213,141,238,144,190, 41,119,102,
+167,239,151, 9, 3,176, 17, 73, 46,145,168, 17, 38, 6,200,116,103,158,202,173, 39,180,235,123,213, 43, 83,255,178,152, 4, 76,
+ 68, 16, 81,184,202,158, 27, 17,122,174,179, 4,138,165, 68, 78,133, 64, 78, 52,154, 14,247, 65, 42,251, 18,211,136, 38,183,116,
+174,131, 28, 92,188,198, 5,123,122, 45, 67, 73,114, 14, 75,215,192, 73,177,199,176,135,178, 81,164, 20,165,102, 13, 18, 20,231,
+149,174,153,221,135,135, 97, 44, 86,162, 4, 2, 36, 20,200, 78,157,222,183,204,198, 90,105, 70, 17, 34, 98,136, 51,218, 79, 61,
+ 67,174,188,158, 76,150, 75,119,233, 20,202, 69, 44, 12,158, 58,173,165, 7,124,104,132,162,137, 34,146,156,146, 50,122,160, 20,
+ 57,127,248,129,152, 5, 31, 56, 50,193,214,156,224, 81, 64, 15,238,114,148,192,114,166,139,101,126,106,229,156, 3, 82, 66, 56,
+ 7, 44,198,192, 68, 6,146,202,222, 27, 62, 92,150,132,176, 23,122,223, 19, 51, 41, 96,142,136,228,253,225, 45, 91, 24, 48, 19,
+ 49,131, 49,166, 97, 19,207,100, 40,173, 35, 11,111, 83, 72, 46,115, 83, 44, 49,180,178, 31,228,137,246, 23,245,218,107, 27,228,
+163,149,130,114,175,209, 78,252, 74,107,240,208,224,201, 91,219, 14,209,183,238,218,132,192,103,104, 36,163,148,138,248, 42, 10,
+227,213, 76,186,194, 24,120,108,195,186,198,233,215,157,219, 30, 33, 14,212,240,193, 47, 62, 10,213,192,235,176,107, 22,218,179,
+ 79, 19,156,225,230,250, 45,170,202,216,161, 54,114, 55,152,199,216,139, 41,161,193, 69,102,138,157, 53, 3, 50, 81,172, 6,246,
+ 55, 90,238,194,174,188,128, 76,100,200,139, 18,189,214, 88, 28, 28,224,252,222, 35, 92,189,126, 5, 34,142,229,193, 1,154,106,
+135,243,139, 11,124,255, 59,223,197,195,135, 31,224,245,245, 37,126,250, 87, 63,195,217,233, 25,126,254,151, 63,193,253, 7, 15,
+145,151, 37, 62,253,197,207, 33,242, 18,128,194,147,167, 31,227,179, 79,127,137,140, 11, 44,151, 75,116, 93,139,123,247, 30, 64,
+ 74,141,217, 44,199,183,190,243, 93, 84, 85,141,215,151,175, 64, 0, 46, 95,191,134,148, 61,170,170,198,237,141,217,181, 83,219,
+ 34, 19, 70,119,127,187, 90, 65, 43,133,197,124,134,237,174, 66,223,118,200,139, 18,162, 44, 49, 91, 46,145,229, 57,218,186, 70,
+ 85,213,158, 55,225,154,105, 97, 27,193,182,109, 33,180,225, 24,212, 93,143, 69, 89, 64,246,157,157,168,165, 55, 8, 50, 43, 33,
+229,215, 20,206,134, 90, 74, 71,130,139,207, 89,135,220, 56,158,138,227, 84, 24, 93,188, 68,193, 51,144, 86,208, 82, 67,228, 51,
+116,125,135, 71, 31, 62,198,151,159,127,102, 48, 26,139, 8, 48, 61, 78,114, 11,159, 51,114,174,152,239,187, 63, 31,229,157, 19,
+ 64,189, 39,232,133,114,181,247,147,170,185, 9, 29, 19,239,113,242,211,178, 14, 73,194,152,150,169,209,132,207,187, 86, 99, 15,
+247,187, 88,239,239, 34,130,135, 69, 52,230,167,197,239,105,177,111, 15,128, 4,178, 11,127,213,140, 49, 79, 0, 0, 32, 0, 73,
+ 68, 65, 84,113,186, 75, 79, 62,185,248, 72, 10,255, 29,251,146,184,149,208,251,218,129, 61, 63,134,238,182, 4, 30,117,123, 58,
+136, 66,213,145,139, 82,168,115,245, 69,219, 23, 43, 4, 50,144, 32,157,206,193, 52, 92,128,217, 83, 73,133,147, 20, 17, 4, 19,
+144, 48,222,247, 44, 96,201,187,106,230, 33, 79,101,205, 88,216,224, 86,228,244,189,122,106,250, 66,204,126,247,226,186,192,249,
+ 73, 39, 23, 45,204, 68,143, 82,236, 16, 55, 7,209,254,116,194,119,219, 79,107, 73,118,249, 36,114,147,236,109,223,165,110,117,
+150,177, 74,107,200,214, 28, 88, 93,223,225, 48, 59,180, 5,203,132,185,104, 57,200,177,252, 33, 24,144, 58,221, 84,220,219, 34,
+221,182,173, 47, 84,209,253,181, 47,189,200,115, 52,117, 19,144, 48,105,148,167,156, 50,103,125,247,239,174,171,225, 17,163,109,
+141,140,209, 73,176,132,103,236, 51,111,166,226,200,164,238,107,133, 83, 63,104, 13, 30,216, 15,179,137,195, 73, 77,216,192, 14,
+235,160,241,231, 18, 38, 66,146, 38, 50,211,149, 77,146, 35,198,160,251,126, 72, 62,211,220,239,210,157,126,220,203,214,240,119,
+249, 71, 27,217,153, 77, 97,156,149, 37,250,166, 49,251, 99, 43, 33,244, 36, 69,206, 44, 81, 43, 67, 39,181, 85, 31,152,255,159,
+231, 57,202,178,196,106,181,194,114,121, 96, 36, 99, 82,225,248,232, 16,121, 94, 96,179,190,193,174,217,225,163,167, 79,113,249,
+234, 5, 30,125,240,109,124,242,141, 79,144,207, 75,236,154, 26,109,221,131,115,129, 47,190,250, 12,139,131, 67,172,119, 91,108,
+ 95,189,196, 71, 79,191,137, 87, 47,159,161,239, 52, 94, 60,123,134, 15, 31,127,140,106,187, 69, 91, 87,248,214,183,190,131,235,
+171, 55,184,184,120,136,162, 44,240,239,255,237, 31, 97,187,219,130, 52,179,196, 75,137,194, 58,192, 29, 44, 14,160,230,166, 25,
+187,185,189, 70,150, 27,221,253,205,122,141,182,169,204,107,206, 74,236,182, 27,244, 74,161, 40, 11, 0,240,198, 59, 93,103,204,
+107,220, 61,170,235, 26,140,115, 20, 69, 1,228, 28,155,205, 6, 26, 64,219,181,166,216,106, 13, 97, 17, 16, 35,235,211,201,116,
+201, 2,104, 61, 14,163,242,145,211,100, 72,162,158,228,169, 92,234,160,177, 85,102,172, 48,141,129,146, 0, 24,202,217, 18,167,
+103, 23,184,122,123, 9,130, 10,220, 49,105,130, 83,165,173, 19, 38,253,221,200,112,233,122,208,187, 94, 82, 84,240,217,132, 57,
+217,180, 51, 92,186, 63, 31,199,163, 82, 66,146,187, 75,162, 54, 34, 98,179,233,143,223, 41,247,157, 74, 77, 13,148, 4,163,194,
+174,227, 36, 84, 34, 74,243,212,199,209,118, 72,224,219,144,128, 20,217,173,141, 71,230,201,137,112,242,162,131, 38,166,237,125,
+250,120, 29,252, 88,154, 32, 96, 83, 80,140,105, 4,215, 15,147, 56, 2,137, 3,162,239, 57,192,218,129,101, 43,120,240, 43, 42,
+251, 76, 49, 59,177,194, 23,251, 65,175,109, 59, 64, 75, 56,209, 54,247,216,115, 5,172,252, 68, 5, 41, 98, 8,152,241,196, 45,
+ 89,207, 78,133, 74,171, 36, 61,111,252,208, 58,210, 80, 88, 52, 21, 27, 18,212,248, 68, 10,151,198,216, 19,223,241, 24, 28,156,
+ 22,154,123, 36, 29, 79,140, 30,220,209,208, 77,253,195,172,243,156,210,241,155,140,108,222,179,249,156,216, 72,200,201,189,164,
+ 37,161,229, 89,134, 94, 3,157,108,172, 4,141, 71,186,108, 55,117,112, 33,192,243, 18, 77,183, 53,250,240,228,160, 73,205,127,
+138, 60, 71, 93, 85, 65, 72,143,131,189,245, 52,143,196,198,147,107,109,140,106,204,202, 6,168, 26, 9,169, 53, 58, 27,161, 41,
+ 4,183,123, 84, 97,139,170,246,208, 42,231,220, 71,164,166, 80,161,135,231, 83,216, 59,129,186,157,158, 91, 39,239,181, 80,249,
+ 48, 32, 45,241,212,228,139,121, 64,188,235,165,178,150, 90,214,230,216, 60,145,131, 73, 13,140, 87,128,180,164, 61,103, 98, 35,
+236,245,239,180, 33, 66,154, 9,130,199,206,149,154,176, 91,111,113,120,120,128, 89,177, 4,192,193,136, 27, 52,139,180,157, 36,
+201,172, 64,236, 61, 40,139, 18,125,111, 12, 87,242,178,128,182,145,164, 90,195,232,167,139, 12,154, 8,101, 86,128, 49,142, 34,
+ 47,176,217,118,248,228,147,111,227,230,230, 6, 31,124,252, 9, 46, 46, 30, 96,219,180,144,175,223, 96, 87,125,133, 55,151,175,
+209, 52, 53, 22,243, 37,174,174,174, 0, 45,241,228,201,199,248,244, 87,191,194,201,241, 49,116,217, 67,105,133,235,171,107,204,
+115,142, 63,252,195, 63, 68,175,129,229,209, 33,174,175,175, 33, 50,134, 31,254,240,119, 33,149,198,122,187, 70, 91, 55,120,249,
+226,107,188,189,124,137,251, 15,159, 64,100, 2,178,107,240,242,197, 11,204,231,115, 20, 69, 97,188,230,149,198,110,183, 69, 81,
+228,232,123,227, 34,135,106, 7, 82, 10, 93,215,162, 44, 75, 16, 49,148,165, 97,250, 23, 69,129,166,105, 7,226, 27, 8, 26, 28,
+179,249, 33,170,106, 13,169, 20, 4, 35, 59,133, 19,102,179,210, 6,215,192, 62, 59,202,163, 85,240,247, 80, 38, 67,151, 26,189,
+ 55,220,255, 51, 14,121, 38,201,173,105, 26, 20, 69,129,190,169,144,149, 37,218,182,194,253,135, 15,177,219,110,208,212, 59, 67,
+112, 37,107,150, 21, 78,146,161,133,230,251,254,163,156,213,182,134,182,175,215,215, 88, 45,246, 15,136,137, 82, 75, 17,139,216,
+ 77, 41,172, 31,161,197,228, 56,243,137,234,231,174,233,156,146, 36, 82, 96,111, 24, 11,222,131, 16, 24, 21,122, 54, 85, 83, 3,
+ 11,241,192,176, 70, 68,211, 82, 64, 40,162,233, 48,240,161,128, 0,163, 68,180,253,123, 20,237,191,134,209,187,139,245, 93,187,
+ 21, 31,247,137,105,166,123,186, 23, 15,247,236,161, 33, 76, 92,204, 7, 75, 80, 15, 63, 59,198, 63,198, 70, 41,174,120, 18, 89,
+243, 13, 23,134, 16,144,216,164,223, 95,179,129,113, 79,206,232, 69, 15, 62,240,140, 44,115,116,216,119,133,187,121, 36, 62,247,
+ 44,201,188, 14,187,232,176, 33, 11, 93,192, 34,147,152,160, 8,176, 64,110,165,147,189,105,154, 45,235, 24,210, 33, 33, 76, 79,
+ 76,118,233, 4, 62,154,198,131,105,157,238, 92,176, 99, 52, 97,102,153, 8,224, 67,211, 24, 9, 46,192,114,160,107, 13, 35, 24,
+154, 91,242, 96,252,124, 25,226,212, 96,192, 81,219,180, 44,247,175,148,210, 67,149, 3,153, 42,145, 36,178, 97,215,155,190, 47,
+132,117,166, 51, 77,132,217,135, 74,197, 12,180,106,179,174, 89,162, 55,215,208, 17,107,219,175,161, 70,207,168,246,134, 32, 58,
+ 36,190,233, 33, 89, 43, 92,203,176,224,153,149,110,154, 14,166,116, 4,178, 55, 55, 93,171,132, 60,231, 53,236,246,181, 43,255,
+ 26,116,148,142, 16, 21,128,224,217,116, 44,106,195,186,222,127, 95,165,146,144,189, 68, 49,159, 97,189,222, 68, 33, 67, 14, 9,
+235,237,228,158, 9,195,159,224,214,217,207,216,204,154, 67,190,218,109,113,120,122, 6,165,140, 49,205,209,209,153,221,111,119,
+ 88, 46, 15,241,209,147,167, 56, 62, 93,163,235,141,204,235,211, 95,126,142,155,171, 27,220,127,112, 31,111,175,175,176,217,220,
+ 58, 33, 8,126,243,251,255, 57,222, 94,189,197,227,199, 31,225,217,175,191, 64,223,213, 88, 46, 15,113,239,252, 12,143, 63,126,
+138, 95,254,234, 51,172,111,111,176, 94,173,240,141,223,248, 54, 62,120,252, 20,255,254,223,253, 27,236,182, 43, 72,169, 81, 55,
+ 53, 4, 19, 56, 57,191,103,147,214,182,144, 74,225,225, 7,143,113,115,125,141,203,203, 55,200,139, 28,167,167,103, 88,109,214,
+200,139, 25,182,187,107, 64,183, 56, 56, 60,128,148, 6, 21,105,154, 54,178,253,237,123,133,197,124,129,186,169,131, 24, 92, 83,
+136,235,202, 54,226,202,144, 71,165,148,102,231, 31,165, 59, 18,122,203,208,119,207,184,121,134, 28,121,211, 76,226,206, 2,214,
+105,217,221, 51,104, 66,158,164, 47,128,189,141,106,133,214, 80,170, 67,215,103,120,244,209,199,248,226,211, 95, 66,247,157, 95,
+ 99,106,167, 20,121,143,120,183,105, 13,122,112,222,145,158, 38, 60, 79, 21,244,119, 16,239, 48, 49,133, 19,139, 17, 77, 29, 22,
+103,218, 3,161,211,120,194,158,246, 92,121,127, 6,251,212, 36, 79, 97, 78,185,158,102,214, 67, 3,252,240,244,252, 71,161,230,
+219, 27,139,220, 49,121,165,147,202, 84, 64, 75,234, 22,151,222,130,129,160, 65,193,159, 52, 42,208,161,219, 82,202, 64, 15, 9,
+110, 41, 65,110, 26,206, 97, 35, 54,101,114,201, 2,216,214, 62, 72,204,146,150,136, 69,102, 32,196, 24, 52, 99,150,124, 73,193,
+ 3, 96, 11, 71,152,101,231,246,145,142,140,226, 92,230, 8, 67,204,228,196, 4, 78,201,132,229, 93,186,130,195, 92,133, 26,227,
+196,139,156, 5,206, 96,169,226, 32,109, 14,116,224,165,237,165,124,193,228, 22,113, 37,180,158, 76,200, 75,163,110,217,158, 28,
+251,161, 8, 12,201,194, 58,105, 96,117,248, 6,177, 79,178, 97, 66,231, 38,220,162, 40, 81,100, 5,178, 44, 3, 23, 2, 77,219,
+153,206,218, 19, 87,116, 68,148, 51, 83, 48, 60, 51,189, 11,224,119,165, 52,100,111,139,153,141, 51, 92, 28, 44,209,212,181,217,
+243, 51, 22,121, 14,184,103,128, 5,239, 21,103,244, 3, 39,129, 4,208,245, 10, 85,211, 66,217,245, 14, 23,166,225, 16,118,231,
+ 25,133,208,164,241,194, 4,112,102,208, 33,199,110, 54, 58,254,144,140, 55,200,233,134,208,142, 97, 31,238, 44,136,145, 72,238,
+194,132,183,176, 32,179,196, 88,200,199,112,170, 4,161, 97,166,248,249, 68, 56, 70,241,234, 39, 81, 32, 24,238, 66,208,160, 57,
+ 18,165,189,195,173,236,193,109,152,137,236,100,188,246, 2,176, 88, 46,176, 56, 56, 52, 40,136,205, 3, 31,236,169, 9,170,239,
+160, 52, 48,155,205, 33, 50,225, 11, 29, 49, 32,159,205,241,228,201, 83, 60,124,248, 1,218,182,198,102,181,194, 23,159,127,138,
+186,222,161,218,237,176, 94,175, 80,111, 87, 56,191,255, 16,213,118,135,255,230,191,253,151,120,254,252, 5,158,125,245, 43,180,
+157,196,201,201, 25,170,106, 7, 48,142,217,236, 0,175, 94,190,192,229,171, 95,227,224,224, 16, 15, 63,124, 2,158,113,124,254,
+217,167,184,186,124,133,170,110,209,182, 29,250,182,133,108, 77, 65,222,236,118, 88, 93, 95,162,218, 85,104,219, 22, 93,215, 66,
+ 8, 35,183,219,238, 54, 96, 92,160,110, 27,156,158, 28,163,222,109, 49,155,205,208,117, 18,125, 47,189, 51, 28, 99, 12, 76, 8,
+212,117, 13, 64,121,191, 6,231, 30,103,130,119,200, 64,237,106, 96, 64, 25,115, 26,147,182,232,146,216,204,219, 87, 97, 58, 15,
+139, 70, 43, 79,135, 84, 57,210,156,121, 59,235,200, 74, 91, 8,142, 76,100,232,101,143,114, 62, 7, 35,142,237,102, 29, 16,100,
+222,175,152,239,133,221,157,165, 43, 11,135, 50, 30, 39,153,221, 81,208,149,149, 67,234,119,144,222, 88,164,102, 97,254, 64, 14,
+ 25,235,227,159,133,145,133,242,144,187,129,253,186,114, 26, 7,184,120,230,254,132,251, 94, 88,248,137,238,182,139, 21,225, 27,
+ 80,167, 4,163,228,239,211, 68, 3,120,178, 14, 38,164, 77,123,181, 13, 9,227, 60,157, 52, 99,143, 93,218,243, 61, 18, 82, 3,
+197, 46, 87,225, 36,158,118,119,131,246,151, 70,123,200, 48, 29, 77, 59, 36, 93,141, 39, 18, 29, 26,224, 4,172,201,240,230,144,
+ 66,160,125,215,158, 73,239, 39,126,198, 34,219, 84, 55, 5, 15, 59, 44,150, 40, 63,130,107,100, 39,150,208, 11,221,201,139, 66,
+195,144,180, 0,187, 98, 70,193, 78,152, 7, 19,150,147, 39, 69,211,126,240,185,225,115,146,134,190,224, 61,228,141, 78, 91, 61,
+230,103,198,126,225,227,129, 88,163,239,173, 68,172,235,112,126,122,142,182,235,144, 9,142,114, 86,160,171, 91,223, 40, 17,153,
+130,230, 34, 83, 25, 49, 27, 30,162, 7,148, 73,202,100,213, 52,152,239, 48, 62,164,230,141,237,102,181,159,172, 29,178,213, 75,
+105,118,208,118, 53, 67, 32, 84,117,107,137,126,106, 72,229,179, 80,117, 56, 37,167, 13, 25,119,114, 70,144,113,224,115,141,155,
+245, 22,119,207,137,187,135,142, 80,151,250,220,147,115, 38,180,247,197, 21, 3,173,116, 76,254, 9,137,119, 1,119, 34, 92,207,
+184,132, 58,101,237, 86,195,105,199,209, 54, 34,178,158,189,199, 78,191,110,244,226, 20, 92,103,219, 68,218, 70,171,239, 58,211,
+176, 53,173, 13,138,209,126,245, 35, 4,183,238,108,218,114, 35,204, 78,122,179,222,224,224,240, 0,175,111,111,209,182, 45,142,
+ 79,207, 80,148, 37,178, 44,195,172, 92,128,103, 57, 30,220,127,132,229,242, 0,159,127,241, 57, 78, 78,142,240,252,217, 87, 88,
+175,111,177,221,110,209,214,181,105,214, 5, 71, 85,213,134,124,215, 54,168,234, 45,186, 94,225,224, 56,199,151, 95,125,142,167,
+ 31,125,140,245,118,141,103,207, 62,195,193,108,129, 31,254,238,239,227,203,207,126,133, 79,127,249, 11,228, 57,199, 71, 79, 62,
+194, 15,254,187,127,142,203,171, 27, 60,123,254, 28,111, 95,191,196,213,155,215, 32,198, 49, 43, 50,148,121,134,203,203, 87,224,
+125,142,217,108,142,237,118,131,186, 94, 97,177, 88, 32, 43, 75,244,125,143,174,235,205, 62,127,189,133, 16, 28,189,148, 40,242,
+194, 56,194,161,195,188, 44,177, 56, 88,162,109, 91,212, 85,133,121, 89,154,169,219, 54,111, 89,158,163,148,115,244,109, 13,217,
+ 53, 16, 25,247,193, 48, 6, 98,143,195,166, 6, 30,145,178, 82, 57,237, 3,122,194, 65, 73,135, 13,171,125, 34, 6,116, 72, 24,
+ 20,165,105, 13,145,145,128,182,174,112,126,113,129,221,118,131,205,234,202,191,147,245,123,144, 45, 70, 5, 93,177,164,234, 7,
+ 77,130,166,233, 61,117,146,121, 30, 84,138, 9,171,111,154,248,185, 20,237,178, 71,217,230,216, 3,197, 7,251,115, 29, 16,185,
+167, 19, 65,131,172,139, 4,174,159, 84,157, 77,145,229,244,126,146,157, 24, 77, 79, 83,112,251,158,105,125,116, 28,223,105,190,
+ 79,239,177,114,213,241, 65, 49, 42,248,227,221,120,184, 55,119,255, 63,252, 90, 31, 41, 59, 97, 30,147,166,173,133,236,119,193,
+ 5, 56,152,103,238,146, 32,111,206, 48,116, 77,131,140,204, 28,148,230, 86, 49,123, 88, 17,105,104, 62, 28, 80,238, 48, 84, 42,
+112,111,211,193,193, 14,179, 63,100, 68, 32, 59, 29,133,106,113,157,168, 4,148, 53, 20,145,206,209, 73, 7, 71,176,243,140, 79,
+ 73, 81,201,122, 37,156,218, 85, 32,223, 74, 27,138, 20,137,241, 16, 62, 99, 17,131,124,239,157,143,204, 75, 2,210, 12, 5, 67,
+123, 40,197,137,210,190,134,103,180,235, 59,128, 12, 89, 78, 91, 79,237, 94, 26, 27,221, 70, 85, 0, 6,255,122,183, 38,113,215,
+ 67,106,233, 15,175,168, 89,210,209, 31,182,176, 26,185,152,212, 26, 44,244, 60, 15,174,103,188, 6,209,208,150, 59, 65, 4, 52,
+173, 68,215,246,131, 79,187, 45,136,112, 69, 59, 40,198, 81, 74,158,253, 56,201, 33, 94,117,216,131, 14, 42, 11, 36,196,198, 80,
+153, 18, 50,222,117,128,188,184,247,131, 70,162, 93, 15,155,139,148, 89,107,111, 78,184,242,136,155, 84,199,221,128,121,102, 17,
+172,180, 44, 12, 44,132, 89,155,212,117, 27,182,213,254,245,207,178, 28,139,197, 2,203,197, 1,218,182, 69,223, 73, 47,197,202,
+ 50, 97,221,246, 56,180, 38,155,212, 87, 66, 91,131,153,195,131, 3,124, 85, 87,144,125,135,227,163, 35,176,172,196,209,209, 33,
+180, 38,156,157, 26,159,246,213,122,133,195,195, 3,172, 86,183,184,185,185, 66,223,182,128,236, 76, 1,212,132,227,227, 19, 84,
+171, 91, 92,124,248, 24, 63,253,201, 95,224,205,155, 75, 20,162,192,237,205, 21,150,101,129, 23, 47,158,161,239, 58,124,240,193,
+ 19,156, 93, 92,224, 39,127,241, 31, 80,228, 5,238,221,127,128, 15, 31,126,128,167,159, 60,197,143,255,244, 79,241,226,249, 51,
+212, 85,133,147,147, 99, 48,254, 0,183, 55, 55,168,219, 22,140, 51, 92, 92, 60,192,219,183,111, 81, 87, 21,178, 76, 96, 86,150,
+216,108, 54, 88, 40,137,186,174,192,185,192,233,217, 57, 4, 23,168,155, 26, 76, 41, 91,112, 51, 48, 98,216,109,182, 88, 44,140,
+111, 60,183,201,115, 69,145, 3, 61,208,119,198, 96, 70, 73, 5,104, 9,217,183,254,172,114,190,229,161, 67, 28, 66, 78,132,134,
+ 53,235, 97,163, 20,198,208, 2,216,160, 93, 44, 88,207, 40,155,225,110, 36,162,117, 93,161, 40, 74,227,150,152, 75, 60,120,244,
+ 1,190,172,119,232,154,198, 75,112,226, 18, 67, 19,195,153, 43,216,147,159, 50, 76,252,154, 38,225,118, 36,131,165,222,155,156,
+ 54, 17,165,237, 9,200, 52, 9,151, 71,133, 53, 41,164,222,151, 93,199,179, 73, 10,167,199,142, 29, 52, 73,142,123, 39, 83, 62,
+216,177,143, 67,199, 0, 32, 78,135,223, 11,179,143,244,227,225, 93,215,119,109, 74, 82,223,245, 49,196,158,202, 8,166, 36,236,
+169,117,107,170, 83, 28, 72,110, 46, 65, 43, 14,163,143,244,131,140,121, 43,195, 48, 75, 56, 12, 4,225, 86, 2,162,148,134,150,
+ 10, 74, 26,215, 49,169,205,161,109, 50,194, 13,179,220,202, 35, 61,233,139,113,150,164,180,169,200,155,124, 50,223,218,122, 59,
+103,153,201,182,230, 66,128,229, 25,152,224,113,104, 1, 13,242, 10,231,221,237,140, 83,220,223, 83,109, 48, 33,177, 14,117, 5,
+ 9,129,161,202,132, 91,146,123, 77,238, 64,118,111,110,135, 2, 80, 96,199,250,110,181, 1,198,132,203, 64, 99,175, 39, 96, 45,
+166, 77, 68,107,200,193, 8, 85, 4,238,117,138, 76,152, 72, 79,235,101,175,116,143, 78,182,222,196,195,212, 91,211,176,116,178,
+183,188, 17,138,246,233, 9,236,228,227, 88, 41,240, 64, 15, 97,119, 55,249,134, 25,226,156,152,245,207, 48,175,119, 87,153, 29,
+191,146, 61, 24,231, 38,107, 27,132,140,241,248,103, 38, 72,145, 51,203, 33, 54,236, 66,163,108,248,224,158,177,240,153, 14,155,
+ 42, 26,163, 29, 94, 65,161, 38,226,141, 19,195,153,248,185,176, 97, 30, 28,230, 65, 39, 53,161,124, 80, 32,102, 62,135,241, 1,
+101, 11,249, 57,153, 16,118,218,211, 96, 96,224,246,223, 76, 8,240, 76, 32,207, 75, 40,237, 26, 0,242,208, 62,227, 70,181, 32,
+ 68,102,220,253, 52, 89,203,124, 66,145, 23, 40,178,220, 35, 44,151,151,151,214, 14,150,225,225,195, 71,200,178, 12,111,223,190,
+193,131,139,123,224,140,240, 87,255,233, 39,168,183, 27, 52, 77,141, 60,203, 76, 78,185,236,209,245, 18,229,193, 17,214, 87, 43,
+180,178,193,119,190,247, 3, 92,111, 46,145,137, 25, 78,239, 61, 2,207, 4,206,239, 61,192,213,213, 27,124,250, 55, 63,199,111,
+126,255,135, 56,191,247, 0,187,205, 26, 71,103,199,248,227, 31,255, 9,126,253,229, 23,216,109, 54,104,155, 6, 47,158, 63,199,
+110,183, 1, 99,192,201,209, 17, 72, 1, 47, 95,188, 48,239,239, 44, 67,211, 26, 36, 44,207, 77, 14,251,241,201, 25,202,197, 18,
+117,219, 98,181,190, 69,145,231, 38, 98, 24,129,239,132, 6, 54,171, 53,118,235,173,245,191,239,176,217,172,140,162, 70,112, 40,
+173, 81,206, 74,136, 34, 3,101,194, 36, 48, 50, 30,104,204,249, 16, 66, 68,176,132,207,129, 20,103,138,188,142,206,224,176,176,
+187, 65,100, 56,179,184,111, 54,187,174, 67,215, 52,232,186, 22,128, 70, 93,237,144,231, 57,206,239, 61,244,242,221, 81,182,184,
+ 38, 48, 48,123, 46, 82,252, 30,116,150,175,246,121, 27,158, 85,243,113,194,126,184,221, 49,219,149, 37, 66, 59,207,255, 41,226,
+105,104,173,173, 3, 51,153, 8,110, 79, 77,100,246, 20,244, 1,197, 29, 38,248,116,204,137,166,113, 26,199,176,134, 63,239,174,
+ 0, 23,208,190,243,149,130, 73,125,212,153,211,164,158, 24,137,119, 56, 35,122, 7,131, 93,223, 9,196, 18,253, 93,100,104,233,
+238,229, 93, 50,182, 52,231, 60,181, 58, 37,255,166,209, 86, 26, 49, 88,109, 38, 41, 67, 70,164, 97,204, 77,220,132,167, 52, 72,
+233,128, 96,102, 73,112, 74, 25,215, 44, 7,169,219,212, 59, 21, 76,121,110,210, 98,193,127,235, 32,242, 20, 73,212,172,251, 30,
+ 20,238,190,131, 73, 51,132,195, 93, 71, 56, 72, 61,134, 66,232,138,134, 14, 52,199,202,198,119,186, 98,226,146,195,100, 96, 36,
+ 17,122,159,135,169, 88, 33,116,173,247, 24,154,220,133,219,232,176,152, 76,124, 47, 61,129,219,185, 9,176,235, 58,228, 69,129,
+ 92,100, 88,173,111,208,182, 77,148,199,174,237, 61,210,164,193, 56, 67,215,117, 62, 6,215,235, 77,211,213, 82,112,223,153,211,
+172, 7,207,205,192, 29, 12, 92,205,220,125, 52, 10, 24,255,255,186, 78,250, 66,204,172, 30,151, 52, 89,210,151,137, 34,117, 59,
+245,144,116, 72,140,129, 41, 53,236,226, 52,130,189,249,112,221,125, 54,186,107,118, 18,126, 68, 24,176,163,177,199, 88, 38,120,
+198, 66, 40, 95, 37,235,151,208, 86,116,114, 50, 8,154, 62, 34, 35, 63, 83, 82,249,215,196,108,243, 89,150,133, 9, 81,105, 59,
+111,195,124,120,120,128,174,239, 81,237, 54,102,130, 38,101, 56, 7, 18,152,205,231,230, 30,219, 34, 39,165,196,172, 44,177,221,
+110, 0,173,113,122,118,134,237,110,235, 95,103,215,247, 88, 46,143,112,118,126,134,166,105,113,123,115,133,188,200,241,179,191,
+254, 41,222,188,121,139,213,234, 10,189,148, 56, 57, 57, 70,181,221,128, 56,199, 98,126, 96, 26,106, 33,160,168,195,245,229, 13,
+126,126,253, 23, 40,242, 5,136, 41,124,253,249,223, 66,100, 28,111,171, 6,208, 18, 39,199, 39,144,125,143,179,227, 19,124,243,
+ 27, 79,113,122,124,138,135, 15, 30, 96,121,120, 8,173, 52, 46, 95,191,192,151, 95,124,110, 86, 10, 82,162,186,185, 65,223,247,
+ 80, 74,163,218,109,144, 23, 11, 60,254,232, 35, 92, 95, 95, 35,207, 75,172,183, 43, 52, 77,133,243,179, 7,216,236, 54, 56, 61,
+ 61, 69, 93, 25, 83,164,249,108,110, 81, 51,179,122,200,243, 12, 66, 8,180,125,135,182,237,208, 84, 91,200,190,195,108,118,224,
+159, 99,206, 5,150,203, 3,108, 86, 55,126,186, 22, 66, 24, 52, 79, 15,254, 8,125,239, 86,143,189,103,203, 15,239,111,151,167,
+224,138,121, 98, 57, 77, 20,236,236,181, 47,250, 93,215,161,224, 28, 82,118,104,218, 26, 39,167,167,216,110, 86, 88,221, 92,121,
+249,240, 64,120,195, 30,107, 57,164,227,121,100,131,205,246,133,126, 77,156, 48,251, 98, 82, 93,209,101, 48,230, 51,123,225,246,
+ 41,169, 90,164,120, 99, 99,248, 28,239,142, 43,223, 59,125,239,115,150,123, 7,201, 46, 93, 17, 8,111,109,153,238,214, 19,178,
+ 22,237,149,163,237,135,217, 39,253,217,113,135,143,111, 66,164, 11,217,224,241,154, 95, 15, 32, 45,197,128, 75, 8,213, 71,250,
+234,137,125, 4,179,190,220,142, 24,161,184,182,112, 37,129, 89,157,184,178,174,111,194,102, 99, 43, 37,205, 1,109, 59,194, 24,
+ 61, 24,200, 59,112,147,142,133, 54, 89, 74, 36, 12, 67, 54,130,157,101,202,104, 15, 25,229, 96, 67,106, 88,120,144, 50,154,222,
+ 76,135,209,165,174,104,103,194,236,193,218,174, 51, 7,182,221, 7,167,214,161,161, 99, 90, 58,213,238, 43,230, 81, 44,103, 90,
+140, 71,204,247,193, 66,151, 41,237, 25,219,102,141, 70, 30,113, 96,154, 60, 52,175,148,113, 32, 83,246, 30, 54, 77,139,217,108,
+ 1,206, 5,138, 28,104,235,218, 24,100,128,160,165,185, 57, 34,207,252,148, 33,152, 48,220, 8, 74, 51,231,141, 44,171,151,131,
+ 49, 16,177, 96, 47,109,167,114, 97,239, 7, 83,204, 34, 62,158,134,234, 21, 12, 68, 26, 85,211,131,101,153,111, 50,140,131,157,
+ 0, 83, 46,122, 55,241,106, 22,102,146,119,198, 90,218, 90,123,186,142,126,144,184, 25,105, 94, 24,145,138, 52, 61, 45, 92, 11,
+ 32,137, 93, 13,117,237,193,222,219,217, 25,195, 54,120, 82, 41,179,114, 72,180,254,110,229, 19,174, 83, 66,104,223,236,235, 93,
+178, 33,139, 26, 54, 6, 99, 94,148,229,185,135,229,239, 93,220,195,118,183, 51,188, 16,255,250, 9,140, 20,160, 36,230,203, 37,
+148,234,193, 69, 14, 16,144,103, 25,180, 54,144, 60, 0,220, 59, 63,199,215, 95,127,137, 44, 47,145, 49, 1,165, 76,129,218,238,
+118, 80, 74,162,239, 59, 92,221,188,197,233,233, 57, 30, 63,126,140,215,207,191,134, 86, 10, 7,203, 57,234,202, 76,213, 77,219,
+227,240,248, 24,171,245, 53, 46, 95,190,196, 39,191,241, 93,124,249,229,175, 64, 82,225,237,229,165, 97,241,103, 11, 60,126,252,
+ 20,213,110,141,174,174,241,219, 63,248, 1,190,250,250,107, 44, 22, 7,248,233,207,126,142, 55,111, 47,241,230,213, 43,212,245,
+ 14,189, 82, 38,193,172,105,113,239,222, 57,222,188,125, 13,106,107, 28, 29,159,160,170,118,168,234, 26,159,127,250, 75,207,171,
+ 17,130, 80,150, 51,108,214, 43,180,109,135,174,105, 77,244, 42, 49,116, 74, 65, 1,232,219, 26,187,170,130,214, 10, 71,135, 71,
+ 56, 56, 58, 54,170,128,166,198,237,245, 91, 64, 43,136,124, 1, 98, 12,130,103,208, 76, 32, 43, 22,168,171, 45, 56,200,146,113,
+135, 60,117,179, 90,114,138, 25,233, 83,219,156,103,254, 62,101,146, 35,203, 25,155,228, 65,181,225,161,124,169,124,214,189,234,
+ 26,104, 33,112,255,209,135,232,219, 30, 85,181,186,187,241, 87,204, 43,132,192,100, 76,156,214, 52, 29,169,157,146,225,246,237,
+200,105,250,227, 35,233,217, 93,236,246, 59,138,253, 62,157,249, 62,118,252, 59, 33,118, 39,124,186,203,101,239,142, 29,124, 60,
+169, 71, 63, 8, 81, 39, 79,211,179,214,196, 84, 60, 61,141,239, 65,248, 71, 69,120,202,230, 48, 64,250,189, 77,231,251,144, 46,
+ 38, 47, 2, 66,158, 64,188,187,247,150,123, 32, 59,213, 13,123, 41, 73, 67, 50, 26,183, 62,200,192, 16,148, 17, 17,157,130,164,
+ 40,215, 33,167, 89,212, 97, 17,100, 65,247, 27, 22, 98, 0,224,118,210,114,218, 97, 76,216, 13,166, 58,227, 48, 3, 27, 68,128,
+205, 12,119,242, 32,199,142,238,237, 52, 46,146, 55,114, 40,149,210, 19,186,233,176,184, 15,161, 55, 52, 42,244,119,245,223,230,
+ 58,107, 12,112, 9, 18, 82,205,244,247,208, 1,201,111,187,219,224,236,244,204, 4, 76,180,198,164, 69, 81, 63,209,116,104,191,
+ 75, 52,230, 37,210,223, 23, 7,171,119, 46, 76,199, 17,223,122, 99, 72, 2, 11,195,187, 6,139, 5, 15,113,184,103, 55,215, 2,
+ 80,138, 80, 85, 13, 40,203, 64, 32,127,221,221,251, 37,108, 20, 48,106,246,200, 27,212, 24,179, 21, 22, 89,119,142, 96,170,176,
+161,242,200, 37,139,216,241, 26,113, 72,135,114,197, 58,100,189, 7, 59,126,103,139,171, 1,104, 41, 35,153,107,184,199,103,137,
+115,164, 14, 28, 20,157,221,173,231,142,104,141, 76, 8, 72,193, 81, 20, 57,186,166,131,224, 28,219,221,214, 50,183,135,181, 7,
+231, 28, 93, 91,121,254,137,200,140,215, 61, 35,134,188, 44,161,186, 6,143, 31, 62, 66,215,105,112, 38,208,181, 61,190,255, 91,
+ 63, 68,158,207,112,125,253, 6,229,108,142, 89, 81,224,245,229, 43, 92,190,126,137,223,250,173,223,198,171,151, 47,241, 87, 63,
+253, 9,182,219, 13, 22,203, 18,125,111,130,117, 24, 52,164,214, 40,139, 18,235,219, 27,204, 23, 75, 60,127,254, 21,154,106,135,
+249,108, 1,217,212, 56, 62, 58,198,193,225, 9,158,191,248, 10,130, 24,254,199,127,254, 63,224,243,207,190,192,209,225, 2,219,
+205, 6,229,108,134, 7, 15, 30, 0, 90,226,203,207, 63, 71, 83,237,160,251, 14, 93,215, 98,117,123,141,229,193, 17,164,172,113,
+115,115,227, 45,108, 37,235, 61, 25,150, 49,134,245,122,131, 44, 43,209,182, 13,164, 82, 40,138, 18, 68,132,166,174,188,229,111,
+150,113,244,173,196,205,245, 27,220,222,222,224,254,253, 7,152, 45, 15, 32,149, 68, 91,109, 33, 56,131,236, 9, 89, 94,160,181,
+ 26,114, 45, 59, 64,245,222,220,200,157,211, 74, 59, 82,156, 12,236,183,101,196,171, 9,227,162, 13, 7,197,200, 52,221,116,110,
+ 72,120, 44,202,109,151, 82,163,169, 27,204, 23, 2,154, 96,180,245,229, 28, 23, 15, 31,225,249,215, 45,250,182,241, 6, 90, 67,
+ 53,230,239, 68,113, 41,153, 12,195,130, 30,147,225,166, 84, 80,227,130,238, 36,195,250, 93,187,243, 9, 93,122, 74,106, 11,147,
+215,210, 93,249, 93, 83,246, 62,195, 26, 79,160, 99,211,159,175, 7,218,223,222, 51, 86,220, 13,117,211,158, 9, 92, 35, 12, 6,
+152, 22, 36,191, 15, 11,222, 17,212,104, 18,241, 79,109, 93,167, 60,220, 77, 61,152,248, 21, 73, 39,218, 62,237, 61,200,125,177,
+ 11,180,126, 74, 43, 48, 56,167,172,160,184,186,135,194,235,202, 13,156, 8,105,138, 30, 55, 22,114,150, 45,109,114,163,101,223,
+249, 16, 23,178,186, 97,101,161, 85, 37, 21, 32, 85,146, 19,239,220,231, 6,226,216,212,196,235,178,194, 71, 16,170,237,192,247,
+145,218, 84, 80,116,189,229, 99,160,101,119, 58,216,112, 34, 31, 18,176,104,128,234, 3, 70,254, 93, 22,163,233,235, 30, 37,247,
+ 57,184, 90, 13,118,247,202,105,103,109, 33,146,100,254, 63, 5, 36, 54, 5,109, 64, 16,123,255, 26,107, 14, 99, 52,204, 57,184,
+ 16,232,187,206, 72,159,108,209,233,186,206,134, 99,112,244, 74,161,204, 50, 84, 77,101,204,124, 44,193,145, 51, 1,201,134,104,
+ 97,195,178,239, 99,117, 7, 15,119,225, 26, 74, 27, 98, 24, 51,152, 59,132, 45,194, 77, 87, 67,146,121, 99,121,254,130, 50,175,
+ 94, 5,168,147,219,143, 59,126, 4,188,177,134,176,135,101, 32,223,180,238, 29,189, 28, 80,153, 48,101,205, 23,107, 55,189,135,
+129, 39,169,233,140,214,208,202, 16,163,140, 38, 89,121, 20, 7, 82, 66, 6,134, 61,169,202, 33,180, 12,245, 13, 93,176,138, 35,
+102,164, 67, 82,170,136,176, 76, 0,122, 59, 5, 54,149,217,187, 74,219, 24,116, 93,103, 26,204,222,252,255,147,147, 35,188,185,
+172,252,228, 88,230, 37,184, 16,230,153,145, 26,223,249,141,239,226, 63,253,199, 63,195,237,237, 53, 54,219, 45,186,174, 67,219,
+117, 40,243, 12, 26,132,186, 49,209,166, 89, 94,224,193,131, 15,241,234,229, 75,252,242,175,127,142,156, 51,100, 39,167, 56, 88,
+228, 56, 61,187,135,219,155, 21,202,249, 28,219, 93,141, 78, 73, 11,253,183,232,186, 30,164, 9,117,181, 67, 38, 56, 72, 75,204,
+ 11,142,127,246,207,254,103, 40,217, 97,125,115,141,111, 60,125,130, 77,211,225, 87, 63,255, 25,254,246,111,254, 26,117,181, 3,
+ 24,195, 98,190,128, 82, 10,245,110,139, 60,203, 48,159, 47, 32, 50,129,249,108,134, 34, 47,177, 90,223, 98,187, 89, 5,164, 69,
+ 14,173,185,141,158,237, 44,124,206,209,182, 21,170,106,103, 86, 74,202, 25, 20, 49,127, 94, 8,161,177, 90,173, 48,155,207,144,
+ 23, 37,218,109,131,205,250, 10,139, 67, 35,213, 17, 25, 67,223,105, 20,179, 25,100,223,160,235, 58, 64, 13, 43, 52,229,253, 20,
+100,196, 45, 10,157, 53,157,211,166,107, 86, 57, 23, 80,106,248,216,224,133, 33, 3, 87, 78,227, 73,223,219,213, 88,223,181, 16,
+ 34,195,242,240, 16, 39,231,231,184,124,241, 18,164, 19,165, 69,116,102,219,231, 6, 98, 76,142,219, 39,143, 5,139, 38,242, 41,
+159, 18,176, 80,118,203, 98,133,214,223,115, 58,191,115,183, 77,131,187, 91, 58, 88,186,143,167,108,118, 87,204, 83, 40,221,127,
+220, 53, 20,250,238, 80, 22,130,117,148, 27,249, 56, 99,236,185,238, 9, 5, 81, 9,165, 9,229,219,187, 89,238,251, 39,115, 29,
+252,125,144,126, 77,127,175, 32,108, 37,121,109,218,245, 97, 62,243, 89, 91, 62, 53,124, 4,234,208,214, 13,112,176,219,139,123,
+ 79,109,198,124,206,128,103, 56, 43,248,108,121, 95,124,161, 44, 36, 74, 62, 40,129, 17,179, 69, 88,123, 3, 14,109, 3, 47,188,
+ 70,223,202,230,148,210,129,205, 44, 69,211, 49, 11,109, 88, 49, 4,169, 32, 40,182,174,224,235,200,234,148,252, 52,234,254,222,
+ 75, 57,134,176, 48, 36,108,233, 0, 9,208,193, 84, 26,154,219,220,185, 23, 74,125,157,247,176, 51,195, 72, 78,114,186,101,196,
+238,108,218,122, 71, 15, 31, 26, 38, 85, 41,165,201,137,238,141, 84, 39,207, 50,236,118, 13,202,178, 64, 91, 85,158, 32,228,167,
+ 68,202,204,138, 1, 38, 9, 79,201, 62, 30, 22,148,138, 56, 10, 74,169, 97, 37,225,100,107, 35,109,126,204, 7, 48, 76,237, 12,
+219,109,227,239, 11, 11,136,118,225, 33,198, 57,247, 77,130,180,247,196,164,104,145,129, 54, 49, 40, 61,116,192, 7,225,193, 20,
+ 30,114, 1,148, 85, 76, 40,165, 38, 14, 23,248, 76,244,208,200, 72,135,210,190, 0,206,228,129,154, 33,253, 94,233,115,144, 74,
+242,204, 51,195,161,153, 9,125, 97, 68, 54,174,207,177,237, 29,116, 43,144,231, 25,154,186, 65,158, 9, 79,188,204, 24, 97, 62,
+ 43,176, 88, 30,128, 24,135,146, 29,178,236, 0,156, 11,116, 77,131,139,211, 99,252,236,103,127,137, 95, 63,123,134,174,109,140,
+252,178,235,209,182, 45,118,219, 45,136, 8,117,245,115, 48,145,225,227,143,159,226,209,227, 79,240,248,131,135,248,254,119,190,
+139,127,245,175,254,119,220,123,244, 33,254,250,167,127,129,229,179,231,216,222, 94,225,224,248, 4,229,124,105,119,215, 12,183,
+ 87,111,108,179, 5,112,145,225,155,223,252, 54, 62,124,252, 49, 24, 83,120,244,240, 1, 22,179, 25,254,205,255,253, 71,248,243,
+255,235, 95, 99,187,217, 96, 62,159,227,252,236, 12, 95,125,185,193,110,189, 66,155, 23,152,205,102,134,104,219, 75, 84,187, 29,
+ 30,158,157, 65,149,115,188,126,253, 18, 89,158,163, 40,103,104,155, 22, 78,123,208,219,194,122,255,209,135, 40,102, 75,228,156,
+176,221,110, 64,204, 40, 60,160, 21,180, 50, 38, 61,198, 46, 87,160,105,106, 51, 53,211, 9,186, 78,130,229, 51, 48,221, 98,183,
+190,193,242, 48,131,102, 5,242, 34, 67, 83, 75, 40, 50, 6, 77, 26,189, 53,112,202,172,231,131,128, 82,210, 78,223, 38,170,213,
+ 20,244,161, 81, 23, 98, 48, 15,114,198, 52,198,151,159, 5,232,169,178,107, 80,238,207,228,182,109,192, 56,247,150,178,133,224,
+ 56, 63,191,135,122, 91, 97,115,123, 59,164, 67,234, 32,236,193, 23, 87, 30, 79,215,251, 70,202,196,185,106,202,234,213,187,142,
+166,172,247,187, 10,246,132,145,204,212,116,158,202,151,211,157, 53, 33,224,230, 4,211,245,251, 76,242,251,138, 63,193, 26,249,
+ 68, 49,227,227,243,149, 31,159,223,251, 17,166, 18,189, 82, 64,158,194,161,159,162, 4,179,180, 64, 15, 13,213, 20,155, 62, 77,
+190, 9, 88,239, 44, 72,214,161,225,243,227,253, 8,139,187, 49, 10, 85, 92,195,133, 28, 62, 62,102,143,251,184, 82,219, 52,176,
+ 96, 94, 86,169, 23,171,142,175, 67, 24,177,154, 86, 41,178, 97, 19, 33, 23,193,147, 83, 92,209, 8,101, 81,220,101, 69,147,215,
+171,155,169,199,164, 52,153,164, 38,101,119, 98,131,163,147, 84,202,250, 75, 43, 63, 65,203,137,194, 27, 21,145,192,124, 6,123,
+136, 83, 72,166,114, 21, 76,238,251,224,117, 61, 97, 68,243,206,117,136, 14,223,200, 65, 16, 77, 32,116, 82,147,107, 31, 83,116,
+164, 54,135,147, 82, 10, 15, 31, 62, 66, 89, 20,216,108,182,144,178, 51,161, 57,125,111, 38,240,128, 20,200, 57,131,130,198,114,
+177,192,118,187, 49,159,227,145, 11,243,189,251,190, 7,115,209,157,196,160,236,231,120,162,154, 67, 47,124, 35,236, 2, 85,204,
+231,212, 77,135, 93,213,216, 70,147, 65,219, 68,182,208, 96, 40,148, 12,186,235,151,217,244, 56,206, 77,220,166, 87, 74,216, 71,
+198,145, 23,221,158,154,115,110,166,215,160,248,178, 40,185, 47,184,230,246,245, 58, 11,218,240,217, 53,164, 56,101, 15,224,216,
+151, 64, 39,103,149,224,124,224,119, 80,220,246, 71,137,120,208,129, 73, 19, 60,139,223,144, 76, 1, 33, 76,138, 89,223, 75,228,
+121,134,182, 51, 25,234,203,131, 67,124,252,209, 55,240,240,193,125,236,182, 45, 46,238, 63, 68, 57, 63,196,131, 7, 31, 66, 67,
+227,226,252, 30,126,253,229, 23,120,246,245,215,144,170,199,209,209, 41,254,224, 15,255, 41,192, 5, 56,227,216,110,215,126,250,
+ 85,125, 7,104,137,123,247,238,227,112,185,192,127,252,201,159,227,139, 47, 62,195,151,191,250, 12,245,118,139,213,234, 22,125,
+219,160,174,107, 60,184,127, 15, 31, 60,254, 6,242,124,134, 44,227,200,179, 18,197,124,129,223,253,221,223,195,247,190,255, 3,
+168,190,199,229,219,215,120,241,242, 37,126,253,226, 57, 86,171, 21,158,127,245, 21, 86, 55,215,184,186,185, 69,223,119, 88, 46,
+103,184,185,189,181,234,149,220, 48,152,179, 12,199,167,103, 16, 66,160,169,107, 28, 29, 29,225,205,155, 87, 56, 56, 60,198,253,
+135, 31,224,236,252, 28,125,175,240,193, 7, 79,112,124,122, 14,158,101,216,222, 94, 99,187, 89,227,240,248, 4, 74,219, 92,121,
+165, 81,150, 37,202,217,220,175,207, 22,139, 57,186,174,195,110,183, 69,158,103, 88, 44, 15,193,121, 6,173, 58,244,125,139,188,
+152, 67,202, 30, 34, 19,232,101, 15,206, 57,100,223,123,229, 74,145, 23,254,188, 24,206, 85, 61, 81, 32,145, 48,222,221,249,173,
+ 35, 35,174, 56, 14,155,217,105, 88, 91,243, 36,195,113, 41,102,115,100, 89,134,221,102,107,154,106,127, 38, 43,107, 42,195,108,
+254,249,184,105, 47,118,230, 0, 0, 32, 0, 73, 68, 65, 84,160,135,242, 76, 39,131, 29,140,190, 88,100, 80,182,151,233, 78,211,
+ 69,121,146,217, 78, 49,179,157, 38,165,113, 24,190, 54, 96,178,167,113,171,238,235,223,135, 0,231, 95,207, 93,145,228, 68,119,
+ 26,208, 16, 0,113,183, 44, 73, 79,236,197, 89, 96,250,159,238,115,247, 17,230,144, 72,217,210,201, 92, 79, 72,221,116,194,129,
+ 76,180,134, 44,152,186,109, 19,161,188, 29,237, 40,191, 52,112,136, 51,211, 26,172, 28,109,128, 85, 93,194,218,192,120,214,100,
+ 50,195,135,105, 87, 7, 90,121, 74,172,103,173, 58, 64,197,114, 49, 88,162,138,246, 30,200, 20, 67,163, 65, 49,102, 22, 26, 50,
+241,146,118, 87,203, 40,218,105,135,133, 74, 71,201, 89, 3, 76, 28,234,153, 67,207,240, 33, 50,123, 26, 54,119,127,134, 48,127,
+184, 95,191,171, 88,239,131,219,247, 35, 53,238,245, 5,228,134, 64, 82, 70, 52, 72, 66,152,125, 39,147, 37,227, 48, 78,158,124,
+ 85, 55, 53,206,142, 79,253, 53,146, 54,225,203,240, 4,180,103, 98, 3, 64,158,229,134,125, 78,177, 37,176, 11,190,209,182,248,
+ 73, 41,141, 81, 77,162, 8, 9,205,129,188,230,159,145,137,127,149, 26,187,186,242,211, 42,164,163, 1,186, 29, 58, 34,164,193,
+ 65,222, 44,210,191, 91,219, 84, 5, 8,193, 12, 73, 48,152,198,121, 96,254, 99,214, 62,195, 84, 45,149, 50,133, 55,177, 12,118,
+140,122, 21, 70,179, 98,216,123, 40,192, 24,191,216,148, 51,119, 47,115, 23,126, 99,191,183, 91,239, 80,112,192,142, 34,120,225,
+242,187, 1,169,180,183,112, 37, 54,208, 72,189, 38, 90, 1, 82, 42, 20,121,142,178, 88,224,232,228, 28,235,109,133, 31,255,248,
+143,209,247, 45,234,221,206,248,233, 11,129,139,123,247,240,201, 55,191,131, 79, 63,253, 37,242,140,227,201,147, 79,240,191,254,
+ 47,255, 27,254,244,207,254, 4,183,215,151, 88, 30, 28,224,164, 62,193,102,187,129,234, 58, 48,145, 65,148,115,220,187,255, 8,
+127,246, 31,254, 2,111,223,188, 2, 40,195,249,253, 7,184,189,126, 13, 45, 27,180,109, 3,165, 36, 94, 62,251, 26,191,254,250,
+107,124,255,119,126, 31,117,221, 65,245, 53,126,247,191,248, 39, 40,139, 25, 94, 62,127,134,255,231,223,253,145,181, 67,101,104,
+187, 14,139,131, 37, 46,238,157,227,205,219, 75, 72,169,208,229, 25,102,101,129,163,163, 99, 72, 37,113,114,118, 6,105, 17,185,
+231, 47,158,131,105,224,240,240, 16, 74,105, 28, 30,158,128, 51,142,219,171, 55, 88,109, 86,120,248,193, 99,104, 40,188,248,234,
+ 11, 40,199, 83,128,198,245, 27,224,248,228, 28, 25,227,104,154, 26,187,245, 26,140, 24,138, 89,137,195, 67,195,116,207,243, 12,
+125, 47,177, 94,175,209,182, 45, 78,207, 47,160,155, 28, 28, 18,245,110,133, 98,177, 0, 17, 33, 47, 74,236, 54, 43,112, 33,160,
+164, 66,223,119,232,165,176,141,174, 8, 0, 36,231,183, 31,171, 94,220,196,228, 38,244, 56,111, 92, 71, 19, 59, 15,162,169,185,
+ 49,239, 0, 3,161,239, 58,244, 93,139,229,193, 33,142,207, 78,113,249,234,229, 16,192, 4,158, 12, 78, 19,137,105, 81, 49,119,
+159,203,246,154,201,164,172,247,201, 84,181,187,224,244,119,217,192, 78, 76,208,163,105, 62, 49,177,185,203, 44,230,189,212, 66,
+ 97, 3,176, 39,128,109,152,212,207, 46,126, 52,134,181,195,238,139, 77, 18,215,210, 11,186, 47, 45, 45,242, 62, 79, 10, 62, 81,
+204,116, 79,109, 92, 7, 79,235,160,177,160,113,220,220,148,153, 12, 33,238,106, 6,199,182, 65, 42, 52, 20, 18, 88,217, 89,140,
+ 0, 80, 64, 8, 10,117,131,180, 39, 30,150, 69,177,169,102, 10, 50, 19,175,139, 6,117, 16,254, 0,237,186,159, 97,164, 77,128,
+ 21, 18, 27,183, 56, 98,118,138, 50,123,239, 34,207,189, 13,102,120,200, 70,182,176,110,106, 10,210,149,220, 10,203,147,239, 56,
+ 55,108,108,203,138,119,137, 78,105, 33, 15,125,197,195, 73,240,174,108,224,125,114,167, 73,116, 0,177,127,120,168,187, 80,161,
+245,140,142, 95,155,200,205,206, 77, 8,129,131,163, 35, 28, 31, 29,163,174,119,232,218, 22,181,181,118, 53,191, 43, 13, 54,151,
+196, 32,242, 12, 90, 41,180,117, 5, 25, 52, 42,220,146,127,250, 94, 98, 54,159,153,105,198,154,197,112,193,125,126,247,168,237,
+212,166,144,246,189, 68,175, 20, 54,187,202,120, 21, 48, 22,167, 27, 70,146,175, 9,141,120,176,103, 31, 38,128,112, 77, 69,131,
+124,104,162,137,130,101,150,247,110,141,146, 24,211,184,103,204,115, 39, 92,227,170, 48,210,250,186, 93, 58,183, 17,159,206,207,
+ 62, 37,204,122,244, 34, 60,116, 35,210,231,180,212,113,176,209, 52, 97, 60,247,239,221,199,227, 15, 62,196, 95,254,229,159,225,
+211,191,253, 20,235,245,218,186,207, 73,200,222, 52, 70,187,237, 6,171,213, 10,155,213, 45,142, 79, 79,241,223,255,139,255, 9,
+191,252,219, 95,224, 95,255,159,255, 7,110,111, 87,184,185,121, 99, 16, 14,206,161,149,196,163, 15, 63, 66, 94,148,120,125,249,
+ 2, 93, 83,227,252,222, 3,124,248,228, 9, 62,255,213,223,160,239, 42, 8,193,176, 88, 44,160,165, 4,101, 57,148, 84,216,172,
+ 87, 56, 59, 59,199, 31,252,193, 63,197,195,135, 31,226,234,234, 13,158,191,124,137,122,187,197,213,213, 21,186,174, 65,153,113,
+ 92,156,159,226,234,237,149, 9,186, 97,132,163,227, 67, 67,108, 3,176,219,109,177,186,185, 70,215,182,104,172, 67,222, 98, 62,
+195,122,181, 6, 49,130, 84, 29,174,174,174,145, 23, 37,142,142, 78,161,164, 70,223, 52, 40,102, 51,116,109,131,178,156,225,236,
+222, 3, 44, 15, 14,209,180, 53,164,236,112,122,114,129,162,156, 65,106,141,186,169, 80,215,181,231, 31,204,102, 51,195, 52,151,
+ 29,122,169, 81,148, 51,104, 34,112,221,154, 51,147,103, 22, 25,233,189,125,177,203,188,119,200,148,119, 25,180,190, 28,195,179,
+ 21, 67,216, 49, 7, 10,193,164,206,146,161, 67, 88,158,134, 24,120, 73,130,163,147, 61,242,188, 64, 81,150,104,234,218,152,210,
+ 4, 59,243,240,172, 29, 72,106,108,172, 92, 66,104,209, 28,214, 15,242,126, 32,195, 11,103, 35,237,248, 36,220,206,246, 23,244,
+200,194,245,142,175,245, 95, 71,123,154,130,125, 57,233,123,166,115,175,163, 71,152,215, 62,174,162,233, 57, 18,164,180, 81, 16,
+189, 23,179, 8,167,118,229,113,209,166,189,187,238, 81, 50,104,112,156,143, 31, 22,134,192,188, 50,114, 19, 75, 25,136, 94,135,
+237,114,194,181,246,211,122,212, 8,132, 83,188,219,167, 7, 89,231, 26, 70,174,166,130,135,151, 2, 81,164, 54, 42, 78,115,225,
+ 45, 37, 35,132,160,162,135, 94, 1, 5,153,236,103, 2,129, 67,129, 88,134, 90,247, 38,239, 27, 26, 96, 28, 4, 3, 79, 49,173,
+193,148,180,191,135,132, 82, 70,150,225, 26, 19,206, 6,189,168,187, 18, 82, 41, 64,233,192,203,153,162,104, 68, 31,186, 18,230,
+154, 35, 38,182, 56,139,213, 46, 41,198,119,217,202,190,107, 74, 7, 48,249,121,163, 68,184, 41,153, 91, 80,124, 52,145,223,149,
+ 49, 29, 79, 10,209, 58, 65,147,105,152,132, 70,181,221,162,204,114, 20, 34, 71,155,229, 16,140,161,147,195,239, 34,149,137,244,
+108,218, 14,243,217,236,255,165,236,205,154,100, 57,206, 51,205,199,221, 99,205,173,170,178,246,179, 97, 33, 22, 10, 36, 37,138,
+ 82, 83, 61,221,109, 54, 82,183,153, 76,166,190, 25,155, 95,132,127, 50, 55,115,209, 61,253, 11,166, 47,164, 54,205, 72,106, 77,
+ 55, 73,137, 20, 73,236,203, 1, 14, 78,157,218,115,139,221,221,231,194, 35, 34, 35, 50,179, 0, 17,184, 0, 80, 56,149,149, 21,
+153, 25,254, 45,239,251,188,172, 22,179,173,110,214,214, 81,184,141,223,214,247,253, 62,141, 79,246, 71,143,141,144,210,243,188,
+150, 6, 87, 21,101, 39, 74,183,198,111, 54, 19,129, 29,169,135,198,152, 53,230, 87,201,118,100,191, 22, 33,186,110,214, 90, 55,
+178, 22,178, 22,160, 53,215,179, 19, 0, 35,106, 80, 80, 3, 33,234, 22, 16, 64,187,170,104,196,110,109, 72,138, 92,103,178,219,
+ 13,190,191,214,154,200,247, 41,107,113,157, 82,170,147,231, 69,207, 97, 33, 54, 11,194,142, 16,170, 79,179,171,187,122, 1,194,
+186,231, 63,221, 63,224, 87,255,252, 75,140,245,121,227,205,239,115,115,243, 10, 93, 85, 20,101,230,108, 93, 69, 69, 69, 73, 16,
+132,120,129,199,112, 52,228,250,250, 21,127,251,183,127, 75, 24,197,172,150, 25,101, 81,146,101,247,104,173,121,247,247,126,196,
+112,111,159,187,171, 75,206, 79,159, 82,217,146, 15, 62,252, 45, 71, 7,135,172, 86, 75,108, 85,160, 61, 73, 81,148, 68, 81,200,
+106, 49,115, 25,236,202,199, 86,238,231,252,205,223,252, 53,183, 55, 87,164, 73,130, 31, 4,156, 61,121,204,242,230,146, 63,254,
+163, 31,243, 15, 63,251, 5,126, 24,243,206,123, 63,162,200, 18, 62,253,244, 19,158, 62,157, 32, 21,120, 82, 80, 84,134,100,181,
+196, 43, 2,242,188,104,119,211,216,136, 82,187, 72,221,229, 98, 78,178, 90, 80, 22, 57, 82,214, 65, 67,190, 91,185, 93,191,250,
+ 6,173, 13, 65, 24, 50, 61, 60,164,168, 10,166,211, 41,190, 31, 48,187, 87,204,231,247, 24,163, 41, 10, 67,150,101,174, 56, 49,
+184,216,218,170,192,247, 60,146,165, 38, 52, 25, 66,122,224,251,248, 97, 68, 81, 20,245,100,201,173, 62,154, 67,185, 41,250, 27,
+234,156, 27, 80,173,181, 65,221, 16,172,198,178,217,148,227,107,184,141,220,154, 14, 53,121,236,141,182, 71,121,144,103, 41,131,
+193,136,233,241, 49, 69,145, 83,212, 89,241,236, 24,181,247, 10, 86, 65,199,194, 44,119,218,213, 26,125,148,217, 56,120, 31,244,
+150,127, 87,119,254, 29,157,253,214,186,119,211,210,102,191, 67,253,142,248,214, 12,245, 93, 93,249, 38,130,125,167,140, 93, 8,
+212,193,241,217,251, 98, 43,120,125,125,160, 55, 93,118,223, 42,176,203,135, 46,218,125,202,191, 4, 32,179,213,249,201, 13,251,
+ 66,123, 83,146,125,235, 0,219,121,181, 93,185,127,183, 59,111, 5, 86, 77, 88,139, 0,148, 68,213,157,184,134, 30,152,195,118,
+199,172,221, 80, 18, 41,240,132,108,163, 75,123,239,163, 58,188,197, 19, 48,242, 20, 18, 23,125,231, 11, 24,251,134,137, 39, 81,
+214, 64,153, 19, 84, 41, 42,155,225,103, 11,188,108,137,170, 10, 84,153, 18,234,146, 88, 10, 2,235,182,250, 74, 42,119, 32, 72,
+209,238,241, 13,235,155,101, 75,190,171,111,208, 13,253, 77, 41,185, 29,210,210,138, 94,188,157,149, 98, 23,164, 34,191,197, 43,
+248, 47, 25, 25,109, 22, 3,223, 58,134, 23,162,151,248,183,235,195,108,123,117,252,250,219, 26, 21,182,242, 61,132, 20,188,241,
+218, 27,204,231, 51,172,209,100,105, 90,139,136,100, 43,156, 12,195,144, 74, 87, 4, 97,224,212,185,157, 41, 71,147,206,134, 16,
+148,165, 70,120, 46,174,211,137, 31, 59,130,197,198,166, 88,255, 89,151, 24,231, 58, 28, 37, 37,139,197,170,135, 49,126,232,122,
+117,211,216,148, 82,189,164, 67, 85,231,172,211, 89,223,244, 66, 99,100,255,253, 41,161,221,219, 11,169,250,212,199, 78, 81,210,
+100, 12, 52,215, 52,142, 34,231, 69,239,132,186,120,190,223,218,221,122, 5,148,220, 86, 43,119,125,239, 98, 35, 4,102,179,200,
+220,236, 42,214,133,131, 96, 52, 26,179, 88, 46,185,188,185,225,223,254,187,127,207,207,127,241,223, 89,206,102,228,197,138,253,
+131, 41, 94,224, 49,157, 30, 99,141,174, 21,245, 6,233,249, 76,143, 78, 56, 58, 57,225,171,231, 95, 49,217, 63, 96,188,183,207,
+106, 57,115, 69,139,231,241,229,199, 31,241,218, 27,223, 35, 73, 22, 44,230, 43,222,121,247,135,172,146, 37,139,249, 29, 74,185,
+177,176, 82,138, 36, 73, 40,138,210,193, 89, 44, 44,150, 51, 46, 95,189,164, 42, 11,238,110,110, 89, 46,151, 78, 5,111, 45,255,
+241, 47,255,130, 95,253,250,159,185,185,189,199, 15,124,130, 48,196, 88,205,225,116, 74,146,166, 96, 43, 22,179, 57,198, 10,198,
+147, 61,144, 46, 50,117, 52, 26,146,164, 41,171,213,138,147,147, 83,162, 32,224,254,254,158,201,222, 30,251, 7, 71,228, 89, 74,
+ 81,150,156, 63,121,236, 10,254, 86, 88,107, 25, 12, 71, 76,246,167,228,105,198, 32,142, 41,138,156,229,114,137, 16,178,158,180,
+185,172,117,169, 20,139,100,193,254,222, 1, 65, 16,225, 7, 1, 73,146, 32,108,233, 68,114,117, 17,103,170, 10,129,109, 87, 32,
+190, 31,212, 98, 90,211, 9,121,177,237,129,222,253, 20,110,166,154,181,201,150, 27,144,151,118,229,216,164,233, 41, 85, 11, 50,
+107, 15,186,144, 12, 6, 67, 42, 93,146,164,105,239,125,193, 6, 19,161,127,128,178, 65,228,236,190,231,214, 29,114,111,207,189,
+ 17,196, 34, 55, 59,247, 7, 66, 90,214, 68,199,141,221, 57,125,235,243,131,197, 64,119,178, 41,251,157,120, 99, 87,117, 95,239,
+147, 78, 69,211, 60, 52, 19, 87, 33,182,115, 39, 54,181,111, 59,162,102,189,158, 53,204,110, 42, 10,187,222,100,179,229, 81,239,
+ 10,221, 54, 15,251, 77, 49,213,230,232,126,123,125,111, 92,119,210,116,217,117, 51,220, 77, 12,179,130,158, 87,111,211, 66, 39,
+ 91,140,170,221,138,166,179,157, 23,177,194,172, 11,150, 14,181,109,147, 95,222,229,124,183, 93,176,148,244, 90,121,107, 81, 18,
+124,225, 49,242, 4,251,126,200, 59,199, 7,104,163,201,138, 28, 35, 13,105, 86,242,217,197,130,121,178, 36, 84, 62, 86, 88, 60,
+ 95,178, 55, 25, 17,199, 35,202, 52,101,149, 44, 80, 74,177, 23,143,240,162,128, 87, 89,201,109, 81, 98,164,196, 26,209, 91,205,
+216, 7, 32, 7,235,131,124,251,131,216, 13,105,233,190, 54,221,209,176,253,151,164, 46,240,237, 4,185, 77, 91,219,183, 69,242,
+110,241,226, 59,228, 66,213,174,216, 55, 31,191, 43,145,183,148,101,129,177,206,255,155, 23, 25, 90,116,196,125,245,235, 91, 89,
+ 67, 60, 28,180, 35,199,202,104,220,104, 68,215,126, 97,139,148,158, 43,244,116,197,100,178,199,124,126,143,173, 61,239,141,216,
+ 81, 87, 85, 75,224,107, 56,232, 70, 87,228,153,243, 23,119, 41,117,187,126,127,219,161, 50, 54,147,151, 6, 2,163,148,172,131,
+ 94,214,186, 16,139,236,195,160, 54,166,102,218, 81, 94,106, 17,113,181,182, 38,213, 23, 42, 12,130,154,102,182,222,119,154,102,
+255, 94, 67,136, 60,223,111,117, 26,170,103,119,114, 14,128,102,157,211, 60, 78,253,193,233, 69,250, 54,223,167, 54,130,133,186,
+101,127, 89,239,165, 27, 76, 41, 10,132, 53,204, 87, 25, 81, 24,115,123,127, 67,153, 25,188, 32,228,251,239,253,128, 56, 30,242,
+217, 39, 31,113,127,119, 67,146,174,208, 85, 69, 28, 71, 76,246,246,249,232,131, 15,120,241,197,199,100,101, 66, 85, 25, 60,207,
+103, 56, 24,178, 63, 61,193, 15, 67, 68,237,153,190,189,189,100, 62,155,241,197, 39,191, 33, 8, 99,170, 34, 35, 30, 12, 25,140,
+ 78,220,161,167, 2, 68,186,114,162, 43, 83,145,173, 74, 94,126,253, 5,195,241,148,131,163, 35,222, 59,127,196,221,205, 53,135,
+227, 17,127,245,215,127,197, 98, 49,103, 48, 28, 50,136, 71,188,250,230, 27,242, 60, 97,111,111,138,240, 60,142,142, 31,177,183,
+127,196,171,151,223, 80,105,203,241,225, 33, 95,125,249, 37, 43,189, 96,178,183,231,116, 26,165, 3,203,140, 70, 35,202,162, 96,
+118, 55, 35, 8,125,132,148,124,253,197,231, 45, 31, 36, 12, 67, 4,150, 87,223,188,224,230,246,134,209, 96,204,215,183, 87, 76,
+ 15,143,248,222, 59,223, 71,249, 62,175, 94,124,213,174,101,164,148, 20,121,202,245,213, 37, 7,211, 67, 70,163, 49, 82, 72,238,
+111, 47, 8,163, 8, 37, 61, 6, 81, 76,170, 13,165, 21, 40, 95,181,160, 30,247,218,154, 13, 43,152,105, 59,226, 38,170,181,251,
+255,251, 77, 31, 91,174, 8,165,104, 99,140,141, 49, 14, 99, 91,105,132, 84,148, 69,134,242, 61,246, 14, 14,201,146,148,197, 98,
+209,102, 6,108,254,165,133,218, 88,235,202, 29,205,167,216,233, 73,127,112,156,254, 29,123,245,205,239,221,185, 43,127, 96,223,
+190,233, 89,223,217,189, 63,224, 0,151,221, 18,202,174,131,165,118,119,241,235, 51,169,231, 90,107,174,255,244,248,236,253,110,
+ 8,202, 90,197,184,109, 63,219,250,229, 17, 15, 94,216,237,202, 69, 60,232,233, 19, 82,108, 37,184,108,197,209,117,132, 7, 93,
+223, 30, 27, 66,137,230,239,205,148, 55,219, 5,231,117, 4, 74,205,187,195,108, 70, 80,118, 46, 94,163,134,150,157,223, 79, 41,
+247,223,129, 0, 79, 72,166,158,229,207,222,122,131, 39,227,144, 63,253,215, 63,229, 96, 16,178, 92, 38, 68,158,143, 39, 37,158,
+ 82, 53, 69,205,112, 58,153,240,175,223,121,135, 63,120,237, 53,126,240,232,140,167,135, 7, 28,237, 77, 8, 67,159,187,197,156,
+187,171,107,158,140, 98,222, 60, 60, 32, 45, 10,150, 90, 35,233,130,128, 28,101,205,116, 18,147,122,170,250, 29, 34,182,205, 67,
+123, 83,216,182, 57,178,253,174, 46,253,161,174,255,187, 10,131,205,231, 96, 31,176, 92,214,193,120, 78, 28,182,129, 2,110,138,
+ 77,169, 28, 31,224,236,228, 12, 79, 41,238,231,247, 78, 8, 84,148, 45,131,191,209, 13, 0, 68, 81, 72, 89,228,148, 85,229,200,
+114,173,131,192,117,244, 85,101, 16, 74, 50, 26,141,241, 60, 69,145,101,109,213, 28, 4,129,243,251,118, 32, 67,214,106, 16,184,
+168,204, 82,127,107, 1,180,201,253,239,237,192,148,234, 49,207, 55,233,124,170, 86,158,171,141, 72,221,110,193, 45, 59, 86,208,
+174,114,184,233,150, 26, 13,134,172, 69,115, 94,125,200, 55, 16,162, 38, 59,160, 17,226, 53, 19, 5,221,241,188,119,161, 54,237,
+ 1,221,129,242, 52, 90,130, 94, 44,115, 35,206, 51,134,188, 40,136,234, 67,230,120,122,194,247,222,122,135,139, 87,175, 40,243,
+148,131,253, 3, 38,147, 3,180, 46,120,245,242,130,171,171, 11, 87,212, 11,120,253,205,119,152, 30, 30,178, 92, 44,136, 6, 17,
+215,151, 87,156,156, 63, 70, 87,146,249,108, 70, 81,100,140, 71, 99,252,104,192,245,229, 5,171,197, 61,215,151, 55,172, 86, 11,
+194, 40,228,217, 91, 63, 64,122, 30,119,183,175, 48, 85,209, 78, 87,164, 53,248,129,207,104,114,192,100,223,229,175, 23,149, 33,
+ 93, 46, 89,205,238, 89, 44,239, 25,142, 70,200, 32, 98,149, 36,172, 86, 9,139,229,146,162,200,137, 7, 17,105,154,112,119,123,
+237, 4,135,218,144,100, 25,227,201,132,155,155, 75,238,239,110,152, 30, 76,153,205, 23,104,237, 0, 48,171, 36, 33,142, 35, 42,
+ 93,113,123,115,131,181,150,162, 40, 80, 82,226,251,238, 53,170,170,138,162, 40,221, 36, 97,181, 66,103, 57, 86, 88,167,136,215,
+134,139,111,190,193, 84, 21, 71, 39,167,204,103,119,148,133,219,139, 15,134, 35,231, 13,175, 28, 88, 41,140, 98,132, 84,232, 50,
+195,243,253, 90,124,233,163,181,193,247, 60, 60, 79,214, 26, 8, 89,119,233,219,105,106, 13,176,105,125,216, 55,206,141, 6, 58,
+181, 94,121,122,202,235, 77,210,220,148,199,171,167, 92,178, 77,128,179,214,189, 79, 6,209, 0,139,131, 62,233, 70,227, 33,214,
+ 93,186,237,117,168,155,122, 30,214, 57, 12,157,231,214, 30,218, 98,123,114,216,106,143,132,108,187,231,205,136,234,205,175,183,
+ 59,114, 41,118, 78, 33,155,248,236,205, 73,114,239,191, 45, 27,231, 24,253,238,252, 33, 82, 94,247, 51,196,118,196,121, 79,192,
+187,113, 47, 86,211,147,211,247,183, 59,121,209, 17,183,109,250,213,101, 39, 66,113,123, 52,111,123, 10,102,177, 97, 79,219,236,
+240,186, 1, 25,114,125, 1,216,102,175,219,206, 99,118,247, 13, 61,129,194,230, 1,223,216,214, 58,162, 55,217,248,218,109,119,
+255,178,105, 23,232,236, 47,186,129, 39,214,182,153,187,162,118, 84,134,194,112, 30, 73,126,255,100,202,217,254,144, 81, 20, 50,
+ 14, 67, 14,143,143,249,230,155,151, 12,163,152,101,150, 81,148, 5,158, 82,156,239,237, 17,135, 33,203, 52,101,149,103,120,192,
+254,112,128, 20,150, 65, 16, 17,121, 33,149,208,124,126,113,201,253,252,142,247, 78,142,137, 61,197,117, 86,184, 96, 18,171, 29,
+106,212,234, 54,156, 99, 13, 48, 96,231,225,189,121,208,111,162, 32,255, 37, 29,248, 67,227,245,239, 58,236,191,109, 4,255,109,
+ 30,246,150, 33, 64,141,117,109,212,175, 13, 73,178, 22,192,121,129,207,254,222, 62,131, 65,204,124,177,192,104, 77, 89,148,235,
+194,175,249,176,214,135,124, 85, 86,232, 74, 35,172,165,210,142,201,109,106,235,163, 49, 26,161, 20,123,123,251, 4, 97, 64,150,
+101,120,117,122, 85, 52,136, 41,138,162,133,172,200, 26, 68, 36,164, 32,171,241,180, 93,159,251, 38,164,103, 23, 77,208, 89,216,
+ 84, 61,218,111, 94, 39, 83,175, 85, 20, 66,168,117, 8, 74, 61,126,180,152,142, 72,200, 17,224, 90,137,121, 29, 84,211, 28,216,
+ 13, 45, 46, 8,130, 53,235,160,182,208, 57,155,154, 83,237,123,158,143,244,106, 37,180,117, 24, 88, 79,249,120,126,208, 90, 27,
+ 61,207,115, 41,115,157, 53, 77,239,247,217, 52,193,118,198,164, 82, 10,130, 32, 66, 73,247, 59, 31, 79,143,121,246,244, 53,254,
+233,151,255, 72, 89, 22, 60,122,252, 20,131,226,211, 15,127,201,205,245, 13,121,158,162,171,156, 60, 89,184,152,209, 65,204,167,
+159,124, 76, 89, 85,156, 61,122,194, 31,253,209, 79,249,244,147, 15,185,190,188,104,139,160,209,232, 0,173, 53, 69,190,228,173,
+223,251, 3,158, 60,125, 74, 60, 24, 48, 24, 76,152,221, 92, 80, 22, 37, 7, 7,135,104,235,102, 25, 85,153,163, 60,159,225,120,
+132,146,146,249,221, 53,149, 49, 8,163,169,116,137, 17, 30,126,224, 81,229, 37,139,217, 29, 66,121, 8, 1,195,241, 62,161,239,
+113,117,121,137, 11, 12,113, 99,236,195,227, 19,102, 53,227,124, 60, 30, 83,228,206,171, 61, 61, 58, 98, 60, 26,225,251, 62, 69,
+ 89,214, 22, 70,223,117,215, 69,222, 30,166,110,125,166,234, 9,146, 19,154,141, 15, 14,200,139,130, 60,203,200,243, 28,107,225,
+ 96, 58, 37, 47,114,132,167,136,163, 1,105,186,162,172,114,180,209,120,129,215, 54, 45,214,128, 23, 4, 88,140,131, 13,121,161,
+155, 82,149, 5,198,186,174,185,201,156, 23,214,246,245, 73,116,199,240,114, 99, 82,251,144, 16, 82,186,142,220,116, 56, 25, 70,
+215,126,120,179,190, 23,215,143,235, 41, 69, 24, 70,104,173,221,239,214,114, 58, 84,103,162,163,214,162,229, 58, 83,192,141,174,
+229,150,136, 91,116, 2,179,154,148,197,230,160,238, 30,232,237,215, 54,242,201,187, 69,183, 84,114,107,244,222,216,164,187,249,
+232,109,152, 75, 3, 7,218,229, 8, 18, 15, 4, 91,109, 70,118,111,101,178,211, 47,106,228, 70,179,217, 61,175, 54, 38,203,106,
+122,236, 14,117, 41,251,135,240,238,155,176,220, 49,234, 96, 35,123,183,159, 13,189, 57, 35, 95,239, 15,156, 47, 81,116,149,181,
+114, 59, 76,165,217,139,247, 16,121,173, 34,189, 51, 41,176,187, 15, 10, 35,235,125, 76,111,156, 94, 95, 75,185,222,147,211,189,
+ 89,119, 15,175, 14,150,180,235,243,149, 88, 98, 91,242,230, 80,241,222,209,148,233,112,136, 54,150,113, 28,163, 4, 12, 71, 67,
+238,151, 9, 55,119, 51, 23,192, 80, 85, 20, 85,201,124,190,160,212,154,210, 24,102,171,132,155,229,130,155,197,156, 72, 5,148,
+166, 4, 44, 81, 24,226,121,146,219,217,130,203,217, 29,251,129,207,179,189, 1, 86, 64,105, 61,132, 82,235,234,181, 91,173,213,
+191, 95,224,251,189,157,234,102, 39,189, 9, 41,249,174, 67,249,187, 60,232,223,214,141,127,231, 65,190,163, 82,237, 36,155,183,
+213,123, 91, 66,214, 7,143,231, 57, 5,188, 31, 4, 28,236, 31,112,116,120,200,108, 49, 35,203, 82,202, 60,239,136,239, 32, 8,
+ 2,124,207,119,176,141,202, 56,143,186, 53, 84, 85,133, 54, 22,163,237, 26,178, 35, 4,163,241,158, 11,206, 40, 93,218,155,144,
+ 18, 63, 8,208,101,185,254,176,215,135,173,214,154,162, 40,218,155, 89,239,253,185,161,252,223,238, 26, 68, 95,108, 38, 4, 82,
+137, 94,104,134,181, 6, 75, 19,247,235, 68,122,158,231,198,146, 86,175,221, 9,158, 31,244,136, 97,205, 65,222, 96, 70,131, 32,
+192,171,179,220,141,214, 46,165,172,142,172, 21,194,121,255,221, 99, 56,139,155,203,199,150,181,238,192,173, 29,154,108,116,175,
+214,114,216, 13,145,211, 90,120, 72, 79, 24,167,164,228,248,232,132,233,193, 17,191,247,246,247, 25,142,247,248,159, 63,251,159,
+248, 65,200,147,167,223,227,252,252, 17,191,252,197,255, 71,105, 45, 39,103,103,156,158, 61, 97,188, 63,101,255,240,152,195,163,
+ 99, 78,206,158, 16,197, 67,198,227, 49, 39, 39,103,252,252,127,252, 61, 55,151,223,144,102, 25,121,150,113,116,124,140, 54,112,
+125,249, 2, 83, 86,164,105,198,203,175,190,224,242,229, 11,174, 47,191,118,209,113, 6, 94,190,252,170, 86, 99, 7, 68,195, 17,
+227,201, 20,207,243,241, 60,201,244,248,140,201,120,143, 32,140, 24,140,246, 49,186,196, 90,195,217,163,167,196,163, 49, 89,186,
+ 98, 62,155, 17,134, 17,139,229, 10,139,123, 95, 25, 3,126,224,147, 37, 43, 87,244, 33, 25, 13,135, 24, 99,137,227,152, 60,207,
+185,189,189,101,111, 50,193, 90, 88, 37, 9,163,209,136, 36, 89, 81,228, 57,198, 84, 8, 97,235, 14,189,192,171,193, 53, 69, 89,
+146,231,185,219,247,151, 37,101,145, 83, 21, 5,105,154, 48, 26,143, 8,131,192,173,235,166, 83,172,181,100, 89,130, 16,224,123,
+ 62,105,150, 48, 28, 14, 90,224,148, 87, 91,215,156,147,195,146,231, 25, 66, 8, 6,195, 33,198, 52, 96,161,181,101,119, 27, 17,
+ 43,122,145,216,221, 20,204,214, 38,105,205,214,244,118, 29,127, 93, 31,246, 29, 1,181,148, 10,223, 15, 40,107,123,103,154,102,
+ 29,230,137,216,106, 36,215, 54,186,250, 96,221,236,178,155, 9,109,179,239,239,120,204,155,255,110,167, 91,244,187,236,230,192,
+110, 4,216,221,239,217, 69,142, 91,115, 64,109,143, 4,183,153, 44,218,221,189, 55,235, 97,177,113, 96,239,210,169,116, 98, 68,
+251,118,218, 14,244, 74,244,116, 42,253, 66, 65, 77,143, 79,223,255,246,251,181,232,217,206, 54, 5,114, 77, 71,223,247,111,119,
+187,242,205,216,211,142,165,108, 35,146, 85, 73,213,179,152, 89, 54, 32, 0,173, 0,168, 57,228, 59, 88,213,206, 72,102,251,233,
+175, 31,204,108,208,243, 76, 55, 4, 99, 99, 31,106,235, 49,112, 51,166,108, 20,208,194,106,204,106,193,185,167, 25, 9,193,100,
+ 56, 64, 10,201, 60, 75, 56,156,236,243,234,238,150,167, 39,199,220,220,221,243,252,242,146,210, 58,187, 81,154,103,124,125,125,
+203,197,205, 13,121, 89,114, 55,159, 49, 95, 38, 36,121, 1,194,162, 75, 55,194,139,194,136,243,131,125,206,166, 83, 70, 97,200,
+245,108, 70, 86,228, 28,120,134,147,161, 79,154,102,148,210, 3, 33,219,113, 88, 87, 28,213,221,155,239, 82,181,111,198,173,126,
+ 87, 71,254,208,193,244,173,234,205, 7, 70,242, 15, 5,189,236, 36,206,109,140,232,155, 9,179,236,136,116,252, 40, 68, 32,120,
+246,244, 41,179,217,140, 52, 75, 41,139,162,125, 92,207, 83,248, 97,224,114,170,211, 20, 9, 84,166,170, 3, 63,220,161,174,107,
+ 80,141, 83,132, 75,198,227, 9,113, 28, 81, 22,185, 11,228,177, 16, 70, 78,108,231, 42,194, 86,185,129,239,121,172,146,116, 75,
+196,217,220, 0, 27,241,162,218, 16,147,169,206,168, 90,128,131,201,212,152,189,118,196,173,214,197,174, 20,141,120, 70,174, 87,
+ 48,157,215,192,116,110,194,170,227, 87,111, 32, 53,198, 24,188, 48, 36, 8, 67, 71,250,170, 61,228,182, 30, 65, 75,229,117, 20,
+ 27,238,115,171, 43, 77, 16,134,238,218,148,213, 86,122, 94, 75,171,235,114, 19,118,104, 43,164, 82, 28, 31, 30,241, 39,127,244,
+199, 44, 87, 75, 62,252,244, 99,238,111,110,121,231,251, 63,100, 60, 26,212,251,123,195,112, 56, 34, 79, 51,110,175, 95,145,167,
+ 75,174,174,174,200,179, 20,176, 60,255,242, 51,174, 47, 95,161,128,120, 56, 38,140,134, 20,121, 78, 89,230, 36, 73,142,231, 41,
+242, 44,193, 15, 34,146, 36,231,224,112,234, 8,125, 94,128,231, 5,220,220, 92,130,169, 88, 46, 22,128,225,112, 58, 37,175, 71,
+215,195,120,194,193,244,136,217,253, 53,147,253,125,246, 15,207,240,132,102,122,116,202,191,253,119,127,202, 87, 95,126,138, 80,
+146, 60, 77,201,243,132,253,131, 41, 74, 42, 87, 44,250, 62,121,158, 50,187,191,115,221,161,167,200,243,130,193, 96, 64,154,166,
+ 44,102,115, 38,147, 9,175, 46, 93, 44,108, 16, 4, 8, 41, 25, 12, 6, 88, 96, 60, 30, 19,134, 33,101,153,187, 49,125,165,219,
+ 46, 82,151,121,139,243, 53, 90,187, 61,184, 49, 44, 23, 11, 22,139, 57, 74, 9,210,213,202, 77,113, 60,207,145,234,140,243,176,
+207,102,119,196,113,140, 16, 94,141, 87,118,247, 77, 93, 85,110,149, 87, 79, 71,131,192,133,199, 56,192,145,105, 19, 39,251, 90,
+ 43,187,113,216,218,173,213,107,191,217,179, 61,203, 89,163,174,175,180,110, 39, 18, 85, 85,225,121, 62, 81, 60,160, 40,114,167,
+217,208,166,115,216, 54,141,214, 6,138,252,129, 68,180, 45, 65, 90, 71, 44,215, 19, 0, 63, 64,135,235,129, 98,186,223,191,107,
+207,190,105, 69,147,162,183, 82,147,189, 63,207,206,216,242,221, 7,186,232, 47,221, 55, 33, 60,236, 94,115,247,172,109, 8,212,
+244,248,252,253,135,194, 51,214, 4,183, 93,108,118,177,195,171,222, 39,174, 53, 21, 25,162, 91, 24,216,245,101,217, 24,227,117,
+111, 26, 86,172,119,217,118,131,238,222, 30,232,114, 61,146, 69,138, 45, 79, 51, 98,221,233,173,141,228, 46, 6,211,118,212,189,
+221, 11,222,205,123,147,194,169,222,101, 13, 82,176, 2, 68,158, 99,231,119,168,229, 29, 39, 7, 19,215,177, 7, 33,158,242, 72,
+242, 28, 79, 41, 94,221,221, 81, 86,134,231, 47, 95,114,121, 63, 39, 43, 10,210,162,100,153,101,172,242,140, 44,207,168, 42,247,
+120,198, 66, 94,148, 76,247, 38,156, 30, 28,114,191, 92,162,141, 38, 12, 35, 6,158,207,163,131, 41,127,252,246,219, 72, 37, 72,
+138,130,219,219, 91, 94,155,142,176, 89,202,170, 50,104,233,110,218,194, 82,115,162, 59,222,112,107, 31, 12,128,249,182,195,186,
+187, 51,122,232,207,110,254,191,223,101,196,254,157, 66, 60,214,182,182,254, 72,222, 85,251,178, 22, 8, 1,110, 95,168, 13,223,
+123,243, 77, 22,203, 5,105,154, 80, 22,101,107,169,105,110,188,214, 88,202,188, 64, 40, 73,165, 11, 7, 84,169, 25, 2,166, 6,
+113, 52, 86, 31, 99, 44,143, 31, 63, 38, 79, 83,170,178,192, 15,252,122, 47,233,110,172, 80,115,227,173, 33,138, 6, 20,245,207,
+107,138,168,166,139,105,196,105,221,157,250,150,135,124, 67,233, 43,164, 83,218,251,158,135, 20,178,142,206, 84,189,105, 84,243,
+190,237, 89,230,154,226, 84,186,252,241,246,179,216,177,177, 25,234, 96,148, 32, 68, 41, 15,223,247, 80, 74, 56, 88,138,242,136,
+162,200,229,125,151,133,211,144, 72,103, 41,243, 60,159, 65, 60,112,244,183,186, 64,217,180, 5,110,253,123,231, 61, 20,250, 33,
+191,247,238, 15,248,226,249, 11, 62,250,228, 19,246,167, 83,140,177,188,251,238,219,252,250,215,191,226,244,244,156,159,255,236,
+191,243,226,249,115,110,175, 95,185, 68, 50, 33, 0,141, 16, 30, 79, 94,127,155,170,200, 49, 90,243, 71,255,234,127, 97,190,156,
+241,252,139, 15,201,243,130,195,195, 67,246,246,246,185,191,119,225, 41, 66, 42,222,122,251,109, 46,175,110, 72, 22,247,164,233,
+178, 22, 36, 58, 48, 83, 16,185,145,175,244, 66,222,122,247,247,240,195,152,213, 98,206,229,245, 5, 66, 72,246,143,206,249,234,
+249, 39,204,239,103, 76,167, 7,252,242,151,255,200,205,245, 75,150,247, 51, 64,147,151, 21,203,229,138, 32, 8,184,186,186, 2,
+ 4,243,229,140,241,120,223,137, 16,181, 70, 42, 73, 16,120, 20,165,243,215,204,230,115,246,247,247, 8,130,128,162, 40,219,201,
+203,241,241, 9,179,249,156,249,252, 30,116,133,176, 22, 63, 8,136,135, 46,121, 80,215,133,148, 10, 3,226,193,128, 50,207, 9,
+253,128, 40,140, 72,179,204,113, 18,124,159, 48,140, 25, 14, 70,196, 81,140,209,218,189, 95,172, 37, 93, 37,140, 39, 19, 71,119,
+235,100, 57,232, 74, 83, 22, 89, 93, 40, 24,226, 56,162,168,170,122,149, 99, 59,135, 56,157,152, 85,209,179,183,109,190,159, 55,
+ 39, 83,205,206,221,125,201,237,212, 85, 29, 36,212, 52, 71,149, 49, 4, 94,224,130,152,140, 33,235,142,225, 91,245,184,236, 81,
+217,186,135,232, 46, 95,120,207,234, 43,118,136,213, 54, 24, 38,221,239,239,137,176, 55, 58,243,230,239,230, 44,146,242,219,197,
+113,221,174,124, 83, 79, 35, 54,220, 63,219,107,234,109,215, 79,119,205,221,231, 8,244,161,108, 0,234,240,228,252,253,237, 3,
+ 91,246, 65, 46,130, 45,187,206,118, 22,250,182,165, 77,212, 35,147,214, 64,191, 33,197,111, 46, 82,215,106,208, 86,105,109, 87,
+ 76, 59,102,223,180, 56,216,141,170,172,131,100, 95,191, 72, 82,236, 20, 39,108,138, 13,100,215,110,211,189,248,166,227,151, 46,
+115,200, 19,100,190,226,112, 20,114, 48, 26,161,181, 83,180,166,121,202,170, 44, 72,178,132,139,251,123,126,251,213,115,110, 22,
+ 75, 42,107, 73,138,156,172, 40, 88,166, 41,121,169, 73,178, 2, 76,163, 72, 87,228, 69,193, 42, 75,153, 12, 98, 0, 22, 69, 70,
+ 81, 86, 40, 79,177,204,114, 66,207,227,181,195, 99, 12,150, 36,175,120,117,119,195,227,131, 61,252, 50, 99,153, 21, 24,217,248,
+165,229,182,154,252, 1,255,120,191, 0, 19,223, 57, 50,222,180,106,236, 82,187,127, 91,231,254,187,230,173,187, 56, 83,250,240,
+137,246,108, 23,173,136, 71,212, 16,142,179,147, 83,138, 50,103,181, 90, 81, 22,133,179,163, 9,137, 80,138,241,120,228,242,212,
+117, 19, 74,227,198,157, 13, 27,223, 24,219, 11,144, 16, 82,241,248,201, 99,210, 36, 33, 75, 18,180,177,140, 70, 35,170,178,196,
+232,178,183, 31, 79,211,140, 52,205,187, 53, 84,135, 38,216,143, 14,238, 94, 39,187,145,248,214,248,134,149, 90,219, 15,187,244,
+192, 45, 84,101, 7, 27,187,190, 71,172,161, 67,205, 65,222,236,237,149,231, 17,132, 17,195,193,160,101,128,199, 81,140,175, 60,
+151,236, 85,186, 21,194, 96, 48, 64, 73,229, 70,191,210, 49,218,203,178,104,139, 36,211, 48,244, 89,107, 56,122, 0,154,206, 97,
+ 47,234,156,131,195,131, 35,202,162,228,243, 47, 63, 33,205, 51,254,240,199, 63,197, 83,146,171,203, 87,252,187,159,254,148, 15,
+ 63,248, 13,105, 1,171,116, 69, 85, 85, 60,125,253, 13,252, 40, 34, 10, 7,188,241,230, 59,220,223, 94,243,205,139,231, 40,229,
+115,124,122,206,207,255,254,239, 72,243,156, 42,207,208, 72, 22,139, 59,242,101,194,114,185,164, 44,114,174,175, 46, 73, 87,115,
+170,178, 98,122,116,194,252,246, 14,163, 51,148,231,181,218,128,170,204,249,250,249,103, 84, 69, 73,105, 42,148,181,232,178, 32,
+207,114,138,229, 29,199,143, 95, 99,180,183,207, 96, 16, 81,228, 57,179,219, 91,146, 36, 65, 73, 15,229, 57,224,208,225,225, 17,
+171,100, 69, 20,135,228,137, 43, 0,227, 65, 76, 28,197,220,221,221,177, 55,217,195, 74, 8,234, 29,186,181,142, 25, 48,159,221,
+ 83,150, 5,203,197,130,193,112,200,114,177,192,154,218,105,161,113,112,150,162,112, 28, 4, 99,168,138,146,162, 44, 24,198, 67,
+210,116, 69,101, 53,195,209, 8, 83,105,134,163, 9,119,119,215, 84, 69,193, 96, 48, 36,138,135,117, 55, 99,200,211, 37,161, 31,
+160,124,175,157, 10, 5, 65,224, 64, 51,181,179,193, 90,139,209, 21, 81, 20,163,171,162, 22, 76,246, 89, 34,155, 7, 71, 35,134,
+ 91,139,214,228,134, 50,126,163,147,236,236,190,165,116, 69,133,172,173,110,212,150, 83, 93,175,146, 90,226, 99,247, 94, 97,215,
+ 54, 52, 37, 85,111, 79,222,215, 84,237,152, 44,178,129,121,101,215,216,187,175, 96,223,196,197,246, 4,223,157,115,177,247,231,
+ 55, 37,226, 59,196,214,187,166,147, 2,177,221,141, 11,177,113,198,138, 45,209,122, 95, 83,176,161,153, 58, 56, 62,121,191,179,
+113,238,176,217,237, 78,168,204,166,242,189,233,184,197,214, 97,178,189,127, 88,147,221,100, 15,221,234, 44, 20,172, 71,242, 82,
+ 32, 84,237,213,174, 65, 31, 26,176,202, 9,159,154,148, 21,101,193,107,253,220,174, 19,183,114, 45,142, 51, 98,187, 19,146,157,
+ 74,169,119, 51,218,101,101,107,158,191, 53, 88, 91,225,229, 57, 97,185,194,215, 5,251,147, 9, 74,120,228, 53, 31, 60,201,114,
+150,121,198,221,106, 73,150,231,172,138,194,237,206,173, 33, 43, 75,202,178,164, 50,134,188,204, 89,172, 82, 44,134,170,174, 90,
+149,146, 36,121, 70,161, 13,227, 97,204,253,124,201, 60, 89,177,172, 61,172,101, 13, 2,217, 27,196, 20, 70, 51, 91, 37,204, 86,
+ 75,206,246, 39, 40, 83,178, 44, 75,172, 10,220,155,174,193,169, 10,118,194,100,190, 75,236,246, 47, 25,189,119,199,234,187, 14,
+248,223,249,175, 93,223,103,109,187, 90,233, 87,162,162,134,160,232, 25, 34, 0, 0, 32, 0, 73, 68, 65, 84,188,200,150, 45, 62,
+ 28,186, 46, 37,138, 35,230,171, 5, 89,150,183,169, 84,126, 16, 16,132,161,163,248, 25,131,209, 6,109,214, 28,108, 23,170, 98,
+ 58,104, 74,129, 84, 30,167,103,167, 36,171, 21,182,141,206,117, 2,182, 50, 47,219,248, 72,207,243,209,166,206,227,171, 51,196,
+141,116,163, 80,140,237, 8,201,104,181, 25, 61,241, 92,103,191,214,222, 36, 91, 47,186,105, 71,241,106,167,160,176,134, 28,121,
+ 94,189,227, 86,237,251, 91, 73, 65, 24, 70,189, 96, 32,107,173, 75,120,178, 16,197,113,189,115,119, 69, 81, 20, 69,196,113, 76,
+150, 39, 20,101,229,132,116,166, 78,170, 19, 2,233,123,148,186,194,106,144,173,205,200,174, 1, 61, 61,189, 73,179,102,147, 8,
+ 97, 16, 72,126,252,227,159, 18, 68, 33,179,249,140, 31,252,224, 71,100, 89, 66,158,151,252,225,143,255,144,119,222,121,151,175,
+190,185,224,139, 47, 62, 38, 77, 86, 72, 12,151,151,175,200,242,140,251,235, 91, 22,243,123,110,174,175, 17, 74,242,163, 63,252,
+ 99,126,249, 11,183,139, 47,138,130,178,200,200, 19, 23,224, 19, 15,199, 12, 71, 35,194, 56,230,123,111,191,199,114,121,207,209,
+233, 57,126, 52, 2,171,137, 6, 3,242, 60, 71,151, 57,167,143,158, 48,217,155, 18, 4, 49,201,106, 70, 50,191, 99, 48, 26,243,
+244,141,119,184,190,186, 32, 10, 61,198,147,125,138, 60,227,213,203,175,176, 2,124, 63, 34,207,114, 70,123, 99,202, 66,147,166,
+ 43,230,179,123,246,246, 70,220,221,220, 82,100, 43,140, 46, 72,146, 21,241, 96,128, 82, 30, 23, 47,190,194, 11, 60,198,227, 61,
+150,243, 25, 82, 74,150,139, 5,251,123,251,204,102,115,124, 79,113,123,123,197,209,225, 49,203,197, 18,151,228, 87, 91, 7,133,
+193,152, 10, 99, 53, 22,247,222, 45,171, 2,139,203, 53, 16,210, 39,203, 22,100,201,146,225,120,159,172,200, 40, 75,167,149, 40,
+203,146, 40,142,209,186, 34, 89,205,137,162,168, 14, 92,129,188, 44, 25, 12,134, 53,186,218,105, 83,180,118,226,200, 40,140,169,
+116,213, 22,162,107, 71,148,220, 16, 63,203, 45, 55,211, 38,128,102, 29,209,106,123,170,249,230,173,226,215, 76,143, 74,107,148,
+ 31,212,129, 84,134, 60, 47,106, 22, 68,127,197,212, 8,223, 54,109,100, 61, 8, 76,167,171,223,180,165, 53,157,123, 79,209,206,
+154,218,246,224, 8,126, 23,245, 77,244,133,121,205,228,184,157, 78,109,196, 18,179,217, 68,117,232,148,219, 42,246,245,201,185,
+ 73,119,237, 54,212,155, 29,126, 23, 32,167, 14, 79,206,223,223, 45,144,218,182,164,245, 67, 88, 58,234,240, 77,237,171,232, 10,
+210,250, 49,116,114, 13,130,238,239, 33,235, 29, 79, 51, 94,105, 40,174,109,244,166, 88,123,201,219,206,100, 99, 79,190,153,117,
+221, 38, 80,109,254,126,157, 11,222,197,104,238, 68,160, 90,139, 16, 22,179,156, 35,231, 55,232, 90,144, 18,199, 17,121, 85,146,
+ 87, 37,214, 88,178,170, 36,201,115, 86, 69,142,168,153,205,205,118, 42, 47, 92, 42, 83,169,235, 68,169, 36, 67,214,172,250,160,
+134,198,104,107,201,171,194,137,152, 45, 44,242,156,217, 42, 33,171, 74,202,170, 64, 27,203,193,112,228,192, 20, 82,112, 57,187,
+ 67,107,195,241,158,243,185,103,218, 98,149,215,190, 6, 86,124,183,215,252,219,198,239,189,202,175,131,160,101,199,193,190, 75,
+100,247,109,123,247,157, 17,191,155, 84,169, 13,158,113,247, 13,169, 88,147,214, 12, 48,217,219, 3, 11,211,131,125,110,239,239,
+ 48,186,194,212, 40,205,209,100, 92,251,100,171, 54, 32, 71,235,146,170,206, 84,119,221,186, 91, 39,186,206,216, 9,159,206,207,
+ 31, 83,228, 41,139,197,188,183, 70,210,101,229, 4,107,214, 34,144, 24, 43,200,243, 18,223,115, 34, 52,103, 56, 21,248,157,168,
+ 86,165,228,214, 20,200,118,114,161,219,176,159,250, 80, 55,198,184, 25, 86,157, 37, 32,155,137,150, 84,157, 27,152,234,225,148,
+187, 93,185,177,134,178,170, 8,252, 96, 29,171, 90,127,143,227,152, 59,177, 97, 24,133, 4,126, 64, 94, 20, 12, 7, 3,246, 38,
+251,109,177,227,114,206, 5,101, 85, 97,172,219,211, 58,154, 97,133, 84,162,197, 8,171, 46, 18,183,167,242,119, 5,192,249,217,
+ 83, 62,248,224, 55,252,234,151,255,132,242, 37,255,254,207,254, 3, 63,255,249,207, 72,147, 5,131, 65,200,255,245, 95,254, 11,
+190,231,243,245,243, 47,200,210,148, 82, 91,158,189,246, 26,158,140, 24, 12, 66, 38,211, 99,164,175, 24, 13, 7,220, 92,124,195,
+191,249, 95,255,140,189,233, 49,131,225, 0,191, 97, 19, 84, 26, 91,175,201,206,206, 31,243,242,197,115,170, 60, 35,205, 50, 14,
+ 14,166,228, 69,130,231, 43,246,143,142, 72,151, 11,176,130, 44, 75, 48,198, 17,228,166,135, 39, 40,229,241,242,235, 47, 73,230,
+215, 76, 38, 39,156, 61,121,157, 52, 73,185,186,120,129,169,220,225, 26, 13, 38, 45,129, 77,213,162,195, 52, 77,235, 12,248,172,
+221, 75,151, 69, 65,165, 53,131,225,144,155,203, 43,210,213,130, 40,138,184,187,187, 39, 8, 2,150,203, 21,113, 20,225,249, 65,
+ 45,212,243,176,194,114,120,124,202,193,225, 9,105,154,128,213,237, 97,104,219,226, 63, 32, 8,134,174,160,242,124, 48, 26, 83,
+ 26,242, 44, 99,184, 55,198,232,154,134, 88,107, 42,252, 32, 32, 73,151,136,250,181,174,116, 35,160, 20, 53,110,218,162,164, 3,
+ 41,173,121, 15, 97, 47,153,109, 83,247,212,117,110,128,221,134,173,212,231,131,169, 81,216,235, 38,145, 53,188, 9,231,184,104,
+104,142,198, 24,162, 48,170,185, 8,146,162, 44,182, 39,135, 77,114,163,236,239,205,219, 52,180, 6,179,189, 99,242,184,121,160,
+247, 58,116,209,193,203,138, 78, 1,176, 1, 55,219, 76, 94,219, 92, 53, 73, 33,182,236,105,236,194,138,247,113,115,125, 37,252,
+ 3,112,247, 93, 19,147,190,245,188,255,239,106,122,114,246,254, 67, 89,230,108,236, 3,214,176, 18,219,191,144, 98,157, 53, 46,
+186,144,215,214, 19, 46,183,246,220, 98,125, 13,251,163,138,102,223, 93,119,154,170,251, 75, 88,122,214,181,102,151,190,117, 80,
+116, 70, 30,155,202, 92, 81, 71,140,110, 6,117,212,155,159, 90, 3, 85,223,180,173,198,147, 22, 63, 75, 40,111, 94, 81,166, 25,
+ 40, 73, 28, 6, 45,121,161,210, 21, 82, 8, 86, 89, 86,251,125, 29,164,166,170, 42, 42,109, 92,198,119, 13,238,104,124,169, 89,
+ 94,182,123, 41,175,230,186, 7,129, 95, 23, 39,206,207,158,150, 57, 89, 81,178, 76,210,118,130, 98,172, 97, 47, 30, 49,207, 86,
+ 84,198,114,183,116,227,181, 65,224,145,165, 9,149,149,104,207, 67,214,217,236, 15, 29,210,242, 1,127,100, 87, 87, 32, 58,130,
+ 46,186, 59,244, 78,152, 9, 59, 82,144, 54,187,245,127,201,120,126,203,230,241,224,227,116, 20,241, 18,252,218,251,191,183,183,
+ 71, 89, 85, 60,125,252,132,251,217, 29, 73,146, 96, 42, 13, 74, 48, 30, 79,220, 46,179, 44, 48,149,243,164, 87,186,108, 61,193,
+214, 88,176,114,195,209, 33, 57, 58, 62, 38, 10,124,102,139, 57, 66,186,162, 75, 41, 73,165, 75,186, 97, 67,171, 36,173, 71,152,
+174,136, 8,162,168, 30,241,186,238, 95,121, 94,253, 57, 49,189,113, 97, 55,208,133, 14,175, 95, 42,177,102,173,183, 76,235,117,
+ 81,213, 8,239, 90,171, 75,253,105,107,168,130,141,134,196,247, 67, 6,245, 40, 54,240,220,225, 17,134, 81,173, 47, 48,245, 10,
+195,237,223,135,131, 1, 73,154, 17, 71, 49,131, 65, 76, 20, 70,235, 66, 92, 58,107,146, 95, 23,159,149,209, 40,161,234,247,181,
+179, 87,138,206, 20,108,147,123,191, 88,206,209,149, 97, 60, 25, 97,141,225,248,228, 17, 95,191,248,154,243,243, 83, 46, 46, 46,
+249,201, 79,254, 21,203,213,156,247,126,255, 39, 8, 21, 1,150,251,249, 45, 63,252,253,159,240,197,103, 31,241,244,233,235,140,
+135, 99, 62,255,236, 19,222,120,251, 7,252,195,223,255, 63,124,250,225, 63,115,241,226, 5,201,202,197,159, 54,248, 91,132, 64,
+ 40,143, 44, 93,185,236, 5,107,185,190,120, 65,178,156, 97,116, 69, 85,228, 4,158, 71, 85, 58,237,132, 46, 50, 22,139, 37,121,
+213,120,244, 21, 97, 60,228,232,228,156, 15, 62,254,144, 34,203, 9, 3, 31,129, 33, 30,140,145, 2, 14,166, 39, 60,121,246, 61,
+142,143,142,200,178, 20,221, 10,190, 98,116,165,209,186, 34,136,135, 4,161,139, 6,206,210, 21,101,238, 62,203,131, 65, 76,146,
+ 36, 68,161, 15,198,176, 92, 45,137,194,136,201,129, 83,176,207,231,115,150,203, 37,163,209,200, 21,144, 85, 89, 43,189,125, 6,
+147, 49,199, 39,167,132, 97, 84, 43,244,199,236, 79,143, 8,227, 33, 97, 20,178, 88, 44, 92,129,106, 42,210,100,137,193,226, 5,
+ 17, 10,195,114,126,143, 31,120,248,126, 68,145, 23,181, 48, 82,174, 49,175,210,113, 4, 26,143,123, 16,132,245,231, 64,181,123,
+241,238,104,189,235, 29,239,209, 16, 59,231, 67,215, 26,215,141, 69,109,190,236,251, 78,211, 97, 89,135,104, 69, 97,232,138,200,
+118, 77,182,125,207,234, 3, 92,196, 86,170,154, 84,178,103, 83,219,132,190,244,160, 50,155,148,185, 29,121,230, 91,162, 53,209,
+ 47, 96,101, 71, 0,222,219,147,119, 60,241,162,183,222,221,164,169, 74,122,104, 49,177,253,132,251, 4, 87,187,245, 92,186,113,
+229, 56,162,156,104,247, 39, 27,252,151, 30,192,133, 46,117,173, 3,169,232, 41, 19, 45,219, 81,168,182,223, 29,219,142, 93, 73,
+108, 40,230,109,231,143,211, 88, 39, 44, 61,251,156,169,119,233,205,147,181, 29,160,134,232,168, 53,187,136,188,246, 32,111,108,
+ 68, 82,110, 5, 95,180,172,106,177,126, 3, 43, 33, 25,234,146,213,221, 43, 76,101, 40,140, 97,236, 43, 38,163, 33, 86, 8, 12,
+150,178, 42, 41,165, 66, 91, 67,169, 43, 39,250,192, 82,214,176,143,160, 46, 32,138,162, 68,168,245,243,117,161, 12,178,189, 30,
+113, 24,145, 21, 5, 69, 89,162,164, 36,240, 3,146, 52,163,210,134, 69,154, 56,193,147,176,132,126, 64,172,124, 70, 81,196,205,
+124,206,237,108,206,116,127, 76, 44, 42,108, 57, 39, 17,154,194, 31, 35, 27,150,249, 46,133,106,231,218,109, 30,182,205,243, 91,
+211,249, 58,222,235,174,205,175,163, 78,255, 46, 17, 94,151,253,190, 75, 84,213, 27,185,239,242,122,210,207, 33,232,170,175,173,
+ 49,164,105,198,104, 60,110, 61,195, 74, 41,140,148, 8, 85,131, 91,140,174,111, 18, 98,171, 72,232,122,251,165,164,221, 71,166,
+105,194,116,255,160, 86,165,139,186,171,239,139,195,138, 82, 35,149,135, 53,213,250,107, 73,214, 18,255, 60,207,193,113,148,231,
+ 49, 30, 29,214, 98, 60,215,233,251,129, 79, 80,243,218, 93, 1, 88,181, 55,165, 38,126, 85,215,123, 79,106, 59,217,104, 60,162,
+170,180,235,226,234,162,181,200,139,250, 38,170,107,223,177,195,220,122, 50,160,172,170, 54, 8,200,130, 83,179,251, 62,182, 46,
+ 52,188,154, 56, 23, 4, 33,135,211, 3,138,188,172,119,232, 21, 71, 71,199,164,105,202,117, 13, 73,105, 66, 58,124, 63,112, 99,
+211,178, 34,138, 66,242, 58,215,188,171, 21, 80,157, 21,195,116,122, 68, 89, 84, 92, 94, 94,240,236,233,155,252,243,175,255, 25,
+ 99, 74,198,227, 3,138,188, 34, 8, 7,168, 48,228,227,143, 62,226,131, 95,255, 12,233, 41,162,120,194,199, 31,254, 6, 63,140,
+201,203,130,143,126,251,107,170, 60, 99,126,127, 67,145,164,104, 3,198,104,116,153, 33,133, 37,205, 74,172, 46,240,130, 16, 79,
+249,228,105,230, 70,215,104,240, 34, 78, 14,159,144, 23,115,242, 60,103, 60,158, 48, 8, 66, 44,150,229,172,228,232,248,148,203,
+139, 23,220, 94, 22,140,134, 35,148, 47, 88,206,102,104, 83,178, 50,112,176,191,143,242,220, 1,180,127, 48, 37, 28,140, 89,220,
+ 95,178, 88,204,121,227,237,239, 51,159, 93,243,245,231,159,115,119,119,199,100,178, 71, 49, 43, 40,179,140,201,100,159,120, 50,
+ 98,121,127,135, 10, 20,210,247,137,134, 49,105,154,224, 7, 33, 73,154, 49, 61, 58,226,238,250,134,188,200,153, 30, 30,241,234,
+226, 37, 88, 77,150, 44,240, 61,143, 48, 12, 28,209,205,243,209, 69,197,203, 23, 95,183,156,254, 40,138,201,243, 12, 63, 8, 57,
+123,250, 26,227,189, 61,238,239,239,201,146, 37,158,239,225, 41, 73, 85,185,107,162, 60,143,155,235, 27, 78,207, 35,148,146,164,
+ 73, 74, 52,136,145,202,195, 87, 30, 69, 89,226,135, 32, 61, 77,145,229,181,127, 94,214,120,105, 7, 89, 82,181,119,187,129, 24,
+173, 81,178,238,134,223,124,190,218,207,168,109,239, 38,157, 21,171,108,181, 5,141,250,189, 57,248,140,169, 64,249,140,134, 67,
+ 4,224,103, 30, 89,150,215, 97, 88,221,100, 71,187, 69,105,235, 78,127,187,250,147,166,187,223,100,158,192,218,202,182,201, 63,
+105,239, 55,155,235,133, 14, 70,188,143, 49,239,138,183,237,150,197,184, 71, 96,221,193, 14,233, 38,128,210, 66,213,118,223, 71,
+215, 7,183, 97, 87, 35,222, 28,123,106, 90,143,223,187,246,180,190,218,189, 47,163, 95,143, 84,214, 42,200,222, 70, 90,208,241,
+ 80,139,118,189,222,181,162,137, 26, 2,211, 62, 78, 19, 36, 95,243,172,215,149, 83,111,149,218,185,168,219, 33, 0, 82,108,140,
+ 53, 54, 68,112,221, 72,210,181,135,187,131, 26,220,160,198, 41, 97, 81,166, 98,148, 57,219, 89,150,151, 8, 5,231, 71, 7, 12,
+ 99,247, 65, 41,141, 65, 23,101,109,215, 48,228,149,118,227, 36,235,182,174,218, 24,194,154,175,236,236, 80,110,228,158, 23, 37,
+ 90,187, 81, 82,224,251, 8, 96, 52, 24, 56, 63,105,253,226,122, 82,186, 67, 67, 74, 23, 93, 88,199,170,150, 85,225, 10,128, 60,
+199,243,125,238,150, 75,132, 21,148, 85,137, 53, 6,175,222, 69, 27,229,215, 5,146,220,128, 74,244,217,226, 93,149,242,102, 8,
+199,230, 33,236, 14, 15,118,124,125, 55,201,238,119,161,205,153, 93,157,121, 67,201,179,236, 36, 21,122, 29,206,248,163, 39, 79,
+ 28, 31,187,204,107, 80,135,173, 59,130,160,101,188,187,195,169,164,210,235,157,186, 49, 77,113, 96,235,253,162, 27,115,123,190,
+199,233,201, 41,119,247,119, 8,168,187,122,221, 90,204, 44,240,218,235,239, 96,173,235, 98,133,116,152, 87, 26,225, 88,237, 49,
+ 23, 66, 56, 63,110, 89, 81, 22,149,251, 12,105, 67,153, 23, 20, 69,225,108,113,190, 71, 24,132, 4,190, 79, 24, 68,236,239, 29,
+112,116,120,194,227,243, 39, 60,125,250, 26,103,231,143,121,252,248, 25, 71, 71, 39, 28, 31,159,115,114,124,202,201,201, 35,142,
+142,206,216,155,236, 59, 52,232,112,210,118,237, 13,168,196,243,188,118, 44, 24, 6, 1, 65, 20, 18,197, 49,113, 28,187,157, 39,
+ 16,197,145, 43,124, 42,103, 55,138,194,208,117, 76,133, 19,128, 78, 15,246,209,218, 80,233,138, 74,151,181,176, 85,180, 54, 54,
+ 81,103,126,183, 41, 11,157,236,121, 37, 37,223,255,254, 15,120,121,113,201,179,103,207, 24,143, 71, 72,207, 9,231, 6,195, 1,
+151, 87, 87,252,246,131, 95,115,125,241, 53, 87,175,190, 97,185, 90, 49, 28, 78, 88,173, 22, 20, 89, 66,178,156,147,165, 57,190,
+231,241,253, 31,253,132,192, 87, 28, 76, 15, 57,123,252,180,198,246,150, 40, 47,224,248,236,148,104, 56, 70, 9, 73,154,174, 64,
+ 10,242, 60,199,247,124,206, 31, 61, 97,182,152,113,176,183,143, 69, 16,197,145,227, 61,148, 5, 85, 85,145,172,150,232, 74,163,
+164,197,243, 36, 65, 56, 98, 60, 57, 36, 89,222, 33,176, 68,241, 0, 35, 60,132, 84, 4,241,128, 52,113,154,141,170, 44,249,242,
+179, 15,136, 7, 35, 52,150,213,252,150, 82,107, 39,194,171, 10,146,229,204,173, 44,164, 36, 75, 19,140, 49,228,101, 69,228, 7,
+220,222, 92, 49, 61,152,114, 63,155,179,183,191,207,252,238, 14,233, 41,132,132, 50,119, 22, 62, 91, 91, 46, 77,189,130,161, 94,
+ 27, 57, 8,204, 26, 88, 35, 60,143,217,237, 21,195,225,152,243, 71,143, 9, 2,159,249,108,198,120, 52,170,199,213, 30, 82, 9,
+178,213, 10,139, 97, 48, 24,214,201,110,238,222, 84,212,148, 63, 23,223,219,196,226,218, 14,124,198,182,194, 77,175,153, 58,117,
+ 58,113, 37,229, 3, 69,184,236, 48,226, 85,231, 28, 81,109,129,176,126, 92,133,174, 12, 66,168,154,122,167,121,253,245,215,241,
+131,128,213,114,213, 83,187,111,250,207,123,106,120,118,228,131,108, 28,188, 93, 76,108,119,164,222, 54,154, 27,145,169,155,202,
+246,245,153,182,177,178, 20, 59,236,185, 98, 87,138,250,198,124, 82,236, 38,177, 62,148, 17,255, 0, 61,182,183,226, 80,135,167,
+ 14, 19,219, 61,208,121,232,169, 8, 92, 6,111,135, 44,100,155, 76,244, 22, 18, 34,215, 22,182,182, 98,114, 85,156,176,162,245,
+218,118, 31,212,212,226, 54,185,230, 19,244,196,111,237,239,175,214,187,199,230, 64,106,131, 54,234, 55, 73, 55, 53,170,219, 85,
+110, 90,109,214,111,218,245,203, 40,154, 17,142,144, 40,105,217,175,114,170, 98, 69,154, 57, 75, 90,232,251, 28,237, 79,240,164,
+187, 73, 22,101, 65,228, 7, 88,220, 77, 46, 43,139,214,254,230,188,159, 21, 94,171,242,116, 40, 73,107,113, 22, 40,107,241,164,
+219, 75, 5,129,135, 39, 21,195,193,128,178, 42,107, 86,183, 27,167,150,149,166, 40,202, 26,224,160,235,125,173,164,172, 52,190,
+175,200,203,138, 82, 87,232,170, 34,201,115,148, 48,196, 53, 2,210, 42,191,135, 88, 84, 15,196,167, 54,215,209,237,237,188,214,
+ 46, 37, 59,152,213, 32, 8, 90,144,200,166, 5,113,115, 87,188,203,234,246,157,170,247,205,241,124, 83, 96,216,166,214,111,228,
+105,162,115,168, 55,100, 52,197,225,201,137, 67,162, 74,193, 42, 73, 40, 75,119,205, 28,229,202,249,160,203,170,164, 42,115,170,
+102,244,222, 77,144, 51,182, 21, 7,201, 90,104,246,228,241, 19,238,239,111,221,247,231,142, 8,216, 64, 47,162,104,204,120,188,
+207,139,151, 95, 59,194, 95, 45, 52,106,178,180, 27,219,142, 18, 18,171, 43,132, 0,207, 87, 8,105, 81,190,170,119,159,206, 26,
+ 86,212, 66, 74,171, 13,218,106,202,178, 96, 54,155, 49,159,207,201,242, 12,129, 59,164,180, 54, 68, 97,200,209,201, 41,167,103,
+143, 56, 59,127,194,179,215,222,226,252,209, 27,188,246,250,187,188,254,198,219, 60, 58,127,194,249,241, 41,158,114, 10,246,178,
+ 42,200,242, 20,173, 43,134,195, 33,158,146,196,209,128,241,216,137, 11,155,215,121, 48, 24, 56,234, 89, 81, 32,165, 96, 60, 28,
+ 57, 80, 73, 81, 48,158,140, 9,130, 16,173, 43,135,149, 53,198,141, 78,141,117,108,137,118,115,182, 6, 56, 41, 41, 25,196, 49,
+113, 52,102,177, 88,240,201, 71, 31,161,124,143, 31,255,248,143,248,135,127,248, 59,132,112,133, 80,169, 43, 44, 30,231,175,189,
+ 69, 85, 89, 87,144,232,130,101,146, 48, 57, 56,228,237,119,223,227,254,230, 18, 63,138,249,139,255,248,191,243,205,203,151,220,
+223,223, 49, 28, 14, 49,166, 34, 93, 44,200,210, 5,171,229, 10,107, 45, 39,103, 79, 16,194,163, 76, 86, 8,224,254,230, 26,140,
+ 33, 77, 86, 76,246, 38,148, 89, 74, 60,136,177, 70, 99,180,139,225,181,214, 16,199, 3,162, 48,100,122,122, 78,146,205,137,130,
+129, 59, 16,253,208,113,242, 11,183, 94, 75, 22, 51,178, 85,194,124, 54, 35, 77, 50,130, 40,102, 24, 15, 72,210,132, 60, 77, 8,
+131, 24,229, 41,116, 85,146, 36, 41,123,251, 83,146,213, 2,172,102, 48, 24, 17, 69, 17, 89,158,176, 92, 44, 24, 14, 6,164,105,
+206,254,225,148,187,155,107,252, 32, 96, 16,143, 24,140,247,136, 7, 67,151,109,144,151, 88,187,118,106,172, 5,170,245,200,219,
+ 90,226,193,152,187,235, 87, 44,151, 75, 6,227, 9,113, 20,113,115,117,201,104,111,143,178, 42,145,210,199, 86, 5,203,213,138,
+189,253,125,199,139,175,189,233,190, 39, 41,139,162, 46,194, 84,143,123,161,148,172,221, 33,186,142,103, 22, 4,126,176,219,127,
+186, 21,183, 45, 59,126,245, 58,242,215,138,173,123,132, 87, 3,113, 26, 64, 77,163, 27,185,159,205,120,235,157,183, 56, 60,156,
+146, 36, 9, 90,235, 45,220,235, 67,190,244,135,132,193,187, 84,239, 77,151,223, 13,130,217, 36,199,109,193, 94, 58,130,107,187,
+195,135,222, 93, 71,117,191, 91,108,160,111,165,220,116, 32,109, 58,208, 30, 96,175,108, 29,230,125,119,130,247,173,135,120,239,
+ 2,212,251, 59, 91,211,173,228,218, 94,212,100,128, 55, 36, 48,201,218,206,211,118,231,157,138,167,203, 92, 23,117, 85,210, 34,
+245, 58, 86,153,182, 75,219, 1,177,111, 70,126,182,147, 48,166,235, 17,123, 19,109,105,113, 49,157,214,210, 27,237,183,190, 97,
+213,223,175, 91, 99, 92,181, 42,192,211, 37,145,201, 89, 90,218,174,206,117, 98, 2, 97,220,129, 28, 72,201, 48, 26, 48,203, 82,
+215, 33, 27,139,145, 78, 7,160,107,165,117, 89, 85, 4,158, 7, 82, 58, 91, 85,211, 17,154, 70,136, 1,101,165, 41,171, 18,191,
+249, 80, 89,183,223,106,244, 7,210,119, 42,123,149, 67,234,151,220, 47, 87,248,190, 79,178, 90,114, 54,221,231,131,175,190,102,
+ 28, 13, 40,138,148,202, 74,252,106, 73, 24, 87, 40, 52,153,138,209,158,223,102, 11,203, 7,236,107, 46,144,164, 99,233,175, 15,
+239,166,131, 46,139,162,238,248,215,227,239,205, 17,250,174, 81,252, 46,174,252, 67,190,230,110,177,176,126,147,218,181, 43,130,
+ 62, 43,190, 21,106,213, 26,134,217,108,206,244, 96,175,238,142,221,161,153, 23,133,163,167, 85,122, 29, 91,218,196,186,218,254,
+123, 92,235,181,234, 55,205,178,250,198,233, 1, 69,207, 13,225, 7, 33,171,229,130,143, 62,254, 45,123,227, 61,162, 56, 98, 56,
+ 24,113,116,120,140,239,123, 92, 94,188,100,185, 90,225, 7, 1,105,154, 17, 4, 62,131, 56,198,247, 67,246,247, 38, 28, 31, 31,
+ 19, 71, 49,159,126,241, 25,101, 89, 80, 20, 37,195, 65,204,247, 94,127, 29,161, 20, 23,175, 46, 72,235, 67,169,170, 42,110,175,
+ 95, 49,153, 76, 56,152,140,248,230,197,151,252,227, 47,254, 7,121,158, 19,135, 17,167,167,167,188,241,198,155,220,205, 87,204,
+ 23,115,108, 85,162,171,146,225,104,200,120, 60,225,192, 59,224,233,227, 39, 92,188,186, 96, 54,155, 19,142,195,246,119,197, 90,
+103,187,170,195, 91,202,178,100,111,207,117,252, 69, 81, 16,197, 49,126, 24,112,125,115,131,167, 20,199, 71,199,204,230,115,132,
+ 72,200,243,220,233, 5,218,247,207,186, 80, 30, 14,134, 4, 65,200,217,249, 51,226,193,128, 87,255,227,239, 80,210,130,213,124,
+254,217,199, 28, 31,159,112,117,117,193,114,185,228, 39,127,252, 83,146, 85,198, 95,255,213,255,237,178,212,139,140,147,211, 39,
+ 68, 67,167,133,248,224,215,255,200,254,254, 20, 33, 5,255,233,255,252, 63,152,221, 95,179, 88,204, 41,139,156,189,201,136, 52,
+203, 64, 56,100,178,169, 36,243,251, 91,180,177,120,190, 71,165,221,253,167, 44, 82, 68, 24, 16,122, 10, 65,192,114,177,100, 56,
+140, 81,202,199, 84,117,122, 95, 85,145,231, 5, 47,190,250, 20, 42, 67, 16, 69,172,150, 43,246,132, 32, 77, 74,108, 85,162, 86,
+ 43, 12,134,100,185, 34, 79,157,214,101,118,115,205,217, 15,127,204,245,229, 21, 58, 47,200,242,132,120, 48,230,240,232,128,187,
+187, 91,150,179,123,154,152,210,187,155,107, 78,207, 31, 49, 28,239,147, 39, 9,201, 42, 33, 30,141,157,136, 83, 27,138, 44,167,
+ 42,243, 86, 20, 25, 69, 49,209,104, 68,178,152,181, 83,178, 70,141,174,181,193,152, 28, 1, 20, 69,206,222,222, 1,203,229,146,
+139, 23, 95, 51,217, 63,224,228,252, 41,179,197, 29,163,225,136,162, 40,240,227, 17,100, 9,243,217,156,195,227,211, 86,240,231,
+ 66,125,234, 21,147,117,227,114,233,249,238,174,221, 54, 39,101,189,190,116,194, 73,135,132, 13,234,113,124,217,163, 84,246, 63,
+239,178, 13,231,114,204,247,245,160,181,129,100,105,237,236,149,218,104,180, 5,180,192,243,220,218,225,213,203, 11, 94,127,227,
+117,142,143,142,248,242,203,231, 60,255,234, 43,119, 47,214,102, 61,150,111,133,193,157,115, 7,219,219,191,247, 24, 15,155,187,
+117, 54,130, 91,196,195, 96,172,157,145,167,155,226,235, 13,244,248,195, 7, 49, 91,235,197,190, 69,124,243,126, 41,182, 2,211,
+186,218,183,238, 83,245,186,212,160, 93, 88, 88, 81,139,225,172, 53, 53, 16, 70,238,176, 58,173,145,145,178,107, 97,147,178, 85,
+238, 54, 23,207, 8, 23, 68,210, 38,177, 1,202, 56,120,138, 17,160,155,177, 67, 51,222,169,149, 81,186,211, 89, 55, 99,250,110,
+164,100, 51,170,109,114,158,155,223,208,200,174,199, 80,244, 40, 88,162, 19, 63,217, 88,148,172, 49,248, 82, 50, 50, 9, 24,131,
+209,150,210, 56,133,125,105, 12,121, 89, 16,123,161, 83,138,170,128, 81, 28,145, 21, 21,202, 23, 40,161,208,149, 69,248, 10,107,
+ 43, 16, 80, 25,141, 47,124,140, 94,167, 29, 89,108,219,205, 33, 4,126, 61,253, 48, 70, 19,171,128,133,206,214,201, 87, 24,116,
+141,234, 44,107, 11,200,170, 40,137, 81,164,133, 97, 92,179,185,157,128,201,226, 33,208,126, 72, 82, 24, 2,147,226,123, 26,107,
+ 98,172, 23, 98,154,169, 65,125,173, 76, 83, 4,117,108, 18,109,193, 35, 93, 69, 33,235,199,111,253,212,181,166,193,108, 6,179,
+ 60, 32,144,123,200, 39,191,243,123,186,246,182, 46, 41,173,219, 13,116,246,238,198, 24,124,229,161,181,102,181,152,227,237, 31,
+ 18,250, 65,109,215,113, 7,189,167,188, 54, 12,165, 72, 75,164,240, 17,194, 34,240, 64,148, 61,134,157, 75,173, 82,109, 64,202,
+108,126,223, 78,127,154,170, 90, 41,133,213, 37,133,118, 66,200, 60,203, 48, 70,163,148,207,114, 53, 39,142, 6, 76, 15,143,152,
+ 30, 28, 56, 91,102, 61,122, 92,174, 22, 60,121,252,152, 40, 8,120,117,117,197,112, 48,224,254,230,146,171,171,107,134,163, 33,
+121, 54,224,179,207, 63, 71, 2,121,158,214, 55,188,186, 67,171,137,119, 74, 74,132,242,208, 85,217,190, 78, 47, 47, 94,242, 79,
+191,252,167, 58,152,198,180,215, 78, 41,201,201,241, 25,199,199, 39,252,205,223,253, 29,105,178,114, 66,183, 90,217, 60, 61, 56,
+224,205, 55,223,224,230,246, 22, 33, 4,135,135,135,156,159, 63,162,170, 74,202,210, 48, 30, 11,242, 34, 35, 75, 19,206,142,143,
+152,205, 23, 84, 90,179, 55, 26, 59, 60,173, 49,148,182, 68, 87, 14,148, 84, 85,165, 83,214,123,130, 97, 60, 70, 96,185,186,186,
+224,242,242, 21, 97, 16,241,236,245,239, 49, 24,132,132, 97,200,106,149,112,117,241, 13,111,190,251, 46,159,125,246, 49, 55,151,
+ 87,228,201, 2, 83, 20,156,158, 62,230,248,252, 49, 31,254,243,207, 56, 62, 57, 71, 87, 25,215,215,215, 60, 14,125,110, 94,189,
+ 96,149,101,232, 34,175, 59,225,132,195,211,115, 60, 79,113,115,125,129,167, 2,116, 85,178, 90, 46, 81, 97,204,159,252,219, 63,
+229,249,231, 31,145, 37,115,178, 60, 37, 26, 31,241, 7, 63,248, 17,194, 24, 94,190,250, 6,163, 13,171,131, 91,252,208,231,238,
+250,150,215,143,206,248,213, 47,254, 59, 69,238, 66, 80,130, 48, 36, 79, 23,181,166,162,194, 23,146, 50,207, 72, 23,203,246,208,
+202,211, 21,191,253,197, 63, 80, 84, 5, 85, 85, 58, 61,198,106,134,169, 50, 6,163, 9,152,202,237,197,165, 32, 12,124,238,111,
+ 46,137, 6, 35,252, 48,164, 42, 92, 7, 44, 61,143,120, 56, 98, 56, 30,177, 92,204, 88,206,239, 49, 90,147,234, 10, 63, 26,224,
+ 5, 33, 85,225, 98, 74,149,114, 5,162,197,186, 14,214, 88,164, 53,220,223,220,225,249, 30, 81, 13,160,185,189,185,226,248,228,
+172,254, 12, 56, 43,219,120, 50,165,170, 42,202,170, 36, 8,195, 26,238, 21, 56,129, 31, 56,118, 60, 2, 41, 75,180,172,192,106,
+ 71,160,107,195, 91,108,235, 99,111, 28, 0, 74,249,117, 49, 92,186,200, 99,217, 4,196,168, 13,202,104,205, 35, 17, 29, 74, 93,
+173, 39,113,130,204, 90,199, 99, 12,165, 41,241,125,143,251,187,123, 86, 39, 9,227,241,136,183,223,125,155, 39,143, 31,243,155,
+223,254,150,217,108,238,116, 50,117, 35,213,222, 75, 68,167,209,236,106,199, 54,133,114, 29,103,214,183, 82, 53, 55,232,163, 59,
+181, 73,157,201,226,183, 29,226,155,186,160,237,102,218,238,116, 8,245, 15,244, 93,137,168,219, 63, 71, 29,158, 62,122,255, 97,
+ 90,156,172, 5, 85,118,171,250, 88, 43, 5,109, 59,122,183,157,202,168,151, 65,107,233, 97, 76, 27,118,118, 27, 21,183, 54,145,
+119, 20,128,245,155,161,229,180,119, 84,133,205, 65,220,236, 44,186, 7,129, 16, 91,170, 98, 54, 2, 53,122, 83,130, 78,183, 40,
+235,245,129, 18,134, 65,153, 98,117,201,170,200, 89, 36,153,251, 96, 2,161,130,201,100,236, 60,194,202, 99, 58, 30,178, 76, 82,
+164, 39, 73,139,178,174,100,235,174,178,158, 2,248,158,215,243, 69, 87,218, 80, 20, 21, 65,224, 35,235, 73,133,239,121, 68,129,
+ 79, 28,134,228, 85, 81, 39,135, 81, 43,233, 93, 39, 47, 85,157,237, 94,143,221,242,170, 32,240, 61,238,150, 43,192, 18,251, 33,
+171, 44, 35, 8,125,244,112,159, 82,248, 88,229, 70,109, 86, 42,247,193,169,199,233, 93, 65,135,106, 89,252,107,101,166,177,235,
+ 67,162, 9,115,232,178,240,237, 3, 98,184, 7, 45,107, 15,128,104,196,239,178,131,218,252,185, 53,204,195, 26,139, 31,134,196,
+131, 1,167, 71,199,220,220,222, 56,127,175,181,248,190,135,174,156,158, 65, 87,110, 12, 94,149, 85, 47, 71,218,152,198,106, 83,
+239,249, 0, 21,132,156,157,158, 97,180, 38, 73, 19,202,220, 77, 42,226, 56,198, 8,159, 31,253,232, 39, 76,167, 71,174,211, 80,
+ 62, 74,194,108, 54, 39, 30,196,124,252,201,135, 92, 94, 95,241,252,249, 23,124,249,197,167,124,253,213,151,220,221,222,113,125,
+123,203,245,221, 45,201,114,201, 7, 31,252,150,187,217,140,225,104,200,222,222, 1, 79,159, 60,115, 29,168,214,140, 70, 19, 60,
+233,113,119,123, 71, 89, 85, 12, 6, 67,103, 97,146,158, 83, 92,235,202,237,185,107, 87,133, 54, 27,255, 94,186, 21,206,114, 49,
+227,242,242,130,197, 98,193,114,181, 98,185, 88,146,164, 25,101,153,115, 63,191,231,249,243,231,124,243,205, 75,238,238,238,120,
+254,252, 75,190,252,242, 57, 55,119,183, 88, 11, 71,135,135, 72,225,194,109,156,186,217,221, 8,155, 93,123, 19,199, 90, 85,149,
+ 91,117, 52,186, 20,165, 24,196, 3, 84,232, 19,120, 1,195,225,132, 39,207, 94,227,228,244,140, 95,252,236,103, 24,235,172, 86,
+ 74,121,228, 89,198,211, 71,103,220,222,221,114,246,248, 77,103, 3,155, 76,248,234,179,143,176, 72,242, 34,225, 95,253,235, 63,
+229, 63,252,249, 95,112,117,125,197,217,147,215,240,253, 0,207,115,130,200,192, 15,200,107, 48,142,146,146,103,111,188, 77,154,
+103, 76,246,167, 76, 15,143,120,241,229,231,188,250,230, 11,116, 85, 16,135, 62,215,151, 23,124,245,229,167,188,186,188, 64, 10,
+197,139,175, 62, 38, 77, 83,138,220,176,183,127,192,243,231, 95,162,176, 20,121,201,193,209, 9, 40,143,170,116, 69, 91, 24,134,
+ 20,149, 38, 75, 19,116,165,235, 73,161,219,125,151, 69, 94,199,209,202,118,130,232,162, 86,115, 38,211, 19,138, 60,119, 96,151,
+ 58, 24,167, 44, 11,178, 60, 39, 30, 14, 72,146,165, 35, 87, 6, 1,201,114,197,104, 52,102, 52,158,184, 4,179,178,196,148, 5,
+195,241,190, 75, 8,172,111,166,101, 89, 82,150, 85,175,160,150, 10, 42, 93,145,165, 43,180,214, 68, 81,196,205,245, 37,135, 71,
+ 39,117, 1, 92, 81,150, 21,123,251, 7,120, 53,170,182,177,191, 33,234, 72,226, 90,152, 25,248, 1,198, 26,103, 93,172, 53, 20,
+ 94, 13,208,169, 61, 66,110, 13, 91,139,103,221, 61,163,155,242,214, 76,109,250, 86,232,102,232,170,164, 11, 49,106,238, 43, 77,
+115, 99, 59, 93,119,115, 64, 45,146, 37,143, 31, 61,170, 67,123, 70,188,254,250,235,132, 81,196, 98, 62,223, 98,172,111, 89,190,
+100,223,111,190,137, 27,239,218,175,119,209,233,196, 67, 25, 21,157, 17,252,182,165, 79,110,228,168,244, 15,225,102,164,190, 41,
+ 74,223, 28,211,175, 11,169,205,149,248,238,253,122,215,153,160, 14, 79,207,223,223, 94,250,175,115,156,155,253,183,148,114, 35,
+208,197,174,237,101,182,111,177,233,222,176, 77,125, 32,183, 9, 91, 29,235,152,221,176,178, 53,233, 56,107,127, 97, 93, 4,200,
+141, 23,162, 59,190,237,240,165,177,125, 6,122,119,212,188, 21, 62,177,163,136,177,245, 1,230, 89,131,151, 47,209, 85, 65,146,
+ 59, 11, 90, 89, 57,145,147,242,224,112, 60, 6, 1, 70,107, 70, 81, 76, 97, 42,132, 80,100, 85, 78,146, 23, 45, 10,177, 81, 98,
+ 54,187,198, 82,107,140,133, 82,187,188,103, 37,107, 20,173, 82,196, 81,132, 0,130, 32,194, 74, 81,179,144, 53, 86, 8,170,218,
+ 31,172,148,155,123,248,158,135,176,130,172,204,241, 60,159,249, 98, 65, 89,106,246,134, 35, 42, 83,145,101, 57,158, 23, 98, 7,
+123, 88, 63,196, 42,223,121,216,235,131,219,238,176,146, 53,164,181,230,242, 54,100, 48,187,129,128,180,205, 24,240, 59,194, 96,
+ 30,130,219,124, 43,160,102,135, 26,126,119,113, 32,214,215,181, 22, 89, 90, 99,152, 30, 30,115,116,112,192,124, 49,167, 40,114,
+140,177,237, 46, 50, 8, 66, 76,237, 75,175, 42,167,140,110,188,180,205,141,168,185,233, 90,235,244, 27, 79,158, 60,193, 24,195,
+108, 62,171,189,227,212, 55, 60,193,151, 95,125, 73,158, 38, 92, 95,190,226,246,254, 14,173, 75,238,239,174,249,230,226, 37,101,
+ 89, 80, 22, 57, 73,146,184,206,163, 44,201,243,140,213,114,193, 98, 62,227,230,230,154, 52, 77,200,178,148, 44, 73,152,205,102,
+124,250,233, 39,220,222, 92, 51,159,207,152,207,103, 28, 28, 28,242,236,217,155,100, 89,202, 42, 89,213, 35,245, 1,167,167,143,
+ 56, 57,123,196, 42, 73,120,235,173,183,249,254,239,189, 71, 20, 71, 28,236, 79,121,246,250,155,188,246,218,247,144, 18,142,166,
+ 83,158, 61,125,198,123,223,255, 1,239,189,247, 3, 0, 46,111,175,193, 88,138,162,132,122,173,228,130, 68,114,178, 60,101,177,
+156,115,123,123,203,203,139,151,124,242,233,199,252,250,215,191,230,195, 15, 63, 36, 73, 18,164, 80,188,254,198,107,120, 82, 80,
+ 25, 87, 16, 57,175,181,114,137, 95,110,214,132, 69, 48, 24, 77, 40,138,138,171,203, 87,148, 85, 78,154, 44,249,205,175,127, 73,
+158, 44, 57, 61, 61,225, 47,255,242,127,227,235,175, 62,231,207,255,252, 47,185,186,185, 99,178, 63,229, 31,127,241, 51, 22,203,
+185,187,121,239, 31, 82,230, 43, 14, 79,207,136,227, 1,255,239,127,251,175, 12,134, 19, 38,123, 7,124,250,225,111,184,189,189,
+ 70,121,138,213,106, 78,186,156,147, 37, 75,124, 79, 49,220,155,242,226,249,231, 36,243,123,110,175, 47, 89,101, 41, 18,203,222,
+100, 8,202, 35, 47, 5,105,186,100,113,127,143, 21, 46,254,243,250,242, 37,249,114,201,139,175, 63, 39, 91,185, 64,160, 32,240,
+185,191,191,197,154,170,221,247,166, 89, 82,239,184,139, 90, 27,179, 6,251, 24, 83, 43,210,195,144,241,120, 76, 89,148,132, 65,
+132,174, 44, 85, 89, 50, 24, 14, 40,242, 2,163,203,118, 45,103,170, 10, 83, 85,248,210, 39, 93, 45,137, 71, 99,130, 32,224,246,
+234,165, 75,206, 11, 2, 38,123,123, 12,134, 35,198,147, 3,172,133, 50, 75,107,214,194, 58,100,106, 77, 56, 19, 45,129,206, 69,
+189,106,162,193, 16,223,243, 9,195, 16,131,165, 42, 11,151, 56, 24, 13,106, 45,132, 68, 73,175, 86,161, 43,172, 17, 14,204,100,
+ 52,126,224, 59,199, 77,227,254,176,198,165, 25,118, 84,220, 78,181,222, 8,230, 84,219,133,175,215,123,238,218,108,250,202, 69,
+139,114, 93,223, 35, 85, 45,212,149,178,249,108,187,199, 43,178, 28, 95,249, 76,198, 99, 71, 53,244, 20,167, 39, 39, 60,125,246,
+148, 66, 87,164, 73,210,102, 65,116,249,235, 61,203,218, 38,172, 6,209,167,203,137,221,214,222,222,185,216,163, 36,138,222,129,
+222,109, 24,173,221, 22,152, 55,250,154,117,242,169,248, 14,177,155,224,219,110,147,162, 22, 64,175,197,116,253,160, 53, 79,108,
+ 4,158,244,118, 12, 29,195,127, 59,222,104,119, 21,162,247,226,174,247,162,235,155,175, 49,102,157, 99,222, 24,228,233, 11, 12,
+186, 35,116, 83,251, 77,117,131,162,108,124,235,221,206,174, 27, 26,209,233, 30,155,155,110,151,171,221,132,181,244,162, 8, 30,
+160,172,117, 31,223,104, 77,158,151, 72,219,247, 75, 90, 44, 85,101,200,106,175,167,167,156, 63, 61, 10,124, 22,105,198, 32,136,
+184,183, 43, 87,229, 74,217, 86,236,221,231,209,236,130, 74,173, 9, 81,245,155,132,118,183,174,181, 70,225,186, 32,165, 20,182,
+ 62,220,155,113,124, 85,185, 78, 31, 91, 81,232,138,178,112, 9,112,121,161, 41,247, 52,161,239, 99,173, 65, 47,239,145,210, 67,
+ 15,247, 90,239,127, 79, 44, 88, 95, 87, 99,129, 90,132,178,182,161,208, 75,193,115,222,123,211,217, 64,213, 81,168, 59,222,121,
+191, 83,204,234,230, 8,126,211,202,177, 49,226,234,237,223, 59,182, 26, 99,113,209,147,190, 71, 90,228, 4,171, 51, 14,171, 0,
+ 0, 32, 0, 73, 68, 65, 84,129, 3,122, 84,149,174, 61,214,126,155, 94, 86,105,103,243,170, 76,209,255, 49,157,159,161,181,251,
+190, 60,207,241,124,175,102,163, 59,100,177,181,134,155,155, 27,164,148, 92,220,223, 16, 4, 33, 7,123, 19,230,171, 37,167,103,
+207, 40,202,156,197,236, 22,109, 12,147,189, 9,121,154,145,165,169,243,199, 87, 46,209,173,251, 73,211,149, 11,241,168,180,174,
+133,144,110,162,240,233,167, 31,184, 40,213,122, 74,230,121, 30,215,175,174,184,124,121,129, 84, 10, 79, 74,126,249,203,159,215,
+174, 13, 15,207,247,217, 63,152, 82,228, 5,105,186,106,221, 36, 65,224,198,163,143,206, 31,243,238,187,239,145,172,230, 4,202,
+ 39, 30,196,248,158,207,114,181,226,197, 55, 47,208, 85, 69,109, 74,162, 42, 75,150,245,117, 18, 86,242,252,197, 11, 94,188,252,
+134, 95,253,246, 55, 20,105,130, 84, 62,143, 31, 63,194,247,125, 78,142,207, 81, 94,128, 65,115,127,127,199,253,237, 29, 31,127,
+240, 91,110,111, 94,241,218,219,239,113,115,121,193,254,209, 41,165,214,188,246,206, 15,249,241, 79,254,152,187,187, 25,149, 81,
+252,167,255,252,159,145,162, 64,121, 62,139,249, 61, 89,150,163,203, 10,109, 94, 97, 76,201, 96, 52,224,131, 95,253, 35,209, 96,
+200,217,163,167,252,237,127,251,175, 44,238,239,208, 69,206, 60,207, 24,141, 6, 96, 28,114, 84, 5, 49, 85,165,241,164,160, 52,
+146, 71,207,222,172, 67,123, 50,194, 40,230,224,232, 8, 37, 61, 62,255,248,183,152, 82,243,234,249,151,132,195, 33,211,227, 51,
+146,249,141,139, 39, 85,170, 29,181, 55,125,163, 82,142, 15,177,127,120,198,237,213,133, 43,180,123,239,201,230,159,154,162,102,
+151, 75,165, 40, 75,135, 94,245,124,207, 9,216,226, 1,203, 85,213, 58, 5,168,119,225,186,170, 8,194,144,249,221, 53, 71,199,
+167,236, 29, 28,113,119,123,139, 95,185,200, 87,107, 97, 56,206, 57, 58, 58, 38,142, 7, 92,188,120,142,164,190, 63, 74, 73, 28,
+ 15,107, 61, 68,230, 38,126,113, 68,150,229, 20,185,131,225,152,178,226,228,209, 99,226,104, 72,154,164,148,101,201,114, 57, 99,
+ 60,217,195, 83, 65, 91,208, 42,229, 17,134, 18,139, 35,187, 57,212,178, 89,231,139,215,170,248,178,200,123, 66, 51,223,247,218,
+207,177, 18,170, 78,254,163, 45, 60, 84, 29, 93,108,140, 19, 4,119, 71,205,107, 45,148,198,150,245,212,173, 6,210, 56,119,131,
+187, 7, 62,255,234, 57,147,201,136,225,104,220,174,161, 38,227, 9,255,230, 79,254,132,203,215, 47,249,197, 63,253, 19,171,229,
+170, 14,104, 90, 79, 68,233, 34,150, 69,255, 30,179,158,102,247, 15,241,230, 5,109,108,211,118,147,223, 97,237,142, 20,209, 93,
+ 8,245,254,196, 98,157,128, 39,118, 80, 50,127,247,191,196, 14,218,102,107,105, 59, 58,125,244,126,143, 4, 39, 55, 18,113, 58,
+130,131,245, 78,123,187,211,149,117,176,125,155,243, 84, 87, 13, 77,134,121, 71, 18,216,166,239, 88, 33,182,198,242,221, 10,184,
+ 23, 83,199,118, 58,148,232,116,250, 91,104, 62,250,170, 69, 54, 42,175,222, 11,216,137, 87, 53,214,162, 4,232,197, 45, 10, 65,
+169, 43,178,188,162,212,110, 95,164,168, 59, 20,233,198, 84,101,165,137,253,128,172,112,234,232, 89,146, 56,232, 76,173,202, 55,
+181, 66,184,161,203, 85,117,199,159,229, 69,253,179,164,243,164, 6, 62, 22,131,231,249,142,219, 92, 21,200,186, 66, 46, 42, 87,
+ 24,116,255,124, 89,150, 24, 43, 8,125,143,251,229, 10,139, 64, 73,136,131, 0,132, 32, 47,114,124, 12,194,243, 49,126,236, 38,
+ 33,245,248, 93,214,187, 94, 79,121,219, 33, 8,221, 81,183, 93,119, 5, 61, 23,193, 78,253, 69,127, 42,242, 59,197,175, 62, 36,
+ 76,233,220, 0, 69,199,110, 98, 59, 66,146,230, 57, 75, 1,251,211, 41, 65, 16, 80, 21, 37, 6,227, 60,212, 77, 60,169, 20,100,
+121,142, 54,110, 95,222, 5, 2, 89,187,238, 56,154,195,223,243, 61, 55, 10, 29, 14,185,189,189, 69,116, 87, 95,158, 98,190, 88,
+214, 97, 41,146, 36, 89, 81, 85, 37, 69,153, 49,155,223, 99,235,180,173,170, 44,235,116, 51,214,182,175,250,242,185,159,109, 90,
+145, 81, 51,110, 67, 42, 39,220,210,206,194,228, 4, 81,238,123, 53,198, 61,110, 85,145, 21, 69,189,111, 7,109,221,239,154,231,
+ 25, 69,150, 82, 20, 69,157,157, 93,146, 37, 25, 85, 85,114,123,123,205,213,229, 43,230,179, 25,247,179,123, 46,175,174,184,186,
+189, 65,120,138,243,179,115,246,247, 15, 24,143, 39, 60, 58, 63,231,232,248,152, 71,103,231, 76,247, 15,184,124,117,137, 31,122,
+ 40,223, 35, 10, 35,100,157, 43,126,115,123,195,237,237, 29, 47,190,254,138,175,190,126,206,114, 54,199, 26,195,245,237, 53,175,
+ 94,190,160,170,211,194,178, 44, 99, 56, 28, 19,132, 3, 86,139,123, 62,250,240, 3,150,203, 37, 6,184,126,117,193,217,217, 35,
+158, 62,123,147,197,114, 69,186, 90,160, 45, 60,123,237, 53,230,243, 57, 81, 20, 19,199, 17,179,249, 61, 81, 8,139,217,146,104,
+ 48, 36, 89,206, 17, 8,170,170,172,117, 57, 6, 79, 73,110,175,175,169,202,148,120, 48,226,236,236, 17, 95,126,246, 9,201,242,
+158,170,204,184,120,241, 37,215,223, 60, 39,138,199, 84,214,160,164, 33, 73,150, 4,210, 21,113,123, 7, 83,231,127,215,238,243,
+ 25,199, 81, 43,200, 29, 79,166, 24, 43, 81, 86,147, 36,171, 30,108,165,121,253,132,168,225, 68,149,139,166,221,223,223,119,201,
+140,105,194,104, 60,102, 49,191,103, 48, 24, 56,197,185,239, 17, 13,134,132,241, 16,173, 75, 76, 89, 58,247, 74,178, 34,136, 98,
+ 4, 22,165, 92, 52,106,150,164, 84,121,194,253,253, 29, 0,131,193,168,221, 99,171, 22,180,226, 80,194, 69, 86, 31,196,202,125,
+206,195, 40,100,181, 92, 98,208,132, 81,228, 10,198,178,112, 74,254,178,108,197,164, 13, 83,195,104,183, 58,244,234, 60, 0,223,
+115, 99,122,165, 84,173, 9, 18,132, 65,216, 30,156,205,116, 0,220, 46,188, 33, 50,118, 27, 59, 7, 75,146, 45,235, 65,213,212,
+203, 46,222,148,110,134, 0,174, 72,119, 5,129, 43,106,203,210, 61,175,253,189,189, 90,137,239, 49, 28, 12,241,189,128,233,116,
+159,183,223,250, 30, 22, 7,239,217,178,187,117,238,247, 2,182, 58,112,185, 11,138,213, 82, 52, 55, 0, 81,157,169,200, 26,163,
+ 43, 58, 19, 97,185,211, 10,190, 57, 62, 95,119,246,114,235, 96,223,164,186,174,167, 30,245,121, 42,215,193,104,219, 93,126,141,
+228, 61, 58,123,252,254, 38, 67,183,139,116,221, 52,235, 99, 55, 83,103,100, 93,223,219,118,212,222, 30,170,178, 17,186,245,115,
+177,187,104,215,238, 1,209,189,232,118, 35,241, 6,182,233,115,155, 47,144,221,129,139,125, 8,133,186, 57, 62,233, 29,104, 64,
+ 49,187,197, 23,174, 3,204,235,124, 99,223, 87, 8,235,142,149,189,209, 0,141,192,147,170, 78,238, 18, 40,207, 39, 45, 50,146,
+162,112, 2,169,250,102, 46,133,170, 87, 9, 22, 93, 57, 33, 95, 94, 58,102,188, 95, 91, 72,226, 56,116, 89,202,198,214, 42,211,
+178, 61, 80,181, 53,104, 99,169,180,198,151, 30,202,115,100, 51, 99, 44,131, 56,100,190,202, 16,128, 39, 85, 13, 47,113,147,149,
+178,172, 8,133, 70, 6, 49, 70,249,237,184,171, 65,124,110, 42, 86, 91,223,105,151,112,214, 69, 4, 75,241, 32, 22,214, 62, 56,
+ 42,223,238,226,191, 45,207,189,251,126,144, 86,244, 68,171,178,254,255, 70,180,199, 58,170,161, 54, 33, 24,140,198,140, 6, 35,
+ 60,165, 72,107,171, 18,214,137, 11,253, 26,180, 98,172,187, 1, 87,122,125,168,187,235,220,221,249, 59,165,111, 24, 69, 28,236,
+ 31,112,125,115,133, 87,187, 23,180,214,220,207,102, 88, 93, 57, 56, 72,253, 53,112, 57,228,182,190,217, 53, 31, 88,207,243, 92,
+ 50, 87,237, 47,182,181,127,157,206,180,161,153, 32, 24,107,208, 90, 83, 22,133, 75,208,234, 60,167, 40,142, 9,194, 33, 86,152,
+ 26,121,107,218,207,226,104, 56,100, 56, 24, 33,132,106,111,122,206, 2,167,137,135, 3,132,167, 8,163, 24, 93,150,109,144, 77,
+243,250,103,105, 74,150,101, 4, 65,204,171,235, 87,220,222,222,112,125,125,197,237,236,158, 36, 77,249,209, 15,127,200,155,175,
+191,197, 31,254,193, 79,120,246,248, 9,191,255,251, 63,226,135, 63,248, 33,167,199,167,204,102, 51,198,227, 17,127,240,195,223,
+103, 60, 25,243,233,103,159,241,217, 39,159, 33,165, 32,207, 51,246,246,247,209, 70,115,117,121, 1,104,150,203, 37,161, 23,128,
+ 82,124,246,255,179,246,102,189,146, 36,105,122,222, 99,102,190,198,122,246,220, 51,171, 42,107,237,233,158,158, 25,129, 67,145,
+ 0, 5, 2, 18, 68,137,146, 40,232, 66,208,223,169, 31, 38,128, 23, 18, 1,174,226, 76, 47,211,211,221,181,103,101,229,114,214,
+ 88,125, 49, 55, 51, 93,152,185,135, 71,156, 56, 89,213, 67, 38, 80,168, 92,206,137, 19,139,187,153,125,223,247,190,207,251,205,
+183,252,236,147, 79,168,173,225,225,147,143,248,207,255,233,223,163,235,146,251, 15,159,240,250,205, 43,156, 46,113,194,240,228,
+233,251, 60,120,244, 30,200,132,241,244,144, 31, 94,190,224,225,189,251,212,117,197,112,152, 51, 24, 12,137,162,132, 52, 27, 83,
+ 55, 21, 85, 85, 19, 39, 57,179,155, 75,138,213, 18, 41, 29, 38,140, 88, 6,163, 41, 82, 70, 56,171, 25, 14,125,120,210,193,225,
+ 1,149,174, 40, 10,223,225,113,214,145,103, 3,210, 44, 13,155,144,162, 44, 43, 46,206, 95, 83,172,151,157,245,113,247,186,142,
+162,144,132,103,124, 50,155,174, 75, 34, 37,145,137,167,248, 21,171,101,184, 78,156, 79, 73,171, 52,214, 56, 6,227, 9, 73,150,
+ 83,213,254,122, 77, 18, 47, 92, 43,171,130, 56, 29,240,240,201,251,100,195, 33,197,114, 65, 89,174,209,186, 4, 33, 56, 58, 60,
+102, 62, 95, 96,106,239,153, 55,109, 39,205, 17,210,226,252,245,145,166,158, 54, 23, 69, 17,167,103,247,252, 99,132, 14, 65, 93,
+173,125,146, 97,234,227, 87,163,208,169,240,140, 3, 15,134,137,226,212,103, 25,132, 14,150,117, 94,173, 46,216,172, 37,237, 1,
+ 71,132,217,251, 22,220,201, 57,132, 80, 91,236, 6,217,131,127,245, 25,243,214,217, 0, 53,235,217,221,130,114,126,177, 88,146,
+103, 41,147,241,216,175,207,129,251, 33,112,100,105,202,147,199,143,121,250,228, 49,243,249,156,170,174,182,168,119,187,145,211,
+125,150,194,166,115, 41,187,113, 94,127,230,125, 11,224, 42,196, 45,116,122,191,165,222,230,190,239,182,218, 69, 15,106,214,111,
+153,239, 35,185,138, 29,130,221, 46,255,253,199,126,169,211, 7,143, 62,223,246, 44,111, 4, 3,174, 39,130,219,187, 88,139,150,
+148,179, 33,225,244,197, 0,125, 65,219, 86,208,251, 46,219,187,223,222,216,217,192,183,232,103,189, 13,126,175, 32,171,103,197,
+234, 51,197,119,255,189, 31,114,225,110, 5,101,248, 19, 71, 61,191, 33,114, 6,139,175,148,117, 32,192, 73, 33, 48,206, 48, 30,
+ 12, 54,237, 98, 9, 89, 20, 83, 7,200,204,178, 40,186,121, 78, 39, 50,147, 97, 76, 16,132,111,198,134,205, 38,248, 77,179, 56,
+ 38, 86, 81,168,218,124,101,223,182,238, 29,208, 24, 63, 43, 83,225, 98,106,137,116,177, 82,204,215, 85,184,184, 19,100,164, 80,
+194, 31, 54,138,170, 34,143, 35, 18, 5,100, 99,154,214, 25,208,211, 23,244, 49,141,173, 34,190, 29,103,184,157,175, 19,251,236,
+169,123, 54,248,253,123,245,221,214, 55,238,208,128,246,231,255,221,130,213,227,218, 11, 54,180, 53,235, 44,131,225,136,201,116,
+ 74,150,196,172, 2,133,175,174,170, 45,139,136,105,250,193, 46, 97,166,110,217,130,234,180, 35,161,241,228,128,233,116, 18, 42,
+ 0,207, 25,168,117, 77,177,246,143,221,175,246,187,113,147,219, 8,238, 60,158,214,171,130, 93,103,241,220,121, 95,108,247,195,
+183, 25, 11,225, 58, 86, 50,176,220,235,154,170,244, 10,232,118, 83,246, 36, 47, 67, 89,149, 20,197,202,183,221,237,230,121, 17,
+ 64, 52,117, 85,121, 47,114,103, 73, 12,135,197,198,208, 52,154,178, 44,184,190,190,192, 26,199,112, 60, 37, 73,115,148,140, 40,
+171,154,217,124,134, 19,146, 95,255,234,111,249,237,239,126,203, 31,254,240, 7,190,250,230, 43,234, 90,243, 47,255,231,255, 21,
+169, 98,190,123,249,146,183,111,222,240,155,223,254,138,213,114, 65,154,229, 56,103, 25,143, 70,200, 40, 38, 82,138,198, 88,198,
+227, 3, 14,142,143,121,245,234, 7,242, 60,103,185,152,241,230,213, 15,188,126,253, 61,215, 87, 23, 52,186,241, 12,114,163, 73,
+211,156,179,251,247,120,242,248,125,190,249,234,119,164, 73,202,239,126,251, 43,234,178,160,172, 10,242, 97, 78, 62, 26, 81,149,
+ 53,113,156, 50,187,185,160,169, 52,247, 30, 62, 98, 52,153, 50,187,122, 75, 99, 60, 24,106, 52, 57, 98, 60,158,176, 92,205,176,
+117, 69, 83, 87, 12,134, 67,178,108, 64, 50, 24, 19, 39, 25,117, 89, 96,234,130, 52, 29, 4,157,134,255,188,138,162,160,152, 47,
+112,166,233,172,144,237,129,104,195,246, 87, 93,149, 78,207, 78,101,140, 1,107,136, 98,143, 93,213,186,234,173, 57, 14,103, 27,
+116, 85,122,246, 68, 18,211,232,198, 11,104,211, 4, 93, 87,212, 85,193,252,250, 2, 39, 28, 7, 7, 71, 68, 73,236, 41,107,166,
+166, 40, 43,226, 44,195, 4, 1, 93,235, 54, 82,173, 48,214,181,192, 26, 47, 34,172, 10, 47,230, 59, 60, 58, 97,189, 90, 98, 77,
+133,181, 26, 93,149, 84,101,129,181, 58,160,100,227, 45,113,172,179, 22,164, 36,137,211, 46,110,216, 5, 13, 65,187,198,251, 60,
+ 1,213, 85,159, 27, 62,136,235,249,191,183, 57, 25,155, 10,157, 14,125,220,222,131,109,128,139, 9,152,109, 33,252,123, 91,148,
+ 37,227,201,196, 67,187,146,184,187,206,155,208, 69,157, 78,167,124,250,201, 39, 12,242,156,235,235,155,174, 67,183,141,184,149,
+219,156,246,221, 76,134, 30,226,124, 83, 33,111,207,188,219,145,194, 62, 84,107,159,193,190,251,189,187,170,247,254,207,216,142,
+ 95,221,142, 59,183, 93,231,251, 86,138,250,222, 49,178, 58,185,247,224,243, 45,203, 80, 63, 14, 85,128, 21, 2, 39,219, 40,235,
+158,215, 92,108, 22, 88,217, 35,199,109, 69,224,137, 13,199,125, 43,131,123, 87,128,176, 11,148,233,219,212,118, 15, 4, 59,129,
+ 31, 91,167,175,222,233,143, 61, 39,171,189, 27, 74, 79, 92,215, 86,170,210, 65,181,184, 33,178,218, 87, 70,134, 0,128, 9,226,
+132,144, 50, 20, 69, 50,180,123,107,210, 36,101, 89,174,137,227,136,197,218,207, 6, 85, 20,170,245, 62, 34,176,219,172,131,136,
+ 4, 65, 18,218,225,121,150, 97,157,223,200, 35,229,193, 51,173,162,217, 9,137,174,117,152,113,249,118,177,138, 4, 77,171,124,
+118,134, 36, 73, 72,218, 25,176,104,209,181,134, 65, 20,129,140,176, 81,130,108, 1, 42, 93, 55, 69,110, 57, 4,218,138, 92, 73,
+117, 43,170,214,237,232, 19,246,217, 47,222,181, 97,255, 73,195,162, 77, 93,187,213,197, 49, 61,107,135, 12,218,190, 56,242,175,
+ 53,138, 99, 38,147, 3, 38,163, 33,171,245, 26, 1, 44,151, 43,226,128, 62, 77,147, 4, 93, 85, 88,139,239,152, 56,131,181,155,
+249,223, 22,209, 73, 72, 70,227, 17,195,225,152,186, 46,168,171, 10, 37, 37,101, 81,110,161,101,251,215, 91, 91,241,251,245,212,
+ 32,148, 98, 56, 28,128, 84, 56,172,231,209,247, 94,205, 22,175,161,151, 52,213,249,225, 67,232,134,107,173,151, 97, 83, 30,140,
+199, 76,167, 71,216,208,133,112, 29, 25, 79,108, 97, 60,165,148,189,120, 89, 75,146, 14, 56, 60,185,199,217,253,167, 60,124,242,
+148,170, 46,208,218,240,179,207,126,206,228,224,136,203,171,183, 44,102, 55,172,150, 11,138,178,228,224,224, 16, 93, 55,140, 71,
+ 67,150,203, 57,127,254,139, 95,240,222,179,247, 89,172,150, 56, 33,248,219, 95,253,154,255,239, 63,254, 59,192,241,213,215, 95,
+114,125,125, 73,173,107,202, 98,205,225,193, 1,203,117,201,131,251,143,176,182, 6, 20, 63,251,197, 95,240,237, 87, 95,114,112,
+ 56, 33, 73,114,158, 61,251,128,197,122,193,100, 52,226,205, 15, 47, 25,140,189, 82,222, 90, 7, 86,115,118,250,144,191,254,199,
+255,132, 39,239,125, 72, 85,174,121,245,242, 37,186, 90, 3,146, 39, 31, 60,231,233, 7,159, 98,116,195,213,205, 5,105, 54, 2,
+107,209, 6,214,139,153,111, 5, 3, 89, 18,209,132,238, 69,150,229, 68, 42,241, 25, 21,145, 32,205,134, 92,157,159, 99, 27, 77,
+ 54, 24, 16, 39, 57, 73,158, 67, 96, 94,172,139, 21,117, 93,123,187,109,111, 19,223, 87,169,155, 0,150,138,162,222,193, 60,140,
+ 87, 92, 99, 57,185,247, 0, 2,120, 42,244,151, 59,222, 71,163,117,103,250,145, 82, 49, 28,142,168,107, 63, 62,241,243,237,146,
+186,172, 49,214,242,222, 7, 31, 19,197, 9,101, 85,226,108,195,120,122, 72, 85,215,222,166, 25, 92, 43, 42,216, 48,227, 40, 70,
+201, 24,107, 27,210, 44,167, 44,215,168, 16, 32,179, 90,249,241,145,103, 7, 9,140,174, 89, 47,231,161, 45, 31, 97,154,154, 90,
+215, 33,215, 96,115,192,151, 81,180, 1,126, 25,211, 85,248, 66,138,206, 63,238, 83,216, 98,223,165, 84, 81, 24,233,182,149,108,
+ 72, 18, 84,170,107, 35,187,174,251,219,178, 39,252, 46, 36,163,136,198, 52,196,145,167,114,214,218,107, 92,242,225,144,162, 44,
+136,147, 24, 33,101,120,253, 34,196,201, 42, 30, 62,120,192, 71, 31,125,136,214,154,197, 98,233, 55,205, 94,231,113, 27,144,211,
+227,200,137,221, 49,226,110,209,178,217,148, 55,224, 24,215,251,189,216, 17,188,201,157, 42, 91,236,153,137,203,157, 65,177,184,
+109,111,163, 77,138,235, 63, 38,123,162, 87,131,250,253,228,254,195,207,251,234,196, 62,202, 85, 32, 66,248,138, 64,237,196,209,
+209, 83,165, 75,183,253,103,130, 26,189, 13,120, 80,189,196, 42,217,251,189,216,215,198,237,205,115,247, 81,128,118, 55,249,125,
+213,250,238,247,118, 72,212, 29,165,226, 93, 45, 98, 1, 84,203, 5,137, 51, 8,225,208,218, 35, 30, 61, 41,203,191,177,214, 88,
+198,227, 1,194, 66, 19,108, 38, 34,140, 40, 42,173,169,170,186,219,128, 77, 99,186,246,187, 16,130,166,177,212,181, 38, 77,162,
+ 32, 44,145, 72, 9,121,150, 6,246,186, 64, 74,207, 9,119,132,214,123,216,188, 85,248,112,253,252, 85, 80,149,154, 60, 75,136,
+147, 20, 93,105,242,220, 31, 12,146,216,135, 70, 84, 77, 77,158,100, 72,103,168,179, 1, 22,185, 53,153,112, 45, 77,174,151,223,
+173,164,218, 68,150, 56,186,170,165, 63,107,119, 63,161,234,254, 41,115,244,159,188,215,119,212,227,109, 75,155, 20, 27,108, 43,
+194,227,118,239,157,158,114, 51,155,161,164,240,202,109,229, 59, 38, 90,111,194, 34,188, 72, 48,116, 66,220,238,248, 32,220, 28,
+ 73,194,120, 60,233, 68, 80,214, 90,170,186, 14, 16, 33,219,107,195,169,176,152,247,104,249,194, 11, 26,199,211, 41,105,154, 99,
+117,229,169,113, 93,170,209,118, 95,162, 61, 60,181,149,187,195, 11, 54,219,217,165,181,126, 1, 77,211, 20,129,135,227, 76,167,
+ 99,156, 16,228, 89,238, 29, 40,248,113, 81, 59, 11, 54, 54,240,182, 67,171, 79, 55, 21,203,245,140,217,213, 57, 87, 23, 87,100,
+105,198,199,159,253,156,175,191,250,146, 90,107,158, 62,126,159, 56, 77,200,243, 33,159,125,250, 51,116,221,112,118,118, 76, 44,
+ 21, 7, 71,199,252,234, 87,191,226,215,191,253, 53,151,151, 23,212,141, 99, 93, 22, 72, 97,249,234,171, 47, 88, 46, 87,172,215,
+171, 78, 31,176, 90, 47, 48, 22, 62,251,179, 95, 80, 21, 5, 31,125,252, 25,117, 83,161, 34,197,122, 89,113,115,249,154,124,144,
+243,151,127,241, 79,185,188,126,203,186,172,249,248,147, 79,185,184,184,228,205,155,151,156,157,221,231,231, 63,255, 37, 95,252,
+241,239,249,221,111,127,205, 71, 31,255,210,211,238, 98,129,138, 4, 55,215,215,188,254,225, 37,243,155, 11, 38,147, 3,156, 53,
+ 20,235, 2,219,212,126, 99,202, 6,188,255,201,159, 19, 7,226,163, 84,138,108,144, 83,150, 5,145,138,153, 78, 15, 24, 12, 70,
+ 56,231,168,214, 11,210, 60, 69,169,152,217,205, 13,229,106, 21,102,207,126, 70,221,244,236, 99,251, 72,138,253, 3,158, 9, 27,
+157,255,204,124,127, 75,235,138,229,108,142,140, 99,210,124, 16, 62, 99,187, 9, 39,106,161, 94, 66,224, 76,131,110, 12,103,247,
+ 31, 81, 87, 37,182,241, 40, 97,163, 45, 72,193,252,250,138, 36,205, 56, 61,187, 79,146,100,172, 86, 43,142, 79,239, 83,174, 87,
+152,208,146, 54,198,120,205,129, 49, 12,134, 35, 42,237,181, 37, 82, 69,172,151,115,142, 78,206,130, 42, 61, 64,165, 48,158,201,
+ 97, 27,172, 53,161, 35,228,136,226,152,186,172,168,170, 2, 23,132,168, 42, 28, 20,165,128, 56,138,252,193, 3, 95,161,183, 7,
+ 41, 23,144,214,174,199, 59,161,171,154, 55, 27,163, 82, 81,111, 99,221, 84,249,221, 90, 35, 36,113, 18,227, 44,157, 21,112, 93,
+ 20, 76, 38, 83,178, 44,245, 7,164, 32, 34,181,214, 47, 6, 38,160,122,211, 36,227,131,247,223,227,193,131,251,220,204,102,232,
+186,190, 67, 28, 45,119, 90,233,155, 13, 95,202,126,251, 92,222,106,187,111,185,130,220,109,144, 76,255,235,247, 71,151,139,173,
+141,255, 78,191,124, 55,203,151,239,104,197,111, 14, 5,234,244,193,147,207,219, 50,187,221,208,157, 0, 23,132,108,109, 11,193,
+249, 96,103, 63, 11, 87, 1, 78,210, 62, 65, 37, 59, 59, 90,255, 24,178,185,232,217, 18, 60,237,206,175,247,218,153,250,176,152,
+ 94, 26,206,150,215,125,135, 59,204, 30, 15,244,222,159,197,237, 12,222,173,167, 34,160, 41, 11, 98, 83,248,180, 36, 99,169, 42,
+141, 67,146, 70, 10,107,124,133, 52, 28,166,126,102, 23, 54, 93, 31,193,168, 49,182, 97, 85,214,157,255,210, 26, 19,102,236, 30,
+154, 99,156,163,214, 77, 7,187,113,206,144, 40,143, 14,141,133, 12,169, 92, 34,204, 38,189,160,206, 6,224,135,117, 22,148,215,
+230,250,196, 49,235,103, 77,249,128,249,106,197, 52,132,126,200,150,146,214, 42,241,157, 37,206,198,212, 50,234,154,233,162,143,
+245,140,162, 96,241,234, 7,181,136, 46, 55, 56,138, 34,232, 71,219,222, 77, 64,248,105,246,181,159, 90,181,183,214,157,246,112,
+209,205,219, 55,183, 65,235,153,141, 84,204,244,224,128, 40,142,168,202,181,111, 63,215,117,168, 32,252, 34,214, 88,131,176,206,
+119, 63,218, 32,138, 91, 27,123,168, 42, 34,229, 5, 57,113, 68, 89,150, 8, 28, 85, 89, 81, 5, 5,187, 64, 32,226,136,127,244,
+143,255, 25,149,174,137,147, 8,215, 85,202,144, 68, 49,101, 81, 48,200, 51,234,218,163, 96, 55, 99,173,219, 17,140,119,225,117,
+ 59,122,162,179,158, 64, 87, 85, 52,186,102,181, 92,133,131,130, 67,197, 49,195,209,196, 87,122,163, 17,227,241, 1, 89,158,115,
+112,120, 68,146,166,222,171, 47, 68, 72,244,244,148, 48, 93, 87, 20,235, 21,179,217, 53,235,229,130,139,139,215,222,255,107, 45,
+200,136,147,147, 99, 94,191,126,195,155,243, 31,248,246,197,247,220, 92, 95, 34, 84,194,123,207, 63,230,226,237,107, 14, 15, 14,
+184,188,120,195,197,197, 27,214, 33,173,206,152,141,154,191, 13,181,121,244,244, 17,139,155, 57, 23,231,111,120,249,242, 37,143,
+159, 62, 38,203,199,124,242,209, 39,188,120,241, 13,135,135,167, 20,101,201,197,249, 91,174, 47, 94,131,115,100, 89, 76, 89,173,
+124,199, 40, 78,185,153,207,248,237,175,255, 3, 87,151,151,152, 70, 83, 87,107,176,154,241,248,128,195,227, 83,166,135,199,212,
+ 85, 69, 20, 39,228,121, 78,158, 14,120,251,230,165,255, 58,103,144, 24,214,235, 34, 20, 25, 80, 87,126,110, 45,144, 12,167, 39,
+ 28, 28, 63,224,205, 15,223, 81,172, 23, 52, 77,229,181, 9,113,140,214, 53, 66, 73, 79, 36,252,137, 7,213,205,230,222,182,148,
+ 45, 4, 11,101,172,164, 15,163,177,198,127,238,214, 7, 71,121,235, 24,225, 94,111, 40,203,130,124, 48,244, 29,189, 90, 3,214,
+ 67,135,132,101,181, 92,112,115,117,137,214, 21, 89,150,179, 42, 86, 28, 28,158, 80,149,101,152, 89,199, 33,237,209, 81,235, 53,
+ 73,146, 34, 4,212, 85, 65, 20, 90,221,195,209, 56,112, 28, 82,170,170,161,177, 13,178, 69,207,226, 19,226,234, 96,227, 27,164,
+ 41, 56, 40,214, 43,180, 14,174, 8,229,173,207, 73,146, 6, 97,116,171,147,242,218,151, 22, 21, 76,111,147,110, 87,238,118,116,
+212,218,164,219, 14,174,255,108, 54,235,177,117, 14, 33, 35,111,227, 85, 18, 33, 21,141, 54,212,101,201,120, 56,242,196, 69, 93,
+183,246, 42,170,186, 38, 86, 17,105,154,117,123,197,193,244,128,159,125,246, 25, 89,150,118,160,165,246, 32, 46,164,232, 10,175,
+190,207,124,211, 26,151,123,219,229,219,159,187,232,197,203,238,232,182,228,174, 21,188,159,118,119,219,255, 46,118,132,120,155,
+ 74,188, 83,224,252,232,127, 66,128, 58,189,255,232,243,190, 16,174,171,132,101, 63,102, 46, 0, 2,194,194, 40,182,212,229,219,
+200, 59,209, 11, 6,217, 40,165,221, 45,117,244,173,197,123,199, 67, 46,238,192,237,245, 99, 65,247, 65, 78, 68,111, 94,190,219,
+ 18,126,151,135,250, 22,221,204, 52,136,114,137, 20, 14,221, 24,143,156, 12,173,222,198, 88,140,115, 36,145, 10,252,118,104,172,
+103,137, 23,117,137,115,142, 82,155,110, 86,234, 79,197,173, 82,213, 97,157,160,214, 77,184,169, 98,116,211, 16, 71, 49,145,146,
+164,113,220,165,164,201,224,109,111, 76,131,177, 46, 84,153,174,227, 37,183,152,197,201,104, 72,170, 20,235, 74, 51,200, 34, 44,
+210, 87,235, 42, 66, 7,123,160,140, 18,136, 34,154, 40,233,230, 51,157,122,183, 21,193,216, 94,196,210, 14, 8,102, 75, 9,191,
+163, 71,184, 75, 48,119, 23,132,230, 93,112,154,125, 51,251,190, 13,210,237,138, 42, 67, 32,138,181, 22,161, 36, 71,199,199,104,
+173, 73, 19,207, 49,183,237,251,215, 5,186, 88,191,105, 9,129,179,166,107,240,239,182,224,109, 88,224,226, 56, 97, 56,204,195,
+ 99, 53,172, 86,235, 48, 67,244,130,158, 65,150,241,195,247, 47, 88, 45,231, 84,107,111, 43, 26, 14, 7,104,173,201,179,140,241,
+100, 66,150,166,158,239, 94,235,206,134,215,130, 56,228,158,247,205,221,161, 87,216,103,255,243,240, 19, 77, 93,150, 20,235,133,
+143,249,172, 86, 20,197,154,170, 42, 88,174, 86, 24,107, 56, 62,189,199,253, 71,207, 24, 31, 28,113,114,116,234,175, 37, 44,165,
+174, 72,243, 28, 43, 36, 42,188, 39,101, 85, 82,213, 53, 95,127,245, 5,243,155, 43,138, 74,115,118,246,200, 31,144,176,188,250,
+254, 91, 78, 15, 39, 20,171, 5,111,207,223, 82, 20, 30,208, 82,215,218,111, 64,198, 34, 84, 68,146,230, 28, 30, 31,243,191,255,
+111,255, 23,223,190,248, 22,211,212,156,158,156, 49, 24, 77, 61, 11, 61, 31,147,229, 41, 23,231,111,249,234,139,223, 19,199, 49,
+171, 85,193,131,135,143, 56, 58, 56,225,147,207,126,193,239,255,240, 43,150,243, 37, 63,124,247, 53,139,155, 27, 76,173,105, 2,
+112,198, 31,246,161, 42, 11, 26,235,168,214, 43, 38,135, 39, 60,126,246,156,171,171, 11, 22, 55,151, 72,169, 24,140, 38, 24,237,
+117, 5,211,201, 33,206, 9,174,175,223,226,172, 99,185, 90,114,254,250,123,174,175, 47,124,165,105,125, 90,158,138, 20,117,173,
+ 3, 31, 66,221,218,212,239, 74, 36,220, 93, 83,218, 80,148,206,122, 27, 20,230,198,154,142,219,213,138, 97,189, 5,209, 59, 31,
+108,211, 80,215,254,122,114,198,110, 21, 28,113,146,146,231, 3,170,170,166,169, 27, 6, 89, 74, 99,106,142, 79,238,147, 37, 25,
+168,136,135, 79,159,146,230, 3, 76, 99,177, 66, 34,218, 14,169,107,109,104, 2, 21, 39, 72, 41, 73,179,156, 36, 27, 4, 33,168,
+221,154, 37, 91,235, 40,203,181,207, 59,200, 7,222,214, 91,107,154, 70, 19, 71,113,199, 8,145, 1,138,213,229, 67,116, 99,215,
+182, 83, 26,196,194,206,110,181,183,219, 49,197,238, 6,218,102,134, 24,227, 45,139,198,250,194, 72, 55, 13,101, 85, 49,153,140,
+201,210, 20,132, 87,201,107,237,115, 54, 84, 79,160,218,178, 75,112,112,255,222,125, 62,249,228, 83,138,162, 96,181, 90,117,250,
+168,182,149,238,246,242,215, 55, 0, 27, 21,121,215,144,216,219,249,221,165,196,237, 48,105,183,146, 50,183, 71,110,109, 86,202,
+173,172,247,173,199,185,195, 38, 44,229,173, 34,218, 1,234,236,193,227,207,183, 12,249, 97,131,117, 98,147,143,220,253, 95,169,
+141, 80,109, 55, 33,103, 75, 17,191,227,237,107,177,124, 33,183,119,223, 12, 85,238, 8,218,216,121, 73,251, 80,125,110, 15,127,
+ 92,220,177,129,236, 99,145,223, 69, 56,107, 83,228,154,229, 53,177,128,166,241,155,184,177,142, 72,121,174,187, 9,201, 73,227,
+161,207, 77, 54,129,215,222, 88, 95,165,232,198,208, 52,182,203,205,182, 29,149,207, 39,186,185,208,154,243,161, 30, 46,156,122,
+ 37, 89,136,133,140, 66, 86,184, 49,155,138, 82, 7,197,188, 15, 41,233,228, 54,140,179,140, 56,137,169,117, 77,146, 36, 84, 33,
+227,189,109,135, 33, 64,198, 57, 38, 78, 17,217, 32,224, 75,125, 86,186,106, 45,110,253,174, 70,231, 77,119,157,184,175, 59, 28,
+253, 72, 64,203, 93, 27,247,143, 85,238, 91, 7,197,190,155,161,167,152, 19,110,179,176,181, 28,133, 22,124,209,182,125,199,147,
+ 41,186,169, 57,152, 76, 89, 23, 69, 0,135,148, 93,197,107,173,243,121,243,206,117,212,188,246,101,109, 64, 52,110,171, 19,116,
+124,116, 72, 81,172, 49,141,102,185, 92,119,190,221,182,194,111, 26,237, 15, 93,206, 4,248,199, 6, 78, 82, 55,134, 7, 15, 31,
+ 83, 55,154,117,177,246, 29,151, 61,226,206, 31,179, 2,238,251,251, 62,252, 36,196,174, 35, 66, 88, 71, 62, 24,161,155, 26,163,
+107,140, 54,204,231,115,174,222,190, 97,118,245,150,171,235,115,180,209,124,240,252, 57,143, 31,191,135, 16,138,147,163, 99,127,
+200, 76, 18,164, 20,148,235,181,183,213, 57,139,112,150,171,171, 43,202,114, 78, 93,148,188,247,244, 9,211,201,148,175,191,252,
+146,178,170,152,205,102,232,178,194,234,166,187, 62, 84, 20,161, 84,140,138, 99, 30, 62,126,204, 31,255,240, 7,206,206,238, 99,
+ 29,220, 92,159,123,240,138,178,172, 43,195, 55, 95,125,201,241,233, 61, 62,252,240, 19,170,170, 96,189, 90, 96,117, 65,101, 52,
+167,167, 79, 1,193,235,215, 63,132, 4, 52,159, 49, 30,199, 17,121,158,113,239,254, 99,134,147, 3,142,142,239,163, 77, 67,150,
+166,252,254, 55,191, 66,151, 75,226, 56,162,174, 11,226, 52,231,232,248, 30,171,213, 2,211,104, 31,232, 99, 44,186, 44,209,117,
+137, 8,122,150,186,170,136, 84, 16,102,105, 15, 13, 18, 97,227,181,198,254,120, 62,198, 59,216, 13,237,230,230,239, 33, 75, 54,
+ 24,162,181,233,218,240,161,111, 29,192, 47, 73,167,165,240,215,152,237, 54,134, 72, 74,178,124, 72, 58, 24,115,120,116,204, 96,
+ 52,198, 88,195,122, 54, 99, 54,191,164, 40, 10,226, 56, 70,169, 8,173, 27, 14, 14, 15,121,250,254,115, 14, 14, 78,144,202,143,
+163,192,119, 10, 99, 21,177,154, 95,147,100, 25,214,193,116,114,128, 84,138,166,169,169,171, 34, 68, 1,251, 77,183,105, 60, 64,
+ 41,105, 81,180,218, 80, 87,229,166,219, 23,249,110, 67,155, 88, 25, 71,202, 87,238, 1, 51,190,219, 21,245, 21,122, 27,226, 34,
+183,196,172,109,134, 72,183,131, 4,236,108,227, 12, 66, 18,128, 73, 13,207, 63,248, 0,173, 75,207,182,143,146,238,125,202,178,
+ 44,132, 15,169, 32, 28,244,157,200, 52, 78,248,240,249,115,206, 78, 79,185,188,184,244,221, 20, 41,182, 50, 49, 90,196,242,174,
+114,254, 86,212,170,144, 91, 84,183,109,178,155,236,189,214,125, 24,246,237, 25,120, 43,164, 22,130,157,245,181,127, 0,216, 9,
+227,146,189,238, 64, 95,128,238,219,239,143, 63,223, 66,227, 9,182, 44, 77, 91,133,255, 45, 49,145,216,218,140,251,204, 92,185,
+139,255, 20,155,147,196,173,182, 57,123,120,251,253, 96,249,222, 98,191,111,158,181,187,113,247,193, 6,187,127,222,215,150,191,
+ 5,160, 9,234,203,122, 49, 35,197, 3, 90,234,166,217, 92,172,182,193, 58,129,179,142, 44,141, 59, 32, 65,165, 53,198, 26,175,
+110, 55,173, 60,206, 33,149, 12,254,104,225, 47,206,198,118, 51,107,107, 44,105, 26,211,104, 77, 26, 43,178, 36,241, 80,135,112,
+131, 8, 65,136,190,244,182, 58, 4, 33,206,181, 9,213,165,111,191, 71, 81,228,219,176, 66, 81,212, 21, 81,184,176,148, 82, 62,
+171, 59, 78, 40,162, 28, 68,220,113,244,237, 86, 16, 67,175,179, 18, 14, 4, 74, 41,127,163,246, 85,160,189,228,187, 63,181,213,
+254, 46,133,252, 93,234,248,190,234, 94,182,215,142,216,109, 91,109, 70, 41,163,201, 20,112, 28, 77, 15, 41, 74,239, 66, 40,214,
+235,237, 14,142,117,221, 76,189,221,200,187, 67, 82,248,115, 55,238,145,146,163,195, 3,138, 98, 29,178,219, 43,166,147,105,183,
+ 24,153, 64,169,179,193, 98,214, 46,224, 77, 99, 66, 21,148, 18, 69, 49,195, 65,198,229,229,149,175,186, 92, 63,171,198,117,130,
+ 79,223, 18,108,103,224,238,142, 9,149,219, 11,222,235,235, 93,156,181, 84, 85,133, 64,118,223, 19,199, 49,113,150,130,244,213,
+134,107, 26, 46, 47, 46,120,245,242,123,230, 55, 87,204,174,175, 56, 62, 59, 67, 42,201,112,120,192,179, 15, 62,102, 56, 26,249,
+ 22,125, 81, 4,174,185, 63,224, 44,151,115, 94,124,255,130,155,229,156,229,114,137, 46,252,204,182,207,136,104, 85,211,214,129,
+138, 21, 2,197,195, 71,143,248,242,143,191,101,185, 88, 18,165, 25,177, 74,248,230,219, 63,226,140,163,210, 53, 95,127,245,123,
+ 26, 93, 99, 12, 12,135, 67, 38,211, 67, 22,243, 27,190,248,226,239,249,235,127,242,207,137,147, 20,107,106,140,109,176, 97, 3,
+127,246,252, 51,254,197,255,242,175,104,140,101,185,156,243,246,245, 75,214,235, 25,206, 25,143, 82, 21,158,119,176, 94,205, 25,
+ 13, 50,164, 84,212,193,247, 60, 26, 29,122, 23, 68,128,198, 88,211,208, 52,126,140, 99,130,162,218, 89,211,241,197,255, 11,103,
+ 73,155,145, 86,135,206, 86, 29,112,168,223, 53,235, 23, 43,113,146,144, 14, 71,216,198,116,207,197,143, 77,150, 44,102,215, 44,
+ 23,215, 84,197,138, 56,205, 25, 14, 71,126,236,147,166,172, 86, 11,150,203, 57,139,235,107,110,174, 47,201,135, 35,162, 56,229,
+228,244, 30, 54,204,240,149,138, 56, 58,187,199,213,197, 57,113,176,193,198, 73, 74,146, 15, 25,142, 14, 88, 45, 22, 33, 75, 61,
+204,190, 3, 38,216, 90,195,112, 52, 36, 73, 18,214,101,217,117, 77,218, 46, 64,176,209,128,148,193,118,234,239, 47,175, 11,217,
+245,182,200, 13, 42,118,199,194,220,189,229,206, 98,156, 71,139, 19,116, 7,101, 81, 96,149,226,253,103,207,188, 59, 68,215, 8,
+ 33, 25, 13,199, 29,214, 55,138,163, 14,236, 37,216,116, 13, 14,167, 7,252,236,179, 79,113,206,113, 51,155,109,145, 71, 85,191,
+250, 21,183, 99,199,239,238, 39,246,254,174,179,194,137,158, 72,112,191,194,125, 11, 88,227,122, 92, 14, 17, 60,225, 61, 92,251,
+214,127,123, 58,221,109,107,196,111,234, 98, 51,241,112, 65,120,100,119,105,179, 61,165,174,236,183,185,119, 79,170, 59, 76,220,
+ 93, 95,185, 82,170,179,105,177,131,114,165,183,217,190,139,183,179,111,115,127, 87,187,242,199,236, 86,251,170, 69, 39,192,148,
+ 5,202,212,128,111,151,219,150,144,212,170,141,133, 64, 5, 43, 89,203,223, 6, 17, 96, 14,190, 26, 20,110, 67,165,242, 10, 70,
+ 25, 44,109, 22, 21,137, 14,163,104,141,207,229, 78,162,136, 44, 75, 67,176,130,247,156,215,141,199, 75, 86,181,175,132,226, 36,
+ 9,216, 90,255,134,231, 89, 74, 18, 5, 18,159,243,115, 99,137,159, 27,169, 22, 46,225, 44,201,241,125, 76,152,141,119, 23, 23,
+219,240,159,173,207,213,185,222, 66,195,237, 48,131, 61, 66,198,126,123,254,199, 48,177,123, 69,144, 59,156, 2,209, 35, 64,137,
+ 96,237,176,173, 51,130,254,117,238, 95,207,104, 52, 97, 93,172,121,112,255, 62,203,229,146, 36, 73, 40,202,181,135,103,224, 69,
+139, 88,215, 5,232,180,168,216, 77,197,238,122,158,219,136, 44,120,213,139, 98, 29, 90,189, 53,243,229, 44,128,103, 84,151,188,
+183, 11,212,232,172,130, 45, 88, 83, 56, 86,203,213, 70, 73,220,187,184, 59,244,110,143, 71, 45,149,242, 99, 18,193, 45,206,126,
+127, 51,223,188,157,225, 53,180, 62,249,176, 24,182, 11,140, 53,214, 43,255,155, 86, 28,104,131,214, 3,242, 44, 71, 55,154,171,
+171, 75,150,179,107,230,243, 27, 46,175,223, 82, 87, 5,186,209, 33,212,195,115,239,235,186,226,234,242,156,249, 98,193,122,177,
+244,156,249,214,190,133,237, 24,250,126,204,228, 56, 58, 62,229,226,226,156,211, 7,247, 40,150,107, 94,125,255, 29,217,112,196,
+131,179, 83, 14,142,143,249,250,139, 47, 88, 44,110,176,186,230,244,228, 1,255,252,191,255,159,152,207,111, 88,175,102,128,226,
+251, 23,223,242,244,217,115,158, 57, 86,137, 0, 0, 32, 0, 73, 68, 65, 84,190,253,230, 75, 94,124,245, 71,150,139, 57, 82, 74,
+226, 36, 97, 52, 61,228,179,159,255,146,127,251,111,254, 31,190,249,242,143,188,121,245,130, 88, 5,129,105, 56,240,166,105, 10,
+214, 49, 28,230, 60,125,254,103, 60,253,224,103,220,127,252,190, 87,156, 11,201,225,241, 33,198,250, 77,161,237,176,180,155, 79,
+ 19,130,115,254, 33,250,144,237, 69,220, 3,142,186, 51,115,127,195, 18,174, 19,199,246,103, 76,109,149,110, 26,131,105, 12,249,
+ 96,128,174,234, 94, 55, 39,116, 68,132,143, 76,173,116, 77, 28, 39, 88,211,176,152,249,247, 83, 8,135, 83, 18,140,225,230,230,
+130,170, 42,104,140,225,240,232,136, 97, 62,160, 49, 13, 73,146, 48,153, 28,113,125,121, 73, 81,172,168, 27,237,225, 51, 81,196,
+104,122,136,214,154,162,172,194, 90,226,171, 94, 99, 26,234,170, 70, 69, 17,135, 71,199, 56, 4, 85,224, 66,216, 48, 82,244, 33,
+ 68, 81, 16,213,181,247,197,182, 93, 76,117,138,241,246,250,151, 61, 81,218,237,209,168, 11,247,156,148, 94,221,191,156, 47,120,
+112,239, 1, 71,135,135, 72, 25, 81,107,127,224, 75, 82, 31, 19,220, 22,111, 30,144, 19,240,218, 97,189, 78,211,132,103, 79,223,
+227,189,103,207,152,205,103, 84, 85,117,139, 93,178,165,136,151,219, 85,114, 71, 2,109,139, 96,209,115, 16,237,152,128,133, 20,
+189, 63,238,142,108,228, 22, 99,165,171,222,247,128,217,196,142,238, 11,225,182, 51,228,219, 64,151,179,135, 79, 62,111, 91, 4,
+ 86,108, 32, 49,183,230,123, 59, 54,180,125, 57,178,123, 55,225,157,214, 69, 31,153, 42,247, 44,234,251,208,173, 63,229,230,217,
+ 87,253,255, 41,143,181, 79, 80,103,140, 70,233, 42, 68,178, 58,116,227,243,164, 85,216, 88,154,198,199,180, 14, 6,153,159,149,
+ 73,225,219,238, 97,211,104,213,238,178,159,106,230, 64, 55,141, 23,176, 5, 37,186,182,126,195,143,148, 34,142, 36,131, 36,245,
+180,166, 16,112,163,141,111,239,151,218,116,109,245,186,105,186,239,207,210,216,223,108,237,105, 56, 0, 36, 84, 80,143,214, 90,
+211, 24,203,104,124, 64, 37, 98,132,146, 91, 36,165, 62,223, 61,142,162, 16,240,210, 82,247,236,173,214,187,187,213, 68,218,131,
+120,253,137, 7,168,189, 27,254,158, 82,180,253,234,166, 55,140,105,209, 72,109,112,139,179,150, 44, 27,144,231, 57, 89,150, 82,
+213, 58,224, 98, 27,172, 9, 86,162,208,170,222,132,185,108, 44, 96,222,175,190,225,223, 43,233,115,228, 7,195, 33, 70,251, 10,
+101,181, 46,252,236,216,110, 54, 82, 33, 4,105,158, 51,158, 78,113,210,231,167,167,131,140, 52, 73, 73,210,148, 71,143, 30,146,
+103, 3,230,215,215,190,226, 13,215, 6, 8,156, 8,208, 38,225, 7,249, 46, 88,130, 58,180,175, 8,202,120, 41,186,228,194,125,
+179,219,173,118, 29, 61,225, 95, 55, 86,176, 29,201,206, 6,133,176,223,192,240,182, 45, 54,225, 70, 74, 74,166,227, 41,141, 54,
+ 27,207,177,109, 24, 13, 6,124,247,226, 59,202,210,115,237,113, 62,255,192, 89,139,136,218,170,179, 55, 71,116, 2, 39, 37, 85,
+ 89,113,114,246,128, 87,175,190,227,224,232,190,231,180,231,158,118,182, 42, 74,172,174,121,244,244, 61,222,123,254,156,255,240,
+239,254, 95,206,223,188,162,209, 53,141, 19, 76, 38, 7,232,186,228,219,175,191, 64,151, 69,168,160, 99,242,225,132,147,147,123,
+172,215, 43,222,252,240, 61,229,186,160, 88, 47,168,107,205,120, 60, 10,135, 13,207,242,143,179, 1,131,225, 20, 93,107,254,238,
+215,255,153, 31, 94,124,197, 98, 49, 67, 97,169, 10, 15,121,201,243, 1,243,217,117,200, 95, 72,168,117, 5,184, 16,203,106,254,
+ 65,155, 58, 61,193,105,255,151,237,143, 40, 98,229,109,137, 61,130,230,237, 27,195,122, 37,126,171,152, 15,238, 8, 17,108,101,
+190,130, 55,148,101,193, 96, 56,196, 25, 47,198, 29, 77, 15, 25, 79, 14,136,210,140,114,181,162,209, 53,186,246, 68,185,235,235,
+107,142,207,238, 99, 92,195,197,219, 87, 28, 29, 28,146, 68, 9,101,185,166, 40,214,232,144,190,119,120,116,204,100,122,132,115,
+162, 27, 71,120,183,142, 87,245,151,197,154,225,120,204,244,224,196, 7, 37, 53, 94,145, 30,199,137,111,139,199,209, 6,173,218,
+179, 32,171, 48,206,245,111,147,237,196,100,155,102,143,232,209, 22, 55, 40,112,240,107, 87, 28,103, 88, 99,185,186,190,230,195,
+231,207, 25,228, 57,145,146,232, 70,163,117,197,104, 48, 64, 8, 15,251, 18, 2, 34, 21,161,148, 36, 77,146, 78, 12, 24,199,138,
+233,100,202,103,159,124,198,104, 56,226,242,242,194,183,250, 91,235,155,232, 67, 98,220,118,187,123, 7, 51, 75,127, 31,218, 33,
+177,110,123,141,110,235,201,118, 25, 49,109,213,221, 17, 52, 69, 8,185,217, 36,158,135,181, 95,244, 13,121, 27, 91,246,217,131,
+199,159,183, 63, 74, 72,113, 11, 52,179,139, 16, 21,253,106,189,143, 90,221,215,148,184,107,161,239,125,127,127, 51,222,109,137,
+247,127,246, 62,181,250, 62, 44,233,118,232,188,248,241,120,189, 59, 66, 72,186, 28,247,114,129, 52,198,111,172,161,117,154, 68,
+138,198,248, 25,187, 19, 16, 43, 63,235,114, 97,238,110,236,102, 35, 84,157,112,112, 67,233,107, 26,235,189,179, 33, 33, 73, 27,
+131,197,227,105,211, 52,102,148,166, 24,103, 3,170,208,183, 80,117, 99, 40,107,237, 55, 92,124, 75,190,189,188, 6,121,134,112,
+142, 38, 84,253,198,122,113, 88,146,166, 72,225,187, 12,218, 24,142, 39, 99, 10,149,249,139,100, 7,150,226,218,231,108,125, 6,
+124, 43,206,233, 78,160,123, 26,194,110,231, 20,125,235, 61,188,163,139,242, 83,128, 52,110,199, 21,177,223,210,182, 81, 95,180,
+ 98, 57,149,196, 76,167,135, 76, 38, 99,234, 90, 7,196,101, 67, 85,149,254, 6,177,155, 64, 26, 99,154, 30,221, 78,248, 76,110,
+187,253, 42,243,124,192,100, 58,193, 52, 26, 93,215, 44,219,106, 91,184, 46,125,112, 56, 57,224,233,123, 31, 96,173,227, 96, 58,
+193, 90,199,209,209, 17,103,247, 31,242,252,249, 71,140, 70, 99,170,178,228,242,242,210,235, 34,220,198,127,239,232, 97,143,157,
+232,200,115,173,112,106, 31, 5,209,249, 36,160,158,216,192,179, 36, 58, 4,179,146, 8, 37,125,196,113,112,177, 88, 33,122,124,
+137, 13,211,154, 30,182,214, 4,187,159,117,142,229,114, 78, 81,174, 40,171, 18,128, 97,158, 49,187, 58,103,185, 92,161,203, 10,
+215,217,237,130,186,219, 25, 80,113, 79,212,229,105,127,141,209,164,131,156, 56, 29, 48, 26,142,248,224,131,231, 60,120,244,152,
+217,236, 26,231,252,243,116,141,230, 23,191,252, 71,188,252,225, 59,102, 55,139, 32, 74,172, 64, 42, 46,206,207,185,190,190,164,
+ 90,175,131,123, 0,162, 52,225,201,123, 31, 50, 61,185, 79, 26,103,220,220, 92,178, 88,206, 40,215,149,239, 80,169,152, 40,205,
+112,248,108,238, 60, 27, 80, 20, 75,110,174, 47,169,234,146, 88, 9,154,186,100, 52, 30,250, 42,179, 90, 19, 69, 17,235,229,138,
+ 40, 73,201,135, 45,206,213,143,197,246, 41,223,255, 75,127,117,155,131, 20,161, 3,226, 61,233, 2,249,163,202,250, 86,252,181,
+ 37,200, 11,235,106, 93,122,214,125, 54, 24,146, 37, 25,139,217, 21,163,241,152, 52, 31, 80,172,150, 8, 33, 25, 14,199, 20,197,
+146,229,108, 65,158, 15,200,210, 1,166,209,220,220,220,144, 13, 50,172,179, 84,235,146,229,106,193,114,185, 32,207,115,226, 44,
+103,122,112,194,104,114,224,133,142, 62, 20, 26,103,124, 84, 48, 56, 14, 79, 78, 17, 74, 81, 22, 5, 85, 85,249, 52,191,192,140,
+247,135,228,205,248,181,173,160, 55,235,134,220, 18,157,249,195,114,123,112,118, 65,196,232,176,218,119, 97, 42,221,144, 15,188,
+128,213, 57,120,250,228, 49, 73,146,122,208, 81,227, 63,179, 56,242,168,231,118, 95,240, 69, 83, 76, 20,249,195,132,112,155,132,
+204, 71, 15, 30,242,233, 39, 31,251, 78,220,124,190,229,238,218,133,195,116, 54, 61,177, 13,131,105,157, 45,206,186, 94, 39,190,
+111,191,222, 84,246,251,116,104, 91, 27,116, 47,178,124,243, 56, 59, 72,218,126, 32, 77, 47,180, 70, 29, 63,124,252, 57, 33,210,
+179, 31, 67,167,186, 68,123,110,129, 96,218,139,232,167,158, 93,247,113,226,119,209,174,253,147,109, 95, 93,184, 53,231, 14,162,
+179,221,127,239,111,246, 98,143,165,238,182,213, 64,190,243,207,221, 27,165, 20, 44, 23,224,106, 26,109,104, 66,123, 41, 77, 21,
+206,128, 14, 10, 86,176, 12,179,212,103,175, 27, 3, 66,210,212, 14,156, 68,168,205, 7,210,110, 2, 62, 48,196, 95,168,190,213,
+230,104, 77, 31,195, 44, 33, 78, 98,148,104, 21,163,254,166,168,154, 6, 29,248,242,198,186,144,214,228,169,114,131, 54, 10,211,
+250,159, 93, 53, 26,103, 12,105,156, 4,152,131,162, 52,130, 60,142,137, 70, 19,214,198,134,205, 99, 91,225,209,126,238, 74,249,
+ 89,188,144, 27,202,211,187,184,239, 63, 86,121,191,203,101,176,119,225,218, 57, 24,114, 11, 29,220,139,229,109, 55, 16,229,197,
+114, 81,146, 48, 28, 14,184,119,118, 47, 68,148,122,139,213,122,189, 14,173,123,135,176, 14,203, 70, 17,223,146,176,252,220,207,
+110,189, 38,165, 36,163,241, 4,225, 44, 77, 93,177, 92,149,100,195, 17,147,131, 3, 84, 28, 19,199, 9,239, 63,255,136,197,124,
+206,226,230,138,249,205,141,183,215, 69, 9, 55,243, 27, 14, 15, 15,177,206, 49, 30,143,248,254,213, 75, 31,148,177,155,195,220,
+171,108,183, 88,247, 46, 32,244, 2,164,200, 73,225, 69,142, 81, 68, 20,121,124,167,138,163,158,184,175,101, 66,248,235, 84, 6,
+134, 68, 95, 0,217,210,189, 90,111,127, 11,248, 17,189,133,170,117, 89,180,105,125,194,249, 57,238,236,122, 70, 85,148, 27,241,
+ 36, 6,231, 26,223,118,119, 14, 66,174,188, 37, 32, 75, 3, 68,228,193,179, 15,184,190, 60,231,207,127,241, 11, 78,143,143,249,
+155,255,252, 31, 41,138,138,159,255,242,175,248,226,247,191,227,159,253,119,255, 3,127,251, 55,255,137,186, 44, 56, 56, 58,161,
+ 44,214,204,102,115,116, 93,114,116,116,204,236,242,154,162, 92,163, 34,159, 39,159,231, 57,249, 96,132, 20,142,243,183,175,121,
+243,195, 15, 56,173,253, 97,200,214, 84,213,218,139, 70,131,181,177,110, 42, 16,138,170, 88,145,167, 9, 7, 71,199,126,252, 21,
+231,100,169,207,181,143,178, 12, 33, 20,117,181, 34, 73, 7, 56,227,153, 6,166,139, 60,253,175,251,171, 27, 41, 57,239,107, 31,
+ 12,135,225,189,189,123,116,181, 77,243, 12, 93,213, 45, 53,177,191, 63,117, 93, 81,151, 5,197,106,129,109, 26, 22,139,153,199,
+ 36,235,154, 70,215,157,152, 45,146,176, 94,206,169,155,134,201,225, 49,135, 71, 71,200, 36,225,193,163,167, 24,103,185,127,239,
+ 33, 32, 88, 44,151,172,230,158,111, 48,155,205, 80, 81,204,193,201, 41, 79,159,126,200, 36,116, 3, 22,179, 57,139,217, 53,121,
+150,114,120,124,134, 16,210, 31,206,132, 32,205, 82,191,209, 73, 9,194,235,116, 68,119,157,171,126,238, 91, 87,196,108, 10, 53,
+177, 25, 55, 8, 73,227, 92, 16,113,123, 66, 95,156, 36,204,230,215, 28, 76, 15,185,119,239,140, 52, 73,124, 42,157,117, 8, 21,
+161,148, 98, 50, 28, 81, 22,101, 23,204,228, 55,119, 21, 70, 10,126, 63, 26,228, 3,178, 52,227,163,143, 62,228,254,253,251, 92,
+ 94, 93,117, 89,242,219,252,245,221, 25,248, 54,219, 66,116,115,244,237, 72,215,205, 77, 46,122,227, 8, 63, 78,116,114, 91,135,
+230,122,110, 49, 41,164, 63,168,110,142, 7,219,163,137,238,125,220, 28, 10,212,233,163,199,159,183, 51,130, 86, 0, 37,247, 97,
+ 92,219, 13,189, 21, 69,220,122,248,187, 55,243, 93, 28, 95,151,101,190,133, 13,188,219, 22,210, 71,187,238,171,174, 91, 65, 88,
+ 63,111,253,174, 3, 64,127,243,223,237, 12, 68, 81,228,109, 17,202,195, 68,148, 82, 30,254, 80,174,186,106,217, 90, 71, 28,201,
+160, 5,241,213,177, 68,144,196, 1,237, 26, 54, 5,107, 90,196,174, 23,175,181,234,107, 41, 55,155,186,127, 14,254,251,154, 80,
+253,229, 73,196, 32, 78, 2,135,217,231, 88, 91,231, 40,116,141, 54, 22, 17,218,247,222, 74, 34, 81, 82,116, 0, 22, 19,188,236,
+190,157,231,185,205,214, 54, 72,165, 88,149, 53, 73,154,112,116,116,202,220,184, 45,166,241,174,216,177,237, 52,136,174, 10,219,
+182,186,221,201, 22,248,137,126,245,159, 98,127,115,251, 7,199,219,159,123,239,235, 85, 16,250, 40,165, 72,147,148,147,147, 83,
+132,128,170,170,113,214, 80, 85,229, 38,213,205,216, 48,166,240,175,213, 6, 72, 75, 11,166,233,107, 79,178, 44, 35,205,115, 34,
+ 9,166,209, 24, 11, 63,255,197, 95,178, 94,175, 72,211,140, 52, 73,176, 64,158,101,188,121,243,202,219, 16,181,166, 44,214,224,
+ 4,218,106,158, 60,122,196, 87, 95,254,129,229,106,181,119, 83,239, 78,218,110, 95, 63,100, 35, 60,179,214,183,205,251,118, 40,
+ 63,127,151,200, 40, 33, 29,142,145,113,130,136,227,110,211, 22, 42, 66,198,113, 71,127, 20,237,245, 18, 2,152,100,228,103,247,
+ 78,108, 87,250,125,144,212,253,179, 51,174,174,174, 88,204,230,254,253,233,198,109,182,211, 3,244, 91,197, 82, 68,221,125,174,
+164, 68,166, 3,178, 60,231,207, 62,251, 25,223,126,253, 5,171,162,164, 44,150,172, 86, 75, 30, 61,120,196,108,113,195,197,249,
+ 27, 78, 78,239,243,234,135, 87,228,147, 3,180,174, 72,211, 1, 23, 23,231, 20,235, 37, 7, 71, 39,254,179, 77, 51, 14, 14,143,
+249,235,127,250,207,248,227,239,127,207,205,213, 57, 85,185, 8,184,216,152, 56,246,168, 83, 33, 21, 66, 70, 28, 28, 29,113,120,
+112,196,209,233, 25, 89,150,226, 2, 2,118, 48,152,112,114,239, 9, 69,233,163, 59,173, 13, 97, 57,186, 66,168, 24, 41, 28,197,
+170,216, 96, 95,255, 43,112, 23,110,233, 79,130, 99,193, 54, 14,161,228,102,220,177,199,138,187,223, 10,220, 86,155, 97, 60,211,
+159,203,247, 24, 7, 18, 65, 93, 53, 12,134, 35,180, 54,140,167, 7, 76,198, 83, 22,203, 57,145, 84, 76,166, 7, 65, 56,151,144,
+100, 25,243,155, 43, 98, 37,121,246,222, 7,168, 56,230,240,248,132, 36,241,246,183, 36,142,168,235,146,217,245, 13,111, 94,191,
+ 97,190, 92,208, 88,199,209,201, 61,242,124, 20,198,131,146,225,120,226,149,249, 77, 77, 89, 20,196, 81,212,165,112,118,145,168,
+ 33,219,161,237,102,110,107,117,130, 22, 41,104, 35, 92,112, 8, 9, 37,183,187, 20,214,225, 12, 92, 93, 95,113,239,222, 61, 70,
+163, 33,113,156,144,101, 89, 23,108,164,235,138,209,112, 64, 89,150,222,234,134,127,142,158,184, 39, 72, 18, 31,222,163,181, 70,
+ 10,193,209,225, 33, 63,255,217,207,201,179,212,139, 91,173,219, 18,229,110,239, 27,114, 59, 35,229,150,133,141,237,214,122,183,
+ 1,187, 46, 4,173,117, 91,109, 84,236,108,205,202,247,253,178,194,109,104,174, 59,201,111,234,236, 81, 11,159,217,246,128,183,
+213,217,173, 54,234,158,249,116, 95, 86, 47,197, 54,212, 68,222, 10,174,151, 59, 12,224,219,111, 64,187, 17,219,222, 1, 98,223,
+166,210,223,208,187,239,219,173,190,187,138, 75,117,177,125, 82,122,251,133, 10,135,153,118, 3,239, 90, 34,237,156, 54,138,144,
+ 66, 98, 23,215, 96,189,112,198, 6, 88, 68,146,248, 22,188, 14,207, 81, 56, 75, 20,123,192, 76, 21,102,223,132, 17,110, 20,121,
+ 16,132, 7, 67,120,252,107,251,114, 90, 75,155, 19,194,131,100,210,152, 60,137, 58,170, 91, 18, 41,172,131,162,174, 66, 60,167,
+223,184, 93,152, 41, 43,229,173, 35, 74,170,192, 64, 22, 44, 10, 77,164, 20, 78, 73, 84, 72,111, 91, 23, 53,105, 62, 96, 50, 57,
+240,155,122,215, 94, 10,113,176,161,181,211,142, 12,228,142, 16,242, 46,189,167,184,171,125,254, 39, 46,128,183, 54,186,254, 97,
+176,119,221,245,227,118,133,235,111,234,190,253, 30, 69,138, 60, 31,144, 15, 6,228, 89,234,217,231, 33,244,194, 25, 75, 36, 85,
+151,156,214, 90, 5,219,170,214,231,175,219,173,211,184,183,201,141, 17,182, 1,103, 89,173, 11,190,253,246,107,150,179, 27,214,
+171, 37,203,229,130,155,235, 43,222,190,254, 33,136,224,108,199, 0, 7, 75, 89, 21,156,157,222,167,105, 52,139,249,156,162,174,
+182,104,114,254, 50,113,221,166,126, 59,232, 65,236,238,253, 62,126,216,120,236,172,213, 6,163,141, 71,208, 26,235, 71, 43, 97,
+ 12,147,143,166,168, 52, 71, 37, 25,233,112, 76,148,100,168, 56,246, 27,125, 20,161,162,216,135,121, 72,133, 10, 32, 36,164, 68,
+136, 8, 17,121,168,148,167,156, 25, 94,191,126,237,131,100,122, 68,193,219,159,177, 67,184, 48,174,233,144,207,222, 91,252,240,
+209, 83,158, 60,125,198, 71, 31,125,204,203,239,190, 98, 58, 61, 96, 52, 28,240,254,243, 15,249,230,235, 63, 50, 28,141,169,234,
+134,139,139, 87,220, 92, 93, 33, 44, 24,171,177, 77, 65, 18,167,222, 67,173,125, 80,199,227,247,223,231,230,102,198,106,118,206,
+108, 62, 39, 78, 50,140,169,136,211,140,195,211, 7, 12,198, 83, 26, 93, 51, 28, 77, 56, 60, 58,166, 88,175,169,202, 37,166,174,
+248,240,179, 95,114,124,250,144, 55, 47,191,229,252,205, 43,226,216,167,236, 33, 36,186, 40, 60,206,215,104,154,186,238,236,100,
+105,238, 45, 82,255,229, 10,248, 29,107,151,219, 56,218,108,227,195,119,116, 11, 54,218,211,221,106, 55,233, 62, 81,113,235,223,
+219,182,237,238, 97, 32, 36,217,249, 2,201,251,250,173,179,164, 89,198,106,177, 96, 93,172, 41,150, 11,230,179, 89, 40, 4,252,
+215,205,231,115,210, 44,197, 90,195,211,103,239,115,122,230, 67,124,170, 98,141,146, 17,227,209,132,213,114,193,236,250,146,243,
+183,175, 56,191,120,195,245,108,134,174, 45,166,105, 24, 12, 70, 76, 15,143, 60,162,182,170,144, 66, 98,116,137,101,163, 49,234,
+176,225, 82,108, 93, 87,237, 91,221,218,119, 13, 46,192,104,194, 38,218,115,227, 72, 21, 35, 4,196,105,198,120, 56, 12, 7,251,
+196,119, 8, 28,172, 11, 31,120, 53, 25,141,124,215,179, 42,145,161, 66, 87, 81, 68,156,120, 33, 93,154,166, 88,103,136, 34, 47,
+ 80,126,252,232, 49,159,125,250, 41,171,178,244,184,217, 78,137,206, 86,193, 40,229,142,191,189, 27,183,239,236,115, 91,237,114,
+209,213,223,178, 21, 43,183,135,235, 54,123, 64,208,205,211,183,255,107, 83,237,197,166, 99,179,181,169, 63,126,250,185,232,181,
+131,216, 81,177,139,222, 27,223,158,166,228, 14,166,117, 23, 20,211,110,158,183, 48,173, 61,246,110,119,112,112, 59, 17,154,123,
+230, 12,239,186, 49,250,179,244,150,145,221,125,216,157, 74,177, 85,236,251, 19,162,234, 69,187,202,126,232,125, 79, 24,209,218,
+233,162, 40,166, 92, 92, 35,140, 65, 55,222,202,102,156, 35, 79,124,155, 83,155, 0,151, 9,213,162, 64, 80, 53, 33,155,217,109,
+128, 53,157,221, 73,122, 75, 91,255,131,150,210,207, 63,141,177,164,113, 68,158,198, 36, 81,140,182, 13,105, 28, 83, 53,117,103,
+169,243, 41,111, 33, 7,189,187, 56, 92,119,152,177,192,114, 93,162, 98,133,141, 18,178,216,251, 55, 87,149, 33, 31,142,144,131,
+ 17,107,219, 77, 61, 59,196,105, 95,161,239,197, 60,118, 67, 91,187,171, 42,223,151,158,247, 39,180,230,247, 47,146,110,255,223,
+244,186, 5, 61,225,240,198,238,214,113,152, 61,229, 42,207, 7, 28, 76,189, 18, 30, 28,197,202,207,194, 55,129, 40, 46,176,223,
+ 67,165,142,236,102,202, 91,155,186, 16, 12, 70, 35,164,240, 2,179,203,235, 27,116,221,132, 3,128,241, 57,228,109,192, 71,219,
+169,233, 95,147,206,177, 92, 21,252,227,191,254,111,249,226,203,175,168,203,114,211, 5,105,143,209,129, 44,230,132,235, 9, 94,
+110,171, 84,182,237, 64,226,150,184,208,154, 6,173, 75,140,174,113,186,166, 94,175, 49,117, 77, 83,123, 65,147,112, 32,226,136,
+100, 48, 66, 40,239,150, 64,198, 68,217, 0,149,229, 36,195,177,175, 86, 48,190, 77,170, 20, 89,154,162,203,138,235,171, 75, 92,
+240,216,187,142, 95, 96, 67,220, 99,191, 50, 20, 91, 99, 54, 37, 37,227,131, 67,164, 51,124,252,201,167,124,241,251,191,227,236,
+222, 67,140, 46,121,255,253,143,152,223,204, 16, 40, 78,206,206, 88,175,215,100,163, 33,117,209,176, 94,205, 41,215,107,148,138,
+ 56, 60,185,199,249,249, 27,242,225,144,179, 7, 79, 72,210,148,171,243,183, 92, 92,188,165, 90, 47,105, 2,212, 39,206,114, 78,
+207, 30, 98,155, 10, 99, 52,163,209,136,235,171, 43,166,211, 67, 28, 10, 33, 98, 86,203, 57, 95,125,241,247,196,169,162,170, 75,
+ 47, 58,173, 53, 56, 65,163, 61, 73, 78,134,170, 77, 73,233,213,220, 73,140,174,245,222,121,163,123,135, 75,231, 93, 58,158, 91,
+ 57, 9, 97,173,106,154,230,150, 39,250, 93,135,224,187, 54,255, 45, 1,101, 56, 0, 55, 58,164,255, 25, 75, 93,151, 33,189, 48,
+199, 25,235, 25,242, 85, 65, 89,172,200,243,140, 44, 31,112,116,114,202,114,189,226,219, 47,191,226,219, 47,255,200,197,155,215,
+140, 38, 83, 62,248,240, 51,254,197,255,248, 47, 41,155,138,193,112,192,112,228, 43,244,245,170,192, 24, 77, 81,150,204, 23,115,
+174,206,207,121,251,234, 13, 85,173, 57, 62, 57, 37,205,114,134,227, 41,206, 58,140, 54, 56,103,188,166,194,109, 79,218,218, 19,
+108,123,143,249,194,163,117, 16,184,192,151,247,223,100,240, 98,207, 72, 69, 84, 85,201,225,209, 81,151,182,231, 59, 55,113,176,
+251,122, 46,126, 18, 71, 62,245, 48,205, 25,228, 3,170, 96,201, 83,202, 23, 82, 81, 28,119,221, 62,137, 32, 31, 12,248,244,163,
+143,185,127,255, 62,203,245,138,117, 89,120, 84,120, 15, 27,219,199,142,111,123,215,247,177, 91,196, 86, 21, 46,187,162,165, 29,
+ 87,109,218,247, 78,236,132,204,176, 65,197,186, 29,101,122,223,201,164, 78, 30, 62,254,188,157, 93,116, 94,193, 93,163,125, 15,
+ 64,179,207,255,189,175,234,222,125,161,253,100,180,125,124,246,187, 68, 83,114, 75,238,191,199,210,214,111,201,246,170,203,126,
+180,223, 70,236,176,217,240, 93,135, 9,117, 1,191,234, 54, 10,203, 54,117, 43, 8,199,132,209,184,178,216, 18, 18, 37, 74, 18,
+197, 10,221,248,208, 20, 33, 61,205, 40, 82, 62, 80,197,226,253,177, 78,224, 35, 24,123,211, 12,111,243, 8, 7,156,240, 28, 77,
+120, 12,164, 96,144,120, 75, 73,109, 52,105, 28, 83, 84, 53, 77,104,217,119, 34, 60, 43, 66,234,154, 67, 73,225, 69, 40,206, 97,
+144,148,101,133, 84, 17,209,104, 74,158, 36, 24, 93, 83, 59,200,243, 33,209,193, 17, 78, 69, 36,105, 66,150,251, 83,109,146,166,
+100, 89, 70, 28, 39,157,183, 82,236,105, 35,137, 61,136, 88,183,103,161,217, 13, 58,249, 41,144, 26, 33,238, 54, 49,238,235, 20,
+ 1, 91,237,247,214,211, 47,149, 34,203,115,156,128, 7,247,239, 51, 95,204,253,130, 19,184,228, 42,142,113,206,120,145, 92,107,
+237,178, 62,199,190,105,204,134, 59,221,123,220,131,163, 67, 34, 1,101,185,102, 62, 95,117, 27,120, 59,139,182, 97, 68,228,118,
+221, 1,129,213,190, 90, 45,249,238,229, 11, 38,147, 9,243,217,172,111,192,221,106,199,245,103, 99,155,105,217,230,239,182,207,
+ 64, 98,239, 33, 72,122, 93,108,128,245, 56, 48, 13,174,105, 16,166,193,213, 37,205,122, 77,181,184,161, 94, 45, 59,124,177,148,
+138, 40,203,136,210, 1,217,104,226,217,233,137,247,180,219, 70,115,254,246, 85,207, 38,230, 15, 67,110,171, 45,189, 25, 87,200,
+ 56,246,145,176, 66, 32,227,216,219,158,206,238,243,222, 7,207, 89,206,174,152, 12,135,212,218,231, 21,124,250,201,159,177, 92,
+ 92, 51, 61, 60,230,197,203, 23, 52,181,225,226,135, 31,200,242,136,147,251,143,169,171, 53,235,245, 26,221,104,148,107,120,239,
+195,207, 72,178,148,170, 44,201,135, 99, 22, 87, 23, 76, 14,142, 80, 73,194,163,167,207, 89,173, 22, 92,188,254, 30, 41, 36,217,
+ 96,196,114, 49,167, 46, 86,152,198,146,143, 38, 76,143,142,185,190,120, 69,179,158,211, 88,199,104, 52, 70, 55, 13,131,193,144,
+ 36,205, 2,173, 49, 34,142,211, 16,166,226,173,121, 8, 25, 58,100,110,199, 82,212, 3, 33,253, 3,187, 82,187,157,200, 40,137,
+127, 26,146,182, 21, 53,239,181, 45,111,183,136,183, 14, 16, 61, 87,132,119, 46, 56, 78,239,157, 81, 20,235,176,161, 73,110, 46,
+175, 24, 12, 7,156, 95,156, 83, 21, 5, 71,167,199, 44, 23, 75,202,181, 31, 31,149,101,193,175,127,243, 55,188,248,250, 43, 46,
+ 47, 47,152,205,231, 56,231,120,240,248, 41, 15, 30, 63,227,227,143, 62,225,244,222, 35,162, 56,198, 58,195,114,118,195,219, 55,
+111, 41,214, 37,247, 31, 60,246,115,249, 56, 33,201,199,225,144,110, 67, 43,122,115,189,247,155,178,198,250, 10,189, 93,127,251,
+ 29,139,174, 24,149,130,186, 42, 88,173, 11,238,159,221,235, 98,166,165, 20,228, 73, 66,172, 36, 74, 69, 20, 85, 77, 85,107,242,
+ 52, 69,215,186,139,216,109,211,220,146, 56,233, 50, 24,188,202,223,219,130, 15, 14, 14,249,248,163,143, 57, 58, 60,193, 58, 88,
+175, 87,136,182, 94,222, 41, 68,251, 60,248, 93,154,234,246,154,183, 97,195,187,237, 83,141,175,184,217, 6,227,244,103,235,187,
+ 57, 44,162,111,105, 59,125,244,228,243, 45, 60,222,142,103,188, 47,104,235,183, 71, 54,220,109,117,167, 24,109,223, 9,178,143,
+114,237,111,254,187, 98,181,221,191,111,213,146,237,191, 71, 29,156,101,187, 13, 18,252, 74, 91,155,191,223, 4, 93,215,182,238,
+230,244,123, 2,233,165,218, 84,247, 54,124,189, 2,154,213,194, 71, 25, 90,211,229,120, 71,209,166, 50,119, 64, 4,158, 4,231,
+ 90, 17,157, 11, 86, 53, 25, 46,212, 13,164, 65,134, 36, 52, 31,199, 25, 46,218,240,254, 14,211,152, 40, 8,223, 18,165, 88,215,
+149,143,108, 53, 94,161, 44,149,164,106,124,213,158, 36, 49, 10,127,210,116, 64, 89, 55,222,181, 21,197, 36,147, 3,210, 40, 66,
+215, 26, 43, 36,195,201, 1, 38, 27, 98,194,169,174, 49,206, 43,228,165,191,224,163, 56, 38,207, 6, 8,124,202, 18, 78,132, 13,
+171,151,178, 36, 54,155,254, 93, 34,195,119, 89, 12,247,233, 38,246,253,253, 79, 57, 16,200,222,125,208,218,218,172,179,140, 70,
+ 35, 84, 20,113,122,114,202,106,189, 66, 74,197, 50,228, 89, 39, 89, 70,163,171,206,206,214,250,240, 61, 43,192, 5,191,117, 47,
+ 95, 94, 41, 6,227, 17, 73, 36,169,170, 53,243,121,177,125,244, 8,173,251, 56,142,125, 39, 96, 39,109, 45,201, 50,156,112, 20,
+235, 53, 81, 28,177, 90,174,192,186, 61,198, 83,187,149,220,220, 90, 76,183, 64, 22, 98, 95, 48,237, 93, 3, 18,135,227,142, 78,
+ 72,216,240,157,245,222,245,186, 88, 82, 23, 43,164,138, 80, 73, 74, 58,156, 64,228, 5, 71, 55, 23,175, 89,204,111,252, 28, 63,
+116, 71,218, 77,193,111, 16,237,207,179,221,125, 38, 85,236, 15, 71, 82, 33,227,132,124, 56,230,241,227,135,232,186,228,205,249,
+ 5,207,158, 61,231,253,103,239, 51, 26,141, 25, 79,143,249,221,223,255,138,139,183,111,121,255,249, 39,220,123,248, 24,109, 13,
+127,255,155, 95,179,158, 93,113,112,112, 64,185, 90, 98, 12, 60,121,246, 62, 47,190,249,146, 65,158,243,199,223,253,198,123,232,
+ 77,205,241,241, 61, 47,138, 18,126, 54,109,140, 97,181, 92,144,101, 3,142,238, 61, 65, 72,120,241,205,151, 92, 93,188, 98, 56,
+204,137,162,152,245,106,197,186, 40, 80, 66, 82,107,237, 15, 55, 74, 17,167, 3,132,244,179,251,213,106,133, 80, 94,137,157,166,
+ 9, 77,237, 69,115, 50, 82,183,222, 91,241, 35,250,145, 93, 80,214, 93,215,181, 84, 50,112,243,239,248,247,174, 88,217,214, 52,
+ 57, 54,110,140,246,107,219, 24,213,190, 38,105,235, 0,161, 34,234,166,102,181,152, 83,134, 22,181, 49, 22, 41, 36,235,213, 50,
+196,178,150,196, 73,206,100,114,192,114,177, 96,181, 92,176, 88,204,113, 78,176, 92,174,168,155,154, 44, 77,136,179,156,155,155,
+107,192,241,229, 31,126,207,197,249, 27,230,243, 27, 26, 93, 51, 24,142,249,249, 47,255,146, 71, 79,158,112,125,117,133, 49,134,
+203,139,183, 92,188,253, 1, 99, 45,147,241, 1,147,233, 33,101, 85, 34, 67,133,222,119,231,152, 96,189,108, 69,218, 45,248,169,
+ 93, 75, 61, 75,191,241,172,144, 32,108, 76, 83,127, 13,182, 66,179, 56,142,201,146, 20, 33, 28,151,215,215,156,223, 92,115,124,
+112,208,161,186, 91, 86,191, 15,142,241, 81,178,182,197,234, 70,129, 74, 39,189,190,228,244,236,140, 52, 31, 48,191,153,117, 69,
+ 96,187, 54,182, 9,118,155,207, 75,236,132,184,236,119, 94,109, 33,183,219, 2,197,137,205, 1,157,125,155,248,102, 28,185,181,
+169,159, 61,122,242,249, 45, 31,122,216,240,118,231,156, 50, 48,125,251, 88,186,221,170,190, 95,173,237, 46,214,187,194,180,190,
+104,142, 61,116,176,118,174,190,171,116,223, 74, 96,235,157,110,108, 27,105,184, 53,231, 16,155, 42, 78,170, 91, 9, 58,162, 23,
+ 28,211,158,236, 76,104,211,182,222, 81, 37, 4,182, 92,130,109,192,250, 60,116,161,188,143, 60,137, 36,117,109,209,214,120,138,
+155, 0,169,252, 70, 47, 59,141,130, 8, 73, 97,190,122,107,213,157, 73, 18,111,194, 70,164, 79,226,138,148, 32,137,253,166,174,
+ 77, 67,164, 36,171,170, 10, 93, 3,127,113,199, 74,177, 40, 43,178, 56, 38, 9,175, 77, 41, 69, 89,107,180, 14, 21,127,146, 49,
+ 56, 60, 33, 21, 80, 22, 37, 81,236,133, 84, 46, 31,118, 24, 67, 21, 41,106, 93,117,128,136,166,105, 54,126,209,144,101,220, 82,
+215,110, 85,238, 59, 24, 96,209,235,148,136,159,104,105,251, 73,155,247, 78,142,240, 86, 84,175,219,254,222, 56,142, 48,166, 33,
+207, 7,164, 89,198,241,209, 17,101, 93, 18,169,136,229,114,238,147,241,210, 52,224, 70, 55, 89,232,157,181,207,137,110,166,190,
+121,204,152, 56,203, 24,100, 41,186, 42, 89, 44, 75, 31,109,217, 83,163, 70, 81, 68,146,166,225,116, 31,117,180, 46, 41, 5,113,
+146,113,114,122,214,169,110, 23,139,229, 29, 94,100,183, 51, 67,247, 93,158, 46,242,248, 22, 73, 78,220,225, 63,185, 27, 55,219,
+135,150,244, 20, 61,157,223,185, 89, 47, 73,210, 12, 17, 69,164,121, 70,181,184,225,234,229,183, 93, 16, 13,108, 56,228, 62,197,
+ 43,194,154,160, 31,232,102,129, 50, 36,255, 69, 96, 29,241, 32,199, 56,201,195,123,103, 40,233,248,240,227,159,241,250,213,247,
+ 52,225,113,254,245,191,254,191,105,180,229, 95,253, 31,255, 39,255,254,223,254, 27, 46, 46,222,240,226,187,111,105,202, 21, 22,
+203,248,224,144, 36, 27, 50, 28,228, 60,251,248,207,104,234,146, 36, 27, 81,215,154,186, 42,209, 85,201,108, 62,227,242,237, 43,
+172,179,156,156, 61,226,201,251, 31,241,209,103,127,206, 15, 47,190, 97,126,241,154,213,242,138,170, 42,201,210,148,197,108, 65,
+163, 53,141,105,104, 26, 67, 85, 20, 94, 52, 41, 5,113, 36,177, 77,195,213,197,107, 68, 72, 49,107,241,157,126,109,225, 86,254,
+246, 22,176, 10,119, 39,244,202,253, 68,188,178, 71, 52,219,159, 84,229,247, 15, 87,251,224, 92,253, 81, 82,187,166,110,217, 88,
+219,174,169,181, 94,176,103, 60,232, 38, 74, 98, 36,146, 7,143,223, 67, 70,146,197,236,154,203,183,175,152, 30, 29,121, 20,111,
+146, 80,174, 75, 28, 2, 93,150,172,151, 75,230, 55, 55, 96, 13,231,111, 95, 83, 45,215,172,215, 11,138, 98, 77,163,107,202,245,
+138,139,243, 55,124,253,245, 23, 92, 92,158, 83,105,205,193,225,177, 15,225,169, 53,141,246,104,220,201,244,144,225,100, 74, 81,
+149, 88,211,248, 88,228, 22,231, 28,246,147, 56,142,187,215,208,239,142,181,175,211, 24,203,186, 88, 51, 26, 14,186, 49,150,104,
+181, 71,206,145,101, 57, 39, 71,199,100,105,202,213,108, 65,158,164,164, 73, 70, 20,249, 48,174,182, 91, 83,150, 37, 85, 93,133,
+162,107, 3, 2,147,194,219, 59, 31,222,187,199,189,123,247, 17, 50, 98,177,152,119, 12,137,254,232,183, 47,178,236, 23,142,173,
+117,175,125,126,110,103,148,218, 63,127,119, 36,214,118, 2,190, 59,134,222,152, 32, 55,133,200,217,147,103,159,203, 29,223,156,
+216,185, 16,246, 33, 57,247, 85, 86,251,208,171,187,252, 92,119,199,247,222,165,240,116,119, 28, 26,118,173, 71,237,139,238, 4,
+111,129, 78, 36,131,232,192, 43, 20, 55, 41, 68,237,207,234, 11,228,162, 96, 49,235, 11,178, 58,102,179,105,176,181, 79,124,114,
+214,224,132, 36, 14,173, 25,103, 45,165,182,248,151,239,136, 98, 73, 99,160, 54, 94, 41,236,171,122,213, 61,111,127, 49, 90,162,
+200,111,132,214, 26,164, 18, 33, 50, 53, 66, 72,201, 48, 78,168,106,141, 84,138, 50,144,228,186,196,178, 72,177, 46,106, 6,185,
+111, 43,233,198,135, 30, 44, 11,141, 20,254, 84, 41,242, 49,131,233, 33,202,121,188,108,148,165,168,100,136, 86, 81,247, 60,148,
+236,150,106, 31, 15, 27,102, 64, 93,230,115,240,137,182,145,142,206,237,244,128,119,252,235,183,170, 20,238,166,161,253,164, 54,
+101,255, 49,119, 15,127,157, 29,108,115,250, 85, 33,248, 65, 69,222,246, 52,153, 78,209,117,133,146,130,162, 44,168,181,247,206,
+ 26,235, 48,205,198,210,214,158,200,189, 79,221,132,142, 74, 80, 29, 68, 94, 77, 61,153, 78,208,117,201,114, 85, 48, 28, 77,104,
+108, 67, 18,123,159,109,146,101, 76, 15, 14, 40, 86,107, 63,207,115,126,195, 67, 8,210, 44,231,236,236, 1, 85, 93, 49,187,185,
+193,104,141,233, 60,247,110,235,181,108,207,207,221,150,102, 96,147,207,220,111,183,202, 59, 34, 24,249, 73,134,211, 46,155, 49,
+116, 9,132,179,172, 87, 75,226, 52, 65,197, 25,235,235, 11,110, 46, 46,177,141,217,204,243, 2,233,206,225, 48,206, 91,178,252,
+ 7,237,151, 23,149,102,129, 67,239, 71, 73, 88,127, 56,124,254,222,135, 60,127,254, 17,111,223,190,228,197, 87, 95, 49, 95, 44,
+121,249,242, 59,158,190,247, 62, 81, 20,243,245, 87, 95,240,235, 95,253, 45,117, 93, 51, 26, 77,168,138,218,255, 12,163, 89, 45,
+174, 17,129,233,176,154,205,184,186,190,226,242,237,247,152,166, 14, 63,215, 91, 25,165, 16, 52,186,230,229,139,111,248,230,203,
+223, 81, 85,101,224,134,211,161,124,151,139,185,143, 23,173, 61, 92,166, 9, 84,189,209,120,138,214, 13,117,227, 15, 48, 22, 31,
+156, 82, 87, 69,167,178,182,216,206,119,189,239,240,217,205, 66,247,108,224,119,253,126,183, 10,151, 74, 6, 33, 84,223, 21,241,
+ 15, 87,217,239,182,224,119,215,221,214, 10,218,118,156, 90, 40,147,214, 53, 55,215,231,172, 22, 51,162, 36, 13, 17,196,150, 60,
+207,153,207,110,176,206,241,236,131, 15,169,107, 31,230,211, 52, 13, 22, 71, 62, 26, 18, 69,169,143, 58,109,179, 9,156,197, 73,
+ 73,150, 13, 16, 66, 82, 22, 37,139,197,156,170, 42,121,246,193,115,158,127,248, 33,179,249,140, 56, 78,152, 30, 28,243,222,123,
+ 31, 80, 84, 21, 85, 89,131,117, 30,107,107, 93, 23,200, 20, 69,202,231, 18,152,208, 34, 15,133,146,143, 31, 22, 56, 39,136, 84,
+204,253,123,167, 61,125,152,215, 82,121, 8, 77, 68,150,230,140,134, 3,138,178, 36, 82,146,225, 96, 64,154,166,148,101,133,214,
+ 53,163,225,144, 65, 54, 32, 73, 18,146, 52,197, 90, 75,173,181, 71,208,198, 49, 89,146,112,122,116,200,253,123,247,169,116,195,
+236,230,122, 19, 69,190, 71, 32,126,187,237, 46,119,138, 83,233, 49,216,180,255, 7, 43,125,183,206,134,107,193,181,238, 6, 41,
+ 58, 17,157,232,185, 96,172, 55, 20,160,238, 61,121,246,249,214, 74,113,107, 46,184,253, 4,229, 78,139,117, 55,177,166,223, 30,
+223,245,129,187,158,192,109, 23,106,227,238,176, 77,245, 5,116,119, 17,228, 58,202, 93,239, 36, 45,165,231,173,171,254,207, 22,
+194,127,168, 65, 84,135,160, 75,223,241, 74,203,104,171,101, 37, 8, 89,227,210, 19,219,108, 85, 96,117,141,146, 10,221, 24,146,
+ 40, 10,214, 75, 71, 81,155,110,214,174,164,192, 24,168,173,195, 9,235,161, 50,225,132,217,230,226, 74,217,218,176,194,255, 3,
+ 16, 36, 73, 82,108, 99, 24, 38, 9, 69, 85,225,132,160,168, 52,178,119,234,147, 74, 82,213, 13,113,236,253,150, 69,165,145, 42,
+162,168, 52,113, 88,116, 7,103,143, 24, 78,142, 48,206, 98,101, 76,146, 15, 81,249, 0, 27, 84,245,237,169,214, 24,211,169,223,
+ 61, 39,222,251,125,157,117,254, 70,117, 22, 23,182, 31,209, 19,173,185, 61,157,153,125,118,180,119, 1,102,126,108,179, 23, 59,
+158,245, 91,141,230,126,124,121, 56,208, 89, 99, 16, 74,249, 27, 55,203,201,210, 24,221,104, 26,173, 41,170, 2,165, 90,194,220,
+166, 82,111, 43, 35, 41,188, 29,173,131, 75,132,107, 34, 31, 12,152, 76, 70, 84,197,138,229,170,164, 40, 86, 72, 54, 22, 56, 37,
+ 21, 55, 55,215, 24,219,116,202,122,149, 38,228,131, 1, 73, 18,147, 13, 6, 52,186,230,234,202,219, 99, 92,175,178,219, 58,160,
+136,237,150,250,254,174,134,216,138,136,101, 15,250,169, 15,241,184,253,253, 97,124,189, 77, 0, 0, 32, 0, 73, 68, 65, 84,110,
+175, 95,186, 3, 80,225, 40,151, 11, 98, 21, 83, 45,111, 88,204,103, 16, 14, 58,152, 6,103, 52, 32, 72,178, 1, 77, 93, 35, 48,
+136, 56,195, 74,111,245,176,214, 16, 37,190, 27, 34,145,168, 36, 33, 78, 34,166, 71, 71, 76, 70, 83,126,247,119,191, 65, 55,134,
+131,227, 67,116, 99,249,246,219,111,249,195,239,126,227, 57,237, 46, 44,142, 56,102, 55,175, 73,162, 4, 99, 27,162, 40,227,222,
+131,103,164,113,202,197,249, 43,170,229,204,211, 2,149,224,241, 7,159, 81,150, 43,202,245,146,166,174,189,146,221,249,199,170,
+ 10,175,156, 95,204,103, 24,109,168,235,202, 11,179, 66,247,204, 3,102, 34, 64,208, 88, 47,136, 19, 8, 26,173,187,117, 77,135,
+212,197, 70, 55,161,155,246,110, 66,135, 96,155,214,184, 91,156,236, 77,150,236,219,216,240,107,146,189, 21,124,181,199,121,242,
+ 19,104,155,119,141, 4,246,205,220, 93, 43, 80, 51,206,207,219,195,235,108,170, 26,103, 27, 86,139, 27,138,162, 32,203, 7,232,
+186,226,242,237, 75,255, 94, 75, 69,154, 13,153, 30, 28,145,228, 3,142, 79,238,249,238,135,146,124,246,139,255,134,108, 48,160,
+ 46, 43, 22,203, 37,149,214, 36,105,210, 5, 74,213, 85,201,108,177,228,252,252,156, 31,190,255,142, 31, 94,126,207,245,108,206,
+209,233, 25,143,158, 60, 69, 91, 71, 28,197,196, 73, 66, 85, 85,196, 74,133,148,196,182,224,242, 99,195, 52,205,186, 22, 58, 82,
+ 82,215, 21,163,241,136,193,112,136, 12, 7, 23, 37,125,193, 19, 69, 49,105,154, 6,235, 91,142,117,150,178, 40,200,211,148,209,
+ 96,224, 93, 78,206, 49,157, 76,105,116, 67,165, 61,205, 47,142,188,168,216, 6, 36,114,164, 20,147,209,144,143,222,255,128, 44,
+207,185,185,153, 5,196,176,184, 5,152,185,123,131,223,246,191,111,117,235, 4,183,132,232,187,157, 75,217,143,133, 13,143,163,
+238, 5,245,123,127, 97,233,236, 40,119,180, 74,219,214,199,238,223,237,166,160,237,125, 1, 61,128,205,238, 98,223, 37,193,109,
+197,218,237, 15,100,233,171,139, 91, 22,189, 10,209,120,187,201,111,237,247,245,231,240,237, 59, 97, 67, 88,138,175, 72,183,219,
+178,221, 8,192, 89, 31,255,167, 53,182, 42, 73,147, 8,173,107,148, 18, 93,107,167,214,254,228,152, 40,159, 75, 30,199, 49, 69,
+237,185,216,137, 20,196,106,147, 78,100,157, 37, 73, 34,255,245, 73, 10,132, 89,185,244,249,211,206, 90,226, 80,161, 59, 97,169,
+ 67,165,100,218, 81,130,244, 74, 78, 41, 28, 81,148,114,189, 42,145, 10,172,147,196,145, 68, 35,153, 60,122,143, 56,203,145,113,
+228,231,141,113,140, 72, 82,207,133, 15, 56, 88,235,108, 71, 20,243, 85,139,246, 42,120, 99,130,253,174,109, 61, 6, 88,141,219,
+108,232,125, 18,221,173,246, 96, 95,203,176,167, 21,252,174, 8,220, 45,147,248, 62,133,113,223,218,214,210,167,194,169, 86, 69,
+ 10, 27,198, 30,227,131, 67,172,105, 56,156, 78,169,170, 10, 16, 20,171,117, 24,199, 40,116, 93,117,170,117,219, 6,109,116,155,
+186,232, 90,103,113, 28,147, 15, 6,140, 71, 67, 86,139, 5,179,217, 42,168,114,155,110,131,214, 90,251, 27,189, 35, 67,250,235,
+241,201,179,231, 12, 71, 99, 16, 48,159,221,176, 94,175, 55,213,185,235, 8,241, 61,113,144,219,105,163,239,107,173, 91,246,152,
+103,216,159,105,200,143,186, 11,246, 54,240,157,163, 88,206,169, 86,107,159,209,109, 77, 55, 50, 18,120,156,174,105,106,255, 49,
+ 37,121,224,224, 71,126,205,136, 21, 70, 27, 68, 20, 51,152, 78,137,199, 62,248,227,240,240,152, 23, 47,190,161, 88,123, 27,224,
+ 96, 56,226,226,245,119, 32, 28,131,225,148, 55,175,127,224,253,143,255, 44,228, 41, 8, 86,171, 21,113, 44, 25, 15, 15, 56,123,
+240,132,211, 7,143,200,242, 1,175, 95,126, 71, 89,174, 59,215,193,205,213, 21,194, 89,172,107,208,141, 38, 82, 49, 73,228, 43,
+ 46, 21,249,196, 49,227, 44,214,216, 46,148,196,118,185, 9, 46, 88,162, 36,131,209,129, 63,144,225,168,171, 10, 99,253,225,182,
+169,181, 87,249, 7, 78,121, 59,207,238, 14,149,237,239,109, 88, 96,223, 1,142,121,215,232,169,219,244,129, 72,170, 91,214,181,
+ 54,143, 2,185, 1,205,252, 41,157,175,125,254,247,189,207,165,223,141,179,155, 33,147, 53, 62,129,178,181,192, 14,199,195, 0,
+185,242, 85,125,163, 11,138,245,146,166, 40,184,186,186,160,210, 21, 77, 99,121,243,230, 53,179,229,188,151,101,224,117, 58, 73,
+150,161,141, 97, 85, 22,172,151, 43,140,243,122,151,186,214,204,110,174, 57,127,253,154, 55, 63,124,207,213,197, 91,138,245, 26,
+164,228,240,232,152,131,195, 99,132, 76,136, 99,133, 66,114,118,122,143,193,112,194,106,189, 12, 93, 87,112,214,175,231, 77, 99,
+ 56, 58, 60,244, 27, 93,164, 72,211,196,167,240,133,206,164,183, 87, 71, 36,113, 74,156,250,144,172, 44,203, 56,154, 30,208,104,
+205,106,189,226,209,131, 7, 30,248,213,248, 28,121,191, 87,248,117, 60, 82,138, 72, 41,146, 56,230,233,163, 71,124,252,209, 71,
+ 40,169,184,188,186,232,186,158,109,113, 40,118, 29, 99, 98, 91, 15,212, 63,180,183,127, 47, 17, 72,231,250,228,101,148, 11,193,
+ 86,248,251,164, 69,187,219, 62, 56,238,244,225,227,207,111,109,154,237,205,190, 67,127,235, 7,179,236, 10,130,250,149,123,247,
+247, 61,175,123,255, 36,218,127,188,182,122,221,151,180,214,111, 17,181, 98,173,109, 69,187,220,146,243,111,133, 95,244,146,225,
+250,173,255, 54,109,170,127,211,200,112,195,202,144, 57,188, 85,149, 6, 59,133, 84, 10,171,107,159,179,110, 52,177,242, 66, 54,
+127,250,243, 22,179, 82, 55,196, 74,250,121, 99, 20,177,174,125,171, 85, 6,180,108,235, 81,116,214,249,100,182,198,118,179,154,
+198,152,112,170,147,152,128,144,173,181,193, 73, 65, 85,153, 14,222,159,132,139,210, 43, 53, 35,140,117,220,172, 10,162, 56, 34,
+ 82,145,223,220,227,140,163,199,207, 16, 74, 33,226, 8, 3, 68,113, 2, 50, 10,149, 73, 80,209,219, 13, 37, 80, 6, 53,101,211,
+ 4,150,119,208, 32,108,141, 60,118,211,217,118,171,243, 61,200,224,187, 22,180,189, 21,254,158, 5,199,237,177,182,117, 98,205,
+254, 98, 39,232,110, 62, 25,208,155, 82, 69,156,157,157,176, 94,175, 49,214,159,198,173,245, 62,124, 99,180, 87,116,247,194, 92,
+ 8,175,191,239, 33,151,202,183,145,167,211, 49,243,235,107,150,171, 98,163,188,101, 59,217,174, 15,108,242, 96, 32,197,225,201,
+ 9, 85,185,224,237,155,183,152,166,217,178,227,109,143, 50,118,229,237,242, 39, 83, 2,254, 20, 43,225,187,116, 11,244, 94,207,
+ 48,207, 89, 46, 87, 52,166, 9, 7,183,128,215,141, 18,226, 65, 30, 98,102, 27,136, 83,148, 76,176, 85,225,223, 75, 33, 25, 76,
+ 15,153,156, 30,163,146,216, 95, 67, 50, 98,177, 90, 50,156, 76, 89,173, 86, 24, 93,146,102, 67,116,101,121,244,244, 35, 46,206,
+191,199, 1,217, 96,192,119, 95,254,142,170,208, 8,225,124,200, 74,163, 89,149,107,102, 87,151,124,245,197,239, 41,215, 75,156,
+ 19,148,229,202,183, 98,149,191,238,133, 12,161, 50, 33,156,197, 57,219,121,190,109, 99,200, 36,126,222,223, 83,129,139, 54,241,
+207, 57, 48,206,119,237,164,236, 72,132, 62, 95,220,244,236,183,219,220, 12,225,216, 8,153,222,161, 31,217, 87,160,188,235, 87,
+183, 54,137,109, 63,122,223,238, 33, 16, 63,249, 51,126,215,115,217,237,136,110,117, 86,123,247, 99, 95,123, 98,141,247,161, 99,
+ 55,217,235, 54, 92, 35,109, 58,165,144,210, 39, 2, 70, 18, 21, 70, 81, 42,142, 81, 73, 76,148,196,158, 46, 23,222,127, 99, 12,
+117, 93, 83,148, 37, 77,211,144,132,110,105, 54, 28,121,220,237, 96,202,205,236,138,155,155, 75,170,178, 98,118,125,205,186, 40,
+120,244,248, 9,191,252,171,191,162,214,154, 56, 75, 81, 42,226,248,232,132,199, 79,158, 81, 20, 21,171,213,154, 15,159, 63, 39,
+ 75,115,226, 40,198, 58, 65, 18, 39, 36, 73, 26,112,177, 81,119,152,246,177,177,145, 31, 61, 10, 56,156, 78, 25, 13,115,230,243,
+ 69, 7,161,242,243,121,175,133,242,130, 58, 13,150, 32, 52,246, 45,252, 39,143,159,240,217, 39,159, 82,150,165,207,109,151,226,
+118, 32,204, 78, 58,219,214, 62,197,109, 97,157,227,110,216, 91,187, 91,201, 94,177,163,238, 63,125,239,243, 86, 21,206, 14, 67,
+189, 21,203,237,122,194,111,217,202,246, 44,216, 46, 8,214,222,181,120,187, 91, 25,181,251, 90, 19, 50,248,222, 55, 27,110, 63,
+ 37, 78,244,114,221,251, 73, 89, 45, 98,181,109,203,118, 96, 26,122,111,112,103,223, 18, 93,235,169,205,125,247, 11,133, 12,192,
+153,224, 63,182,190, 58, 54,186,102, 24, 75,154,112, 81, 59, 7, 81, 36, 89,150, 53, 82,248,141, 23, 33, 88,107,141,182, 16, 73,
+137, 18, 46,228,244,110,124,135, 42,242,237, 98,165,130, 93, 3, 71,146,198, 33,198, 50, 96, 75,113,232,102, 83, 18,164,137, 34,
+138, 54, 16,157,166,105, 88,213, 13, 74,122, 81,151,192, 33,135, 83,210,201,161,143, 62,180,198, 43,217,195,197,225, 2,160, 68,
+181, 81,159, 61,159,100,247,188,100, 0,226,132,104, 88,211,165,127,189,195,186,115, 71, 75,254,174,246,251,238,103,110,239, 16,
+ 7,109,210, 23,237,158,138,114, 91,133,174,130,245,168,139, 79,148,146,179,147, 83,138,181,143, 96, 93, 23,171,144,142,167,168,
+202,178, 3,138,244,189,234,219,155,122,168,212,243, 33,147,201,152,213,114,206,114, 85,110,143,138, 58, 97,166,236,156, 1,126,
+188,226,181, 9,207, 63,252,136,197,205,140, 60, 31, 50,155,207,252,253,228,122,185, 13,253, 62,132,187, 75,197, 78, 15, 94,177,
+ 43, 27,220, 95,115,139, 61,137, 80,183,133,114,183, 25, 0,221,225,215, 52,172,138,117, 87, 93, 33,101, 71,164, 54, 85,233,133,
+148,113,138,106, 28,214,105,191,152, 36, 41,249,228,128,193,217, 25, 34,220, 3, 14,135,147, 18, 21,197, 12,243, 17,105, 62,228,
+252,252,130, 98,181,196,153,154,229,242,154, 52, 27, 51,200,115,144, 17,186, 42,177,182,161,177, 94, 89, 47,132, 32,207, 71,204,
+110,174,105,170,218,111, 44, 66,120, 81,147,105,130,245,204, 82, 20,107,176, 62,230, 88,135,128, 26,135,192,104,205, 40,242,182,
+ 38, 35, 19,127,112, 14,218, 25,169,100,239, 32,239,200,243,140,178, 88,227, 11,122,215, 69,157,210, 41,156,183,123,224, 91,122,
+228,240,129,182,145, 17,110, 7, 13, 74,207, 71,204, 59, 14,189,219,105,133, 59,155,186,184,125,117,252,216,227,237,174,215, 63,
+118,184,232,219, 50, 85,228, 67,146,220, 22,157,180, 79, 56,180, 97,141,247,235, 21,194, 31,128, 91,148,177,140, 35,226, 52, 37,
+201, 82,226, 44, 35,201, 50,210,193,192,255, 62,245,127, 86, 82, 5, 16,146,183,217, 58,231,168,235,134,198,104,170,162, 96, 57,
+ 95, 48,159,249,110,140,214,190,107, 18, 7,143,185,177,240,250,205, 57,175,127,120,193,229,219, 55, 44, 23,115,138,178,228,102,
+ 62,195, 57,203,193,100, 74,150, 13,136, 18,255,184,195,193, 48,196, 88,107,162, 40,246,128, 46, 92,151, 25,143, 16, 36, 73,130,
+117,142,197,122, 69,154,196, 28, 78, 38,148, 85,137,146,138,209,112,136, 20,144,196, 49,105,150,134,245, 86,116, 93, 94,129, 32,
+ 77, 98,142,143,142,248,229, 95,252, 37,159,126,252, 9, 87,151,151, 62, 2,186,165,254, 5,154,222, 46,251,189,239,104,107,239,
+241,109, 30,252,166,128,233,255, 39,130, 80,174,255, 17, 69,237,197,234,118,111,240,128,131,220,253,160,251,196, 57,217, 9, 33,
+220, 86,219,105,183, 5,191, 47,243,188,127, 88,224, 29,234,247,190, 79, 61, 78, 18,111, 95, 8,217,205,221, 38, 31,236, 97, 66,
+109,183, 44,189,170,115, 99, 77,107, 1, 51,125, 49, 92,167, 71, 9, 25,234, 22,219,249,198, 17,108,226, 3,165,132,196,211,149,
+156, 49,216,106,193, 32, 75, 41, 43,237,113,155, 64,166, 34, 26, 99, 81, 89, 68,161,235,112, 40, 48, 88,160,208, 22, 37, 28,113,
+236,130,210,220, 32,140,199,147,122,168,141,195, 52,142,104,164,168,145,212,193,171,106,173,161,177, 13,206, 41,164,136,186, 76,
+225, 22,180,210,126,236,198,181,239,175, 34,206,135,157, 7, 62,138, 34, 76,152,243, 8,231,176, 33,136,196,226,124, 8, 77,139,
+254, 13, 42,127,239, 71,182, 29, 97,141, 78,180,225, 59, 16,214,184,173, 78,206,150, 14, 98, 79,155,253, 46, 10,215, 59,195, 92,
+122,157,129, 62, 43, 97, 19,102,225,246, 8,190, 68,104,177, 10,140,181,196,113, 76, 89,172, 59,205, 64,211, 24,162, 56,161,209,
+197,150, 80,114, 19,174,210, 35,188,245,246, 56,139,143,186, 21, 66,145,100, 73, 15,148,177,113,127, 72, 41, 25,142, 70,228,195,
+ 33,243,171, 43,106,173, 81, 82,117,110,129,178, 42,253,231,189,101, 61,113,183, 77,103, 59,239,161,127,142,225,107, 59,193,148,
+184,229,165,191, 75, 76,239,110, 7, 66,109,223, 31,239,208, 66,100,113,138, 48,230,255,167,237,205,154, 44, 73,210,243,188,199,
+195, 99, 61, 91,158, 92, 42,107,223,186,122, 95,208,221,179, 1, 24, 12,193, 1, 8, 98, 35, 65,137,102, 36, 69, 19, 37,147,153,
+ 76, 23,148, 81, 50,234, 66, 63, 0,183,250, 21, 52, 74,102,210,133,126, 1, 37, 25, 9,129, 48,112, 48,192,108,152,233,158,238,
+234,170,174,125,201, 61,243, 44,177,187,187, 46,220, 35, 78,156,147,153,213, 13, 26,149,102,105,221, 89,149,149,203,137, 8,119,
+255,190,239,125,159, 23,227,200,106,109,247,203,147,120,161,143, 8,124,116,158, 83,234,202,126, 93,233,163,241, 88,191,254, 26,
+189,141,117,178,233,140, 50,155,225,213, 54,107,221,212,138,241,104,141,167, 79, 30,130,177,240, 19, 35,124,148, 50, 92,184,116,
+147,221,151, 79,200,143,142,201,103, 41,181,174, 40,138, 28,173, 52,107,227,117,187, 40, 3,121, 49,199,247, 37,243,227, 41,210,
+179, 68,188,170,200,201,179,202, 5, 25,105,188, 32, 32,244, 96, 45, 14, 56,152,165,248,210, 99,115, 60,226, 56, 45, 41,138, 2,
+233,198, 41, 69,158,227, 75, 65, 85, 87,206, 10, 9,113,111,132,214,154, 34, 79, 45, 73,210,173, 27,173,118,195, 99, 73,175,208,
+ 4, 35, 45,186, 29,167, 59, 85, 13, 45, 76, 59, 13, 79,247,190,251, 42, 33, 93, 23, 6,213,109,135,159, 7,161,121, 85, 76,236,
+215,137,144, 93,173,206,173, 43,192,107, 79, 16,178,165,124, 90,188,178,104,133,117,142,111, 41,108,245,237, 5, 1, 34, 8,221,
+134, 30,179,190,185,229,186,133, 1, 81, 28,211,235, 37, 8,167,108, 47,203,202,209, 16,237,186, 26,250,146, 36,234, 99,140, 33,
+ 77,103,236,191,124,134, 16,130,162, 44, 73,164,199,209,209, 33,243,185, 5, 74, 73, 35, 28,176, 9, 60,223,166,175,229, 69, 73,
+ 47,233, 17, 70, 33, 39, 66, 48,153,229, 12, 71, 16,245,122, 60,223,221,103, 60,236,115,241,194, 5,138,178,160,168, 74, 6, 73,
+ 31,129,108, 92,165,173,227,197,247, 3,142,231, 5, 85,165,185,176, 49, 38,207, 51,180,170,217,190,112,193,230, 72, 32,232, 39,
+ 22, 61,107,181, 73,117,171,213,169,141,193, 80,114,235,250, 77,254,229,255,248, 47,249,209,143,127,196,191,249,191,255, 13,251,
+ 71,135,228,133, 21,226, 89,228,184,118,200,112,221, 22, 22,139, 52,184,197,254,169,219,235,190, 40, 8,149,235, 48,121,103, 20,
+ 90, 45, 38,182,217, 60, 57,199, 87,217,204,171,165, 59,217,118, 67, 86,228,138, 96,238, 44,145,219,170,104,174,249, 59,217,216,
+228, 58, 33, 50,221, 9,225,146, 34,191, 57, 80,184, 95, 60, 8,252,133, 77,205,253,163, 5,242, 83, 57,225,148,171, 52,221, 92,
+173,133,212,152,142,183,185,201, 52,239,136,134,236, 41,206,169,229, 27, 8,141,123,129,101, 24, 99,170,130, 65,232,132,101, 70,
+163,149,109,171, 23,202, 42,216, 43, 23,138,145,215, 86, 40,167,141, 33,144,146, 80, 74,235, 73,215, 26, 85, 59, 33,138,214,212,
+202,182,240,141,209, 40,229,172, 28, 74, 81, 42, 77,237, 20,243,129,244, 8, 3,175, 19, 77,104, 23,157,121, 94, 83,106, 72, 2,
+ 31, 63,140, 9, 55, 46,224,133,161, 21,176,187,153,120,115, 58, 12,253,160, 37,125,181,179, 25, 79, 58, 13,133,110, 15, 82, 30,
+ 2, 41,236,251, 2,107, 42,206,174,240,224, 76, 91,226, 89, 85,194,215, 17,202,137,229, 35,235,138, 58,252,180, 88,164,241, 94,
+123,222, 98,113, 29,140, 70,104,163, 88, 95, 27, 3,216, 76,122,101, 67,113, 60,207, 86,122,182,165,108,218,140,243,198,115,221,
+ 77,110,147,129,207,112,180,198, 96,216, 39, 79,167, 76,167,169,237, 10,116,112,194,113,146,216, 32,157, 44, 35,233,217,156,106,
+ 91,249, 37, 92,189,126, 3,173, 20,199,135,135, 45,127,222, 51, 44,217,160,186, 2,183,115, 85,236, 98, 25, 76,179,252,186,153,
+149, 10,254, 52,144,228,213, 54,184,211, 94,235, 74, 85,164,217,220, 82,191,140,182, 42,114,165,236, 60,186,174,168, 43,155,136,
+ 22,184, 49,135, 39, 60,100, 16,179,121,243, 6,198, 8,250,107,235,244,215,198, 8,223,119,155,159, 38, 75,231, 80,229, 72,135,
+228, 28,111,108,115,178,255, 28, 53,217,103,154,165, 76,142,143,172,157, 40, 75,173, 94, 36,140,185,121,231, 77,162, 56, 65,213,
+ 53, 73,220, 35,157,167,212,101,238,218,234,245, 98, 83,113,241,154,104, 99, 83,216,234, 26, 37, 4,218,192, 36,175,237, 33,217,
+ 24, 12, 30,189,193, 0, 99,106, 43,170,116,130,200, 32, 76, 8,162,200, 69,246,218, 3, 64,107,215,115,173,122, 79,122,103, 90,
+148, 16,103,193,129, 22,151,106,184, 49, 38,238,247,240,157,102,163,113,220,156,167,128,239, 94, 99,179,146,200,246, 55,157,163,
+191,138, 33,113, 94,177,213,126,236, 58,133,150,172, 41,157, 29, 87, 47, 1,189,108,129, 43,108,171, 93, 74,103,137, 12,136,251,
+125,130, 36, 97,180,190, 73,220,239,147, 12, 7,172,141,199, 36,131, 1, 97,191, 79,111, 56, 64, 38, 17,194, 11, 40,234,130,249,
+ 44,101, 54,155,114,116,120,192,206,206, 11,246,118,159,115,120,112, 96, 15,231,101, 65, 16, 4,244, 6, 67,134,107, 99,162, 56,
+ 33,137, 99, 27,115, 93,169,150,231,208, 32,180,237, 70,171,168,139,146,227,227,125,210, 52,165, 44, 42,102, 39, 7,124,227, 91,
+191, 74, 81, 89, 29, 85, 85,164,182, 43, 84, 87, 75,123, 83, 94, 20,110,111, 18, 84,218,144, 21,182, 64,219,218,220, 64,213, 53,
+195,225,144, 36, 73,236,154,238,251, 68, 81,136,244, 4, 81, 24,182, 89, 25, 30,154,170,178,120,234,235,215,111,242,221, 95,255,
+ 46,158,240,216,223,221,181, 27,177,183, 18,217,186, 50,115, 95,134,183,117,148,146,139,126,253,233,118,124,115,248,186,112,237,
+198, 31,211,153, 35,175,230,165,175, 6,212,119, 83,220,196,138,239,177, 57, 24, 4, 65,208,225,187,159,223, 98,106,126,240,230,
+192, 96, 58,237,198,238, 24, 96, 65,237,177,159,228, 75, 31,233, 75,151,124,214,137, 92, 21, 11,145,146,173,182,235, 78,203,171,
+147,246,213, 68,162, 98, 51,209, 45,209,199, 44,181,199,148, 82,237, 2,223,140, 18,154, 3,141,231,121,144,244, 9,242, 57,161,
+ 19,150, 41,160, 86,138,162, 86, 4,158,135,198,102,171,151,104, 7,113,209, 4,158, 36,137, 66,132, 39,200,138,146, 74, 27,140,
+139, 98, 5, 75,158,171, 74,229, 60,163,134, 90,215,212,218,107,245, 2, 66, 24, 66, 63,112, 22, 36,119,154,243, 60,242,178, 38,
+175,173,197, 42,217,216, 32, 28,172,227,133,161,123,232,180, 11,168,145,248,210, 39,240, 36,113, 16, 18,248, 62,129,148, 72, 79,
+ 16,120, 16, 74, 15, 97, 12, 81, 24,226, 53,179, 67,161, 23,177,142, 13,120, 4,179,136, 63,237,130, 19,190,162, 58,120,213,204,
+241, 44, 27,163, 89,113, 68,172,170,238,155, 74, 73, 47, 40,200,246,244,238,132,141, 81, 28,163, 13,140,134, 35,194, 40,100,158,
+218,234, 43, 47, 82, 80, 11, 15,111, 99,117,178,182, 30,209, 6, 72, 52, 7, 89,233, 7,248, 65,192,104, 96, 55,245, 52,205, 23,
+129, 88, 29,248, 76,145,103,212,117, 77, 89,148, 4, 29,223,186, 50,134,183,223,124,139, 23, 47,118, 72,211,217,146,192,207,156,
+ 25, 88,124,218,218,214,249,104, 5,169, 41,206,152,173,155,206, 6, 35,120,213, 30,240,170, 56,221,192,151,164,243,212,118,107,
+ 60,223,233, 51, 34,219,245,241,164, 19,198, 9, 43,170, 20,224, 5, 33,227,139,151, 89,191,122,139,116, 54, 5, 85, 96, 60,159,
+193,104, 29,207, 15, 93,248,145,102,115, 60,230,234,181, 91, 4, 97,108, 3,106, 60,152,206, 38, 84,121, 78,216,235, 83,228, 25,
+ 23,175, 92, 39, 47, 21,227,141, 49, 70, 25, 30, 63,248,130,201,241, 49, 51, 7, 68, 49,216,241,152, 17,160, 84,101, 69, 80, 73,
+ 15, 79,250,109, 21, 84,105,211,182,239,133,108, 90,237,118,228, 20, 70,129, 35,142,233,246, 80,175,117,205, 96,184, 70,150,231,
+ 54,136,167, 42,209,170,118, 27,160, 91,235,140, 62,117, 0, 51,102,249,112,181, 60, 30,178,207,109, 93,219, 49, 65, 81,216,132,
+180, 94,175,183, 68, 69, 59, 43, 38,186, 9, 17, 17,136,115, 97, 77, 95,167,237,126,158, 95,254, 85, 29,181,110,113,230, 75,191,
+237,128, 90,101,119,135,150,102, 4, 32,173, 13, 43,240,145,126, 8,158, 71,152, 36,132,113, 76,152,244, 8,251,125, 6,235, 99,
+214, 47,108, 49,218, 88,231,189,119,222,230,251,223,253, 53,254,179,223,251, 61,254,235,255,242,159,113,233,227,111,112,255,243,
+135,164,243, 9, 85, 81,161,155,195,119, 85, 83, 87,165, 21,209, 41, 69, 58,157, 49,155, 76, 40,178,148,249,108,198,108, 54,103,
+ 56, 26,210,239,245, 90,200, 76,163,141,105,102,252, 13,125, 51,136, 98, 48,134,191,251,187,127,143,157,221, 61,158, 60,121,200,
+250,198, 22, 74, 27,134,253, 1,113, 20, 33,189, 69,200, 74, 24,132,110,127, 16,173,240, 87, 27,193,116,158,146,244,251, 68, 97,
+ 72, 93, 22, 68,161, 77,105,108,198,158, 24, 99, 25, 35,190, 21,208,121, 46,165,208, 30,228,124, 62,252,240, 35, 62,254,248, 99,
+142,142, 14, 73, 83, 27,247,235,251,114, 89,175,182,228, 80,241,150, 15,232, 98, 33,140,235, 10,138, 13,166,237, 26, 25, 79, 44,
+ 87,234, 93,161,143, 56,163, 98, 90,218,104,207,240,168,175, 46,226,194,205,101,206, 82,202,119, 63,150, 43,228,186,110, 23,160,
+ 21,104,104,237, 48,158,139,155,221,115, 17,161,184,205,166, 17,118, 53,153,226,158,183,220, 85,104, 54,243,110,136,135,105,230,
+181,157,249,125,227, 37,247, 26, 86,188,155,121, 27, 71, 97,210, 74, 65, 16,162,138,146,190,175,157,135,177, 6, 4,133,178,169,
+ 72,181,182,153,216,149,182, 62,104,187,121, 10,122, 97,224,128, 50, 53,165,214,148,117,141,241,164,245,184, 27,231,189,116,121,
+237,133, 54,237,108,219,206,126,236,117, 82,202, 50,228,125, 41,172, 26, 83, 8,114, 23,210, 50,190,124,147, 32,233,225, 7, 65,
+171, 39,240,125,233,188,149,214, 95,153,196,145,245,108,122, 16,152,146,141, 97,159,155, 23,199, 92, 28,245,185, 48,140,233, 71,
+ 33, 85,145,225, 11,171, 20, 23,221,140, 96, 99, 28,163,120,133,130,212, 57, 48, 45,165,248,157, 35,128, 60, 87, 24,215, 13,115,
+ 57, 99,203, 19, 43, 42,248,198,165,209,160, 37,219, 92,117,191, 33,228,197,108,172,175,115,120,116,132,116,243,214,230, 97,213,
+170, 70,105,219,158,183, 21,135,215,122,215, 27,133,171, 39, 37,195,209,144,209,112, 64,158, 78,152,205,173,146,190, 86,150, 29,
+208,204,100,149, 82,205, 74,183, 20, 24,148,244,251,124,118,247, 19,182, 47, 94,226, 96,111,111,233,254, 53, 75,112,138,118,219,
+126,197,188,124,209,150,235,126,188, 88,199,205, 18,113,236,172,179,214,105, 91,187, 88,138,185, 53,110, 97,172,148,178,169,128,
+ 66, 0,150,113,111,202,202, 45,158,170,181,132,106,103,165, 49, 26,198,151, 46, 67, 16, 49, 24,173, 81,151, 21,170,204, 40, 84,
+141, 16,144,244,134, 8, 41,216, 26, 14,209,117,142,174, 21, 39,199,187,108,142, 55, 56,153,204,168,148,177, 74,226, 56,177,243,
+ 86,233, 49, 24, 36, 8,207, 48,222, 88,119, 27, 12,132, 81,224, 4,141, 86,204,134, 39,136, 93,222,119, 16,197, 12, 6, 35,100,
+ 16, 17,134,177,163,196,249, 36, 73,159,126,127,136, 17,134,168,215,115, 86, 33, 7, 91,113,190,231, 56,138,241,165,199,225,238,
+ 30,190,244,169,157,216,206, 58,135, 93, 1, 33,204,121,147,166, 51,245, 30, 0,194, 37, 62, 14,135, 35,146, 94,130, 31,248,172,
+143,215, 57, 57, 57,121,165, 70,169,219,162, 55, 30,175,156,201,159,167, 73, 58,111,220,181,186,217,175,118, 82,187,136,109,123,
+120, 94,198,178, 54,135, 26,207, 19, 14,163,234,163, 49, 72, 25, 32,124,137, 23, 72,188, 40, 34, 25,140, 24,109,110,242,237,239,
+253, 38,255,253, 63,251,167,252,183,255,197, 63,230, 15,191,247, 61,190,249,246,219,108,109,111,163, 67, 31,111,109, 76,230,173,
+241,240,211,159, 81, 87,181, 67,215,186, 60,117,163,241,156,144, 46,240,125, 64,217, 67, 91,101,157, 23,101, 89, 80, 86, 37, 85,
+ 85,181, 14,151,174,240,181,161,144,190,245,246,187,140,215, 70, 28, 79,142,120,248,224, 62,191,255,123,255,128, 52, 75,137,162,
+152,254,104,196,218,104,141, 94,210,183,192, 40,199, 33,104,210,254, 60, 79,162,116, 13, 24,170,170, 38, 77, 51,210, 44,103, 52,
+ 26,225, 75,159, 36,137,108, 84,181, 47, 25,174,143,173, 98, 93,184,144, 48,223,190, 78,129, 47,219, 34, 96, 99,125,157, 15, 63,
+250,136,219,183,110,241,252,197, 11,151, 12,231, 45,146, 65, 29,189,174, 77, 27,245,108, 4,118,155, 61,191, 34, 84, 95,141,168,
+ 22,158,135,191, 10,245,160, 19,226,210,253, 34,109,213,202, 57,152, 59,183,192,117,171,107, 58, 11, 80,227,201,238,206,226,151,
+ 23,119,125,138,216,164, 59,226,172,166, 21,174,148,162,114, 11,163,239,251,237, 70,226,121,182, 98,174, 85, 67, 69, 51,237, 2,
+217,216,222,194, 48,112,240,126,185, 0,149,184, 86,188, 37, 14, 45, 44, 78,190,107,145, 55,115,142, 38, 48, 70, 91,105, 51,194,
+128, 30,172,161,166,150, 84,149,151, 37,101,165,240, 61, 65,213, 88,196,220, 89,171, 54, 6,129, 79,221, 28, 62,132,245,164, 23,
+ 74,163,141, 38, 54, 32,195,144, 82,105,180, 1,175,214,212,198, 80, 43,251, 96,249, 46,193,205,151,134, 90, 43,148, 22,104, 93,
+ 32,189,208,138,224,114,171,186, 15,226, 1, 97,175, 79, 16, 70,104, 1,129,144, 8, 97, 23,173, 80,122,188,255,206, 91,252,218,
+119,190,195,120,188,206,139, 23, 47,169, 78,142,248,240,218, 58,178,180, 9, 86,181,170,172, 85,200, 93,247,231, 7,199,220,125,
+186,199, 95,125,241,132,105, 81,145,187, 3,139,208,134,122, 65, 36,239,120,156, 23,221,154,110, 87,228,188,217,223, 89,226, 75,
+ 86,128, 51,221, 42, 93,116, 14, 97, 6,240,244,194, 10,182,186,100,149, 85, 69,127, 56, 98, 62,155, 19,248, 33, 24,207,138, 96,
+180, 70, 87,218,102,129, 47,109,160, 54, 31,124,181,106, 22, 90, 83,150, 5,202,109,216,129, 47,219,195, 37, 88,209,140, 49, 22,
+ 98,210,237,242, 20,101,201,214,246, 37,252,164, 71, 48,139,121,242,248, 73,171, 61, 81,173,101,197,141,118,132,109,115,122,230,
+171, 45,104,167,237, 73,167,105,114,171,237, 97,173,207,210, 58,184,223,207, 89, 2, 27, 13, 74,251,210, 27,160, 25, 87, 73,105,
+169,138,162,196, 8,129, 31, 68,206,234,105,108,166,129,178, 93,188,160,215, 39, 73, 18,202,170, 32, 24, 12,144,194, 67,213, 37,
+218, 24,242, 98, 78, 40,125,140, 22, 68, 97, 76,224,135, 4,226, 10,235,219, 23, 57,154, 76,184, 16, 39, 28, 31,236,177,185,185,
+201,108, 54,227, 63,255, 71,255,148, 90, 27,210,172, 96,231,229,115,132,119,151,253,157, 23,108, 95,187,206, 96,184,198,252,228,
+144, 47, 62,251, 4,207,225,105,165, 19,189,230,197,156,170,168, 8,130,144,164,159, 88, 4,108, 16,130, 20,110,179, 15, 48,194,
+ 67, 8,187,248,139,186, 70, 43,136, 70, 67, 60, 63, 98,115,235, 2, 71, 7, 7,110,243,142, 80,170,116, 57,241,242,149, 27, 36,
+ 75,221, 44,231, 28, 66, 32, 12, 92,216,216, 98, 56, 94, 35,157,206,152,207,231, 28,236,239,211,239,247, 73,211,180,117, 96, 44,
+ 92, 62, 30,202, 88,194, 91,115, 61,132, 62, 61, 14, 61, 75,236,214, 77,181,252,155, 36, 37,118, 59, 6, 45, 91,189, 33, 26, 90,
+ 1,206, 82,183,211,122,241,125, 55,219, 21,224, 53, 99, 81,215,154,151,182,106,151,113,196,250,165, 27,124,255,159,252, 55,188,
+126,117, 64,207,253,235,220, 61, 75, 18, 65, 32,224,221,143,127,133,159,255,135,143, 72,255,242,223, 83,250, 1,120,121,187,126,
+218,145,143,162,168, 43,192,142, 52, 61, 64,212, 86,196, 88,212,117, 91,120,105, 93, 59, 49,178, 92,154, 77, 31, 29, 31,129, 30,
+113,229,218, 77,174, 94,185,197, 95,252,224,207, 88, 91,223, 96, 52, 92,195,151, 33,113,111,204,221,123,159,113,124,116,200,149,
+203, 87, 88, 27, 14,144,126,224,176,181, 2, 95,218, 12, 4, 75, 21,180, 58,168,167, 47,118, 73,226,136,237, 11,235,108,110,110,
+184,145, 27,196,131, 62, 50,180,241,174, 85, 93, 81,229, 5,105,150, 81,149, 5,126, 96,133,135, 27,235, 99,190,253,173,111,113,
+229,242,101,254,237,191,251, 19,254,226,135, 63,100,158,205, 73,139,194, 30, 74,252,198, 22,220, 92, 83, 59, 10,142,195,192,229,
+ 85, 24,202,178,108,187,201,102,165,208,145, 23,175,221,248,227,238,209,243,172, 86,144, 56, 67, 72,177, 42,116,234,222, 16, 77,
+187,122, 21, 36,211,110,232, 29, 1,157,148,142,171, 43,101,203, 60,246, 86,190,207, 89, 25,235,141,144,170,129, 24,180, 11,189,
+ 88, 6,221,208, 73, 48, 51, 29, 47,160,231, 84,136, 93, 32,142,181,146,249, 22, 48,160,117,235,107, 95,220,248,166, 69,199,106,
+ 12, 66, 6,228, 69, 65,172,107,148,209, 40, 13,165, 82,182,250,198, 35,115, 85,159,104, 88,239, 2,250,161,205,108,159,229, 21,
+ 89,109,219,179,141, 60,162,172, 21,117, 3,126, 1, 74, 99,163, 93,147, 72, 82, 57, 38,115,232,251,228,181, 34,171, 44, 56,163,
+210, 10,141,197,115,142, 47, 95, 35, 25,108, 16,248,176,222,139,217, 94, 27,112,105,173,207,157,173, 33,223,188,115,141,141,216,
+ 39,159, 77, 56, 62,158, 16, 70, 61, 8,122,124,190, 51,101, 39, 83, 40, 4,101, 62,179,135, 6, 99, 65, 58,195, 36,225,206,197,
+ 49,191,246,222, 29,198,177,207,254,193, 49,153, 90, 84,210,170, 83, 10,138,149, 50,240,111,154, 50,245, 42, 43,155, 88, 81,121,
+181,215,114, 73, 69, 78,123,120,212, 90, 35,164,100,224,210,163, 54, 55, 54, 57,153, 76, 73,122, 49,179,217, 20, 15, 15,101, 22,
+233,106,139, 16, 31,227,132,206,237, 48,202, 18,165,226,152,225,112, 72, 89,204,169, 74, 77,154,229,173,254, 34, 12, 67,170,170,
+ 58, 29,102,131, 33, 74, 6,108, 95,190,204,241,241, 17,147,163,195,101,143,191, 89,252,252,218,205,132,219,252,250, 87, 84,234,
+231, 41,219,151,102,176,231,107, 23,219,205,252,212, 6,181, 20,123,233,152, 13,141, 59,192,184, 77, 77, 70,246,243,221,235, 85,
+ 23, 57,166, 42,237,152, 70,193,232,226, 37, 42,165, 64,186,103,210, 88,165,122, 24, 37, 36,201, 16,180, 33,150, 53, 82, 27, 62,
+252,240, 27, 36,189, 1, 65, 28, 83,171,218,117,192, 42, 54,182,182,248,238,119,127,155,170, 42,248,209, 15,254, 61, 59, 47, 30,
+243,226,233, 3,166,199, 71,164,233,140,163,221, 23,236,191,120,198,108, 50,163,215, 75,236, 12, 61, 8, 81, 74,225, 7, 1,155,
+ 23, 46,209, 27, 12, 91,214,134,210, 53, 74,149, 36,113,143, 48,140, 40,202, 10, 92,128,143,144, 62,101, 81,217, 42, 72, 89, 90,
+ 88,158,102,182, 43, 97, 52, 65,175,111,117, 46,170,217,120, 87,220, 3,205, 53,236,250,213, 91, 78,129,104,215,181,143,190,241,
+ 49,198,243, 56,220,223,103, 54,157,185, 46,131,106,215,203,110,117,220, 8,167, 76,247,230,215,230,107, 43,220,207,179,169,157,
+ 69,239, 60,235,217, 91,170,246,219,207,243,150,173, 86,158,103,115,233,189,197, 40, 66, 72, 31,225,135,200, 48, 68, 6, 17, 81,
+156, 16, 13,199,188,253,173,239,115,245,141,111,176, 57,246, 8,132,203,199, 0, 20,130,169, 49,236, 23,138,163, 12, 6,195, 45,
+ 62,251,201, 95, 82, 21, 25,117, 85, 57, 56,148, 21,208,217,180, 75,133, 48,198,226, 88,141, 61, 56, 27,173,145, 66, 32,132,194,
+212,202,185, 74,154,188, 10,171, 95, 26, 95,216,230,250,245,235,188,118,251, 54,247,239,125,198,227, 7,247,136,147,132,209,160,
+199,246,133, 77,130, 40,226, 79,255,244, 79,120,244,228, 1, 15,191,188,207,103,247,190,224,225,147, 71, 76,102, 51,242, 74,187,
+ 89,121, 96,149,241,129,133,214,140, 70, 35, 54, 55, 55,241,131,128, 44, 43, 40,235,138,225, 96,136,239, 91,134,124, 55, 78, 59,
+112, 88,106,165,236, 56, 65,107, 69, 24, 70,196,253,136,245,245, 49,239,190,247, 14,119, 94,187,205,227,135, 79, 90, 54, 6,157,
+ 53, 64, 58,118, 75, 20, 71,109,231,193,151,146,126,191,223, 2,222,186, 33,100, 2,135,137, 93,248,186,151, 69, 20, 75,149,122,
+167, 21,223, 86, 99,157, 69,182, 81,136,139, 21,104,136,160, 19,227,218,217,240,155,175,169, 26,175,176,227,174,215, 46, 28,101,
+ 53,150, 85,117, 42, 33,233,196,102,221, 27, 81, 41,213,218, 73,172,160,195, 56, 21,183,183, 12,166,105, 8,110,238, 64,224, 59,
+157, 64, 35,178,106,108, 92, 77,190,175,116,177,169, 11,206,189, 93,132,219, 83,181, 16,200,124,142, 54, 53,181,182, 27,123,230,
+ 80,160,165,214, 40,219,159, 68,120,182,179,208,151, 30,190, 39,153,151, 53,179,214,183, 44,156,154, 84,218,255, 26, 43, 6, 44,
+106, 91,185,135, 78, 63,160,181,194,243,237,225,167,172,237,140,178,172,106, 20,134,164,215,227,205,183,222,224,157,155,151,121,
+239,198, 85, 46,174,245,232, 73,141,174, 10,230,233,156,227,201,132,162, 40, 81, 69, 65,157, 78,121,254,248, 75, 62,255,226, 51,
+102,179, 25,198, 15,121,240,242, 24,146, 53,118,247,119, 57,153, 30, 51,205,114,166,217,220,122,237, 85,205,246,250,136, 15,239,
+ 92,167, 44, 10, 94, 28, 30,219, 74, 93, 47, 20,192, 75,150,200,175,225,201,253, 42, 49,157, 56, 79,121, 36,132,173,104,117, 87,
+216,181,188,169, 43,165,137,162,136, 36,233, 19, 70, 17, 73,146,160,220, 33, 45, 75, 83,215,230,107, 82,250,212, 34,232, 71,177,
+ 8,120,105, 68,146,158,160, 63, 24,208, 75, 18,116,149,113,116, 60,105,133,149,150,123, 80, 83,185,184,204,133,191,216, 46,124,
+227,205, 77, 6,227, 77,166,135, 7, 54,250,213, 85,227,194,216,152, 85,207, 8, 52,102, 17,185,218, 84, 78, 46, 67,121, 89, 28,
+119,122, 34,190,252, 18,122,103,136,232,196, 89, 19,243,115, 62, 90,174,252,141,209,148, 69,142, 48,154,126,156,216, 96,160,124,
+142,208, 21, 90,215,120, 98,185,197,111, 60,232,173,109, 18,245, 6, 84,101,105,103,223,170,198,168,154,170,200,208, 85, 69,224,
+251,252,202,157,183,201,230, 19,214, 55,215,121,244,240, 75,164,128,167,143, 30, 48,232,247,185,243,230,219,124,244,193,135,236,
+237, 61,199, 24, 65,208,239, 51, 24,173, 17,245, 7, 84, 90,113,114,120,140,239, 75, 60, 63,164, 86, 41, 69,154, 57,251,148,135,
+239, 7,132,113, 66, 20,217,192,150,193,218,152,181,141, 77,251,186, 56, 1,119,158,219,104,206, 38, 42,121, 52, 24, 90,207,178,
+ 19,235,206,211,185,211, 12, 8, 42,101,147,221,234,170,194,232,106, 57, 2, 83, 72,132,177,207,233, 42, 6,200, 45,118,173,248,
+105,125,125,204,230,214, 38, 73,175,207,116,122,130, 39, 5,131, 65,159,170, 42,208, 70,181, 93,192, 56, 9,232, 37,137,173,206,
+ 26,154,155, 88,133, 49,125,125, 30,193, 89,232,237,243, 50, 58, 78, 9, 87, 61, 15,227, 45,194, 72,108,161,228, 89,231,131,180,
+ 48, 43,225,249,246,117,112, 65, 56, 66,250, 8,233, 89,123, 90, 24,226,199, 9,189,126,204,205,119,191,195,229, 91,175,211, 79,
+ 96, 16,122,104, 32, 23, 48, 7,166,198,112, 92,106, 78,166, 10, 63, 24,112,124,176,207,193,139, 71, 78, 17, 95, 97,234, 26,212,
+226,208, 45,140,177, 92,128,206, 94,101,217, 20,157,188,121,151,163,225,121,146, 48, 12,121,231,131, 15, 73,122,125,142, 14,247,
+233,247, 98,202,178,230,198,245, 27, 92,185,114,157,209,104,204,159,255,135,127,207,151,247,239, 50,222,216, 34,140, 34,164,144,
+228, 89,198,213,107, 55,120,255,157,247,200,139,140,159,253,226,231,252,197, 15,127,192, 95,253,232, 71, 60,121,242,152,141,245,
+117, 46,109,219, 60, 7,233,217, 44, 14,233, 75,194, 40,116,130, 74, 73, 20, 39,120,194,163,204, 75,138, 60,167,174, 42,132, 39,
+232,245,251, 12,215, 70,132,145, 77,196, 11,130,128,173,173, 77,126,245, 87,191,197,211, 39, 79,153, 77,103, 86,163,226,174,183,
+244,237,120,175, 46,107,119,208,182, 5, 87, 85, 85,237,235, 18, 39, 49,190, 31,180, 99, 7,191,123,172, 63,143,130,212,204,193,
+140, 89, 25, 0, 0, 32, 0, 73, 68, 65, 84, 41,206,108,143,118,218, 62,221,207,107,110,106,229,230,211,205,230,184,104,105, 47,
+ 8,114,139, 74,193,250,130, 27, 72, 71, 23, 80,211,253, 62,221,182, 60,206, 86, 65,151, 50,167, 77,155,109,222,206, 23, 59,128,
+154, 70, 65,223,181,154,104,101, 90,202,154,114,138, 90, 41,229,210, 44, 89, 58, 5,168,116,161, 47,117,173,241,163,132, 84,198,
+120, 85,137,240, 52,126, 40,240,202,202, 66,106, 58, 15,137,103, 7,220, 40,225,145,215,118,132, 96, 58,227, 9, 79, 72, 43,252,
+105,236, 10,109, 12,158,157,111,246, 35,155,246, 37,227, 16,223, 11,208,166, 64,123, 30,253,193,144,173, 75, 23,185,118,249, 10,
+195,193,136, 44, 45,185,123,242,132, 34,159, 83, 85, 54, 24,193,247,125,162, 48, 38, 43, 42, 78,102,115, 7,173,209,152,186,100,
+239,120,143, 47, 62,251, 57, 91,151,110,112,116,124,196,112, 56,160, 60,120, 65,236, 89, 52,173, 49, 26, 15,235,181,143,227,152,
+ 27,155, 9,145,188,198,159,254,242, 57,121, 83, 10,154,211, 54,183,179,186, 58,231,205,213, 87,237,143,171, 27,206, 82, 87,200,
+ 5,107,156,157,138,101, 58,118, 32,131,210,182, 13, 30,199, 49, 89,150, 57,236,107, 64, 97,114,123,223,168,133,114, 90,172,180,
+175,237,169, 88, 18,132, 33,131,254,128,170,180,232,208,178, 40,169,107,221,110,252,117,167, 5,214,188, 5,190,143,240, 37,227,
+181, 53, 2,233,145,205,231,103,132,170,173,186, 9, 22,118, 37,179,234, 79,254, 10, 75,224, 25, 44,160,115,164,112, 43, 31,175,
+216,217, 76, 71,192,103,154,115,130, 16,100,101,129, 41, 43, 55,158,104, 40, 89,194,181, 34,221,181,213,138,227, 71,247,153, 31,
+237,179,126,237, 54, 50, 25, 96,116,133,174, 42,251,155, 57,225,231,228,228,128, 94,210,227,241,131,135,172,175,141, 56, 60,153,
+242,183,191,255,187,248,158, 71,145,167,244, 7, 99,122,253, 67,142,143,166,148,233,156,199, 79, 31, 49, 57, 60, 34,157,159, 16,
+ 69, 33, 73,210, 99,114,114,132, 86,176,113,241, 18,179,217,140, 40,142, 41,139, 20,233, 11,166,147, 99,122, 73, 66,150,206,208,
+ 90, 17, 39, 17, 82,142,145, 66,112,233,202,136,170,170, 40,171,146,217,201, 17,232,154, 34,183,139,227,250,246, 69,146,254,128,
+217, 60,101, 50,155,226,197,125,210,233,196,170,247, 75, 55, 86, 20,246, 16,104,111, 64,191, 83, 81, 45, 55, 83,154, 68, 45,207,
+243, 24, 12, 7, 28,159, 28,243,226,249, 14,233,124,238,214, 19,221,230,182,123,129,221,124, 60, 31,170,162,180,112, 44,150, 17,
+200, 95, 69, 0,252, 74,136,205,215,128,210,156, 5, 52,105,198,152, 6,105,243,195,219,205,221,129,101, 92,182,134,141,160, 21,
+139,141, 94, 56,135, 15, 33,163,181, 13,230,147, 9, 7,179,117,174, 12, 23,191, 68, 41,160,242, 60,246,143, 11,138,121, 5,158,
+224,219,191,245,135,124,241,179,191, 36,152,103,212,126,142,144, 37,120, 10,207, 83, 24, 60,232, 8,226, 22,135,106,213,238, 21,
+205,134,222,172, 37,195,181, 53,202, 34, 67,245,134,244, 7, 35, 46, 92,188,196,100,242,215, 76, 78, 14,153, 76,199, 60,125,246,
+132, 79, 62,249, 5,127,239,143,254, 33,158, 12,248,201,143,126,200,241,201, 17, 55,175,223,100,125,180,206, 15,127,244,151,236,
+238,236,112,176,191, 71, 81,164,164,243, 57,147,201,148,157,157, 29,148,170,249,237,223,250,126,187, 78,132,161,101,129,132,113,
+104,199, 18,181,178, 7,115,207,178, 19,122,189, 30,243, 52,181,145,207, 75,185, 37, 86, 7,180,177,177,193,191,248, 31,254, 57,
+255,234, 95,253,175,252,248, 39, 63,101,230,121, 24, 10,202,178,196,247, 36,184,180,192,162,174, 40,235,218,166,115,122, 30,186,
+193,178, 75,201,250,120,108,109,155, 23,174, 94,255, 99,241, 21,130,139, 46, 95,125,117, 56,127,158,239,114,117, 49,175,170,122,
+ 81,225,174,124, 61,173, 53,126, 96,109, 49,129,163,245,172,170,122,206, 74,120, 91, 84,238,139, 24,213,246, 32, 96,244, 34,181,
+205,137, 23, 60,151,201,107,218, 80, 21, 67, 85,215,139,252, 98,215,106,106,190,127,119,161,181, 63,187,107, 43,210,216,241, 36,
+ 6, 15, 45, 37, 20, 5,149,170, 48,158, 68,123, 18,173,106, 27,191, 42, 60, 16, 6,223, 15,136,147, 30,210,243, 72,243,140,162,
+118,153,220,198,210,225,164,239, 57, 82, 92, 19,230, 96, 79,202,113,224,211,235,247, 72,250, 61,130, 56, 36, 76, 34, 46, 95,189,
+204,123,239,189,201,187,239,188,197,173,155,183,184,124,233, 10,194, 19, 28,157, 28,178,127,176,203,228,100,143,172,152,161,235,
+178,253,154, 2,131,210, 53,101, 85,144,102, 57,105,158, 83,148,150,233, 44,133,226,240,224, 37, 47,158, 63,230,232,100,138,140,
+ 7, 28,236,239,145,102,115,166,243,148,163,121,206,209,116,206,254,241, 17,251, 39,115,208, 53,107,131,136,151, 39,185,181, 17,
+ 10,206,180, 67,126, 29,181,110,247,250, 46,221, 67,231,206, 3,205, 43, 32, 56,194,117, 97, 52,194,147, 14, 28,147,208,239,245,
+240, 3,223,157,110, 21,121,150,217, 17,135,118,150, 40,173, 81,218,122,240,187,221,161, 48,142, 16,158,199,198,250,134,189, 38,
+170, 96,111,255,216, 41,228,205, 43,197, 71,113,220,195, 11, 66,214, 54, 54,120,252,229,125,151,178,167, 87, 68,127, 98, 5,164,
+ 35,150, 34,149,133, 17,136, 87,164,177,189,210, 2,119,110, 85,119,246,223,117,173, 83,134,133, 45,212, 19, 30, 81,210,163, 84,
+ 21,190, 19,166, 6,205,243,217,136,100, 93, 88,146, 17, 18, 83,215,204, 14,247, 81,121, 74,210, 27, 34,163,158, 19, 90,106,208,
+202, 42,224, 7, 3,190,243,237,239, 32,101,200,108,122,204,214,250, 38, 85, 81, 50, 26, 13,200,210, 19,166,147,140,162,154, 19,
+132, 9, 27,227, 77,148, 42,173,174, 65, 43,142,143, 15, 24,142,214, 73,146, 62,147,147, 67, 6,253,136,126,127, 76, 16, 38,244,
+122, 3,171, 76, 86, 21,113, 20, 89, 49,169, 31,177,182,190,137, 22,154,195,131, 61,230,179, 19,124, 95,208, 27,142, 16, 64, 85,
+ 41,202, 34,101, 54, 63, 65,120, 78,193, 29, 38, 84,198,195, 83, 53,186, 42,144,126, 96, 89, 20,110, 44, 99, 5,183,193, 66, 77,
+ 34, 22,240, 25,188, 69,144, 84, 18, 39,188,126,231, 14,251,123,123, 76,142, 78, 90, 66, 93,115,127,213,181,114,120,104,219, 93,
+172, 43, 69, 85,213,157,162,233,244,165, 58, 51, 40,235, 63,226,237,149,255, 78, 52,214, 98,215,102, 23,150,182, 38,125, 31, 25,
+132,120, 97,136, 12, 2,130, 40, 66, 4,190, 19,148, 90,110,128, 5,201,132, 4, 97,204,230,229,235, 92,125,227, 3, 60, 95, 18,
+ 14,214,185,184, 46,169,133, 96,102, 96,191,210, 28, 79,107, 94,188,152, 81,166, 37,126, 16, 16,196, 9,101, 89,176,243,240,139,
+ 22, 46,100,148,181, 84,154, 78,225,120, 38,235,194,158,186,220,207,110, 53, 83,189, 65,159, 48,136,169,138, 57,219, 23,175,112,
+255,222,103,172,173,141,185,126,253, 6, 79,159,220,227,222, 47, 63, 65,120,134, 44,157,243,217,167,127,205,206,203,231, 40,163,
+185,243,198, 91,100,121,142, 16,146,170,170, 57, 58,218,227, 96,111,207,118,227,140,245,164, 63,126,242,136,141,141, 13,110,191,
+118, 11, 63, 8,236,254,213,177, 60,122,194, 99,126, 60,165, 86,138,176,215,179,161, 48,117,133,244, 3,226, 36,118, 78, 12,175,
+ 19,117,110,227,174,223,122,243, 77,134,253, 33, 79,158, 62,117, 93,237,213,108,121,171, 3,171,157, 85, 91, 41,123,207, 52,247,
+ 86, 28,199,200, 75, 77,251,189,179, 73, 47, 54,198, 14,119,253, 12,101,229, 89,120, 87,115, 14,128, 68,176,152, 31,154, 21,149,
+179, 85, 16, 47, 68, 61,158, 39, 8,252,128, 56,138,172, 72,161, 17,146, 56, 27, 93, 23, 71, 43,154,234,109, 69,228,225, 59, 53,
+ 97, 91,149, 55, 85,122, 27, 56, 35, 91, 22,180,193, 90, 17,180,214,173,112, 69,105,213,122,217, 77, 71,116, 36,125,223,109,252,
+246,164, 20,248, 1, 65, 98, 57,198,101, 93, 81,107, 8,146,190,109,241, 58, 97,157,231, 73,162, 36, 33,233,245,241,163,136,217,
+124,214, 62, 59,218, 88,245,127, 32, 61,203, 51,110, 56,245,158,253,184,215, 75, 24,244, 99,122,131,152, 65,191,199,112, 56,100,
+109,180,198,112, 48,160,159,244, 8,130,128,178, 42,152,207,103,228,217, 28,173, 74,247,186,216, 17,130, 85, 79,186,211,180,209,
+237,172,212,210,212,106, 59,175,194,118, 33, 36,154,131,131,125,118,143, 78,136,135,155,228,149, 38, 47, 83,234,186, 66, 41,203,
+160, 47,170,138,121,105, 61,188,210, 19, 76, 75,150, 98, 7,197, 43,128, 23,231, 42,221,207, 18,245,156,161,233,104, 43, 74, 97,
+209,187,203, 15,181,113, 10,105,217, 66,106,194, 56,198,151,146,225,112, 72, 20,197,204,102, 51,180, 82,164,243,185, 21,172,185,
+ 83,115,179,225, 26,221, 88, 55,109,124,106,156, 36,224, 44, 72, 6,131,169, 50,246,143,166,118, 97,239,156,182,227, 56,238,164,
+239,185, 44,104, 52, 81,210,231,157,119,223,231,139,207, 63,181, 68,194, 54, 78, 85, 44,212,209,136,206,235, 39,150,254, 76, 44,
+205,208, 95,181,161,119,219,241,175,230,190, 47,205,212,151, 44, 84,157, 72, 78,154,231, 73, 81,213, 21,158, 12, 8,163,144,186,
+ 44,219,207,107, 8, 89,116, 71,190, 14, 62, 34,140,161, 42, 50, 38,135,251,168, 34, 35,138, 98,100, 20, 1, 30, 81, 16, 32,138,
+ 57,151, 47, 95, 65,250,146, 11, 91,219, 12, 6, 3,134,131, 94,235,125,175,202,130,227,163, 67,254,214,119,127,147,121,154,178,
+179,243,156, 65,127, 64, 20, 5, 76,142,143,209, 90, 89,207,242,104,147,209,120, 19, 63,138,172, 19,164, 44, 90, 23,130, 0,202,
+ 50,167, 40,114,202, 34, 69,149, 21,198,216, 67,138,209,146, 11,219, 87,121,252,232, 17, 89, 58, 71, 85, 14, 8,146, 91, 12,116,
+174, 33, 30,172, 89,233,100, 85,218,103, 74,215,173,141,203, 52, 29, 44, 79,226,198,205,173,214,198, 6,107, 88,225,214,229, 75,
+151, 80,186, 34,207, 50,170,170,196,247,131,118,158, 94, 85,182,131,214,104, 64,234, 90, 81, 85,170, 99,163,234,116,108,224, 63,
+253,198,125,254, 63,178, 0,153, 6,107,226,217,205, 74, 6, 33, 65, 28,227, 59, 42, 92,216,235,225, 7, 33, 94, 16,224,251,161,
+141,218, 21,182, 93, 44,252, 16, 63,138,185,114,231, 93, 54, 46, 95, 71, 43, 69,156, 12, 57,202, 51,166, 8, 74, 41,216, 59,170,
+ 56,153,105,246, 95,238, 19, 4,161,163,104,194,165, 43,215,248,244,167,127, 69, 62,155,160,170, 18, 85, 23, 24, 55, 63, 87, 77,
+176,144, 57,189, 87,153,134, 81,209,196, 74, 75,159,181,209, 24,207, 15,185,117,231,117,142, 14, 95, 50, 59, 62,225,215,191,247,
+155, 40, 45,201,138, 18,165, 5, 65, 16, 19,199, 17,181,210,236,238,188, 36,138, 99,198,163,117,226,126,194,207,126,246, 99,238,
+127,241, 75, 94, 62,127, 74,145,165, 54, 19,160,174,219, 46,219,147,167,207,216,221,221,227,237,183,223, 34, 8,131,101,151,151,
+128, 40,138, 72, 39, 51,158, 61,125, 6, 50, 96,109,107,155,108, 58,193, 51,224,135, 1,210,247,151, 17,195, 2,162, 56,226,202,
+149,203,220,188,118,157, 95,254,242, 51,203,215,104,236,183, 90,219,136,228,186,182, 58,172, 51,200,157, 69, 81, 56,161,220,169,
+102, 32,231,162, 36, 69,199,252,254,170, 57,206,105,152, 2, 75,179,242,230,189, 81, 4, 55,190, 66, 1,109,166,181,110, 66,238,
+157,167, 84,120, 2, 41,155, 7,193,180,249,231,141,119, 82,118, 60,237, 77,165,219,172, 95,141, 61,174, 85,177,138, 69, 36,159,
+ 82,138,178,170, 23,138, 94, 79,216,234,189,241,208,183,124,116,111,225, 81,110,230,174,190,135, 49, 2, 37, 60,164, 31, 81,214,
+154, 48,137, 17, 81, 76,169,236,171, 26,197, 17,253,193,136,193,104,141, 32, 78,168,218,192, 8, 11,199, 8,165, 71, 28, 5,196,
+ 81, 72, 24,248,132,206, 78,209, 75, 98, 6,131, 30,253, 65,143, 36,142,172, 47,210,101,250,214, 74,145, 23, 5,121,158, 82,148,
+ 57, 74,217,246,168,231,153, 86,221,111,161, 32, 29,128,129,235,233, 89,173,181,105,184, 26, 78,136, 98,103,123,145, 15,147,201,
+ 9,251, 71, 19,138,218,146,234,180,202,221, 44, 71, 59, 65,160,161, 82, 10,161, 21, 74, 65,133,116, 7,167,229,246,251,171, 32,
+ 51,175,194,199,174, 90, 41, 87,163,127, 5,226,220,214,180,215,153, 61,122,210, 90,149,162, 40, 98, 56, 26,113,116,116,132,214,
+ 22, 64, 83,171,218,157,186,173, 3,193,184,188,122, 99,132,203,101, 87,182, 26,113, 7,195, 40, 10, 81,229,156,131,163,105,123,
+216,107,232, 83, 77,117,111, 59, 60,141,111,212,163,172,114,174,221,122,141,135, 95,124,209,130,130,218,214,170, 88, 33,189,189,
+242, 9, 60,189,169,159, 62, 64,139, 83, 34,184,243, 27,182, 98,169, 25,223,126, 45,179, 56, 28,105, 99, 16,210, 35,242, 29,128,
+ 8, 59,211,140,130,128,164,151,112,231,181, 59,206, 38,104, 53, 30,218,133,219, 72, 25, 44, 2, 71,148, 70,101, 41,211,195,125,
+242,233,137,173,240,165,224,205,155,183, 56,218,127,201,250,198, 6,233,108,134,239,195,124, 58,225,195,247, 63, 96,231, 96,159,
+203, 87,111, 35, 48,252,249, 15,254,132, 47,191,248,140,253,189,231,100,179,204,146, 1,171,202,130,131,140,161,215,239, 51,159,
+ 30,183,228, 68,141,215, 94,199,162,200, 9,131, 16, 85,151,204, 38,199, 96, 52, 65,212,227,248,112,159,108, 54,227,232, 96,151,
+124, 62,107, 55,107,207,243,109,228,171, 50,168,186, 36,136, 99, 8,236,230,164,141, 65,215,149, 19,188,218,206,219, 66, 52,231,
+216,219, 94, 55,107,194, 35, 8,124,126,253,215,126,149,173,173,117, 14, 15,247,169,106, 11, 52, 25, 12,250,172,173,141,241,125,
+ 73,158,231,142, 94, 38,157, 96,179,219,241, 20, 11,247,144,249,143, 3,207,156,183, 46,191,242,205,173,167, 86,236, 39, 65, 74,
+100, 16,224, 71, 9, 97, 50, 36,238, 15,137,135,107, 36,131, 17,113,175,135, 12, 66, 16,178, 5,208, 32,172, 96,206, 15, 99,110,
+191,251, 13, 6,227, 13,123,136, 41, 10, 52, 33,135,187, 83, 30, 63,216,101,118,156, 49, 92, 75,144,158,164,174,193,143, 2,155,
+ 75, 33, 36,210,143,248,242,211,159, 80, 21, 57,170,170,209,149, 21, 55,118,139, 67, 86,108, 93, 13,206,184,217,208,165, 47,217,
+190,116, 9,168,153,158, 76,184,120,229, 38,111,188,254, 6,195,225, 0,140,230,203, 71,247,185,125,251,117,178, 60, 99,184, 54,
+102,119,103,135,249,108,198, 27,111,188,193, 96,216,231,203, 47,238,241,240,222,231, 76, 39, 19,138,178,236,108,230, 14, 95,236,
+ 34,179,211, 44,103,119,119,151,111,124,227,227, 22, 3,222,125,206,252, 48,198,151, 62, 79, 30,222,231,224,240, 16, 17,198,214,
+203, 46, 37, 94, 39, 33,116, 1,252,177,152,235,245,141,117, 46,110,111,243,201,167,159,146, 87,101,219, 77,110, 3,168, 58,163,
+233, 85,114,171,188,116,253,230, 31,175,134,184,180, 66,167, 78,221, 47, 56,155,247, 46,206,104,183,175,134, 0,156,218,232,157,
+ 15,175, 85,182,123,139,185,128,104, 51,111,229, 66,193,171,141,131,196,200, 78,133,212,120,235, 29, 1, 77,122,139,170,180,163,
+160,111, 22,224,186,174, 91,177,139, 21, 83,169, 54, 35,183,237, 76, 56,130,148,112,194, 53,220,161, 67,117, 82,157,172, 95,190,
+178,149, 60,198, 33, 88,173,157, 79, 6, 1, 90,131, 31,133,244, 7,107,200, 32,182, 62,197, 40,102,180,177, 69,212,235,227, 71,
+ 61,130, 40,164,158,207,168,148, 66, 10, 65, 20, 90,191, 99, 20, 5, 4, 97, 64, 20, 39, 12,135, 3,214,198,107,140,134, 35,146,
+ 36, 38, 12, 34,194,192,199,247, 61, 39,234,211,224, 50,133,181, 86, 24, 44,218,213,247, 44, 39,191,121,111,170,116,225, 45,196,
+141, 77,126,120,115,157,181,131,177,104,163,218,184,191,195,195, 3, 74,237, 49,159,101,118, 94,102, 74,106,173,218,251,194, 52,
+158,122,163,153,139,224, 20,118,244, 85,168,202,175, 34,202,157,130,207,172, 46, 88,103,169,129, 59, 27, 85,227, 53,245,132,205,
+158,199,147,108, 95,184,200,209,209, 1, 89,150, 82,107,133,174,173, 53,165, 86, 85, 91,125, 54,163, 16,203, 36,176, 25,221, 90,
+ 41,130,200, 86,170,186,200, 56, 60,153,217,195,159, 94, 0,106,218, 8, 87,211,220,151, 30, 34,144,244, 71,107,244, 6,214,202,
+ 84,228,243,133,194,220,217,200,196,210,246, 42, 86,160,183,226, 20,107,156, 51,123, 23,203,213,251,233,246,186, 56,119,147, 95,
+186, 86,230, 20, 43, 22,129,103,145,171,163, 1,219, 91, 91,164,179, 25, 69,145, 83, 85, 21, 59,187,187,148,165,101,177,247,251,
+ 54,119,186,174,114, 60, 25,158, 49,134,209, 80, 85,148,243, 9,213,116,202,165,203, 87, 24,143,215,217,221,121,193,193,193, 30,
+101, 89,242,221,239,254, 6, 47,119,246,120,241,252, 57,101, 93,241,249,221,207, 17,158,100,239,197, 51,178, 44, 67,248, 30,170,
+170, 40,203, 18,207,179, 85, 80,127,109,131,195,253, 29, 78, 14, 14,145,129,207,241,254, 30,126, 16, 88,113,100,111, 64, 89, 85,
+ 84,249, 28, 85,215,212, 74, 33, 61,159,217, 44, 71, 43, 40,138,212,197,244,218,145, 90,212, 31,161,165,111,121, 19,198, 80,207,
+ 78,192,147,200, 40,198,115, 7, 21,161, 42,119,208, 15, 90,155, 96, 99,227, 90,190,183, 61,238,188,126, 7,223, 23,220,253,252,
+ 51,138,162,112,238, 26, 67,150,229,204,166, 19,242,220,106, 60, 26,155,109, 89,170,211,162, 53,115, 54,124,230, 43,247,229, 14,
+198,251,235,180,235,133, 16, 32,221,232,160, 9,183, 18, 18,164,107,183, 71, 33, 97,210, 39, 28,244, 73,214,198,108, 95,189,193,
+175,253,246,247, 9, 98, 75, 79, 20,178,153,179, 59, 81,178, 31,224,135, 9, 31,124,247,183,137,251,118,144, 62, 24,141, 25,172,
+197,196,113, 66, 85,104,100, 96, 72,167, 41, 39, 7, 83, 54, 47,142, 73,250, 49,170,134, 34,207, 73,146, 30,191,252,201, 15, 40,
+102, 83,116, 89,162, 84,213, 58, 46,180,211, 72,121,171,251, 15,158,155,233,219,157, 44, 8, 67, 6,195, 17,107,163, 49, 39,147,
+ 67, 62,120,239,125, 62,120,239, 67,194, 48,226,222,189,187, 8,207,103,103,231, 5,239,191,255, 33,194, 8,238,125,241, 25,183,
+239,188, 77, 47, 9,184,176,117,137, 95,252,226,199,136, 32, 38,157,157,180,148, 56, 33,237, 12,187,215,239, 83,213,165,165,202,
+ 9,200,178,140, 34, 47,185,115,231,117, 11,190, 81, 6,140,160,174,173,183,221,104,171,198,159, 77, 45, 64,201, 79, 6, 96, 12,
+ 73, 18,117, 50, 74,108,149, 89,150, 21,194,107,230,236,235,156, 28, 77,120,252,228, 41, 74,107,106, 76, 91,176, 54, 34, 93,175,
+ 3,121,107,139,219,139,205,166,190,154,249,234, 54,122,239,140, 27,162,171,114, 95, 77,107, 59,107,238,115, 42,237,231, 84,156,
+170,215, 86,151,194, 17,125,124, 25, 16, 72, 43, 92, 19, 66,184,106, 64,183,179, 8,209,177,174,117, 97, 55, 75, 16, 5,225, 57,
+107,137, 21,234, 89, 72,134,105,219,238,202, 37,163, 41, 23, 45,105,237,111,139, 22,106,147,195,219, 22,141, 77,213,239, 75, 60,
+ 97,147,213, 26,144,127,243,111, 84,109, 43,188,254,218, 26, 81, 47,193, 15, 2,171,224, 77,122,244,250,125,252, 32,160, 55,232,
+ 51, 57,220,195, 19, 26,223,247, 72, 98,139,167,140,147,136, 94,111,192,214,133,109,110,220,184,197,173,107,183,185,120,225, 50,
+235,107, 27,244,146,196, 10,106,156,208, 79, 10,105, 97, 52, 82, 88,213,105,163, 86,149,118,174,236, 53,244, 63,151,219,190,240,
+120,155, 86,223,211,204,100,106,199,151, 87,181,109, 3, 42, 93,163,234,138,131,131, 35, 20,130,121,150,211,139, 67,132,227,183,
+105, 3,202, 24,148, 22,248,170,162, 54, 62,149, 57,187,221,254,170,138,225,171,120,213,231,165,187, 9,115,246,223, 11,135,206,
+181,150, 68,211,198,216,250,190,207,214,230, 38,211,217,148, 52,117, 98, 37, 99, 25,214,117, 71,184, 98, 23,106,225, 14,108,180,
+ 96,153,193, 96,196,112, 56, 34,159, 29,114, 50,205, 92, 95,180, 9, 44,234, 4,165, 8,129, 31, 6,214, 50,179,190,197,250,214,
+ 22, 70,217,176,147,153, 11,153,160, 27,210, 96, 86,183, 95,113,206, 33, 72,156, 10,127, 57,157,153,222, 21,177,154, 87, 84,234,
+167, 81,191,218, 44, 0, 71,141,206,163,121,219, 24, 91,113,217,206,222, 30,163,126,191,109,241, 53, 2, 84, 99, 12,121, 94, 80,
+150,133, 59,132,203, 86, 96,213,188, 55, 65, 48, 0,158, 81,188,120,254,148, 97,127,196,209,228, 16, 33, 35, 46,108, 93, 96, 62,
+207,217,219,223,229,175,127,250, 99,162,222, 8,140,237, 24, 29, 31,236,216,141, 92, 90, 8, 82, 81,228,248, 65, 72,210, 31,241,
+236,209,125,210,116,142,170, 20, 6, 69,153,231,148,117, 73, 89,100,164,179, 9,233,108,130,210, 53, 65,224,147,101, 57, 66,120,
+252,157,223,255, 35, 46, 94,186,198,227, 7,119,113,151,155,222,112, 64,145, 23,120, 81,130, 17, 18,225,180, 48,166, 42, 45, 13,
+ 79, 0,117,137,169,106,123,240,109, 81,169, 11,201,123, 55, 97,203,243, 4,235,235, 27, 28, 30, 30, 82, 22, 21,202, 64, 16, 68,
+ 72, 25,144,206,179,150, 3,210,235, 37,173,231,184, 1,101,157,167,213, 56,143,229,112,150,141,109, 25, 20,243, 53,237,110, 75,
+244, 79, 91, 12,104,207, 41,222,163,136,160, 55,160,191,126,129, 59,239,127,196, 63,249, 23,255, 51,127,251, 15,254, 46,191,255,
+135,191, 67, 86, 24,118, 95,188, 64,187, 20, 27, 27,152, 19, 48,222,188,196, 7,191,241, 59,148,101,102,245, 5,201, 0,165, 4,
+ 69, 81,147, 12, 35,178,105, 74, 89, 42,182, 47, 95,166, 55,140, 72,103, 53,121,150,242,248,222, 93,142,143, 14,200, 78, 14,217,
+127,249,132,186, 44, 48,170,178,108,248,150,103, 98,187, 70, 75,191,211,146, 67,192,142,106,179,124,202,112, 96, 17,195,253,254,
+144,225,160,207,143,126,250, 87,124,242,243,159,144,165,115, 12,240,230, 27,111,243,139, 95,252,130, 60, 79,249,222,247,190, 79,
+210,239,163,180,224,233,139,103,212, 85, 77, 58,155,114,225,226, 21, 27, 14,164, 42,130,208,102,176, 55, 97, 63, 85, 85,129,231,
+177,187,191,207,181,171,215, 88, 27,142,209,218, 80, 20, 53, 89,102,115, 15,164,244,137,123,125, 6,195, 49,170,174,169,138,148,
+193,104,157,162,170,137,147,112,105, 29,171,171,154, 34, 43,156, 58, 94, 18, 69, 49,159,124,250, 41,179, 52,165,110, 51,238,109,
+162,168,114,251, 79,151,124,106,140, 65,110,187,246,251,146,101,232,140, 77,220,235,176,174,187, 51,237,243,236, 73,171,139,110,
+247,243, 27,175,122,183, 3, 32,221,236,188, 17,225,212,117,237,102,224,178,161,216, 56,206, 51,173,234,184, 13,125,241, 22,182,
+187, 38,192,165,153,247, 25, 55,179, 70, 44, 90,183,181, 90,216,152,164, 91,152, 91,130,152, 75,123, 91, 88,224, 76,251, 0, 75,
+119,170,234, 42,241,195, 32, 64, 32,241, 60, 73,210,235,217,211,156, 83,223,251,210,170,167,195, 40,162, 63, 28, 88,203,132, 47,
+169,106, 13,170, 68, 87, 5, 65,224,183,149,250,250,218,136,139,219, 23,121,239,205,119,120,239,205,183,185,113,229, 42,155,235,
+ 99,214, 70, 3,214,134, 3,146, 40,114,170,126,151, 92,216,116, 41, 68, 67,191, 19,200,166,117,230,224, 23,221, 24, 41,227, 8,
+117,218,104,235, 71,175, 45, 81, 77,213, 26,165, 12,181,114,127,174,172,160,105, 54,153, 82, 41, 48,158, 37,220,245, 34,223,110,
+236,205, 70, 96, 44, 67, 57, 50,134,140,192,230, 5,137,211,158,245,243,170,243, 85,218,223,153, 91,207, 10,243,189,155, 84, 36,
+206, 10, 34, 52,224,251, 18,165, 52,113, 20,219,156,228,170, 98,107,251, 34,105, 58, 35,207,178, 22,170, 98,180,245, 96, 55, 94,
+117,219, 89, 90,184, 29,162, 48,180, 29, 24, 63, 32,142, 67,242,116,206,116,154,182,233,109, 93, 71, 72,183,141,230,249, 62,219,
+151,175, 82,171, 10,207,179,109,214,249,244,120,249,112,203,114, 43,177,185, 63, 23,191,137, 62, 67,244,246,213,173,245,211,135,
+160,179, 61,234, 75, 46,131,198, 55,223, 4, 70,152, 69,139,255,248,248,132,162,204, 89, 27,141, 80, 85, 77, 81,148, 12, 71, 35,
+ 46, 93,188,132,214,154, 48,244, 25, 12,122, 68, 65,100,193, 69, 74,227,249,190, 75, 57, 59,173,206, 55,128,170,106,122,131, 1,
+ 72,195,141,235,183,217,223,125,194,189,251,119,249,229, 47,127, 65,158,101,124,240,209,183,248,242,203, 47,216,223,219,101, 58,
+157, 80, 87,133,123, 78, 77, 75, 56,171,138,156,116, 50, 69,215,214,207, 28, 4, 22, 17, 27,199, 33,218,216,170,184, 1,252,120,
+126, 64,158, 21,172,111, 94, 36, 25,142,120,246,248, 1, 71,251,123, 24,109,175, 79,111, 56,166,214, 2, 17, 13,109,183,193,181,
+ 65,181,174,219,117, 65,122, 30,117,149, 97,116,237,198, 87,186,189, 70, 77, 39,190,121, 30,147, 36, 97,208,239,113,124,116,204,
+108, 54,163, 42,173,173, 73, 25, 23,169, 92,214,118, 67,167,178,148, 67, 55, 75,111, 68,116,231,102,177,123,237,195,181, 76,252,
+124, 69,139,125,169,184,106, 69,184,180,234,252,133, 14,196, 44, 52, 3, 77, 44,155,103, 95,187, 32,234, 17, 13,199,124,235, 55,
+127,155,127,248,207,255, 39,130,254, 26,235,235, 33, 65,232,243,218,251,239,176,125,245, 6, 15,190,184,239, 60,229,118,195,185,
+126,251, 45, 46,220,126,147, 40, 12, 65,122,132, 97,236,208,194,110,230, 29,249,140, 55, 7, 92,187, 54, 32,159,151,204,102, 37,
+ 47,158, 60,162, 72, 51,226, 36,225,112,239, 37, 59,143,239,163,138,210,230, 13,116, 52, 31,242, 12, 11,172,149, 0,232, 37,102,
+ 10,198,227,218,245,155, 28,236,188,100, 50, 57,161, 63, 24,242,240,225, 67,158, 63,126, 76,150,205,153,207,102, 60,126,120,143,
+ 52,157,161, 84,205,160,151, 16, 6, 33,127,242,167,255, 15,233,100,194,124, 58, 65, 8,184,126,243, 53,102,179, 99, 34,223, 39,
+ 78,250,244,250, 3,252, 48,224,230,157,183,233,143,134,246,224, 86, 43, 30, 62,122,200,205, 27,183,193, 8,151,243, 64, 27,114,
+ 99,220, 56, 35,138, 19,138, 44, 99, 50,157,144,149,154,103,207,158,179,181, 57,110,199,194,217, 44,229,217,179, 23,172,141,199,
+ 60,127,254,146, 48,234,241,244,217,115,118,118,119,168,149,237, 44, 55, 65, 48, 22,160,166,151,198,202, 66, 8, 59, 83,239,190,
+ 64,222, 25,169,106,237,134,124,142,186,189,251,121, 75, 42,102,113,250,230,123, 21, 51,171, 57,121, 24, 99,136,227,208,109,190,
+118, 51, 85,170,118,109,250,134, 84, 42, 22, 39,183,134,247,206, 34,188, 68,105,237, 68, 83,180,108, 96, 85,171,118,110,175, 29,
+ 26,182, 37,198,181, 63,171,215,138,243,232,122,150, 61,185, 68,195,107, 42,154,134, 66,103, 48, 45, 27, 90,187, 74, 47,142, 34,
+130,192, 39, 12, 67,187,193, 4,177,221,120,125, 31, 63, 12,201, 39, 71,132,129, 79, 20, 71,140, 7, 61,110, 92,185,204, 71,239,
+188,201, 71,111,191,195,213,139, 23, 9,125,137,239,129,239, 11,164, 39,240, 61, 65,232, 91,177,145,148,129, 83,253,123,109,155,
+182,157, 55,139,110,251,214, 86,149,174, 56, 69, 27,183,105, 87, 21, 85,173,221, 70,238, 54,115,109, 95, 31, 91,193, 67, 93, 85,
+ 76, 38, 83,226,254,144,205,141, 45,106,109, 16, 70,183,179,104, 91,241, 10,170,116, 70, 16,247,169,207,161,187,157, 53, 95,255,
+170,244,182,198,239,222,229, 36, 44, 45, 92,162,137, 28,108, 14,141,139, 45, 50, 8, 2,148,170,241,131,192, 90,206,140,225,226,
+229, 43, 20, 69, 78, 58,155,227, 75,175, 13,113,209, 14, 19,219, 38, 37,169,197,189,239,251,129, 85,127,199, 17, 73, 18, 81, 21,
+ 25,211,105,218,114, 19,154, 67, 64, 16,132, 86,109,237, 82,238,106,163,237,188, 81, 74,100, 24, 83,101, 25,233,116,114,230,193,
+165, 67,120, 93,102,193,175,136,231,190,202,194,214, 84,242,231,113,246, 95,105,141, 91,101,209,155,229, 74, 48,148, 30,190, 0,
+ 35,173,253, 74, 43,205,201,201, 9,113, 28,209,176, 50,234,210,182, 25,149,214, 8, 25,172,248,223,151,191,167,210, 21,147,201,
+ 49,151, 47, 94, 99,158, 77,217,218,216, 70, 41,197,139, 39, 79,241,163,132,193, 96,200,195,135, 95,218, 0,157,147,163,246, 25,
+111, 90,214, 69,154,145,206,230,182,139, 39,237, 92,210,102, 92, 7, 4, 81,130, 86,138, 40, 10,137,147,132,108, 62, 39, 72,250,
+188,254,250, 91,148,101,205, 27,111,189,195,131,187,159, 51, 57, 57, 4, 32,138, 19,210,185,141,152, 53,194, 32,164,237,212, 8,
+ 3, 66,105, 40, 51,234, 50,199, 11, 34,100, 28, 91,134,133,182,163, 9,129,215, 82,249, 26,159,130,231,121, 12, 7, 9,215,175,
+ 94,230,210,229,109,219,125, 27, 12,217,216,220,100,109,109,141, 61,167,162, 22, 2,162, 48, 38, 77, 51,234,218,180, 66,203, 87,
+ 93, 59,115, 70,244,106,131,144,109, 47,221,169, 46,168, 88, 82,211,183,140,144, 78,228,176,141,179,117,214, 95, 35,156, 77,173,
+ 33,195, 5,120,113, 76,208, 31,241,254,223,250, 93, 54, 46,108,147,103, 21, 85,161,185,189, 17,178, 22, 74,202,245,139,124,252,
+157,111,243,232,193, 35,210,249, 12,240,184,242,198,123,172,111,110, 83, 87,181,117,200,168,154, 34,207, 8,130, 16, 16,172,109,
+ 13,241,140,160,204, 33,205, 4,233,108,134,169,109, 37,156, 23, 5,233,244,132,103, 95,124,130, 42, 10,235, 89,215,205,198, 14,
+ 30,103,120,235, 77, 55,162,214, 37,154, 25,205,254,203, 23,212, 70,144,103,115,246, 95, 62, 97,127,247, 37,101,109, 71,168,243,
+217,140,233,116, 74, 18,135,244,135, 3,222,253,224,155,220,191,119,143,167,143,191, 36,207, 11,187,134, 72,159, 65, 63, 98, 60,
+ 26,243,250, 27,111, 82,107,197,141,235,183,121,243,237,119,120,247,189,247,217,220,218, 38, 47, 75,164,244,200,138,156,163,131,
+ 35,110,221,188,229, 10, 28, 27,195,108, 4, 78,115, 98,117, 55,189,254,144,227,195, 3,102, 39,251, 40, 17,240,232,209, 19, 46,
+109, 95,192,199,163, 42, 74,238,125,121,159,126,127,204,193,225, 17,155, 91,155, 28, 28, 30,242,240,241, 67,242,178,108,247, 25,
+223,247,219, 34,184,174, 42, 91, 4, 55, 46,232, 70, 40, 39,206, 73,103, 91,170,172,220,205,112, 94,165,126,106,126,179,100, 59,
+147,231, 86,105, 75,243,119, 22, 2,182, 48, 8, 48,218,158, 96,131,192,119,109,170,206, 92,191,219,134,111,121,237,139,144, 25,
+227,218,233, 56,241,221, 34, 24, 70,180,209,164,141,162,189,201,197,110, 3, 62, 26,152,136,179, 21,136,149,205,188, 73,110,106,
+ 16,180,162, 67, 66,177, 21,189,108,219,166,145, 31, 16,199, 9,186,210,120,206,235, 30, 68, 49, 85, 58,195, 71, 17, 39, 49,215,
+175, 94,228,155,239,188,201,235,183,110,130, 23,115, 50, 47,152,204, 82,166,233,148,163,163, 67, 14, 14, 15, 56, 62, 57,162,200,
+237,124, 46,137, 2,250, 73,159,126, 28,227,251,178,105,102, 44,230,176,166,237, 18, 47, 84,252,142, 67,175, 28,245, 78, 53, 7,
+ 19,109, 80,202,180, 27,155,114,179,250, 90,213,228,121,129, 48,146, 10,195,225,241,132, 40,148, 86, 88,231,108, 96, 70, 8,210,
+172, 96, 28,122,100, 34, 90,118, 69, 47,225, 76,205,185,237,192, 85,251,227,169, 26,180,163,237,104, 83,206, 76, 99, 44, 52,237,
+102,214,164,149,249,190,111,175,183,235,164,224, 9,198,107, 99,252, 64,114, 50, 57,105, 55,229,166,149,106,175,185,106,225, 13,
+102,229,103,148,161,207,168,223, 35,157,207,153,205,231,132, 65,180, 68,145,107,170,246,230,144, 39,164,189,190, 70,215, 68,131,
+ 33, 39, 7,123,148, 46,161, 77,152,166,203,176,120,111, 3, 25,196, 89, 73,233,226,204,246,251,121,116,252, 69, 22,243, 42, 18,
+246,171, 55,245, 85,106, 84, 83,205,173,143, 71,108,174,175, 81,107, 77, 47,233, 51,157, 78, 24,141,134, 4,190,164, 44, 11,234,
+186, 38, 75,115, 74,199,213,151, 65,176,132,184, 89,140, 40, 58,209,146, 90,115,233,242, 53,238,188,246, 58,105, 58,231,232,232,
+152,254,112,192,108, 58, 97, 99,227, 2,247,239,255,146, 60, 47,201,231,179,246,254, 40,139,130, 40, 73,168,114,155,126,101, 0,
+223,165,232,121, 82, 18,247,250, 32, 61,140,174,153,207,231, 72, 33, 73,103,115,174, 94,187,193,104,115,139,186, 40,248,233,143,
+254,130,131,253,151,237,122, 1,214, 2,169,234, 26, 93,228,168,170,194,115,246,187,102,164, 2, 2, 97, 4,117, 93, 34, 92,162,
+ 97, 99,147, 93,204, 51,237, 24,204,151, 62,239,190,243, 22, 89,154,242,252,197, 75,178,162, 96, 48, 24,178,181,181,197,151, 95,
+222, 67,107,205, 96, 56,160, 63,232, 51,157,206, 40,242,210,194,178,208,232,230, 94, 62, 71, 13,209,222, 51,102,229,207,186,135,
+249, 51,108,198,171, 65, 49,141, 93,225,244,243,232,126, 51, 79, 98,156, 30,199,243,125, 68,104,217,250,239,125,231, 55, 57, 60,
+158, 50, 30,175,163,131, 0,229,121,132,189, 0, 2,143,112, 52,228,173, 15,191,203,238,243,231, 76,246,247,185,244,218, 59,244,
+ 70, 27, 54,208,166, 42,200,203,140, 94,191, 79, 89,149,248, 50,228,224,229, 14, 39,199, 19, 42,163,137,147, 62,101,150,163, 13,
+164,105,102, 59,128, 85,193,151, 63,255, 17,166, 40,172, 8, 88, 41,231, 18, 49,175, 52,109, 54,234, 48,219,115,170,173, 35,195,
+209, 58,195,184, 71,173,172,130, 60,205, 50, 71,165, 83, 4, 65,200, 71, 31,127,135,207,238,126,202, 39,127,253, 83,138, 60, 35,
+205, 82, 12,112,227,230,107,220,121,243, 29,190,249,141,111,243, 71,127,240, 71,124,251, 91,223,228,251,127,251,239,240,240,241,
+151, 60,126,252,148,217,108, 66, 81, 22,104, 55,186,124,254,244, 49,227,245, 13,122,253, 65, 11, 22,210, 75, 93, 50,251, 60,244,
+ 6, 35,230,243,212,218,142,101,192,227,199, 79, 89, 27,246,145, 66,240,228,217, 83, 60,223,227,230,173, 27, 22, 76, 20,197,220,
+189,251, 57,199,147, 19, 74, 39, 18,109,138,205,102, 99,215, 29, 56,155,127,150,103,230, 60, 72,200,121,109,246,179,230,162,171,
+173,161,110,107,169, 43,102, 58,245,245,221,102, 91, 85, 22,194, 16,133, 9,117, 45, 44, 79,186, 85, 26,107, 43,106,235,120,138,
+133, 83,132, 47,241,145,181,161,210,245, 2, 64, 99, 26, 91,154,116,243, 52, 75,180,107,102,235,218,205, 39, 26,251,220, 89,132,
+188, 38,226,209, 96,108, 24,132,107,129,120,173, 0,112,145, 98, 39,125, 73,228, 73,126,231,183,126, 11, 33, 2,214, 55,182,248,
+223,255,207,255, 3, 60,143,192,247, 89,219,186,200,124,191, 98,173,223,231,221, 91, 55,216,222,216,228,197,206, 1,147,124,215,
+ 86,211,117,109,163, 93, 93,155,119, 56, 24, 57,175,176,231, 58,113,110, 46, 92,247, 72,179,156,147,217,148, 89,150, 81, 41,183,
+ 85, 24,141, 49,142,227,108,186,180, 49,207,249,233,220, 70,164,112,109,121,215, 84, 84, 6,227,210,184,154,128,148,227,195, 3,
+164, 16, 28,159, 24,198,163, 4, 41, 76,123,128, 80, 70, 51,153, 29, 51, 28, 39, 28,171, 16,104,104,109,250, 92,171, 99, 23,142,
+113,214, 12,190,107,133, 92,180,136,205, 18,152, 67, 47, 85,245, 13,102,149,118,174,105, 49,138, 16,132, 33, 89,150, 49, 26, 13,
+ 17,194,235, 44,158,102, 41,101,176,113, 68, 72,199,253,151, 46,217,107, 56, 28, 46, 24,221,158,160,172,170,165, 92,245,218,241,
+242,163, 40,162,215,235, 3,134, 43, 87,174, 81,104, 65, 62,159, 49,155,158,180, 10,251,243, 84,251, 46, 85,160, 67,212,111,101,
+241, 95, 27, 64,179, 56,251,152,115,158, 73,150,126,238, 46, 94,242,172,197,209,184,107,156,101, 25,151,182, 54,136,178,130,201,
+116,198,198,198, 58, 97, 24,242,226,197, 11,210, 6,171,170, 58,128,168,238, 97,165,251,253, 93, 87, 76, 72,159, 40,142,249,229,
+ 47,127,206,219,111,189, 65,156,244,241, 3,193,157, 55,222,227,248,240,152,188,168,169,107, 77,145,101,173,190, 65,107,221, 42,
+128, 27, 79,178,237,130,197,196,189,190,115,176, 88,218,157, 47, 3,116,109, 72,231, 41,248,146,163,201, 9, 55,238,188,193, 79,
+255,242, 47,200,103, 19,180, 81,248,161,196, 40, 67, 93, 87,142, 65,224,238, 3, 99,105,144,120, 22, 28,210, 72, 6,141,174,241,
+ 60, 27,170, 97, 92, 39,220,222,146, 98,113,223, 56, 27, 83, 16, 70,150, 34, 55,180,150,211,245,141, 77, 78, 78, 78,220,189, 1,
+189,126, 15,165, 52, 85, 93,219,192,144,118,221, 89,174,198,141, 94, 86, 53,115, 78,180,235, 42,142,251, 85,207,216,121,115,122,
+211,206,181, 22, 50,201,230, 48,102,207, 99,138,195,151,207,185,120,243,117, 94, 62,125,202, 86,125,145,251,105, 74,166, 54,240,
+227, 4,141, 64,135, 30,127,240, 95,253,119, 28,236,254, 47,110,156,227, 58,122, 66, 16,202, 8,223, 15, 72, 6, 35,180,170,137,
+146, 62,195,245, 17, 97, 16,146,205,230,204, 38, 71, 84, 69,110,103,240, 8,162, 40, 4,225, 99,132,231,198, 14, 11,146,156,118,
+ 57,234,242,156,172, 4, 97, 26,173, 8, 24,161,168, 84,137,240,237, 24, 45, 77, 51, 75,236, 51,198,230, 0, 24,195,112, 99,139,
+147,233, 9,179, 89,202,201,116,234,130,181, 13,232,156,172, 0, 0, 32, 0, 73, 68, 65, 84,108,149,142,231,241,250,107,111,160,
+ 74,171,133,248,235,159,254,152,157,253, 67, 62,249,229,167, 36,195, 1,243,217,140,181,225, 58, 87,175,221,160,215, 79, 56, 57,
+ 58,228, 7, 63,252, 33, 55,111,222, 70, 43,101,133,211,206,225, 32,125,191,163,217, 18,108, 95,186,198,201,241, 30, 65, 24, 80,
+ 86,134,159,252,245,167,188,249,218, 45,134,131, 62, 59, 47, 95,240,250,235,175, 51,159,103,108, 95,216,230,219,223,252, 22, 15,
+ 31, 63, 65,186, 28, 16,221, 4,221, 4, 11,174, 75,154,166,139, 74, 93,124,141,249,231,234,255,119,165,244,156,161,140, 63, 59,
+ 23,246,116,123,246, 44, 33,212,162, 77,103,109, 30,117,173, 92, 66,146, 89,138, 66,237,182,151, 76, 7,211,185,164, 2,110,191,
+191,215,249, 60,211,122,115,187,200,218, 38,142,181,121,145,154,135,173, 81,194, 47,233, 2,132, 69,252,133, 97, 72,224, 60,241,
+113, 20,219,150,187,239, 51, 8, 67, 62,126,247, 93,254,193, 31,252,125, 46,108, 95,230,207,254,252,207, 81, 8,246, 15,246,153,
+205,166,214,187, 25,199,152, 42,103,123,125,196, 55,223,125,139,121,161,201,106, 73,165,161, 84,149, 19,123, 5, 36,113,194, 96,
+ 48,162,223,235, 19,134, 33,190,231, 57,209,154, 89, 82,191, 75,105, 91, 62, 85,173, 90,241,159, 94, 17, 41, 26,163,157,200, 77,
+119, 30,120, 22, 64, 21, 22, 86, 67,173,161,170, 43,202,218, 16, 74, 73, 20, 5, 92,189,122,147,178,204, 59,246, 13, 65, 89,100,
+ 84, 10,250,161, 68,200,128,218, 85, 63,230,220,205,231,213,130, 32,179,154, 25,192, 2,204,226, 9,207,182,218,196, 98, 20, 35,
+218,249,186,221,204,155,202,185,151, 36,150, 65, 16,134,244, 7, 35,122,189, 30,105, 54,183,162, 46,167,142,111, 2,108,108, 27,
+146, 54,221,169, 9, 12, 50, 24,198,235, 27, 54, 66,177,180,224, 30,221,188,230,134, 37,194,161,210,154,193,112,196,155,239,254,
+ 10, 71,199, 71,140, 55, 55,121,250,197,231,168,186, 92, 80,186, 92,165,110, 55,120,177,216,252,150,196,126,230, 84,134,189, 57,
+ 3, 44,179,106,105, 91, 78,112,107, 97,127,231,142,188, 90, 60,238, 25,217,221, 93,182, 67, 20, 6, 68,161,143,231, 73,202,218,
+218,147,242,162, 32,138, 66,134,131, 30, 81, 24, 16, 6,161, 85,195, 27,131,244,195, 78,117,142,243,220,227,224, 45,246,119,244,
+131,144, 34, 79,217, 63,220, 99,109,188,193,108,122,194,107,183,238,112,120,176,199,201,244, 16,223,131,233,228,200, 86, 38, 44,
+ 40,127,149,211,218, 12, 6, 67, 54,183, 54, 9,227, 30, 97,100,219,216,202,229, 87,219,209, 84,128,170, 21,183, 95,123,131,126,
+191,207,243,103, 79, 57,220,125,129,214, 54, 24, 68,202, 0,225,121, 84,101,238, 28, 53,141,216,177,121,183,173,211,133,157, 82,
+ 99,180,194,107, 71,184,157,158,183, 88, 36, 5, 94,218,190, 72, 24, 6,220,253,226, 46,199,199,199,120, 88, 80,200,131, 7, 15,
+ 56, 58, 60, 34, 8,173,114,254,248,200, 66,140,234, 14,108, 70,116, 0,242, 93, 54,200,210,198,187,226, 38, 94,245, 42,127,149,
+208,238,213,246,183, 14,235,189, 73, 10,115, 8, 84,194,132,245, 11,219, 12,183, 46,209,235, 15,172, 72,184,172,121,124,255, 41,
+ 90, 67, 20,245, 49,202, 42,196,123,253, 11,236,189,120, 74,212,239,219,228,200,141, 45,182,174, 92,163,191, 54,102, 48,176,200,
+230,209,120,157,233,241,132,201,209, 9,186,182, 64,168,233,201, 33,121,158, 81, 21, 57, 26,195,211,207, 62, 37,207, 38,152,170,
+ 2,101, 83,219,186,124, 19,113, 78, 55,143,206,235,217,132,226,104,165, 73,211,185,173,218,203, 10, 85, 87, 36,142,243,113,229,
+250, 45, 14,247,119,216,121,254,130,249,244,132,178,178,247,156,239,251,108,108,109, 17, 70, 62,166,174,137,147, 30,165, 82,244,
+134, 99, 14,142, 14,185,126,243, 53,246,119,247, 0,205,245,107,215,248,224,221,119,136,147, 30, 89,150,130,214, 92,190,120,217,
+210, 37, 61,225,226,125,181,253,222, 74,145, 21, 37,251,251,123,244,146,152, 60,157,179,177,117,129, 52,175,120,185,183,203, 90,
+ 63,226,209,163,135, 92,185,122, 19,165,140,115,153,192,189, 7,247, 56, 57,153, 88, 42, 98,109, 59,133,101, 85,145, 23, 69,155,
+ 51, 16, 70,209,233, 77,253, 85,241,125,171,109,246,102,147,107,254,219,205, 91, 95,165,204,117, 55,253,174,242,210,235,248, 11,
+187,184,209, 5,131,222, 10, 82,154,246,185,215,185,217, 27, 65, 92, 83,209,121, 14,199,218,120, 62,237, 44,121,113,163, 55,127,
+191,120,112,188,133,200,169,161,247,184,150, 70,155, 29,220,217, 57, 12, 46, 95,184,165, 6,249, 96, 4, 97, 24, 17, 5, 1,189,
+ 40,230,206,245,155,124,235,253, 15,121,251,245,219,248,194, 48,153,166,188,216,221,163,172, 20,105, 58,227,100, 50,177,109,225,
+ 40, 66,186,131,192, 91, 55,175,114,241,214,219, 76, 76,132, 10, 18, 82, 45, 17, 97,159,209,230, 37,174,221,184, 3,126, 72, 93,
+ 41,148,170, 40,178,140, 44,207,200,203,146,162, 40,168, 28,123,188,217,164, 27,205,113,173,244, 82,140,104,163,112,214,206,194,
+214,216,211,186,212,210, 37,126,128,214, 40, 3,101, 85, 82,215,240,209, 71,223,224,131, 95,249,136,231,187,251,244,251, 61, 6,
+253, 1,120, 1, 85, 85, 89,223,119,101,233,108,189,164, 71,102,196, 43, 55,244,175,170, 58,197,242,170,229,238,139, 5, 55,125,
+ 49, 59,166,157,167,219,107,107,239, 15,223,151, 8,237,224, 49, 6,140,131,149, 36,189,132,217,116, 98,209,165, 70, 99,148,107,
+187, 58,250,160, 86, 11,230,124,147, 23,160,209,172,111, 94, 64,232,154,188,204, 73,211,194,182,240, 28,207,160, 9,255,105, 9,
+137, 70, 83, 42,195,205, 27, 55,168,139,156,151, 47,158,187,142,137,251, 61, 28,247,125,113, 12, 89,158,103, 11,186, 20,185,206,
+ 38,110,204, 87, 88,218,190, 90, 72,183,202, 6, 88,132,185, 44,111,236,141, 54,164, 57,136,212,170,102, 52, 28,178,187,191,199,
+198,230,133,118,113,196,169,209,243, 60,167, 42,109, 28,102,165, 20,158, 12, 58,105,111, 6,207,232, 5, 82,213,253, 69, 63, 73,
+ 72,179,220,230,168, 39, 61,174, 92,190,194,135,239,191,203,227,167, 79, 41,202,130,170,214,100,233,156, 44, 79, 91, 87,130,104,
+232,145,142, 63, 16,246, 70, 92,188,116, 13,233, 75,242,233,148,186,170,152,167, 54, 17,235,157,247, 63, 38, 47, 10, 6,163, 33,
+ 15,238,125,193,193,222, 75,180,174,172,245,211,147, 32, 44,124,200,156,135, 82,245,150,237,132,198,216,223,197,104, 13,141, 2,
+190,209,173, 24, 97, 89,240, 64,150,165, 4, 65,228,156, 42, 30,101, 89,114,176,127, 64,150,102,244,122, 61,162, 40, 34, 75, 51,
+234, 74,147,103,249,105, 70,187, 89, 84,223,167,158, 21,195,105, 96,255,127,170, 55,175, 25,243,200, 69, 72,146,139, 30, 70,134,
+120,126, 64, 60, 92,227,226,173, 55, 40,243,140, 34, 79,153, 78,142, 41,171,156,201,225, 49,233, 60, 39, 74, 70,110,106,225,232,
+106, 24, 43, 88, 52,134,120,208, 35, 74, 2,118,158,237,144, 77,102,204,103, 83,138, 52,165,200, 83,140,214,228,121, 74, 85, 21,
+174,192,178,207,242,203, 71,247,152, 29, 29, 64, 85, 58, 24,152, 90,116,186, 92, 39,160, 51,119,236,182,161, 22,197, 64,211,162,
+ 53,118,156,168,116,109, 81,188,181, 34,244,125,100, 24,147,207, 78,168, 84, 77, 89, 86,164,243,180,181, 63, 71,113,196,205,215,
+222, 36, 8,236,248, 84, 74,143, 40,238,113,239,203,123, 40,165,217,221,223,229,141, 59,111,241,221, 95,255, 30,191,255,187,191,
+199,103, 95,220,231,231,159,126, 74,150,229,236,236,237,176,182, 54, 98,115,235, 2, 85, 85,183,129, 46, 85,153, 91, 82,163,231,
+183, 28,128, 60,157,243,248,193, 93,174, 94,185,194,241,100,206,238,193, 1, 85, 62, 65, 6, 9,117,109,216,221,223, 99, 58, 75,
+217,217,123,201,203,157, 29,187,174, 43,237, 80,180, 11, 61, 90,243, 76,251,109,226,213, 74, 27,124,169, 37,218, 84,179,231,120,
+213,187,159,219,221,176,155,175,213, 70,196, 53, 27, 76,199,187,222,176,225,187,129, 45, 75, 45, 91, 33,150,104,114, 97, 16, 80,
+ 20,133,165,198,181, 10,228,166,202,208, 75,107,159,205, 74,246, 23,223, 95,219, 42,181,219,214,109, 46,186, 49, 6,161, 93, 38,
+183,239, 99,217, 51,246,231,104, 42, 63, 79,122,110,134,234, 55, 83, 53,146, 56, 38, 10, 67,110, 93,190,204, 63,254,135,255,136,
+164,215,227,238,221,187, 60,120,250,132, 52, 51, 28,189,120,196,241,228,132,119,222,122,159,255,247,207,254, 29,243, 44,103, 48,
+ 26, 81,215, 21,145, 47,249,141,191,245,125,110,221,184,198, 23,247,239,147,165,115,210,188,112,177,122,118,244,245,249,131, 47,
+233,247, 6, 28, 29, 29,162, 84,133,174, 50, 34, 81, 19, 75, 64,215,173,158,160, 65, 24,106, 87,189, 55, 7, 26,221, 57,221, 46,
+ 54,236, 5, 47,153,206,198, 46, 86,250,127, 6,131,244,124,164,172, 81,194,227,147,187, 95,128, 16,156,204, 11,226,237,109,122,
+189,128,141,237,107,188,124,250,144,131,151,207,236, 34,154, 79,144,193, 26,218,120, 95,217, 46,126,245, 26,211,196, 63,138, 69,
+203, 29,115,134, 80,172,169,128, 27, 65, 35,248, 24,164,239, 33,133, 65, 6, 18,163, 20, 90,213,182, 77,222,116, 39,154, 54,177,
+240,150,252,197,184,230,124, 39,124,213,206, 81,141,108, 67,139,154,174, 77,163, 19,145, 82,182,149,111, 93,215,156, 28,238,113,
+180,190,142,148, 78,139,161,150, 70,213,231,176,182, 95, 65,124,165, 9, 41,234, 70,195,154,142, 64,112, 97,199, 91,205, 91, 95,
+ 54,160, 47, 62,238,122,243,151, 54,140, 51,174,153,198, 99,247,232,152,219, 55,111,113,229,218,117, 62, 41, 51,164, 7,155,235,
+235,232,186,162,174, 21, 69, 89,177,179,179, 67,254,114,119,233,251, 53,135,228,238, 69, 51, 90,219,153,183,231, 81, 86, 53, 79,
+238,223,229, 87,222,127,143,207, 63,191, 11, 24,214,198, 23,240,227, 1,207, 30,125,137,192,163, 86, 5, 32,137,147, 30,170,170,
+240,125,143,254,112,200,198,214, 37,158, 60,188, 75,127,212,167,172,114,138,162,194, 51, 18,207,243, 25,174,111,242,193,214, 69,
+ 62,249,201, 95, 80,164, 51,140,174,240, 3, 31,165,106,226, 36,166,200, 11, 84, 85,127, 77, 49,225,202,245,104,218,187, 66,129,
+167, 90,240,143, 16,130,193, 96,200,193,193, 62,117, 93, 34,165,116,155,129,116, 93,140,154, 60,243, 40,203,218,233,131,188,191,
+113, 85,253,255,199,155, 16, 43,135,112,209,137, 85,214, 6,163, 43,140,170, 56,126,241,204, 94, 81,167,203,177,107,143,205, 53,
+159, 30,238,243, 18,143,209,250, 6,170,174,217,186,124,157,221, 23, 79,160,206, 40,202,156,217,193, 17, 85, 94, 82, 21,182, 18,
+ 47,138,220,218,194, 48,228, 89, 96, 95, 79,101,173,132, 81, 20, 83,148, 57,201, 96,232, 10,171,102, 18, 37,150, 56, 22,171,115,
+ 37,115, 70,123,170,155, 83, 34, 16,232,178,118,241,199,130,121,154,114,227,242, 21,158, 61,121, 68,224, 75,122,253, 62,202,161,
+163,149,178,237,236, 23,143,191,100,118,208, 35,126,239, 35,126,252,163, 31,240,222, 71,191,202,116, 54,181,182,204,209,128,203,
+ 23,183,201,243,156,127,253,191,253,107,158, 60,126,192,228,232, 24,141, 97,109,188,193,207, 63,251,156, 7, 79,159,179,183,243,
+140,171, 23, 47,242,141,143, 63,182, 7, 64,199,207, 55,120, 28,157,156,208,239,247, 88,223,188, 76,173, 44, 5,113,150,213, 32,
+251,188,120,249,140,241,186, 98,255,112,143, 43, 87,174,211, 31,140, 22,124, 23,135,196,214,238, 4, 22,134,161,203, 13, 16,118,
+166,126, 22,158, 98,181, 90, 50,103,204,220,151,162, 86, 59,213,115, 35, 86,107,132,105,205,198,234,117,208,179,205,194,210,221,
+228, 87, 15, 10,129,239,159,242,198, 91,108,165,180,243,112, 85,183,109,216,238,108,138,142, 23, 94,181, 73,104,180,104, 61,209,
+ 90,247, 22,149,145,118,130,183, 38, 4,164,109,181, 59, 62,124,243, 86,233,218,205, 91, 37,113, 32,145,198,240,135,127,231,119,
+248,248,131,143, 49,192,131, 71, 79, 56,153,167, 24, 35,216, 63, 58,224,249,243,167,164,243, 9, 89, 94,178,187,251,146, 48, 73,
+172,152, 74, 43,100,173,120,246,249, 79,233,151, 39,220, 30,111,145, 69, 1,243, 34,103, 50,157,240,236,249,115, 30, 60,191,207,
+113, 58, 99, 54,207, 17,210, 39,205,114,146,254,192,158, 36, 49,140,134, 49,107,177,196, 83, 85,123,160,105,212,145, 90,211, 42,
+243,187,124, 0,131,193, 72, 15, 73, 3,161,113, 85, 84, 19, 4,237,198,106,173,239, 84, 8,110,223,126,157,195,227, 19,170,186,
+ 38, 8, 66, 60, 25,176,127,120, 76, 16, 4, 8, 63, 32,232,141,209,234, 17, 85,169, 57,153, 79,233,175, 13, 80,120,232,142,165,
+238,111,220, 18, 84, 26,207,128, 22,221,123,111,177,105, 45,132, 96,206,226, 39, 12,190,176, 55,122, 28,122, 96, 60,198,253,132,
+124, 62,165, 84, 37, 71, 79,239,115,240,252, 17,117, 93,209, 27,218,128, 15,229,217,106, 59,148,129,125, 25,100,141, 86, 30, 70,
+219, 36, 36,164,164, 23,199, 14,157, 9,210,243, 45, 27,192,221,223,149, 3, 23, 37,137,245, 27, 23,121, 78,173, 13,190,123,221,
+101,148,180, 73,126,205,115,166,189,211, 45,113, 15,111,129,138,109,181, 31,210, 85,244,221,120, 84,111,105, 54,190,218,110,255,
+186,149,123,187, 40,154, 69,149,222,140, 93,204, 89, 54, 57, 64, 24,201,237, 91, 55, 57,153, 28, 51,159, 77,233, 37, 49,187,123,
+123,100, 89,198,222,206, 30, 85,165, 28, 64, 42,116,150, 40,109, 15, 72,205,243,214,121,222,141, 49,100,121,142,239,123, 68, 81,
+207,182,114,107,205,237,119,222,230, 39, 63,255, 25, 85,173, 41,202,140,121, 94, 90,232,136,178,215,187, 44, 10,162, 56,166, 72,
+ 83,166,211, 57,126,120,136, 82, 53,147,201,140, 32, 25,160,211,140,241,214, 38,210, 11,185,117,235, 53,254,244,223,254, 95,236,
+239,238,162, 77,213, 96,199,136,252, 16, 97, 60,234,178,122,165,202,124,213, 2,253,234,219,119,113, 92,251,255,152,123,179,102,
+187,146,244, 60,239,201,204, 53,236,241,204,192, 1, 80, 0, 10, 64, 1, 53,118, 87, 87,143,106,118,183,217,164, 72,118, 75, 10,
+ 43, 40, 57,194,146,232, 65,162, 47, 20, 33,135, 46,252, 23,120,233,123,219, 23,118,216, 97, 59,194, 23,158,168, 8, 91,150, 76,
+134, 37, 82,166,201,102,147,221, 53, 87, 97, 40, 20,102,156,121,216,243, 94,123, 13,153,233,139,204,181,246,218, 7, 7,168, 34,
+197,144,136,138,138, 66,225,156,179,177,135,181, 50,243,251,190,247,125,222, 75,151,207,113,116,216, 99, 52, 30, 18,168,208, 61,
+239, 60, 33,138, 34,226, 70,200,104, 52, 33,203,115, 10,175,176,255,203,176,169,207,163,134, 79, 68, 12, 89, 7, 97, 50,218, 98,
+ 10,195,112, 52, 32, 75, 38, 52,187,203, 72,175, 43,114, 85,167, 36,157,205,216,223,121, 12, 88, 58,221,101, 52, 49,235,155, 23,
+ 56,218,121, 2, 8,215, 93, 76,103,100,105,226,220, 65, 85, 20,182, 68,235,162,162, 91, 74,191, 31, 4, 42,164,221, 93,246,190,
+247,121,252,171,125, 94,161,240,172, 21,228, 25, 63,103,221,198, 41,188,240,242,254,157,219, 72, 41, 73,172, 97,150,101,180,219,
+ 29, 70,163, 17, 90,107,210, 52,227,193,131, 7,108,158,221, 96,243,226,128,100,146,240,225,123,127,196,160, 63, 34,203, 53,179,
+100,194,104,120,192,131, 7, 3,130, 56,228,210,213, 87,201, 47, 36,124,255,123,223,227,227,143, 63, 98,111,127,143,163,227, 67,
+142, 15,246,233,247,135,196,141, 6,231,206,158,165,221,108, 57, 23,146,207,155,104,196,107, 96, 93,229, 31,132, 13,222,249,234,
+ 53,110,221,189,195,147,221, 67,130,168,237,198,138, 8, 58,173, 14,237, 86,147, 89,146, 80, 4,130, 48,136,209,133, 23,248, 26,
+ 83,237, 99,106,211,179,223,159,129,207,156,176,170,217, 19,237,247,147,173,245,147, 80,131, 58,217,232, 36,140,255,121,249,232,
+ 11,143,227, 63,244, 82,176, 84,162,241, 74,187,218, 28,145, 71, 53,175,168,186, 4,181,177,128, 84,106,129,172, 84, 66,244,231,
+ 31,178,152,219, 82,202, 22,123, 16,204,199, 7, 30, 88, 83,127, 77,110,241,146,180,227, 38,191,241,183,255, 14, 87, 46, 95,101,
+107,239,144,207, 30,222,103, 56, 30,147,101, 25,119,239,223, 99,119,103,139,209,120,196,104, 56,224,204,185,151,216,122,250, 24,
+ 37,157, 77,173,232, 31,240,253,175, 92,231,245,235,175, 16,199, 45,134,163, 17,195,209,128, 65,239,144,227,227, 3,146,217, 16,
+108, 65, 39,128,165,118, 68, 28, 88, 66, 97,145,104,132,206,209,166, 96, 48, 76, 24, 78,114, 50, 20, 65, 24, 97,116, 86, 19,127,
+205,253,228,229,102, 94,222, 56,166, 22,175,233,246,117,103, 79, 51,224, 43,123, 23, 33,235, 58, 29, 17, 23, 46, 95,231,184,223,
+171,120, 2, 88, 55,107,183,214,137, 64,164,144,244, 14,182, 49,190, 61, 30, 7, 2, 29, 54,220,166,254, 28, 58,220,105,254,244,
+133,131,164,169, 99, 43, 75,129,165, 93,184, 79,165, 84, 40,159, 83, 31, 42,103,247,107, 70, 1,107, 75,171, 92, 61,187,202, 70,
+ 51,224,210,153,101,206,173, 45,209,109,132,204, 38, 3, 14,247,247,233, 29,237,163,141,165,213,234,178,212,238,242,213, 55,191,
+194,193,193, 33,218,184,207,187,244,128, 6, 81,196,202,234, 58, 42,140,177, 38, 35, 75, 83,210, 52,165,200,117,117, 88,138,227,
+120,222, 57, 10, 2,172,128,184,217,100,245,204, 38,235, 27, 27,108, 61,184, 87,141, 69,168, 87,197,130, 5,248, 76, 73, 59,172,
+188,226,207,168,211,235,247, 27,167,224, 97, 57,117,206,126,186, 95,189,118, 77,156,216,255,171,133,207,204,189,235,229, 73,175,
+217,138,184,113,245, 10,201,108, 70,175,223, 67, 23,133,127, 63,114,199, 57, 40, 10,178,188,240, 1, 40,139,249, 14,243,191,179,
+246, 28,140, 37,142,155,104,109, 88,223, 56,195,104, 50,229,246,237, 91,172,111,108,178,253,248,161,131,201,204,166, 11, 93,166,
+134,119, 33,204, 38, 19,134,253, 30, 65, 16,211, 63, 58,102, 50, 25,115,249,234,235, 92,188,124,149, 32,140, 56, 58, 62,226,222,
+173,143,201,139, 4, 21, 72,164, 84,158, 32, 23,184,150,239,139,132, 99, 82,156, 18,164,242,156,182,183,156,195,132,194, 48,228,
+204,153, 51, 32, 93,102,118, 20, 70, 76,166, 78,195,161,181, 33,207, 10,138,220,197, 37,159,234, 58,248,183,249, 75,214,212,239,
+190,170,117,247,158,114, 28,144, 32, 64, 69, 33,171, 27,231,216,184,120,133,150,207,167,207,243,204, 51, 9, 92, 17, 55, 73, 18,
+140, 49,132, 97, 72,220,106, 51, 25, 13, 49,186, 32,138, 34,102,233,140,162,200,156,146,221, 99, 86,173,209,180,219, 29,162,184,
+ 73,150, 37,110,220, 83,100,104, 93, 48,155, 38,236, 62,184,141,206, 83,140, 46, 16,149,168,213,143, 83,121, 22, 58,246, 69, 39,
+176,147,221, 50, 91,141, 84, 92, 1,152,205,102,190,205,111,157,248,207,104,146, 89,198,100,216,231,175,252,224,135,228,218,137,
+171,251,189,125, 94,186,248, 10,237,165, 85,127, 50, 86, 92,121,249, 18,175,190,250, 38, 63,127,247, 93, 62,254,248, 67, 54, 55,
+ 55,217,220,188, 72,158,101,100, 58,229,206,231,159,115,243,147, 79, 56,183,185, 65,179, 17, 87,235,135,213, 5,179,196,141,143,
+206,109,158,195, 34,248,232,147, 79,120,186,253,148, 15, 62,252,128,235, 87,174,112,118,227, 12, 65, 20,178,189,179,205,113,175,
+ 7, 30,200,102,173, 75,129,115,193, 64, 78,103, 86,169,223, 79, 82,223, 78, 83, 33,159,150,170,117, 50,148,227, 52,166,183,169,
+ 43,151, 79,216,216, 78, 90,227,202,159,209,198, 69,126, 90,107, 73,211,172, 98,188,139,122, 35,241,132,101,163, 10,135,241, 23,
+152,170,252,245, 84, 65, 49,174,133, 58,199,202, 86, 51,119,255,143, 82,210,219,210,100,245,166, 41,175,162, 46,231,250,161,148,
+172,180,150,248,149, 31,254, 10,153, 54,188,127,243, 83,142,251,125,132,128,222,241, 1, 69, 94,240,228,209, 67,142, 14,119, 25,
+141, 71,172, 44,175,208,136, 27,172, 44, 47,145,103, 25, 45,147,240,250, 91,175, 34,130, 6, 79,118, 14,152, 38, 35,166,147, 49,
+233, 44, 33, 47, 50,239,207,215, 72, 44,198,251,177, 91,113, 68, 43,114,109, 42,109, 12,218, 58, 21,228, 94,111,200,222,225,132,
+163, 32,164, 29, 7,172,180, 2, 66,161,157,239,182,108,193,155, 57,180,199,250,147,176, 49, 6,171, 5, 70, 27,114,109, 22,102,
+233,121, 53, 2,149,206,187,249,248,169,111,233,187,199,113,109,103,129,241,239,107,220,142, 41, 52, 24,155, 51,203, 45,131,201,
+136,165,168,137,150,205,103,236, 97,167,133, 16,156,180,178, 9,192,150, 44,237, 57,108,127,225,251,165,152, 95, 9,129,148,132,
+129,165, 25, 71,156, 91,233,242, 15,255,246,143,184,180,185,206,246,193, 17,253,209,152, 89,154, 49, 76,102,156,221, 94, 99,115,
+243, 28,247, 30, 61,230,240,168, 71, 95, 91,190,254, 87,127,196,127,252, 31,253, 3,182,247,255,115, 30, 60,124, 72,160, 4, 89,
+230, 68, 40,121,158,147, 23, 5,235,237, 54,227,227, 17,179, 36, 3, 43,253,181, 36,201,243,162, 66,165, 90,107, 17, 65, 64,220,
+106, 16, 69, 13,174, 95,187,206,238,238,206,188,253, 94,239,118,213,156, 24,194, 31,164,140, 63, 88, 46,194,105, 78, 42,158,173,
+255, 12,190,220, 76,253,121,168,222,133,150,123, 85,185,219, 5,159,250, 51,247,176,209, 28, 30,245,248, 40,189,201,227, 71,143,
+200, 50,119,144,113,243,244,220, 91,252, 28, 52,199,136,242,243, 58, 29, 34,228, 34, 92, 45,214,184,168,212,184,213,100,123,123,
+139,237,221,167,244,122,251,160, 36, 71,251,251,136,192, 35, 49, 75, 33, 98,158, 51, 25, 77, 16, 72,180,201,145, 6, 31, 98,164,
+ 9, 26, 49,171, 27, 27,140,198, 3,206,108, 92,224,206,205,247, 40,242,153,247,184,251, 13, 29,200,210,153,211, 12,148,159,193,
+151,217,240,140,253,194, 34,189,188, 94,198,227, 9,123,123,123, 20, 69,225, 66,159,148, 34, 80, 33, 89,150, 19,132,202,235, 49,
+204, 11, 99,117,255,141, 86,233,117,232,145,176,212,135,177,194, 88,172,116, 85,160, 41, 10,116,150,114,255,230,135,188,243, 75,
+ 63, 66,133, 33,211,201,180, 98,116, 40, 25, 96,116,129,180, 5,227,193, 49,217, 44, 97,121,227, 28, 27,155, 47,241,244,254, 29,
+116,225,238,165, 82, 31,227,198,156, 33,185,206,153, 38, 9,205,102,135, 70,220,114, 34, 86,156, 70,161,217,238,186, 34, 74, 6,
+222,181,194,169, 54,206,147,235,136,125, 65, 71,194,214, 55,118, 33,156, 3, 72,136,138, 80,103,172,161, 17,195,114,183,193,116,
+102,153,101,154,220,102, 28,236, 29,242,123,255,207,239,112,241,210,203, 92,188,250, 26,199,131, 9,159,125,246, 41,211,201, 49,
+198,184, 14, 97, 49,217,227,195, 92,240,116,107,155,171,175,188,202,217,179,231,249,248,147, 15, 81, 82, 48, 28,244,249,230,183,
+190,199,225,225, 54,239,127,252, 41,191,246, 43,191,196,119,191,243,109,132,144, 76,167, 51,146, 89,202, 96, 48, 96, 50, 25, 51,
+153,101, 28,247, 29, 71, 97,146, 76,248, 23,191,247, 59,204,178,156,254,112, 68,179,211, 69, 5, 14, 96,228,186, 40, 6,227,109,
+223,133,245,184,242,205, 90, 74,219, 51,216,205, 23,136,230,190, 72, 76,119,154, 10,243,228,134, 95,206, 37,235,172,226,122,214,
+236,226,129, 97,209,162, 81, 85,141,245,231, 41, 29, 56,198,214, 42,186, 18,245, 89,162, 67,133,247, 21,151,155,191,155, 13,205,
+ 89,194,214,206, 75,161, 50,133, 77,249,252,232,242,160,176,214, 93,225, 59,223,254, 5, 14,142,143,249,244,238,109,198,147, 41,
+155,103,207,112,112,120,200,211,173,167,108, 61,121, 76,239,240,144, 52, 77, 89, 95, 63,195,245, 27,175,115,247,243, 79, 72,211,
+130, 88,100,180, 27, 49,121, 97, 56,238, 29,177,127,180,195,104,212, 35, 73,166,228,254,132,186,128, 3, 45, 19,214,124,181,103,
+188, 85,195, 65, 83,220,194,113, 60, 24, 50,157, 38,140,167, 41,195, 73,130, 12, 98,132,180, 96,168,236,108,182, 12, 2,168, 42,
+116,175,246,246, 86,182,121,155, 92,248, 53, 76,114,229,218,107, 28, 15,199, 12,134, 35,180,209, 21,168,199,241,206, 45, 97, 28,
+209,136,155, 44, 45,117,217,122,248,192,133, 99,224, 14, 12,177,180,132,113,155, 66,200, 23,139,180, 78,222,148, 11,115,102,159,
+ 96,102, 44,243, 28, 33, 81, 9, 44,149, 16,132,210, 5,226,116,218, 29,150, 35,197,143,191,255,109,126,240,206,155, 36,179,148,
+ 78,171,197,203,231,207,114,110, 99,131, 0,144, 42, 96,154,165,180,155, 13,154,173, 54,163,201,144,207,239, 63, 32, 51,146,165,
+165,101,118,247,182,171, 4, 59,227,245, 23, 66, 8, 86,215, 54, 48,121,198,112, 48,112,234,217, 60,175, 20,211,229,181, 23,134,
+ 97,165, 1,208, 70,163,162,136,165,245, 13, 30, 61,248,252, 25,221, 66, 5,211,169,133,152, 87,153,108,162, 70,151, 19,207,223,
+180,133, 56,141, 50, 87,155,153,219,211,127,118,161,107, 98, 79, 7,206,156,214,130,151, 66,144,167, 9,111,189,122,189,130,118,
+228, 69,225, 83,199,138,202,250,100,177,200, 32, 92, 56,160,137, 90,219,211,251,163, 92, 71, 8,139,176,154,118,103,149,227,163,
+ 99,134,253, 35,138,162,112,112,142,195, 67,162, 70, 76, 58,157, 44, 28,254,165, 12, 0,235,187, 3, 78, 77, 44,132,164,179,180,
+194, 43,175,189,197,222,214, 99,182, 30, 63,228,232,224, 41, 86,216, 74, 68, 25,199, 49,179,100, 70,121,210,168,146, 23,121,126,
+245, 61, 23,200,189,112, 32, 93,117, 93,202,123,107, 99, 99,195, 57,118,112,100, 76,165, 2,186,221, 37,164,130,209,120,234, 79,
+204,226,223,234,102,254, 44,165,110, 62, 12, 18,204,169,162,248, 74, 29,225,232,114,198, 20,172,174,159,229,204,203,215,153,141,
+ 71,110,230,174, 13, 65, 24,186, 3, 88, 81,176,191,243,148,233,112,192,108, 60,166,189,180,130, 12, 20,211,209, 96, 62,122, 21,
+208,108, 52,171,241,183, 7,108,187,188,118, 32, 10, 93,124,174, 20,130,123, 31,189,235,224, 51, 69,225,216, 1, 53,178,168,100,
+222, 5,126, 38, 4,234,180,187,230, 68,242,227,201, 49,115,217, 87,210,133,173,108,170,198, 3,182,180, 54, 12, 7, 67,250, 71,
+187, 28,239, 63,161,119,116,128, 65,114,238,226,203, 72, 12,163, 97,159,183,191,249, 67,134,131, 35,116,145,114,229,234,117,210,
+ 52,227,157,183,223, 97, 52, 28,161, 36, 92,186,116,145, 87,175, 94,230, 43,111,188,206,234,234, 26, 91, 79,183,185,121,243, 22,
+ 66, 10,214, 55, 54, 8,163,152,127,254,187,191,203,225,193, 1, 23,206, 95,164,217,233,114,235,230, 77,192,242,225, 7,239,209,
+110,183,233, 46,173,112,216, 59, 98, 52, 26,251,113,243, 92,179,230,226,124, 11,212,185,203, 87,126,235,100,150,245,139, 54,247,
+ 47,147,248,115,154,165,237,121, 45,254,211, 22,248,250,215,158,119,112, 88,176,183,213, 91,238,254, 38,171,219,221,170,192, 26,
+107,231, 1, 39, 30,172, 17,133, 97, 21,202, 81,109, 42,190,131,163,252, 1,161,244, 34,135, 97, 72, 32, 3,174, 95,125,133,251,
+247,239,243,238,123,127,202,176,239, 32,253,219,219, 79, 24, 77,198,116, 58,203, 4,129,196, 74,201, 75,151,175, 32,195,144,219,
+ 55, 63,101,109,101,153,241,104, 64,104, 13,185, 46, 72,146, 33, 69, 54, 69, 8,187, 32,252, 16,181,148,177, 82,183, 54,183,152,
+153, 10, 17,168,141,118,137,105, 62,101,108, 60, 26,251,128,154,148,209,104,138,177,130, 48,168, 65,113, 16, 11, 34,146,146, 1,
+ 95, 89,154,132,240,126, 92, 0,197,185,243,151, 41, 68,200,238,254,126, 21,122, 99, 42, 23,129,115, 57, 52,154, 13,148, 10,105,
+182, 90,140, 6,125,146,241,200, 29, 54, 60,109,110,185,213,192, 40,135,237, 60, 89, 69,138,231,164,185,149,223, 37, 77,125, 49,
+181,243,245, 83, 8, 31,130,224, 8,123, 97,160,104, 68, 1,157, 64,241, 11,111,191,202, 87, 94,189,198,230,153, 85, 90,171, 75,
+172,111,172, 17, 71, 10, 17, 72, 86, 58, 45, 86,218, 45, 86, 87,215, 88, 63,123,150,118, 44,233,180,155, 20, 58,227,222,227,167,
+188,253,246, 55,216,219,219, 5, 41, 25, 79, 38,213,232, 69, 72,197,210,202, 42,141, 40,228,248,248, 8, 37, 37,105, 58, 35, 12,
+162, 42, 24, 72, 41, 69,179,209,112,108, 5,225,128, 40,227,225,144, 11, 23, 47,243,248,193,131, 42, 5,239,153,234,185,154, 55,
+ 11, 44,167, 88,149,158,129,135,216, 19, 48,154,185, 13,233,244,141,191,254,152,115,145, 42, 39, 42,245, 5,162,220, 9,193,156,
+165, 30, 1,235,254,219,235,245, 72,211, 20,176, 44, 45, 59, 49, 83,158, 21, 20,133,198,250, 64, 15, 91, 7,165, 84,247,184,169,
+193,155,124,123,223, 90,167,112,215, 5,201,212,193, 88,154, 77, 71,110,203,138,204,177,191,203,112, 18, 41,200,243,220,117,209,
+138,162, 58,244,170, 48, 64,133, 33, 87, 95,185,206, 71, 31,188,199,100,208,195, 26,237,147, 10,149,211, 58, 20,121,205,190, 39,
+230,220,138, 83, 5, 4, 39, 98,127,191,176,170, 22, 21, 82, 64, 10,193,225,225,225,194,103, 93, 20,133,195,197, 22,206,154, 84,
+ 22, 23,127, 9, 20,114,167,158, 45, 74, 43,163,168,101,125,151, 25, 26, 72,197,225,238, 14, 87, 94,251, 42,113,171, 77,103,105,
+ 25, 21,184, 86, 59, 86, 48, 56, 62, 36, 77,167, 36,211, 41,131,253, 93,118,158,220,103,117,101,205, 81,213,138,220, 31,206,172,
+203, 25,143,194,202, 77, 20,133, 13,167,115,209, 26, 21,132,228,121, 70,168, 36,247, 62,121, 31,157, 38,216, 34,199, 58,160, 70,
+ 13, 23,110, 23,227,105,159,211,122,175,131,158, 78, 82, 41, 79, 37, 70, 8, 65,110, 56, 17,212,228, 58,106, 73,150, 49,153, 78,
+ 88, 93, 95, 35, 77, 83,146,233,136,183,223,249, 54,218, 8,210, 44, 65,133, 77,186,203,235,188,253,230,155,116, 90, 13,118,119,
+158,240,253,239,253,128,115,103, 55,120,245,218, 53,214, 86, 87,249,249,251,239,147,102, 57,179, 44,103, 58, 77, 88, 89, 89,161,
+187,180,204, 31,252,209,159,240,254, 7,239,242,225,135,239,241,240,241, 67,250,199, 61, 46,156,191,128, 12, 35, 38,195, 35, 62,
+254,224,231,220,186,245, 41, 43, 43,107, 12,250,131, 10,249, 93,198,117,151,218, 52,117,254,242,149,223,250,162,197,246,100,123,
+163,190,136,168, 19,182,182, 23,142,109, 78,120,203, 79,109,166,188, 32,189,171,252,217, 42, 10,211,183,195,235, 49,116, 85,242,
+152,153,143, 12, 74, 77,128,171, 50,131, 42,115,219, 90,119,113, 9, 31, 80, 47, 69, 25, 92, 79,133,141, 85,129, 66, 23,218,219,
+222, 96,125,121,149, 91,183,110,113,176,191,235, 4, 34,105,202,116, 60,162,223,235,177,179,179, 69, 32, 4,179, 52, 33,203, 82,
+110,223,252,132,131,221, 29,214, 86, 87,216,221,221,198,230, 9,182, 72,193,228, 4, 10,103,169,168,205,252,235,171,176,193,133,
+166,184,136, 80,215,114, 47,140,169, 2, 72,140, 54, 20,214, 85,223,161,114, 42,232,254, 96,128, 65,161,145,204,102, 51,146, 68,
+211,108,132, 94, 8, 55,167,165,201, 10,191,234, 17,134,149, 87, 29,180,133, 75,151,175,211,234,174,240,240,241, 99, 15,244,176,
+ 21, 57,175,172, 42,131,192, 1, 68,162, 48, 34,110,196, 40,165,216,223,221,118, 54, 11, 99,200, 11,141,213, 57,171, 75, 43,228,
+ 34,152,223,124,167, 28,236, 22, 70, 50,101, 23,103,225,154,180, 11, 85,186, 16,130, 64,224, 50,232, 3, 73, 67, 41, 46,174,117,
+248,107,255,206,119,248,230,215,222,160,125,126,131, 40, 8,152,141,198, 28,245, 18,246, 6, 25,147,104,133, 75,111,127,151, 65,
+ 6,191,243,251,127, 64, 94, 88, 86,219, 14, 37, 26, 7,130, 78,103,133, 34,207, 24,140, 6,180,151, 86,153, 38, 99, 84,168, 8,
+131,152, 78,167, 77,163,209, 96,255,112,191,122, 94,101, 16, 71,133, 42, 46, 95,139, 82,172,158, 57, 79, 24,197,100, 69,193,240,
+232,208, 45, 66,101,170, 91,229, 36, 17,149,223, 30, 33, 74, 13,220,137,131,140,173,137,150,236, 51, 19, 65,107, 79, 42,221, 23,
+ 15, 64,139, 14,129, 90,204,234,105, 51,116,158,173,210,235,194,185,178,168, 91,234, 52,177,214, 56, 59,101, 86, 48, 25, 79, 24,
+141,198, 20,133,187, 22,101, 24, 59,145,223, 9,111,186,123,246, 37, 55,221,255,189,166,234, 93, 99, 74,177,148,209,140, 6,125,
+167,242, 53,154, 34,203, 42,135,130, 3,208, 20,149,229, 8,225,162, 94, 95,121,237,171, 88,109,216,217,218, 98,220, 59,174,198,
+107,101,151,206,120, 84,233,188, 52,156, 99,161,191,208,202, 6, 95,216, 42,175,116, 16,194, 85,116,141, 70, 68,158,231,149,205,
+ 72, 41, 69, 24,134,168, 80,186, 52, 54,243,151,109,150,126,250, 94, 95, 6,241,216,178, 83, 41, 5,168, 0, 35, 4,217,100,192,
+149, 55,191,142,182,150, 70,171, 73,158,205, 72,166, 19, 30,126,250, 33,143,239,124,194,163, 91,239,179,255,228, 30, 71, 59,143,
+248,236,163,159,147, 77, 18, 26,237, 54,205, 86,199, 5,156, 52,154,213, 24,196,226, 14,234,148, 7,183, 44,117, 98, 98, 11,219,
+247,110,187,142,128,246,201,152,245,185, 58,115,232,212,169,115,244, 23,180,226, 79,110,248,212,164,130,194, 7,198,240,204,189,
+ 88,194,186, 12,185,118, 12,145,209,160, 79, 50, 29,112,233,229, 87,120,124,255, 54,201,184,199,213, 43, 55, 88, 95, 93, 97, 56,
+153,240,116,123,143,173,167, 79,104,117, 58, 60,218,218,226, 95,253,191,191,207,247,190,255,139,140, 38, 9, 63,253,147, 63,230,
+218,181, 27,116,218, 29,254,248, 79,126,198, 44,203,184,127,255, 30,253,126,143,241,104,196,222,254, 30, 59,123,123, 20, 69, 78,
+119,245, 12, 97, 24, 97,117,206,116, 60,165,187,178,194, 44,157,121,189,215,220, 62, 94,104,189, 40,148, 59, 89, 9,127, 81, 60,
+102, 61, 37,237,207,166,180, 60,165,146,126,142, 85,110, 81,228,230, 19,200,164,172, 50,215,171,214,156,247, 13,151,226,183,147,
+145,176,213, 44,189,198, 73, 47, 59, 20,101,212,166,245,232, 87,170,220,228, 57,103, 94,107, 77, 35,138, 25,141, 70, 28, 31, 31,
+ 50,155, 76, 40,178,140, 44,155, 49, 29, 15,153,140,135,100,179, 49,219, 91, 91,236, 60,121,204,222,238, 83,218,173, 38, 32,217,
+223,217, 66,217, 28, 97, 82, 2, 9,205, 70, 72, 35,114, 92,248, 32, 80, 21,178,214,122, 91,135, 99,145,107,167, 10, 46,177,173,
+ 53, 54,187,241, 80, 73,237, 55,119,237, 83,163, 66,165, 24, 13, 7, 24,227, 66, 25,146, 52,101,154,104,150,150,151, 61,246,114,
+ 81, 42, 82, 42,172, 93,234,154, 64,169,136,107,215,223, 98, 48,157,113,255,209, 99, 63, 55,229, 25,228,164, 82, 1, 81, 24, 33,
+131,128, 56,114, 33, 51, 27,155,231,120,240,249, 93,231,153,247,129, 57,198, 26,150,226, 16, 19,183,171,247, 92, 85, 89,247,242,
+116,251,100, 73, 28, 60, 49, 75, 46, 63,127, 87,161, 67, 20, 72,130, 64,208,140, 66,154, 88,126,252,139,127,133,239,126,227, 43,
+116,215, 87,208,227,140,131,189, 99, 38,193, 10,103, 95,251, 26,189,113,202,149,215,223,100,255,201, 19,254,203,255,234,191, 96,
+247,224,128,131,225,148,165, 86,147,229, 88,209, 27,141,185,121,231, 22, 55,111,125, 66,175,223, 39,110,180,185,246,202, 13, 70,
+227, 17, 97, 20, 99,173, 97,117,117,141, 65,175,135,209, 26, 41, 36,201, 44,241,221,157,146, 19, 31, 80,174, 48, 97,220,228,234,
+107,111,208, 90, 89,229,224,233, 67,239,175, 86,149,133,115,145,140,103,107, 43, 75,141,103, 47, 78,162, 98, 79,130,103,120, 38,
+165,109, 49,176,165, 86,144,215, 20,194,166,182,137, 47,108,228,246,217,110,126,221, 59, 15,130, 56,148, 92,191,122,153,131,131,
+ 67, 95,173,103,126,182,103,171,128,154, 32,138,171,231, 43,235,110, 57,107,231, 7, 75,251, 44,201,238,100, 39, 35,207, 50,226,
+ 48,244,145,203, 98,193, 85, 83,142,218,164,116,108,242,175,127,235,123,236,238, 60,225, 96,119, 27,107,114,162,184,137, 21, 2,
+165, 4,201,100,186,176, 22,156, 86,152,124,225, 38,247,101,151,183, 90, 11,222, 37,108,197, 11,196,194,102,179,129, 16,138, 44,
+205,249,203,160,146,123, 94,180,111,133, 26,198,175,209, 98, 94,116,136, 50,158, 85, 41, 54, 47, 95,227,218,235,175, 98,173,160,
+191,243,148,159,254,243,223,230,222,205,119, 25,236,109,147, 39,206,151,111, 10, 75,220,110, 49, 58,218,229,222,237,143, 56,222,
+219,166, 25,199,116, 86,215,157,130, 94,107,239, 12,104,250, 10,126, 30,133,108,172,229,240,233, 3,198,199,135, 14,224,164,181,
+227,241, 87,227, 85, 83,241,130, 78,253, 40, 42, 32,205, 23,136, 18,159, 17,203,215,161, 79, 39,238, 13,127,253,229, 69, 70,154,
+184,196,198,116,146,128,180,116,219, 75,252,135,127,231,239, 49, 26,244,249,131, 63,252, 3,162,214, 10,159,221,254,148,123,247,
+238,112,231,179, 59, 60,124,120,159,163,253,125, 62,189,117,203, 69,182, 78,167, 92,124,233, 34, 79,183, 30, 35,140,102,125,125,
+157,237,167, 79,217,222,217,102,154, 36,164,126,141, 41, 71, 93, 71,199,199,104, 4, 23, 94, 82, 40,254,104, 0, 0, 32, 0, 73,
+ 68, 65, 84,190,198,242,202, 42,163,193,176,178, 39,215,117,110,193,105,202,245, 47,106,123,215,253,230,245, 7,123,209,172,253,
+212, 22,189,251,225,133,141,254,121, 30,248,114,174, 94,125,152, 60,203, 14, 87,118,222,126,209, 39, 68,124,178, 22,147,169,132,
+154,115,114,149, 66,227, 90,166,185, 79,192, 17,190,101, 86,206,230, 93,212,169,164,119,120, 72, 0,196, 74, 81, 68, 17, 82, 74,
+178, 60, 37, 47, 28,128,163,200,139, 74, 73,185,182,113,142,184,217,225,248,112, 23, 37, 11,172, 41, 8,162,152,184,225, 82,219,
+194, 56, 64, 40,111,241, 51,186,186,168,140,117,173,235, 10, 38, 32,106,157,115,227, 96,162,214,211,241,140,177,149,114, 29,143,
+ 86, 92, 95, 89, 98,239,240,136, 76, 54, 8,195,136, 84,231,220,125,240,148,213,110,155,245,149, 14, 74, 26, 74, 82, 22, 82, 32,
+140, 59, 36,157, 59,123,142,245, 51, 23,248,224,227, 79,153, 38, 9, 89,238,160, 44, 37, 59,191, 12, 76,113,138,115, 89,161,121,
+181,113, 56,219, 32,140,121,249,218, 13,238,221,249,148,194,104, 50, 45, 8,178,130,201,160, 79,107,101, 19, 67,136, 8,148, 79,
+138,115,136,204,211,198, 51,101, 37,185,216, 29,147,115,244,171,128, 64, 42,162,192, 17,253,154, 13,197, 87, 94,190,200, 47,124,
+235,171,180, 86, 87,248,240,206, 99, 76,176,194,165,215,191,198,217,149,101,178,241, 4,140,230,247,255,175,127,202,214,206, 14,
+199,253, 62,147,233,140,220, 88,118,219, 13,206, 47, 55,153, 76, 19,102,179, 41,173,102,196, 81,111,200,222,214, 35,242, 60,227,
+210,203,175,112, 60, 56, 66, 23, 57, 22, 65,220,108,147,231, 41,179,116,230, 19,253,236,130,227,194, 10,129,241, 21, 69, 50,157,
+176,220,234,160,132, 66,163,171, 76,129,242,117,154,146, 85,239, 71, 33,178,222,169,240, 89,230, 86,212, 5,166,210,139,190, 78,
+155, 22, 10,255,181,231, 35, 97,171,251,246, 52, 95,186,125,142, 3,174,238,128,241,125,232,187,159,223, 99, 48, 28,158,162,178,
+183, 32, 2, 16,174,163, 37,237, 92,204, 90,253,189,162,238, 45,125,254,129,191,178,189, 77,167, 94,129, 45,159, 73, 48, 11,226,
+ 22,235,103,206,208, 59, 56,224,248, 96,151,227, 67,103, 93,147, 40,194, 70,196,236,184, 71,102,245, 51, 27,250,139,214, 39, 43,
+ 79,175,222,159,215, 89,124, 94,209, 18, 69, 77,178, 44,101, 50,153,186, 66, 36, 16, 4,161, 34, 73,166,232,194,117,158, 76,185,
+254,153,127,131,155,187,239, 66, 84,118,200, 23,188,134,250,215,165,209,110,205,209, 26,147,103,216, 34,103,101,237, 44, 31,252,
+209,191,228,171,223,254, 58,163,163, 67,126,247,127,249, 31, 72,167, 99,208, 6,157,165,108, 92,184,196,108, 58,101, 54, 30, 96,
+173,166, 40, 82,116,158,113,144,205, 24,245,118,185,184,253,148,183,191,255, 75,180,151,150, 40,242,156, 32, 20,200, 48, 38,203,
+166, 30,185, 43, 48, 66,208,238,174, 34,124,212,181, 68, 82, 72,129, 53, 94,243,100, 23,181, 32, 11,117,117,221,234, 38, 74,203,
+174,124, 86,203, 32,244,179,135,216,242,243,174,246, 32, 9,218,206,117, 6,229,101,108, 64,203,156, 52,203,216,121,186,205, 27,
+ 63,184, 66, 40, 4,201,108, 70,220,108,115,239,243,219, 60,121,120,215,125,159, 17, 52, 26, 13,194, 48, 64,197, 9,183,111,223,
+226,171,111,190,141, 80, 33,253,193,152,111,191,243, 38, 15, 31,109,177,183,191,141,213, 5,157,165, 37,146,169, 75,132, 28, 14,
+135, 28,247,142, 49,186,160,217,104,178,127,112,200,153,205,179, 72,225, 58,137,105,158,122, 88,154, 43,178,213,185, 90,251,189,
+190,145,158, 12, 96, 57,109,179,127,145,128,238,139,102,244, 39, 79,230,245,138,252,180,249,125,249, 51, 74,169,170, 74, 87, 62,
+ 83, 86, 8,215, 14,166,166,110,180, 53, 46,252, 73,191,125,201,254,149, 82, 86,254,116,170,106,138,202,130, 36,107,127,111,145,
+229,100,201,148,225,192,225, 29,103,179, 25,133,206, 25, 13, 7,164,201,148, 44, 77, 49, 30, 62, 18, 55, 26,116,151, 87, 24,142,
+122,228,227, 1, 81, 96,105,182, 98,218,237, 38,173, 86,131, 70, 35, 34,244, 23,106, 57,223,118, 1, 42, 46, 20,160,208,154,188,
+208,243, 4,181,194, 7,172,120, 82,158,241, 54,140,178,245,107,106,191, 47, 79,217,179,241,136, 66,187, 20,171, 60, 75, 25, 14,
+199,244, 7, 67,162,184, 65,220,104,184, 16, 27, 25,114,233,242, 43,108,158,127,153,227,254,136, 59,159,223,115, 68,174, 60,119,
+ 86, 66,127, 16,170,136,109,202,139,104,164,123,159,130,200, 37, 46, 41,233, 56, 4,175,222,184,193,231,119,239, 82,232, 12,140,
+ 69, 97, 9, 67,197,153,213, 13, 18, 84, 21, 27, 88,222, 44,245,141,238,153, 77,228,196,255, 43, 41, 9,165, 34, 14, 20,177,143,
+171,109, 55, 99, 46,158, 59,203, 95,255,193,183, 33,106,114,107,171,207,107,239,124,143, 43, 55,110, 16, 91, 67,150, 76, 73,250,
+125, 6,253, 62,159,222,185,195,253,199,143,120,186,179,203, 44,207, 92,187, 88, 8, 58,141,144,179,171,107,156, 59,179, 10, 64,
+146,205,232,247,122,244,143, 15, 40,140,224,236, 75, 23, 25, 28, 29, 34,149,100,150, 76,152, 12, 71, 68,141, 38, 77,159,133, 29,
+248,107,208, 88, 75, 20,199, 8, 36,175,191,249, 53, 70,147, 17,105, 50,165,119,176, 83,125, 62,101, 71,169, 90, 44, 79,128,126,
+ 78, 31,239, 74,230,244,208, 50, 60, 68,158,242,157,230,196,194,204,233, 11,221,243, 82,217, 56,197,157, 82,102,161,251, 3,213,
+203,151, 47,178,177,182,198,246,246,182, 23,170,233, 10,185,236,216,247, 13,172,159,153,150, 48,160, 58, 20,164,154,167,155,211,
+ 53, 52,229, 47,135, 95, 86,172,172,157,101, 50,117,194,178, 58,142, 87, 40,197,217, 51,231, 57,119,241, 26, 71,251,187, 4, 97,
+ 64,239,232, 16, 99, 11, 26,205, 54, 2, 65, 54,155,157,114, 8,122,113,149,126, 90,229, 42,106, 34,184, 47,155,126,231, 58,127,
+165,109,207, 29,198,243, 92,163, 2, 73,224,105,123,149, 2,191,178, 97,253, 69,151,225, 44, 48,211,235,243,243, 47,122, 25,149,
+174,199,206,237, 98,214, 3, 83, 92,114, 91,196,160,127,204,184,119,192,224,176,199,209,238, 46, 79,239,124, 72,150,140, 73, 6,
+ 61,148, 10, 80, 82, 50, 27, 14,152,141, 71,238,179, 47, 52, 66, 41,116,145, 17, 73,129,102,134,176,154, 31,253,242, 15,248,214,
+235, 47,241, 87,191,118,133,141,151, 54,216, 29, 36,232, 92, 87, 89, 11,227,225, 17, 7, 79, 31,162,243, 12,171,139,106,174,238,
+174, 49,243,101, 32, 2, 78,213, 47,234,180, 70,106,110, 46,243,140,189, 29, 43,189, 45,160,228, 97,204, 61,242,162,246,205, 37,
+170, 60, 12, 67,154, 81,204,155,111,220,224,151,127,229,199,252,244,103,239,114,251,230, 71,140, 70, 99,102,105, 78, 86, 20,100,
+233,148,241,104,136, 54,150,225,104, 76, 20,134, 28,247,246,201,138,156,191,249,227, 95, 69, 32,249, 23,191,247,123,108, 61,126,
+ 64,103,121,133,206,242, 10, 71, 7,187,140, 6, 3, 63,230,115,119,228,120, 52,100, 54, 25, 51, 26, 14,152, 12,157,107,170, 28,
+ 77, 86,123,225,201,217,230, 2, 60,166,182, 41,214, 41,112,167,193, 98,158,231, 57,175,195, 99,234, 32,148,147,143, 83,127,252,
+178, 98, 95,240,158,151, 27,108, 41, 6, 80,202,243,110,165,159, 7,107, 95, 73, 74, 31, 7, 57, 63,105,137, 90, 34, 91,185,192,
+ 42, 64,103,217, 92,100, 87, 34,246,188, 71,189,172, 50,148,116,214, 55,171, 53,147, 34, 35,203, 51,164,214,180,154,109,166,211,
+137,131, 75,100,153, 15,160,113, 33, 19, 75,107, 27,236,236,110, 65,150,208,105, 70, 52, 26, 49,173,166,139,239,140,163,144, 80,
+ 41,119,113,121,161,131, 46, 61,229,218, 86,243,243,234,207, 42,188,230,226,216,212,225,113, 75, 90,215,124, 42,164,148,162,221,
+140, 41,150,187, 28, 31,245, 25,229, 25,113, 28,131,177, 68,141, 46,171, 27,231, 89, 95, 93, 37,140, 66, 86, 87, 54,216,218,221,
+229,233,231, 15, 25, 77,198, 20,121,129, 54,144,231, 69, 69,207, 19,114, 46, 76, 3,220, 97, 64, 73, 10,107,209, 89,142,140, 37,
+ 89, 54, 67,155,156, 65, 43,230,235,223,252, 22,239,255,233, 79, 72, 77,226,188,158,133,161,107,115,142,180,168, 94, 75, 61, 38,
+176,126,125, 85,201,107,118,174, 76, 45,149,238,129, 82, 68,161,162, 17, 40,226, 56,162,221,136,121,233,236, 58,239,188,253, 85,
+150,175,188,201,149,235,175,242,118,171, 73, 58,153, 48,218,219, 35, 29,143,153,206,102,140, 39, 99, 90,237, 22,211, 52,229,201,
+214,150, 99,151,251,252,234,217, 44,193,218,101,148, 18, 52, 26, 45,174, 95,186,128, 21,154,100, 58,227,248,120,192,147,123,183,
+152,142, 71,156, 57,191, 73,255,232,136,194, 67,137,242, 34, 39,153,102, 14,103, 41, 5,173, 78,135,162,208,196, 81,139,140,132,
+187,119,111,113,253,141, 55,200,211,188,186,158,203, 3,104, 9, 98,114,112, 27, 65,133, 29,247,139,134,180,174, 74, 55, 88,167,
+190, 47, 57, 90,246,217, 10,125,190,158,213,105,113,146, 18, 28,242,140,219,224, 36, 68,170,138,202,173, 5,218,152,103, 43, 90,
+ 33, 29, 90,245,194,217, 51,188,255,254,187, 30, 89,108,177, 86, 84, 60, 4,169, 2, 80, 17, 66,248, 52, 54, 81,111, 91, 46,160,
+216,170, 77,126, 81,121, 44,124, 64,145,179,146,158,191,240, 50, 81,179,201,112, 48,196,154,172, 18,136, 34, 29, 98,121,121,125,
+131,139,151, 47,241,217,167,239,177,189,245,168, 10,203,137, 27, 33,195, 94,223, 45,254,226,249,235,209,139,218,176, 11,239,180,
+177,207,232, 15,190,208, 1, 87, 86, 77,213,154,227,172,178, 69,102, 16,161, 97, 99,125,149,163,163, 30, 89, 94,212, 47,246,191,
+ 96, 16,205,179,226,203, 47, 62, 5,188,224,141,160,204, 50, 87,188,242,214, 59,236, 60,121,128, 18,130,219,239,253, 41, 75,203,
+ 43, 24, 96,188,191,141,148, 17,121,146,112, 52, 26,209, 93, 93,198,160, 73, 39,125, 26,237, 46,224, 10,153,184,187, 68,220,234,
+242,215,254,214,223,226,157,175, 92,162,227, 15,241,231,150, 2, 94,125,231, 77,222,251,253,159, 85,159, 85,171,179, 76, 32, 21,
+ 90, 74,180,244, 65, 84,254,208, 97,132, 66,218,130, 42, 80,161,126, 80,172,237,210, 14,125, 91, 99,231,215, 70, 81,162, 10,114,
+ 61, 37,177,208, 8,103,119, 43,243, 0,172,168,220, 81,165,191,189, 44,174,180,213,124,235,155,223,225,131, 15,222, 35, 77,167,
+136, 32,102,117,237, 12,253,209, 49, 82,226,214, 86, 93,208, 63, 62,114, 78,155,167,143, 89,234, 46,241,173,111,126, 23, 33, 36,
+255,244,119,126,151, 59,119,111,179,118,225, 10, 26,193,238,211,251,132, 97,140,144, 9,198, 20, 8,161,136, 26, 13,242, 44, 39,
+157,142, 73,147,137, 11, 38,211,208, 63, 12, 64, 8,154,237, 14, 43,235,235,174,253,126,154,111,252,180, 22,251,105,222,242,250,
+ 97,224,121, 45,244,106,211,246, 27,232, 98,240,138, 88, 0,191,212,127, 54,244,193, 42,117, 95,161, 82,202,167,223, 24,239,177,
+244, 9,109, 69,238,210,211,188,144,161,158, 27, 44,132,163, 4,151,139, 75,224,177,158, 82,202, 10,177, 90, 38,173,149,207,173,
+140,182,179,198, 98,180, 83, 57,106,147, 17, 70,146,233,196,197,246,101, 89, 78, 50,153,204,231,102, 86,115,230,236, 69,122,189,
+ 30, 38,157,210,142, 3,218,173, 6,157, 86,147,118,179, 69, 51,106, 16, 6,174, 61,105,152, 87,219,198,227, 24,203,133,220,248,
+204,242, 50, 46,181,162,125,213,211,154, 12,212,211, 29,220,215, 60,124, 32, 12,104, 54, 27,180, 59, 77,250,131, 4, 35, 53, 43,
+ 43,171,172,159, 61,203,214,206, 46, 59,123,123,238,189,149,161, 19,219,105,235,177,180,206,142, 37,213,156, 65, 80,126, 6, 66,
+200,138,187,141,239,226,228, 89,234, 14,181,214, 96, 80, 60,121,242,152,111,125,227,155, 36,163, 1, 55, 63,254, 16, 81,228,232,
+194,192,108,134,106, 52,252, 77, 49, 87,241,159,122, 16, 52,245, 81,204,252, 0, 23,133, 1,237, 56,164,211,108,208,104, 70,220,
+184,118,157,255,224, 55,254, 46,151, 95,185, 65, 16,134, 88, 93, 48, 58, 56,100,251,193, 67,246, 14, 14, 56, 26,244, 25,140, 70,
+196, 81, 72,183,213,164,208,154,227, 94,143, 52,115, 86, 40,165, 20, 45, 37,232, 54, 27,132, 74, 48, 26, 13,209, 86,112,118,117,
+157,241, 75, 41,147,241,132,100,150,113,180,243,136,201,100,200,245, 27,175, 18, 6, 1,178,217, 97, 52,157,160, 84, 64,220,108,
+ 83,228, 5,171,235, 27,156,221,220, 68, 69, 13, 30, 63,184, 71,123,121, 5,169, 2, 84, 96, 8,194,152, 60, 75,221,231, 82,131,
+ 26,149,135,150, 64, 82,113, 4, 28, 1,195,111,123,165,218,184, 18,131,178,160,196, 61, 41,136, 91,172,206, 69,109,147,175, 87,
+202, 44,204,211,235,215, 85,245, 57, 44,228,148,204,103,251, 75,221, 54,227,241, 8,107,153,107, 61,204, 60, 83, 62,110, 52,202,
+243,196, 60,141,238,196, 33,226,228,115, 95,180, 50,218, 42, 38, 51, 12, 3,250,253, 17, 29,107,208, 58,247,137,104,165, 88, 83,
+ 34, 85,196,234,218, 58,247,238,222,117,190,115,147, 57, 30,124,163,235, 58,102,214,248,212,177,103,153, 8,207,221,212, 95, 80,
+189,139, 47,240,254,191, 72, 59, 84,142,174, 28,122,212,133, 11,245,122, 61,154,205, 6, 81,100,153, 78,167,167,118,105,254,117,
+ 54,248, 10,253, 45,190, 64,173,111,249, 51,141, 76,193, 18,183,219,228, 72, 90,221, 46,201, 36, 97,185, 27,114,180,245,152,113,
+239,136,168,209, 65, 97,153, 26,195,234,114,151, 65,239, 8,210,148, 34, 84, 36, 66, 18, 11,137,140, 20,249, 44,161, 17, 53, 88,
+ 90, 90,117,215,147,128, 22,208, 16,208,141, 36,155,151, 95,230,209,237,155,168, 32,164,189,180,142, 12, 34, 80, 33, 66,166,126,
+189,151,104,225,102,201,218,147,230, 92,209,225, 14,174,202,199,237,212,139,181,197, 52, 70, 49,119,158, 8, 89, 19,160,136,197,
+251,169,132,103,149,254,125, 33,177,214, 9,233, 22, 2,116,140, 91, 67, 63,255,252, 54,191,240,131, 95, 35,255,201, 79,153, 77,
+ 71,180,150,150,209,153, 33,153, 76, 40,138, 12, 99, 13, 89,154, 49, 30, 73,226,134,195,186, 54,162,128,255,249,127,255, 39,124,
+252,209,251, 12,199, 19, 90, 75, 41,247, 63,187, 73,174, 11, 54,207,157,103, 58, 29,187, 22,252,160,135, 57,202, 80, 81, 3, 71,
+112,201, 73,103, 57, 97,224, 58, 63,233, 44, 37,153,140, 29,179,129, 5, 65,193, 98,139,170,180,122,213, 23,225,211, 84,241,230,
+ 4, 49,238,180,139,164,126,120, 56,201,135, 63,217, 46,175, 82,175,106,208,155,210, 51,108,125,251, 86,212, 84,167,174, 29, 44,
+ 61, 71, 94, 84, 20, 57,234,173,118,127,161,203,154,232,174,200,139,202,166,229, 90, 76, 94, 61,232, 55, 45, 99, 32, 20,150,209,
+200, 35, 82, 85, 76,160, 66,116, 94, 48,153,140,231, 64, 22,161,176,182, 96,237,236,121,134,227, 9,249,184, 71, 43, 14,232,180,
+ 27,116,151, 90,116,218, 45, 26, 81,132,146,110, 67,215, 94, 40,100,124, 53, 99, 44, 11,144, 24,131,157,167,166,249, 25,251,156,
+225, 94,183,188,137,234,212, 90, 23,148, 41, 41,137,163,128, 86,171,201,100, 50, 67, 8,184,241,234, 13,158,238,236,186, 78, 64,
+158,147,102, 57, 66,230, 85,107, 13,124,123,205, 31, 36, 2,143,232,173,130,112,164,187, 30,202,228, 38, 55, 2,208,164,201, 12,
+209,116,239,155,176,150, 79,111,125,198, 43, 55, 94,229,179,219,183,208, 69,134,176,150, 73,145, 17,212,114,238, 23,170,243,250,
+181,178, 80,189,205, 95, 75, 32, 37,113, 24,178,220,105,243,131, 31,252,128, 95,252,225, 15,121,235,171, 95,157,115,251,141, 38,
+ 79,166,124,126,231, 51, 30, 61,125,236,103,228, 9, 81, 20, 35,165,228,225,147,199,252,236,221,159,145,164, 41,218, 64,161, 11,
+154,161,224,237,107,151, 89, 95,110, 19,133,138,115,103, 86,233, 13,198,140,166, 51, 46,158, 59, 75,175, 63, 96,107,107,143,172,
+200,153, 14,123, 60,125,112,159, 55,191,246, 13,194, 64,177, 90, 44,211,233,174,178,180,186, 74,191,215,167,187,180,204,113,255,
+152,157,251,119,137,163,152,241,120,200,215,190,253, 93,110,127,250, 33, 97,160, 16, 68, 11,225, 58,229, 53,222,108,196,228,121,
+177, 48, 94,210, 20, 8, 31,136,227,224, 72, 94, 88,230,201,134, 86,204,163,103,173,173, 11,228, 56, 69, 41, 95, 27, 59, 85,213,
+250,233,115,200, 5, 21,119,237,108, 80,210, 19, 55,214,215,216,218,217,229,168,215, 39,215, 5,218, 3,115,176, 22, 25,134, 8,
+ 21,250,124,250,249,140,189,238, 15,182,166,102,103,171,157, 28, 68, 13,213, 38,144,172,173,173,113,220, 59,102,253, 76,215, 57,
+ 82,128,220,183, 98,165,183,203, 93,184,240, 18,239,253,233, 79,208, 89,234,184, 14,194, 32,131,128, 70,171,197,209,193,129,123,
+159, 78,137,168,123,225,134,126, 90,149, 94,155, 61,215, 99,115, 79,163, 97, 62,239,151, 91, 67,139,234, 13,157, 78, 19,148,114,
+238, 20, 71, 28, 59,203,238,238, 14,105,154,249,238,199,226,251,242, 23,141,145,173,242, 29,172, 56, 33,196,164,218,216,202,131,
+ 92,125,125,113,158,246,128,214,198,121,242, 36, 97,243,202,171,140,134,199,204, 70, 19,250,219,143,144, 50, 68,197, 29,102,147,
+ 9,177,144, 28,238,238,208, 89, 90, 34, 53,160, 34, 73,220,108,146,102, 41, 65,208,172,116, 65, 15,118, 70,228, 97,131,175,191,
+178,202, 76, 73, 44,150,245,182, 98,105,125,133,229,141, 77,250, 7, 59, 52,219,173, 74, 29, 95, 18, 66, 33, 64, 6,238,192, 91,
+ 81, 30,124,226, 34,126,253, 42,199,170,198, 66, 16,133,224,225, 99, 74,205,117, 61,162,114,249,186,112,167,146,223, 81,138, 29,
+189, 14,207,223, 47,126,195, 23,118,174,121,241,213,190,214, 46,108,203,138, 6,255,245,127,247,223,112,255,193, 99,166,211, 25,
+236,239, 34,149,192,234,204,195,119, 28,160, 41,205, 82,194, 80,210,104, 54, 64,103, 28,247, 15, 28,160,104, 54,227, 96,111,135,
+ 52, 77, 64, 88,182,182,158,160, 4,204,146, 49,214, 26,150, 86,214,220,129, 58, 79,145, 50, 68, 11, 91, 65,160,220, 37, 44, 73,
+ 38, 67,212, 75, 87,174,253, 86,189, 69, 88,254,190,172,184,235,201,107,167,169, 84, 95,228, 57,126,230,235, 44,182,153,234,233,
+105,207,125,252, 19, 21,124, 61, 74, 20,223,150, 53,117, 17, 82,101,113, 91,100,202, 83, 59,185,153, 90, 53, 95,190,214,234,123,
+237,220,190, 21, 74,133,180,218,181, 79,140, 37,203, 83,146,233,132, 65,191, 79,154, 58,239,171,227, 22, 27,214,207,108, 18, 68,
+ 49,147,254, 33,145,130,165,149, 46, 43, 43,203,180, 59, 77, 26, 97, 84, 29, 20,108,237,162, 43,202, 12,115,227,158,207, 66, 66,
+154,135,197, 24,175,126,119,141, 0,255,189,214, 83,225,202, 83,226, 41,177,139,162, 84,183, 99,152, 76, 19,182,119,118, 29, 42,
+179,166,145, 42,103,218,162,220,208,107, 93,147, 32, 8, 80,202, 93, 19,229,115, 47,223, 39, 91, 94, 15,218,248,150,253, 60, 56,
+ 39,155, 37,244,122, 7, 0, 76,135, 3,226, 64,210, 93, 90, 99, 22,183,170, 48, 2,251,140,255,154, 10, 77, 41, 43,223,245, 60,
+ 85, 47, 12, 20,237,102,131,127,255,223,251,117,126,243, 31,252,125,206,158, 61,131, 64,187,220,227, 60,101,116,120,200,222,163,
+ 39, 76, 39, 99, 86, 87, 87, 24,244,135, 12, 6,125,126,254,238,187,252,225, 79,254,136, 79,111,223,162,223,239, 51,203,115, 10,
+109, 9,149,224,213, 43,151,176, 86,115,112, 60, 96,239,120,196,104, 58, 37, 8, 20,221, 86,204,230,198, 42,157,118,147,195,227,
+ 99,114,237,252,234, 73, 50,229,184,119,196,234,198, 38, 97,163,201,203,175, 92,227,232,168,199,229,171,215,216,221,221, 33,155,
+165, 92,186,114,141,160,217, 38,144,130,175,124,237, 27, 12,122,125,118,183, 30,249,155, 94, 19, 40,229, 16,161,204, 53, 43,129,
+ 63, 56,151,239,121, 5,241, 40,237,162,158,218, 55,103, 9, 44,206,120,221,124,221,214,252,234,182, 90,228,202, 5,219,156,210,
+122,175,171,122,235,237,247,234,113,165, 64, 73,133, 82,130, 43, 23, 95, 66, 74,193,131,135, 15, 43, 49,105, 57, 75, 71, 74,231,
+ 81, 22, 39,204, 65,181,131,197,220,130, 52, 31, 37, 61,111,131,205,243,204, 19,184,142, 25, 14,122,104,163, 89, 94, 61, 67,119,
+249, 12, 81, 28,145, 76, 38,244,123, 71, 20,121,138, 49, 69, 37,218, 12,155, 77,134, 71, 71, 53,221,128, 61,213, 14,251,194,249,
+243,115,138,119,235,199, 80,226,207,225, 46,159,119, 97, 68,237,192,227, 30,117, 58,157, 80, 20, 57,215,175, 95,231,204,217,117,
+164, 4,173,115,162, 40,174, 80,207, 66,252,249, 28,237,167,161,110,169, 52, 26,162,154, 19, 63,239,223, 42,129, 78, 8,159,214,
+ 38,232,172,158,165,181,178, 6, 24,210,100, 74, 51,110,179,255,232, 46,194, 8,116,145, 18, 55, 91, 20, 89,130,140,154,172,110,
+ 94, 32, 79, 18,166,211,169,235,164, 26,215, 73, 84, 97, 68,216,108,177,177,121,129, 75,175,190,205, 36, 41, 24,231,150,112,165,
+ 65,174, 5,137,129,105, 46,209,153, 32,153,142,177, 90,243,248,179, 79,176,217,204,143,103, 42, 28, 99, 21,121, 45,253,136, 80,
+224,177,224, 42, 64,249,252,244,102,171, 5, 82, 17, 55,155, 72,239, 80,209,126, 92, 20, 70,145,127,125, 10, 21,200,170,219,105,
+235,234,249,170,179, 33, 43,240, 66,185,129, 10,191, 62, 73,165,252, 56,179, 67, 97,220,251,190,183,189, 69,154, 78,201,139, 2,
+ 37, 93, 7,180,240,188, 15,107, 33,140, 20,175,189,241, 6, 55,110,188,134, 69,241,217,231,159, 97,116,193,242,234, 58,211,233,
+136,229,181, 51,140,135, 61,198,227, 33,129,116,118,235,201,100,204,100, 52,154,143,162,152, 51, 89,202,123, 76, 27, 67, 80,103,
+115,139, 19,155,105, 57,124,175,111,188, 11,109,140,231,136, 93, 22, 99, 86, 69, 37, 26, 57,141,187,187, 32,128, 57, 37,127,189,
+254,252,202, 25,123,229,181, 53,134,236, 68, 27, 87, 91,235, 33, 6,207, 17, 30,149, 17,175,245,248,215,242,134,247, 85, 71, 57,
+115, 15,172,229,240,120,159, 36, 73,137,226, 6,179, 36, 97, 58, 25, 59, 94,175,157,103, 33,183, 59, 75, 68,113,131,195,221,167,
+ 4, 66,179,188,220,101,101,185, 75,171, 21, 19,120, 14,118,125, 97,181, 98, 49, 37,171,156,107,186,234,188, 38,134,179, 22,171,
+107,170,247,133, 74,140, 5,193,199, 2, 81,201,131, 83,130, 48, 96,169,219,113,185,205, 70, 34,164, 34,203,114,148,146, 85,100,
+168, 91,103, 10, 55, 19, 5,148, 31, 97, 72,165, 8, 84, 48, 63,196,251, 11, 73, 41,229, 68, 44,170, 84,193, 11,178, 52,163,221,
+110,131,133, 44, 25,211,159, 12, 89, 90, 94, 33,110,181, 16, 24,116,220,194, 26, 75, 97, 10,194, 48,152,135,243,148, 23,185,177,
+181,106,109,174,246,174,115, 9,148,128,203,155,155, 12,182,158,146,123,228,230,193,161,131,140,116,219,109,100, 20,242,249,195,
+135,252,225, 31,255,132, 39,219, 79,201,178,140, 44, 75, 73,115, 77,150,166,228, 89,142, 13, 36, 86,132, 44, 47,117, 73,211, 4,
+ 37, 27,180,226,152, 70, 28,209,104, 70, 24, 11,163, 36, 71,143,166,116, 91, 49,223,253,246,215,248,224,227, 59,236, 29, 15, 41,
+140,100, 58, 26,240,254,207,126,202,149,235, 55,200,181,229,242,213, 87,248,227,255,239, 95,113,225,202,117,186, 97,192,165,107,
+ 55,184,127,247, 19,194,112,153,159,253,228, 15,217, 56,115, 22, 37, 36,218,186,195, 83,238, 55,119, 87,145, 91,194,208,205,160,
+163, 40, 66, 23, 5,141, 70,236, 14,155,194,131,143,170, 46,137,172,196,139,243, 89, 97, 57, 71,180,167,116,144,197,124,211,197,
+158,110,140, 19, 98, 65, 40, 87, 86,233,115, 29,131, 19, 70, 6,202,169,118,239,223,191,231,179,204,221, 34, 47,132,131, 23,133,
+173, 54,160,124,133, 35,158,233, 16,212,227,148,235,243, 78,123,170, 56, 11,138, 66,211,106,181,156,144,209, 31,118,134,253,125,
+191,168, 74,199, 0,151,101,165, 41, 43,221,137, 45, 10,151, 88,101,236,159,105,142,126, 18,122,244,252,118,250,191, 30, 3,174,
+126,207, 22,133, 65, 74,151, 93, 48, 30,143,185,121,243, 38,113, 28,179,113,102, 29, 41, 87, 49,154,170, 77,255,103,174,212, 69,
+221,208, 43,106, 35, 20,177,120, 37,136,231, 24, 41, 78,142,213,253,245, 16,117,215,185,242,181,111, 51, 60,220,103,116,116,196,
+202,230, 57, 30,220,254, 24,165, 11,180,201, 88, 57,115, 22,109, 4,205,238, 26, 43,103,207, 96,108,200,116,154, 16,132, 19,172,
+182,206,117, 35, 11,130, 56,118,192,153, 48,102,253,220, 26,237,165, 37,102, 89,193,126, 63, 39,138, 35,140,129, 70, 67,210, 89,
+109,179, 52, 62, 67, 62,155,209,237, 44, 81,140, 7, 20,105,130, 53,134, 48, 12,208, 57,152, 60,243,133, 2, 85, 97, 87,142, 31,
+221, 90, 38, 43,253, 78,150,166, 85,155, 62, 8, 2,172,177, 85, 55, 90, 5,110, 13,146, 42,116,155,165,209, 8, 99, 64,120,123,
+110, 41,106, 60, 69,120,234, 66,179, 28,233,110,243,236, 6,241,210, 6,255,236,255,252, 39, 8,161,201,103, 89,117, 24,104,119,
+ 58,140,199, 99,180,182, 4,202, 29,220, 55,214, 55,104,119,187, 92, 86, 1,191,246,171, 63,226, 95,254,139,255,219,165, 8,182,
+219,244,143, 14, 49, 90,163,243,130,194, 20,110, 68,154,103, 72, 9, 70, 23, 46,209,174,222, 89, 43,159,159, 54,174,253, 94, 79,
+ 36, 83,190,181, 90,199,232, 85, 21, 93,109, 3, 44, 55,159,231, 85,238,162, 6,129, 81,114,206,237,173, 31, 14, 78, 30, 8, 78,
+250,149,235, 9, 79, 39,189,236,117, 31,226,169,145,173,190,213,126,242,241, 79,235, 48, 72,233,136, 70, 89,158, 19,120, 5,124,
+150,164, 36,233,148, 52,211,132, 81,132, 46,114,210, 52,113,111,180,213, 94,176,103, 89, 89, 89,227,210,203, 87,249,236,206, 77,
+ 58,221, 54,173, 70, 72,187, 17, 18, 71, 17,129, 82, 56, 26,182, 19,137, 85,117,148,183,161,105,239,229, 46,219,235,101, 5,228,
+158,167, 88,244, 21,215,255,123, 34,145,232, 52,210,159, 22,212,218,146, 49,205,246, 58,147, 89, 70, 62, 75, 61,218, 83, 35, 2,
+239,157,182,154,208,131,121, 44,206,242, 87,142, 52,100, 20,184, 86,150,231, 63,231,121,238,181, 8, 22,130, 0,165, 2, 66, 11,
+195,193,128,110,167, 3, 89,130,206, 82,178,100,198,245, 55,223, 98,231,222, 93,138, 32, 68,133, 1,141,176, 81,221, 17,133, 46,
+144, 34,170, 4,114,162,242,195,155,133,248,199,210,153,144, 21, 57,135,251, 7,220, 44,114,250,163, 49,251, 7,135,180,218, 45,
+ 54,215,214,249,221, 79,254, 37, 63,123,247, 93,166,211, 9,227, 36, 33,203, 10,154,173, 46, 87,111,220, 96, 52,153,144,229, 25,
+ 71, 71,199,244, 6, 3,126,225, 7, 63,100, 99,165,203,254,227,155,196, 50, 32, 14, 37,145,146,228,105,142, 18,130,165, 78,139,
+ 70,220, 37, 8, 20,235, 43, 5,157, 78,131,219,159, 63,230,179,135, 91, 32, 91, 36,211, 41,159,127,118,135,201, 52,161,213,110,
+ 66, 16, 48,236, 31,113,241,226, 69, 30, 63,184,203,183,190,245, 3,100, 16,241,207,254,217,111, 99,172,118,202,215, 60,199,104,
+ 77,238, 15,129,101,213, 87, 20, 57,121, 14,237,118,147, 52,203, 8,163,200, 17, 14,131,192, 87, 56,146,181,149, 21, 38,137,211,
+109,140,198,227,234,253, 50, 70,186, 60,233, 5, 37, 57,207,180,180, 23,174, 23,223,193,114, 27,223, 98,219,125,161, 91, 34, 37,
+ 42, 80,180,162,128,239,126,251,155,188,247,193,135, 12, 39, 9, 86, 4,142,247,239,235,110, 21, 5, 40, 21,121, 13, 8,115,101,
+189,209,158,246, 53,191,134, 75,109, 8, 44,104,154,170,231, 95,223,136,157, 0,117, 62, 2,156,143, 14,204,188,227, 85, 35, 61,
+ 2, 36,147,233, 51, 4,190,231, 89,115,159,217,108,149,120,225,102,126,234, 33,224,207,209, 22,175,119,169,140, 41, 59,137,150,
+162,112,215,198,116,154, 96,140,173,220, 61,127,174, 89,186,239,174, 11, 36,194,202, 74,201, 94,111,167,151,133,133, 16,206,237,
+229,148,228, 39,170, 83, 97,231, 98, 52, 41,233,172,173, 97, 76,193,222,195,207, 89, 61,119, 17, 91,104,206, 94,184,196,254,195,
+187, 68, 81,131,163,189, 61, 86, 55, 47, 96,116,206,195, 79,110,162, 34,201,250,185,151, 89, 93, 63,203,184,191,207,100, 60,116,
+252, 0,109, 43,161,106, 40,192,106,141, 45,220, 1, 53, 79,115, 32, 36, 8, 37,157,149, 38,179,233, 42,211,126,143,246,202, 10,
+199,187, 79,156,251, 7,193,108, 60, 69, 98, 92, 54, 70,161,107,196, 80,119,176,212,133,239, 38,149, 56,235, 64, 57,112, 13, 32,
+164,139,238, 46, 5,213, 97, 20,185,255,247,150, 81, 21, 40, 2, 17, 98,140, 70,171, 0,105, 13,166,200,253, 24,215, 44,194,161,
+172,197,216, 2, 99, 21, 6, 75,127, 48,229,124, 39,163,217,140,120,237,181, 55, 9, 90, 75,108,111, 61,230,104,127, 27, 99, 52,
+ 65, 24,144,101, 51,164,116,135,138,217,116,202,168,223,231,157,111,124,139,143,254,183,223,198, 90,184,248,242, 53,142,222,219,
+167,217,110, 19, 70, 17,211,233,148, 36,153, 56, 97,120, 32,200,178,194, 61,119, 31,220, 37, 76, 77, 11, 35, 4,113,179, 69, 32,
+ 2,133, 40,149,226, 82,122,239,242, 34,117,169,218,132,107,113,171,167, 85,229,167, 17,224,202,197,164,220, 96,203,141, 88, 41,
+ 89,109,108,229, 70, 95,229, 85, 63,227,145, 21, 21, 69,170,172,252,235,234,198,250,205, 91,175,238, 22, 84,214,222, 27, 92, 23,
+190,168, 42, 69,206,162,133,107,143, 34,160,219, 94, 34,104, 11,158,110, 61,102,117,253, 44,218,228,236, 60,125, 82, 29,110,178,
+204,217,121,150,151,150, 81, 65,192,173,155, 31, 99, 77,138,141, 44,214, 58,162, 91,154,107,164, 84,142, 57, 46,231,115, 68,107,
+ 45,218,251,208,141,246, 27,123, 41,152, 43,219,154, 85,170,218, 41, 18,154,103, 87,153,121,219,188, 70,166, 51,101, 68,169, 49,
+ 52,226, 54, 82,134,228,249,196,159, 94, 93,197,168,252,169,181, 12, 71, 81,202,231,252, 26, 91,101,198,131,160, 17, 71,152, 60,
+ 7,165, 92, 42,151, 15,171, 40,133, 91, 65,224, 42,181,181, 70,200,103, 79,134,104,173, 25,245,123, 8, 1, 27, 47, 95, 67,250,
+214,123,150, 58, 4,168,171, 36, 13, 34,116,177,139, 86, 59,148,157,148, 2, 93,122,182,189, 34,118,126, 80,131,157,195, 67,158,
+236,237,242,217,131, 7,172, 46, 45, 33,138,130,255,245,227,143, 73,242,148, 98,150,146, 22, 57, 69,174,137,162,128,183,222,120,
+ 3, 29,181,153,152, 67,194,216,176, 26,182, 89,218, 56,199,225,209,128, 39, 79,119,201,199,199, 20,217,152, 70, 20,209,105, 55,
+ 57,183,190,138,176, 14,189,187,123,144,146,105,205, 74,183,197, 82, 28,241,205,183, 94,101,181,219,229,167, 31,222, 65, 55, 90,
+204,166, 83,118,158, 62,100,216,239,243,221, 31,252,144, 44, 77,120,252,248, 1,191,248, 75, 63, 38,108,181,184,115,247, 54,151,
+ 95,121,141,157, 39, 15,171,249,110,217,121, 85, 82, 85,160,150, 82,195, 48,153, 76,231,170,120,165,136, 27, 49, 70, 55,153,165,
+ 51,166,179, 41, 81, 24, 58, 38,130, 15,143,113,215,181,155,249, 9, 69, 85,221, 63, 27,200,100,107, 21,123,233, 27, 63, 73,162,
+ 43,157, 20, 78,132,134,112, 20,197,149, 78,155, 31,126,239, 59,124,116,243, 14,131,233, 20,171, 66,132, 21, 8, 43,144,210, 98,
+ 69, 76,220,108,186,138,199,138,234,103,237,137, 68, 58, 83, 63,132,207, 25, 59,243,195,132, 20,167,186,102,234,136,213,231, 49,
+ 51,234,247,247,105,157,195,211, 32, 90, 95, 70,241,254,236, 33,233,197, 62,254, 47, 61,203,174,117, 28,231,207,207,187, 88,140,
+121,198,150,248,103,241,203, 47,190,198,121, 22,134, 16, 2, 43,221,102, 47,101,224,148,224,117,210,154, 45,199,120, 69,181,151,
+ 11,127,240, 52, 62,115,161,189,186,138, 10, 26,220,255,248, 61, 90,157, 46,253,253, 29,132,216,198, 10,201,202,153, 11, 76,123,
+251,132,129, 96,210, 63,118,247,252,185, 77,162,110,151,217,116,134, 72,199, 36,211, 25,130,192, 37,160, 69, 49,177,243,249,209,
+235,205,104,228, 46,164, 42,159, 25,218,109, 24, 79, 50, 38,135, 41, 42,118,214, 57, 21,199, 68,237,101, 12,194, 59, 44,114,162,
+ 40,164, 72, 83,135,254, 45, 59,184,158,211, 96, 60,215, 71, 5, 1,198,111,212, 69, 49, 71, 99, 75,159,215,174,117,225,136,164,
+ 30,255,109,180,174,116, 89, 74,185,215, 30, 70,110,141, 51, 37, 56, 74,107, 87,212, 21, 5,162, 46,100,182,198,233, 38,164,229,
+235, 95,255, 14,157,206, 18,147,153,230,224,184, 79,239, 96, 31, 97, 5,179,116, 70, 20,197, 76, 38, 51, 47,230,134,193,112,192,
+112, 50,230,191,253,239,255, 71,238,125,126,135,222,225, 49,221,253,125, 90,173, 14,195,126,143,241,120,236, 14,181,218,197,180,
+106,159, 63,159,231,218,239,115, 18, 35,234,150, 60,197,198,185, 11, 4, 82, 4,160,202,198,167,153,243,144,235,189,250, 90,251,
+ 93, 49, 79,249,122,222,134,126, 90,197, 93,138, 70,194, 48,244, 11,154,160, 40, 52, 38,207, 23,114,214, 23,226, 26, 79, 40,231,
+ 23,199, 28,139,194,187, 82,154,163,164,243, 67,159, 84,226,155, 90, 96, 76,153,167,155,123, 10,157, 41, 12,104, 81, 5,207,191,
+116,238, 2,189,254, 17,107,235,235,228,121,206,206,206,150,159,119,105, 39,188, 80, 1,215,175, 93,231,168,223,227, 96,127,143,
+ 64, 65,187,213, 38,110, 68, 72, 37,200,178,212,193, 39,146,128, 78,179, 73, 28,187,217,100, 25, 19,171,181,169,170,101, 93, 19,
+ 34,158,156,139,215,233, 78,243,150,169, 55, 57, 9,129, 16,238,243, 82,101, 84,162,193,251, 73, 61,224,194, 90,116, 97,216,124,
+233,101,238, 61,126, 74, 81, 20,200, 32, 64,168, 16,107,203,155, 88, 33,101, 88, 45, 44, 81, 20, 57,135,130,183,247,149,239,191,
+138,156,216, 43, 68, 96,204,148, 44, 75,189, 16,205,137, 81, 98,165, 72,103, 99,180, 41, 48, 70,163,132, 37,153,140,233, 46, 45,
+179,186,188,196, 36,205, 80, 50,168, 16,153, 74,134,228, 58, 67,226,102, 82,185,201, 17, 82, 18,169,208,205,169,252, 60,185,228,
+166,107,107,121,247,227, 15,152, 78, 19, 86, 87, 86,248,224,253,119, 25, 13,199, 20, 58, 7, 93,208,105,183,120,233,194, 75, 92,
+ 60,127,142,118,167,201,210,250,101,254,167,223,254, 63,104,118,151,208,198, 48,153, 76, 41,138, 82, 45,170, 41,146, 17,103,215,
+ 26, 46, 83,249,224,144,187,247, 30,178,220,237,162,117,238,222, 39,169,220,162, 32,157, 80, 44, 14, 67, 46,158,223,224,179,135,
+219,200, 80,145,205, 82,164, 28,241,199,127,248,251,252,250,223,254,123,188,252,202, 53, 62,187,127,143, 70,239,144,180, 48,204,
+210,132,233,100,226,112,165,122,174, 87,112, 52, 68, 93, 89,220, 44,208,104, 52,176,214, 18,199, 49, 66, 56, 37,171,197, 18,199,
+145, 79,254, 26, 19, 4,129, 11, 34, 18,130, 44,119,169,104, 69, 81,182, 6,213,124,113, 51,178, 2,209,216, 19, 40,247,122,103,
+173,172,152,141,152,183,106,141, 23, 38,158, 61,179,206,215,223,124,157, 91,119,239,178,219,239,147, 89, 65,216,140,209, 58,132,
+ 44,199, 20, 1, 42, 8,208, 24,108, 97,106,194, 61,255, 27,169, 28,239,223,207,252,109,158,213,194,106, 36, 82,168,154, 38, 75,
+204,133,172,214, 98, 69,173, 34,178,207,186, 35,202,123,184, 12,177, 56, 77,188,251, 34,150,198,194,198, 40,112,250,144, 47,216,
+204,203,106,200,242,124,124,246,151,109,191,215, 93, 68, 95, 22,216,245,162,224,172,250,103,233,227, 13,221,104,194,135,163,224,
+215, 6,161, 66,164, 10,161,116,176,148,104, 81, 99,145,166,192, 26, 85,141,194,140,119, 53, 88,105, 9,194,136,165,245,115,204,
+ 38, 99,116, 94,112,238,205, 55,152, 77, 71,216, 40, 66,228, 5, 59,119, 63,197, 26,104,182, 87,152,142, 6,124,229, 87,255, 38,
+227,222, 33,105, 50, 97,178,179, 75,119,117,133,181, 11, 23,137, 59, 29,246, 31,221,197,164,137,235,248,165, 5,251,187, 91,172,
+172,174,209,232,116, 24,141, 20, 90, 7, 68,205, 54,231,186,109,134,163,130,145,214,180,219, 93,154,221,149,106,108,154,231, 5,
+ 86, 91, 10,107, 80, 50, 64,121,231,147, 20, 1,214, 26, 47,240,149,126, 68, 3, 22,231,112, 10,130,176, 34, 19, 10, 33, 80, 65,
+232,218,240, 85,241, 36,208,186,112,227,197, 44,247,118, 49, 93,105,205, 92,112, 16, 8,169, 8, 99,133,201, 51, 76,145, 98,116,
+128,209, 2, 83,192,104,146, 34,172,229,165, 75, 87,249,236,243, 7,124,252,241, 7,236,237,239,145, 22, 5, 73, 50, 67, 10, 8,
+125, 1,100,140, 65, 5, 1,119, 63,187,197,209,225, 49,195,222, 33, 82,186, 8,235,217, 44,113, 17,181,182,168, 52, 83,218, 7,
+220, 96,172, 87,223,251, 14,133,181, 21,138, 45,110,180, 72,179, 28,117,249,198,107,191, 85,250,187,149, 10,188,202,208,253,107,
+173,168,130, 62, 74,131,123,125,206,247,188,121,250, 73,128, 76, 85, 61,215,190,182, 96,107,170, 61,110,213, 70, 62, 97,161, 19,
+ 39, 50,209, 23,103,201,243, 27,110,193, 67,191,224, 63,180, 11, 17,178,210, 47,170,229, 99, 27,111,105,123,243,198, 27, 72, 20,
+131, 97,159,132, 80,116,139, 0, 0, 32, 0, 73, 68, 65, 84,227,163, 3,142, 14, 14,232, 31, 29,146,207,166, 4, 50,224,210,197,
+ 75,156,191,112,158,163, 94,143,100, 50, 70, 97,104,196,129, 59,241,154,162,170,200, 10, 93, 48,153, 76, 24,142, 71,100,190,106,
+183,214,121,192,243, 44, 35, 77, 83,210, 44,119, 89,187,185,118,179,223, 92, 59, 31,117,225,226, 80, 11,237,189,235,198, 96,141,
+ 83,227, 87,194,186, 42, 11, 93,160,125,178,154,174, 14, 5,110, 65, 52,198,210,238,174,178,179,127, 72,174,139, 57,113, 72,133,
+126,214,230, 90,238,145, 71,123, 42, 37, 17, 74, 18,197,113,101,191, 42,219,159, 11,109,221,170,171,224, 90, 74, 69,158, 19, 80,
+176,183,183,205, 44,205,220,141,101,253,236,216, 95,188,237, 86, 19, 25, 40,164,114, 55, 83,171,213, 34, 12,189, 8,211,186,249,
+151,242, 32,135, 56,142,104, 54, 34, 90,141, 38,141, 40, 34,240,115, 51,172, 33, 77,198,220,191,119,143,217,108,198, 74,183,197,
+ 27,215,175,242,230,107, 55,184,112,126,147, 78,171,233,248,237,195, 33,135,227,130,135, 15, 31, 49, 75, 51,198,163, 17,147,201,
+152,241,104,236,197, 38, 67, 38,211, 9,253,227, 67,199,203,247,215, 76,111, 48,160,223, 31,160, 45,196, 81,228,240,187, 8,154,
+205, 38, 42, 12,201,138,130, 48,144, 12,134, 83, 76,161,209,185,198, 34,120,252,228, 1, 54,136,233,174,175,241,224,225, 3, 64,
+ 48, 30, 13,233,237,239, 82,164,169,231, 41,168, 42,107,160,209,104, 84, 93,153, 32,112,135,208,208,107, 28,242, 60,159, 7, 12,
+ 57,110, 49,194, 7,232,148,184,226, 82,224, 89,230, 0, 0, 14, 12, 36,231, 73,111,167, 77,138,133, 56, 49, 78, 21,243,141, 87,
+ 74,119,224, 14,162,136, 44,203,153, 36, 9, 91,135,199,164, 86, 16, 53, 91,196,205, 54, 97, 28, 59,129, 81, 28,251,216, 74,223,
+ 6,183,194,181,176,253, 3, 75,165,124,165,231, 84,197, 85,160,141,168,161, 94,173,255,243, 74, 64,231, 47, 90, 97,231, 10,237,
+ 83, 52, 59,245,195,239,151,154,149, 63,103,147,175,218,210,242,249,246,173,210,226, 36,236,159,127, 51,127, 33,224,237, 4,112,
+235,203,188,150,231, 30, 0,228, 92,208, 37,202,116, 71, 41, 64, 73,148,138,170,170, 55,108, 52, 8,154, 13, 84, 20, 35,195,192,
+117,102,165, 68,149,109,121, 51,223,228,100, 32,233,172,108, 32, 27, 77, 58,235,155,100,227, 33,237,165, 53,198,211, 41,217,168,
+143, 21,130,217,112,136, 20,176,122,225, 42, 27, 87, 94,225,209,167, 31, 33,180,211,207,172,159,217,244,221,165,130,209,254, 62,
+221,245, 77,164, 10, 72,210,148,184,217,228,229,215,191, 74, 24,197,164,105, 70,163,209,224,194,185, 37, 38, 19,195,112,148,145,
+207,114,172,143, 91, 61,222,219,101,251,243, 79, 48,121, 6, 90, 59, 8,141, 53,196, 97, 8,194, 86,135, 20, 33,157, 85, 57, 8,
+ 84,117, 79, 24,173, 43,135,148,214,186, 74,232,196,111,226, 69,238,198, 99,110, 63,243,185, 18,254,250, 45,113,225,194,167,117,
+ 6, 97, 80, 27,255,136,170,163,168, 66,183,166, 5, 65, 64,179, 33,184,247,120,139,247,223,255,144,189,221,109,142, 14,246,232,
+245, 29, 55, 33, 77,103,149,203, 35,142, 34, 94,126,229, 85,150,186, 49,121, 50, 98,150, 27,218,157, 46,107,235, 27, 28, 29, 29,
+ 19,133, 17,131, 97, 31,172, 33, 73,146,103,192, 81,243, 9,128,171,194,195,176, 65,216,104,146,103, 41, 65, 16,198, 78,128, 83,
+218, 5,132,192,230, 26, 99,115, 71, 1, 50,174,250, 21, 66,248,225,252,226,156,238,121,204,248,250, 77, 80, 23,183, 21, 90, 47,
+204,190, 69,237, 2,175,186, 2, 53,181,117,189,125, 78,109,211,182,214, 1, 49, 42,158, 86, 13,112, 33, 42,240,194,252, 20,190,
+224,163,247, 11,166, 19,139,233, 10,184, 20, 6, 49,233,108,198, 39,159,189, 79,154,206,176, 58,195,100, 83,110,188,114,149,102,
+163,133,214,150,199, 79, 31,243,116,123,155, 60,155,177,212,109,113,245,213,183, 72,124, 14,186, 49, 5,195,254,144,201,112, 76,
+ 16, 69,142, 66, 54,155, 49, 61, 56,102, 50,153,177,178,178,228, 17,180,174, 26, 52, 69, 81,145,226,180, 93,244, 81, 86,190,124,
+ 47, 90, 18,178,166,103, 0,247,103, 85,242,130,152,211,198,124,240,130, 16,146,118,103,133, 36,205, 25,142,134,174, 77, 30, 70,
+168, 40,244,226,172, 16,109,164, 15,209,112, 39, 89,225,185,236, 90, 23,196,113,140,146,178, 26,143, 84,135,176,210,235, 31,134,
+ 24, 93,144,102, 51, 66,107, 57, 60,220, 39, 77, 83,172, 17, 21, 79, 95,161,153,142,134, 28, 8,151, 81,254,242,229, 43, 72, 4,
+ 71,131, 1,105,234,110,182, 86,179,129, 14,138,234,115,141,163,144, 70, 20,209,106,196,124,247,187,223, 37, 75, 51,126,254,238,
+207, 24,245,143,105,168,130,235, 87,206,243,202,249, 51,108, 29, 30,145, 23,154, 70, 28,161,243,132,233,172, 96,150,103, 96, 12,
+253,241,132, 34,137,152, 76, 38, 20,214,144,165,169,203, 27, 46,124, 5,130, 11,213,136, 59,174,170, 49, 86,147,204,114,119,125,
+ 97, 25, 14,157,194,180,213,137, 9,136, 24,141,134, 52, 26, 77,132, 20,196,113, 72,183,221, 96, 80, 76,208, 69,198, 44,113,168,
+201,119,127,246, 39,124, 43,250, 1,107,107, 27, 28, 30,236,185,249,160, 46,136,194,144, 52, 75, 1,136,227, 24, 89,184,215, 26,
+199, 49, 74,185,112,146,102,163,193,108, 54,171, 14, 82,113, 28,179,178,186,206,104, 52, 34,148,146, 8, 8,131,128, 52, 73, 72,
+114,141,191,236,137,163,168,186,151,178, 44,199, 10,119,143, 73, 37,145,126,102, 47,125, 56, 69, 57, 58, 42, 89, 12,101, 28,170,
+170, 34,140, 69,149, 3, 80, 8,193,214,113, 31, 21, 54,104,117, 59,116,186,109,150, 90, 45, 90,157, 46,143, 62,191,207,104,212,
+131,169,152,207,201,133,196,228, 57,214, 80,177,237, 43,104,139,160,210, 70, 24,171, 48,122, 14,198,113,247,167,245,154,191, 57,
+ 23,162, 92,248,240, 12,138, 50,201,144, 90, 43,127, 49, 55, 91, 84,179,133,178,242, 63,181,162,149,254,103,202, 13,236, 57,221,
+247,122,119,172,100, 74,252, 69,167,170,125,153,217,252, 11,109,194, 82,156,104, 41,216,121,242,156,152,167,198, 9,161, 28,102,
+ 53,142, 8,154, 45,154,173, 22, 81,171,229, 73,147, 25,217,116, 74,150,140,201,237,204,123,177,221,230,232, 75, 42,186,235,231,
+152, 76,199, 60,250,232,167,180, 90, 93,198,189,125, 10,157, 49, 62, 60,162,187,190,142,144,130,229,179, 87, 65, 24, 76,158,177,
+121,233, 34,187,143,238,209,108,116,232, 77,166,152,108,138, 4,166,211, 33,218, 66, 97,157, 16,236,120,231, 41,201,184,143,146,
+138,102,167,203,176, 55, 96,187,213,118, 5,139, 17,164,238,198, 66, 2,157,149, 85, 84, 16, 17, 6, 1,133, 79,229, 67, 24,138,
+ 44,243,240, 49, 75, 24,134,100, 89, 70, 24,134,104, 63, 94, 20, 82, 16,133, 81,165, 87,146,158, 70,170,141, 65,133,110,175, 11,
+130,128, 80,132,206,146,102, 53, 58,119,100, 79,112, 40, 95,155, 25, 71,200, 11,156,198, 8,223,209,116,113,180,129, 15, 35, 50,
+ 20, 89,206,163, 71,143, 24,140,190,206,159,190,251, 49, 23, 46, 93,102,118,119,226,214,158,188,192, 8,227,175,117,235, 58,169,
+ 82, 48, 29,245,185,122,233, 58,127,245,135,191,202, 44,115,227,197,155,159,126,204,253,207,239, 48, 73, 18, 26, 81,196,160,215,
+175, 88, 78, 56, 3,245, 34,108,202, 58, 36,144, 12, 67,178, 44,117,194,191, 43,175,191,245, 91, 65, 24, 16,180,151,120,235,251,
+ 63,230,245, 95,248, 53,246,182, 30, 86,115, 3, 74, 48,138,243,117,184,139,197,183, 13, 79,170, 88, 79,206,181,235,109,166,250,
+102, 95, 46, 46,246,148, 25,147,168,230,187,170, 38,124,153,131, 48,194,192,205, 23, 85,149,197, 46,170,141,201,214,172,150,198,
+204,189,233,139, 93, 3, 81,117, 6, 92,165,238, 78,101,145, 10, 88,105, 53,105,197, 33, 87, 46, 94, 98,169,187, 68, 20,198, 52,
+154,109,158, 62,221,102,119,119,135,253,189,167, 36,211, 17, 75,203, 93,222,250,202, 91,116,186, 45, 14, 14,247,221, 38,173, 11,
+154,113,131,165,165, 54,173, 86,147,241,100,202,100,154,160, 84,128, 46, 44,179, 52, 37,203, 50,144,130,188,200,125, 24, 70, 70,
+150,230,164,121, 65,158,187,232,202, 34,119,155,143, 46, 52,186, 48, 30,242, 97, 42,219,155,214,102,129, 29,160,125,212,105,245,
+103, 94,192, 24,197, 45,130,176,197,214,206,182, 23,248,153,202,210, 38,164, 32, 12, 99, 98, 31, 86, 34,149, 34, 12,220,133, 27,
+120,117,186, 53,238, 51, 40, 85,242,117, 97, 99,149, 56, 22, 56, 33,201,100,116,204, 44,153,186, 19,175, 80, 85,222,186,107, 51,
+ 75, 79,251,115,254,252,179,107,171,188,245,234,117,214,151,187, 40, 44,179, 52, 67, 96,137,194,144, 86,163,193, 82,183,195,234,
+114,135,223,248,141,191,199, 47,255,240,151, 89, 91, 59,195,183,190,254, 13,152, 77, 32,157,241,232,233, 54, 27,107, 93, 90,113,
+ 68,111, 56,226,225,214, 46,211,201,148, 89, 58,227,184,119,204,222,225, 17,123,131, 9,195, 73,202,241,209, 1,121,158,187, 27,
+171, 40,156,106,212, 24,114,237,102,113,113,224, 5,163, 30,195,235, 33,194, 24, 11,147,201, 20, 16,100,105,142, 53,174,237, 23,
+248,152,222, 32,144,244, 7, 83,255,179, 78,148,147, 37, 41,201, 52,161,213,110, 81, 20,206,179,159, 12,123,254,125, 82,213,184,
+ 69, 74, 73, 24, 4, 11,157, 37, 37, 37,202,115, 1,138,162, 32, 77, 51, 79, 55,140, 64, 64, 20,134,110,164,100,220,125,160, 2,
+167,134, 47,147,245,170, 64, 21,225,108,104,243,205,194,169, 99, 85, 16,204,163,137, 3,215, 58,199, 71,216, 10,207,244, 23, 74,
+ 33,131,128, 64, 69,200, 48, 36,106,180,136,187, 93,190,253,203, 63,226,199,127,227, 87,248,207,254,209, 63,226,165,183,191,201,
+159,252,228, 15,209,153,193,234,194,117,166,202,209, 81,121,240,174,186, 98,204, 91,155,182,140, 72, 22,148,140, 25, 41,189,122,
+221,143,146,130, 32, 68, 10, 5, 72,164,170,205,126,171,215, 70,181, 33, 87, 7,217, 26, 6,181,222,221,123, 30,191,189,116,113,
+ 45,102, 11,136, 47,156,185, 87, 97, 38,255, 26, 91,251,105,233,132,207, 83,232, 63,239,123,235,207,201,138,186,191,190, 38,148,
+165,236,236, 72, 80, 1, 82,133,200, 40, 34,108,181,105,116,151,232,174,159,229, 23,255,250,191,203, 59,223,120,135,131,163, 99,
+135,163,206, 51,116,158, 59,159,183,153,199,220, 6, 97, 68,107,253, 60,157,149, 85, 4,146,205,235,111, 50,203,114,178,241, 8,
+ 93,228, 76,143,246,252, 65, 57,103,237,226, 53, 86,207,189,196,131, 91, 31, 34, 50, 67,180,212,101,253,204, 57, 58, 43,171, 12,
+143,246, 89, 90, 59,135,176,154,102,179,193,100,150, 18,199, 17,203, 27,231,233,110,156,161,221,238,162,148,100, 50,158,129,149,
+ 4, 81, 64, 62, 75,209,133, 91,219,148,146,220,122,247, 39, 20,201,132, 34,207, 48, 69, 65,150,165, 72,220,156, 89,248, 14,104,
+169,189, 66,184, 17, 41,224,218,230, 94,155, 97,117, 78,145,205, 40,178, 12, 93, 24,108,161, 41,210,140, 60,203, 48, 70,147,231,
+169, 15,108,242,228, 82, 37,252, 38,238,102,233,214,119, 39,117,225,210, 6,181,214, 4, 53,235,159, 46,114,186,203,203,244,134,
+ 35,246,119,119,216,122,252,136,217, 44,113,201,149, 94, 40,141,117,186,154,184,217,228,149,107,175,240,235,127,243,111,113,229,
+202,117,158,110,239,242,243,159,253, 9,119,238,124, 2,198,146,101, 46, 75,100, 60, 26,185, 98,186,196, 44,159,134, 49,150, 78,
+255,100,181,235, 44,170,171, 95,121,231,183, 26, 75, 43,252,250,223,255,135,172, 93,255, 26, 75, 27,155, 92,124,237, 45,182, 63,
+251, 20,107,180,195, 45,122, 11,152, 61,225,237,176, 47,152,247,156,100,191, 83, 71,243,149,213,166,156, 43, 92,203,235,179, 20,
+ 0,148,173,216,178,253, 65,165,196,119, 31,114,185,201, 27, 47,182,179, 53, 11, 77, 57, 78, 40, 69,117, 96,171,220, 94, 37,221,
+ 9,173, 20,201,149, 9, 90, 18,129, 41, 10, 62,249,248, 35,238,222,189,205,195,135,247,217,222,126,196,193,222, 46,228, 9,231,
+214, 58, 92,191,250, 50,231, 55, 55,105,197, 49, 71,251,251, 12,142,143,156,184,194, 58, 85,248,104, 52, 34, 75,115,119, 51,116,
+218, 88, 99, 24,142,198,213,251,145,166,238,226, 49,198,144,103, 25, 69,166, 41, 10,235,218,236,198,162,141,203,118,169, 90,237,
+ 94, 33,235, 54,109, 91, 81,188,230, 27,189,167,122,121,152,194, 60, 12, 6,144, 49, 59,123,123,228,121, 86,181,122,181, 23,144,
+ 72,143, 77, 12,195,208, 91,216, 28,158, 83, 5,174, 98,147, 66, 34,188,117,173, 84, 66,215, 25,223,248,208,154, 66, 23,136, 34,
+101, 58,237,187, 74,176, 48, 11, 16, 25,119, 34,117,157, 30, 83,104,210, 44, 37, 73,166,140, 38, 19,214, 86,151,121,249,194, 5,
+246, 15,143,104, 53,155,116,218, 45, 86,150,151, 57,191,121,150,255,228, 55,127,147,111,124,253, 29,148,112, 98,199,126,127, 72,
+119,101,157,183,111, 92, 35,153, 36,188,127,251, 54,135,189, 99, 38,211, 41,199,253, 33, 89,158, 49,153,142,201,242,130,193,112,
+ 68,127,146,208, 27, 12,153, 37, 83,103, 5, 43,244, 34,122,215,107, 42,148,112, 7, 40,176,149, 8,198,233, 55,220,117, 51,157,
+204, 8, 35,229,230,215,186, 32,245,239,101, 24, 6, 20,133, 33, 77,253,166, 86, 20, 72, 99, 29,135, 89, 41,214, 86, 86, 72,134,
+ 3,178,116,230,248,253, 53, 59, 90,201, 30,112,158,236, 2, 33, 28, 92,197,169,227,243,106,163,207,178,148,188,112,244,187,178,
+109,103,252, 97,218, 98,252,225, 32, 68,201,192, 87,236,248,123, 38,240,140, 1,181, 96, 79, 11,124,182,184,227, 10,232, 10, 53,
+ 28, 4, 78,109, 31, 54,154, 52, 90, 45,226, 70,147, 48,108, 16,196, 33, 75,103, 94,226,111,252,230, 63,230,245,239,124,141,161,
+ 86, 44,159, 91,231,222,205,123, 28,238,110,147,167,105,165, 8, 46,221,117, 37,208,163, 20, 42,205, 79,252,198,111, 60,243,181,
+195,109, 60,170,234,182,217,178,138, 46, 15,233,118, 14, 21,153, 35,245,230, 10,125,225,181, 37, 98,129,158, 87,234,238,230, 68,
+ 53, 33,235,126,235,103,173,127,165,111,120,193, 9,240,156, 18, 94,212, 44, 99, 95, 54,180,106,161,226,174,165, 20,137,231,204,
+199,235, 22,187, 58, 18, 94,212,108,228,101,173,230, 82, 39, 85,237,192,225,252,231,238, 0,163, 16,210,233,103,130, 70,147,176,
+209,166,179,178,194, 55,127,244,235,252,221,127,252,159,242,218, 87,190,194,250,250, 10,183, 62,185,137,201, 92,206,187,242,135,
+178,178, 96, 10, 84, 72,123,195,145, 18,219,221, 37,250, 71,251,164,199,187, 12,142,142, 88, 94,223, 96,150,204, 88,218,216,164,
+217, 90, 98,220, 63,102,120,124,140,178,112,230,226,203, 12,143, 14, 80, 81,131,241,168, 79, 50,153,208,238,180,153, 38, 9,198,
+104, 26,113,131, 84, 27,154,141,198,255,207,216,155, 53, 93,118,221,231,125,191,181,214,158,206,240,158,119,232,185,209, 24, 8,
+128, 0, 41,142,162, 36,138,166,101,137,113, 60, 68,101, 91,113, 18,203,169,196,169,148, 99,187, 42, 85, 78, 85,110,146,155,220,
+233, 35,164, 42, 23,249, 2,185, 75, 37,185, 73, 42,150, 35,185, 28,155,162,165, 68, 38, 9, 2, 32,230,161,129,158,251, 29,207,
+176,167, 53,229,226,191,246, 62,231,109,192,174,168,170, 11, 32,213, 4,222, 62,103,239,181,254,195,243,252, 30,102,251, 71, 60,
+122,112,143,227, 71,247,177, 77, 77, 89,230, 28, 93, 59, 34,132,192,122,181,196,168,192,122, 93,243,228,238,251, 52,231,167, 4,
+111, 33,117,202,106,228,156,200,103,150, 23,249,216, 80,246,125, 63, 78,110, 51,109,146,156,195,128,145, 2,215,152, 76,200,153,
+ 74,236,131,168,184, 21, 94,134, 32, 1, 95,206, 38, 11, 92, 74,243,180, 86, 92, 2,131,146,158,109,226,160, 79, 65, 78,171,213,
+138, 44,211,124,254,249,231, 66, 33, 77,246, 51,105,108,182,119, 83, 81,148,124,227, 27,223,100,127,255, 0, 93,148,252,209, 31,
+255, 17,127,250,147,159,208,180, 45,171,229, 18, 31, 44,214, 58,250,182, 75,218,155, 47, 97, 73,164,181,153, 30, 66,148, 6,148,
+247, 43,223,254,222, 31,188,244,157, 31,242,123,127,237,183, 89, 57,176, 94,177,127,245, 10, 71,183,190,194,163,143,223,149,234,
+ 32, 0,193,141,226,149, 47,171, 42, 71, 11, 74, 26,227,203,142, 94, 46,231, 93,200,203,112,113,239,102,171, 15, 47,211,144,127,
+ 60,140, 8, 7,251,151, 78, 99,224,161,251, 24,132, 50,214,186, 75,138,249, 8, 59,255, 46,181,195,130, 87,227,216,127,224, 91,
+139, 80,193,108,185,220, 41, 31,219,100, 25, 89,158, 81, 78, 38, 44, 22,135, 92,189,126,157, 95,255,214,215,121,253,133, 91,204,
+231,115,242,194, 96, 76,160,170, 12, 89,158,179,222,172,217,108,234,180, 47,181,108,234,134,243,229, 10,133,162,172, 10,148, 81,
+108,234,102,244, 14,123, 55,236,154, 17, 69, 99, 20, 97,138, 15, 91,162,209, 22,223, 57,100,160,171,241, 50, 8,126, 80,171, 50,
+118,240,113,199, 54, 20,130, 98,113,120,141,167,199, 79,211,133, 46,170, 78,180, 38,140, 58, 38,233, 56,135,253,211, 96,239, 16,
+209,157,172, 39, 98, 90,155, 12,161, 29,131, 87, 58, 4, 41,170,180, 82, 28, 85, 37, 79, 30,223,195, 6, 59,118,187, 69,158,166,
+ 39, 3,164, 65, 43, 20,102,156,166,216, 68, 1, 91, 45, 87, 64,228,251,223,255,117,190,241,245,175,241,250,107,175,241,131,223,
+252, 62,255,241,223,253,125,174, 95,191, 78,223, 89,158, 62, 61,161,107, 59,150,203, 37,117,219,242,228,124,197,147,147, 99, 62,
+253,236, 46,117,189, 33,164,132,184,179,243,115, 66,140, 44, 55,107,234,182, 33,146,179,169, 55, 64, 24, 15,233, 8,120, 2, 62,
+ 72,200, 70,145,105,170, 60,217, 90,242, 98,199, 78,184, 29, 95,246,125, 18,205,165,105,131, 15, 49, 85,236, 48,153, 78, 88, 47,
+ 55, 41, 41, 47,226,189, 67, 17,232,218,158, 24, 34,191,247,215,127,151,227,147, 99,188,179, 20,121,190, 99,195,188, 44,150, 27,
+ 38, 31, 82, 92, 60, 99, 7,245, 94, 72, 84,182, 31, 87, 95,206, 59, 92,138, 17, 30,228,202,222,187, 81, 61, 63, 8, 82,135,191,
+ 94,130, 74,237,188,151, 89,158, 83, 77, 38,228, 69, 73, 62,153, 50,221,223,231, 7,191,253, 35,130, 54, 24, 13, 42,207,185,246,
+194,171,236,223,122,149,179,139,150, 27,139,146,220, 40, 78,150, 61,239,191,241, 83,108,215,202,196, 46, 12, 23, 74,216,134,174,
+ 71,149, 10,204, 64, 72, 30,125, 18,214, 89,155, 12,147, 87,242, 57,167, 3, 81,107,153,202,201,228, 71,108,110, 3,230, 89, 17,
+ 81, 42, 35, 14, 10,251,168,182, 48, 16,145, 89,166,139, 44, 29,106, 73,133, 63,192, 87,226, 22,230,192,229,244,108,158,209,254,
+164, 83, 40, 97,190,213,151,181,252,234,178,138,255, 89, 27,233,179, 93,246, 37, 27,225,206,164, 64,253,255, 16,196,141,178,130,
+157, 95,195,100, 66,237, 80,222, 84, 52,105, 58,163, 68,221,158,166, 46,202,100,104, 99, 48, 69, 73, 94, 77, 40,231, 11, 14,111,
+191,200,223,254, 7,255, 21, 71,123, 21, 7,251, 21,249,254, 29,222,123,243,109, 46,158, 62,193,245,157,116,233,195,196, 67, 41,
+178,201, 30,135, 87,174,241,248,238, 71, 60,253,252, 67,218,147,199, 84,251, 87,216, 63,186,194,102,117, 65, 81, 78, 89, 28, 92,
+165, 60,186,130,183, 61,183,191,242, 21, 94,253,222, 15,249,236,189,183, 9,174,102,117,122, 76,240, 61,161,107,192,100,248,174,
+ 30,185, 68,214, 7,188,181,188,244, 43,223, 70,147, 38,153,109, 67,244,129,118,211, 98,178, 18,239, 28,171,243, 51,172,179,108,
+ 46,206,121,114,239, 99, 92, 47,191,207, 90, 59,174,110, 20, 3, 36,109, 11,203, 26,126,105,173, 83,135, 43,235, 40,149, 38, 84,
+ 67, 99, 56, 56,176, 32,146,103,197,184,234, 28,178, 56,124, 90,145,142,235,225,212,220,120,239, 83,145,238,240,222, 74,134,135,
+247,108,214, 75,108,211, 74,174, 68, 42,232, 7, 31, 59,113,139, 13,206,242,130, 23, 95,188,197,231, 15, 30,240,139,183,223,227,
+207,254,213,143,233,154, 13,171,139, 11, 54,155, 13,222, 59,122, 43,200, 99,231,253, 88,148, 14,151,185, 74, 14, 50,163,115,209,
+195,148, 5, 42,147, 76,122,243,157,191,242,183,255, 96,239,198,109,166,135,215,248,250, 75, 71,226, 61, 46,114,200,166, 60,255,
+234,215,120,240,238, 91,248,232,136,222,237, 68, 50,200, 99,157, 25, 53, 66, 66,198,206, 96,135,209, 62, 28,166,255, 54,130, 28,
+187,240,253,103,252,215, 35,183,125,119, 12, 63,168,136,141,185,228,153,223, 85,136,155, 81, 88, 21, 71,114,218,176,175,244, 59,
+202, 89,191,147,205,172,210, 56,121, 82, 85,204,247,246,152, 78,167,236,205,103,252,230,235,119,120,229,214, 33,125, 80,212,205,
+134,186, 89, 19,156, 67,105,200,115,195,100, 90,161,140, 97,185, 92,209,247, 78,198, 89, 46,208, 52, 45,193,123,242, 50, 31,153,
+191, 74,233,212,228,170,116, 81, 15, 35,115,149,198,168,106, 36, 79,197, 56, 68,121, 12, 2, 9,149,246,213,124,241,215,176,199,
+ 68,129, 41, 56, 61, 61,195,121,199,179,217,233, 58, 77, 43, 80, 91,225,162, 92,236,217,248,160, 12, 99,204,144, 62,183, 24,183,
+ 21,236,120,177,123,153,224, 68,215,114,182, 60,197,246, 61,214,121,116, 10,180,217, 45,194,134, 84,183, 24, 67, 82,147,166,137,
+141,179, 20, 85,197, 55,127,229, 59,252,141,191,241, 55,249,238,119,191,195,157, 59,119,104,234,150,213,114,197,195, 7,143,121,
+248,232, 49,239,191,255, 62,239,127,244, 33,159,222,189,203,187, 31,126,200,233,114,197,189,123,119,193, 59,140, 22, 42, 87,219,
+247,184, 32,118,180, 24, 34,157, 35,229,157,203,110, 95, 10,161, 93, 47,117, 36, 83,158,204,200,115,213,182,173,136,105, 82, 72,
+144, 74,151,131,119,142,174,119,219,241, 90, 10,112, 24, 42,231, 44,203,104,234, 94,134,246, 49,101,219,123, 7, 58,227,243,135,
+247, 57,220, 63,192,104,205,186,222,160,180,102, 54,221, 35, 47, 10, 92,114,103, 88,235,198,105,215,179,193, 68,131,251,100,247,
+253,202,242,108, 39, 25, 46,142,214,202, 93,119,137,117, 14,159,166, 34, 67, 17,230, 82, 6,252,160,120, 30,120, 4, 90, 9,199,
+ 63, 47,167,124,243,135,255, 46,127,243, 31,253,151,252,157,191,246,151,120,255,179,123,180,171, 53, 87, 95,249, 38,251, 87,110,
+ 81, 86, 37,215,110,236,243,222,221, 51, 78,142, 47,248,232,103,127, 74,244,210,121, 68,239,211, 35,186, 99,117, 13, 81,238,246,
+ 33,173, 38,217,229, 76, 62, 17, 49, 83, 18,251, 9, 63, 80, 58,216, 1, 59, 60, 54, 36, 89, 70, 28, 0, 68, 70,114,211,119,125,
+234,187,221,247,112,151,139,109, 73,212,245, 3, 92,103,123,241,146,160, 62,122,135,107,175,118,172,166, 91, 6,253, 22,228,244,
+229,195,124,197, 23, 19,238,255, 77,151,251, 32, 72,223,253,199,168,103,200,126,250, 75,212,122, 81,113, 73, 28, 60, 76, 92,134,
+159,105, 60,115, 49,219,100,202, 1,161,173,141,188,227, 89, 70, 86,149,100,229,148,114,190,199,183,126,240,151,121,238,107,223,
+ 34, 22, 21,214, 5, 30, 30,247, 44,207, 46,248,244,157, 95,224,186, 14,219,117,226, 12,241,146,168,118,227,197,215,216,172, 4,
+131,236,172, 20,161, 89, 53, 99,115,126, 66, 81, 84, 4, 31,113,206,114,250,249, 93,162,183,168,124, 66,191, 89,146,207,247,112,
+206,211,175,151, 68,239,153, 29, 94, 97,255,230, 29,162,143,172,206, 79,210,153, 0,157,237,185,253,242,107,244,125,143, 78,248,
+108,239, 28, 85, 89,162,148, 98,255,234, 85,102,251,251,152,116,238,124,252,246, 79,101,244,237, 44,209, 59, 84,202,166, 24,222,
+ 1,107,123, 92,111,241, 93, 47,239,152,146,127,222,240,221, 26,109, 70,237, 81, 72,235,182,241,158,138, 67, 49,163,101,237,165,
+ 53, 69, 85, 73,206,187,210,227,153, 25,189,191,148,119,162,134,236,139,176,181, 36, 55, 77,141,138,158,174,179, 95, 96, 20,140,
+ 58, 51,163,184,126,227, 14,197,116,198,197,114,201,103, 31,127,196,102,189,162, 75,171, 66,157, 9,212,107,184,191,134, 39, 71,
+171,173,104,124, 11,160, 74, 14, 0, 99,200,139, 2,243, 23,126,255, 31,252, 65,140,154,174,243,204, 23, 11, 14,142,230, 92,217,
+211,120,165, 9,122,194,213,175,188,202,189,247,222,198, 59,139, 6,130, 10, 9,151,159,144,173,187, 30,144, 52, 98,218, 13,237,
+ 24,237,104,138,203, 81,168, 59, 99,200,225,226, 31, 30,204, 16,119,189,189,187,254,206,157,188,219, 29, 21, 44,201,136,159, 37,
+ 49, 67,252,146, 66, 97, 87, 53, 59,132,194,152, 56,192, 23,118,212,168,193,147,105, 1,146,252,254,111,125,155,231,174, 29,242,
+248,244,130,227,179, 99,154,174,149,159, 65,177,115, 73, 36, 54,121, 81, 80,215, 45,109,211,139,210,210, 73,224,139,140,121, 53,
+214, 58, 66, 80, 9,221,154,228,170,137, 2, 17,254, 13, 74,222,161, 75,143,232, 81, 37, 28,119, 63,247,241,115,147,192,154,131,
+163, 27, 44, 87, 43,156,183, 91,127,114, 52,104,164,130, 83, 90,165,125,234,144, 8,163,183, 15,203,168,254, 20, 49, 99,166, 20,
+202,168, 17,132,209,247, 61,196, 64,110, 12,125,215, 17,219, 13, 15, 31,220,163,169, 91,172, 21,242, 81,158,208,178,222, 75, 66,
+ 86, 81,138, 88, 16,181,165, 21,142, 5, 93,210,103, 52,173,163,247,138,227,167, 39,156,157,157,115,126,126,193,189,251, 15,248,
+248,211, 79,248,232,227,143,249,228,179,187, 60,122,242,136,207,238,223,231,228,244,132, 39, 79,143,105,235, 13, 58, 90,180,138,
+108,154, 70,124,176, 81, 81, 21, 25,189, 13,116, 86,118,245, 91,215, 64, 24,185, 11, 58, 93,236,121, 14, 68,127, 41,196,161,200,
+139,157, 98, 83, 62,103,151, 70,222,218,104,116,216, 82,164,188,115, 20, 69, 65,107, 61, 46, 74, 37, 29, 19,123,160,111, 54, 68,
+ 5, 39,167,103, 28, 30, 94,197,218, 20,157, 24, 34,185, 49, 4,196,159,156,103,121,210,136,100, 8, 42, 66,112,156,101, 41, 36,
+ 66,109,242,100, 27, 76,123,112,116, 26, 87,203,101,159, 21,133, 20,130, 65,165,253,191, 35,203,244, 72, 19, 20,132,166,198,165,
+ 41,144,243, 50,217,144,247, 84,118,232, 33, 68,148,201,152, 92,189,205,228,232,121, 14,175, 28,240,163,223,249,139,252,201,191,
+126,139,249,254, 53,174,220,126, 1,165, 12, 77, 15,171,139, 37,237,186,230,147, 55,255,156,232,196,197, 33, 36, 46,149,216,216,
+ 70, 20,237,105, 26,166, 70,109,139, 8,121,182,163,104, 48,121, 33, 25,221,105,138, 36, 69, 85, 33, 40, 79, 45,110,146,164,208,
+ 33, 58, 25,185,134, 1,172, 50,100, 64, 16, 6,191, 89,130, 53,233,173,118, 72,102,249, 41,161, 75,143,251,250,129, 68, 55, 20,
+155, 50,190, 14,219, 81, 60, 34,218, 27, 14,173,237, 65,252,197, 49,248,165,113,248,191,141,188,250,165,172,249,237, 47,249,247,
+169,173, 78, 64,111, 3, 73,244, 80,216, 72,219, 65,150,148,236, 58,175,136, 94,172, 89, 90, 25,178,172,144,226, 89,203,187,174,
+141, 65,231, 5, 89, 81, 98,138, 9,197,100,206,247,255,234,223,162,110, 58,150, 39,231, 60,122,116,202,241,163,199,120,219,243,
+193,207,255,140,208,203,133, 30,162, 71, 71,205,244,240, 42,135,215,111,211,212, 75,206,158, 60, 22, 59,114, 89,113,254,232, 51,
+ 98,223, 64, 4,219,110,168,102,123, 76, 15, 14,197,102,217,183,120,231, 57,253,236, 67,124,179,161,237, 26,116,112,216,182,165,
+187, 88, 82, 78,231,168, 24,233,218, 46,253,121, 34,139,163,107, 76, 22, 7,168,116, 70,104,109, 36,106,212,139,214, 39,132, 64,
+ 81, 22,248, 16,249,252,221,183,232,235, 21,209,201, 84,204, 91,183,221, 85,167,243,187,172, 74, 2, 18, 48, 36, 33, 74,249, 86,
+135,149,166,146,195,234, 41,244, 14,223,183,242,172, 69,143,235,186,228,200,216, 70, 67, 59,231,192, 57, 1, 42,141,116,211,128,
+ 11,253, 24,194,176,109, 90,183,117,160,117, 2,134,250,130,133, 50, 49, 3, 98,140,212,245,146,201,108,193, 39,159,124,194,217,
+201, 19,250, 78, 38,114,178,255,151,221,189,184,156, 52, 69, 38,185, 35, 10, 45,231, 65,158,163, 77,145,222,227,156,188,172, 80,
+202, 72,241,245,189,223,253,253, 63, 80, 68, 84, 86,224, 66,206,201,121, 77, 38,180, 57, 94,188, 57,165,233, 75,170,197, 21, 30,
+124,242, 30,113,180,128, 25, 52,122, 59, 10, 32,238,228,211, 50,238,224,229,247,102,210, 33,106, 35,255,187,161,138, 76,177,149,
+187, 17,155,195,222, 79,143, 47,237,176, 83,246, 95, 96,190,239,122,153,135,145,202,176,131, 83, 9,203, 58, 84,174,187, 66,188,
+ 81, 9,191, 3, 55,201, 82,245,158,105, 40, 50,195,126,161,249, 47,254,218, 15,152, 20, 5,239,127,118,143, 7, 79,159,208,219,
+ 14,231, 3,189,117,244,214, 97,157,140, 65,157,245, 9, 10,160,200,203, 66,208,164,109,159,210,214, 4, 20,160,146,157, 45, 36,
+151, 65,212,154,219, 47,188,196,124, 58,163,217,108,190, 32, 54,124, 54, 67, 62,198,248,229,244,139, 29, 53,240,225,225,117, 78,
+207,207,176,182,191,212, 79, 12,172,231, 93, 22,180, 54, 3,236,199,165, 74,243,178, 34,121, 16,156,232, 44, 75,182, 16, 81, 75,
+ 7,235, 68,220,215,110, 56,126,120,143,126,204,212, 78, 93,121, 42,118,212, 78,214,176,210, 9,218, 16,125, 82,240, 75,149,158,
+165, 61,125,215, 91, 78,207,151, 92, 44, 47,248,232,227, 79,120,227,205,183,120,227,173,183,120,240,240, 1,239,190,255, 62,143,
+159, 60, 74, 43,142,141,216, 1,173, 37,162,185, 56, 63,161,239, 59,188,143,180,109, 71,223, 89,138, 50, 39,132, 72,221,202,247,
+179, 91,201, 14,148,196,144,138, 64,173, 2, 85,153,143, 47,250,176,218,136,113,187, 34, 25,166, 38, 33,122,242, 97, 77, 49,192,
+ 90,210, 75, 95, 22, 57,117,211,143, 34,152, 24,228,121,168, 55, 53,104,133, 71,243,202, 43, 95,165,105, 91,218,166,145,238, 81,
+171,113,167, 87,148, 37, 85, 85,141,151,112, 94,148, 20,121,129, 54, 57,101, 89,146, 23, 57,104, 70, 13,197, 32,180, 35, 69, 73,
+ 86,147,106, 76,214, 83, 90,211,185, 86,132,121, 62,117, 92,218, 80,228, 37, 38,121,114,243, 66, 68,119,213,116, 42, 42,226,196,
+173,214,166,100,239,198,243,124,246,228, 12, 63, 61,164, 90, 92,231,228,201, 99, 14,175,223,164,169,215, 92,156,157,209,180, 29,
+101,153,243,249, 59,191,192,168, 72,112, 14,163, 34, 70,111, 69,168,222,245,178,198, 73, 98,201, 44,207, 81, 38, 29,164,121, 78,
+ 4,242,178, 36, 26,141, 41,139, 68, 46,148, 72,206,172, 40,119, 14,198,132,133, 13, 34,253,149,209,125,158,198,237,114,226,140,
+231,138,201, 80, 89,142, 70, 46, 65,245,133,209,122,122,151,140, 65,101, 89,178,220,101, 59, 69,255, 22,214,163,118,146, 31,213,
+ 51,227,206, 93, 82,223, 23,239,232,221,247,118,123, 17,111,187, 42,149, 86, 4, 38,253, 85,167,124, 3,117, 73,232,182,253,125,
+ 25, 90,201, 4, 77,103, 57, 40,137,128, 54, 90,244, 46, 74,107,185, 52, 6,244,245, 80, 63,232,161, 48,145, 49, 60,218, 96,202,
+ 9, 47,190,246, 77,110,124,245,155,232,244, 51, 0, 2,131,137,145,143,223,252, 25,125,189,194,247, 54, 53, 71, 5,119, 94,255,
+ 22, 15, 62,252,128,249, 98,159,213,197,146,230,244, 49, 42,203,185,241,252,203,212,171, 11, 41, 24, 77, 65, 62,157, 83,159, 31,
+163, 99,164,239, 26,138,170, 2,157,209,172, 46,168,166, 83,250, 8,147,233,148,166,171, 9, 68,230,135,135,244,155,141,192,110,
+ 82, 87,124,245,249,175,140, 83, 61,165, 52, 85, 85, 49,153,207,201,179, 92,198,252,185, 80,223,150,167, 79,185, 56, 63, 35,116,
+ 45, 93,151,236,109, 3, 91,101, 71,248, 88,148,213,248, 12,110,211, 4,183,156,145,241,110, 72,107,179, 33,206,123,248,118,135,
+223, 35,233,159, 62, 9,157,164,192, 55, 90, 19,162, 0,106, 6,184,211,160, 13,219, 77,193, 86, 92, 14, 78,218, 5, 80, 13,133,
+ 64,189,233,200,180,231,233,211, 99,250,182,193,165,189,124, 8, 16,188,221, 38,145,178,147,156, 58,196,142,103, 25, 33, 6,166,
+211,185,188,215, 89, 62,198,101,103,121, 57,197,118, 13, 49,120,154,182, 38,106,197,114, 85,179, 56,216,199,249,200, 87,111,151,
+ 60,126,112,141,219, 95,253, 22, 79,222,123,131,168, 68,249,234,250, 14,111,165, 59, 81,153,145, 81, 98,240, 34, 84, 73, 23,248,
+110, 28,168,216, 82,118,199, 75,137, 78,165,182,200,199,129,176, 21,134, 10,118, 28, 39,233, 75, 97, 43,222,123,226, 14, 57,110,
+232,210,191,128,174, 77, 23,223,110, 62,251, 16,199,106,148, 6,205, 56,117, 48, 64,169, 13,243, 50,231, 31,253,205,223,102,189,
+186,224,237,143, 63,229,209,201, 9,117,130,129,244,189,165,233, 58,186,116,153,121,183,229,121,251,244, 96, 28,236,239,211,119,
+ 22,215, 73,190,186, 15,208,247, 62,209,250,228,115,217, 59,184,194,115, 47,190, 12,192,252,224,136,187, 31,190, 39,194, 35,226,
+165,148, 44,249,252,182, 67, 62,161, 79,201,165, 56, 10,111, 80,204,230, 11,234,166,166,183,221,248, 32,201, 90, 76, 19, 73,227,
+209,192,104,201, 24,157, 8, 90, 4, 37, 33,147,221,167,128, 99, 92,234,240,114,250,166,165, 40, 10, 76,138,174,245, 33,208,212,
+ 43, 86,199,143,176,222,141, 99,121, 53,230, 4,132, 17,113, 59,201,243,241,165,145,145,167, 34, 83,233,251, 77, 66, 48,153, 38,
+156, 16,116,206,253,135, 15, 4,173,155,214, 36,214,245,137,122,167,201, 50,147,188,221,145, 44,207,152,239,237,209,213, 43,218,
+213,177,172, 25,180,192, 40, 54, 77, 71, 94,148,114,153, 61, 3, 45,146, 98,110, 16, 99, 5,138, 49, 82, 86,165,231, 39,219,174,
+ 25,140, 17, 37,112, 58,116,109, 11, 33,143, 68,111,229,179, 73,172,105,157,233,164,180,213,244,214,143, 34, 47,130,199,247, 45,
+203,147, 99,148, 82,124, 58,157, 74,103, 63,157,236, 68, 57,138,226,189,183,150, 92,105,172,245, 84, 85, 41,187,184, 36, 98,140,
+ 81,118,141, 67,158,188,202, 50,250,190,199,123,177,196,233,116,232,228, 69,153, 46, 75, 77,102,229,189,171, 38, 5,218, 20,244,
+125, 75, 83, 55, 68,160, 40,103, 40,163, 5,149,217,247, 76,166, 19, 38,213,132,136,162, 91,159, 97, 52, 56, 27,121,231, 23,239,
+114,229,246, 11,220,250, 74, 79,189, 94,142,233,104,206, 58,172, 19,180,166,219, 64, 86, 20, 66,226,138,144,101, 10,239,123, 14,
+142,174,178, 94,174,240,206, 97,114, 57, 60, 51, 99, 36,125, 46,147, 29,111,140,158,216,117,210,137,121, 71,232, 45,166,170,198,
+152, 99,173,205,200,230, 38,117,111, 49, 70,116,114, 80,168,152, 82, 94, 7,161, 94,218, 35, 15,211,129,184, 51, 21,210,122, 27,
+ 21,108, 98, 58,200,131,189,132,215,139,207,218,132,190,112,113,199,103, 68,192, 95,140,188,125, 86,124, 55,166, 8, 95,194,244,
+ 50,234,100,182,253,207,142, 31, 62,173, 72, 6,175,185, 78, 69, 77,112,126, 11,206,138, 17,188,147,238, 62, 8,153,108,248, 9,
+181, 82,168, 76, 10,156, 4,151, 23,232, 76,102, 56,188,253, 2, 68,159, 92, 52,145,205,102, 57,118,169, 70,103,137, 88, 22, 32,
+ 42,110,190,252, 42, 49,159,114,248,220, 29,166,211, 25,119,202,138,139, 71, 83,206,159, 62,228,248,225,231,104,109,232,154,142,
+172, 42,233, 86,167,105,194,148,161,157,164, 32, 26, 34,213,254, 1,229,116,198,193,108, 70,179, 89,161,173,172,236,234,205,122,
+132,175,232, 24,121,242,240,115, 94, 79, 23,124, 76, 1, 71,218,228, 92,191,113,147,174,235,232,155,154, 79,158, 72,186,228,252,
+232,170, 60,247, 7, 7, 44, 14,143,184,120,252, 57, 33, 41,247,173,181, 9, 78,211,210,197,228, 10,138,110, 28,173,235,180,111,
+ 87, 41,252,101, 16,139, 14, 78, 20,109,178,109, 80, 85,178, 5,199,244,121, 25,149, 38,187, 70,167,166, 5, 20,134, 97, 56, 19,
+125, 28, 27,205, 97, 10, 26,249, 34, 91, 65,107,149,134, 66,210, 68,249,208,243,217,103,159,141,211,223,152,244, 85,187, 83,104,
+ 61,228,189, 39,251,221,144, 58, 26,147,234,191,109,107, 84, 16,144, 90, 4,241,210,255,133,255,224,239,255, 65,223, 55,160, 20,
+ 7, 71, 7, 92,189,114,200, 43, 55,230,244,125,207, 68, 65,223, 89, 62,123,114,206,100,126,192,234,252, 41,191,247,247,254, 51,
+190,245,171,191,198,251,191,252, 37,209,167, 46, 58,205,252,181,145,100,156,184, 35,134, 51, 89,142,206, 11, 98,158, 97, 76, 62,
+138,172, 98,138,205, 83,105, 31,185,133, 82,196, 75,227,232,103,189,154,187,123,137,209, 30,167,245,184, 23, 83,169, 19,229,153,
+125,203, 46,144, 70,167,226,193,104,141, 86,145, 12, 40,138,140,107,243,156,127,252,119,254, 42,103,167, 39,188,249,254,199, 60,
+ 62, 59, 99,211, 54, 99,135,222,117, 61,109,215,211,118,162, 76,116,214,209,185, 68,247, 74,118, 51,159, 4,121, 77,219, 15, 59,
+135, 52,141,144, 75,253,234,141, 91,188,250,250,215, 0,141,143,129,172,200,153,237,239,211,212, 45,193,217,103,212,141,162, 24,
+222, 86,240,250,153, 67, 68, 51,157,238, 49,153, 78, 57,191,194,157,189, 67, 0, 0, 32, 0, 73, 68, 65, 84, 56, 27,173, 68, 91,
+171, 14, 99,162, 80, 28, 20,199, 90, 37,149, 59,163, 14,194,239, 4,141, 12, 65, 53, 3, 24,197,217, 45,166,179,107, 54,172,206,
+142,233,147, 26,123,155,239,190,141,205, 29, 4, 43, 82, 84,164,161,161, 54, 91,139,226,142,216, 39, 36,165,190, 41, 38,137,238,
+ 4, 62,136, 0,178,235, 58,185,252,173, 19,229,121,215,211, 91, 75,219,118,108,154, 13, 49, 4, 86, 23,167,146,174, 68, 32,166,
+132, 38,235, 44,109, 55, 76,118,134, 23, 40,249, 67,149,188,136,121, 6,123,211, 34,197,154,138, 58, 95, 43, 77, 85, 86, 99,122,
+ 89, 94,228,152, 76, 39, 20, 37,148,101,182, 85, 95, 15, 10,109,149, 4, 51,218,200,184, 45,117,102,178, 54,145,151,211, 54, 13,
+ 93,189,161, 15, 96,242,156,106, 50,197,246, 61, 10,141, 15,226,202,152, 76, 42,148, 86, 88,231, 41,203,130, 44, 47,201,138, 50,
+ 5,190,104, 38,147,138,136,172, 78,242,162, 36, 47, 39,130,233, 69, 81,148, 19, 76,150, 37,158,181,132,228,120, 31,211,104, 63,
+ 75,140, 9,152,148, 37, 93,215,201,159, 75,139, 95, 92,167,239, 64, 70,253, 66,205,122,238,213, 95,161,105, 54,220,255,240, 93,
+110,220,124, 46, 1,120,228, 77, 45, 39, 21,189,237,120,252,201,123,172,206,142,119,150, 55,106,236, 42,154, 90,192, 60, 33,186,
+148, 46,103, 32,147,206, 34, 70, 69,112,194, 18,200,140,104, 77,156,117, 66,167,115,142,224, 44, 74,201, 69, 79, 90,105,104, 5,
+222,166,177,104,176, 16,189, 0,109,184,140,130,101,136,159, 84,187, 0,158, 56,186, 77, 98,240,242,115, 5, 47, 2, 74,197, 51,
+ 19, 48, 53, 46,179,227, 56,133,228,153, 57,186, 73,150,177,221, 61,189,254, 2,104,107, 39,190, 38,209,205,164,152, 55,131,101,
+111,236,210,245, 51, 10,252,180, 42,244, 97, 20, 4, 15,248,216,224, 7, 27,149,149,231, 61,185, 94,118,185,238, 35, 34, 26, 17,
+127,234,172, 64, 87,178, 79,255,198, 15,254, 29, 38,139, 67,114,147, 37,253,135, 31, 39, 88,247, 63,124,135,213,249, 41,132, 32,
+137,136, 87,111,211, 47,143,217, 52, 45,121,102,120,240,206, 27,105,114, 87,160, 82,246, 69, 94,100, 4,231,192, 20,248,190, 69,
+ 87, 19, 50, 83,145,207,167,242,253, 78,231, 28,222,184,201,191,255,247,254, 46,189,213,212,221,134,246, 98,141,171,107,250,166,
+ 22,194,103,148,141,201,149,180, 91, 86, 74,225,157,136, 64, 3,154, 92,105,214,155, 13,251,135, 71, 84,147, 41, 79, 30,221,231,
+211,119,223,164,190, 56,167,171, 27, 17, 42,175, 86,216, 62,229, 89,244, 86, 22,148, 70,166, 60, 90,103,228,121,145, 62,139, 44,
+ 69, 4,139, 40, 26, 5,202,232,177,141,138, 74,206, 30, 17, 16,171,241,153,137,169, 49, 24,154, 40, 23,194, 56, 69, 66, 25, 50,
+109,210,106,140,145,200, 55, 90, 56,227, 23,119,233,187, 53, 98,140, 65,114, 33, 92,154,246, 14,141,231, 78,120,153, 50,106, 43,
+246, 77, 77,110, 28, 38,225,200,123,156,167,149,131,100,150,180,152, 31,254, 71,127,255, 15,218,122,141,214,134, 59,119,158,227,
+214,205, 3,166, 85, 78,221, 88, 30, 28,175,120,178,234,105,235, 30, 23, 28,175,253,198, 95,226,246,237, 91,188,246,149,219,124,
+122,220,112,246,224,174,188, 44, 67, 37,146,196, 62,227,107, 98, 68,168, 49, 63,186,198,205,151, 94,229,198, 75,175,112,253,206,
+ 11,156, 62,126, 66,196,239, 92, 8,151, 99, 82,227, 78,106,155, 82, 91,114,207, 46, 66, 86, 95, 2,209,196,203, 25,240,169, 74,
+247, 67,170,212,176, 18,136,140,212, 45,173, 52, 26, 48, 58, 82, 25,205,181,253,146,127,252,119,254, 61,238, 61,120,192,219, 31,
+124,202,211,243, 51,154,174, 77,227,118, 75,239, 44,109,111,105, 59,249,207, 62,200,120,211, 90,135, 77,202,111,231,124,178, 33,
+121,188,143, 56, 23,136, 90, 46,129,249,222, 62,183,238,188,200,205,231,158, 79, 15,155,116,164,104, 48,166,224,202,181,171,116,
+109,135,109,235, 47, 69, 87, 62, 43,248, 33, 29,232,183,110,221,230,254,195,251,169,235,141,151, 58,133, 65, 95,160, 47,141,224,
+213,184,251,150,137,187,216,252, 68,197, 29, 18, 3, 25,156,235, 69, 97,170, 21,206, 7,186,190,103,125,113, 66, 95, 47,147, 26,
+148,173,120, 7, 41,144,178, 60,151,110, 41,185, 15, 66,218,173, 87, 85, 53, 22, 13,219,136, 91,149,252,158,134,172,172, 70, 17,
+ 94,111,133,182,231, 67,192, 58, 65,199,186, 4,142, 25, 92, 15, 46, 56,140,145, 32,149, 16, 45,153,201, 83, 97,229, 19,240,199,
+109,227, 62, 99, 28,213,199, 58,189,140,211, 42,163, 48, 30, 21,117, 18, 94, 13,152, 82,159, 42,122,249,123,239, 29,214,202,139,
+ 93, 85, 5,193,203,126,111,224,145, 7, 34,214, 75,194, 93,223,185,145,152, 56, 88, 93, 98,178,209,181, 93, 77,212, 6, 23, 96,
+ 50,153,162, 12,148,211, 10,162, 88,115,124,242,192,102, 67,108,100,158,177, 60, 59,197, 91,217, 89,247,222,147,229,197,142, 34,
+190,199,246, 45,125,215, 18,131,163,109, 26, 20,208,182,146, 38,136,214,100, 58, 99,189, 90, 50,157,205,105,123,241,226,122, 39,
+191, 23,101,164,227,201,133,175,221,117, 22,231,123,154,213, 5, 89, 81,240,198,159,252, 51,238,254,242,103, 60,248,228, 93,232,
+ 54,220,190,117,139,201,254, 21,124, 90,191, 60,250,248, 61,150,103, 79,211, 69,236,100,156,157,114, 19,178, 50, 3, 45,249, 6,
+209, 11,113, 16,173, 18,227,223, 99,170,153,116, 69, 9, 91,107,178,156,168, 21,161,239, 80, 33,121,132, 83,113, 20,124, 32,203,
+ 11,121,166,179, 12,147, 23,163, 96,105, 0,223,171, 4, 97,209,227,101,158,194,163,162, 79,191,103,123,138,142,176,170,129, 4,
+166,205, 40,143, 87, 12,251,235, 92, 82,180,118,194,240,244, 16,112,180,141,185,186, 36,162, 83,207, 8,234,134, 67, 88, 4,123,
+ 82,204,139, 72, 53,147, 98, 38,132,164,228, 31, 82, 44, 83,238,130,218,166,235, 13,142, 1,217,241,134,113,181,181, 61,207,212,
+214,222, 55,140,100,147, 93, 75,103,178,146,168,246, 14, 89, 92,189,198,226,218, 45,190,246,107, 63,100,190, 88, 36,235,161, 23,
+177,175, 18,127,200,211, 79, 63,160,222,172, 48,218,176,127,237, 38,203,167,143,241,161, 71, 25,131, 65, 51, 89,236,211,173, 87,
+228, 85, 78,223, 54, 40, 34,222,118,168,244, 57, 13,163,243,114,111,143,122,121,142, 71,113,120,253, 22,127,235, 31,254,215,124,
+237, 55,127,200,107,223,253, 1, 63,255,241,191, 96,121,126, 76,232,107,112,242,174, 4, 13,202, 24, 38,243, 3,174,222,121, 9,
+149,132,144,121, 81, 81, 85, 51,154,182,198,246, 13,211,233,140,117, 93,163, 35,172,207,158, 82, 22, 21,117,189, 18,232,139,119,
+100,121,197,226,224,128, 44, 47, 36, 20,169, 44, 41,247, 22,152,106,134,169, 38,168, 92, 64, 90, 74, 25,242, 66,220, 77, 89,158,
+141,171,194,108,136,100,245,162,149,177,206,161, 18,113, 46, 12, 88,214, 16,200,242, 60,225,102,147,118, 43,136, 48,118,151, 88,
+122,121,210,243, 69, 93,216,151, 9,231,226,142,190,108,176, 11,235,228, 64,216,198, 43,171, 49,155, 3,165, 4,110, 86,148, 48,
+ 20, 6,189,195,121, 75, 86, 20,100, 42,137, 69,188,119, 92, 92,108,176, 55, 28,217,193,132,131,171, 11,138, 50,103,185,233, 89,
+175,106,108,168,232,172,229,222,241, 25,142, 57, 55, 94,250, 26,199,247,239,242,244,195,183,209,198,143,246, 2,141,132,137, 40,
+147,145,149, 21, 7,183, 95,226, 63,252,199,255, 13, 89, 81,209,219,158, 39, 15, 31,115,182,110,121,250,206, 79,233,187,142, 16,
+133,154,150, 21, 5, 93,219,142,170,246,221,250, 57,124, 73,244,107,216, 77,114,219,197,195,166, 42, 44,164,144,154,161,210,218,
+ 85,255, 74,247,168, 40,116, 32,207, 50,158,191,118,192, 63,252,189,191,204,135, 31,127,194,187,159,220,229, 98,189,161,237, 29,
+109,239,232,250, 30,235, 29, 54,117,235,206,185,241, 66, 15, 99, 40, 75, 28, 17,159,182, 23,136,195, 48,254,150,124,240,140, 91,
+ 47,188,196,222,254,193, 8, 25, 25, 44, 56, 42, 26,130,242,100,101,201,139, 95,125,141,207, 62,132,229,233, 83, 66, 84, 59, 15,
+201,238,223, 39, 37,167, 41,120,238,249, 59,220,189,251,105,122, 32,118, 5, 61,113,188,208, 73,190,230,164,143,150,207,211, 15,
+236,129,124, 28,117, 26,147,139,125, 35, 58,130, 23, 47,118,196, 83,215,107,148, 50,116,245,134,118,179, 36, 6, 39,135, 92,166,
+192,167,137,140, 50,163, 29,111,248,204,157, 11, 20,121,158,108,108,189, 88, 76,242, 20,247,234, 61,206, 75, 17, 24, 16, 5,173,
+117, 18, 9, 27, 92, 24, 29, 15, 33, 4, 17,213,164,255, 60, 20,119, 42, 81,235,138,178, 18, 50, 90,148,233,131,236, 4,183, 30,
+222,221,240,146, 33, 90, 52, 18, 41,139, 28, 8, 9, 7, 41,227,125,107, 59, 50, 99,232,250, 78, 66, 87, 34, 20,166,160,137, 46,
+185, 22,130,236,163,123, 1,195, 40,163,164,163, 26, 42,232,129,149,144,250, 87,141, 33, 32,106,252,168, 20,190,239,104,250,150,
+199, 79,159,114,116,184,143,181, 75,130,117,163,170,126, 62,157, 81,247, 29,101, 53,197,213,146,202,182, 92, 55,236,205,102,216,
+174,103,179,188, 96, 50,155,210,108,234,113,159,166,149,194,119, 82, 88,154,244,125,175,215,107,170,170,164,179,210,233,110,234,
+205, 96,145, 16,192,204, 14,250, 55,246,129,249,254, 76,198,223, 58, 99,125,113,206, 79,254,143,255, 69,246,246,101, 73,187, 57,
+231,239,253, 39,191,199,143, 94,127,137,255,225,143,222,160,109, 26,180, 86, 84,179, 61,116, 86, 82,150, 51,162, 23, 17,224,197,
+197, 41, 93,189,161,107,107, 97,191,163, 48, 69, 69,158,101,172,151, 23,104,165,201, 39,179, 20,109, 41,226,159,124, 50,163,111,
+106,209,221, 20, 37, 38,125, 71,133,150,136, 85,109, 68, 5,159, 37,145,157,235, 59,217,195, 78,167, 4, 39, 58, 22, 77,132,232,
+241,125,122, 78,148, 78,137, 91, 70,214, 70,113,187,183,150, 43, 12, 17, 75,142,153, 17,126, 75,112,132,180,134,242,105,226, 98,
+146, 6, 68,143, 99, 79,181, 83, 24,200,122,103, 23,170,181,221,207,139,126, 38,169,173, 35,168, 16, 4,123, 26, 83,113, 49,234,
+125, 92,114,152,248,203, 59,250, 1, 67, 10,248, 20,200, 49,232,144,212, 48, 49, 72,207,206,240, 39, 83, 49,146,229, 21, 24,195,
+244,240, 42,249,124,143, 96, 50,246,142,174,161, 76, 70,179,217,144, 38,189,227,121,146,105, 77, 32, 96,138,140, 24,146,205,181,
+ 42, 9, 24,190,246,205, 95,227,163, 55,127, 74,189, 60,101,115,126, 12, 65,145,151, 37, 62,244, 76,166,251,184, 96,113,125, 71,
+ 94,206,152, 95,191, 73,112,142,189,131, 3,154,190, 71,103, 57, 81,101,252,203,127,242,199, 76,247, 14,184,114,235, 5,238,191,
+255,150,176, 56,148,146,231,209, 6,188,238,121,242,224, 51, 94,254,238,175,139, 14, 41, 57, 35, 8,142,166,222, 96,180, 33,203,
+ 11,190,245,205,151,248,241, 31, 63, 0,109,232,154, 53,121, 94,176,184,126,133,107, 47,188,138,235, 59, 30,127,252, 14,121,189,
+ 33,134,158,152, 77,152, 45,246,184, 88,175,200,148,194,247, 61,221,234,156,220, 24, 86,167, 79,201,141, 73, 82,155,129, 31, 32,
+133,188, 8, 86,183,161, 90, 38, 43,164, 57, 73,124, 10,219,247,105,205, 19,208, 64,166, 53, 46,110,163,188,197,134,173, 46, 5,
+ 16,238, 82, 77,159,205, 66, 25,154,205, 1,207, 27,194, 51,211,167, 84,240,169, 24,228,142, 14, 17,157, 75, 65,231,156, 39,116,
+242,238,149, 85, 5, 10,250,102, 67,240,158, 76,155, 76,126, 80,111, 89, 45, 47, 88, 46,111,114, 95, 53,172, 27,143, 77, 41, 98,
+ 89,158, 19, 54, 53,205,122,205, 36,219,227,238, 39,143,216, 52,107, 94,248,214,247, 57,121,240, 25,193,245, 72,200,143, 60,184,
+160, 68,145,183,119,200, 55,127,244,183,200,202,169,140,124,187,134,174,217,160,179, 50, 17,173, 82,130, 80,100,100, 90,239,102,
+171, 15, 9, 82, 38,170,203,252,246,193,182,182, 83,253, 12,148, 58,183, 51,250, 31,108, 12, 3, 32, 96,232,218,132,197,173, 40,
+116,206, 87,111, 31,241,159,254,245,223,225,173,119,222,231,163,123,247, 88,215, 29,155,174,163,237,123, 58,219,211, 89,135, 75,
+126,232,221,110,209,123,143,141, 91, 40,140,115,142,222,246,233,247,185, 17, 37,168,203, 41,175,126,237,235, 44,246, 15,198,160,
+132,224,125,210, 13, 12,190,229,109,184,199,243,175,188,198,103, 49,178, 62, 63, 75,202,199, 93, 33,207, 24,171,197,173, 91,183,
+184,127,255,222,206, 97,160,158,137,220,228,210,255, 78,171, 20,151, 42,207,160,136,223,216, 90,250,198,157,143,218,174, 44,188,
+151, 78,179,111, 86,216,102,147, 24,222, 10,204, 96,203, 24,194,184,119,144,161,232, 49,184, 70,172, 84, 96, 19,113,175, 76, 63,
+ 94, 89,149, 88,235, 70,160,138,181,150,182,109, 37,236,103,231,115, 25, 31,236, 49,130, 85,158, 25,101, 50,161,182,169, 12,219,
+123,242, 92, 14, 90,235, 60, 58, 72,145, 50,138, 2, 83, 82,147,112,161, 21,133, 1,188, 37,154, 84,173,135,136,237,251, 81,197,
+ 60,144,168, 98,140,152,164, 21, 41, 39,229, 56, 26,140, 97, 8, 6,218,249,115,167,233,134,188,148,113, 71,156, 40,213,124,145,
+231, 76,166, 83, 90,231,104,187,142,229,114,195,180, 50, 56,219, 75,213,157, 23,180, 93, 55,230, 63,139, 64,174,160, 98,150,166,
+ 34, 25, 58,182,130,141, 53, 2,197,200, 76, 70,211,118,227, 5,144, 87, 21, 10, 40,136,248,190,199,197, 64, 85,148,232,244,157,
+ 5,165,169,138,130, 88, 41,154,166,145,117,135,247,156,158, 28, 99,187,158, 98, 50,161,179, 2,216,201,139, 10,173, 34,166,184,
+201,231, 93,206,113,132, 59, 47,220,225,222,253,159, 81, 78,166,228,213,132,194, 64,219, 53,244,237,138, 96,123,154,229, 90, 54,
+137, 74, 99, 55,141,140,128,171,146,122,179, 74, 23, 65,196,219, 22,116,134,170, 42, 76,111,211,164, 66,163,210,200,210, 90, 43,
+ 62,143,114, 66, 62,221, 35,120, 59, 34,110, 1,178,114, 34, 14, 3, 23,208, 89, 1,190, 79,153,211,253, 51,221,122, 42,226,181,
+ 76,227,134,127,143,183,219,145,243, 46, 71,223, 15, 90,138,212, 21,101, 89,114, 40, 40,157,252,246, 94, 86,139,121,177,163, 11,
+138,130,224,221,153, 84, 26, 99, 80,169, 80, 45, 10,233, 12,189,119,224, 18,173, 77,237,140,104, 71,184, 76,144,245, 84, 18,142,
+134,180,235, 29,236,174, 18,172,178, 5,226,196,200, 86,212, 58,252, 36,105,127, 62, 57,186,193,245, 59, 47,112,242,244, 17,122,
+ 50,161,107, 90, 38,121,197,100,190, 71, 84,242,220,102, 90, 99,135, 78, 57, 74,199,253,244,241, 35,124,178, 95,109,214,231,196,
+222,163,243,140, 55,127,242,207, 8,182,167, 44, 39,204,143,174, 98,219, 6, 83, 77, 81,141,193, 69,232,211,132, 55, 43, 74,250,
+182,198,213, 13, 93, 83,163,103, 51,174, 60,247, 34,143, 62,255,132,122,179,230,252,244,132,249,222, 30, 97, 8,159, 82,146,198,
+136,145,226,173, 62, 59,225,209,221,143,184,118,231, 69,209,129,116, 45,117, 83, 51,153,239,113,176,127,192,100, 50,149, 44,133,
+211, 99, 10,173, 8,197, 4,221,119, 60,190,127,143,168, 52,175,126,243, 59,224,191,202,197,147, 7,156,159, 61,197,247, 27,158,
+220, 59, 70,155, 92,208,209, 74, 83,205,246, 49,121,198,162,154, 16,187, 22,223,181,233, 60, 11, 99,225, 63,128,188, 6, 24,215,
+176, 99, 19, 93, 70, 68,103, 57, 33,233, 91, 98,210, 85, 13, 65, 51,131,248,122, 88, 69, 74,186,218,176,184, 18, 18,157,222, 9,
+ 79,218, 42,233,216, 70, 18,127, 73,168,217, 64, 9,244,222,203,179,229,135, 34, 51,236,228, 97, 52, 9,143,238,137,209,144,197,
+ 32, 35, 15,235, 29,103,231,199,124,240,145,225,202,181, 27, 84, 85, 69,211, 52,137,170,163,113, 73,184,212,186,137, 92,106,125,
+143, 15,129,107, 47,188,202,195, 95, 94,160, 50,201,157,213,131, 58,211, 24, 94,249,181,223, 98,122,112, 72, 93, 55,180,109,143,
+ 14, 13,143, 30, 63,150, 7,192,185, 45,175, 61,249, 6,141,210, 98, 15,218, 29, 81, 4, 46,237,216,135,203, 58,236, 84, 59, 3,
+128,198, 36, 33,129,218,193,153,234,144, 70,239, 70, 46, 33,165, 34,133,130,210,104,126,229,165,235,252,221, 31,253, 5,254,245,
+155,111,241,217,163, 71,212, 77, 71,107, 45,189,243,244,206,138, 48, 40,161, 69,157,115, 66, 7,139, 97,244,186, 59, 79, 26,215,
+ 8,164,196, 89, 47, 99,120,175, 8, 42, 99,239,240,128,219, 47,189, 76, 89, 85, 56,111,229,192,208, 26, 27,100, 66, 32,234,100,
+ 80, 33,133,221, 36, 33,199, 75,175,127,157,187,239,191,199,250,252, 84,210,174,118, 22, 49,121, 81,240,149, 87, 94,230,227,143,
+ 63, 22, 5,232, 51,240,140,173,239, 54,140,127,111,140,140,194, 51,163, 9,189, 35,230, 2,252, 48,202,226,209, 24, 37,182, 24,
+ 27, 60, 74, 73, 7, 61, 96, 83,187,166,198,182, 53, 42,248,113,172, 62,168,119, 51,165,177,189, 37,166,160, 14,149, 58, 26, 82,
+ 94,120, 8,162, 25, 24,148,192,195,216,122,179,217,164,189,117,113,105,205,224,131, 8, 32, 51, 35,157,242,152, 57, 16, 3,153,
+ 54, 34,114, 74,184, 85,107, 45, 65,107,156,149,110,201, 37, 71, 2,201,159, 28,189, 30, 97, 70, 42, 17,151,162,130, 34,215,226,
+107,198, 19,130,165,200, 75, 26,111, 41,243, 34, 77, 11,196, 82,147, 23, 57,125,234, 6,147,206,106, 84,174,135, 16, 8, 74, 22,
+130,163, 98, 62, 56,136, 26,165,195,152, 68, 55,124, 27, 93,215,161,215,107, 38,139, 67,172,237,105, 90,141,210, 19, 22,243, 61,
+202,178,148,139, 91,233, 84,216,165, 4,191, 16,201,203,146, 34,203,136, 70, 49,153, 76, 57, 57,126, 2, 38,103,146, 25,218,182,
+193,232, 28,239,122, 34,233,185,235, 58,116,166, 9,126,208,124, 72, 49,101,116, 70, 81, 85,244,245,154,197,222, 62,139,197, 30,
+171,213, 90,188,173, 90, 49,157, 77,232, 92,148,203, 50,173, 36, 98,132,197,254, 17,214,101,220,221, 88,230,133,161,200, 69, 44,
+151, 85, 21,235,186, 97,125,113, 33, 17,148,222,129, 50, 56,107,177,189,167,216,155, 19, 77, 78,191,217,160,243, 60,137, 72,193,
+247, 94,158,149,180,175, 52, 69, 37,163, 92,215,201,120, 61, 61, 39,209, 7, 92,179,193,148, 19, 17,215,209, 67, 94,146, 21, 5,
+182,174, 69,192,228,122,217,137,218, 94,216,230,166,148, 51,100, 32, 69,170,173, 80, 50,120, 71, 72,224, 27,231,211,133, 54, 28,
+168,131, 24,119, 48,141,166,201,143, 8,183, 18, 38, 59,129,154, 98, 34,254,177,179,187, 15,131,162, 35,147,194, 28,155, 46,101,
+ 21, 81, 74,214,114, 74, 41,148,217,190,167,158, 40,239,162, 15,224,211,110, 53, 36,200,211, 78, 50,221, 56,130,213, 59, 9,120,
+105,236, 30,188, 56,105, 48, 18,229,123,245,246, 75,204, 15,175,178, 60, 59, 97, 54, 63, 68,103, 25, 7, 47,221,230,236,244,148,
+253,195, 35, 33, 2,196, 32,163,101, 45,206,139, 1,238,114,245,232,136,186,204,217, 63, 56, 66,103,138,243,167,143,232,218, 30,
+179,119,128,243,158, 60, 93, 77,155,122, 13, 23,199,152,114, 74,153,103,244,227, 4,209,211, 93, 92,200,250, 77, 41,166,179, 57,
+139,163,171,114, 46, 38, 59,231, 24, 14, 53, 89, 80, 78, 29, 81, 25, 22, 71, 87,201,242,140,227,199,143,121,243,159,255, 19,170,
+131,107, 60,247,149,175,114,120,227, 38,205,209, 85,190,241,157,239,161,180,226,232,232,128,247,222,121,155,199, 31,188,201,170,
+174,185,115,231, 5, 30,126,238,217, 59,186,134,137,138,139,243, 11,206,158, 60,226,244,209,125, 76,140,216,190, 67,103, 18, 23,
+ 29, 99,196,119, 27,172,209,168,124,159,162,156, 80, 28, 28,145,153,156,199, 31,190,157,138,178,132,155, 69,161, 85, 42, 34,181,
+ 34, 6,143, 11,150,188, 40, 32, 10,224, 39,216,128,245, 81, 84,254,206, 75, 65, 31, 44, 24, 41,224,213, 96,173,212, 6, 51, 92,
+215, 81,246,251,113, 88,171,196, 32,231, 68,220, 22,121,151, 46,245, 65,111, 17,116, 18, 60, 2,153,161,152,204, 40, 38,123,172,
+ 47, 78,100,189, 20,163, 8, 20,147, 72, 52, 4,105,220, 50,239, 44, 38,203,177,125,131,235, 29,231, 39, 79, 8,193,137, 96, 37,
+ 37,108, 13,150,148,224, 29,245,122, 35, 87,133, 82,132,232, 40, 23, 7,163,245, 7, 45,190, 83,101,114,102,215,158,227,206,107,
+223, 98,111,255,128,179,179, 53, 39,143,239,179, 89,159, 99,219, 22,215,181, 34, 86, 24,179,166,227, 37,206,242,110,216, 75, 24,
+147,213,182,106,210, 81, 85,184, 19,103, 56, 64, 82,116,138, 13,221, 85,156, 10,164, 65, 38, 9,185, 86,148, 38,227, 55,191,241,
+ 60,127,245,215,191,195, 79,126,246, 11, 30, 30, 63,165,238,172,236,207,221, 96, 87, 11,116,105,103, 19,119,168,111,206, 58,172,
+149,125,115,103,163,236,208, 93, 24,201,107, 62, 42,138,233,130, 23, 95,121, 29, 93,108,119,115, 34,126, 9,163,162,187,239,123,
+249,179,166,162,205,167, 73,131,140,155,114,238,188,252, 10,159,190,215, 38, 32,132,188,208,215,174,221,224,198,141, 91,188,241,
+214,207, 71,235,218,174,248, 66,118,111, 91, 91,204,240,208,120,239,209, 42, 75,193, 61, 50,186,201,115, 61,114,199,197, 77, 32,
+ 93,170,243,253, 54, 32,196, 54, 4, 55,120, 55,185,100, 21,138, 49,138, 61, 58, 29, 14,104,131,242,126, 7,224,162,211, 68, 36,
+237, 42,147,127, 61,238,124,231, 38,229,189,143,153, 98,195,254, 59,141,207,195,128, 32,141,208,187, 30,149,108,129,195, 63, 71,
+167, 42,185,222,244,105,103, 94,226,189, 70, 41, 55, 50,146,213,142,178, 80,199, 64,166, 36, 78,210, 24, 65,189, 42,165, 36, 14,
+145,116, 33, 32, 69,141, 49, 25,174,173,201,114, 77, 89,230,244,189, 31,121,248, 46, 14,249,198,189, 92,236,163, 23,126,187, 50,
+ 82,227,190, 85, 10, 44,103, 59, 92,223,226,209,244,105,156, 63,159, 77,169,235, 90, 4, 57, 99,244,109, 78,223,116,100,101, 73,
+168,229, 80,148,157,114, 46,206,138,222,178,222,172,152, 77,231, 16, 3,235,181,199,104, 35, 54,177,224,241,214, 50,219,147,169,
+ 80,219,117,148, 89, 54,130,137,170,249, 2, 61,157,145, 25,195,190,201, 88, 47,151,201,250,164, 33, 4,108,232,153, 76,230, 68,
+173,200,179,130,182,174, 57, 59, 57,193,114, 5, 61, 45,121,120,239, 83,166, 69, 73,116, 82, 68, 76,167, 83,234,205, 26,235, 28,
+ 89,154,158, 77, 39, 21,109, 93,227,194, 18,141,134,178, 66, 35,252,124,147, 23, 2,183, 34,226,189, 18, 74, 37,242,215, 16, 13,
+ 69, 89, 98,187, 14,101, 52, 58,203,112,182, 69,117,129, 0, 20, 70,211, 55, 29, 42,234,164,242,150,117,145,174,166,178,130, 81,
+ 98,111,199,203, 30, 61, 58, 55, 10,138,242,178, 74,217, 21, 74,138,195, 29,161,210, 54,131, 34, 36, 23,132, 20,161,193, 89,176,
+ 18,206,237,147,170, 94, 33,197,192,176, 19,143,131,202, 89,128,155, 99, 62,121,140, 91,219,227,229,228,200, 48, 78,208,198,233,
+ 64,186, 24,131, 26, 14,242,237, 25, 23,119,224, 91,227, 59, 77,130,244,144, 66,178,162,230,224,214,243,232,217,130,213, 90,236,
+ 95,117, 93,179, 56, 56,228,193,199, 31, 50,153,237, 49, 63,186, 62, 34,164, 65,177,127,112, 64, 91, 55, 16, 21, 23, 39, 79, 57,
+189,184,224,112,177,199,143,126,247,119,249,222,215, 95,230,127,253,167,255,156, 55,255,228,159,115,118,124, 76,110, 10, 86,231,
+167,168, 24, 80,125, 39, 46,139, 76,210,252,242,114, 74, 87,175,232,214,107,208, 6,151,154, 14,231,182,225, 41,145, 72,119,113,
+202, 47,255,236, 79,152, 31, 28,114,116,227, 57, 92,219, 99,140,226,124,121,142,111,123, 38,179, 25, 46, 4,170,194,112,255,189,
+159,241,240,227,138,124, 50,225,231,255,226,255,226,187,191,249,219,132, 31,252, 69, 30,222,253,132,186,243, 76,170, 9,159,191,
+255, 22,147,217,158,232,167, 92,207,131, 15,222,165,111, 86, 76,247,246,165,184,110,164, 88,115,193, 19,108, 35,194,105,215,227,
+250, 6, 93, 78,169,235,134,201, 94,193,213,231, 95,230,244,222,199, 50,177, 12, 1,157,153,209,143, 31,163, 98,255,250, 45, 54,
+171, 11,156,181,152,172,164,172, 38, 28, 93,187,150, 82, 55, 97,115,126,130,109, 54, 82, 56,244, 29, 90,103,194,108,239, 54,224,
+210,244, 38,203,100,247,158,154,231, 65,247, 17,113,233, 78, 96, 20,109,142,148,200,212,208,128,168,238,163,146,105, 72,150,222,
+137,220,104,122,103, 49, 90,227,108,135,114,201,142,153,118,241,153,117, 22,147,231, 18,241, 25, 35,189,237,185, 56, 59, 27, 17,
+123,243,197, 62, 93, 39,163,103,147, 14,234,188, 42, 96, 37, 73, 93,179,131, 35,130, 2,147, 41,188,151,253,188,201, 74,190,254,
+131,191,204,222,193,129,204,250,219, 53,245,250,140,174,149,180, 42, 63, 28, 84,105,151, 48,140,147, 92, 8,151,246, 13,195, 62,
+ 44, 68,208, 81, 93, 2,213, 12, 42,246, 1, 47, 57, 92, 94,227,152,126,184,128,140, 38,250,128, 73,222,232, 92,121,254,210,183,
+ 95,230,183,190,245, 85,126,242,231, 63,227,201,233, 9,117, 47,222,243,206, 90,185,212,173,160, 57,189,119,120,151,130, 84,162,
+ 8, 41,172,115,216,222,211,245, 46,197,164, 58,130,219,134, 71, 22,147, 61, 94,120,245,117, 24,226, 51,147,246, 33,203, 76,234,
+200,212, 37, 74,208,208, 77,196, 97,140,230,229,210,213,202,240,237,239,253, 6,239,191,245, 38, 90, 43,158,187,115,135,243,243,
+115,222,120,235,231, 56,103,199,139,239,210,142, 38,170, 52, 58,122, 54,223, 30,162, 26,246,127,134, 44,106,148, 15, 68,207,184,
+174, 32,253,255,114,157,209,245, 29,202, 54,120,219,143, 15,222,238,197, 43, 47, 19,146,129, 14,219, 16,145, 36,114,116,130, 56,
+146,181, 77, 31,200,203, 28,149, 4,123,206,187,237,120, 52, 72,246,182,245, 29,244,137, 63,111, 51, 98,234, 78,117,178,192,141,
+161, 10, 59, 34, 34,249,108, 53,125,111,153, 76, 12,155,218,147,231, 37, 33, 56,116, 52, 18,198,144, 16, 59, 67,245,107,148,102,
+ 54,157, 74,119, 27, 60, 74,103,108,234,134,162, 16, 75, 79, 76, 69,142, 82,138,206, 89,124,136,148,101,158,124,202, 34,236,180,
+206, 74,170,158, 23, 10,160,140,222, 24,173, 42, 32,197,238, 64,255,146,122, 34, 82,102,197,184,151,117, 38, 77, 44,214, 53,101,
+145, 97, 93,143,235,123,202,178,146,162,176,146,245, 84,189, 89,227,157, 64,125,116, 12,180,169,216,173,202,146,174, 93,163, 77,
+193,193,213,107, 4,160,239, 58,209,177, 32,227,245,106, 90, 73,174, 61, 2, 40, 9,198,160,179,146,255,252,191,253,239,248,249,
+ 31,255, 51,254,244, 95,254,145, 8,214,188,195, 7, 77,136,158,197,222, 62,182,109,200,116,134,119, 45, 23,199, 79, 88,157, 93,
+112,239, 73,141,114,142,197, 98,159,183,255,236,199,204, 22,251,244,109,139,221,172, 49, 69, 65, 62,153, 98, 55, 27,138,233,140,
+222, 89,116, 8, 20,113, 34, 29,104, 83, 19,163, 99,114,112, 69,158,165,190,163,247, 14, 92,130,199,132,128, 46, 39,168,104,136,
+198,144, 77, 11,201,138, 70,130, 42,212, 64, 94, 76, 69,112,182,216,147,231,205,121, 92,240,224, 44,193, 9,166, 83,246,221, 30,
+111, 59,140, 86,232,172, 16,190,126, 90,227, 13,138,226,232, 29, 58,203, 83,119,239,112,125, 75,116, 1,163, 21,190,107,241,151,
+ 36,202,140,174,146,160, 6, 0,137, 26,237, 82,146,230, 21, 70, 84,237,144,121, 64, 4, 53,236,216, 47,217,226,146,246,104, 80,
+188,234, 65,166,183, 5,219,124,193,237,163,212, 37,224,166, 34, 1,106,140,225,240,214,115,204,110,220, 98,115,242,132,235, 47,
+188, 74,177,216,103,249,232, 1,174,239,201,243,130,114, 54, 35, 6,207,242,228,152,114, 34, 73,123, 81,105, 38,179, 41,103,109,
+205,197,241, 67, 50, 13, 55, 94,122,141,175,255,214,143,248,213, 87,175, 48,191,243, 50,255,253,147, 83,138,217,125, 78, 62,255,
+ 72,214, 63,121,193,252,106, 70,104, 55, 44, 79,159,208, 36,129, 98, 57,219, 67,231,149,104, 67,172, 37,203,115,138,170,196,104,
+ 41,242,108,215,115,247,189,119, 56,188,113,155,197,108, 74, 80,154,165, 63, 38,159,204, 56,212,154,207,223,123,139, 96, 59,170,
+195, 43,248,174,166,111, 26,174,238, 31,225, 81,196,174,230,173,159,254, 9, 79, 30,223, 99,179, 92,115,254,240, 83,113, 0, 52,
+ 29,171,211, 99,153,100,205,246,216, 91,236,211, 52, 23, 20,101,142,142, 21,209, 7,154,245,121,138, 14, 55, 20, 69,137,183, 29,
+118,185,196, 21, 45, 69, 89,176,172,215, 28, 92,187,129,201, 43,156, 93,146,231, 89, 10,104,114,228,211, 57,123, 87,174,179,218,
+ 52,152,162, 16,205,144,235,105, 87, 61,247, 87,231,204,174,220,192,152,140, 43, 55,158,231,241,231, 31,209, 53,205,104,171, 46,
+247,175,160, 54, 25,120,209,121,216,182, 29, 27, 21,239,182, 81,201, 36,173,213,136,185, 77, 28, 9,209,139, 57,225,123, 88, 11,
+ 74, 51, 63,188,138,235, 58,218,174,147,201,128,120,209,137, 49, 80,228,197,152,191,224,157, 76, 38, 50,103,123,138,178, 74,138,
+209,136, 11, 30,229, 68,221, 13,208,157,244,100,229,132,178,154,140,151,145,182, 33,117,247, 29, 89,150,147, 77,102,216,149, 67,
+ 43, 15,153,230,240,165,175,178,119,253, 38, 93,211, 18, 9,156,159, 29,167,156,104,141,119, 30,215,181,226,197, 75, 88,189,173,
+ 71,239,139,106,246, 24,159,137, 96,221, 65,204,142,248,188, 52,118, 85, 59,216,167, 44,117,236, 25, 74, 70,120, 70, 83,233,200,
+239,124,251,235,252,234,107, 47,240,227,127,253, 6, 39,231, 23,212, 86, 70,149, 93, 26,223,202, 47, 17,114,141, 23,186,247,216,
+224,113,214,210,247, 61, 93,215,139,128, 46, 68,188,143, 73, 12,165,153,204, 15,120,254,229, 87, 65,103, 35, 54,115,248,153, 92,
+242,154,238,166,156, 41,149, 66, 85,180, 78, 10, 76, 18,224, 64, 2, 80,110,222,188,197, 43, 47,188,200,219,111,255,146,247, 63,
+120,159,166, 89, 75, 37, 10,151,186,241, 93, 33,221, 86, 45, 25, 71,166,251, 48,254,210, 70,141, 93,198,144, 92,164, 52,163, 2,
+ 28,133,176,138,187, 6,111,187,241,243,189,132,245, 77,246, 60,177,124,196,113, 31, 63, 70,230, 42, 9,198, 25,108, 74, 74,107,
+ 76,250, 94,131, 19, 92,175, 31, 83,219, 96, 82, 78, 40,138, 41, 69,145, 39,129,157,197, 58,143, 9, 89, 18, 61,169,109,250, 94,
+ 98,159, 75, 76, 34, 99,154, 95, 85, 85, 88,103, 89,215, 46,141,200,183,246,200,209,118,167, 34, 89, 38,159,203,100,182, 79,219,
+ 54,156,158, 95, 80,228, 66,115, 19,193, 18,152, 44,167,222, 52, 96, 36, 46, 54,203, 50,177, 39, 70,228,187, 78,147,131, 1, 63,
+169,148, 30,253,249,234,153,116,180,193, 35,139, 74, 41, 81, 49,226,209,228, 64, 52, 74,194, 31, 14, 22,163,227, 99,248,115, 74,
+218,157,128,101, 68, 32, 35,234,127, 23, 35, 69, 81,224,108,143,201, 75,178,188,196,152, 12,219,247,104, 34,157,237,100,220,105,
+ 61,237,102, 13, 90,227,243,156,216,247, 76,167,123, 28,220,124,158,135, 23, 1,125,235,101, 50, 35, 65, 53,104, 45,221,140,117,
+100,123, 19,202,131, 5,237,234,148, 44,155, 18,154, 53,203, 39,247,249,249, 79, 26,126,237,123,223,224,218,237,231,120,242,240,
+ 51,166,199, 2,237,153, 92,185, 66, 83,215,226,122,169, 38,212,155, 13,224,164,216,212, 25,237,122, 73, 94,230,228,249, 28,147,
+ 85,180,205,169,248,168,123, 75, 94, 85,178, 46, 75,223,143,237, 58, 76,102,232,235,150,201,254, 2, 91, 55, 4, 21, 49,121, 70,
+ 81,150,178, 2,219,172, 19, 35,163,199,118, 77,226, 44, 10,168,197,183, 50,221, 32,121,211,125,240, 24, 72, 46, 15, 57,103, 84,
+112,194, 91, 0,148,115,152,164,192, 15, 56, 84,212,226,249, 86,131, 69, 76,143, 0,146,113,138, 20,197, 22,154, 37, 37,181, 75,
+ 10,114,162,219,166, 81,142,108,236, 45, 3,227,146,131, 37,237, 83,135,169, 84,220,217,241,127,169,152,106,107,222,217,118,114,
+ 8,191,255,224,197,175, 9, 86,181,200, 89,249,192,106,185,162,176, 61,235,179, 99, 76, 81,162,140, 97,125,118,198,163, 79, 63,
+230,224,230, 45,218,122,133, 49,154,253,120,136,214, 50,193, 57,125,120, 31,215,247,204, 15,175,243,193,123,159,203,132, 40, 26,
+190,254, 27,191,195,189,255,233,127,148,212, 72,219,210,156, 62,102, 54,159, 19,141, 88, 42,189,179, 84,243, 61,186,182, 37,116,
+231,236, 29, 94, 35,186, 62,229,138,151, 40,109, 56,190,119,151,211, 71, 15,184,118,227, 22,235,139, 11, 62,254,248, 67,174, 30,
+ 93,197,219,142,227,251,159, 82, 47,207, 40,103,251, 20,211, 25,231,199, 79,184,114,231,121,138, 98,194,227,187, 31,145,149, 37,
+179,163, 43,168,182,229,241, 39,239,179, 57,123, 58,134, 47,133,190, 39,248,158,102, 89,227,250,154,213,233,147,148,134,105,209,
+232,196,120, 7,103, 27,202,249, 62, 49, 56,114, 3, 69, 49,197,111,106, 54,231,167,228,213,132,122,189, 38, 95,236,211,119,155,
+212,217, 71,242,106, 66, 83, 55, 52,245, 93,180,138,184, 32,194, 77,103, 59,116,150,227,173,149, 38,197,228, 60,168, 87,204,175,
+221,230, 32,203,201, 51,195,163,187, 31, 81,106,205,166,105, 48,229,148,201,193, 30,251,121,198,249,147,135,233, 29,247,232,129,
+227,158,222,121,159,166,155, 62,132, 75,107, 86,121,182, 50,170,197, 2,147, 27,154,149, 76,176,134,251,114,120, 46,109,215,146,
+151, 69,210, 17,201, 26, 55,243,174,151, 17,153, 78,162,142, 40,187,205, 76, 39, 54,120, 12, 16,253,184, 15,202,139,156,233,116,
+ 70,215,214, 18, 91,231, 28,211,253, 3, 46,214, 75,162, 50,228,229,156, 87,191,251,125,136,145,174, 94,177, 90, 45, 89, 47,207,
+119,242,184,165, 83,223,221, 31, 12,187,223, 81,245, 30,183, 23,210,229,209,172,122, 6,204,162,198,204,111,118, 16,176, 49,141,
+139,115, 45,163, 96,173, 2,149,134, 31,253,234,107,124,227,165,155,252, 63, 63,251, 5,199,231, 75,218,116,137,143, 29,186,243,
+ 35,137,203, 37,155,154, 79,236,108,235, 44, 93,223,143, 0, 26,231, 60, 62,113,220, 81,138,233,222, 33, 47,190,250, 58,166, 40,
+ 70,108,173, 26,119,197, 97, 20,246, 13, 97, 30,195,139,107,173,197,107, 77,151, 58, 17,147,246,104,218, 40,222,255,232, 35,206,
+143,143, 57,121,250, 68,208,172, 33, 25, 59,241, 59,182, 8, 70,133,238,128, 54,189,100,169, 8,106, 75,239, 75,151,176, 73,118,
+ 58, 83,228, 73,113, 26,100,135,212,247, 68,215, 17,146,126,226,217,220,231,221,159,121,152,140,236, 68, 99,165, 75,219,164,121,
+ 82, 82,130,166,239,220,104, 13, 90, 16,171, 99, 28,105,114, 28, 25,163, 69,160,150,145, 44, 76, 34, 54, 11,131,127,126, 7,198,
+ 16, 19,118, 52, 36,205,128,243,158,243,243, 53, 81, 23,162, 54, 31,196,133, 81, 95,210, 96,164,108, 45,186,206,209,116, 23,148,
+ 69,206,222, 98, 38, 1, 41, 49,160,117,206, 16,212,187,183,191,160,235, 59,233,192,245, 54,210,179,200,114,177,219,245, 66,125,
+ 26,138,169,109,245, 61,228,154,196,113,228, 63, 20, 85, 33,133, 62, 40,165,241, 86,209,183,138,144,121,234,186, 96, 50, 21, 75,
+ 95,158, 44, 42,222, 58,242,201, 68,226, 94, 11, 89, 95,204,230, 19, 17,130,134,136,239, 26, 52,162,103, 8,108,198,149,134, 41,
+ 74,218,205,122, 28,249, 85,213,132,195,107,215, 68, 53,139, 98,255,230,109,154, 77, 13,222,147,103, 21,101, 9, 94, 41,170, 73,
+201,115, 55,111,176,152,237,113,245,202,117,170, 42, 99, 58,157,210,245,150,201, 12, 96,195,241,219,111,178,167, 12,207, 31, 29,
+242,254, 7,239,162,179,140,229,106, 45, 84, 35,167, 48,121, 65, 81, 58,108,221,163,156, 99,179, 57, 37, 83, 17, 91,247,244, 62,
+ 82, 76,231, 68, 47,211,173,114,239, 0, 85, 84, 52,245,154,204,128,206, 10,242, 73, 37,221,114, 85, 98,173,199,148, 21, 49,138,
+111,184, 61, 63,195,187,142,124,190, 64, 89, 75,223,108,208, 69, 65,244,160,243,156,232, 28,249,100,134,201,139,132, 80,214,100,
+222, 74,162, 87, 18,186,129,136, 5,163,119,105,167,169,229, 45,218,161,116,237,146, 7, 7,112, 85, 24,248,117,218, 80,236, 29,
+146,229, 57, 54,229, 10,204,102,115,121,127,251, 78, 86, 5,232,145,139,176,155,176,198, 86,233,178,179,150, 81, 91, 16,212,176,
+ 74, 28, 69,191,113,220,221,203,152, 63,185, 89,130,128,238,181, 82,148, 7,215,176,109,205,139,191,242, 45, 62,255,229,155, 66,
+ 90,244, 29, 89, 54,167,174,123,202, 16, 81, 24, 44,158, 95,252,203,127,202, 55,127,248, 35,174,191,248, 10, 23,199, 79, 57,123,
+252, 0, 85, 84,204, 38, 21,231, 39, 39,168,224,200,202,130,102,189,230,157, 55, 62, 96,113,116,192,100, 58,167, 71,166, 70,155,
+ 51, 79, 94,228,180,117, 67, 49,147,207,169,156,204,112,182, 23, 81,161, 87,244,205, 10,147, 21,180,155,154, 96,206, 8,109,205,
+187,255,239,143,137, 94, 88,236,222,119, 76,247, 14, 56, 59,125, 66, 94, 78,152,237, 29,176, 60,126,194,116,230,105,235,134,253,
+107,183,233, 55, 27, 84,166,152, 46, 22, 88,231, 56,127,114, 76,166,100,202, 72,242,175,120, 47, 49,150, 33,126,235,103,147, 0,
+ 0, 32, 0, 73, 68, 65, 84,145,241, 66, 47, 83, 55,235, 3,173,247, 18,143, 92, 77,136, 86,180, 36,193, 73, 86,133,202, 12,218,
+ 59, 40, 52,186,207,209, 40,234,211, 39, 84,211,153, 56,117, 38, 51,170,204,224,162, 34, 79,130, 92,219, 53,204,247, 15,101,130,
+231, 39, 41, 22,184,166, 62, 57,134,225,156,246,142,147,205,146,217,124,159,163,219, 47,210,110,150, 20,243, 25, 6,133,239, 91,
+124,121,192,244,232, 26,205,217, 9, 33,133, 30,133,116,207,146, 66,150,134,103, 35, 38, 33, 53, 73,255,161,148, 65,101, 37,117,
+221, 18,130, 5, 47, 40,229,129, 34, 24,135,230,201, 90,178,114, 2, 78,161, 99, 36, 11, 78, 48,121, 58,203, 8,174, 79, 88, 76,
+233,194,108,218, 57, 5, 31,164, 74, 67, 49,157,207, 88, 28,236,209,187,142,102,179,130,232,201,171,169, 96, 42,209,220,249,198,
+247, 80,121,133,237, 90,188,214, 50,198, 14,113,199, 56, 47,201, 53, 90,105, 73, 2, 75,151,176, 74,132,167,225, 2, 28, 46,191,
+225,178,215, 73, 73, 28,158, 25,175,135,103,140,253, 99,230, 91,234,148, 53,145, 60, 6,254,202,175,125,141, 87,111, 94,229,207,
+223,120,139,211,243, 37,173,243, 88,231,147, 40,110,184,208,229, 2, 23, 17,220,224,137,246,116, 86,178,207,219, 86,126,245, 54,
+161,252,162,248, 44,103,139, 67,158,255,202,171, 40,147, 39,144,137,194,169, 65, 97, 26,198, 76,242,203, 62,237,237,203, 63, 8,
+253, 68, 81,158, 68,101, 41, 84,225,224,234, 85,154,174,195,159,157,226,172,144,224, 37,248,101, 11,154, 25,184,248, 90, 15,158,
+126,189, 3, 60, 48,137, 80,149,246,212,128,245,110,228,130, 15,209,109,193, 57,202, 76, 83,119,237, 54,130,240,223,240,127,187,
+ 76,129,225,187,113,206, 97,244,206,119,160, 52, 70,169, 49, 83,219, 90,187,165,132, 13, 63, 51, 34,236,176, 93, 75,112,158,162,
+ 44, 49, 69,150, 14, 71, 81,153,102,137,181, 62,216,210, 66,240,137, 84,231,197, 51,171, 4,185,218, 39, 46,187,210,195,103,172,
+ 47,157,170, 49,249,125, 5,145,171,137,193,211, 54,109,218,253,217, 17,196,227, 98, 36,246, 93,210,102, 4,130, 11, 99,238,124,
+212,194,179, 47, 39, 21,125,107, 89,175,219,157,176,133,203,120,200,241, 32, 87,105,175, 91,228, 56,140,168,110,181, 22, 11, 86,
+140,212,117,141, 41, 36, 66,213,118, 34,208,243,222,210,180, 66, 64,235,109, 47,140,252,245, 5,104, 67, 53,157, 97,178,146,166,
+105, 89, 44,166,116, 93, 77,179, 92, 10,104, 36, 69, 74, 18,163,140,152,163,199,181, 45, 89, 89, 81,100, 57,139,197, 33, 83, 19,
+184,121,109,159,151,255,202,143,184,121,253, 10, 85, 53,225,236,244,148, 7, 15, 30,240,244,244,148,183,127,249, 11, 30, 63,126,
+194,197,122, 69,151,128, 35, 89, 94,224, 81,216,118,195,164,154,112, 84, 85,108,186, 14,242,156,182,235, 8,182, 97,243,244, 33,
+138, 64,187, 90, 82,149, 5,161,235,105, 92,143, 34,144,103,133,136, 45, 21,162,169,233, 91,178,178, 36, 43, 43,130,202,201,139,
+ 10,215,247,100,101,142,106, 35,209, 54,226,205,159, 78,112,125,143,201, 53, 89, 54,167, 44, 43, 86,155, 53,198,228,216, 70,254,
+251,232, 83, 99,224, 3,125, 16,157, 73,244, 33,229,130, 27, 84,148, 67,116,240, 36, 71, 21,183,120,217, 24, 19,113, 49, 38, 60,
+103,216, 74,204,119, 9,114,218, 48, 59,186,138, 79,174, 14, 83,150, 20, 38,195,246, 22, 99,114,178, 89, 65, 17,231,184,122,141,
+247,189,124,231, 73,168,183,203,143,103, 87,185,126,169, 27,223,157,173,139,198, 97, 36,108, 2,154, 48,230,163,155,168,136, 89,
+ 69,145, 23,152,178,226,209,103,159, 11, 3,221, 59,206,238,223,103,249,248, 49, 58,207,113, 77, 75, 8,158, 98, 58,193,118, 45,
+239,253,249, 79, 56,189,255, 57,251, 55,238, 80, 78, 38,116, 93,205,253, 15,223,193,117, 27,166,211, 25,127,246,135,255, 27, 95,
+253,238,111,114,116,227, 57,178,204, 80,204, 22, 28, 46, 14,248,232,211, 15,241,222, 51,223,191,194,242,233, 35, 92,221, 80,237,
+205,105,235, 84,196, 16, 41,102, 11, 22, 87,142, 88, 47,151,248,213,138,216,119,252,248,127,255,159, 49,153, 32,130,171,178,164,
+ 42, 14, 56,125,122,159,249,209, 85,192,177, 58,125, 66,166, 21,182,109, 41,231, 11,178, 34,163,113,176,126,248,153,196,192,102,
+ 5, 58,207,132,243,129,193,246,141, 48, 9, 18,253, 13, 43,161, 74, 33,207, 69,152,171, 21, 89,169,133,182,215, 59, 84, 89,162,
+130,176, 38,242, 65,195,148, 11,207, 98,178,191,143, 15,112,176,191, 79,125,113,198,100, 49,199,118, 22,227, 17, 30,188,109, 41,
+230,115, 80,153,112, 67,240,184,214, 82,204,166,216,190, 99,178, 56,144,130, 63, 70,130,237, 40,138, 18,235,122, 46,158, 62,144,
+226,249,202, 45,150, 39,143,137, 26,234,139, 51, 14,174,222, 64, 21, 83,150,247, 62,148,169,204,240, 61, 15,162,239, 49, 88,204,
+108,207,111, 34, 89, 53,197,118, 29,190,171, 9, 33,146, 23,165, 56,205,124, 0, 31, 49,166, 20, 1,118,140,116,109,195,245,231,
+158,103,185,188, 32, 3,112,182, 39,207,115,124,155, 82,140, 70,230,178, 92, 2,193,121,154,186,230,234,205,155, 20, 85,197,141,
+235, 11,188,179,172, 46,206,133,139,107,114,136, 80,236, 31,242,252,107,223,192,228, 57,206, 89,234,141,140,217, 69,233,157, 20,
+238, 68,220,224, 5, 38,224,113,104, 50, 66,144,238,207,164, 17,244, 32, 44, 24,254,208,121,150,225,158,205,102, 31,168, 59,195,
+152,219,139,178, 80,167, 49,132, 81,145, 34, 51,252,238,247,191,193,203,215, 15,249,233,219,239,114,124,177,150, 93,184, 31, 46,
+245,173, 48,206,122, 47,248, 83,239,101,204, 27,124,218,175, 91,186,222,210,119, 78,226, 94, 19, 23, 66,105,205,116,126,196, 43,
+175,127, 93, 68, 64, 32,182, 44, 32,186, 33,157, 42,209,219, 50,177, 97,149,101, 65, 8,158,222,246,228,153,128, 40, 38,149,248,
+159, 7, 81,222,174, 15, 54,160,184,241,220,109,130,247,172, 47,206,240,110,184,216,253, 14, 57,110,123,201,199, 4,130, 25,198,
+124,146,238, 22, 68,196,152,132,143,104,177,103,121,229, 71,107, 83,149, 27,214,203,243,157, 49,208,151,231, 60,147, 82,221,118,
+ 67,123, 6,200, 79, 8, 17,103,211, 5,236, 35,121,110, 80, 90, 44,109, 38,217,246,134, 88, 92,175, 52,166,170,200,242,156,178,
+ 40, 83,101, 10,222,249,203,252,108,173,200,116,158, 72,131, 73, 45,140, 32, 38, 93,114, 29,216,190, 39,102, 85, 42,156,134,174,
+222,143,107,130, 33,201,111,184,168,157,239,233,122,217, 99, 9,111, 64, 34, 90,135,213,192,192,129,215, 74, 73, 88,141,113,151,
+199,236, 94,145, 23, 25,101, 89,176,217,212,255,246, 80,237, 4, 22,233,218,142,108,190,128, 86, 44, 88, 58, 4,233, 20,203,146,
+190,237,216,155,207,200,114,161, 12, 42,163,177, 77, 67, 52,154, 98, 58, 19,136, 9,157, 80,231,154, 13,121, 53,165, 42, 13,103,
+ 79, 31, 18,134, 85, 64,215,203,187, 86, 24, 10,147, 81,230, 5, 55, 14, 22,188,246,202,203,188,250,202,171, 92,189,114, 68, 54,
+153,243,232,179, 95,112,239,225, 67, 62,249,252, 83, 30,125,126, 95,190,243, 40,130,207,224, 4,236, 19,188,172, 70,226,238,193,
+ 3,184,224, 57, 61,125, 74,232, 29, 74, 27,246,239,188, 68,116,142,254,226,140,110,181, 68,107, 17, 70,246, 93,155, 64, 84,194,
+ 14,176,209,166, 76,119, 5,222,226,189, 67, 11,228, 0,163,229, 29,192,121,156,237,133,205, 94, 77,161,174,241, 93, 79,232,122,
+ 52, 80, 30,236,179, 89, 94,176,152, 47,216,212, 27,178,178, 32, 4,135,171, 91, 76, 85,166, 51,200,165,116, 56,145,176, 73,151,
+230, 80,105,106,166,180, 92,142,243,253, 35, 54,235,117, 18,129, 14,234,198,144, 82, 91,147,134,103, 27,228,142, 46, 75,102, 87,
+175,211,174, 86,184,182,147,245,161,113,152, 20,182,163, 50, 77,183,218, 80, 45, 14,217, 92,156,130,239, 18, 77,143,173, 56,110,
+ 55,114,117,135, 26,169, 7,167,199, 72,132, 19, 75,168, 79,228, 50,165, 53, 58,229, 38, 68, 4,172,115,229,246, 11, 52,235, 37,
+ 87,111, 61, 71, 95,183, 76, 23,123,156, 63,252,140,126, 85, 83, 93, 57, 32,223, 59,226,224,232, 10, 58,192,217,249, 9, 89,211,
+129,247,156, 60,186,199,201,227, 7,180,245,138, 44,175,176,125, 71,240,150, 60, 43,113,161,229,141,255,251,255,228,250,243, 47,
+115,251,229,175,179,119,112, 72,223,183, 2, 21,242, 61, 23,247, 62, 97,126,116,141,233,193, 1,203,227, 83,113, 34, 36, 43,149,
+175, 47, 56,237, 90,129,186,104, 18, 42,248,156,195, 91,207, 99,148, 98,117,246,132,117, 8,244,137,143,241,244,163,247,152,236,
+237,179, 56, 60, 98,117,126, 54, 6,185, 52,199,143, 49,101,133,242, 1,165,197,201, 68,128, 24, 44, 89,150, 19, 8,244,109,131,
+209, 97, 11,118, 73, 62,127,121,246,133,172, 22,173, 69,225,152, 47, 22, 52,117, 43,169,105, 42,210,246, 13,209, 71,154, 20,123,
+124,124,113,134,173, 87, 40, 5, 89, 49, 33,102, 17,173, 34, 36, 90,163, 46, 10,209, 74,232,140, 98,146, 37,127,186,162, 89,175,
+ 41,170,138, 16, 28,109, 43,193, 78, 98, 75,189,192, 7,207, 34,191,201,193,181,231, 56,123,252, 0,147,103, 52,109, 3, 10, 22,
+ 87,110,176, 60,121, 50, 6, 8,145,184, 7, 74,171,157,105,132, 18,209, 49,164, 84,206, 20, 45,174,181,228, 42, 36,224, 77, 89,
+205,176,109,147,116, 28, 25,202,119, 92, 28, 31, 19,108, 47,150, 54,217,209,165, 81,172,243, 40,187,225,252,226,140,232, 44,125,
+103,153,204, 23,120,219,224,219, 13,123,251,251, 44,114, 69,115,113, 65,115,113,142,237, 91,148, 23,186,211,141, 87,127,133,147,
+243, 51,202,114, 34, 35, 45,160,109,219,145, 32, 6,138,205,234, 12,163,227, 40,208, 50, 81,227,198,140,112, 63, 50,122,119, 19,
+216,132,238,227, 47,153,245, 7,210,220, 24,205, 58,166, 26, 41, 9,152, 0, 74, 13,191,251, 27, 95,231,165,107, 7,252,244,237,
+119, 57,185, 88,210,165, 32, 22,235,131, 64,101, 6,171,154,115,120, 39,208, 20,235, 29,125,194,191,118, 93, 71,215, 89,249,229,
+ 44, 54,101,110,163, 21,139,195, 43,188,244,213,175, 17,181,162,183, 2,191,232,109,155,128, 44,169, 91, 54,154, 34,151,160,145,
+233,180, 20,214,122, 20, 60,232, 16, 54, 99,157, 8, 76, 76,102,100,172,239,253, 88,189, 77,170, 10,165, 20,207,189,248, 34,159,
+125,226,217,156, 47, 83,241, 98, 80,218,239,116,233,122,136, 1,130, 32,159,137, 73, 7,178, 28,176, 59,248,221, 8,133,201,196,
+158,215,247,236,205, 42, 46,206,207, 46, 93,232,207,118,228,113,199,105, 48, 92,206,195,229,206,232, 88,144,113,238,192,234,118,
+222, 83,152,124,236,212, 81,160, 82, 74, 86,215,123,166, 51, 67,136,242, 89, 75, 84,135, 65,231,122, 27,169, 27, 2,222, 37,223,
+104, 98, 97,199, 24,232,157, 37, 88,199,102,179,150,139, 36, 47,105,221,150,210, 52,216,108, 96,187,167,142, 41,150,179,237, 68,
+209, 28,162,236, 85,135, 92,243, 49,145,109, 80, 28,251,196, 25, 80, 58,233, 65,242, 81,125, 76, 16, 0, 69, 81, 21,212, 77, 61,
+134,198,124, 49, 83, 91,145,153,140,197,193, 33,231,203, 85,154, 22,196,116, 16,201,147,237,218, 38,249,225,115, 98,204,196,173,
+161, 20,139,131,125,250,174,195,164,208,139,253,249,140,190,107,105,234, 13, 69, 46,202,239,214, 71, 22,211,138,233,228, 64,146,
+197,181,102,177, 88,176,183, 55,231,202,149, 43, 88,107, 57, 59, 61,227, 15,255,240, 15,121,122,124, 76,239, 93, 98, 44,216,244,
+188, 91,194, 78, 40,207, 16,116, 17, 99,196, 39,178,219, 46,228, 60,142,241,146,178, 18, 57,254,248, 61,170,217,148,250,226, 20,
+237, 21, 62, 6,200,140,144,193, 84, 18,232,121, 9, 6, 10,182, 67,169, 82,220, 30,209,163, 98, 78,187, 94, 98,108,207,180,156,
+ 72, 7,141,194,214, 13,217,164, 76,197, 68, 96,126,112,200,242,248, 17,205,234, 12, 99, 50,106,231,168,230,123,236, 29, 94,161,
+ 93,111, 88, 47,143,137, 14,233, 86, 93,143, 87,113, 27, 20, 37, 3, 83,124,244,130, 9,205, 10, 17, 80,230, 37,218, 52,168,144,
+145, 87, 83, 1,237, 52,235,244,189,123,166,179, 57,171,243,179,244, 89, 4,242, 98,194,234,248, 24,239,122,166, 7,251,228,179,
+ 9, 33, 68,138,201,148,104, 29,206, 89,242,178, 32,120,139, 41, 38,184,214,166,127,191,223, 82, 29,119, 86,139, 99, 42, 98,132,
+ 24,117,194, 67,169,241,204, 80,169, 57,136, 99, 6,183, 17, 77, 33,194, 12,105,215, 43, 22,215,110,209,247,158,217,193,130,227,
+135, 79, 41,231, 11,170,131, 43,156,124,122,151,105,221,209,157,159, 51,217,219,227,197,215,191, 77,140,240,224,163,119,105,154,
+ 53,121,105,208, 33,146,155,140,217,245, 3, 66,215,225,131,101,177,127,192,201,131,123, 60,250,224,151, 60,248,224, 29,204,100,
+ 70,119,113,142, 93,159, 17,108,155,138,151,138,222, 5,170,171, 87,232, 47,150,100,113,104, 2,197,177,211,183, 45,121, 53,101,
+121,246,132,104, 45,255, 31,107,111,214,107,217,118,158,231, 61,163,155,221, 90,187,173,230, 84,157,150,189, 72,217, 82, 68, 67,
+145, 34,201,177, 13, 27, 70,236, 0, 1,114, 23, 36, 65,126, 67,174,114,175,235,252,134,252,132, 24, 72,144,139, 64, 18,226, 8,
+233,164,216,162,104, 89,148, 68,137, 61, 79, 91,221,110, 86, 55,155,209,229,226, 27,115,238,181,235, 20, 69, 58, 73, 1, 4,139,
+181,139,187,214, 94,107,206, 57,190,230,125,159,119,247,234, 25,147, 15,196,126, 11,198,208, 86, 13,219,231,159, 1,138,241,118,
+195, 62, 14,104,109,184,185,122, 73,119,216,224,186, 22, 69,133,107, 42,108,221,162,181,230,208, 15, 24, 99, 36, 17,113,127, 43,
+252,134,110,205,118,115,205,116,123, 91,112,169, 5,225, 58, 14,242, 57,215, 53,126, 26,217,222,222,160, 51,168, 82,184,107,103,
+ 81, 74,104,152,227,126, 75,246,129, 20, 38,172,171, 68,211, 17, 36,159, 32, 5,143,153,237,189,218,200, 68,166,174,192, 58,116,
+219,160,135, 17,165, 51,104,203,170, 91, 51, 21, 61, 71,234, 7,208,137,253,245, 75,236,227,183, 89,157, 95, 50,110,174,153, 54,
+215, 50,101,169,106, 86,151, 15, 9, 67,191, 76,110, 93,101, 65, 89,170,166,195, 84, 77, 17,168,190, 2,162,168,242,115, 2,101,
+229,247, 74,194,192, 92, 99,201, 49, 81,119, 39, 76,227, 68,211, 86,244,187,196, 88,114, 26,108,202, 25,130,167,170, 91, 84, 78,
+252,228, 47,254, 13,251,231,159,148,184,205, 1,163, 21,235,183,222,145,212, 28,231,184,122,254,140,241,176, 67,229,204,245,179,
+ 79,136, 41,177,221,220, 48, 22,155, 81,101, 29, 67,127, 16,219, 86,169,128, 81,142,203, 71, 15, 57, 63, 63,231,111,190,189,165,
+170, 91,116, 18,165, 61,179, 42,187, 24,129,238,141,167,239,101, 14,223,133, 36, 28, 91,218,102,100,108,230,110,151,169,148,194,
+ 41,248,167,223,252, 42,239, 60, 88,243,173,239,124,151,155,205,182, 28,202, 34,130,243,197,190, 38, 2,185,184,196,236, 77, 81,
+ 48,176, 97,154, 24,167,145,195, 24, 24, 7, 25,191,199, 52, 43,201, 53,167,231, 15,121,231,139, 95, 38,170, 12,175, 41,217,199,
+215,236,102,211, 32,227, 92,111,166,123,154, 0, 93,132,114, 66, 41,131,170,114, 69,144, 21, 23,142,186,177,194,228, 54,206,242,
+133, 47,127,149,159,252,224,123,236,174,175, 75,152,197,241, 8, 62, 45, 33, 3, 2,221,209,247, 68,135,179,143, 63, 31, 61,184,
+ 51,137,117, 87,113,123,125,181,228,159,243, 90,194,213,252,111, 28,147,178,244,226, 5,190, 35,252, 29,219, 15,103, 16, 16,101,
+ 92,153,138,221, 79, 27,141,181, 8,129, 79, 57,170,186, 89, 10,131, 80,132, 75,218,154,101,175,152, 82, 20, 48,201,236,227,212,
+242,247, 98, 28,241,227,196,216,247,212,198, 72, 81, 88,170,218,156,239, 54,152,119, 19,140,242,136,141,119,241,137,222, 23, 24,
+196,146,173,124, 23,254, 35,197,161,252,185,181,154,190,247,168, 58, 46, 34, 40, 33,238,149, 28, 3,173, 75, 88,142,122,195, 68,
+163,225,201,211,183,121,241,226, 51, 8, 35,217,219,242, 25, 5,200, 1,149,196, 83,222,239,119, 52,174, 70,163, 88,175, 87,144,
+ 34, 58,131,142,129,166,109,249,234, 87,191,200,111,254,202, 55,248,244,147,143,249,225, 79, 62,226, 43, 95,251, 58,127,253,189,
+191,230,185,134,143, 62,254,132,159,252,224, 7, 18, 13, 89,246,255, 70,155, 18,121,171, 22,198, 93,158, 3,109,114, 38,167,112,
+ 55,145,152, 5,171, 71,107,173, 99,193, 78,154, 29, 4, 25,244,189,162, 73, 38, 4, 35,137,170,233,152,250, 30,109,196, 14, 86,
+181,107,198,195, 1, 87,215, 69, 21, 61,145, 83, 32,231,106,137,189,156,167, 82,121, 26,202,161, 97, 4, 30,164, 19,109,219, 49,
+170,137,147,211, 83,110, 55,175,208,198, 16,134, 30,219,118, 88, 99,192, 53, 76,125, 79,213,182, 84,125, 71, 31, 54,160,196, 3,
+ 79, 74,100, 93,145,125, 95,196,184,185, 60, 8, 87,133, 82,231,228,249,101, 13,218, 54,210,117,231, 68,187, 58,197,135,162, 37,
+170, 91,222,122,255,156,195,102, 67,191,219,115,241,228, 61, 14,135, 45,121, 18, 33, 31,197, 22, 25,250, 3,227, 52,208,180,107,
+204,234, 4, 63, 12, 60,184,120,196,243, 31,239, 49,121, 6,113,177,208,230,142, 39,107, 51,224, 68, 33,221,250, 82, 48,135,176,
+220, 15,234,181,172, 11, 20, 40, 43,133,209,216,111,241, 49, 82,107,139, 81, 30,101, 58,118, 55, 87,156, 63,122,204,201,249, 67,
+ 76,219,242,234,217,199,124,231,127,255, 3, 46,223,253,128,102,221,177,187,125,201,245, 39, 63,230,226,233,123, 12,219,107,174,
+ 62,253, 33,167, 15,158,144,114,100,243,233,199,212,221,154,221,245, 43,170,182, 99, 26,182,228, 97, 36,142, 3,221,233, 57,167,
+143,222, 98,183,189, 69, 77, 35,105,200,132,113,192, 89, 77,181, 90,211, 31, 14, 40, 96,117,118, 70,136,208,173, 90,246,219, 45,
+174,178, 28,174, 95, 18, 82,160,182,162, 95,209,109,131, 51,208,191,124,129, 31,182,164, 18,217,155,148,130,144,104, 86,122, 73,
+ 27,171,234,138,186,233,216,221,188,162,223,202, 84,160, 62,185,100,154, 6,218,245, 57, 85,221, 9,202,117, 28,150,156,243, 16,
+ 60,166,114, 84,117, 39,207,193,186, 38,246, 61, 89,121, 66, 73, 16,100, 63, 21, 84,238,184,196, 16, 91,173,101, 79,111, 53,214,
+ 53,164,209,131,171,200, 90,163,117, 38, 14, 35,174, 86, 40, 87, 17,235,204,176, 63,208,157, 93, 74, 36,117, 10,226, 46,113,134,
+208,143,164, 52,177,191,126, 73,119,241,144,238,201,187,248,205, 53,195,254, 22,101, 12,174,235, 88, 63,122,155,147,203, 7, 84,
+ 85,205, 20, 35, 85,221, 8,177,116,115,205,199,127,241,167, 40, 63, 98, 87,157, 8, 64,251, 3,182,110,136,227,129, 16,189,232,
+110, 80, 98,117,205,226,216, 24,139, 5, 54, 12,131, 52, 5,191,250, 79,255,211,223, 85, 90,227,172, 97,120,245,140,219,207, 62,
+100,127,251, 74,186,188, 28,101, 84, 94,117, 60,120,250, 46,221,201, 9,111,189,245,132, 7,151, 23,220,222,222,114,125,117,197,
+180,185,230,213,135, 63,100, 56,236,217,223, 94,211,158, 63,164,106, 26, 81, 32,150, 46,201,213, 13, 74, 27,218,213,154,127,240,
+ 59,255, 62,230,242, 93,110,174, 95,144,134, 81,170,104, 53, 83,159,204,145,250,244,206,175,174,143, 20,214,199,202,230, 57,222,
+115, 6,161,216,226, 57,174, 13,252,179,111,126,157, 39, 15, 78,249,179,191,250, 30,183,219, 29, 67,217,159,251, 20, 23,150,187,
+159,185,238, 37,210,115,242,179, 24,110, 98, 28, 7,198, 33,208, 15, 35,227, 56,201,250, 32, 43, 50,134, 7,111,189,195, 91,239,
+189,191,120,178, 23,101,126,217,137, 27, 35,108,119,231,220,189,220,248, 88,208,178,113, 6,228,112,103,205, 19, 12,161, 95,186,
+233, 16,100,239,173,142,132,130, 49, 4, 86,235, 19,134,113, 36,166, 48,243, 7,142,120,195,106, 73, 59,154,213,232,202, 26, 33,
+ 55, 41,161,179,169,130, 72,244, 97, 96,213, 52,236,182, 59,194, 76, 39, 42,133, 85, 62, 10,135,190,195,206,170,123,221,198,146,
+150, 87, 62,135,197,173,112,164,236,159,213,246,233, 72, 79, 97,141,101, 10,129,102,125,206,122,125, 78, 93, 53, 56, 39,233,108,
+139,111,255, 8,173,173, 22,154,220,157, 71, 61,165,128, 54,154,171,231,207, 16,126,151, 28, 8, 75,134, 60,199, 43, 74,181,236,
+227, 41, 96, 35,209,119, 32,238,134, 52, 99,133,239,132,141,179, 5,105,158,126,196, 24,138, 54, 65,149,207, 76, 23, 37,126,185,
+102,115,129,249, 24,179, 88, 65,173,171,120,235,201,219, 60,123,246,113,241,154,139,183,209, 58, 87,192, 58,186,196,137,218, 2,
+195,145,117,147,206, 50,206,211,113,228,131,119,223,230,131,183,159,242,107,191,252, 13,166,113,162,247,129,195,190,231,247,255,
+224,247,248,254,247,190,199,199, 31,127,196,102,115,131,247, 19,193, 11,181, 44,248,129, 16, 38,166,209,151,140,235,105,249,111,
+225, 43,140, 2,165, 41,228,195,249,253, 76,217,151,160,143,185, 27, 23, 1,229,140,192,229,181, 78, 94,238,199,128,214,134,186,
+ 93,147,162,232, 1,230,232, 90,128, 48,202,120, 55,197,128,115, 21,145, 68,138, 19, 36,179,144,251,180,182, 40, 39,190,228,156,
+163,236,191,125,228,244,242, 1,253, 97,203,180,223,139, 0,179,233,112,109, 67,189, 58, 37, 7, 95, 56, 5,226,108, 9,253, 64,
+ 24,123,116, 78, 16, 19,201, 79,114, 77, 26,177, 21,186,118,133,114,142, 24, 3,182,228, 83,168,242, 60,113,171, 83,230,105,165,
+ 53,197, 66,105, 96,119,115,141,173, 59, 92,183,194,147, 5,177,107,172, 64,102,198, 1,235, 68,225,109,170,134,213,250,132, 48,
+121,234,170, 34,161, 24,118,183, 18, 83, 93,178,220,103, 63, 60,121, 14,132, 41, 34, 43, 85, 81,157,156,241,232,131, 47,147,141,
+197, 56,177,216,229, 57,183,161,232, 49,230, 92,116,180, 33, 78, 61,109,183,198,186,134,155,231,159,178,187,125, 73,189,186, 32,
+ 4,207,187, 95,250, 26,219,205, 45, 99,244,156, 62,120, 72,179, 62, 71,229,196,254,250,154,151, 31,254,144,245,197, 3, 92,211,
+138,166, 73, 27,252,102, 67,127,123,197,225,246,134,102,213,178,187,189,194,186,138,170,169,153, 38,113, 15,180,235,115, 78,159,
+188, 75,232,123,194,176,199, 89,185,126, 43,235,132,202, 88, 75,128, 75,181, 62,161,110,197, 62,151,181, 20, 97,227,126,143,169,
+ 43,153, 67,100, 69,232,119,108, 63,251,144,112,232,209, 90, 8,144,171, 7,143, 56,123,231, 3, 65, 72,123,207,116,216,115,184,
+185, 37,142, 3,251,219, 43,182, 87, 47,216,111, 94,149,156, 14, 69,152,122, 73,253,155, 70,156,107,100, 42,180,106,139,208, 21,
+234,110, 45,147, 36,239,101,255,236,229,186, 71, 41,234,166, 37, 76,163, 64,105, 10,133,112,121, 80,104,141,173,107, 17,109,154,
+ 74,214, 34,193,139,237, 51, 7,193, 18, 43,193,253,198,113,148,251, 64,203, 14, 31,165,240,125, 79,221,173, 49,174,194,104,203,
+184,219, 67, 14,164, 24,105,154,142,195,237, 13, 97,216, 3, 10,215,173,112,141, 96,211, 73,137, 48,244,220,124,246, 33,207,191,
+255,215, 98, 73,107, 26,148,169,136, 99, 47,233,163, 41, 74,200,147, 49,212,221,186, 60,143, 84, 1, 79, 9, 16,171,170, 26,208,
+ 18,152,100,183, 87,175, 64, 27,182, 10,252,245, 43,206,207, 47,240,253,129,113, 47,166,123, 89,138,142,132, 32,163,232, 97, 28,
+ 24, 71,233,176, 66,191,231, 71,223,249, 83,210,112, 96,181, 90,163,227,196,119,255,232,127,225,139,191,246, 31,112,249,228,221,
+ 2, 61,185,179,165,220,188,124,201,248,165, 39,252,234,175,255, 61,206,223,122,143, 63,249,253,255,158,143,255,252, 79, 9,169,
+199, 58, 17,180,228,146, 57,126,143,170, 84,212,159,243,159,201, 97, 87,108,193, 37, 54, 85,151, 8,204, 74, 37,254,227,223,248,
+ 59,116,149,225,219,127,249, 93,182,135,158, 16,115,217,163,251,114,120,139, 10, 55,248,184,164,172,249, 98,109, 11, 33,226,189,
+168,220,167, 49, 48,134, 64,140,130, 63, 69, 91, 30,191,253, 46,143,223,125, 87, 58,202,196,189, 67,123, 30,169,205,236,121,239,
+135,123,157,121,140,113,121,237, 51,239, 55, 22, 59,140,214, 66, 64, 51, 71,145,178,199,200,217, 37,118, 49,103, 30, 63,121,202,
+103,159, 38,166,188,151,125,114, 25,224,113,196,202, 71,149,192,148,172,139,143, 95,223, 29,206, 25,106,227,216,110, 54,203, 90,
+227,245, 46,253, 88,237,126,140,226, 53, 11,165,237,238,107,139,250,251,216,138,120,151,125,123,148, 57,173, 73, 89, 17,146,166,
+106,219, 37,215,253,158, 96,232,104,132, 61, 51,152, 83, 60, 66,102,230, 36,196,177,146,184,101,180,101, 12,241,232,235,247,121,
+249,119, 4,194,132,153, 83,213,102,183,133,145,117, 7, 49, 99,172, 94,222,187,202,185,165, 80,138, 94, 44,134,126,242, 84,141,
+187, 87,212, 40,149, 37, 24,165, 28,236,198, 24,218,118, 77, 93, 87, 24,235,184,185,121, 41, 33, 45,106,182,172, 9,199,217,148,
+ 92,113,173,192, 40, 25, 97,234,148,112, 10,106, 99,248,250, 23,222,227, 63,252,251,127,159,182, 93,241,233, 39,159,241, 71,127,
+252,175,248,238, 95,127,151,126,216,211,247, 59,134, 65, 56, 10,115,144, 80, 94, 20,222, 44,194, 75,165,194, 82, 21,101,117,167,
+182, 94, 28, 39, 69,127,241, 58,154,242,206,217,255,166,228,209, 99,199,138, 20, 67,126, 26, 49,211, 65, 66,109,124,128, 20, 10,
+ 34, 51,145,163, 39,231, 80,214, 85, 53, 26,208,170,164,181,149,207,203, 54, 45,174,107,232,183,215,132,254,192,250,193, 99,154,
+211,115,246, 55,215,248,105, 79,115,114,194, 0,180,103,103,236, 94,189, 68, 69, 17,186,141,126, 96,123,115, 69,211,180, 18,187,
+ 55,217,146,242, 86, 66,157, 74,214,181, 49,150, 52, 13, 40,109,113,117, 45,100, 69,235, 74, 71,175,177, 86,163,147,131,249,190,
+ 84,178, 94,168,187, 21, 33, 78, 52,110, 45, 7,204,110, 67,156,122,180,181,162,228, 47,193, 50, 70, 27,250, 41,224,154,134,126,
+119, 35,158,238, 18,147, 59,219, 20,141,171,151,251, 46,229,140,113,142,170, 59, 97,117,249,128,195,208,179,221,220, 98,218, 83,
+186,139,154,126,181,166,174, 42,110,158,125, 76, 12, 1,171, 32,102, 17,136, 42, 3,171,147, 7, 40,109, 24,135, 3,206,153,114,
+175, 67,142, 35,253, 56,240,232,237,247,249,248,251,127,201, 79,191,243,109,214,151,151,196,152,121,244,254, 23,217, 95,157,224,
+163,151,113,116, 85, 99,141, 99,236, 26,177,155,166,196,184,219,163,188, 39, 97,240, 54,208,174, 79,208, 4,134,205,142,253,203,
+ 79,138,221,179, 66,105, 77, 93, 53,104,107, 8,227, 68,189, 94,163,180, 97,127,245,130,237,228, 81,149, 21,108,108,191,195, 96,
+ 48,166, 69,103,205,112,123, 69, 24, 15, 16, 60, 83,140,116,235, 19, 78, 31, 61,145,206,247,176, 19, 58,161, 21, 93,212,233,227,
+135, 96,157, 76,248,250,137,182, 89, 17,149,194, 84, 14,191,223, 17,166,145,122,117, 2,214, 16, 61,140, 87, 55,216,170,146,103,
+158, 82, 36, 31,105, 47, 30, 96,141, 99, 58,108,153,174, 95, 81, 59,135,239, 15,228, 32,216,222,156,131, 20,134,133, 22,152, 82,
+196, 31, 14,212, 93, 71,208,153,230,228, 12,114,194, 79,129,228, 39, 76,219, 10,154, 88,101, 92,101,200,211, 28,197, 90,138, 88,
+149,217, 93,191,100,117,249, 80,206,162,104, 9,126, 98, 56, 28,152,218, 14, 84, 70, 21,171,243,238,229,167,203,234,184,223,109,
+201, 42,115,120,249,156, 28, 3,198, 58,140,171,104,219, 21,155,225,192, 52, 77, 24,173, 24,198,129,238,244,130,172, 45,221,217,
+ 67,198,131,188, 15, 42,131,138,153,221,205, 21,198, 57,148,171, 48, 95,249,205,127,244,187, 57, 37,210,208,243,209,223,252, 91,
+114,152,196,194,166, 53,193, 79,178,231,242,158,195,237, 13,239,125,240, 62, 79,223,125,159,237,126, 79, 28,123,254,242,255,250,
+ 67, 12,137,174, 93,221, 9,219, 82,230,249,135, 63, 68, 27, 75,119,122,134,182,142,211,139, 75, 80,162,248,109,234,150,199,143,
+ 78, 25,189,226,236,201, 7,188,252,244, 67,198,237,117,177,229,132,101, 31, 59, 71,131, 46, 97, 28,233,200,247,157,103,122,142,
+ 42, 21,156,198,106, 88, 25,197,127,246,143,127,157, 48, 14,124,231,111,190,207,213,238,192, 24,228, 96, 30,167,145,113,242,244,
+227, 68, 63, 72,132,103, 63,142,178, 51,159,252,226, 61, 31, 38,207, 56, 5, 17,198,121, 33,135,101, 20,218,214,188,247,149,175,
+114,254,232,113, 81, 97,231,227, 37,170, 88,185, 22, 83, 20,139,109,237,248,144,114,175,101,120, 47,161,142, 90,223,195,189,206,
+ 10,252,249, 48, 79, 71, 63,187, 16,143, 42,214, 39,167, 12,195, 72, 88,132, 34,234,232,223, 23, 68,165,210, 51,228, 37, 45,121,
+188, 74, 41,114,240,132,105, 16,100,164, 82,159,123,134,223,127,221,249, 30, 39,224,245,175,191, 46, 10,211,250,206,157,155,230,
+152,194, 34, 10,169,234,138, 97,240,216,170,163,105,219,130,116, 77,139,106,219, 26,161,125,165, 16,165, 32,137,177,164, 32,205,
+239, 71, 36,229,194, 11, 24,122, 14,219, 91, 32, 19,162, 64, 97,142,187,243,227,124,236,188,156, 65,226,209,151,176,154, 34, 98,
+179,230,181,124,173,153,249,124,119,224,105,163, 5, 98,162, 53, 90,217,187, 80, 29,173,105,219,142, 7,151, 15,121,240,224,146,
+203,139, 11,186, 70, 96, 16, 42,121, 42,107,168, 92, 77,229,156, 28,238, 86,126, 70,227, 12,117, 35, 19,138,186,170,105,170,138,
+182,177, 60, 56,127,192,127,249,159,255, 23,124,245,107, 95,231, 15,255,240, 15,249, 31,255,167,255,129, 63,249,211,255,155,159,
+124,248, 99,118,187, 91, 14,135, 61,195, 48,138,168, 50,132,163,236,229, 18,166,115, 52, 60,191, 39, 26, 76,249,136,115,157,238,
+168,126, 41, 45, 97, 47, 71,233, 55,159,251, 79, 86, 71,233, 83, 5,190,162,178,184, 48, 20,162,202,141, 97, 34, 77,253, 29,179,
+159,187,162, 65,149, 2,171,106, 87, 50,193, 43,126,110,165, 21,174, 93,145,208,144, 34,205,234,132,140, 98,216,239, 73,211, 40,
+157,105, 8,146,163,238, 35,232, 84, 86, 44,137,112,216, 23,184, 73, 47,221,117, 57, 64,181,150,168,215,153,169,111,170, 6, 87,
+213, 88,109,133, 86,199,140, 51,246, 40,109, 9, 62,146, 52, 24,165, 81, 37,111, 61,244, 66, 81,108,215, 29,219,235,107,178, 31,
+168,154,150,250,228,148,170, 89, 21,241,219, 28, 35,108, 32, 76, 96, 44,209,143,132,105,148, 28,244, 16, 74,252,231,146, 49, 69,
+ 44,130, 55,116, 69,119,118, 70, 72, 9,165, 37,130,214, 88,203,230,229, 11, 82, 24,176,237, 25,239,124,237,151,201, 85,203,116,
+216, 44, 72, 88, 5, 52,103, 15, 56,108,111,201,113,228,252,233, 59,108, 94,188, 66, 91,232, 78, 31, 81,185,138,148, 60, 15,222,
+254,128,195,246,154,235,103,159,178, 94,159,177,189,126,133, 31, 14, 36, 63,144, 99,102,191,185,198,239,182,165,168, 21,222, 62,
+174, 34,101, 69,115,122, 42,161, 61,109, 39, 34, 57,100, 66, 83,159,156,138,230,200,143,165, 48,169,192,104,246, 55, 47,201,193,
+ 11,113, 19, 79,229, 42,134,221, 6,223, 31,104, 78,207,152,250, 3,177,223,163,114, 68, 87,141,136, 99,173, 37,107,199,212, 31,
+ 32,121,148, 49, 84, 93, 71,101, 45,118,125, 34, 80,150,144, 96, 28,136,136, 29,205, 26,195,238,230, 10,162,167,106, 87, 36,173,
+153, 14, 91, 84, 14,184,186, 22,107,234,216,227,247, 59,218,211, 53,202, 84, 52,103,231,160, 53,174,233,200,106, 62, 87,196,233,
+ 5,154,156, 2,166,106, 81, 74,227,234,138,106,125,130,109, 90,154,238,100, 41,188, 46, 30, 63,102, 28,122, 9, 66,178, 22, 91,
+ 87,248,221, 94, 80,225,211, 40, 19,156,186, 22, 20,117,153,104, 77,135, 65,130,169, 82, 20,176, 84, 1,208,168,156,133, 35, 17,
+147, 16, 85,141,240, 72, 82,191,165,191,189,197,186,170,208, 56, 21,227,126, 67,138,129,186,110,240,126, 92, 10,214, 20, 60,195,
+126, 71,219,173,138, 5, 61,225,167,177,220,109, 82,220,171,255,228,191,249,111,179, 86,134,208,111,121,254,195,191,160,114,142,
+171, 23,207,229,205,107, 86,180,171, 21,187,155, 43, 50,145,186,187,228,226,233, 83,108,101,185,125,241, 2,171,197, 14,164, 82,
+194,213, 45,202, 88,166, 97, 39,213,222, 56,112,241,197,175,241,203,191,241, 15,104,214,103,196, 20,217, 95, 95,209,180, 45, 31,
+124,225, 93,190,240,165, 47,240,209,179, 45, 47, 63,249,132,255,243, 95,252,119,140, 87,207,137, 94,198, 26,186,196, 3,222, 75,
+ 40, 91, 30, 20,101,180, 91,118,210,141,117,172,155,138, 47, 60,189,224,159,124,243,107,252,240,167, 63,229,207,191,255, 67,182,
+135, 3, 57, 33,129, 36, 94,194, 86, 38, 47,201,107, 50,138, 20,145,156, 80,227,164,243,155, 66, 40, 73,108, 98,105, 19, 43,180,
+193, 52, 45, 31,124,249,171,172, 78, 78,203, 46,250,110,220,190, 36, 49,151,131, 26, 40,236,242,124,151, 17,191,132,170, 72,170,
+210, 44,192,178,206,150,189,179,196,231,205,221,252,124,136, 58, 39, 29,246, 52,141,146, 51, 92, 32, 49,179,170, 59,248,137, 79,
+ 63,250,136,195,230,150,232,131,236,197,203,104, 25, 85,200,114,200,247,152, 31,162,218, 24,242, 52, 49,142,135, 37, 81,236, 77,
+157,250,177,241, 90, 41,222,184,107,255, 92, 1,240, 26, 74, 86, 21,142,187, 4, 31,204,137, 83,154,179, 7,143,133, 58,101,101,
+ 69, 97,141,163,114,245,189, 32,158,121,197, 18, 82, 32,229, 89,161, 46, 98,191, 28, 19, 97, 26,120,249,217,199, 88, 13, 99,148,
+116,181,251,137,118,199, 83,130, 18, 81,153,131, 36,179,149,110, 84, 38,239,234, 30, 2,119,206,176,159,247,229,179, 8,112, 24,
+194, 17, 75, 94,126,150,186,174, 89,173, 78,120,120,113,201, 55,127,229,239,242,206,147,167,156,156,156,144,128,155,237,134,207,
+158,125,198,237,102,195,230,230,150,205,174,167,110, 59,201, 60, 46,185,240,171,182,227,226,226,130,203, 7, 15,120,250,244, 29,
+158,188,253, 14,191,247,251,255, 51, 63,252,193,119, 25,203,225,237,189, 95, 2,132, 94, 47,244,142,187,236,123,201, 79, 63,231,
+215,231,146,162,254, 54,241,254, 49, 89,173, 80,211, 68,214, 85,148, 48, 70, 81,213,107, 76,211, 10, 20, 36,133,146,137, 93,144,
+187, 37, 7,160,110, 86, 12,227, 64, 12, 3, 68,121, 15, 99,206,172, 30, 62, 17,203,156,247,140,195, 30, 91, 53,116,235, 83,198,
+195, 22, 63, 5,140, 21,219,165, 42,220, 10, 9, 33,145, 32, 23, 85, 44,165,162,131, 48, 76,135,173,220,103,206, 80,219, 90, 98,
+ 94, 21,226, 88,137, 35,190,239,177,174, 22,136,139,214,216,170, 34,135, 40, 68,184,172,197, 89, 80, 57,146,210, 24, 87, 17,134,
+158,169,236, 52,171,182,197, 15,131, 36, 20,182, 77, 9,161,242, 88, 39, 65, 58,209, 7,105, 52,172,240,106,253,126,131,223,221,
+144,149, 76,113,150,235,171,170, 56,127,242, 62,125,223,203, 33,128, 98,220,223, 82,117, 93, 17,163, 25, 92,211, 17,188,231,189,
+ 47,124,153,103, 63,253, 9, 55, 47, 62, 22, 86,190, 50,156, 63,125,135,155, 23,207, 48, 78, 70,223, 85,211, 80,117,231, 24, 39,
+ 19,171,166,105, 9,227, 72,221,118,156,156, 95,130,214,188,250,232,199, 76, 67,207,230,229,103,156,191,247, 62,166,228,181,223,
+ 60,251, 8, 93, 57,113,194, 4,143,137,153,144, 35,171,179, 11,114, 85,227, 55, 27,146,159, 88,157,158,178,189,190,194, 57,195,
+254,246,134,186, 91, 51,141, 7,114, 12, 52,171,115, 92,219, 97,170,138, 48,236,232,247, 7,204, 76,203,203, 25,239, 39, 30, 60,
+121,159,221,238, 26,235,106,134,205, 43,172,109,209,206, 48,110,182,212,103,151,164,169, 39,196, 72,123,249,144,243,199,111, 17,
+ 67,196,185,134,253,254,134, 92, 16,220, 50,141, 72, 16, 71,148,173,200, 33,112,122,113,201,161,239, 25, 15,123,210,208, 99,234,
+ 10,165, 52,245,106, 45,244, 70, 32, 78, 19,126, 56,200,243, 49, 76, 75,196,237,184,223,147,226, 36,250,147,170, 69,187,138,179,
+ 7,111,145,114,196,144,192, 88,233,210,115, 18,152,216,212, 75, 58, 92,215,137,152,179,170,100,252, 29,139, 80,184,236, 12,141,
+210,196,113,196, 52, 53,201, 7,108,229, 68, 19,165,213,146, 77,146,149,194,186,134,230,244,148, 20, 34,219,231,159, 64, 12, 40,
+ 99, 75,240, 86, 36, 76, 19,205,106, 77,127,216,161, 11,150,154, 18, 54,148,203, 64, 45, 39,129,109,165,232,239, 61,151,212, 63,
+252,175,254,235,172,173,225,246,217,103, 92,127,248, 61, 50,208,117, 45,231, 79,222, 97,243,234, 57,227,161, 71, 33,121,206,205,
+234,140,105, 60,208,157, 92,240,248,237,247, 56,125,240,136,151,207, 62,193,162,160,114, 12,125,207,208, 31, 72, 83,207,228,101,
+127,248,248,131, 47,243, 43,255,248,159,115,123,179, 97,218,111,209, 70,211,117, 39,252,250,175,255, 93,246,222,240,234,122,203,
+179, 31,124,151,111,255,193,191, 32,239, 55, 4,239,165,211, 57,202,166, 21,196, 99, 46,150,153, 2,214, 48,134,135,167,107,190,
+251,157,111,241, 15,191,249,126,114,229, 16, 0, 0, 32, 0, 73, 68, 65, 84,119,248,231,255,240,183,248,238,143,126,204, 95,255,
+248,167, 92,111,183,140,147, 39,101, 33,144, 29,198,177,116,226, 98, 73,243,243,254,113,246,162, 23,232,140, 15, 17,239,163, 16,
+198, 10, 45,236,244,242, 49,239,127,249,203,168,178, 3, 60, 78, 16,155, 65, 55, 10,169,174,102,114,219,241,206,159,162, 58, 63,
+ 62,172, 36, 75,157, 59,117,186,214, 12,227,184, 0, 93,154,186, 94, 8,100,249, 40,141,201, 88,203, 56,142,203, 3, 61,198,136,
+ 81,138,155, 87, 87,188,122,241,140, 88,148,245,162, 98, 15,229, 80, 55,119, 7, 92,241,135,231, 50,186,126,211,115,253,243,128,
+159,227,241,249,155, 65, 64,175, 19,231,244,145, 35,225,248, 16,137, 41,211,158,156,114,114,118,129,171,101,148,103,140, 65,101,
+141,181,142,166, 84,241,139, 85, 46, 70, 66,244,229, 80,143,152, 66,210,154,198,129,161,223,179,223,222,144, 67, 96,240, 98,155,
+155, 99, 57,238,113,228,243, 93,201,161, 85,194, 89, 93,252,242, 44,204,246, 69, 0,104,140, 0,150,172, 94,128, 62,115, 33,213,
+247,158, 16,211, 66,254, 3,168,170,138,223,252,205,223,226,119,126,231,183,104,140,225,253,167,239,178,221,237,249,151,255,219,
+ 31,242,226,229,115,254,189, 95,249, 85,190,241,213, 95,226,242,242,130, 15, 63,123,193,247, 62,252,148, 67,127,192, 24,203,195,
+ 7,151,156,159,158,224, 39,207,217,197, 5,255,230,223,126,135,255,245, 95,254, 30,195,110,203, 56,141, 71,251,238,244,185,131,
+252,245,145,249,231,176,162,127,219, 52,229,141, 49,144,199,161, 65,119,244,122,212, 29,206, 84, 73, 14,170,116, 58,198,210,172,
+214, 12,187, 45, 41, 78,210,233,180, 39,178,211, 43,122, 17,177,201, 86, 98, 91,179, 14,223, 15, 40, 29,101,149,149,101, 71,237,
+234,150, 80,198,216,202, 88, 66,191, 35,142,162,160, 78, 37,167, 62,163,202, 88, 82, 99,187, 21,201, 71,217,169,103,137,196, 68,
+137,253,171,110, 59,140,214,152,218,209, 52, 29,155,155, 27,214, 39,231, 12,253,158,245,229, 5,253,245, 21,193, 71,186,147, 83,
+250,253, 86,232, 96, 65, 88, 1,227,190, 71,233, 76,213,201,212, 64,151,153,151, 63, 28,208, 85, 37,207,131, 24, 22,111,187,113,
+ 21,145, 92, 86,133, 98, 73,171,187, 85, 73, 32,108, 56,123,252,148, 97, 24,249,244,175,190, 77,244, 99, 33, 31, 90,233,244,186,
+ 21, 81, 91, 84,140, 66,228,172, 42, 50,153,208,247, 66,246, 76,145,140,166,105, 91, 76,213,209,118, 29,183,207, 63, 18, 97,102,
+213, 96,154,150,155,103,159,210,158,156,177,191,126, 73,117,126, 65,183, 58,103, 28,123, 84,140,108,111, 94,209,174,206, 57,121,
+235, 29,234,174, 1, 63,209,111,182, 12,227, 1,103, 20, 97, 12,248,105,207,176, 59,200,202, 73,107,148,145,207,119,220,110, 57,
+121,240, 80,198,253,222,139, 75, 35, 69,200,177,172, 28, 12,126,183, 97, 60,108, 65, 25,234,238, 4,234, 10,231,196, 94, 56, 29,
+118,146,153, 48,202, 14, 59,251,145,170, 93,115,250,228,125,118, 87,159,225,199,158,250,244,130,112,216, 18,134, 3,209, 39,206,
+158,190, 71, 10, 2, 20,178, 77, 39,250,159,153, 49, 80,132,179,105,154,196,175, 29, 38,113, 78, 88, 65,145,199,146,142, 88,175,
+207, 80, 57, 73, 52,116, 86, 37,175,196,162,200, 88,231,216,222,188, 34,123, 47,177,224, 57,163,141, 35, 14, 91,148,169,229,239,
+ 84,181,172, 73, 10, 47, 65, 43,168,170,134,213,217, 41,251,237, 45, 41, 38,170,174, 91, 38,132, 74,107,180, 17, 98,166, 54,154,
+113,183, 67, 27,141,182,181,112, 47,252,128,107,106,252,174,167, 90,119, 18,122,149, 18, 41, 39,170,182,193,185,134,201, 71,153,
+ 92,110,111, 37, 95, 94,107,162, 23,146,171, 82,220, 11,163, 50, 90,211,180, 34, 10,220,221,190,148,103,171, 54, 75, 70,129,144,
+ 6,245, 18,229,171, 78,223,253,154,152,205,146, 48,148,231,113,112,213, 84,152,170,166,118,142,238,244, 28,101, 29, 77,221,138,
+202,214, 57, 44,138,203,247,190, 72, 28, 7,250,190,167,114,150,253, 97, 47,194,139,195,129,182,182, 4, 44,167,103,231,116,111,
+127,145, 47,253,202,223, 43, 12,116,141,194, 8, 2,211, 86,180,235, 19,198,113,228,195, 63,255, 87, 60,255,203,127, 77,152, 38,
+241,171, 46, 48,145, 84, 44, 96, 34, 66,202,128, 5, 30,156,156,240, 23,127,254, 39,252,147,111,126,131,223,248,181, 95,226,118,
+187,231,251, 31,126,202,213,237,134,195, 56,210, 15, 3, 62,102, 38,239,233,135,158, 97,156,152, 70,217,149,207,135,185, 32, 96,
+ 19, 62, 21,122, 92, 17,140,101, 36,148,230,173,119,222,227,241, 59,239,242,250,217, 55,191, 71,166,160,104,115,121,125,249, 72,
+ 12,167,181,198, 57, 39,172,243,146,144, 20, 99, 42,251, 90,121, 16,121,239,165,147, 77,169,248,246,115, 81, 92,139, 95,218, 57,
+ 39, 94,233, 35,235, 85, 78, 18, 50, 35,225, 43,177, 68,142, 6,198,253,158, 23,159,125,202,112,216,147, 99, 16,122,209,231,178,
+216,203, 52, 33,166,251, 20,180,215,118,233,247, 4,102,234, 46,152,228, 24,153,121,140,242,189, 79,110,227,141,246,174, 16, 34,
+182,170, 57,187,120,136,171,171,226,189,148,149,128,209, 86,110,226,114,128, 44, 84, 61,165,136, 69,169,157, 83, 66, 37,208, 41,
+113,253,234, 25, 77,235,100, 63,181,221,115,232,195,145, 54, 64,196,107,175,255,124, 57,103, 92, 73,104,203, 71, 73, 88, 11,123,
+127, 22, 94, 42,133,177, 74,194,145, 22,175, 60,244,125, 88, 14,245,227,159,249,157,119,222,225,173, 39,111,243,219,191,253,247,
+121,249,226, 21,223,254,214,191, 70,107, 77, 87, 32, 53,171,213, 10,107, 44, 62, 70, 62,189,186,101, 28, 5, 78,210,216,138,135,
+ 23,231,124,225, 43, 95,227, 7, 63,250, 17,127,246,237,111,137,162,121,156,238, 29,230,199, 54,189,191,173, 51,255,119,233,212,
+127,230, 65, 95, 66, 75,140,169, 0, 69,189,234, 8,211, 40,190,115,231,228,107,182, 90,178,205,181,209,197,206,213,200, 1, 61,
+121,146,239, 69,245,157,228,224,110, 87,107,114, 74,248,113, 36,132, 9, 91, 85,164,105, 2,235,202, 92, 90,147, 81,216,170,146,
+ 49,165,150, 3,198,212,141, 92,187, 73,214, 48,198, 58,178, 18, 70,194,176,223, 74, 24, 84, 18,125,130,173, 87, 84,149,208,254,
+180, 85, 56, 99,208,149, 99,127,117, 35, 33, 79, 74,238,213,172, 65, 47,140,109,208, 81,120,217,245,106, 37, 5,129,177, 76, 51,
+ 30, 57,103,166,161,199,213, 53,186,106, 73,195, 94,246,232,100,252,112, 0, 91,139,110, 40, 41,170,202,209, 61,122,155,202, 25,
+174, 95,189,146,174,154,204,230,217,135,244,155,155, 82, 24,170,133, 50, 23,124,192, 24,201, 89,207, 41,129, 17, 97,165,159, 38,
+ 48,178,154,137, 5, 89,122,249,232, 29,110, 94,124, 74,158,122,148,109,105, 79,215, 92,125,250, 33,109, 43,193, 36,196, 32,130,
+ 45, 52,166,233,120,252,193,151,217,111,183,228,113,135,174, 58, 78, 31, 60,150,131,113, 28,216,148,241,117,191,221,144,198, 3,
+174, 93, 19,166,177, 0,120, 64, 87, 22, 99, 42,246,215,175,176, 69, 16, 71, 74,212,231,151, 50, 53,219,221,202,202, 32, 71,252,
+ 52,144, 49, 11,202,219, 85, 21,198, 90,252, 56,160,148, 28,148,202, 84,232,170, 42,248,223, 3,132,132, 89,119,196,126, 68,169,
+132, 91,173,201, 73, 97,107,203,246,249, 11,234,213,138,106,181, 22,209,169,214,140,227, 84,114, 11, 20,149, 49, 12,123,185, 63,
+172,150,209,121,214, 21, 57,140,210,160,141, 3, 90, 67,123,122,137, 50, 22,211,212,194,188,200,153,254,246, 26,107, 13,190,239,
+ 73, 41,138,159, 61, 70, 82,240,100, 37, 65, 71,221,122,205,246,246, 26,163, 20,209,139,120,212, 88,199,201,229, 35,246,219, 91,
+218,245,154,201, 15, 24, 52,253,110, 47, 5,134, 54, 98, 5, 79,145, 56,150,164, 65, 99,132,187,223,116, 66, 68,108,106,234,102,
+205, 84,112,202, 49,120,201, 49,152,167,128, 69,247,161,146, 88, 76,133, 80, 56,200,186,170,238,164,153,209,134,108, 13,214, 89,
+249,188, 98,196, 79, 7,172,171,202,230, 44,162,172,152,130,163, 31, 48,117,221,252,174, 51,137, 48,141, 88,138,184, 37, 74,108,
+ 99,158, 70,246,155, 91,110,175, 95, 17, 38,207, 52,246, 69, 13,171,104, 86, 29, 99,127, 64,165,196,246,246, 26,149, 69,121,190,
+189,189,165,169, 42, 48,150,147,179,115,188,159, 24,110, 95,241,234,217, 39,156, 93, 62, 34,219,138, 7, 15, 31,224,170, 26, 31,
+ 67, 73,154,153,232,206, 31,240,226,163, 31,145,252, 40,123,242, 89, 2,173,100,204, 62, 43,224, 29,138, 47,127,240, 62,223,251,
+235,191,196,198,129,191,243,181, 15, 88,175, 87,124,248,233, 11,158, 93, 95, 51, 76,158, 97,148,221,120, 63,120,250,126, 96, 63,
+244,244,253,196, 56,200,254, 60,198, 40, 35,167,152,137, 33,225, 99, 34,198, 25,249,106,104,215,231,252,242, 55,127,157,211,139,
+ 75, 36, 19, 70, 14,232,217,170,101, 75, 76, 36,115, 10, 89, 65,213, 6,239, 23,194, 93, 46,225, 56, 33,220,101,147,207,157,250,
+228, 5,192, 81, 85, 21,206, 90,186,118,141,179, 66,163,115, 78, 70, 72,218, 80, 2, 80,226, 61, 44,235, 28,251,154,114, 94,198,
+243, 74, 41,218,174,227,252,225, 35,214, 39,103, 12,211, 32,160,130, 69,189, 62,123,154,242,189, 4,168, 95,100, 76,251,250,193,
+145, 95,163,109, 29, 23, 3,111,250,158, 75,231, 77,166,233, 78,208,243,195,162,168,200, 83, 73,194,139,169, 4,189,148,104, 87,
+165, 50,137,180,208,228,230,177,123,229, 28,239,189,255, 1, 93,183, 38, 68,207,110,187,101,242,199,216,220,226, 79,207,234,115,
+218, 0,163,149, 96,115,143,202,180,101,170, 48, 39,203,149, 49,175,124,190, 37,155, 91, 27, 97, 96, 31,145,255,142,187,231,182,
+ 91,113, 24, 70,254,213, 31,255, 17, 87,215, 87,244, 67,207,118,191,101,179,221,240,242,234,138,171,155,107,110, 55, 55,108,183,
+183,188,122,241,138,241,176,197,105,232,125,100, 76,153,111,253,241,255, 65,191,223, 50, 76,163,140, 9,203,161, 62,187, 11,142,
+ 69,146,111,234,202,255,127,249,165,144,156,244,102,133, 50, 78, 68,155,109,135, 53, 21, 97, 20, 44, 42, 41,226,170, 70,250,249,
+ 56,128,173,113,182, 34,250,137, 56,141, 84,237,170, 80,177, 68,241, 61,175, 46,102, 27,228, 28, 68, 52,167,152, 69, 63,161, 52,
+ 84,117, 35,214, 36, 63, 22, 24,135, 22, 29,197,216,203,222, 82,107,180,107,208,192,212, 31,150,253, 50,198,208,173, 79,169,155,
+150,126,191,197, 57, 43,144,163, 16,200, 70, 19,167, 73, 62,107, 35, 49,154, 90, 91, 97,132, 71,143,181, 21,202, 88, 86, 23,151,
+ 66, 26, 11, 1,237, 68,156,149,163, 76, 26,108,213, 96, 42, 89, 13,164, 40, 35,209, 48,142,228,163,159,171, 89,159,209,156, 94,
+162, 82,160,223, 9,155,126,232,119,140,251, 77,201, 82, 40,233,130, 89,220, 39, 25, 68, 17, 30, 50, 88, 75, 46, 57, 15,185, 8,
+ 66,115, 12,229,218, 21,161, 85,115,114,142,171, 91,252, 97, 75,247,232, 9,231, 15, 30,113,216,238,121,235,139, 95,199,251,145,
+113,123, 43, 0,176, 36, 62,253,205,243, 79,152, 14, 91, 82,130,232, 7,198,126,207,254,250, 5,211,110,195,246,234, 5, 97,154,
+ 72,209,163,141, 33,145, 68,213, 62,201,251,158, 99,102, 58,220, 66,158,157, 36,138,170,109,203, 84, 82, 51, 28,118,228,156,169,
+ 79, 46,100, 69, 48,238, 33, 38, 84, 78,133,121, 48, 9,196,169,237,164,249,106, 27,180,210, 76,125, 79,142,130, 19, 71,219, 66,
+217,172,120,240,222, 87,217,223, 92,137,128, 24,141,170, 44,204, 84,207, 20,201,209, 19,166, 3,113, 24,228,251, 28,118,104, 45,
+ 24,243, 56,179,216,135, 3,202,104,170,166,193, 53, 43, 40, 20,198,208,239, 25, 54, 55,132,126, 47,238,146,114,224, 26, 43, 96,
+180,170, 91, 97,171, 74, 48,227,193,227,199, 65, 98,177,199, 81,126,150, 36,227,251,126,119, 75,215,173,177,182,162,223,222, 50,
+ 13, 61,218, 57,180,169, 74,200, 84,194,212, 13,117,187,150,247, 52, 70,186,243, 75,108,177,136, 91, 99,161, 80, 66,115, 74,226,
+190, 72,178, 91, 79,177, 76, 12,163, 76,143,179,130,170,109,229,185,173,133, 99,226,202,251,175,148,194, 54, 53,205,250, 20,239,
+ 3,198, 73,209,107,235,134, 24, 34,198,138,183,191,110,215,152,136,250,221,224, 39, 73,144, 9, 94, 82,147,148, 66,165,196, 52,
+142, 84, 86, 18,103,114,140, 12,187, 45,155,155, 43, 76,221, 74,166,242,245, 21,166,118, 28,110,174,216, 92, 61,103,232,247,140,
+ 67, 79,229, 12,187,219, 91,166, 97,196,185, 10, 63,121,108,244,108,111,174,121,247, 75, 95,193,117, 39,140,211, 72,206, 48,236,
+247,248, 98,129,113,206,177,127,241,169, 92,160,139, 66, 92, 14, 48, 82,198,104,203,147, 7,231,188,247,228, 17,219,221,134, 56,
+236,249,123,191,242,117,158, 61,127,193,199,207, 94,177, 27,122,246,135,129, 93, 63,210,247, 35,125,223,115, 24,122,134,126, 96,
+ 28, 71,166,201, 19,125, 42, 81,169,146,141,238, 83,190, 19,189, 41,195,197,227,167,124,240,181, 95, 42,161,138, 37,174, 80, 73,
+ 44,233, 44, 4,155, 69,129, 25,137, 40,245,222, 47, 57,206,179,103,219,135, 99, 58,220, 76,170, 58,122, 64,151,238,125, 62,252,
+ 99, 10, 82, 77,134,105,241, 86, 47, 10,225, 50, 5, 88,172, 98,179,197,143, 59, 21,241, 60, 38,174,219,150,139,203,135,180,221,
+ 10,231,106,162,247, 24, 3, 42,107,224,223,109,239,250,249,223,171, 5, 81,187, 36, 82, 41,245,198, 29,251,221,129, 47,235, 0,
+ 87,246,127, 20,212,235,236, 67,159, 19,134, 84,177,154, 9, 69,106, 14,181, 60, 2,202, 68, 81, 37,251, 24,216,236,247,220,110,
+119,220,222,108, 10, 79,252,110, 85,115,103,129, 84,247,138, 14,117, 71, 80, 89,194,127,102, 33,230,220,186, 43,238,162,178,164,
+102, 43,211,152,194, 53, 56, 94,163,196,121, 47, 92,248, 6, 31,253,228, 39,236,246, 27,198, 97,162,239,123,130,159, 24,135,158,
+195,126,199, 97,191, 99,187,221, 50, 13, 3,195,208, 83,187,154,171,155, 43,222,253,210, 87,248,243,111,125,139,253,118,139, 47,
+ 7,250,113,177,240,249,131, 91,221,203, 66,120,253, 84,214,218, 20, 92,172, 89,172,133,191,208,103,157,149, 88,147,144, 7,238,
+140,111,182, 70, 51,244,135,187, 4, 49,146, 28, 8,128, 50,150,148, 35, 57, 6, 84,202, 69,237,157,239, 60,216, 86,172, 76,174,
+170, 68,152,148,210,114, 15, 64, 22, 45, 14, 37,124, 72,105,218,213, 10, 63,121, 97,178,135, 88,246,205, 82,104,168,226,227,150,
+ 81,112, 70,187, 90, 58,107, 91,203,218, 75,203,250, 38, 22,139, 97, 24, 39,252,161, 47,182, 55,177,117, 90, 39,148,176, 56,138,
+ 55, 57, 78,226,157,247,227,132, 31, 5, 93, 27,195, 68, 14,114,152,200,158,124,196,143, 3, 57, 4,210,228,203, 53, 41,247,163,
+ 42,157,189,107,107,140, 43,176,147,171,231,197,178, 39, 69,139,109,107,210, 56,150,124, 3, 3,218,136,150,164,164,167, 25, 39,
+ 54, 54,107, 37, 93,208, 58, 43, 66, 76, 43, 19,129,217,118, 21,253,196,184,187,165,233,206,193, 89,252,110,199, 68,164,118, 53,
+ 73, 65,236,123,161,244, 41, 67, 74, 35, 57, 68, 84, 14, 52, 39,103,164,225,192,184,219,150,252,109, 81,108,163, 69, 33,238,170,
+154,241,176, 21,149,189, 53, 18,227, 73,198,184, 6,109,138,125,211, 88, 17,160,141, 35,214, 89,206,222,122, 7,103,100,125,104,
+235, 22, 63,138, 95,122,206,163,207, 89, 44, 95, 97, 26,241,135,189,220,207,126, 4,165,152,166,158,105,191,167,238, 86, 2,253,
+105,239,172,207,246,244, 20,187, 90,163,109,141,237, 86,242, 62, 36, 48, 77, 71, 78, 89, 68,117,197, 83,158, 70, 17,155, 37, 47,
+ 93,235, 60, 50,207, 74, 44, 93,113,148,200,106,227, 42, 25,229,219, 26, 93,166,160,106, 22,110,134,128, 31, 6,166,177, 71, 27,
+ 9, 22, 74,209,163,148, 89, 38,121,169,136, 65,167,126, 71, 70,179,190,124,200,225,230,134, 56, 13, 52,167,167,212,235, 19,186,
+211,243,114, 70, 36,140, 85,168, 36,238,134,122,125, 42, 54, 83,239, 81,206, 72,145,172, 32, 36,201,104,168,218,150,147,139, 75,
+148,117, 24,227, 4,106, 84,213, 40,231,112,117, 43, 19, 46,165, 48, 85, 77,214,153,122,181,194,143, 35,195,126, 79,189, 94, 9,
+123,161,109, 5, 36, 86,183,232,170,161,110, 86,216,174,193, 88, 99,127,183,182,182,236,178,197, 11, 61,119, 8,190,216,169, 98,
+140,228, 16,168,156, 69,229,204,238,230,213,124,226,114,245,242, 57,211, 32,135, 38, 9,234,170, 46, 65, 39,242,128,110,155, 70,
+198,164,251, 61,117,221,242,252,167, 63, 96,154,122,170,238, 4,101,140,188,249, 5,248, 81,175, 78,121,249,209,143, 37,163,118,
+ 86,125, 23, 90,144,214,154,202,104,222,122,112,193,111,255,198,111,114,187,235,153,246, 87,228,156,248,248,197, 21,219, 97, 96,
+191, 63,176, 59,200,193,126,232,123,250, 97, 88,124,230,163, 23, 53,187, 79, 16,202,126, 55, 37,200, 81, 24,244,182, 89,241,133,
+175,124,131,183,222,121,151,144,227,145,194, 61,139,205,109,182,150, 45,108,120, 81, 97,207, 15,223, 80,186,231,249,128, 19,226,
+154,185,247, 32, 94, 24,246,249,206, 3,157,146,208,236,124, 8, 12,195, 32, 86,184,153,122,231, 61,241, 72, 68,167,142,108,126,
+115,135, 57,127, 63, 17, 82,221,129, 96, 92,221,112,118,118,193,219, 79,159,242,107,223,248, 6,219,253,158,170,170, 24, 75, 62,
+251, 47,218,229,189,222,173,207, 93,244,235, 35,250,123, 7,232,113, 58, 93,204,104, 87,209,174,214, 11, 93,107, 30,217,205, 52,
+188, 59,141,128,236,183, 99,138,196,114, 45,230, 36,252,245,148,226, 81,114,165,196,184, 14,251, 61, 41, 77,132,123,135,250, 93,
+166,252,253,117, 66,177,142,149, 0,133,187,194,104, 78,230,186,163,167,169, 35, 22,119, 46, 7,120, 40, 43,139,187, 67,253,238,
+208, 29, 14,226,178,152,134, 99, 81,155, 95,128, 46,177, 20,200,126,154, 64,105, 14,135, 3,104,203,233,217, 37, 63,249,209,247,
+229, 58,154, 99,131,143, 88,208,175, 31,218,182,110,168,187,174,176,241, 53, 70, 91, 81, 95,107, 77,221,117,196,156,113,117,139,
+209, 86, 68,138, 85, 85, 70,216,241,103,124,186, 26,109, 92,121,112, 24,114,242, 50,125, 82, 37,116, 71, 43,252,208, 47, 78, 14,
+ 91, 85,101, 44, 92, 75, 34, 86,201, 20,200, 57,163,173, 65,149,181,135,240, 8, 12,182, 28,118,218, 56,146, 23,166, 54, 89,118,
+242,112, 52,253, 50,134, 20, 51,214,153, 5,125,153,147,236,176,179, 50,232,156,240,126,162, 89,159, 74,234,218,236, 44,209, 98,
+149, 37,137, 77,205,104,131,182, 6,215, 84, 12,125,191, 60, 87,210, 36,206,136, 28,198,194, 66, 80, 24,107,150,235,200, 24, 45,
+ 58,147, 16, 37,228,168,236,187,231,130,111, 89,131, 20,118, 65,138, 81, 0, 62, 94,166,151, 85,179,102,191,187,197, 31,118,168,
+ 74,172,190,211,225,192,180,223, 82,107, 75, 44,186, 13,137,173,238, 74,102,187,145,125, 71, 18, 5,179,115, 86,198,254, 41,137,
+ 85, 42,196,146, 17,239,200,126, 18,141,135,173,216, 93, 95, 49,236,110,209, 37, 4, 42,236,183, 68,157, 48,198, 17,147, 71,187,
+ 6, 69, 70, 87, 21,227,110,131,138,210, 73, 74, 71, 39,207,147,170, 28,198,126,216,201,228,192, 24, 17, 31,230, 88, 64, 90, 34,
+214,210,214,201,136, 26,104,218, 86, 50, 18,108,141, 94,157,208,180, 43, 65, 11, 23, 17,171, 92, 11,250,232, 25, 80,166,109,229,
+153,100,235,154,243,119, 62,224,209, 23,190,194,197,211,119, 56,125,244, 4,109, 29,175, 62,252, 9,164, 72, 30, 71, 14,215, 47,
+ 25,111, 94, 17, 14,123,198,205, 53, 49,121,113, 65, 4,143,113, 21,182,169,209,174, 42,170,253, 17,235, 26,180,117,203, 68,168,
+106, 58, 41, 2,235,150,122,181,198,181,107,185, 86,167, 65, 10,116, 43,157,116, 12,190,220,191,153,166,235, 22,123, 98,158, 60,
+166,170, 68,231, 83,186,250, 28, 68,167,212,172,215,164, 8,174,169,152,134,189,224,191, 21,146,124,103,197, 99,175,180,165, 62,
+ 57, 21,186, 93, 63, 74,102,129, 49, 37,116, 69,188,238,214,105,177,200, 25, 71,127,123, 45,216, 91,171,165, 8, 69, 34,154,179,
+ 82,114, 63,205,137,154, 5, 13,155,201,216, 74,152, 30,201, 7,252, 52, 82, 85, 85, 17, 37, 3, 86, 17, 14, 7,140, 50,234,119,
+231, 78,245,110,135,154, 72,196,162,216, 83,146, 55,157, 37,176,195,123,143,202,176,185,190, 98,119,125, 77,191,185,101,232, 15,
+ 12,251, 61,187,219, 27,246,219, 91, 54, 55, 87,164, 24,216,221, 94,179,187,189,229,176,221,112,216,221,178,219,110,137,211,196,
+179,143,126,194,230,197,167, 84, 77,195,217,163,199,100,165,232, 86, 43,208, 22,107, 13,155, 79,126, 92,118, 9, 44,176, 25,149,
+ 21,219,155,107, 46, 78, 78,249,244,249, 11, 82,134,143, 63,250, 17,251,161,231, 48,120,118,251, 61,219,195,129,253,225,192,208,
+ 31,232,135, 65, 72,112,163, 39,248,192, 20, 11,201,108, 57, 72,138,164, 74, 41,214,231,151,124,233,151,126, 89, 56,219, 90, 47,
+169, 97,186,116, 44,174,236, 81, 77, 17, 82,205, 7,198, 49, 93,237,206, 70,148,143, 60,246,102, 25,217,207, 7,250,241, 3,123,
+206, 67,159, 57,231,199,193, 47,247, 44,108,206, 45, 10,208,153,210,198,226, 71,190, 75, 11, 91, 50,229, 99, 66,199,196,186,169,
+249,173, 95,251, 85,190,255,195,239,145,115,228, 63,250,103,255,156,205,205, 75, 54,219,237,207, 13,109,249, 89,135,123, 94,136,
+126,234, 40,234, 85,125, 78, 89,173, 11,253, 47,163,104,154, 21,182,174,238, 40,103, 37,216, 98,166,225, 29,191,119,243,244, 34,
+198, 57,184, 37, 45,162,190, 88, 40,100, 58, 11,255, 64,124,246,133, 61,127,212,201,206, 76,131,121, 79, 76, 78, 84,206, 96,116,
+ 49,126,228,187,168, 83,238,125, 94,250,232, 8,157,197,116,185,104, 29,242,242,112,158,209,158,119,113,155,178, 27, 59, 94,177,
+136, 80, 80,151,196, 63,121,136,132,148, 75,124, 36,116, 37,182,114,115,253,106, 73,103,122,125,111,190,216, 55,181, 40,157, 5,
+103,233,137,217, 23,182,125, 81,225, 55,173,236, 30, 67, 16, 37,172, 82, 18, 15, 89, 80,173,117,183, 46,146, 10,185,238,151,185,
+139, 86,212, 39,103,203, 1, 61,175,188,100, 4,110,138, 54, 68, 17,162,132,202,228, 66, 1, 20, 58,154, 64, 49, 4,177, 43,110,
+ 20,178,164,253, 25, 99,136,201,151,189,186,198,247,187, 34, 40,147, 3, 32, 5, 65,112,198,121, 28,159,228,247,202,150,238,204,
+218,226,137, 22,152,136, 93,173, 57,127,235, 41,166,233, 24, 55,183,146,100, 55,201,232,222,212, 98, 73,178,206,201, 88, 59, 38,
+ 14, 55, 55,228, 48, 45, 66, 83,109,172,160,120,251,253, 34,220, 19,107,155,145,255,127,241,148, 7,223,203,103, 88, 10,143,153,
+239, 80,181,181, 0, 63, 10,233,176,170, 92, 57, 8,100,122,112,184,189, 38,142,131, 68, 75,143, 7,252,208, 83,183,141,116,250,
+ 37,171, 93,105, 5, 70, 48,163,217, 57,153, 46, 84, 53,196, 76,240, 35,227, 48, 16,167, 81,158, 49,182, 42, 55, 79, 20, 97, 93,
+ 41,116, 4, 29,170, 57,127,235,169, 92, 83, 5, 77,157, 67, 44, 66, 62, 45,239, 77,242, 18, 46,101, 4, 68,149,166,161,104, 36,
+214, 98, 43,156,198,133, 34,152, 10,192,132,194, 79,152,113,180, 74, 25,234,149,140,148, 87, 23, 15,139, 80, 95, 51,245, 3,222,
+ 15,130,196, 53,150,135,239,127,145,211, 71, 79, 88, 61,120,200,250,193, 99,161,198,149, 49,244,188,246, 66,101,129,118,189,251,
+ 62,202,213, 68, 12, 89, 43,134,126, 75,242,131, 20,192,202,224,170, 10,215,201, 78,221,117, 39,130,183, 86, 6, 99, 53,186, 36,
+137,234, 82,105, 87, 77,131,237, 86,116, 39, 23,216, 50,249,176, 93, 71,213,173,200,126, 44,197,173, 34, 28,246, 66, 13,212, 74,
+248, 16,211, 72,152,119,218, 5,139,110,173,132,243,104,115, 87, 88,205,228, 69,148,198, 85, 21,202, 58, 92, 85,129,130,118,125,
+ 90,176,174,213,178,182,171,219, 14,162, 76,160, 82,136,128, 64,151, 66, 10,140,251, 3, 58, 73,120, 80, 8,129, 28, 36,139, 67,
+ 87, 53, 85,229, 74,188,178, 20,183,211, 56,146,189,168,229, 83,150, 40,234,186,145, 17,123, 78,119,177,221, 49, 6,234,110,133,
+ 15,113, 81,222,123, 31,208, 40,148,169, 92, 54,186, 42, 15,163, 80,160, 28,186,140,200, 68, 68,164,141,166,109,133,197, 27,124,
+ 98, 26,101, 39,227,189,151, 81,189,149, 49, 82,246, 35,171,147, 83, 34,136, 74, 59,138, 61,237,228,228, 4,235, 44, 7,159,136,
+185, 80,180, 92, 77,189,106,184,120,252, 46,221,233, 37,103, 15, 30, 82,119,107,214,167,167,124,252,103,127, 68,216,221,146,115,
+184, 3,207,164,204,245,139, 79, 57,105, 27, 98,132,186,174, 24,251, 45,181, 17,181,237, 52, 77, 12,227,184, 16,225,252,228, 9,
+ 94, 68,112,169, 28,230,243, 77,190,140, 38,181,229,236,225, 83,222,251,194, 23, 36,240,100,238,224,202, 27,172,203, 7, 63, 87,
+179,179, 34, 61,197,184, 80,212,142,249,232,233,136,166,118, 39, 16, 11, 50,242, 42,129, 33,198,152,123,244,178,101,164, 59,179,
+217,103,220,170, 18,146, 89, 42,241,175,199,136,214,121, 4,239,189, 95, 48,171,243, 40, 57, 6, 25,135,174,234,138,183, 31,158,
+243,253,191,249, 46,155,195, 30,239, 61,239,125,240, 69,126,240,189,191, 98,187, 59,208,247, 35,199,197,220, 47,162,152,254,124,
+247, 30, 63,135, 71, 61, 38,184,133, 4,174,169,105,186, 53,202,222,241,252,117,113, 22, 28,103,192,207, 41,105,199,223, 71,171,
+ 59, 75,153,214,119,133,139, 45,147,130,231,159, 61,147, 49,105,140,159, 19,240, 29,227, 82,180,202, 52,165, 3, 75,197,173,144,
+239,248,186,247, 82,178,238,212,237,105,241,176, 79, 62,148,110,189,136, 21,179, 94,248,242,115,129, 51, 3, 85,142,127,213,117,
+141, 82, 98,235,201,139, 37, 76,246,170,151,143, 30,227,189,103,115,125,117,111, 84,254,250, 4, 69,148,188,229, 16,201,243, 13,
+ 61,145,115,162,114, 13,193, 71, 92, 85, 9,246, 53, 76,196, 40, 2, 43,235,172,120,144, 11,247,193, 24, 75, 44,228,185,156, 3,
+228,162,250,213,242, 26,181,117,228,233,128,159, 60,174,145,152,215,249,189,141,229,122,167, 96,123, 82, 89,109, 88,107, 8,197,
+ 22, 20, 39,209,125,100, 35,216, 79, 99, 68, 36, 90,117, 13,195,237, 13,214, 58,130,151,140,131, 20, 37, 48,199, 53, 53, 33,133,
+101,197, 81,175, 86,178, 75, 14, 94, 68, 87,195, 1,237, 42, 50,170,116,151, 35, 74,207,162, 71, 39, 99,102, 91,225,180, 33,146,
+136, 94,138, 29,241,163,231, 50,182,207, 98, 77,165, 36,215,217, 10,215, 52,119,247, 90,140, 36, 47,235, 62, 99,181,168,155,141,
+146, 88, 87, 99, 36, 72, 68,137,210,222, 15,123, 81, 85,231,132,214,118,177,221,106,227,176, 93, 71,152, 2, 42, 70,236,170,197,
+168,138, 76,100,218,109, 36,144,200, 40,146,177,204, 97, 4,139,179, 34, 69,177, 61,133,128, 63, 28, 72,222,203,206,182, 8,250,
+156,109,104, 26, 73, 23, 75, 49,225,125,164, 62, 59,195,239,183, 36,239,169,187,149,236,126, 55,183,242,220,210,242, 60,142,227,
+136,174, 43,121,253, 41, 98,235,150,156, 53, 85,123, 2,113,162,223, 92, 19,194,116, 84,220, 74,126,135, 43,185, 2, 74, 25,218,
+211, 83,153, 40, 93, 62, 64,215, 53,182, 93,227,180,198, 7, 95, 16,192, 70, 0, 80,198,144, 82, 96, 60,236,229, 90, 73, 9, 63,
+ 28, 24,119, 27, 14,183, 27,180,134,230,226,193,146,195,174,141, 33,249,136, 31,123, 82,156, 56,121,240,136,148,181,172, 24,154,
+ 53,193,247,184,110, 69, 46, 98, 54,101,107, 9,231, 41,153, 9, 41, 6,201,174,139, 17,109, 13,166,178,132, 97,146, 21, 76, 6,
+ 21, 70,108, 41, 94,134,205,141, 8,135, 99, 92,132,203, 42, 73,152,144, 2,148,117, 34, 86,179, 22,219,212,114, 14,204,153,231,
+ 41, 97,108, 69,138,129,105,242, 84,109,135,117,150, 97,191,163,105, 86, 36,149, 8,195, 88,252,227, 65,166, 54,206,129,117,212,
+171, 21, 83,193,165,147,165,152,215, 85, 3, 33, 72,161,163, 13,193,135, 50,242, 87,139,223, 92, 44,183,242, 76, 9,105,126,222,
+204, 52,189, 73,114, 20, 98,148, 32,164, 28,197, 94,170, 16, 18,100,185, 79, 45, 80, 48,142,110, 97,108,235, 82,125,172, 86,107,
+198,113, 96, 42, 55,236, 56,142,184, 82, 65, 43,149, 72,217,139,220, 41,138,122,155,156, 49, 10,214,171, 53,155,156,197, 2, 48,
+ 14, 88, 45, 33, 14, 4, 79,240, 94,114,110,199,158, 56, 57,134,155, 27,169, 90,180, 41,227,232,128, 5, 78,215, 43,156,179,104,
+173,168, 92, 37,209,149,211,192, 38, 78,120, 47,140,222,186,174,208,185, 98,119,243,146,148,194, 29, 25, 46, 68,124,144,195, 60,
+ 22, 47,232, 34, 96,155, 31,160, 74,113,114,118,193, 59, 95,250,146,252, 12, 71,156,115,217,177,136,240,205,154,146, 72,150, 67,
+ 1,124,136,203,217, 20, 74, 89, 76,162, 28,181,214, 82, 85, 85,233, 44,147,140, 54,181,161,109,170, 69, 76, 39,126,217,226, 31,
+ 95,186,118,241,251,106,173,113,165,160, 80, 41,149, 15,210,209,212,134, 97, 28, 8,161, 88, 29,138,189,111, 62,224,231,209,104,
+ 42, 10,122, 91,215,212, 64, 99, 18,127,246,103,223,166, 31,101, 21, 17, 99,100, 56,236, 81,100, 42,103,152, 38,125,151, 61,254,
+ 26,150,247,245,238,251,103,217,161, 94,223,167, 23, 18,170,160, 85,115, 46, 1, 26, 50,126,180,152, 5, 76, 19, 99, 90, 16,185,
+119, 42,244, 35,251, 92,177, 83, 37, 53, 71,168,138, 14, 98, 6, 16, 37,163,142,160, 43, 63,199,202,149, 51, 85,101,151,232, 77,
+ 85, 56,180,234,136,121, 48, 23, 87,220, 67,214,136, 47, 54, 33, 93,169,210, 80,219, 6,227,172, 64, 31,128,113,232,101,172,103,
+220, 50,206,227, 8, 74, 52,142,227,162, 63,200,121,246,252,203,251, 21,124,144,170,252,104,186,243, 57,140,155,182,104,215, 20,
+100,109, 22,129,214, 20, 36, 86, 84,233,162,228,181,242,112, 46,158,109,167, 5, 12,227,199,210, 93,207, 32,169,201,163,180,162,
+ 89,159,160, 85,226,176,221, 18, 99,194,232, 8, 89,147,198,177,216,129,140, 92,247, 85, 35,202,239, 24, 72,125, 47,120,212, 73,
+ 58, 64,173,197,161, 48,141,195,178, 67,143, 57, 99,181,232, 37, 92,201, 53,239, 86, 43,134,195, 30, 87, 58, 13, 93, 10, 85, 99,
+ 42,148, 74,139,125, 53,233,132,209,150,225,112, 16,222,133,130, 20, 2, 57, 38,124, 56,160,181,145, 38,193,128,171, 90,156,177,
+101, 29,209,202,244,161,164,119, 85,117,203,216, 79, 98, 7, 42,152, 91, 17,202, 89,177,149,185,134,172, 52, 62, 39, 12, 48,237,
+ 7,185,145,231,156,130,152,100, 20,156,133, 2,103,234, 70,186,224,190, 47,208, 28,181,140, 93, 83,140,210,217,106, 83, 10, 38,
+201,249,182, 93, 3, 73,161, 79, 90,226,112,144, 3, 44, 75, 97,225,251,219, 5,157, 45, 9,108,101, 38,180,151,136,232, 92,162,
+122, 83,142,212,205,169,248,236,147,103,119,115,189, 4, 52,105,224,240,234,153, 76,227, 92,205,161,223, 75,166,248,194,130, 40,
+175, 5, 32,102, 70,223, 75,129,149, 7, 98, 12,178,222, 48,118,113,250,184,102, 77,187, 58,161, 41,224,149,238,100,205, 20,164,
+ 80,148,142, 59,224,131, 76, 59,199,253,150, 49, 38, 98, 24,197,101,226,106,166,225, 64,242,178,110, 2, 69,211,173, 9, 83, 47,
+201,122,109, 71,213,157,130,211, 76,251, 61,113, 24, 80, 90,227,195, 36,162,198,202, 80,153, 83,137, 21,237, 58,226,212, 19, 75,
+154,162,239, 15,203,179, 82,135,128,107, 87, 12,251,145,232, 7,148,213, 88,219, 72,168, 82, 85,147, 38,177,246, 78,195, 30, 5,
+ 84,174, 34,135,137, 48,236, 89,159, 95,128,115,164,113,100, 56, 28, 88,157, 93, 98, 84, 46,174, 36,150, 41,169, 80, 15,181, 48,
+ 48, 74, 94, 5, 42, 17,211, 40,215,132,159,240, 36, 82,168, 80, 10, 9, 35,170,220,130, 28,214,214,112,178,126, 64,156,196, 46,
+ 61,238,246,104, 39,141,151, 46,118,232, 28, 5, 68,163,157, 45,215,130, 88, 57,181, 49, 76, 67,143, 53,154, 80, 38,225, 49, 6,
+180,213,196, 36,120,226, 48,149,231, 68, 17,100, 83,105,140, 66, 4,164,218, 96,107, 39, 43,190,113,196, 26, 45,251,155,105, 44,
+ 17,114,214,150, 40, 56,176,214,208, 52,103,146, 62, 54, 78,232, 70, 14,166, 76, 68,107,119, 39,188,202, 18,167,106,173, 45,234,
+234, 76, 93, 87,172,234,154,151, 37, 43, 59, 21, 26, 85,242,158,132,151, 49,119,152, 72, 74, 18,205,194,140,209, 36,131,134,151,
+251, 87, 92, 94, 92,208, 31,122,166,105, 36,133,204,233, 90, 70, 87,135,221, 65, 84,163, 39, 39,152,213,154,243,199, 31,176,185,
+126,206,245,237,103, 75,148,102, 90,108, 92,119, 25,198, 50,142,213, 75,168,194,201,217, 25,159,254,244,167,212,133, 89, 61,231,
+112, 27,123,196,249, 86,122,177,184,220, 37,194, 73, 36,232, 44,162, 51, 71, 1, 39,226,237,149,239, 49,179,219,149,146,180,174,
+ 76,201, 21, 47, 1, 54, 51, 20,134, 35,170,156,117,142,170,170, 80, 40,198,105, 98,115, 59, 44,157,120, 88,162, 75, 53, 77,211,
+200, 13,114,164,184, 79, 33,113,121,178,162, 81,145, 63,255,139,239,136, 56,107,154, 74,167, 15, 97,216,242,240,226,148,205,118,
+ 95,144,184,211,231,198,190,111, 82,180,191,233,144, 63, 14,147,153,223, 99, 81,226,151, 66,195,106,180,181,133, 43,144,153, 74,
+118,249,220,145,223, 81, 97,213,178,135,141,113, 6,246,132,101,197, 49,143, 56,245,145, 56, 47, 70, 24,246,253, 2,238,121, 61,
+ 89,238,120,140,110, 52, 56, 87, 82,169, 99, 42,246,107,125,143, 91,159,231,252,117,197, 17, 64, 72,145, 77,197,234,228,156,126,
+ 24,201, 33, 96,148,102,236,123, 80,241, 46, 26,211, 88, 92,211,242,228,225, 91, 40,149,249,248,199, 63, 42,171,141,227, 81,250,
+113,108,182,220, 7,227, 56, 46, 58,150,159, 49, 14,161,174, 27, 66,138,101,148, 89,248,242,202,226,227, 88,186, 35, 33,236,205,
+233,124,214,213,248, 97, 36, 71, 47, 96,163,130,218,213, 42,139,149,212, 74,186, 83, 80,165, 24,202,101,143,108, 21,202, 9,246,
+ 56,250,132,213,166,208,252, 34,132, 88, 70,251, 94,236, 99,182,102, 26, 7,121, 99,149, 16,186,100, 34,160, 9,113,162,106, 79,
+136,211,132,113,150,105,146,177,126,213,117,140,253, 32, 5,112,140, 4, 21, 48, 40, 9, 37,162,116, 45, 73,194, 86, 68,248,102,
+136,253,142,156, 11,210, 21, 45,133,212,148,113,173, 0, 90,194, 56,149,184, 86, 95,196,152, 19,253, 32,226, 56,227, 4,231, 41,
+ 7,168,172, 6, 82, 41,204,181,118,144,228,103,203, 74,152, 13,218, 72,215, 29, 66, 57, 28,149, 70,169, 64, 86,147,240, 50,148,
+194,213, 13,126, 60,144,115,146, 67, 60, 75,183, 71, 78, 76,195, 1,165, 12,205,233, 9, 83,144,181,161,239, 15,100, 63, 44, 19,
+ 14,121,198, 33, 25, 12,165,128, 77, 73,118,230,198, 24,210, 52,148,235, 83,254,238,176,219,210, 89,199,238,246, 26,103,141,136,
+149, 83,194, 84, 14,229, 5,206,149,198, 3,170,178,242, 94, 90, 91,148,221,147,168,236,181, 38,145,208,182,194, 86, 21, 85,211,
+226,186, 78, 24,225,198, 82,183, 45,174,110,169,154, 26,109,170, 34,130,126,201,238,246, 10,180,102,119, 53,162,172, 35, 6, 79,
+216,111, 72, 89,209,118, 45,245, 74,104,110, 97,242,104, 45,170,235,186, 54, 12,219, 91, 17, 79,150,184,219,172, 20,251, 87, 55,
+212, 77,141,169, 90,249, 28,181,220,123,140,194,100, 55, 85, 77, 56,236,201, 94,156, 14, 42, 37, 84,101,152, 98,160,173, 27, 66,
+ 24, 81,105, 66,185,122,209,189, 56, 87, 19,167, 9, 91,201,253,169, 93, 77, 56, 92, 99,157,101, 10, 17,140, 98,183,189,161,114,
+ 21,218, 88, 17, 44,135, 9, 99, 44,245,170,163,170, 42, 14,219, 45,121,242, 68, 50,214,233, 99,177, 80, 17,237,170, 69,215,144,
+185,155,196,218,170, 38,101,141,173, 26, 80, 3, 62, 69, 52,224,199,145, 20, 3,253, 86,225,170, 90,168,135, 41,147, 14,101,138,
+165,164,240, 27,251,131,172, 6,212, 26, 83,116, 21, 50,129,128,186,149, 53, 18,193, 75, 61,111, 52,218, 86,228,232, 33, 38,140,
+179,168,194,212,239,214,235,187, 53,102,209, 32,105,175,241,131,151,107,247,242,225,131, 76, 74,236,247,123,241, 69,151,132,167,
+217, 86,112,204,125, 94, 66, 43,172,101,183,221,202, 40,131,153,148, 3,206, 90,218,182,165, 91,203, 72,200,143, 19, 67,121,152,
+167, 24,137,153, 5,109, 9,144,141,154,123,222, 69,184,163,114, 70, 35,123,171,203,139, 11, 66,142, 76,227,200, 48,244,156,173,
+ 59,166,201,139,186, 56,137,234,207, 53,141, 64,243,235,134,243,211, 51,198,194,105,150, 67, 34,210,247,123, 66, 12,164, 56,143,
+ 87, 29,221,122, 77, 93,215,244,135, 3,219,155, 77,121, 56,189,198, 31,215,234,104,111, 74, 17,129,148,124,242,124,140, 33, 61,
+ 2,179,168,251,172,243,187,144,148, 55, 24,130,185,235, 12,151,172,101,165,142,128, 45,175,131, 69,212,231, 20,208,188, 70,122,
+ 67, 65, 61,135,195, 20, 97,159, 88,188, 50, 86, 25,126,253,215,190,206,205, 26,201, 54, 75, 0, 0, 32, 0, 73, 68, 65, 84,205,
+134,237,126,207,245,205,142,253,232, 23,203,221,155,188,229,233,181,108,245,159,213,189,139,135, 93,149,201, 65, 65,252, 58, 11,
+218,144,185,139, 82,157,211,168,230,195,124,166, 59,205, 48,159,227,174,127,222,113, 11,171,125,134,249, 20,174,119, 8,244, 37,
+199,252,117,139,215,241,161,174,138, 15, 84,171, 84,186,114,150,113,214,113, 64,208,113, 26,214, 44,134,114, 77,199,234,228,156,
+113,242, 12,253, 1,171,149, 92,203,214, 8, 94,210, 24,124,185, 1,219,174,195,218, 74, 70,223,198,136,224, 49, 75, 39, 32, 98,
+ 74, 41, 52,239, 89,253,170, 90,174, 81,239,223,248,158,186,170, 45, 22, 48, 1, 77,184,186, 70,105,135, 34,209,239,110, 23,207,
+243, 92,148, 44,144, 24, 37, 84, 42,237,236,162,231,240,147,167,106,107, 73,105,139, 1, 84,150,189, 34, 25, 91, 75,140,168, 50,
+ 70, 2, 48,130,172,179,148,177,152,202,225,234,142, 56,141,140,251, 29,166,114, 24, 43, 22, 47, 91, 50,164, 33,211,111, 55,146,
+251,236,106, 41,144, 80,197,205,209,200, 52, 47,149, 14,184, 64,127,178,204,189,139, 54, 68, 45,110, 5,215,118, 40,237,176,221,
+154,105,115, 85,130,160, 44,211,184, 45,241,158, 53,117, 85, 49, 14,135, 37,108, 38, 83,118,248, 33, 16,167, 94,208,172, 40,225,
+ 52,204,176,170, 34,185, 80, 86, 14,121,138,118, 67, 27, 17, 20,230,162,116, 87, 57, 72,161, 93,236, 92,202, 57,121, 52,232,146,
+ 28, 24, 37,215, 91, 70,245,242,181,105,154,168,187, 86, 30,184, 49, 10, 30,182, 64, 79,140, 17, 53,244,108, 59,245,211,192,126,
+179, 93,160, 72,178,243, 78, 37, 37,112, 6,109,149, 16, 39,165,169,219,182,160,120, 69,231,160,141, 38, 34,197, 94,140,177, 16,
+ 10,197, 43,173,170, 6, 87, 86, 46,117,211, 80, 85,181,216,166,178,164,232,245,195, 64, 85, 57,188,151,201,158, 31,123,136,137,
+172, 50,206, 85,244,251,173,172, 5,170,122,249,115,163,172,224,136,167, 1, 85, 85, 52, 39, 39, 76,189,176, 4,106,103,232, 15,
+123,114,148,231,179, 2,154,245,169,216,235, 80,248, 73,124,219, 49,120,116,153,180, 85,221,186,192,110, 44, 41,140, 24,224,176,
+187, 69,219,138,126,115,139, 53,142,186,109, 73, 74, 97,157, 43,235, 17,207, 52, 76,100, 13,149,171, 81,214,138,245, 48, 68,140,
+162, 76, 10, 18,168,132,159,166,226, 0,113,216,210,168, 25,109, 24, 15, 61, 33,136,230,193,152,106,113,191,132, 24,139,218,223,
+226, 71, 41, 90,133, 29, 80,180, 36, 83, 40, 40,235, 40,214, 61,231, 80, 57, 75,232, 80,153,204, 25,231, 36,246, 55,197,242,125,
+181, 88, 4,103,157, 71,121,173, 89, 33, 1, 63, 22,226, 36, 2,224, 16, 60,196,128,171,203,218, 64, 21,158,129,214,203,202,192,
+ 86, 21, 42,139,152,122,190,142,140,117,232,202, 22, 17,172, 20,172, 49, 39,121,237, 57,163, 78, 79, 79,179,177,174, 8,175,132,
+ 5, 94,215,117, 65, 99, 74,151, 61, 39,134,205, 15,222,105,154,238,135,152,148,165,190, 49, 34,116, 51, 90, 14,249, 56,239, 38,
+230, 78,176,188,153, 49,132,229,247,170, 36, 95,163, 64, 31,113,163,181, 82,212, 77, 77,202,130,114,205, 33,241,248,241, 67,110,
+111, 55,101, 44,163,151,189, 68, 46,112,101,235, 92,161, 80,201,235, 92,173, 86, 75,188,105,211,180,244,195, 64,206,176,219,110,
+217,237,182,164,169,255,156,239,250,115,221,104,193,155,170,252,198,227,249,115, 4,182, 55,158,223, 71,225, 51, 63,103, 89, 93,
+ 0, 32,247,255,254,155, 44, 99,111,250,183, 94,127, 45,199,127,231,209,197, 25,239, 62,185,100,179,221,113, 24, 6,174,110,183,
+ 12,211,231,129, 38,111,130,208,188,254, 58,222,100,119,123, 61, 85, 15, 83,172, 97,202,220,237,146,139, 48, 80, 23, 15,184, 88,
+156, 18, 70,105,156,177,119, 32,152,215,152,248,203,117,100,164, 90,159,250, 93,233, 36,243,210,253,190,233,245,222, 17,241,242,
+178,211,254, 89,157,241,204,221,183,214,209,118,107,178,182,248,224,169,235,134,253,110,131, 51,138,201,143,162, 21, 8, 98, 63,
+ 18,127,168, 65,235, 59, 53,119,244,129,170,150, 73,203, 76,196,243, 97, 44,206,137,180,140,231,223, 84, 56, 45,175, 69, 59,108,
+ 83,139,154, 90,139, 56,199, 84, 78, 10,161,156, 24,125, 95,178, 17, 28, 42, 75,154,215,140,140, 84,170, 66, 31,233, 59,102,113,
+166,113, 78,146,195,180,198,199,113, 97,192, 27, 83,129, 81,104, 37, 59,247, 28, 99, 25, 67, 10, 45,203, 52, 43,172, 49, 12,219,
+237, 66, 0,140, 36,170,238, 68,196,144, 33,226,167,190,116,159,162,202,151,107, 33, 20,193,153, 65,105, 43, 99,200,163,251, 59,
+149,189,190, 82, 70,214, 12,214, 10,183, 90, 91,170,213,154, 48,246, 40,163, 9,135, 67,193, 27, 87, 24, 87,108,115,204, 58,153,
+ 84, 10, 5,241, 26, 83,188,232,179,207, 61,149,166, 68,235, 12,218, 81, 53, 45,126, 26,228,224,205,185,140, 62, 5, 98,148, 98,
+144, 3, 73, 73,138,225, 44,114, 93, 16,195, 74,137, 93, 45, 43,116,229,138,189, 78, 9,119,220,139, 14, 97,154, 36,169,142,152,
+ 80,214, 98,173,198,106, 43,137,138, 69, 12, 56,236, 15, 66,153,155,111,112,117,103, 43, 68, 41,148,171,201, 89,209,173, 79, 48,
+ 77, 35, 20, 57, 99,113, 93, 39,205,214, 65,112,168, 18,166,114,130, 3,129,103,249, 81,108, 93, 33,162,171,154, 41, 38, 76, 18,
+151,142, 81, 26,219, 84, 82,156,228,204, 52, 12, 66,236, 43,215,137,109, 86,132,126, 91,226,141, 37, 53, 80,107,205, 52,140,100,
+173,201, 97, 4,165,105,186, 85,137,212,173,202,251,164,200,195,192, 56, 78, 40,147,168,171,154,164, 28, 49, 76,146, 47, 30,228,
+240, 83, 41, 20, 27,157, 47,161, 80,250, 46,108,202, 89,185,222, 38, 65,184, 38,173,113, 85,205, 52, 12,229, 90,138,248, 65, 86,
+ 42, 77,183, 46, 20,193, 36,153, 1, 25,198,221, 70, 26,173, 36,103,151,117,142,105, 28,200,229, 51,136, 62,162,109,105, 42, 42,
+ 71, 14,178,110,182,110,158,206,200,148,137,210,220, 4, 31,150,230,204,160,176,117, 89,169,198,178,126,205,226, 44, 8, 67,225,
+ 37, 40, 9,176, 81,128, 31, 4,110,163,180, 41, 5,115, 83,172,134,229,185,105,156, 4,202,228, 84,162, 83,101,108, 63,147,196,
+165, 24, 17,202, 93,206, 72,241,146,196,134,167, 75, 17,159, 10,220,204, 56,119,231,122, 10,242,254, 46,141,161,117, 46,207, 15,
+153,170,114, 71,157,203,220, 85,231,123,132,171,227, 7,187, 41,157, 23, 57,211,156,172, 57, 28,246,165,143,212,228,164,238,212,
+197, 71,113,170, 40, 85,246, 21,119,135,250,189,110,235,232,127, 59,107,139,210, 87,212,239,111, 63,125,139,171,171, 43,188,143,
+139,197, 68,110,182,185,210, 85,203, 65, 48, 31, 28, 57,229,123, 29,238,146,205,157,197,115,251,243,196, 96,233,232, 80,254,197,
+100,100,159, 63,224,223,212,225,190,233,235,121,161,122,253,130, 69,192, 47,248, 58,148, 82,188,245,224,132,166,170,152,250,129,
+253, 48,114,152, 60, 49,203, 65, 52,163,103,127,158, 56,238,103,119,234,234,158, 72, 80, 78, 28, 85, 42,203,197, 69,125, 47, 12,
+229,120, 39,191, 92, 83, 71, 25,240, 75,128,143,214, 56,107,201,170,196,108, 78, 19,253,246, 22,227,172, 8,147, 20,111,156, 52,
+ 28,167,142,221,229, 88,155,207,173, 27,238,189,158, 34, 94,170, 91, 17,233,120,239, 89,157,156, 46, 74,227,152,226, 81, 65,122,
+ 36,158, 76,249,158,151,159, 50,246,173,171,154, 76,146,125, 99, 41,110,195,228,239,189, 87,175, 59, 40,140,173,208,182,146, 3,
+ 43,140, 18,110, 1, 40, 39,212,189, 56,141,196, 52,149,117,142, 66, 97,202,136,176, 88,238,112, 34, 30, 42,126,239, 84,186, 82,
+ 83,176,146, 33, 4, 80,113,185,151, 99, 20, 20,103, 93, 75, 44,165, 42,130,186,170, 91, 49,238,110,209,182,150,245, 78, 12,203,
+ 26,193, 56,131,105, 86,139,208, 44, 76, 3,166, 20, 49, 51, 54, 89,151,135,142,173,220,226, 90, 32, 20,119, 64,140, 40,107,101,
+119,238, 39,201, 87,112, 21, 49, 4, 76,229,100,170,166, 37,179,156,178, 38,209,214,201, 94,185, 36,192, 41,173,164, 11,212, 74,
+ 70,221, 57, 9,176, 67, 59,172, 43,137,107,185, 4, 3,165, 40, 99,232,166, 19,139,214,145,174, 38, 23,203,174,201, 81, 96, 48,
+101,204, 61,187, 82,100,194, 99,138,202, 95,192, 48,218,150,206, 61,196, 82,140,100, 17,240,161, 56,185,120, 68, 54,144,189,120,
+158,109,187, 34,151,213, 69,240, 35,126,156,216,190,248,152,148,203,154,206, 20, 5,181,213,216,118, 45,156,249,186, 33,197,192,
+176,189,165, 61, 61,195,214,174,164, 45, 86, 88,173,136,101,229,151,208,248,253, 78, 86, 90,206, 17,134,129,186,173,151,231,156,
+178,150,105,156, 36, 34,183, 68,199, 78,135, 29,227,126,183, 20, 63,200, 98, 20, 87,117,160, 21, 81, 89,116, 18, 24,139, 43, 42,
+252,113,216,210,158,156, 9, 51, 36,201,148, 66, 18, 39, 13,126, 26,228, 25,175, 53,227, 97, 79, 93, 94,187,107, 90,146, 50,212,
+117, 67,191,185,149, 34, 94,105, 98,152,152, 14, 59,113, 21,116, 45,218, 84,203,117, 50, 14, 67, 17, 17, 42,209,179,196, 32,162,
+ 61, 35,250,164,170,112,249,229,240, 44, 65, 66,211, 64, 24,229,186, 21, 97,182, 34,132,169, 8,113, 11,141,173, 36,183,105,103,
+150, 51, 39,229,194, 14, 40,137,133,193,143,133,140,215,144,179, 39,166, 66, 13,205,119,115,100, 17,184,105,140, 50, 36,226,172,
+116, 46, 34, 86,185,174,181, 49,132,105, 64, 91, 41, 34,195, 32, 73,154,174, 59, 97, 60,136,215,190,233,218,133, 77,111,172, 22,
+ 60,110, 17, 80,162, 53,209, 79,114,175, 78, 99,209, 32,201,251,144, 98,196, 89, 43,175,167,132, 50, 73,129, 20,203, 53,228,200,
+193, 99,173,173, 69,180, 18,131, 8,123,150, 69,169,186,183,139,158,247,190,138,187, 17,102, 76,130,225, 91,173, 79,184,184,184,
+224,176,219, 21,185, 49,139,122, 48, 33, 35,122,133,189,235, 8,231,152,206, 55,224, 80,142,255, 44, 38,217,105,228, 44,177,170,
+198,184,162,216,150, 29,172, 84, 56,234, 78, 92, 5,101,252,117, 63, 64,114, 57,224,103,102,187,254,249, 32,150,165,243,203,111,
+ 72,160,252,127,113,176,254,194, 5, 64,254,255,246,111,253,172,239,191,219, 29, 8,110, 98, 28, 3, 67,177, 80,213, 90, 18,219,
+156, 53, 76, 62, 83, 57,177,246, 76, 33,222,255, 64,142,138, 45,117,180, 34,120,125, 42,112, 15, 21, 27,197,194, 49,139,209,178,
+206,100,125,132,157,205,243,167, 38, 7,147, 46,185,211,177, 84,220, 40,177,158,169,164, 8,227, 40, 22,163,236,232, 15, 91,249,
+122, 58,238,192,255,182,247, 91, 23, 17, 30, 64, 88, 46,239,255,135,182,119,123,182, 45,187,235,251,190,227, 58,231, 92,107,159,
+107,247,233, 86, 95, 37, 97, 33, 1, 78,217,152,150, 64,232, 90, 96, 4, 50,134, 22, 32, 83,101,236, 36, 85,182,137,157, 34,148,
+ 19, 76,128, 0,126,224,159, 72,133, 84,156, 84,229,217,111, 49,149,188, 17,192, 72, 72, 8, 12,182,193, 6, 74, 18, 82, 75,106,
+245,233, 62,221,231,182,215, 90,115,142,107, 30,190,191, 49,230,220,187,143,132, 69,146,166, 84,146,104,245, 57,251,172, 53,231,
+ 24,191,203,247,251,249,242,142, 85,235,190,219,208,186, 82, 18,187,157, 44, 5, 45, 74,129, 42, 21, 49,100,236,247,123, 28,203,
+ 81,226, 68,171,136, 20, 53,195,115,234,202,145,231,244, 74, 46, 81,185,208,186,207,222, 40,233, 44, 86,235, 98,149, 82,221, 88,
+143,170, 50, 74,153,201, 79, 40, 10,202, 82, 56,101,165,226, 51,154,222,255,210,138, 32,137,251, 77, 49,136,210, 57, 33,205, 11,
+252, 64, 18,149,119, 14, 73, 46,198, 84, 43, 82, 34,147,221, 24,142, 70, 81, 11,106, 81,152,143, 71, 88,203, 61,164,117,158, 29,
+158,223,179,120, 87, 21,185, 68,164, 90, 96,221, 64, 49,147,228,164, 43,109, 96,148, 70,140, 39,248,129,216, 81,130, 86,232,199,
+205, 81,222, 83,105, 18,232,207, 38,181,141,142, 8, 81,239,166,200,241,125,173,107, 36,111, 38, 70, 22, 66,221, 82,202, 72,167,
+146,160,138,240,217,151,133,187, 99,101,228, 89, 98,122, 86,173, 69,236,107, 22, 0, 17,166, 57, 5,241,157,179, 83,111, 9,134,
+186, 86, 20,205,213,159, 17, 77,145,210, 6,181, 40,185,192, 34,178,100,114, 87,244, 96, 8,129, 41, 53,208, 20,245, 26,122,154,
+224,252,196,221,121, 45,200, 49,193, 78, 59,114, 14, 36,190,249,250, 83,111,195,120,182,135,214,134, 12,138, 38,118,205, 12,198,
+210,206,146,174,231, 12,118, 2, 95, 41,165,192, 15,212, 51,148,148, 17,107,128, 53,252,190,171, 82,192,114, 34, 32,236,200, 63,
+ 67, 41, 9, 58,106,118,123,161, 98, 57, 62,228,251, 37,144,177,106, 20,156, 85, 8,167, 83, 79, 24,211,198, 96, 24,207,144, 42,
+ 71,238, 41, 39,185,140, 21, 78, 15,239,241,121,149,110, 86,247, 9,157, 70,174, 25,195,110,135,179, 43,215, 16,194, 66,253, 78,
+ 12, 72, 49, 33,207, 71,228,156,225,167,157, 92,182, 21,110, 28,145, 66, 68, 90, 2, 74, 58, 2, 90, 97, 62,175,176,178,230,136,
+ 61,151,130,103, 74,156, 23,248,113,192,241,225, 34,211, 5,230,115,104, 89,177,150, 82,224,188, 68, 77, 75,113, 62,142, 35,194,
+ 50,179, 72, 30,216,253,198,152, 96,132, 46, 87,115,129,117, 86, 52, 40,169,227,169,195, 50, 19, 2,100,120, 54,198, 82,232,132,
+176,150, 69,130,213, 8,121, 17,218, 39,109,125,214, 13,253,188,174, 57,119,135, 71,152, 79,208, 85, 97,119,229, 26,187,247,221,
+ 14, 70,175, 17,200, 69, 44,106,203,131, 7,112,251,189, 4, 6, 81,168,189, 44,212,168, 53,158,201, 48, 76, 84,203, 87,198, 55,
+147,215, 47, 1, 22,185,240, 78,148, 36, 55,165,181,169,218, 74,176, 70,123, 49,148,196, 45, 86,244, 74,191,138,183, 24, 77, 85,
+170, 72,176,186,126,227, 38,174,221,184,138, 47,252,249,159,203,173,201,202,182,200, 45, 90, 21,247, 19,181,208,251,221, 60,188,
+125, 7,184,217, 99,111, 81,152, 93,133,172,184, 19,222, 13, 19,110,221,186,133, 59,119,238,224,116,154,153, 32, 94,202,155, 4,
+ 94, 91, 63,248, 54,178, 84, 89,166,133,213,194,113,111,150,139,237, 47,180,113,109, 26,253,250,136,168,209,175,127,153,126, 99,
+221,253,255,159,127,121,163, 48,104,131, 84, 50, 98, 15,163,208,226, 87, 85, 82,185, 82,248, 83,170,186,176, 62,120, 19,211,172,
+126, 99, 73, 95,253, 31,212,234, 66, 71,219, 50,214, 47,195,107, 46,106, 18,218,227, 65,156,112, 73, 17,222,143, 20, 28,126, 35,
+197,146,122, 84, 86, 56, 95, 24, 99, 45, 47, 6,176,115, 50,134, 34,199, 38,166,107, 29,110,179, 40, 86,197, 36,178,150, 28,214,
+ 16,188,219,100, 62,109,188,164,208, 25,104,163, 16,194,210,215, 86,186,170,139, 57,244, 0,247,197,211, 30,243,204,168, 77,227,
+ 6,228,144,160,141,146,253,188,130,115, 35,209,153,162,220,213,218,176,123, 47,153, 18,144, 86,128,101,250, 51,172,117,125,117,
+209, 0, 52, 20,232,104,161, 30, 70,228, 76,156,176, 31,119,244,223, 43,192, 57,238,173, 21,106,239, 70,115, 18,111,188,182, 98,
+251,108, 28,134, 12,104, 22,211, 90, 93,180, 37, 66, 51, 42, 18,208, 92,179, 56,135, 28,104,169, 83, 50, 10,174, 69, 10, 35,109,
+101, 39,159,197,167,110,164, 24,227,207,158,195,178,121,229, 54,216,220,158, 35,175,183,153,114, 93,160, 38, 86, 19,177,232,117,
+ 85, 39,170, 22,199,139,192, 81,170, 38, 3, 92,107,122,177, 57, 69, 17,228,112, 74, 40, 57, 72,166,248,208,249, 22, 57, 37, 24,
+ 71,113,152, 86,128, 25,175,226,250,211,207, 34, 11, 1,209, 58, 71, 17,109, 91,131, 72, 92,110,137,180,117,169,193, 3, 57,194,
+ 24, 47,110, 6,242, 65,116,101, 46,184, 49, 6,199,187,119,232,201,182, 22, 49,109,152, 12,146,234, 85,114,130,223,237, 17, 67,
+ 64, 13, 97, 29, 41,139, 64, 85,187, 1, 37, 71,140,251, 61,242,210,206, 77, 73,193, 52, 2,140, 1,177,217, 16,134,251, 26, 23,
+202,226,198,121, 39,161, 54, 20, 46,150,154,145, 78,179, 36,152, 41,140,211,158,154,134, 40,246,188,249,196,115, 88, 50, 44, 84,
+129,240,251, 13, 89, 2,181, 34,137, 62,165,251,255,115, 38, 28, 43,132, 46,166,229, 52,131, 66,176,150,104,231,252,128, 24, 35,
+188,115, 36,252,213,194,181, 17,184,195,142, 33,138, 93, 80,193,248,145, 54, 49,235, 17, 79, 92,227,168, 74, 60,111, 35, 28,166,
+156,100,116, 79, 66,160, 22,183,147,170, 21, 41, 71,185, 51,184,254,114,214, 9,245,143, 90,159,162, 10,156,159,128,156, 97, 70,
+ 22,194,241,112, 20,235,119, 64,142, 4,228, 40,205, 41,150, 21,114, 93, 19, 81, 49,229, 52, 11,123,191,194,250,145,191,127,206,
+253,231,138,145,133, 67, 19, 28,115,205,109, 80,218,138, 45,113,146,173, 21,157, 17, 41,103, 24,235,135, 95, 81, 18,244,206,113,
+ 71,100, 66, 84,228,127, 46,210,246,215, 82, 89, 57,131,123,139,179,171,215,177,219, 95, 65, 74, 17,175,188,242,114, 23,151, 84,
+ 33,192,245,177, 55,149, 38, 28,191, 26,131,210, 14, 31,163,121, 64, 8,114, 17,154,202,105, 62,100,106, 61,160,100,116,234, 45,
+ 45, 16, 49,144,167, 94, 30, 97, 5,106, 7,101,171,222,182,251,226,188,161,106,233,166, 50,210,237,165, 55,210, 17,188,249, 95,
+171, 8,174,253,124,205, 69,200, 74,233,242, 24,185,255, 11,234, 2,217, 12, 23, 48,175, 6,126,183,199,213,107,215,165,170,206,
+184,113,243, 49,248,137,241,139, 90, 55,232,226,166,176,104,191,150,252, 44,109,135,162,154,162, 84, 93, 28,231, 27,163,241,244,
+173,199,225,140,198, 28, 2,172, 54,120,230,137, 39,176, 59,219,227,252,252,156,162, 10, 40,105,120, 21, 45,137,221,218,165, 54,
+ 73, 93, 10,219,255,107, 15,100,197,215, 42, 88,234,133, 72, 87,106,126, 20,166,221, 30, 90, 25,212,210,246,189,156,107,173,235,
+151, 53, 46, 85, 41,244, 10, 85,105,211, 65, 39, 41, 82,220, 85, 36,236,167,110, 62,146,203,233,113,111, 30,175, 95, 8,135, 69,
+173, 32,141, 76,102, 67, 70, 68,160, 33,210, 3,190,132, 89,166, 65,124, 97,106, 3,228,136, 82,159,169,124,229, 66, 42, 95, 15,
+ 69,209, 10,218,104, 12, 3,217, 14, 60,104, 44,118,187,125,199,227, 54,129,105,109,184, 93, 99,248,125,180, 24, 69, 73, 93, 82,
+ 82, 69, 57,231, 80,228,123,170,149,235, 38, 99, 44,199,144,150,107, 0, 5,185,100,187, 26,141,130,197, 54,194, 4,179,197, 40,
+246, 82, 74, 56, 20,141,211,206,238,127,216,157, 33,246,195, 63,247,202,180,234,214, 7,147,157,175, 21,117, 19,188, 60, 50,140,
+113, 27,246,190,172, 21,188,196,254,214,194,125,174,106,197,143,192, 88,208,131,238, 69, 36, 84,161,106,102, 68,166, 29, 96, 60,
+199,191, 57, 44,168, 37,138, 43, 66, 82, 17,219,184,114,243,220,212, 77, 50, 32, 39,129, 45, 71,158,238,137, 90, 55,236,245, 34,
+ 73, 87,150,158,240,225,236, 10, 42, 52,252,200, 9,199,180, 63, 19,116,177, 36,212,201,100,178,150, 36,191, 46,133,155, 10,149,
+ 83, 36, 63, 97,216,239,184, 2, 40, 66, 66, 12, 84,191,231, 24,176, 28,238, 75, 33, 82, 16,115,128, 1,189,239,125,143, 91, 50,
+114, 78, 88, 14,231, 56,157, 63,224, 30,181, 22, 32, 39,156,223,123, 3, 57, 38,132,195, 1,105,225, 36, 36,204, 39, 10,182,106,
+145, 51,147, 43,128,146, 51,130,140,225,141,177,112,206,194, 89,122,186, 75, 45,200,129, 19,150, 18, 35,166,179, 43,208, 70, 33,
+158, 22,228,101,134,181, 22,110, 28, 96,157,133,245,140, 68,214,214, 82,121, 13,197, 21,140, 68,222,242,157,161, 7, 59, 47, 51,
+223,122, 43,223,117,131, 68, 89, 11, 35,205,149, 27,185, 62,137, 33,200, 62,189,160, 40, 41,168,229,172, 94, 78, 51,140, 54,156,
+ 68, 21,230,145,167,176,192,106,186, 31,170,130, 20,188,238, 66,147,166,157,195,238,202, 85,228, 66, 63, 55, 74,162,197,249,120,
+146,100, 55,130,124, 74,150,180,180,178,153, 42,214, 76,119, 1, 52,252,126,191,198, 63, 43,208, 30, 60,142,208,198,116,114, 91,
+201, 25, 69, 41,104,203,117, 98,146, 73, 75, 77, 9,121, 14, 80, 37, 67,123,203,117, 81,164, 64,155,241,210,150,188, 10, 8,163,
+164,242,140, 79, 37, 49,205,176,130,105,161, 49, 32, 37,137, 48,150,130,167, 2,253, 51,171,133,222,125, 93,229,182, 45, 92, 59,
+181, 41,140, 86, 10,234,198,227,111,169,253,197, 18,232,124,169,124,153,115, 46, 40,109,127, 83, 86, 62,182, 42, 5,243,124, 92,
+189,185,235,109, 41,119, 37, 71,135,171, 15, 80,242,102,197,179,169,149, 22,123,147, 21,251,152,233,106,245,154,248,224,240,103,
+128,188,148,192, 48, 24,126,185,137,126,204,121,158, 59,116,228, 63,233, 47, 77, 15,174,247, 35,139, 62,109,152,155,219, 85,235,
+ 82,144,180,237, 67, 83, 18,162, 85,141,249, 77,173,183, 86,246,194, 58, 97, 43,184,170, 34,230,105, 59,155, 38, 76,218,237,247,
+152,231, 5, 57,205, 66,125,178, 8,203, 17,126,216, 97,119,245, 42,140,124,249, 70,177,128, 57, 29, 30, 82, 24, 97, 89, 16,245,
+171, 85, 90,217,157, 85, 88, 34, 87, 39, 74, 0, 45, 79,220,188,137,199,206,206,240,198,189,187, 56, 63, 28, 81,148,194, 59,223,
+254, 86,168,148,241,210, 87,111,227, 16, 34, 14,226,135, 92,139,143,202, 62,214, 24,218, 50,154, 26,183,174,130,182,134,104,237,
+223,185, 86,111, 82,172, 87, 81, 37,183,203,186, 42,142, 3, 7, 63,194,218, 1,203, 50, 35,151, 32,124,239,218,201,102,245,194,
+164,133,151,174, 17,162, 20,138, 66, 10,139,196,124, 86,104,237,190, 97, 34,222,163,196,126,195,196,142,191,200, 78, 74,107,141,
+170,120,120, 51, 53,142,172, 0,165,168,174,238, 26, 18, 77,202, 93, 78,185,127,247,107,135,174,229,103, 55,112,102,160,157, 16,
+192, 48, 14,196, 63, 42,133, 16,102, 44,167,153,159,120, 87, 6,114,100,143, 28,101,194, 36, 42,118, 67,118, 67, 46,236, 10, 42,
+128,146, 22, 1,176, 12, 72, 65,252,201,138, 93, 53,180, 88,242,180,163, 69,176, 71, 56, 2, 21, 9,165, 84,134,153, 40,177,248,
+213, 42, 8,202, 2, 45,164, 53, 84, 30, 70, 74,183,238,183, 82, 12, 40,200, 91,198, 97, 82,229,109,134,145, 12,238, 13,196, 68,
+ 73,234, 30, 49,167,150,135,190,146, 85, 65, 46, 40, 53, 97, 3,253, 19, 16,157,172,231, 52,221, 53,195,180, 7,156, 70, 58,156,
+144,230, 35, 69,106,122, 51, 50,147,132,183, 6,243, 49,146, 4,216, 42,197,214,149, 43, 45,185,239,218, 73,180, 46,189,212,165,
+ 97,136,219,115,221,124,222,226,113,111,170,120, 13, 42,197,107, 10,200, 53,139, 94,211,160,192,244,203, 69, 43, 45, 41, 89, 20,
+235, 66,186,114,227, 61,140,159,216, 73,149,140, 24,131, 40,227, 7,140, 35,125,214,202, 40,132,121, 65,134, 98,206,188,102, 49,
+ 82, 50,225, 71,203,241,200, 95,203, 8, 76, 72,154,160, 44, 35,112,227, 44,204, 48, 64, 41,133,249,156,120,109, 63, 77,124, 94,
+149, 70, 70, 69, 9,252,231,180,229,103, 27, 67,160,215, 95,166, 17, 75,138,216,159, 93,101,144, 87, 46, 12, 62,170, 5, 37,102,
+216,221, 14, 49,156,160,229, 93, 45,125,202,166,132,159, 79, 64,202, 34,221,121, 21, 80,143,117,131,176, 56,170, 60, 27,220,149,
+231, 24, 37,222,216, 98, 9, 1,206, 51,102, 90,149, 2, 37,168,225, 90, 42,198,113,162,224,173, 22,146,247,192,142,189, 77, 62,
+232,200,140,130,243, 70, 47, 20,105,245, 20, 23,140,124,255, 41, 70, 64, 85,126,111,181,194, 13, 35, 45,145, 0,172,227,168,219,
+ 12, 3, 47,243,102, 83, 22,189, 76, 3, 96,181,238, 91,107, 77, 91, 33,148, 92,162, 26, 49, 4,148, 18,145,226,194, 2, 96,216,
+ 65, 91,135, 20,232, 94, 25,252, 64,164,110,201, 29,160,131,170,101,114,144, 68,187, 70,231, 74, 5,237,107, 28,198, 4,153,166,
+ 86, 57, 87,100,181, 18, 98,231, 62,148,166, 37,107,195, 80, 62, 31,122,149, 97,242,182,144,241,156,238,130,178,214,157,224, 2,
+158, 99,211,149,169,186,233, 34, 91,151,160,250,248, 70, 65,131, 4, 26,221,115, 96,181, 53,112,195,136,157, 80,122, 98, 76, 8,
+ 97, 70, 8, 1, 70, 41,120,163,225,252,216,115,171,189,183,120,233,115,127, 2,212,140, 28,203,133, 81,231,229, 49,252,229,127,
+103,124,166,130, 31, 7,164, 12,252,149,119,126, 43, 25,204,206, 98,240, 94,188,222, 43, 51,156,187, 63,221, 71,125,107,124,169,
+128, 54,164,211,210,154, 99,197, 54,206,108, 72,209, 45,223,189, 20, 6, 50,220,254,242,151,112,247,181,215,176,219,239, 48,207,
+ 39, 17, 34, 38, 33, 83, 37,190, 4,178, 87, 27,166, 29,115,158, 67,160,146, 90, 43, 76,187, 51,156, 93,185, 6, 63, 12,176,206,
+245, 42,238,155, 31,223,225,229,219,175,226,193,131,115, 92,189,122, 5,113, 89,112,255,245,215,113,251,254, 3,196, 92,161, 74,
+193, 83,143, 95,199,131,135, 71,204, 49, 33, 36,130, 66,154,162, 65,183,113,164,168,211,223,242,236, 91, 49,158, 93,129, 51,182,
+ 87,173, 89, 58,214,118,169,231,148,132, 60,149, 59,171, 93,201,231,118,231,246,203, 8,167, 35,213,206,146,213,204,110, 53,117,
+208, 3, 84,237,185,219,189, 40, 82, 43,126, 86,235,117,202,161, 69, 0, 19,103,118,143,206, 25,164, 84,254, 63, 73, 40, 51, 66,
+185, 99, 21, 45,227,252,142, 57,229,101, 76,159,180,234, 42,124, 78,109, 74,247,200, 55,188,111, 76,233, 66,200, 77,145, 0,162,
+113,156, 16, 66,196,217,217, 25,162,140,205,141, 49,136, 75,192,225,156,118, 74, 70,234, 42,233,158, 23, 33,222,169,213,154,167,
+101,212,107, 28,204,224, 24,110, 33,126,236, 2,141, 97, 28,129, 92,152,162, 88,169, 90, 47,169,244, 9, 79,227, 33,144, 47,193,
+232,227,134,103,101,167,199,113,172, 50, 22,222, 13, 28,175,134,176,129,229, 64,166, 37,101, 53,255,203, 65, 98,157, 39,118, 84,
+116, 6,168,144, 44,107,254,115,218, 90,134,190, 40, 13, 88, 3,228,138, 82, 34, 90,245,172,128,213, 66, 38,247,181,177, 14,198,
+239, 96,167, 17,200, 25,167,251,111, 0, 37, 65, 59,185,112,141,131, 19,174,124,109,188,129,206, 60, 72,194,116, 87,235,175,171,
+ 13,236,184,231, 88,223, 89,249,231,216,144,148, 78, 15,163,176,174,182,137, 87,138, 66,153, 84,210,164,228,158, 46,167,173,199,
+176,191,194, 8, 85,173,122, 1,128, 90, 97,172,195,238,230, 77, 32, 46, 92, 93, 10,216, 42,166, 4, 85, 51,247,237, 57,139,232,
+140, 35,122,109, 61,255,179, 49,152,231, 35,167, 82,129,223,163, 86, 64, 56, 74, 96,139, 54,200, 37,193, 15, 99,143, 69,173,155,
+ 21, 86,142,140,182, 53, 45,163, 61, 70, 32,103, 40,237,224, 28,159,113,229, 44, 12,200,130, 88,230,133,246,227, 84, 80, 53, 16,
+ 14,135,126,254,213, 82, 96,173, 70, 46, 12, 81,201, 41,178,227, 5, 96,156,135,209, 10,203,124, 36, 0, 8, 10, 37, 39,114,212,
+ 1,132,195, 57, 25,243,126, 92,223,211,134,193, 78,146, 58, 41,178,166,113,156, 24,144,229, 44,194,178,136,208, 45,174,107,146,
+246, 29,201,196, 44,203,168, 25,198, 72, 72, 13,159,183, 42,133, 51,215,136,236, 92,211, 18,228,249, 32,121,174, 59, 52,100, 42,
+105, 90, 65, 38,142,174, 90,138,144,242,248,123, 59,137,195,237,236,126, 65,134,135, 48,195, 57, 6, 39, 45,243,188, 65, 91,211,
+ 37, 70,187,155,130,245,142,116, 67,201, 23,224, 20, 80,214, 75,138,164,191, 92, 88,188,181,117,222,118,231,155, 69, 33,223,136,
+166,144,117, 24, 74,221,156, 51,153, 23,190,232,203, 28,197,238,250, 47,125, 58,214,182, 19,215,109,254,169, 59,119,187,141,167,
+139,177, 60,140,156, 7, 44,121,202, 26, 68, 76, 94,189,122, 3,111,127,215, 55,227,157,111,123, 43,254,232,243, 95,132,222, 93,
+131, 1,112,184,253, 37, 28,143,231,152,166, 61,142,135,115,140,227,128, 87,191,252, 69,220,127,245, 43, 56,157, 22, 25,193, 94,
+ 28,175,127, 61,203, 21,139, 11,133, 97,119,134,231,191,233,155, 97,135, 1,222,251,245,242,149, 98,164, 93,196, 74,169, 30,119,
+218, 4, 81,218,232, 46,144,209, 13, 15,187, 97,185,231, 13, 24,166,171,171, 75,193,233,120,196, 87,191,252, 18,150,211, 65,198,
+135,108, 50,156,181,140,102, 20, 63,249, 69, 37,180,194,245, 27,183, 58,181, 76,155,149, 76,116,243,241, 91, 56,187,118,141, 74,
+237, 90, 17, 94,123, 9, 15, 15,231, 98, 7,227,169,184, 44, 17, 7, 81, 89, 15,214, 98,178, 10,231, 11, 73, 73,146, 61,215,168,
+ 0,221,155, 93,181,194,213,235,143,225,153,231,223,214, 19,230,140,248,196,203, 37, 81, 35,247, 67,134, 34, 25,241,165, 26,173,
+240,213,175,124, 9,203,233, 33,140,196,103,134,176,244,231, 64,139, 29, 74, 73,197,157,150,136,170, 87, 47,185,145,113,218,118,
+101, 65,188, 46, 24,134, 32, 62,111,231,136,204,252,127,243, 87,239,170,183,172,247, 13,242,183,141,246,183,249,238,173, 3,207,
+153,223,151,179,174,175, 95,218,238,189,213,187,236,244,148, 92,248, 30, 26, 28,237,183, 78,145,170,225,136,195,225, 97, 79,172,
+187,114,229, 26, 30, 60,124,192, 17,185,192,112,180,101,224, 74,149,139,176, 20,230,185,163, 84,118, 55, 90,203,133, 53, 66,193,
+144,177,110,164,248, 96,221, 46,162,214,220,179, 3,172, 0,129,226,178,136,143, 20,178, 90,147,207, 67, 91,153,180,212, 46,254,
+106, 88,133,246,188,148, 90, 24,210, 82, 43,180, 50,208,206, 33,199,163,140, 76, 91, 33,109,229,117,217,192,140,132, 4, 87,197,
+127,223, 86, 97,181,174,130, 90,217,205,241, 16,214,196,205,214, 28, 16, 23,217,137,182,243,165,141,242,203, 74, 98, 67,189,228,
+ 26, 81, 10, 90,211, 10,167,106, 65, 70, 21, 34, 30,227, 78, 33, 99,217,156, 3,187,121, 59, 72,246, 58,199,171, 74, 27,228,194,
+ 53,141,130, 98,135,166, 52,114,142, 24,134, 65, 46, 33,218,178,172,181,152,103, 78,203, 74, 76,208,158, 22, 50,141, 2,103, 44,
+130, 4,196, 40,227, 49, 77, 3,194,188, 96, 62, 30, 96, 6, 94, 28, 42, 3, 74,212,217, 70,113, 50,166, 4,207,125, 58,158, 80,
+ 98,146,236,116,195, 46,222,211, 6, 88, 82,166,250, 27, 96, 23,108,180, 52, 82, 44,212,172,243,240,211,200,240,151,211,204,207,
+ 91,181, 75,130, 23, 79, 56,158,122,129,145, 83,234,232,230,146,137,207,181,150, 19,197,210,236,142,242,185,133,211, 9,202,114,
+180,156, 75,150,100, 63,174,128,232, 25,183,112,178,234,128,176, 4, 80,105,237,100, 39, 28,161, 5,135, 90, 75,165, 77, 84,206,
+ 81, 35,231,176, 18,177, 24,159, 79,238,140,195,188, 96,218,237, 58,145,179,136, 46,195, 58, 90, 13,115, 18,123,167,110,239,155,
+ 67,152,143, 93,180, 27, 99, 98,242,165,116,190, 57, 23, 12,131, 39, 85, 21,100,168,215, 94,236, 86, 56,239,122, 6, 69,143,147,
+142,156,188,148,202,191,223, 2,182,140,209, 72, 45, 3, 34, 5,137,142, 22,174, 65, 23,124,242,158, 44, 98,199,214, 45,133, 83,
+ 9,241,180, 49, 98,180, 70, 94,130,188, 11, 26, 70,242, 25,154,104, 57,201,184,253,194,121,166, 0,163,148,250,149, 34, 47,110,
+ 85, 27, 95,245, 95, 56,199,212,130,207,180, 34,144, 49,189, 19, 27,247,123,216,113,135, 97,183, 67, 85, 14,118, 58,195,120,227,
+ 38,222,245,237,239,195, 59, 94,120, 31,158,122,251, 59,128, 56,227,214, 91,223,134,159,248,153, 95,198,247,125,207,135, 96,158,
+124, 59,238, 63, 60,226,193,237, 47,195, 40,133,249,240, 0,167,243,115,120,207,248,188,211,225, 28,243,241,161, 84,185,229,235,
+ 10,220, 46, 95,234,198,112, 42,240,252, 95,121, 23,185,216,114,129,180,130,160,169,131,137,115,149,112, 14, 1,119,148,141,253,
+169,231, 66, 55, 1,213, 38,131,187,117,108,125, 12, 93, 10, 94,127,229,101,188,252,133, 47, 8, 96,132, 15,237,150,196, 22, 99,
+ 92,233, 51,151,228,230, 41, 71, 0, 5,187,253, 85, 56, 63,210,178,148, 19,142,199, 3,144, 51,118,103, 87,160,181,198,225,252,
+128, 7,247, 31, 98,137, 25, 75,140, 56,133,136, 37,150, 77,151, 0, 44, 21, 36,147,109,247,244,235, 70,147,128, 0,173,241,228,
+ 83,207,174,233,105, 27,145, 88, 45, 43,142, 85,119,103, 68, 69, 76, 81,186,161,138,211,249, 67,156,206, 31,136, 91,161, 18,202,
+225,185,147,170,149, 35, 40,138, 36,203, 70, 32, 38, 35,119,179,138, 27,123, 22,247,134, 90,151, 83, 90, 39, 35,165, 92, 16,152,
+125,189,196,185, 71, 61, 35,143,178,230,117,197,122,175,136, 37, 58,211, 17,253,155, 82, 75,192, 43, 2,205,177,221, 99, 90,149,
+150,173,204,106,115,107, 25,236, 44, 88,208,247,177, 61, 8, 72,138, 23, 37,239,144, 27, 6,242, 16, 20, 69,170,178,192,231,127,
+ 55, 50,233,130,196,253, 22,174,113, 26, 15, 31, 45, 42, 82, 17,185, 82, 75, 22,177, 79,219,151, 87,122,207,101,117,164,218, 4,
+ 74,158, 81, 73,221,185, 40, 62,208, 26, 40,185,143,223,187, 80,180,212,141,189,115, 29,125, 43,173, 55, 12,235,118, 60,108,200,
+129,114, 64,179, 67,170, 12,142, 17,207,239, 74, 98,225,250,203,143,123, 17,215, 1,206, 15,112,222, 51,116,101, 3,234, 81,219,
+108,249, 75,110,145,170, 86,173,140,145, 17, 51, 52, 68, 9,239, 97,135, 81,244, 5, 32, 33,111, 55,194, 79, 87, 48,236,206,176,
+191,122,141,104,220,193,195, 88, 15,227, 60,246, 87,175,145,189, 33,225, 46, 70,107,140,251, 51, 64, 46,145, 86,248,101,185,132,
+107, 34,178, 84,105,122,212,173,229,133,238, 28,127,205,112,126,206, 46, 58, 4,148, 24,201, 53,240, 94,172,118, 89,210,226, 82,
+183,254,214,148,201,180,151,220,129,184, 44,112,227,128,218, 70,214,162,226,206, 34,228,132,192, 81,198, 73, 34,107,107, 69, 73,
+137,148, 63,209,112, 64,241,137,154, 15,135, 62, 86,166, 0, 58,117, 91,167, 86, 26,110, 28, 37,201,143,107,207, 6,107,137,167,
+ 3,179,228,119,123,126,134, 34,126, 43,221,210,200,231, 63,134,136,184, 4, 84, 80, 4,215, 10, 96,166,243,197,238,104,176,206,
+179,148,179, 70, 88, 39,220,179, 47,167, 83,239,232,115, 74,220, 55,135,185, 83, 33, 83, 74, 64,202, 80, 61,224,138,122,135, 24,
+196,162, 91,214, 21, 75, 46, 45, 10,187,192, 59, 9,103, 1,119,244, 76,109,203,136, 33, 34,200,138,132,197,155, 92,186,168,178,
+227,166,198,140, 33, 71,116, 35, 52,167, 70, 90, 22, 32, 39,201, 99, 15,162,168,111,243,172,138,180,204, 20,137,230,218, 11,217,
+ 44,197, 45, 63,127,134, 84, 65,236,125, 45,123, 68,203,121,225, 36,216,171, 53,146, 70,211,142, 12, 25,185,183,134,168,214, 74,
+159,217, 55,220,171,171,117,180,254,150,231,222, 10,227, 61, 82,228,158, 70, 25,131, 88, 43,198,113, 7,101, 12,134,235,183,240,
+248,219,191, 5,183,158,124, 10,238,236, 10, 71,137,167, 19, 94,250,179,127, 11,227, 38,252,222,239,255, 33,254,228,202, 21, 60,
+118,235, 41,164,176,224,238, 87,190,136,176,204,208,134,176,134,227, 67,118,116,147, 51,120, 32, 69, 67,201,249, 66,144,202,215,
+ 20, 71,105, 37,100, 33,133,167,158,127, 59,252, 52, 94, 72,215,218,114,211, 85,223,201,229,126,121, 23, 57, 56, 57, 34, 47,107,
+103, 33, 23, 64,151,148,201,195, 10, 40,228,148,113,239,245,215,240,250,107,183,145,230, 0,109,170,116,228, 25, 53,173,135,177,
+150, 47, 69, 65, 33,166, 72, 1,148,124,129,212,111, 84, 28, 15, 15,145, 66,194, 52, 78,220,149,185, 65, 58,251,140, 59,175,124,
+ 5, 55, 30,127, 2,251,155,183,144, 0, 28, 14,231, 24,198, 9,211,110,143,229, 52,227,206, 43, 47, 67,213,140,212,246, 49,155,
+241,166,117, 78, 68,103,235,184,103,220,157,113, 15,212, 25,243,186,199,239, 86,169,136,181,225, 94,212, 26,118,175, 30,192, 44,
+222,210, 92, 41,192,210, 89,203,159, 45, 35,132,128, 69, 44, 78,167,116,234, 35,175,182, 67,110, 36,186, 42, 66, 77, 35,130, 15,
+163, 13,114, 76,125,231,215, 58,223,245,115,198, 35, 69,146,151,187,241,203,127, 79,107,141,162,234,155,158,247,173,207, 62,213,
+220,181, 9, 37, 23,204,105,102,151,173,152,117, 77, 65, 90,233,217, 0,198, 16,175,138,170,225, 7, 15, 40, 22, 67, 97, 14,178,
+ 51,213,168,134,160, 18, 93, 40,184,137,129, 21,126, 46, 5,227, 72, 20,236, 34,252,238, 42,140,252, 84,202, 5, 62,137,113, 3,
+114, 90,144, 69,153,219,126, 62,165, 34,106,137, 80, 72,114,144,181,110, 64,189, 73,237,175, 42,253,186,198,115, 23, 87, 21,187,
+239,237, 42, 75, 21,190, 3,202,200,200,190, 52,157,201, 58,205,226, 5,156,249,153, 24,203, 24, 88, 59,145,232,102, 84,135, 65,
+109, 47,220,106, 28,204,186, 10, 7,148,129,202,252,124,156,155,100, 60,235, 48, 94, 57, 67, 10, 17,214, 59, 82,238, 34, 99,136,
+181,185, 33,157,222,250, 75,235, 38, 96,213,186,103, 98,123,233,182,214,164, 62,153,190,105, 11,101, 57,121,210,214,162,122,234,
+ 69,134,105,236, 35, 78,165,184,162,211, 90, 65,139, 98,159,121, 23, 14,126,240,228,159,203,136, 24, 74,113,103, 74,143, 33, 82,
+ 73,216, 79,103, 8, 89, 24, 24, 41,147,161, 62, 14, 24,198, 29,105,156, 22, 88, 78, 6,225,116,148, 51,140, 63,239,124, 56,107,
+247,251,101, 0, 0, 32, 0, 73, 68, 65, 84,239, 8,104,165, 13,180, 2,242,145,182,196,132,140,112, 58,192,250, 17, 73,166, 45,
+241,116, 98, 7, 58, 12,200,224,106, 42, 75, 81,101,140,197,184,191, 66,187, 88,145,176, 31, 9,250,136, 33,200,168,182,160, 64,
+ 73, 49,145,101, 21, 88, 72,156, 75, 11, 16,101,204,158, 24,221, 11,161, 19, 90,203, 9,135, 54, 28,239, 47,243,204, 80,159,101,
+238,145,198, 74,113,170,232,156,227,103, 43,159,107,138, 77,228, 88,133, 47, 96,225,189,165, 7, 93,105, 20,163,186,232, 44, 75,
+205, 61, 56,139, 26, 19,178,201, 29,223,109, 28, 57, 5, 78, 85,228,196,128,147,156, 51,192, 21, 57, 66,187, 23,148,130,246, 6,
+ 49, 37,232, 10,178,230,173,197,233,112, 32, 85,111, 71,135, 75,170, 11,156,227, 5,110,220,136,113, 28, 49,207, 39,177,123,242,
+236, 88, 26,207, 68, 6, 73, 33, 44,156,136,150,128, 26, 91,166, 65,238, 77, 65,145,137,145,202, 60,183,138,116,230,109,250,192,
+117, 14, 3,116,138,100,155,104,200,238, 95, 38,147,237,188, 50,222,195,141, 3,148,209,171,134,204,104,129,228,108,102, 91,150,
+116, 66,211, 2, 93,190,177, 11,157,221,133,181, 22,143, 61,243, 28,158,124,219, 55,225,234,141, 91,120,229,203, 95, 68,138, 39,
+204,243, 2,141,138, 24,102, 88, 59, 0,113,193,227,207,189, 21,198,144, 93,235,156,129, 86, 6,103,215, 30,195,114, 56, 32,206,
+ 11,238,165,132,135, 15, 30, 98,127,245, 58,178, 84,238,170, 18,138, 97,149,198,224, 7,188,113,239,174,140, 27,213, 35, 47,241,
+ 45, 12,103,219,137,229, 92,240,212,179,111,195,213,235, 55,186,104, 72,111, 33, 39, 27, 60,233,214,111,109,164, 82,154,231,185,
+255,247, 70,213,195,166, 83, 44,146,117, 91, 66,194,107,175,223,193, 27,175,223,161,160, 75,138,134,138,210, 89,239,198,104, 25,
+ 73,234,174,154,110,209,170, 74, 2, 58, 8, 27, 97,178,215,213, 43,215,165,115,229,168,101,116, 14,206, 57, 60,120,112,159,251,
+181, 92,113,253,198, 77,156, 93,127, 28,103,215, 30,231,200, 78,107,248,113, 15,235, 7,156,206, 31,192,141, 35,166,221, 30,119,
+239,188,138,211,241,128, 43, 87,174,225,234,141,199,113,239,141, 59,200, 49,114, 31,110, 12,174,223,124,172, 23, 20, 45, 92, 39,
+245,203, 65,117, 54,123, 27,189,167,174, 48,230, 56, 47,133, 32,163, 50, 25,197, 41, 5,109,233, 51,135,140, 2, 27,128, 98,220,
+237,225,156,195,195, 7,119,225,156,133, 53, 30,168, 10,199,211, 9,126,156,176,219,237,112,247,206,171,189,120,107,127,181,148,
+188,111,148, 15,208, 94,114,165, 21, 84,174,125,127,255, 38, 52,237,165,156,245, 38,250, 44, 69, 24,209, 85,132, 80,166,160, 4,
+134,235,104,165, 37,170, 82,201,106,129,147, 4, 22,147,165, 67,156,172,181, 72,105, 65, 76, 74,214, 21, 44, 78,115,206,212, 77,
+ 24,226, 44,115, 78,178,155,165, 39, 91, 85,192, 14, 30, 41,132,238,221,109,186,141,203,127,206,174,148,120,196, 58,106,251,255,
+203, 45,171,155,145,103,111,250,204, 46,100,205, 63,170,112,146,106,150,207, 47, 63, 51,101, 45,170,168,123, 59, 37,173,189,103,
+ 74, 51,159,218, 57, 25,255, 42,156,157,237, 81, 2,211,190,172, 88,217, 98,140,152, 79, 11,220,224,217, 53,157, 30, 80,191,225,
+ 29,114,169,176,195,142,251,102, 41, 60,221, 56,193, 13, 99,239,222,181,214, 24,134, 17,231, 15, 31,246,169,132,243,142, 4,181,
+ 90, 96,161, 49, 14, 3,134, 97,132,241,132, 46, 41, 25,167,134, 72, 78,189,149,247, 45, 87,217,213,203,202,106, 62,157,160,181,
+193, 48, 14,176,198, 98,201,132,149, 24, 41,242, 75, 44, 56, 29, 14, 61,248,202,136,176,169, 88,141,147,120,142, 75, 12, 72,129,
+ 23, 94,213,180,115,181,113,179, 5,247,161,203,137, 9,101,227,110,135,211,225,128,186,176,184,107,158,101, 15,199,220,134, 24,
+113, 56, 63,172, 83, 66, 71,181,123,205,137,113,175,185, 32, 37, 22,214,214,176,113,208, 74,163, 42, 77,218,167, 8,216,180, 76,
+ 23,167,221,180,190, 95,181, 80,241,223,166, 74,194, 14,200,162, 42,167, 80, 80,220, 76,149, 4,181,148, 2,225, 47,137,255, 76,
+204,177, 23, 42,198, 88,129,168, 68, 57, 71, 10,156,176, 16, 80, 25,192,162,116, 17, 46,137,130, 19, 43,102,206, 85,244, 67, 25,
+218, 0,203,233, 40, 89, 16, 21, 89,219,126, 38,180,179,185, 55, 94,146,132,153, 1,140,195, 64,101,121,160, 6,105,183,219, 35,
+135,136,180,156,216,180, 89, 10, 97,189,196,246, 62,188,123, 23, 86, 70,229,196, 36,104,104,129, 24,149, 66, 44,172,214,166, 79,
+ 31,170,102,161, 63, 88, 6, 87,161, 86, 56, 17, 35, 54, 86, 75,173,133,223, 7,202, 42, 92,149,213,102, 77, 21, 69,137,106, 93,
+238,176,150,140,104,157,225,108, 53, 3,121,166, 37, 14,146, 6,233,228,247,171, 45,224, 69, 85, 6,208, 80,224,106,234,215, 69,
+157,244,121,188,100,192,106,135, 39,159,125, 30,215,110, 62,134, 36, 35,194, 36,216,197,144, 34, 6,231, 48, 78,103, 64, 45, 56,
+205, 39, 24, 59,226,230,219,222,137,235, 79, 62,131,179, 27,143, 97,152, 38,204, 49,224, 11,191,255,219, 56,127,227, 46,190,227,
+ 7, 94,132, 25,247, 61, 20,229, 15,255,175,127,137,227,235,175, 66, 41,238,120,174, 92,189, 9, 44, 71,220,186,126, 13,159,249,
+253, 79,227,225,189,187, 50, 10,253, 26,249,211,232, 26, 28, 40,107,176, 63,187,142, 91,207, 62, 15,109, 12,206,206,246, 23,254,
+119, 12, 92, 17,111,159,236, 76,215, 96, 23,117, 33,219,124,235,157,215,205,103,104, 45, 30,220,191,143,215,190,250, 50,142,231,
+231,178,103, 86,178, 75,150,209,126,161, 0,107, 16,220,160, 2,199,238,195, 56,118, 65, 72,201,165, 23, 12,237, 96, 86,130,169,
+156,166, 51, 2, 62, 36, 28, 38,166, 40,214,149,210, 71,136, 79, 62,245,180,172, 7,215, 17, 76,217,234, 13, 20,186,138,189, 66,
+146,235,100,100, 69,225,148,186,248,191, 71,237, 2,169, 90, 75,183,151,213, 77,238,121,227,182,183, 9,234,237,151,191,130,154,
+ 19,156,245, 24,134, 1,169, 37,168,149,196, 16, 20, 57,228,151,121,134,117,244,130, 47,203,140,253,126, 39, 41,128, 90, 48,143,
+ 86,188,169, 5,199,243,115,142,166,196, 38, 86,115,249, 75,100,192,115, 45, 98,172, 65,174, 50,218,172,111, 38,238,245, 11,205,
+232,205,231, 32,171, 1, 33, 90, 53,241,223, 86, 93,221,212,211, 74,124,198,131,136, 59, 43,170, 8, 39,249, 82,167,196,196, 63,
+235, 71, 24,177,171, 65,145, 78, 86,132,255,112,124,120, 14,109,101,204, 45,234,108,242,201, 45,209,146, 57,200,231,208, 52, 14,
+ 43,122,217, 24,207,247,176,235, 54, 30,125, 57,247,145,249,230,207,176, 37,220,213,139,233, 51, 93, 60,219, 81,166, 88,133, 79,
+ 85,138,124,109, 24,241, 25,227,210,255,231, 90,211, 69,225,166, 29,134,221, 30, 90, 53,235,159,146,113, 33, 73,111, 89,158,167,
+ 20, 35,187,212, 90,176,204,146, 23, 33, 78,152,166, 48,231, 36, 44,178, 64,240, 3,140, 49,216,239,247, 88, 2,119,217, 89,184,
+230,227, 56, 18, 51, 10,250,139,173,113,240, 50, 17,169,181, 34,156, 78,162,218,182, 52,249, 85, 42,163,149,248,217,155,207, 57,
+ 44, 11,217,233,198,226,112, 56,174,211, 65,163, 59,190,115, 28, 60, 98,206,164,240, 13, 35,178, 20,253,109, 28,222,159,175, 10,
+238,175, 35, 39, 95,170, 69, 0,111,178, 35, 90,179,145,165,139,111,211,188,148, 98, 31, 7,231, 37, 34, 85, 22,137, 70, 27,132,
+ 64, 69,246,176,223,211, 91, 29, 2, 82, 73, 12, 1,145,179,185, 52, 6,126,165, 22,132, 97, 37, 4,153, 64,219,222, 1, 54, 66,
+ 95, 74,129,171, 5,205,239,128,219, 57,221,233,154,188, 76,201, 15,105,120, 85,109,116,143,149,206,178, 42, 96, 83,169, 17,162,
+ 76,145, 64,235,164, 22,241,180, 54,134, 46,121,121, 6,154,110,165,101, 22,180, 95, 35,132, 83, 95,215,233, 38,180,150,245,199,
+ 54, 14,155,171, 47,221,179,238, 33,133,179,149, 84, 61,158,157,180,199, 86,164,174, 3,115,206,147,248,151,104, 35, 51,214,193,
+ 26, 35,207,144, 80,228, 44,137,124, 90,105,138, 72,219, 78,190,226,194,232,187,244,120,230, 10, 59, 14, 44, 32, 82,232, 5,190,
+ 86,156,214, 37, 17, 10,247,149, 98,159,150,229,126,102, 88,237,144,107,165, 21, 15,196,176,243,123,202, 4,118,109, 51, 46,196,
+102, 9, 5, 88,168,175,229,237, 85,171,144,189, 2,214, 77,240,227, 14,103,215,174, 3, 2,227,176,158,108,218,209, 59, 44, 33,
+224,137, 39,159, 22,190,122,129,177, 14,126, 80,184,126,243, 6,194,221,219,120,245,206, 87,240,250,176,195, 32,161, 0,121, 57,
+192,170,132,207,254,222, 39,240,215, 62,240,253, 72,110, 68,124,120, 23, 74,105, 2,238, 99,224, 11,102, 72,120,122,245,206,107,
+ 24,207,206,240,224,222,189,175,137,250,220,174,165,181,179, 24,166, 17,215, 30,127, 92,118, 42,232, 47, 13, 71,168,232,234,193,
+ 46,158,176,182,239, 92,187, 96, 67, 42, 39,198, 39,178,194, 74,153, 35,177, 55, 94,123, 21,135, 7, 15, 24,174, 32, 99, 46, 35,
+ 15, 92,251,117,140,236,136, 83, 34, 86,177, 86,218, 40, 56,170,177, 82,145, 57,161, 3,209,206,146,115, 6, 50,129, 35, 33, 48,
+ 82,114, 24,175,112,244,103, 12,180, 6,172,177, 56, 29,142, 8,243,140,123,238, 85, 92,185,118, 3,186, 99, 53, 55,254,132,138,
+110, 3,161,213, 38,118, 11, 86, 43, 96,106, 59,216,172, 69, 77,107, 17, 67, 8,132,237, 54, 17,134,249,152,126, 16,134,101,129,
+209,154,196, 55, 0,185, 22,177, 32, 22, 17,150, 84,201, 0, 23, 79,118, 27,209,139,216,112,154,118, 8, 33,193,143, 99,255,204,
+195, 18,176,155, 38, 20,163,224,253, 0, 99, 86,101,234, 95, 86, 20,199, 17, 49,214, 61,120, 42,111,186,204, 59, 22, 88, 4, 99,
+109, 66,210, 5, 41,186,176, 88,145,177, 92,169, 50, 46, 85, 18,202, 81,169, 98, 45, 21,125,140,214,220, 17,198,170, 62,169,202,
+ 41, 32,139,160, 84, 41, 0,177, 74, 40,137, 56, 49,202,210,193, 74,189, 64,149, 65,122,123,126,149,161, 96, 48, 36,198,169, 58,
+235, 17, 67,134,179, 14, 41,230, 55, 21,186,151,187,117,244,136, 97,125, 65, 28,136, 75,212,192,102, 98,237,126, 23, 93,187,126,
+ 64,107,122,113,181,182, 20,158,142, 20,153, 85, 99, 4,186,194, 49,114,140,137, 20,180, 24,232,183, 13,129,239,182,117,128, 49,
+ 44,110, 23,130,109,160, 50,140,247, 93, 71,163,172,101,192, 72, 41,240,211,136, 20, 35,188,248,134, 33, 7,218,225,120,164,182,
+ 32, 74,167, 62,141,208, 90, 99,186,114,182, 82,227, 80,113, 60,127,136, 97, 26, 25,119,139, 10,239, 60,187,111, 25, 27,103, 52,
+193,107,146, 2,129, 5,133,243, 30,117, 48, 24,188,239,223,137,177, 26,199,195, 57,150,211,140,120,100,120,142,150,130,213,201,
+158,189, 24,221,115, 2,166,118, 97,196, 8, 85, 40, 64,165,112, 74,173, 98, 84, 17,138,165,166,179,145,142,121, 89, 78, 76,157,
+148, 72,219, 90, 11,172,165,154, 61,132, 32,206,139,136, 20, 22, 70,225,138,142,194, 24,205,221,114,173, 68,192, 66, 73,129,144,
+ 81, 82, 16, 96, 11, 80, 53,207,217,156,228, 50,146,233, 80,137, 9,218,208, 14, 87,228,125, 77, 18,116, 2,165, 96,189,151,181,
+133,146,124,111, 42,184,249,121, 82, 27,211, 44, 97,227, 48,244,116, 74, 99,169,114, 39, 3,162,202,215,168,200, 36, 80, 64,141,
+ 73,144, 80,107, 3, 81,107,145,128, 23,141, 20, 69, 4,106,128,249,116, 98, 51, 36, 52,188, 24, 35,134,105,130,159,246, 29,127,
+157, 19,227,102,167,113,224,115, 83, 43,142,167, 0,109,148,160,200, 61, 49,227, 53,116,139,174, 42,133, 16,156,102,203,116,142,
+205, 80,206,200,149,145,192, 53, 73,182,128,156,225,173,160,217, 10,184,203,233,196, 8,234,230,138,169,156,236, 45, 33,116,161,
+222,178, 44,189, 67,103, 65, 68,155,163,117, 3,191, 19,231, 0, 48,211, 32,165, 44, 24,105,221, 53, 70, 70, 64, 56, 90, 19, 13,
+ 29,194, 2,117,243,169,103,171, 81, 21, 39,233,166, 90,120,139,115,252,144,199,113, 47,182, 16,133,152, 72, 12,210, 98,189,242,
+ 35, 83,147,134,253, 21, 44,167, 35, 66, 88,112,118,245, 58, 98, 8, 24,167, 9, 75,100,213,179,219,237,128,156,113,152,103, 76,
+195, 0, 55, 56,196,200, 3, 86, 1, 24,118,103,248,238,239,253, 62,252,199, 63,253, 83,124,229, 63,252, 1,194,233,136, 36, 93,
+ 92, 73, 9, 15,223,120, 13,243,178,224,252,120, 64, 60,206,152, 79,199, 71,178,211,169,116,180, 61, 24,229,250, 99, 79,224,236,
+218, 13,102,106, 79, 19,172,181,184,121,227, 6, 69, 17,105, 29,125,181,127,111,187,160, 86,253,181,203,220,116,113, 81,193,253,
+123,119,113,239,206,171, 88, 78, 7, 24,235,168, 2, 93, 24,252,161,187, 26,158,199, 32,127,157,117, 71,171,213,218, 5,182, 98,
+193, 88,223,163, 81, 33,246,193, 62,218, 23,128,134,247, 3, 82,161,138,147,144, 20,133, 16,163,224, 83,169, 54,221,157, 93,197,
+181,155,143,117,132,175,146, 23,113, 62,157, 99,158,249,153, 37,129, 93, 48,124,196, 67, 91,218, 92,152,152,149,225,188,131,243,
+ 35,174, 94,189, 78,107, 71,163, 2, 10,126,119, 62,157,176,132, 5,165, 38, 70,241, 2, 24,252,128, 16, 34,194,178, 32,231,200,
+157, 57, 0, 63,140,128, 54, 8,243,194, 49, 85,201,221,150,145,114,194,224,188, 84,212,138,182, 16,169,240, 57,166, 94,247, 69,
+218, 40, 28,206, 31,114,140,245, 13,118,233,198, 24,120,177,220, 80,149, 26,229,249,102, 16, 80, 11, 48,170, 21, 61,116,161, 95,
+106,210,177, 55,167,131,177, 34,122,138,161, 3,107, 46, 20,149,114,243, 25,229,186,219,162, 49, 11, 82,179,186,192,192,202, 62,
+ 57,133,136, 24,103, 73,119,146,189, 48, 20, 15, 13, 17,194, 41,105,227, 90, 30, 51, 15,162,138, 34, 29,105,110, 16,151, 10, 73,
+ 80,180, 12, 44,105, 19, 38,121,111,219,216,254,242, 7,216,125,232,117,101, 80,160, 23, 1,186,119,232,218, 90, 88,235,224,199,
+ 61,166,113, 66,169, 21, 73,246,209,220, 33, 22, 73,125, 99, 2,213, 50,207, 40, 18,221,220, 20,202,181, 16, 99,105, 6,138,223,
+106, 37,126, 87,105,210,177,164, 69, 99,112,199, 56, 50,172, 35, 6,248, 97,224,202,233,238, 93,160, 22, 24,231,225, 6,223,223,
+ 75,235, 28, 71,145, 49, 33,201,212,196,121,102, 75,107,240,224,111,163,211,113, 55,246,212,200, 20,147,104, 37, 26,196, 73,117,
+119,198, 18, 22, 10,237,156, 23, 49, 97,225,133, 49, 12, 84,145,167,132,105,162,207, 60, 74, 71,174,181,134,119, 44,236,219,229,
+ 96,181, 65, 88, 22,174,171,114,238, 86, 77, 94,198, 36,162, 89,177,105,245,241,174,156,137, 90,243,178,204,226,120,224,212,128,
+ 43, 19,101, 52, 11, 4, 77,165,126,202, 25,214,106,217,119,243,252, 51,138,244,180,156, 18,243,228,229, 61,174,165,116, 65,155,
+ 53, 6, 85,101,204,243, 76, 61, 75, 33,208, 40,201, 37,229,100, 95, 77, 43,112, 70, 8,139, 76,232,164,163,150, 2, 56,199, 40,
+104,212,181,160,204,133, 2, 62,107,157,252,121, 77, 23,255,101, 17,220,105, 45,107, 1,177,254, 26,109, 46, 4, 17,181,127, 37,
+ 81,145,163,210,186,197,105,154,172, 74,101,106,170, 5,153, 76,198, 6,255,126,146,221,125,201,161,167, 37,110, 18,116, 56, 81,
+170, 70,136,111,233, 66,244, 50,208,128, 72,224,243, 86,154,144,154,140, 0,133,214, 97,139, 53, 81,206,102, 40,238,198,105,245,
+ 77,162,254, 95,169,135, 74,217, 46,184,141, 49,116,113, 57,137,175, 50, 37,117,108,164, 82,224,231,154,195,194,179,209,123,225,
+152,180, 63, 75,237,205,135,222, 20,239,234,169,183,125,115, 5, 42,118,187,157, 0, 76, 52,118,211, 4,165, 20,238,221,187,143,
+ 97, 28, 97,180,193,241,120,232, 29,157,181, 86,126,112, 30,124, 87,111,222,196, 52,237, 48, 55, 88,128,177, 56,157, 78, 24,199,
+ 1,199,195, 17,110,156, 48,237,175, 98, 26, 44,238,223,125, 3, 85, 91, 60,241,196, 19,152,151, 0,173,128,121, 89, 24,154, 96,
+ 13, 16, 23,220,216,239,240,215,191,237, 91,240, 45,207, 63,135, 63,254,143,127,132, 95,251,245, 95,199,157, 87, 95, 99, 69,154,
+178, 80,129,202,163,119,167,114, 48, 25,163,113,243,137,167,113,253,230, 99,172,126, 44, 85,150, 55,110, 92,239, 93,122,104, 29,
+149,140,123,219, 24,170,237, 44,154,202,189,136,197,231,149, 47,125, 25,111,188,118, 27, 80,249, 66, 55,219, 42, 52, 35, 54, 47,
+107, 9,144,105,249,236,106, 3,133, 99,148,226, 38, 57,238, 52, 99, 28, 71,156,142, 71,164, 28,161, 45,171,185, 32, 2,179,246,
+ 69, 57, 67, 15,166,147,162, 69, 9,115,154, 74, 85,142,108,173,103, 52,225,245, 27,215,169,138,191,247, 6,150,249,176, 9, 77,
+145, 84,171,134, 21, 48, 78,212,221, 65, 50,223,233, 1, 55,198, 66, 91,221,201,124,109,244, 90, 37,150,176, 66,118,178,112, 23,
+ 59, 66, 84, 10,197, 10, 71,207,126,220, 97, 28, 39, 64, 14, 87,213,236, 27, 45, 49, 72, 44, 74, 86,160, 15,203,178, 32, 38,218,
+ 77,156,236,210, 24,162, 18, 55, 5,201,127,218, 95,205,137,160, 52, 11,212,230, 37,175,165,160,170,198, 99,175,125,124,142,114,
+177, 72,172,138,187, 57,136, 63,191,109,162,180,209, 72, 2,126, 80, 90,245, 11,171,136,127,182, 51,224, 69,104,214,240,165, 90,
+ 27, 56,199,189,165, 54,242,207,228, 36, 56,202, 12,101, 72,139,203,114,232,246,149,137, 88,219, 26, 35, 64,113, 25,222,139,209,
+218,194,140, 58,125, 82,196,133,162, 29,128, 92,234, 13,239, 91,187, 82, 77, 14,182,214,137, 27, 6,102, 24, 59,146,133,224, 7,
+196,200,231,171,161, 49, 83,140, 92, 9, 88,233,232, 4,212, 19,150,128,146,138, 0,165,216, 13,101,173, 48,237,118,210,197,144,
+154,168,229,130,207, 57, 82,100, 40,157,190, 23,245,127, 56,158, 48, 12,131,136,217, 12,197,130, 82,168,107,173, 58,217,204, 25,
+118,133, 33,198,126,128,166, 86, 52,202,138, 38, 44, 11,172,229,251, 72, 74,215,218,101, 26,109, 58,226,212, 90,141,184, 4, 40,
+197, 17,127, 46, 25,222, 15, 88,150, 5,222, 59, 76,211,142,239,114, 46,116,196,180,104,227, 24, 89, 28, 74,151,202,149, 23,237,
+107, 13, 11,218, 99,126, 5, 74,212, 63, 63, 41, 30, 8,105,203, 93,227,225,253,208,215, 34,243,210,232,106,226,252, 48,235,153,
+ 64,118,130,216, 97, 51,117, 49, 13,193,221,166, 47, 40, 44, 24, 90,241, 83,202,230,231,223, 8,141, 27,134,187, 36,174, 69,140,
+ 92,142, 74,172,171, 57,103, 40,171,187,154,221,136,176,173, 23, 9,194, 31,175, 98, 83, 83, 90,117,155,102,197,186,202, 72,162,
+ 89,232,192, 50,149,123,211,208, 68,205,236,220,215,181,159, 18, 65, 89,183,186, 41, 43, 89, 14,153, 54,245,237,180,182,249,245,
+105,117,144,149, 71,161,125,177, 38,186,137,234,197, 28, 11, 99,116, 39,218, 21,113,183,212,182,106,104,248,226, 77, 26,247,122,
+ 62,232, 94,188, 87, 69, 44, 47,202,138, 37,238, 19,152, 26, 54,105, 38,205,142,185,230, 53,180, 51,179, 57, 90, 90, 20,116, 91,
+221,233,205,180,177,121,216, 59, 30, 89,165,254,179,242,179,217,172,114,222,242,214,119,212,138, 74, 12, 94, 5, 82, 98,183,218,
+ 67, 91, 68, 57,137, 90,169,250, 3,176,219,237,112, 60,157,122,130,219, 48, 49,191,215,141, 19,119,160,168,216,237,246, 8, 49,
+162, 84, 6, 31, 92,189,126, 3,203,241,128,162,128,135,111,220, 69,201, 9,198, 90,140,187, 29, 30,123,236, 22,222,120,253, 14,
+ 30,222,127, 3,163, 82,120,250,241, 27,240,206,226,185,103,159,199,167, 62,243, 41,220, 59, 63,199,221, 59,119, 16,101, 55,211,
+ 68,108,109, 52,218,232, 98,171, 79, 28, 48, 86,225,153,103,159,131, 25,105,253,130, 37,229,106,240,142, 76,110, 17,199,108, 71,
+147, 90,107, 86,222,109,223,190,233,222, 94,250,179, 63,197,131,251,111,116,203,214,186,187, 87, 23, 88, 60, 20, 66,240,103,108,
+ 84, 34,165, 40,254,208,198, 96, 89, 2,198,105, 15,173, 21,230,211,130, 24, 78, 28, 1,213, 42,149, 27,171, 46,235,249,226,198,
+152,224,156, 21, 4,104,197, 48,140,240, 34,242,129,113,140, 26, 60, 30,122,135,160,141,198, 50, 47,168, 57, 10,156, 65, 93,200,
+109,111,121,215,237,146,106, 22,172,166,220, 84,208,112,110, 32, 40, 65,118, 61, 77,213,218,247,180, 72,156, 24,104,215,197, 48,
+ 37,243, 98, 3,248,188,228,148, 96, 61, 19,155,140,160, 94,169, 17,152,248,114, 90,141, 16, 4, 40, 99, 44,230,211,188,198, 32,
+110,212,214,126, 28,144,226,130,211,241, 32, 74,221,191,248, 98,215,114, 65,213, 66, 12,163, 31, 6,185,216, 76, 23,221,212, 82,
+ 59, 29,143,113,158,232,207,115, 35,203,117, 49, 90,139,249, 20,245,126,227,194,183,233, 78,251,121,201,247,206,189, 40, 48,114,
+169,180, 17, 98, 3,214, 84, 1, 29, 85,201,158,215, 70,175,172, 7,249, 50,166,105,194, 44,254,225,214,137,148,182,135,109, 35,
+ 62,189,218,252, 90,113,217,132,141,132,199,160,143,169,183,241,158,206, 15,176,214,195,141,163, 48,208,185, 99, 85, 50, 21,224,
+123, 21,101,101,154,250, 69, 91,115, 97, 87,104,200, 26,208,206, 99, 24, 38, 30, 36,133,197, 9, 52,127,190, 97, 28, 73,220, 43,
+ 89, 0, 28, 96,106, 85, 74,152,231, 5,251,179, 51, 1, 24, 37,174, 44,106,134, 1, 15,113, 35,244, 51, 55,248,206,153,143, 41,
+209,198, 37,147, 29,165,208,199,201, 16,143,118, 5, 16, 67,192, 48,142,136, 49,244,221, 37,207,181, 4, 99, 13,173, 76,173, 64,
+ 18, 63,183,213,134,174, 8, 9, 2,225,202, 96, 17,235, 33,191, 19,107,140, 20, 72, 76,218, 75, 57, 99, 24,124,159,234,181,213,
+ 72, 88,102,185,116,116,143,111,173,165, 9,160,200,237,247,110, 32, 53,111, 24,113, 58, 29, 17,101,226, 54,202, 26,106,158,231,
+126,118, 52, 14,122, 91,201, 41,128, 19, 80, 17,205, 70,217,215,106,153,246,100,177,153,214, 42, 46, 15,153,216,109, 69,192, 49,
+165, 14,204,130,102, 51,163, 42,221, 55,109, 29,208, 39,138,214,162,214, 40, 29,115, 97,172,246,182,155,109, 80,175, 64, 93, 21,
+127,158, 44, 5,177, 52, 62, 86,201,222,217,244,181, 83, 69,126, 4,107, 68,193,185,245,146,165,240,222,245,187,159,180, 67,185,
+ 8,107,234,231, 90,167,204,201,132, 73,195,116, 18, 91, 46,220,105, 91,105,210,180, 86,125,181,220,120,236, 10, 10, 69,200,151,
+237, 89,234, 83,136,156, 87, 62, 3,234,198,106,102, 69, 80, 25, 87, 88, 91,109,191, 46,127,246, 82,163, 8,105,209,197,156,106,
+ 51, 9,227,213, 33, 10,125, 37, 76,137,190,240, 66,135,222, 48, 67, 65, 92, 64,170, 9, 80, 75, 47, 36, 27,181,181, 57,176,212,
+173,231,222, 94,141,182, 60,108, 53,149,155,141,140,211,186,140, 54, 98,178,198,224, 56,207, 20,125,165,132, 24,162, 68, 27, 70,
+164, 40,137, 77, 50, 78,219,157,157, 97, 28, 71, 76,251,171, 56, 30, 30, 80,101,169, 12,158,126,246,121, 60,124,112, 31,119,190,
+250, 21,156, 14, 7,104, 99, 72, 89, 59,157, 16, 68,141,234,141, 6, 20,199, 81,188,180,163,192, 34, 32,163,135, 71,119,233,219,
+238, 25, 0,158,125,246, 89, 60,249,236,179, 0, 8,178,184,123,255, 1, 74,173, 24,167,145, 60, 94,107, 68, 73,171, 46,120,158,
+139,248,178,141,209, 40,185,226,238,157,219,120,229, 75, 95,232,169,116, 85, 68,102, 77, 67,168, 5,250, 98,157,229, 72, 20, 20,
+124, 53, 69, 59,113,156,172, 82, 41,166,147, 2,181,129, 75, 80, 48, 77, 35,149,246, 70,118,254,194, 38, 79,185, 21, 50,182,175,
+218,252, 48,245,189,120, 43,110,134,145,225, 5,199,195,195,158,250,229,189,195,114,156, 31,153,151,238,156,147,241,237, 10,208,
+ 49,155, 29, 43,133,123,128,181, 94,236, 19,194,209,110, 15, 92, 46,152,246, 59,196, 16, 81,228,101,111, 15, 98, 78, 9, 74,243,
+103,176,198,226,202,181,155,164,165,201,165, 30,195,204,203, 48,241, 33,236, 22,175, 20,161, 12, 17,167, 85, 14, 82,227, 29, 78,
+135, 35,106,166, 79,116,123,224, 60, 50, 83, 94,108,140,109, 36,182, 62,236,171, 7, 61, 39,254,218,165, 38,148,154, 59, 89,141,
+169, 93,130,137,148, 44,227, 34, 30,249,134, 60,109,200,203, 21, 58,179,138, 39,183, 1, 66,173,192, 42,133,169, 94,253,255, 54,
+105,118, 53,151,222, 97,107, 65, 40, 15,110, 66,106, 94, 94,233,148, 26,252, 72, 27,225,182,215,210, 17,181,141,102,181, 50, 5,
+234,166, 72,115, 24,166, 61, 9,109,198, 96,152,118, 72, 49, 33,166,216, 45, 89, 57,208, 71,172,228,251,177,134, 4,195, 16, 2,
+198, 97,236, 93, 36, 97, 75,166,175, 38,140,214, 88,150, 32, 92, 7,177, 60,106,141,148,104,243, 83,150,118,180,156, 50,172,179,
+ 24, 5, 93,218,114, 33,170,240,246, 99, 78,112,150, 25, 16,214, 58,161,150,213,190,103,110, 32,168, 44, 20,182,139,144, 18,134,
+217, 12,195,216, 39, 99, 45, 24,164, 86, 18,198, 26,186,180, 37,104, 53,220,168,179, 78,126,159, 34,168,224,180,250,242,229,210,
+ 95,117, 37, 77,209,222,166, 50,232, 1, 27, 74, 64, 49,121, 62, 97, 28, 71, 28,230, 19,121,251,185, 64,171,213,115,173,205,170,
+181, 1,152, 69,193, 75,123, 3,189,130, 98,230,189,210,152, 79, 39,120,207,213, 92, 53,210,253,241,166, 64, 41, 5,161,217, 41,
+ 53,197,128,168, 96,198,128,232, 66, 90,127,104, 68, 51,176,106, 60,106, 7, 75, 21,233,250,202,118,124, 43,226,188, 34, 69,107,
+107,152, 74, 33, 50,188, 97,160,251,223,211,130, 88, 86,142, 58,133,229,196,212,194,222, 4,168, 62,166,108,182,184, 6,220,106,
+239, 99, 91, 21, 53,102, 65,201, 69,172,179,182,175, 65,141,113, 50,229,145, 66, 75,241, 62,208, 74, 34,126, 7,207,233, 88,230,
+148, 66, 43,197,140,200, 90, 41,210,172, 69,138, 45,161, 69,202,187,210, 38, 61,106,243,123, 55,248,147,210,252,110,173,113,189,
+ 99,231, 20,166, 64, 85,211, 47,125,126,191, 23,215, 2,219,247, 60,167,210,197,146, 69, 2,139, 20,140,136,147,179, 8,147,141,
+176, 31,128, 84,194,122,167,201,148, 38,119,182, 69, 19,228,181, 6,139,239,139,105, 97,105,165, 64, 61,247,142,111,169, 45, 47,
+184, 86, 25, 43, 57,203, 75, 90,198, 3, 74, 14,113,165, 21, 82,169, 48,168,120,112,247,181,206,251, 53,146, 54, 83, 10,122,167,
+236,189,235, 96, 10, 55, 76,180,186, 84, 5, 5,118,104,198,168,238,211,245,222, 99, 57,205,228,130,167, 36,233,148,107,176, 71,
+206,140,191,107, 52,167, 34, 80,128,206,226,150, 81, 20,122, 44,108,237, 23, 23,140,130,179, 35,222,241,205,239, 0,148, 70,200,
+ 21, 89,107, 12,222, 95, 24,159,111,187,242, 34,151,162, 86,236,120, 62,251, 31,254, 61,169, 83,149,161, 54,166, 9,232,154,226,
+176,212, 11,236,251, 54,110,109,161, 15, 97, 9, 93, 13,175, 54,190, 96,109,124,199,224, 26, 99, 16, 83, 64, 76,164,176,181,174,
+116,220, 79,136, 33,118,146,151, 49, 86, 58,199,218,163, 53,155,141, 44,151,184,226, 63,165,195, 51,130,247,236,130,191,237,206,
+ 74,246, 92, 61, 7, 91, 46,243,182, 7,229,231,191,198,221,106,181, 86,143,237, 5, 33, 99,217,194, 88,215,211,147, 56, 53,160,
+103,178, 40, 13, 20, 17,117, 88, 30, 36, 77,247,128, 84, 58,136,165, 86,218, 87,140,247, 56, 28,206, 97, 69,145, 31,101, 68, 93,
+ 75, 33,212,225,146, 13,241,178,229,138,216, 77, 45,209,162,169,127, 31,157,184,167, 0,239,118,124,166,171,112,214, 37,230, 23,
+ 21, 48,134,184,222,148,151,254,179,181,139, 94, 9, 89,174, 19, 4, 37, 22,148,150,153,120,225,165,107, 99,184, 62, 50,239, 42,
+242,245,231, 55,170,101,158,211, 89,130, 90,177,155,174,244,151, 83, 27,211,173,120, 57, 39,164, 48,119,125,134, 17, 64, 72,202,
+172,242, 75, 19, 30,109, 46,224, 27,143, 63,137,156, 11, 66, 88,196,246, 2,225,201,139,211,192, 59,148, 34, 65, 45, 57,111,130,
+102, 12,114, 72, 80, 86,112,156, 69,222, 37, 85,123, 1, 89, 82, 90,127,118,165,100,159,107,214,236,122,219, 70,225,149,221,180,
+ 2, 61,228, 34,208,219, 78,219, 90, 80, 78,206, 9, 49, 44,242, 25,202,138,161, 20,174, 1, 36, 85,173,253,124, 37, 19,145,202,
+ 34,215,247,162, 58, 69, 54, 1,109,154,210,246,228,100, 65,180,245,132,176,200,141, 97,129, 3, 80,208, 90,106,215, 89, 48,117,
+183, 94,248,253,226,114,224, 68, 83,177, 73,104,191,126,206, 25, 74,186,104, 24, 33,155, 85, 64, 11,119,161, 52,123,171,156, 43,
+ 37, 70, 40, 41,144,149, 91,197,185, 49, 70, 56,109,104,231,149,207, 70, 41,133,130,204,233,132,214,114,249, 66,186, 66,197,115,
+ 85,136,107, 45,199, 33,183,149, 89, 59, 15, 69,179,208,236, 97, 85,232,113,109,141,185, 21, 8,207, 18,191,221, 58, 96,231,125,
+ 63, 91, 57,125,227,229,153, 34,245, 41, 53, 7,193, 45,227,114,172, 98,143,218,109, 78, 13, 62,175, 89,132,130,166,191, 71,125,
+223,140, 22, 50,165,132,210,166,123,131, 3, 84,105, 66,184,154, 75,145,246, 56, 47, 65, 66, 73,214, 41, 70, 72,109, 0,197,210,
+ 57,101,228,180, 92,204,172, 64,203, 84,103, 81,221,159, 39,113, 31,181, 53,106,233, 65, 79,252, 62, 99, 92,160,149,236,254,179,
+234, 43,190,148,216, 28, 52,209,121, 91,199,117,254,131,132,186,176, 40,214, 29,154,196, 75, 63,247,119,184, 86,201,128,183, 92,
+ 69,108,117, 16,205,123,213, 39, 13,218,201,103, 28, 89,128,201, 89, 99,180,129,122,226,185,111,170,205,242,195,221,231, 76, 49,
+132,140, 65,219, 97,225, 29,193, 4, 41, 6, 28, 31, 60, 64, 12,179, 84, 61,121, 29,169,136,170,214, 24, 13,107, 60,125,134,242,
+133, 43,217, 3, 25,165,176,204, 39,233,106,249,135,205,130, 52, 53, 82,121,180,189,125,219,177,144,176, 22, 4, 93,152,133,107,
+156,250,168,243, 50,254,243, 2,243,189,129,114,140,129, 27, 38, 60,251,150, 39, 17,252, 30,215,206,118,128,140, 79,219,255,182,
+237,213,245,102, 28,127,255,141,215,241,202, 75, 95,144,168,214,188,142,226,228, 34,104,104, 86,213,199, 51, 91, 27, 17, 15, 99,
+ 35, 23,124,199,136,110, 50,180,201, 10,230,129, 56,237,246,136, 75,148, 41,200, 44,163, 43, 3,239, 60, 22, 9, 19,104, 66,141,
+203,106,229,166,160,111,227,162,216, 61,167,245,130,112, 76, 27, 90,187, 32, 28,107,165, 52,129, 15, 18,148, 99,189,195,224, 7,
+104, 17,133, 89,229, 69,249,202,159, 41,167,212,121,197,237,215, 72, 49,193, 58, 79, 15,183,164,132,181, 11,162, 85,182, 57,166,
+245,103,177, 28, 53,182,184,196, 48, 47,124, 81,115,227, 26, 3,211,217,213,158, 94, 53,159,142, 76,150, 42, 76, 27,235,157,197,
+ 86,252, 85, 36, 40,200,177, 75, 52,176,210,113,229, 78,147, 34, 95,219,118,225,156,117, 22,135,243,131,172, 13, 32,235,153,157,
+100,100,207,172,226, 65,182,192,254,202, 30, 57, 5,148,148,201,206,223,236,223,218,207, 82,164, 75,184, 76,170, 43,162,101,184,
+ 48, 93,218, 40,159, 91,183,167,149,238, 35,103,101,232,205,134, 20, 29,237,175, 24, 66,167, 24,246,195,185, 22, 84,148,238,233,
+ 14, 33,138,239,213, 2,114, 48, 43,227, 96,228,187, 13,155, 48, 36, 22, 98, 60,184,157,179,130,186, 52, 82, 56, 23,132,200,113,
+113,179,204, 52, 72,147,181, 22,208, 10,211, 56,177,208,104,214, 52,153, 94, 76,187, 9,243,178, 80,239,145,171,224,105, 77,127,
+103, 90,103, 29, 67, 88,167, 21, 61, 57,171,202,165,195,142,182,253,179, 49,198,126,240, 27,137,131,213,138, 10,120,238,154, 13,
+156,245,226, 35,102,118,130,181,150,154,149,211, 44,103, 81, 69, 88, 66,239, 24,149, 42, 34, 62,202, 44,164, 65,250,152,115, 3,
+180,150, 80, 15,113, 57,104,205,119, 95,105, 94, 82, 49,196,149,219, 48,211,139,190,132, 64, 31,186, 60,111,165,172,246, 67,165,
+ 87, 87,131,115,180,184,162,143, 98, 85,159,136,240,187,169,208,186,246,119, 98, 35,178,232,162,219, 42,197,170,150, 4, 61,254,
+115, 70,138, 83,211, 87, 81,218,153, 46,124, 78, 50,233,172,185, 10,245,172,172, 12,126, 0,206,112,202, 81, 37,174, 90, 41,133,
+188, 48, 14,181, 42, 37,126,244, 36, 22,198,136, 90, 18,180, 29, 72, 32, 20,246,120,203, 65,104,241, 83,173,219,246,195, 4,109,
+ 41,108, 76, 51,245, 51,176, 6, 59, 65,190,114, 37,121, 98, 22,134, 93, 33, 66,121, 89,200,233, 24,169,243,104, 69,174,150,231,
+162,138,238,197, 89,102,136,212,178,177, 60, 3, 12, 3,106,174, 40,209,173,232, 11, 41,154, 10,198,183,120,211, 53,154,187, 33,
+104,177, 25,191, 67,238, 57,166, 9,102, 24,237, 68,175, 19,122,206, 64,237,211,196,214,241,235,238,164,162,182, 33,119,135,131,
+241,178, 94,128,130, 22, 97, 94,159,248,137,213, 89,105, 80, 76,172, 56,149, 9,203, 2, 85,218,157,167,122, 49,223, 2,106,212,
+147,207,127, 83,237,224,147,166, 0,183,174, 87, 26, 70, 43, 44,135, 35, 82, 14, 8, 11, 81,131, 37, 71,193, 66,234, 53,144,163,
+ 39, 46, 53, 16, 7,129, 8, 45,150,178,237, 34,154, 48, 45,198, 72, 97,152,214,112,214,247, 10,174,167, 46,109, 43,213, 82,224,
+188, 65,136, 75, 87, 8,230,148,165,203,192, 26, 87,249, 8,230,251, 42,160, 35,186,241,108,242,184,249,204,219, 49,238,207, 40,
+248,217,120,210, 91,246,116,171,134,181, 86,248,202, 23, 62,143,135,111,220,145,236, 94, 25,231, 72,167,211, 4, 64,205, 34, 5,
+137,228,107,251,161,150,246,217, 72, 95,237,240,111, 54, 65,138, 67, 86,142,120, 78, 21,222,143,189, 43,235,106, 70, 73, 99,138,
+178,231,108, 98,172,173,183,184,239, 99,196,207,221,172,123, 91,175,114, 71,178,218, 53,201,136, 59,101, 81,214, 27, 5,231,173,
+ 80,179,116, 15,255, 48,198, 10, 11,170, 32, 69,185,236,244, 58, 70,237, 2, 44,173,225,156,237,209,155, 74,254,236, 60,140,213,
+ 70,160,199,231,192,187, 65, 84,180, 21,110, 24, 88, 25,183, 63,155,165,159,179, 77, 75, 98, 12,128,230,184,172,241,223,157,140,
+200,115, 94, 59,147, 42,107,132,221,120, 5,181, 86,204,203, 17,198,104,204,203, 44,151, 57, 15,255, 69, 14,170,214,217,230,210,
+186,242, 22, 63,203,239,211, 89,143,105,218,163,232, 74, 68,101,133,132, 60,228, 21,157, 43,221,115,251,110, 46,115,228,183,145,
+188,229, 18,226,184,148,139,227,115,237,100,239,175,248,185, 55, 85,123,243, 61,183,127,190,129, 46,200, 55, 87, 40,117, 45, 78,
+ 83, 35,175, 41,139,253,181,235, 76, 2, 12, 51,184,242,166, 55,190, 11, 48,157,195,225,252,192, 85,135, 49,136, 37,146, 22, 40,
+ 97, 28, 85, 0, 28, 74,222, 73,173, 53,180,119,221, 91,110, 69,204,213, 53, 32, 75,232,214,206,118, 30,180, 21, 72,206, 69,240,
+200,169,139,160,134,113, 16,209,153,235,151,118,179, 30,105,249,126,154,192,177,141, 59,149,105,236, 1,219,215,130,237, 57,235,
+ 66,182,176, 32,165, 32,197, 64, 18,200,211, 32,171,176, 85, 52, 23, 99, 20,119,134, 18,225, 41,250, 69, 91,123, 6,129,193,224,
+ 25,244,113, 60, 28,145, 82,128, 22,222,131,245,132,145, 32,101,122,161, 69, 9, 94, 47, 69, 67,211,130, 56,247,213,137,130, 22,
+119, 64, 19, 56, 53, 63,123,211,192, 72,154,157,210,128,114, 92,197,133,147,172,243, 68,247,129, 53,198,120, 45, 48, 13,188, 36,
+164, 45, 98, 57, 85,222, 94,152,104,182,119, 49,199,128, 2,238,255,155, 70,132,169,148, 70,190, 51,201, 27, 48,190, 79, 55,148,
+161, 46,129,169,113, 9, 90, 1, 87,111,220,236,197,130, 49, 6,167,121,193, 52, 77, 23, 56, 23, 45,130,183,237,203, 67, 8,130,
+ 63, 21,125,134,106,161, 74, 9, 49,206,178, 55,214, 82,156,108,144,196,162,179,169,149,233,118, 70, 68,156, 4,251, 4, 62, 59,
+125,116, 45,231,146, 53,240,195, 0, 99, 92, 23,162,214,146, 17, 98,128, 22,148,108,233,186,136,213, 40,210,108,103, 13,109, 91,
+181,234, 34,223, 20, 78, 50, 25,145,230, 65,183,243,146,211,157, 20, 35, 19,235,100,220, 62, 12, 67, 39,201,157, 78, 39,113, 92,
+104,140,211,136, 28, 19,255,127, 90, 19,185,219,215,122,141,110,202,105,129, 50,154, 22, 57,173,161,114,185,224, 54, 72,125,125,
+ 4,168,199,159,121, 91,117,222,117, 11, 84,219, 91, 48,171, 55,225,225,189,187, 72, 33,192,104, 69, 11,151, 98,149, 93, 55,169,
+102,237,144,106,163, 43, 5, 30, 10,106,211, 99,132,184,192,104, 67,106,210, 50,247,202,172,177,181,219, 11, 11,177,203,213, 42,
+151, 43, 74,239, 16, 90, 28,102,110, 29, 74,174,242,210,134,254, 51,247, 52, 57,189,230,158,247, 75, 86, 3,187,179, 43,184,118,
+235, 45,216,239,246,240,195,200,151, 66, 46,215,102,213, 83,194,124, 87, 74,225,207,255,228,223, 75,190, 52,186,154,189,237,110,
+ 27,204,165,230,178, 66, 94, 54, 17,158, 85, 70,243,125,183,178, 17,169, 1,181, 95,110,156, 56,104, 1, 43, 88,140,187, 9,203,
+233, 36, 34,172, 44, 99,101, 43, 99, 54, 86,136,143,134,253, 41,137,212,220, 88,195, 30, 65,222,107,209,130,237, 50,113,126,232,
+190, 78, 40, 9,201,144,145,249,176, 99,198, 21, 86,125, 49, 0, 0, 32, 0, 73, 68, 65, 84,251, 91,158,122, 26, 95,253,234,151,
+129,156, 48, 47, 71,126, 95, 41,139,206,160,137, 4, 53,172,111, 35, 62, 33,159,129, 12, 0,181,245, 64,107,221,241,157,244,134,
+ 87, 30, 20,206,174, 62,113,161, 50, 89,235, 48,237,118, 72, 41,225, 52, 31, 57,213, 65, 22,145,149,192, 22, 12, 15,247,249,116,
+196, 40, 94,100,103,199,158,168, 22, 83, 16, 74, 30,215, 66, 45,145,173,202,164, 40,165, 36,154, 16,133, 42,251,175,113, 63,241,
+243,168, 44,120,148,209,216,239,246, 56, 29,143,168, 40,152,231,211, 38, 20, 70, 73,174,177,238,234,235, 54,174,223, 10,219, 46,
+ 23,157, 29,161,185, 33,229,217,193,173,121,224, 66,179,107, 63,123,223,251,109, 80,152,107, 32, 81,211,122,180, 83, 73, 49, 96,
+201, 90, 12,211,116, 97, 39,238,172, 19, 79,125, 35,208, 17,192,116,118,229, 10,253,205, 41,194, 40,141,249, 52,195, 15, 30, 65,
+138,178, 6, 19,105, 33, 60, 57,167,190,223,238,171, 24, 41, 60, 46,248,117, 27, 85,171,214, 53, 63, 33,165, 30,233,220,118,208,
+222,121, 24,203,130,154, 74,107, 43,251,244,212,167, 62, 20,135, 81,121,222, 14,231, 62,101,178,174,191,191,218,104, 28,143, 39,
+177,170,105, 9, 94, 75,162, 76, 86,253,172,113,222, 35,198, 4,239, 70,174, 21, 74, 20, 65,176,134,145,181, 86,138,129, 54,188,
+156, 55, 42,110, 89, 1, 58, 43,235, 46,153, 34, 20,116,129,156, 17,151,144,113,174,187, 5,170,236,241,161,180, 92, 26,178,194,
+232,249,245,166,235, 38,170,230, 5,168, 4, 9, 92, 43,136,125, 45, 69,172, 82,194, 15, 23,209,100, 45,205, 42, 91,123,129,234,
+156, 67,236, 65, 36, 70, 72,113, 10, 41, 50,215,124,144, 2, 45,151, 4,163,201, 82, 72, 57, 83,197, 47,234,121, 37, 26,146,152,
+ 9, 67,242,195,216,211,211,172,117,130,160, 21,239,121, 76,244,244,215, 66,246,188, 60,223, 77,148,198,227,153,107, 53,107, 12,
+ 80,133, 8,231, 38,100,209, 80, 89,103,225, 29,239,154,208,172,146, 37, 35,135, 32,157, 41,255,220,109,194,148, 82, 20,253, 15,
+241,215, 85, 70,228,235, 4, 4,189,160,175,141,236,153,137, 31,246, 98, 41,174,138, 14, 16,171, 13,210,194,149, 2, 41,131,156,
+193,242, 44, 93, 11,139, 42, 32, 35,163,109,207, 22, 73,178, 26, 78, 41,195, 72,135,238,198,161, 71, 57,231, 24, 80, 82,146,239,
+ 16, 88, 78, 7,209, 49,240,166, 26, 26,101, 79,107,174,121, 50,127, 95, 37,154, 19, 37, 69,114, 19,125, 38,129, 51,141,227,196,
+ 16, 29, 41,172,212,173,103,223, 86,219, 94, 55, 73,240, 67, 69,197,233,252, 1,142, 15,238, 51, 62, 78,118,165,109, 7,209,226,
+ 70, 87, 56,127,185,176,103,116,110,144, 78, 67,144,119,165,116,122, 78, 5,129, 10, 90,226, 27, 75,201,240,206,203, 14, 18, 29,
+ 15,120,182,187, 34, 68,182, 69, 72,108,102,173,220, 68,220,209, 68, 14,198,174, 1, 27, 68,231,101,148, 34,226,154, 84,122,182,
+ 46, 3, 26,110, 48, 65, 73, 70, 59,205,151,143,186, 85, 22,170,174, 52,188,115,251,203,156, 98, 84, 92, 40, 82, 30, 37, 62,195,
+102,135,165,141,140, 93, 83, 35,191,217,254,249,246, 17,173, 8, 96,144,219,202,129,201, 78,168,188,228, 74,230, 62,136,130,148,
+149,176,212,246,237,151, 83,234,182,232, 80,173, 47,138, 43,154, 7,124,221, 97,173,201,105,169,172,216,208, 54,138, 30,220, 78,
+ 38, 4, 28,139, 95,185,122, 13,198, 58,132, 48,227,225,221,215,101, 66, 83, 36, 83,120, 45,112,116,223,149,149, 46, 78,106, 23,
+245,101, 20,239,234, 67, 93,189,190,198, 83,160,167, 97,251, 63, 99, 5,254, 80,106, 69, 92,150,149,188,167,106,207, 32,176,218,
+ 97,153, 79, 40, 53, 97,218, 77,208,202, 81, 20,150,105,155,108, 10, 90, 35, 93, 30,197, 79, 65, 68, 38, 44,112, 56, 78,172,189,
+139,107,170,254, 97, 28, 48,238,246, 72,115, 98,135,129,184, 10,214,186,237, 81,148,244,169, 92,208, 87,104,249,141,183, 34,186,
+ 11,176,155, 46, 82,148, 75,209,153,238,164,104,123,180,230,107, 85, 93,180, 86,251,127,238, 30,112,153, 24, 52,112,142,209, 76,
+150,170, 10,112,195, 8, 39, 42,245,182,143, 44, 0,134,113,132,183,182,119,124,203,105,238,106,247,101, 89,250, 74, 66,107, 22,
+102, 45,232,162, 23,132, 82, 96, 48, 92,194,247, 16, 14,215, 59,249, 36, 29,132,234,207, 30,215, 93, 50, 37,176, 43,175, 29,218,
+200,218,105,145,139,223,246,216,216,214, 73,182,132,185, 90, 19, 14,135,115,201, 75,160,115,231, 32,225, 36, 94,144,203,198, 58,
+212, 34, 14, 4,180,213, 64,233, 10,241,134, 27,229,207,149, 68, 69, 47, 75,180, 66,225,231,106,113, 37,195,161,233, 83, 90,177,
+188,205, 13,168,138,186,148,102,109,106,159, 17, 15,101,234, 11,106,229,207,106,133, 15, 65, 61, 66,238,107, 33, 6,167, 8, 81,
+ 80, 75,174,142, 92, 30,181, 84, 89,105, 82,107,145, 36, 88, 36,151, 40,206, 10, 45,103,134,216,218,114,193, 56, 78,156, 42,201,
+103, 7, 5,129,188,208,251, 93, 11,137,112,103, 87,174,224,112,184,143, 82, 8,138, 9, 37, 99,127,182,199,114, 56,137,162, 61,
+ 9, 95,220,139, 62, 97,129, 82, 44, 76,180, 29, 36,168,138, 66,180,184, 4,168, 10,236,247,123,132,146,186,216,177, 79, 4,141,
+ 37,111, 65,161, 67,170,160, 20, 6, 63, 74, 67,146, 48,203,122,182,105,123, 80, 27,200,138,147,210, 6, 15,107,186,149, 36, 81,
+208,109,122, 97,156,199,178,204,208,146,123,209, 26,144,246, 44,110, 89, 32,132,218,176, 51,231,250, 53, 74,120,146, 70,205,122,
+ 19,199,172,197,138,236, 37, 36,166,246, 56,214,182, 26, 8,139,248,233,165, 49,110, 83,166, 22,241, 76,217,140,176,246, 43,159,
+ 85, 32,119,171,179,179, 3, 74,201, 72, 89, 28, 12, 5, 93, 12,153, 82,236,129, 87,237,204,131, 96,172, 27,156,170,189,139,234,
+217,119,124, 75, 37, 38,180, 81,128, 34, 78,231, 15,241,224,222,235, 60,240,172,185,232, 3,175,107,151,145, 83,234,226,161,210,
+108, 20,114,232,140,195,212,187,110,235,156,164,209, 68, 84, 85, 37, 40,190,118,225,152, 31,124,183,207,113,135,174,161,140, 21,
+ 37,173,234,126,227,134,127, 45, 49, 95,220, 39,202,232,147, 21, 91,129, 31, 60,131, 70, 20,224, 68, 65, 57, 12, 35,140, 27, 81,
+123,199,230,187,221, 71, 3, 66, 31,138, 80,224,206,109, 29,119,134, 62,118,111, 66,148,203,202,235,173, 87, 82, 43,242,166,171,
+ 20, 57,164, 65,149, 11,187,246, 78, 75,106, 23,177,236,228,253, 48, 66,203,168,149, 96, 26, 67, 31,170,216,197,122, 10,156,252,
+247,166,190,221,254, 60,219, 81,239, 86,136,178,189, 84, 47, 96, 81, 53,163, 35, 91,193,214,162, 22,107,134,168,111, 19, 98,100,
+ 16,132,115, 3, 73, 88, 98, 95, 10,241,196, 3,127, 9,107,202, 89,251, 25,101,231,104,141,237,197, 87,247, 86,111, 70,210, 23,
+ 68,111,138, 47,153,181,236,194,169,128, 93,161, 21,228,174,107,248, 97, 32, 30,179,169, 82, 81,112, 60, 60, 4,114, 65,201, 17,
+128,198, 56,237, 96,172,197, 60, 31,251,231,221,124,217,109,215,168,196,179,156,114,146,110,142, 47, 35, 11,216, 53,169, 46,151,
+ 12,231,104,219, 33, 4,130,223, 89, 20, 60,114, 19,207, 25,109, 16,150, 0,239, 28,146,240,162, 91,166, 55, 47, 92,211, 47,248,
+203,211, 19,165, 20,220,224, 97,108, 27, 17,166, 46,184,105, 74,221,245,251, 46,111,134,197,232,149,209,111,140, 65, 73,244,163,
+107,205,116,180,155,183,222, 2, 63,120, 28,143, 71, 88,109,112,229,218, 85,148, 90,112, 58,112, 34,180, 44, 51,106,202, 18,122,
+ 4,217,201,243, 2,143,153,147,140,126, 49,200, 37,207,238, 95,138, 12, 41,208,138, 28,184, 45, 22,210,138,183,188,105, 72,170,
+228, 26,240,153, 34, 38,180, 36,134,172,164,148,160,219, 97,105, 27,177, 78,116, 50, 21,112,214, 80,200,213,100, 79, 2,254,112,
+206, 33,134,136,113, 26, 55, 57,247,164,251, 53,194,225,210,246,251, 50,109,107,227, 86,116, 6,186,145, 75, 38,194, 57,139, 20,
+179,240, 46, 12,147,243, 4, 41,154,115,233,171,193,178, 65,189,150,218, 50,192, 77, 23, 14,119,145,154, 18,228,175,230,190,187,
+217,171, 80, 11,180, 93, 39, 27,212,161, 24,122,206,107,233,127, 62, 85, 57,114, 46, 85,245,253,113,127,102,188,164,225, 25,219,
+ 39, 96, 81,210,223, 32,159, 67,179,138, 86,168,158,172,150, 18,215, 44,200,228,218, 3, 92, 9,104,239, 96,157, 71,145, 14,216,
+ 24,254,121, 0,230,150, 91,239,153,106, 38,103, 84,206, 65,236,142, 21, 86,214,101,200, 60,219,236,224,165, 80,110,137,102, 22,
+206, 13,194,161,151,243,222,112,226,210,190,183,146, 73,199, 35,150, 86,206,176,192,201,140, 86, 43,156,166, 54,135,142,162,144,
+ 81, 67, 73,108, 44, 16,115,192, 52, 78,176,110, 90,211,227, 74, 21,247, 76,236,122, 39,191, 17, 11,194, 26,198,214, 22, 48, 25,
+ 79, 10, 18, 99, 12,170, 20,165, 41,208, 37, 97, 68, 7,181,125,247,120, 89,103,228, 84, 72,131, 19,213,125,142,153,207,157, 76,
+ 59,140,184, 92, 74,201,112,227,142,233,109,137, 26, 2,239,184,226, 41,114,110, 55, 87, 73,227, 93,212,146,161,176,174,183,147,
+172, 13,156,117,176,195,192, 70, 55,132, 21, 62,211, 4, 48, 37, 71,220,187,115,187,115,196, 97,214,142, 69, 27,241,225, 98,141,
+208,107,112,130, 90,215,241,160,151, 93, 58,215, 25, 78,188,145,179,136, 15,208, 15, 31,170,228,125,143, 39,108,123,222,182,139,
+109,149,248,170, 20, 68,127,153,120, 33, 25,201,168,165,112,203, 26,122,207, 89,153,154, 46, 38, 73, 41,195,251, 17, 80,236, 40,
+248, 96, 38,156, 36, 66, 16,194,210, 54,114,129,244,253,108,173, 72,113,126,211,165,249,168,144, 12,102, 37,243, 66,111,194,133,
+246,123,183,137, 69,231,182, 54, 43, 92,189, 84, 32,136,208,100,187, 39,225,197,154,145, 99,238,126,204, 14,134,137,249,194,239,
+127,249, 98,223, 94, 30,125, 45,112, 25,212,211,166, 10,114, 41,121, 55, 94,216, 79,230, 18, 68, 20,167, 49, 14,211, 5,123,216,
+188, 28,145, 11, 5, 70, 45,129,173,237,243,183, 97, 11,173, 19,127, 36, 40,104,219,241,200, 5, 57,141,103,235,207, 15, 48,201,
+ 76,190, 87,231, 28, 32,200, 89,109, 40,166,172, 37,224,120,126,191, 43, 89, 21, 92,191,200,157,116,162, 80,181, 13, 65, 36, 72,
+163, 72,242, 26,167, 71, 73,196, 52,173, 99,110,156,129, 22,210,210,138, 72, 22, 38,188,228,202,134,114,215,138, 75,242, 8, 56,
+ 62,235, 57,235,242,188,199, 16, 59,100, 98,187, 91,111,207,184, 29, 7,236,175,220,228,255, 62, 6,132,101,134,177, 26,203, 50,
+119,112, 5, 19,182,226, 70, 76,186, 22, 99,109, 52,217,104, 88,131, 31,112, 58, 29, 97,180,197,120,245, 58,166,105,183,118,120,
+ 98, 47,107,201,103,218,232,222, 21,199, 16,186, 24,117, 24,134,110,157,105,207,133, 49, 90,128, 44, 25,187,253, 94,186,111,153,
+ 16, 24, 43,254,118, 2,131,180,214, 80,226,214, 80,214, 96, 89,150, 21,102, 35, 34,210,150,162,198,159,137, 1, 21,222, 79,125,
+218,227, 28, 63,211, 52,179,115, 84,150, 23, 24, 59,230,210,199,164, 90,107, 56,205, 34, 82, 91,131,249, 2,172,165, 34, 45, 81,
+194,114,108,159,110, 40,173, 9, 0, 42, 44,162,243, 38,235,189, 21, 42, 73, 40,130,252,204,141, 48,232, 83, 15,214,105,135, 63,
+191, 8,211, 61,199, 4, 92, 5,226,111,141, 33,249,185,182,238,187, 37, 65,182,213, 13, 58, 29,112,157,106, 66,252,238, 78,206,
+ 23, 35,171,165,181, 56,136, 41,117,151, 71,251, 61,155,192,182,237,161,235,230,231,105,239, 99,215,151, 56,139,229, 52,163,166,
+ 40,142, 8, 78, 77,131,168,203, 73, 95,100,163, 68,142, 6,159,229,198,165,112,158, 41,119, 41,134, 46,142,205, 33,118, 61, 68,
+115,233, 88,107, 37, 60, 74, 38,135,210,237,210, 60,193,226,179, 69,229, 78, 59, 22,228,198, 88, 60,184,123, 15, 41, 46, 44,188,
+156, 21, 54,131,129, 49, 30, 86,236,105, 78, 86,126, 77,191, 21, 3, 87,189,214,177, 64,174, 0,134, 97, 64, 92,102,132,176,136,
+ 80, 78, 67,149, 36, 19, 57, 2,177,154,190,105,203, 39,104, 13, 93,148, 34,181, 61,143,169, 93,186, 13, 50, 85,139, 92,191, 0,
+ 52, 73,122, 41,156,164, 96,209, 29, 9,222,206, 23, 40, 5, 59,122,104, 77,231, 80, 56, 29, 55,172, 8,121,238,228,242,215, 82,
+100, 91,107, 49, 31,169, 55,104,194, 82,103, 56,209,140, 18,206,147, 98,132,209,198,252, 74, 78, 17, 41, 69,204,199, 3, 30,222,
+123,227,130, 98, 58,203, 88, 26, 34, 30,115, 27,240, 70,219,143,117, 21,178, 68,100, 86, 40, 56, 71, 18, 93, 59,220, 82, 73, 61,
+111,218,180, 93, 99,167, 34,229,222,141,109, 1, 28, 91,145, 69,201,220,155, 53, 75, 79,219,149,112,119,187,141,207, 92, 21,247,
+109,255,200,253, 43,119, 94, 57, 69,156,206, 15,194, 36, 23,203, 74, 23,100,172, 48,131, 53,230,179, 92,232,106, 47,199,189,182,
+223,151, 65, 31,237,129,211,155, 11, 84, 93,240,107,182, 95,163,217,120, 46,255,122,140, 55, 85, 61,185,173, 49, 3,154,103,153,
+162,168,218, 57,229, 95, 43,130,244,107,198,209,110,138,145, 62, 70, 85,144,233, 2, 21,152,219,191, 47,196, 69,242,166,253, 40,
+135,105,171,118,153, 25, 77, 31,101, 90, 5,115, 27, 5,231,215,179,160, 93, 22,146,105, 77, 8, 75,201,181,119,210,181,174,217,
+246,237,197, 77,145,118, 51,141,214,105,101,234, 30,178,144,236,166, 29,173, 40,206,242, 34,149, 93,122,169, 25,203, 18, 86,122,
+ 84,161, 14, 35,181, 29,187, 96, 58,183,122,131, 82, 75, 23,221,172,130, 47,238,113,171, 88,237,218,225,174,181,233,126,228,118,
+105,133, 6,129,169,196,227, 54,199,198,246, 89,178, 34,148,212,214,162,130, 26,145,154,139, 8,158, 12, 35, 72,229,192, 48,158,
+129, 28, 70, 34, 70, 25, 58, 99,228,192,169,253,215,214,146, 7, 62,236,118, 44, 70, 12, 47,167, 24,151,190,255,204,145,151,170,
+ 31,135,158,151,157,230, 19,211,251, 98,160,152,104, 62, 33, 71, 78,177,226,178, 64,213,130,148, 55, 17,168,169, 77, 54,100, 50,
+ 37, 69, 74,142, 17,113,158,225,186, 74,186,160, 0, 24, 5, 84,213,176,172, 85, 38, 99, 80, 26,211, 52,193,137,162,185,233, 17,
+198,105,236,140,236, 34,222,236,227,241,128,154, 51,126,249, 23,126, 14,127,245, 91,191, 21,239,125,207,123,240,157,239,126, 55,
+118,187, 61,190,240,133, 47, 72,115,194, 29,110,227,104,240,194, 89,129, 85,125,149, 85, 50,254,235,127,252,147,248,212,167,127,
+135, 89,244,226, 76,105, 56,213,102,107,180, 13, 19, 28, 24,122,162,141,238,209,156,206,218,126, 46, 61,251,236,115,248,216,139,
+ 63,140,247,191,239,187,241,194, 11,223,129,119,189,243,157,120,237,206,107,120,253,245, 55,160,149, 17,152,138,129,159,168, 4,
+247,214, 74, 46,187,238,162,200,113,183, 35, 29, 82,136, 81,186, 5,179,148,132,113,183,147, 98,118,141,130, 86, 90,227,159,255,
+210, 47,224,214,173,199,241,167,127,246, 89, 84,195, 48,157, 2,133, 23,255,246, 15,226,199, 94,252,219,248,215,159,248, 4,146,
+124,134,168,133, 66,191, 24,113,154, 15,114,161, 19, 24, 53,207,179,136,189, 42,172, 54,248,135,255,229,127,129,127,243, 7,191,
+143, 42,186,134, 34,247,193, 48,208,101, 80, 50, 47, 59, 55,120, 65, 89, 20,209,128,212,238,151,111,137,117, 78, 70,255,222,211,
+ 89,176,219,159, 97,127,229, 58,198,105,194,184, 63,195, 56,237,224,134,177,187, 40, 82,140, 34,206, 95,215,117,196,113, 83,232,
+154,164,176,162,112, 16,132, 89,149, 36,218,135, 32,113,165, 17, 94, 38,158, 49,101,252,212,127,245,143,240,103,159,253,115,121,
+119, 87, 59,109,109, 33, 87,160, 86,228,195, 31,252, 16,190,248,197, 47,110, 38,122,186,219,127,219,197,254, 75,191,248,243,248,
+196,111,127,146,103, 80,229,251, 83, 74,133,129, 33,198, 87,181, 6, 78,139,235,166,133, 70, 25, 12,187, 51, 64,236,126, 78,166,
+ 4,185, 50, 5,206,122, 98,146,189,183, 29, 2, 71,235, 45, 25, 2,222,123,248,105, 15,109,157, 56,104, 82,215, 84, 25,173, 97,
+231,227, 67, 40, 24, 25, 29, 68,241,228,110,186,208,110,223,169,146,243, 92, 31,169,222,109,192,141,237,190,180,237,208,114,206,
+112,134, 42, 87, 63,120, 34,251,138,228,184, 87, 72,167,151, 47,176,211,217,233, 42, 25,235,231,238, 47, 69, 89,189,222,173,243,
+ 87, 86, 95, 8,192,128,110,132, 76,217, 55, 68,114,125,115,225, 5,105,189, 70, 42, 17, 70, 57,120, 71, 54,177,241, 14, 74, 87,
+ 44,167, 19,106, 99, 27,215, 40,232,212,244,166, 11,106,123, 49, 89, 25,183,179,154, 34, 78,177,141, 67,173, 93,189,200,141,204,
+ 7,185, 68, 59,188,164,118,118, 33,253,193,122,221,183,106,165, 41, 52, 51,172,102,149,140, 12,183,251,242, 71,197,102,118,191,
+253,230,130,223, 78, 12,182, 23,119,150,200, 87,219,220, 0, 90, 99, 24, 7,132,249, 8, 20, 5, 59,140,176,222, 97, 14, 75, 63,
+116,123, 87,219,188,192, 13,124, 34,235,129, 54,110,250, 90,121,231, 23, 34, 67,183,246,188,170, 80, 16, 80,161,123,230,120,205,
+220, 57,230,154,137,171, 69,155,100, 44, 80, 18, 66,209, 70,211,252, 12, 79, 80, 3,119,188,110,114,200, 57,225, 52, 31, 40,158,
+105, 34, 74,137, 48,108, 42,235,186,101, 72, 2, 24, 68, 68,217,186,223,214,109,176, 99,178, 80, 8,236, 80, 27, 92, 35, 87, 84,
+ 85, 16, 37,253,203,120, 15, 63, 77, 24,167,137,226,186,196,239,178, 90,181, 10, 43, 55,138,100,109, 53,114, 8, 40, 81,192, 25,
+149,241,197,165,174, 93, 96,155, 20,104, 59,245,149,202,178, 44, 93, 27,209,188,194,107, 17, 46, 69,142,247, 56, 29,143,208, 69,
+244, 48,142,159, 9, 11,143, 5,167,123,231, 80, 80, 24, 6,223,147,173,170, 60,215,170,135,125,104, 40, 72,164,110,179, 7, 74,
+252,227,114,154, 87,124,116, 62, 33, 73,129,228, 7, 17, 9,201,175, 83, 82,133, 82, 22, 57, 19,140, 83, 82,130,202, 9,147, 31,
+160, 0,156, 30,220,103,119,149, 18,252,110, 66,200, 11,226,195, 83,183, 34, 41, 99,196, 38,199, 40, 87, 0,248,213,127,241,191,
+113,229, 0,141, 31,255,248,143,226, 61,239,254, 14,124,250,119, 63, 77,122,227,124, 18, 54,115,243,199, 43, 24,227,160, 75, 4,
+ 52,245, 45, 37,103,252,143,191,250, 63,201,180,128, 28,245,246, 16, 88,241,144,103,137, 49,181,218, 96,244, 59,209, 27,112, 36,
+ 74,225, 30,195, 79,158,121,250, 25,124,252, 71,127, 4,255,199,191,250, 63,241,210,151,190,136, 24, 23, 60,255,252,243,248,241,
+143,255, 56,254,213,175,253, 26, 94,190,253,154,248,243,141,196,149, 70, 44,243, 81,236,109,121, 13, 38, 89, 66, 87,105, 59,231,
+176,196,163,228,113,187,206, 67, 72, 41,194, 58,122,198,219, 91,246,204, 51, 79,195,123, 22,178,121,166,182,225,185,103,158,234,
+ 46,134, 90, 51,146,112, 37, 96, 60,236,224,144, 79, 89,232,128, 22,195,180,195,168, 64, 42,156, 64,121,254,231,255,229,127, 69,
+ 65,225,190,190, 64,172,132, 9,167,153, 78,144, 97,164, 53, 56, 71,242,242,149,161, 48,179, 69,173,114, 82,233,186,166,162,166,
+ 68,116,179,241,124, 62,132, 8, 90, 98, 64, 12,129, 34,189,193,203, 88,219,194, 24,141,105,127, 13,203,249, 57, 82, 78,152,207,
+207,249,243, 9, 63,192, 96,128,170, 26, 41, 22,212,148,168,151, 82,149,161, 96,169,192,160, 34,156,102, 58, 73, 42,240,171,255,
+226,127,103,234, 93, 73,240,126, 64, 81,109,212,157,164, 97,201, 48, 90,225,131, 31,124, 31,126,227, 55,127,179, 35,199, 21,128,
+176, 68,152,129,110,135,216, 45,161, 65,120, 30,182, 79, 68,180, 53,236,133, 20, 4, 11,172, 40,118,107, 76,139,148, 86,226, 97,
+ 60,225,225,233, 62, 74, 6,140,182,208,131, 66, 60,158,195,218, 1, 49,202, 68, 71,166,168, 41, 37, 40,195,223, 91, 69, 2,164,
+ 98, 27,235,107,141,227,249, 57,255,243,238,234,245, 95,177, 27,101,231,163, 58,186,109,119,249,168,236,101,117, 9,180, 81, 11,
+250, 14, 46, 37,142,240,154,234,217, 15, 14, 49,132,181,122,111, 20,156, 75, 2,162, 70, 61,106, 79,108,145, 7,115,139,103,189,
+172, 52,215, 27, 79, 96, 69, 69, 76,177, 31,160,205, 70,182,138,250,184,183, 12, 97, 97, 71, 18,230, 30,116,176,178,135, 73,221,
+186,124,249, 92,190, 40,171, 28,184, 13, 50,161, 85,171,234,146, 8,168,248,165,172,177,158,146, 47,222,149,148,184,144,107,221,
+246,203, 73, 84,189,109, 20,212, 46,152,254,121,151, 55,231,193, 95,254,249, 90,129,117,193,255,120,105,202,208,160, 58,106, 19,
+163,219, 4, 69, 69,172, 29, 41,240,179, 76, 49, 82,252, 97,214, 40, 82,165, 20,252,224, 24,242, 98,152, 90,117,217,210,243,245,
+130, 87,182,251,245, 30, 63, 41,159, 63, 47,180, 13,103,189, 81,159,186,195, 65, 34, 89,229,114, 86,130, 84,204,133, 10,212,222,
+ 29, 67,161,208,105,218, 69, 94,218,240,217,217,157,237,101,164, 69,161,208,197,119,160, 72,113,102, 68,149,221,236,108,101, 99,
+251, 83,221,161, 81,213,170,142,205, 49,178, 11,149,240,139,254, 86,151,122,129,235,223, 44, 73, 44, 12,185,115,107,107, 41, 37,
+126,116, 99,109, 87, 46, 55,244,101, 73, 73, 72,139, 84, 84, 55, 17, 87,195,244, 54, 0, 81, 16,251, 30, 90,252,174,116,158,235,
+ 84,162,192, 40, 30, 80,109,172,107, 44,245, 1,171, 98,221,136,147, 33,174,129, 68,151,166, 77, 41, 37,184, 97,130, 49, 22,126,
+ 28,168,106,175, 43,200,169, 42, 77,241, 92, 92,196,167, 78, 66, 99, 59,204,183,172,137, 16, 23,118,147, 41, 73,216, 72,238,129,
+ 72,218,112,124,251,225, 15,125, 8,191,254,235,191,209, 11,226, 87, 95,123, 13,223,251,189,223,131,207,252,254,103,240, 75,255,
+195, 47,226,183, 63,241,219,114,137, 90,252,242, 47,254, 60,126,235, 55,255, 53,114, 74,248,249,159,251, 89, 44,243,130, 31,121,
+241, 99,248,195, 63,248, 67,252,243, 95,254,101,252,250,111,252,223,184,245,248, 45,252,253,159,248,123,248,192,251, 63,128, 15,
+127,240, 67,112,206,227,165, 47,189, 4,165,128,159,255,217,159,131,247, 30, 63,240,253, 31,193,135, 63,252, 65,164,156,113,251,
+246,171, 66,110,244, 72, 49,227,197, 23, 95,196, 39,127,231, 83,248,236,103, 63, 71, 65,152,182,152,151,136, 7,231,231,120,247,
+ 11, 47,224,223,254,209, 31,225, 23,254,217,127,135,253,110,135, 15,189,255,187,241,109,239,122, 23,190,252,242, 87, 80,114,193,
+199,127,228, 69,124,248, 67, 31,192, 11, 47,124, 7,238,190,113, 23,247, 31, 60,128, 2,240,207,126,230,159,194, 57,143, 31,252,
+ 91, 31,197, 7,222,255, 62, 44, 75,192, 43,183,111,195,239, 38, 78, 51,100,106,240,254,247,126, 23,254,221, 31,255, 49,206,246,
+103,184,253,202,109,148, 90,241,237,127,253,175,225,252,112,142,167,159,122, 10,159,248,212,167, 48, 12, 19, 62,246,195, 63,132,
+143,124,239,223,196,123, 94,248, 14, 60,241,196, 45,124,238,179,159,199,199,127,244, 99,176,214,225,229,175,222, 70, 10, 51,254,
+193,127,254,247,241,210, 75, 47, 97, 62,205,248,197, 95,248,239,241,137, 79,125, 6,187,253, 30, 63,246,195, 63,132,247,189,247,
+ 59,241,194,223,248,118, 28,231,128,243,227, 76, 85,252,188, 32,151, 36, 12, 2, 32, 71,222, 37,203,178,240,121, 73, 9, 47,254,
+224, 71, 81,115,198,237,151, 95,198,123,222,253, 55,240, 3,127,243,123,240,201, 79,126, 18,113,153,241,211,255,228, 39,241,204,
+ 51, 79, 67, 1,120,120,254, 16,223,249,238, 23,240,183,190,255, 35,248,244,239,124, 10,181, 20,252, 55,255,248, 31,225,185,231,
+158,133, 54, 6,175,188,250, 26,222,247,222,247,226, 99, 63,252, 67,248,204,239,126, 6,126, 24,241,211, 63,245, 79,240,153,223,
+251, 55,253,206, 56, 59,219,227,239,124,252,199,240,190,239,254, 46,188,231,221, 47,224,171,175,220,198,253,123,247,160,180,198,
+ 47,253,252,207,224,147,191,251,123,176,222,226,191,253,233,159,194, 48,120,124,244, 35,223,135, 15,189,255,253, 8, 75,192,235,
+119,239,225, 39,255,225, 63,192,217,217, 30,127,245, 63,251, 54,188,252,202,109,124,244,251, 63,130, 15,188,255,125,248,174,247,
+188, 7,247, 31, 62,196,157,215, 95, 71,138, 9, 31,254,208, 7,241, 27,191,245, 91,221,145,160, 0,236,246,123,252,224, 71,191,
+ 31, 31,249,222,239,193,119,190,240, 2,158,121,203, 83,248,252,231, 62,143,156, 50,126,246,103,254, 41, 66, 12,248,209,143,189,
+136,207,127,238,115,248, 59, 63,250, 49,188,247,187,190, 19, 55,111,222,196, 79,252,221,191,139,223,254,196,239, 32, 37, 6, 7,
+229, 84, 16, 75, 20,206,254,122, 30,181, 48,178, 6, 20,202,226,248,202,249,255,105,236, 76,159, 45,171,206,243,254,172,113,239,
+115,110,247,109, 36,134,238, 6, 97,232, 9, 73, 6, 33, 71, 88, 3, 2,154, 73, 72, 66,178,173,146,227,184,236, 36,114, 92,113,
+ 20, 89,137,243, 7,164, 42,149,207, 73, 85, 62,197, 54, 66, 8, 13,209, 16, 59,138, 36, 16, 66,102,176,100, 97,155, 18,118, 89,
+ 52, 13, 52,160,110, 26,232, 6,122,138, 26,163,190,125,239, 61,123, 88, 67, 62,188,239,187,246,190,167, 79, 43, 81, 21, 85, 8,
+154, 59,156,179,207, 90,239,240, 60,191, 39, 98, 50,161,207,158, 86,124,152, 16,174,116, 35,110, 21,231,249,255,243,118,149,161,
+203,226,181, 82,138, 92,165,117,208, 6,104,186,117, 22, 7, 36,204,214,215, 25,211,199,124,108, 71,225, 33,134,171,226, 50, 70,
+112,188,231, 96,242,146,181,166,100,120, 43,163,139,111, 92, 72, 97, 37, 80, 68, 48,143, 33,209,207,163,201,151, 75,214,168, 9,
+171,103,199, 64, 8,182,120,141,212,216,146, 7,109,141, 31,112,176,252,179, 26,103,225, 42, 79, 81,147, 60, 54, 41,185,182, 80,
+240,174, 70, 93, 79,105, 28, 42,118, 54,134, 62,132,142,152,194,226, 9, 70, 42,211,253,115, 10,169,200, 17,132, 98,101,145, 34,
+192, 89, 82,225,138,130,254, 23, 93,232,106,206, 94, 52, 63, 97,152,103, 47,147,106,152,246, 90,109,187,206, 97, 3, 1,109, 59,
+ 35,194, 90,234,161, 77,134,210, 9,109, 55, 67,136, 29,123,105, 21,172,246,204,180,119,164,226,255,127, 92,224,139,132,114, 27,
+126,238,192,206,129,130, 91,165, 9,142,176,160,181, 48,203,249, 89,178,158, 70,204,153, 33, 17, 57, 13, 42,217,152, 34,225, 96,
+197,225,192, 69, 76,100,136, 10, 69, 54, 78, 97,172,161, 20, 46,102,127,199, 72,212,180,190,239,209, 52, 45,154,102, 70, 35, 54,
+241, 92, 11, 84,194,210,168, 95,241, 94, 90, 94, 87,217, 9,147,101, 38,151,238, 78,113, 49, 65,207, 62, 1,129,104,135,168,137,
+ 88,101, 8,182,212,199,182, 8,123,114, 74, 72,161, 71,232, 26,164,182,135, 77, 84,112, 26, 69,241,139,154,227, 50, 13, 11,149,
+ 42,231,224,140, 97,210,155, 46,226, 30, 99,104, 52,152,250,128,174,233,216,254,100,145,161, 97,108,133,106,186, 4,227, 43,134,
+200, 80, 74, 33,165,200, 25,248,201, 20,182,158, 64, 57, 15, 88, 7, 87, 79,224, 38, 83, 44,109,217,130,233,230, 77,168, 39, 19,
+122,238, 51,117,153,237,172,129, 85, 6,134,121,218, 86,101,232,156, 10, 54, 86,105,141,164,193,142,135, 0,101,128,182, 91,135,
+117,154,227, 42,105, 28, 29,216,149,208,245, 13, 21, 52,177, 67, 74, 28,229,105,128,156, 3, 66,236,112,252,196, 49,108, 89, 94,
+166,221,249,136,220, 39,187, 80, 24,250,203,123,143,205,155,151,113,215,221,119, 83,246, 56, 51, 19,110,188,225, 70, 60,249,228,
+ 62,252,233,231,238,198,255,254,214,183,177,247,166,155,160,148,133, 82, 4, 75, 90, 57,187,130, 63,189,235,110,124,245,235,127,
+134, 91,110,222, 91,244, 63,194, 76,184,252,109,151,225,208,161, 67,136,169, 71,211,172,163,239, 27,172,173,173,224,192,179,207,
+226,109,151, 93, 10, 1,182,158, 56,126, 28,119,221,125, 15,246, 63,189, 31, 55,223,120, 3,238,184,253, 22, 60,185,239, 41,124,
+233, 43, 95,195, 55,191,253,109,124,244,163,119,148,103,164,174,107,172,174,207,240,249, 47,126, 9,223,252,206,125,184,229,230,
+155,144,144, 48,107,214,145, 56,209, 79,166,111,251,159,126, 22,239,190,246, 26,192, 26, 84,211, 9,174,189,246, 93,120,238,224,
+225,242,249,187,243,195,119, 96,125,189,193, 61, 95,249, 26,238,253, 31, 95,199,108,214,224,227,191,118, 39,158,125,238, 5, 92,
+181,123, 7, 98, 55,195,150,229, 45, 48,218,224,196,137,147,104, 57,199, 60,180, 13, 62,180,247, 38, 60,245,204, 1,124,245,207,
+191,133, 71,126,248,215,184,253,230, 27,145, 98,164, 93,112,223, 33,181, 29, 92, 86,208,164,217, 67,202, 1, 90, 37, 24,157,161,
+ 84,196,139,135, 15, 97,215,206, 43,144, 16,112,217,165,219,161,141,194,210,196, 99,235,197, 23,227,196,201,147,120,254,133, 23,
+176, 99,199,149, 8,161,199,101,151,110,135,209, 26,155,183,108,198,101,219,183,225,248,137, 19, 56,240,220, 1, 92,241, 75,111,
+131,175, 60,174,188,242, 10, 24, 99,177,229,130,183,226,146,173, 23,227,228,201, 83,188,102,161,162,246, 29,239,120, 7,158, 61,
+240, 28, 62,119,247, 23,240,131, 31,252, 8,111,191,106, 15, 66,228, 73, 52,128,212,119,136,125, 64, 93, 85, 88, 59,187,142, 47,
+126,249,235,248, 95,223,190, 15,183,222,188, 23,214, 58,220,115,239,151,144,115,198,231,191,248,101,188,255, 87,223,131,159,236,
+219,143,123,191,242, 13,252,249,119,238,195,135,111,191, 13,198, 16,143, 67, 41,160,154, 76,144,149, 0,158, 52, 62,124,199,237,
+152, 53, 51,252,241, 93,159,195,127,255,227, 63,193,234,218, 42, 62,250,145, 59,144, 19,241, 16,150, 55, 47,227,158, 47,124, 17,
+183,222,178, 23,251,159,222,143, 63,185,235, 46,156, 60,245,127, 70,235,108,131, 4, 13, 55,169, 81, 89, 79,251,116,163, 73,172,
+ 26, 99,225,185, 20,232,152,175,160,173,135, 50, 22, 41,211,164,196, 14, 4,141, 1,252, 63,127, 8,143, 47,141, 34,248, 26,117,
+234,227,127, 38, 9, 89, 4, 83,233, 17, 69, 12,150, 68,188, 96, 17,218,126, 68,219,202,100, 63,201,172, 16,151, 49,170,236, 27,
+141, 45,241,152, 64,134,171,104,199, 17,250,192,233, 74,156,188, 36, 20,160, 12,116,161, 43, 16, 16,197,133, 0,197,144, 54, 3,
+194, 83,147,189, 66, 32,248, 66,174, 27, 44, 86,128,117, 21, 97, 17, 89,149, 29, 11,247, 88,109,152, 8, 8, 5,148,196, 16, 25,
+117,237,208,245,205,112,233,136,234,145,255,251,158,211,123,196,119,184,240, 66,102, 82, 29, 70, 26,130, 24, 34,178, 38,144, 77,
+138,233,188,118,182,249, 9,203, 60,140, 39, 45,200, 38,167,204,247,174, 36,176,137, 39,147, 70,242,185, 80,226, 60,227, 9, 99,
+ 14,112,222,242,127, 23, 10, 37,139, 68, 68,241,188, 24,215,115, 52, 4,162,154,159, 91, 13,200, 30, 49, 55, 27,109,114,153,129,
+ 28, 36, 78,202, 67, 2, 18,191,127, 42, 15,239, 43, 93,230,185,224, 92,181, 54, 37, 69, 48,100,178, 9,202,126,117,182,122,182,
+ 4,193,116,163, 52,170, 46,118, 76, 85, 76, 5,177, 58,168,217, 85, 41,184,168, 88, 76, 44, 48,213, 69, 40, 58, 88,248, 12, 39,
+ 63,129, 45, 64, 96,193,169, 20, 7, 64,232, 35,140,175,248, 67, 75, 10, 92,194,103,170, 98, 47, 19,193,141, 50, 6, 94,203,103,
+161, 47,171, 7,195,202,238, 28, 19,218,166, 41,241,198,145, 69,151, 33, 4, 42, 4, 52,101,132,183, 61, 5,222,200,190, 48,178,
+200,179,158,110, 98,161, 40, 91, 2,115, 70,219,206,120, 39, 40,170,246,140,118,214,161,239, 90, 26,225,242,104,177, 98, 29,141,
+210, 26,179,181,181,146, 47,144, 2,135,120,244, 25,109,163,138,167,189, 8,241,184,235, 88,159,173, 67, 3,232, 83,195, 1, 51,
+170,160,135, 5,131, 76,252,108, 86,251, 91, 82,165,139,222, 68,210,220,134,103, 93,166,115, 61, 3,125, 52,246,237,219,207,110,
+135, 84,252,229, 15, 60,240,125, 92,121,229, 21,184,241,134, 27,113,249,219, 46, 43, 52, 64,100, 42, 22,159,222,255, 44,170,170,
+194,217,179, 43,168,171, 10,211, 41,101, 86,200,129, 44, 1, 40, 58, 37,216,202, 22, 72,140,245,244,185,104, 27,178, 9, 62,123,
+224,121, 64, 41, 60,253,204, 1,220,126,235,173, 80, 74, 97,251,214,109,229,204,115,206,225,242,203, 47,199,169,211,111, 0, 0,
+158, 63,120, 8,198, 58, 28, 59,113, 2, 85, 69, 14, 20, 91,240,206,177,156, 93,111,188,249,143, 80, 74,227,130,229,101,102,134,
+ 0,199, 94,123,165,188,102,187,119,237,196,221, 95,248, 18, 86, 87,206,192, 26,131,199, 30,251,107,252,209,103, 63,131, 7, 31,
+126, 4,119,126,248, 14,108,222,188,140, 61,187,118,226,249, 23, 94, 64,229, 43,100, 94,113,108,222,188,140, 61,123,118, 99,251,
+165,219,203,117, 97,141,193,150,165, 9,142,159,249,121,177,147, 93,125,205,213,184,225,250, 15, 0, 0, 94,123,253,117,124,247,
+123,247, 83,113, 13,224,208,161, 67,216,123,211, 94,104,165,176,188,188, 25, 7, 14, 28,192,214,109, 91,113,209,133,151,224,208,
+193, 23,113,248,197,151,112,243, 77, 55,161,239, 58,108, 90, 90,194,179,207, 29,192,165,219,182,227,162,139, 46,196,193,131, 7,
+113,232,197,131,184,121,239, 94,204, 86,207, 98, 58,153,226,185,231,159,199,214, 75, 46,198, 37,151, 92,140,195,175,188, 12, 87,
+121,244, 45,233, 87, 94,125,245, 85,252,230, 39, 63,129,109, 91,183,226,232,209,163,120,236,241,199,137,183,192,175,191,202, 25,
+154, 33, 63, 79,238,219,135,190,235,113,236,117, 74, 8, 4, 50, 42,231, 10, 49,116,207,238,221,216,190,109,123, 33,201,121,231,
+112,201,133, 23,225,212,201, 83,101,213,232,172, 97,143,120,198, 85,123,246,224,115,247,220, 11,235, 42,100, 21,241,183,143, 63,
+129,255,240, 71,159,197,131, 15, 61, 10,173, 53,254,225, 31,126,130,148, 51,118,238,220,129,239, 63,242, 40,170,201, 38,252,244,
+208, 75,248,117, 86,146,197, 24,209,207,214, 80, 85, 53,173, 52,196, 30,103, 6,207,125,230,201, 30,229,103, 4,238,224, 3,122,
+150,163, 89,242, 40, 83,183,144,121,148, 44, 22,131,177, 90,122,124, 32,203, 67, 60, 62,184,199,130,167,177,218, 25,137,187, 73,
+ 77,120, 77, 93, 4, 39, 29,119,245,169, 68, 44,138,109, 12, 89, 49,207,118,128,111, 56,103,203,232,175,239, 3,152, 98, 80, 20,
+235,154,173,117, 5,251, 42, 99,124, 70, 77,134, 28,120, 4,136,162,154, 12,125, 40,157,105,217,199,142,212,221, 41,145, 82, 56,
+132, 8,228,190,216, 23, 40, 98,185, 31, 40,100, 25,136, 32, 81,157,115, 21,214,103,107, 12, 77, 80, 67, 80, 3,163, 27, 67, 8,
+ 32,158, 78, 42,138,213, 52,166,101,205, 9,217, 98, 74, 27,194, 1,148,210, 8, 41, 12, 86,144, 81,183, 62,252, 25,117,142, 96,
+ 78,207,165, 47,157,163, 62,215,138, 51,145,133, 87,221, 23, 26,222,240,223,170,193, 82,148,135, 76,238, 12,226,139, 91,199,248,
+ 83,171,145,146, 62,167,120, 88,180,255, 23,200,143,240,170, 69, 25,170,202,106, 34, 3,188,203, 83, 60, 86,202, 26, 27, 56,245,
+162, 72,103, 75, 41,211,160,116,185,196, 99, 26,168, 89, 57,101, 86, 26,107,234,158, 71,185,208, 41, 71,116, 44,118, 73, 41,163,
+207,116, 48,106, 14,119, 16,224,136,172, 2,250,209,106,166,120,241,249,235,143,197,118, 90,145,110,193,232, 1,242, 68,185, 7,
+ 20,189, 75,117,169, 8,137,104, 60, 78,212, 53, 33, 43,210,159, 55, 92, 12,128,223,171, 34,218,169, 42, 82,189,178, 93, 38,167,
+132, 54, 72, 58, 29,169,216,145, 51, 34,248,210, 1,225, 62,219,190, 37,209, 85,160,117,153,172,169, 50, 43,136,149,162,201, 72,
+232, 5,254,130, 34, 90,108,243,106,217,115,139, 16, 52,247, 1, 74, 73, 82, 23,189,111, 52,101,137,252, 62,164,226,152, 17,236,
+172,214, 44, 50, 10,125, 17, 19, 81,250, 89, 42,175,163, 88, 11, 69, 24,168, 52, 29,104, 89,130, 95, 56, 19, 97,251,246,109,120,
+227,244,233, 57,194,101,134,178,154,237, 95,117,209,131,172,172,172, 20,129,162, 72, 41,126,247,119,126, 27, 57,103, 60,245,244,
+ 51,120,238,167,135,176,123,247, 46,108,190,224, 34,134,223,208,103,175,237,154,242,181,155,217,172,188,230, 49, 37, 28, 59,126,
+ 2,187,118,237,194,243, 47,188, 64,192, 30,190,120,175,218,185, 3,199,142, 31, 71, 61, 37, 45,132,175, 43,248,105,205, 84, 73,
+218,215,126,249,171,223, 64, 74, 25, 49, 71, 44, 47,111,198,155,111,254,188, 8, 82, 99, 8,188,151,118,197,155,156,145,233,117,
+234,122, 58,220,121,186,183,127,255,211,248, 39,239,190, 22, 49, 70, 60,181,255, 25, 0,150,187, 83,250, 29,214, 87, 87,224,140,
+102, 11, 22,157,187,125,219,225,240, 75, 47,227,109,151, 95,142, 61,123,118,227,145, 71, 30, 37, 94, 0, 39,161,173,172,252, 28,
+ 74, 41,124,245,235,127,134,164, 20,102,235,107,216,178,105, 9,235,107,235,168,152,111,146,145,113,224,185,231,241,204, 51, 79,
+163,235,154, 34,254, 75,153,130,190,218,190,199,202,153, 51,216,185,115, 23, 78,159,126, 3, 22, 16,133,108, 0, 0, 30, 13, 73,
+ 68, 65, 84,175,190,250, 26,246,236,217,131,139, 47,186, 24,247,127,247, 1,156, 57,115, 6,103,206,156,193,238, 93,187,240,179,
+211,167,113,244,232, 81,236,217,181, 7, 91,183,109,197, 3, 15, 62,136,182,233,113,118,101, 5,123,246,236,198, 27,255,248, 6,
+142, 30,125, 21,187,118,237,196,214,109, 91,241,200,163, 63, 36,246, 2,187, 19,142,159, 56,142, 47,125,229,171,184,236,178, 75,
+113,205,213, 87,227,125,239,123, 47,190,246,141,255, 89, 44,193, 98, 27, 43,206, 19, 61, 36,109,182,179, 25,140,172,121,120,141,
+122,207,189, 95,100,129,108,192, 91,222,242, 22,172,156, 93, 65,148,207,125,206,232, 67,132,182, 14,155,150,170, 98, 47,116,181,
+129,101, 85,191,130, 66, 53, 89, 2, 0,172, 53, 13,217, 53,181,134,210, 14,198,219,241,183, 71,229, 61,101,128,180,179,193,174,
+205,246, 82,113,102,196,152, 73,136,110,249,172,230, 40,104,128,116, 44, 90,130,215,125, 85, 67, 91, 83,226, 34, 49,202,211,157,
+223,121, 47,234,244,198, 48,150,177,160, 76, 58,206, 20, 3, 98,232,208, 54, 77,185,240,144, 56,228, 62, 49,149,141, 45,109, 41,
+210, 62, 84, 20,197, 74, 41,116, 29, 85, 66,129,253,151, 41, 14,147, 3, 10,224, 8,165,155, 42,169, 66, 44,172, 51,156,255, 27,
+121,116,154,216,170, 65,128,131, 88,114,142, 5,171, 74,251,193, 30, 49, 13,137,112,137,131, 25,100,223, 46, 99,255, 1,132,162,
+120,191, 69,118, 30, 73, 29,202,194,207,143,113, 3,182,181, 76, 42, 70,235,139,141,123, 86,158,138,240,107,148, 35,241,138, 37,
+155, 89,104,116,243,163,235,113,160,205,248, 34,157,199,147,206,255, 61,121, 98, 67,161,205, 9, 29, 79,162, 9, 41,255,189, 66,
+ 93, 87,152, 78,166,152, 76,234,145, 63,219, 65, 43,203,104,205,204,124,232, 52,183,194,209,131,254,162,120,245,243, 0,174, 73,
+ 35,155, 98,137, 68, 82,228,217,204,137,169,116, 6, 33, 38, 32, 41, 32, 41,196, 62,193, 40,139,190, 13,148,154, 4, 3, 40,138,
+132,165,191,200, 90, 98,121,119,236,157,135,175, 60,124, 93,195,122, 42, 46,189,167, 46,213, 58, 87,170,113,177,137, 41,222, 91,
+149, 0, 6,246, 2,107, 53,164,121, 73,225, 38,129, 45,218, 88, 0,102, 4, 51,225,247, 49, 43, 40,101,144,179,130,209, 14,149,
+175, 11,186,152,186, 76,202,138,118,206,163,174,107, 76,167,155,225,171, 41,124, 61, 65, 85,215, 88,218,188, 25,213,116, 2,227,
+ 45,136,244,158, 81, 47, 45, 49,238,216,161,102,221,138, 20, 75,211,233,148,136,109,145, 58,104, 13, 0, 42,161,235, 26,204,154,
+ 53, 14, 14,138, 8,221, 58,102,107,103,209, 53, 13, 66,215,161,107, 86,209,183,107, 64,166,194, 57,132,128,156,104, 74, 66,225,
+ 39,228,247,119, 94, 96, 41, 28,109,218, 53,228,112,209, 52,122,205, 57,194, 58,205,203, 16,177,108,229, 18, 88,100, 13,145, 36,
+ 5,111,106,140, 45, 66, 64,234,122, 2,114,236, 73, 12,169, 51,127,205,204,142, 22, 74,165,146, 52, 68,173, 13, 38,147, 26, 31,
+254,208, 29,120,106,255, 83,200, 57, 99, 54,155,225,162, 11, 47,130,181, 22,215,190,235,154, 18,117,155,227,184,144, 53,168,166,
+203, 0,128,229, 11, 47,196,206, 29, 87,226,133, 23, 15,227,181,227, 39,177,117,219, 86,158,130,116, 36, 24,229, 51,192,251,170,
+ 20, 31,206,123, 98, 41, 88, 11,235, 29, 30,255,241, 19,248,208,237,183,226,210,109,219,224,141,133,211, 6,111,223,189, 27,119,
+220,122, 43, 30,255,187, 39,136,107, 0,224,170, 61,187,113,230,204, 25,236,220,113, 37, 94, 63,118, 12, 71, 95,123, 13,191,122,
+221,123, 16,115,194, 91, 46,184, 0,159,250,221,223,193,100, 82,147,239, 30, 64,223, 54,104,214, 86,202,153,151, 50,229,176, 55,
+179,134,114, 21, 88, 99, 98,180,193,225, 35, 71,240,246,183, 95,133,107,174,185, 26, 47,191,250, 26, 28,107, 68,172,181,120,229,
+149, 35,184,237,150, 91,139, 39,250,134,235, 63,136, 23, 95,122, 25, 70,107, 60,247,211, 23,240, 43,215, 94, 13,231, 28,222,252,
+249,153, 18, 53, 76, 32, 45,224,149, 35, 71,112,245, 47,191, 3,171, 43,103,176,105,105, 9,159,250,151,255, 2,109, 75,218, 40,
+ 9,184,162, 51,115,120,150,115,210,176,182,134,179, 21, 98,159,113,240,224,139,184,121,239, 94, 28, 59,126, 2, 39, 79,254, 12,
+ 87,252,210, 21, 76, 24,237,224,235, 10, 7, 15, 31,198,222,189,123,241,250,137,147,248,217, 27,111, 98,199,206, 29,112,206, 97,
+101,117, 13,202, 90,188,116,244, 40,110,191,237,118, 28, 63,117, 10, 63, 59,125, 26, 59,118, 92, 73, 63,239,202,207, 75,146,104,
+206, 9, 55,221,248, 65,188,243,157, 87,225,149,163, 47,227, 7, 63,250, 33, 46,185,228, 98,162, 89,140, 10, 67, 1,208, 36,104,
+248,122, 90, 94, 39,101,136, 36, 71, 19, 19,139, 35,175, 28,193,123,175,187, 14, 10, 10,111,189,240, 34,252,254,239,125, 10,203,
+111,189, 24, 75,203, 91,248,207, 51, 53, 46,103,132,152,241,210, 43, 71,176,247,134,235, 41,135,160,114,184,254,250,247,226,197,
+151, 95,166,192, 23, 0,214, 87,240,213, 4,199, 78,156,196, 59,223,177, 7, 33, 4,252,202,187,174, 30, 88, 34,160,115,198, 88,
+143,186, 94,194,242,230, 11, 80,213, 83, 24, 95, 97,178,105, 25,213,100, 51,170,201,166, 18,241, 29, 2,223,209,153,214, 85,125,
+ 31, 96, 83,140, 80, 60,146, 42, 73, 78,163,136,190,121,129,216,162,191, 95, 52,226, 29, 95,236,227,206, 94,170,103,169,212, 23,
+117,115, 41, 37,164, 46,157, 87, 57, 61,223,241, 73,165, 58,102,145,207,175, 15,198, 63, 87,226,240,134, 50, 30,231,200, 60,249,
+ 75,126, 94,242, 50,115, 40,139, 49,101,172, 43, 68, 61,241,184,210, 5,168,203, 30, 81, 60,172,146,206,165, 88, 65, 57, 22,182,
+157,207,126, 54,111, 1,179,115, 22, 66, 1,120,232, 57,173,195,216,137, 48, 30, 7,142, 95,135, 49, 77,238, 28,175,120, 33,149,
+ 37,100,182,100,197,148,144,212,200,194,196, 30, 74,161,199, 9,217,140, 2,146, 76, 81,104,230, 12,152,202,195, 40, 64,103, 83,
+246,225, 80,169,140,242,233, 34,228,176, 31, 69,126, 76, 98,102,115, 26, 87, 70,233, 78,245, 40, 69,105, 90, 87, 20,253,105, 52,
+175,113,128,202, 84, 37,195,216,130,223,211,132,209, 37, 36,160,146, 76, 96, 17,153, 36,101,217,115,147, 0, 78, 62, 40, 57, 39,
+164, 17,247, 91,241, 78, 89, 27,203,226, 49,234, 92,141,115,144,221, 75, 86, 25,206,121,194, 69,182, 29,144, 2,121,148,121, 66,
+147,152,102,151, 25,212, 98,173, 69, 31, 3,150,182,108,198,218,234, 26,209, 14,235, 26,206,215, 5, 79,171,148, 65, 61,157, 34,
+165, 72, 25,219,124,128, 27, 70,121,246,103, 87, 75,176, 11, 82, 44, 83,139,174, 35,187,143,116,213, 98,149, 36, 91, 84, 46, 30,
+252,242,140,240, 51,170,180,130,206,166, 76, 98,136,169, 78, 2, 68, 99, 12,186, 48,227, 52,169,140,166,105,152,190,167, 57,195,
+ 71, 38, 61, 28,122,196,232, 87,153, 76,248,170, 98,213, 47,157, 49,145, 49,177,170,120,252, 19, 5, 85, 8,238,212, 90, 68, 94,
+181, 72,193, 27, 56,119, 90, 43,148,238,253,223,125,230,179,229, 17,222,247,212, 62,252,228,201, 39,161,148,194, 95, 61,246, 24,
+254,213,167,126, 15,179,166,193,161, 67, 47, 98,125,125,157, 64, 37,142, 9,122, 8,232,250,128,212,205,144, 1,156,121,243, 52,
+ 30,127,226, 9,124,228,182, 91,112,195,251,223,139, 35,175,190,134,147,167, 78,225, 3,239,187, 14, 63,126,226,239, 25, 51,219,
+111, 96, 89,164, 20,145, 17, 8, 84, 3,224,165,151, 14,225, 91,223,106,113,219,173,183, 96,203,150, 45,128,162,137,192,125,223,
+123, 16,175, 31, 59, 70,140, 5, 0,219,182,109,197,191,255,183,159, 70, 8, 17,223,127,228, 17,172,158, 93,197,111,124,236, 78,
+188,251, 93,215, 32,165,132, 7, 31,122, 24,179,217,140, 96, 36, 0,180, 33,238,130, 8,153,233, 61,113, 37,152,168,170, 41,117,
+208, 86, 53,214,103, 13,142, 29, 63, 1,133,140,211, 39,142,151,201, 68, 8, 1, 15, 60,248, 61,220,249,209,143,226, 15, 63,243,
+111,160,160,240,250,177,215,241,208,195, 15,161,107,214,112,248,208, 79,241,137,143,127, 12, 63,254,187,191, 47,201,117, 85, 85,
+ 49, 72, 40,226,251, 15,255, 5, 62,249,235,159,160,226, 35, 70,124,255,161,135, 1,171,161, 66, 66,219,117, 5,107, 92, 77,168,
+ 57, 20, 15,190,181, 22, 25, 17, 46, 37, 28, 62,122, 4, 31,249,200, 29,184,255,190,239,146, 69, 49, 37, 28,121,229, 40, 91,211,
+128, 67, 63, 61,136,143,124,232,118,220,255,192,119, 49,155,173, 35,231,140, 35, 71, 95,229,198, 15, 56,112,224, 57,220,182,119,
+ 47,190,125,223,203,180, 74, 77, 25, 71,142, 30, 45, 66,216,207,124,250, 95,227,174,187, 63,143,159,236,219,135,127,246, 79,127,
+ 11,239,127,223,251,129,156,241,208,195,143,150, 9,174,240, 72,154,142, 70,241,117, 93, 99,214, 52,224,254,164,172, 76, 94,125,
+237,117,252,225, 31,252, 1, 30,252,139,135,112,195,245, 31,192,117,215,189, 7, 49, 69, 60,250,163,191, 65, 76, 28,127, 13, 96,
+203, 91, 47, 2, 0,124,250,183, 62,137,111,124,243, 59,248,225, 99,127,131,219,110,190, 17,191,255,207,127,187,172, 33, 30,126,
+244,209,146,180,137,152,208,182, 61, 30,254,203,191,194,111,254,198,199,113,253,251,222,139,195, 47,191, 52, 36, 10, 26, 13,235,
+201, 21,144,186,128, 62, 4, 88,231,208, 52, 13,250,212, 82, 67,155, 18,159,153, 9, 10,182,184,175, 16,105, 98,165,124, 53,205,
+ 89,241,232,141,243,157, 69,113,187,200,115,124,190,255,141,225, 48,243,196,178,249,127, 63,190,108,230, 71,206,231,155, 0,204,
+143,139,207, 39,194, 90,100,153,218,208,145, 74,132,166, 26,178,137,101,239, 46, 49,157,227,240, 1,171, 76,129,136, 8, 64, 65,
+118,188,195,174, 83, 23, 32,142,194,144,135,190,104,244, 61,238,156,101,143,188, 8,161, 58, 63, 29,145, 63, 51,223,221,207, 7,
+134,204,127,159,249,255,102, 92, 56,205,191, 94,218,144,224, 43,165,200,158,239,180,129, 70, 39,151, 3,180, 46, 46, 1, 85, 66,
+124, 40,232,129, 16,135,105,128, 95, 48,233, 79,118,206, 68, 11,163, 49,168, 1,177,157, 99,236, 1,149,153, 13,173, 74,193, 52,
+ 38,209,141,127, 79, 81, 93, 67, 37,190, 60,194, 40,129, 13, 8, 49,192,217, 97,204, 59,126,109, 1, 5,163, 28, 93, 26,177,227,
+ 85, 67, 26,101, 4,112, 20, 99, 73, 85, 35,111,108,206,212,229, 2, 25,206,212,252,115,244, 37,165,144, 9, 55,152, 78,166,108,
+117,227,233,144,228, 70, 51,218,216, 79,106,100, 40,120, 95,205, 61,159, 50,198, 15,140,105, 94,163, 34, 50, 37,228, 65, 46, 65,
+227,248,144, 10,222, 56,241,238, 90,129,248,237, 80, 3, 46,146,194,114, 34,107, 5,200, 38, 36,170,120,121, 77, 41, 67,221, 48,
+252, 39, 12,185,242, 60,242, 87,140,243, 20,139,151,236,242, 52,231, 93, 43,101,202, 20,138, 64, 47,118,136, 83, 29, 37, 8,230,
+148, 40, 30, 51,210,106, 39, 15, 73,180, 35,184,205,128,109, 53,198, 64,201, 80, 38, 69,206,165,103, 91, 96,249, 12, 83, 0,137,
+ 54,102,160, 91,234,204, 7,161, 71, 53,153,208, 88, 54,210,250,193,185,138, 5, 83, 29,148,202, 92,180,107,254,153,153,197, 62,
+138, 79,238, 67,128,183, 14, 57, 68,116, 93, 71,170,228, 24,161,116, 46,122, 7,173,137,154,105,180,167,213,134,179,236,211, 15,
+108,191, 29, 26,143,148, 51,254,243,127,250,143,248, 47,255,245,191, 21, 26, 33, 56, 84, 71,176,162,134, 51, 15,180, 38,113,111,
+ 98,116, 41,137,153, 59, 24,231,225,235, 9, 77,124,140, 70,219,176,206,129,121, 17, 52, 57,140,232,214,214, 96,157,131,171, 38,
+180,223,205, 25,179,213,179, 0, 59, 41,250,158,152,234,214,146,107, 39,132, 14,222,209,115,221, 52, 51,118,221, 48,208,199,123,
+244, 41,162,170, 38,165,136,108,155,117,162, 58,130, 66, 72,172,182,156,131,174,104,213,169, 73,149, 72, 43,178,142, 38, 58,108,
+ 79,149,175, 91,213, 53,250,190,167,164, 62, 75,238, 32,103, 93, 9,123,177, 12, 23,235,218,174,232, 50,228,108, 9,161,131,210,
+ 10,222,214,229,156,147,179, 20,165, 96,103,107,167,202,216,180,188, 92,220, 23,179,179,103, 97, 76, 42, 69, 98, 76, 17,206, 79,
+138, 71,222, 24,154,240,117, 93,139,102,245, 44, 89,170, 57, 66,181, 90,218, 84,210,101,133, 47, 31, 66, 40,133,111,142, 17,177,
+107,105,173,232, 44, 28,127,182,148,214,101, 82,163,181,198, 53,191,252, 78,156, 60,121, 10, 39, 79,157,194,238, 29, 87,226,134,
+ 15, 94,143, 47,220,251, 5, 30,251,187, 33, 31,193,209, 51,165, 51,208,181, 45,140,167, 56, 89,209, 4,228,156,160, 61, 77,171,
+228, 62,179,196,124,167, 14,215,213,245, 6, 82,214,162, 75,113, 67, 30,183,214, 11, 59,247,249,238,113, 17,221,108,124, 89, 47,
+ 26, 23,159,239,207, 46, 82,120,207,119,186, 24,209,149, 74,231, 63,242,243,101,174,200,114, 76,163,209, 41, 10,239, 93, 68, 73,
+ 69,133, 61,242,125, 11,250, 81,126,175, 18,229,167,135,159,193, 57,183, 33, 30,181, 60,108,163,215,100,124, 73,207, 79, 52, 22,
+ 41,194,231, 47,254,249,241,125,129,183,140, 87, 15, 11,246,235,139, 92, 13,243,218, 8,173, 52, 18,134, 98, 99, 3, 67, 62, 68,
+ 40,157, 74,103, 87,220, 7, 69,148,151, 75,104,133,176,198,181,102, 1, 93,228,152, 54, 30,217,246, 37, 16, 69, 23,112,138,175,
+ 42,116,125, 15,171, 53,192,158,120,203, 59,168,148,135,140,225,217,250, 58,172,115,232, 67, 71,190,112,182,216, 73, 97, 69,228,
+ 50, 71,123, 91,165,145, 64,223,203, 90, 7,149, 13,122, 70, 44, 26,103,161,216, 31, 28, 56,184, 68, 43, 77,193, 34, 37, 62,151,
+188,203, 70,107,142,151,101,225, 23,239,146, 5, 55, 27, 35, 37, 48,137, 86, 34,167, 4,239, 61,251,152,137,218,215,172,173,211,
+197,219,211, 42,202,121,207,251,236,196,236,253,192,154, 2, 77,137,105, 70,145,170,157,243, 9,250,190,163,120, 81, 14,187, 48,
+ 28,244, 32,170,216, 62,211,161,109, 28,145,221, 98, 8,240,236,248,136, 35,144, 10, 69, 97, 86,100,209,203, 9,245,116, 9, 90,
+ 91,244,125,203,155, 15, 3,199, 69, 68,219,208,238,216,122,218,175, 27, 95, 13,151, 46, 59, 12, 28,167,173,137,218, 95,108,145,
+178, 19, 22,199,137,171, 43,100, 85,163,107, 26,166,252,177, 54,162, 8,126, 4, 25,154,201,175,204, 9,110, 90,107,244, 93, 42,
+169,120,214, 57,186,132, 69, 15, 33,148, 56,173, 96,149, 41,197,141,100,143, 67,152,217, 37, 65,144,247,143,134, 57, 21, 92,224,
+ 4,134, 10, 73,128, 70,207, 73,116,211,233,148,158, 23, 22,137,138, 87, 92,196,147, 2,200, 81,161,163, 29,123,136,176, 74,163,
+226, 9,133, 49,134,158,105, 46,223,164,200, 82, 60, 26,215,220, 84,136, 67,161,231,140,238, 20,169,120,101,133, 23, 21,106,129,
+220, 25,180, 18,171, 11, 94,183,107, 37, 5, 46,193,250,138, 96, 65,150,194,100, 36, 34,216, 56,135,164, 20,150,150, 47, 32,202,
+225,108, 70,207,117, 93, 35, 6, 16,248,166,174, 57,132,171, 43,218,162,156, 18,214,207,174, 48,221,143, 46,176,186,158, 80,145,
+212,118, 72,138, 50,236, 83, 86,101, 37,229, 61, 77, 26,218,245,158,226, 72,179,218,208,100, 52, 77, 83,166, 48, 73,129, 29, 39,
+145, 4,213,214,210,180, 46, 4, 24,239,202, 20, 45,101, 90, 71,106, 22,122, 6,126,166,135,162,142, 26, 2, 33,193, 37, 46, 36,
+214, 87, 86, 97,140,193,116,105,138, 96,135, 17,187, 76,169, 98,232,208,183, 13,156,175, 16,160,208,176, 88,215, 79,166, 8, 81,
+158,113,141,220,119,164, 41,233, 91, 78, 34,164,115, 67,132,108, 49, 37, 88, 6, 58, 37,100,172,175,174,177, 11,140, 82,249, 68,
+144,122,242,196,113,252,218,157, 31, 99,138, 97,192,253,223,189,191, 76,128, 36, 6, 92, 91,139, 28, 19,186,142,226,161,141,181,
+ 8, 93, 71, 33, 57,145,154, 41,107, 13, 66,215,193, 79,232,189, 72,125, 15,181,249,130, 45, 57,134,192, 85,196,136, 75, 45,153,
+188,233,220,145,240,144, 78,181,248,210,152, 47, 6, 22,117,138,139, 4,120,243, 95, 67,118,176,243, 23,252,152,103, 62,190,220,
+203,231,119,110, 74, 32, 62,217, 68, 82,229, 50,202, 45, 23,165, 8,238, 70,161,244, 37, 90,116, 4,214,145,160, 4, 81, 53, 40,
+ 6, 32,108, 76,112, 99,146, 82, 30, 10,157, 69, 93,183,236, 99, 82,206, 64, 60, 87,116, 56,223,221, 91, 70, 36,198, 64,197,200,
+184,211, 30,139,237,198, 95, 99,254, 98, 95,244, 90,142,255,185, 20, 56,114,248, 45,130,195, 72, 88,141, 92, 38, 37,174, 86,186,
+235,208,151, 75,222, 90, 74,101, 18,145, 96,140,131,167, 90,243, 5, 89, 87, 36, 44,204,204, 52, 54,138, 3,130,180, 96, 87,171,
+ 50,186,146,228,171,161, 35,164,223,175,235, 26, 6, 11, 57,104,208, 7,150, 50, 7,108, 33, 26,142,167, 69, 50, 77,177,149, 71,
+ 96,198, 58,210,128, 93,205, 41, 65, 89,170,248,189,245,220, 68,211,200, 89, 18,199,104,234, 78, 56, 88,227, 28,250, 24,209,207,
+ 26, 40,197,214, 57, 97,161, 71,234,162,164,121, 8, 33, 0,138,243,178, 37, 19, 59, 18, 49,169, 8,121,114, 38, 11, 30,175,130,
+ 68,159,225, 45, 51,239,189, 45,104,228,242, 94,135,110, 68, 37, 52,133,131, 29, 99,130,134, 41,104,212,196, 94, 94, 17, 97, 74,
+ 64, 6, 49,251, 21,172, 51,197,203, 30, 51,117,241,114, 96,181,124, 8, 91,134, 80,213, 85,141,174,153,145,232, 85,145,221, 82,
+137,151,157,217,114,214,113,103,193,197, 52, 61, 47, 34, 30,141,163,207, 42, 23,209,114, 73,131,178,166,233,253,227,223, 53,105,
+238, 28, 45, 81,229, 18, 96,148, 97,118, 64, 67,182, 84, 30, 75, 87,147, 37,158, 58,101,238,176, 19, 98,236,208,181,164, 40,174,
+107, 10,184,105,154,117, 94, 65,104, 76,234, 9,115,209, 3,114, 12,152,205,214,233, 89, 12, 61, 77,144, 28,197,189,130,159,151,
+152, 40,170, 53,165,140, 28,185, 56, 97,224,143,226,164, 65,138,247,165,108,119,205, 97, 76, 90, 32, 70,200,232, 2, 1,174,144,
+ 80,130,134, 36, 10,184,170, 42,186, 76,103,171,180, 90,226,208,147,192,180, 63,148,226, 89,179,194, 95, 81,162, 27,128,233,230,
+101, 2, 87,133,128,212,145,247,185, 99,168,141,245,100,129, 50,218,148, 72, 91,173, 57,148, 40,131, 93, 14,148,148,233,189,135,
+178, 28,122,162, 73, 68,157,186,128,138, 3,170,122,158, 10,133,142,184, 3, 80, 40, 84, 69,192,148,247, 50,201,100, 34,147,149,
+ 51,107,133,170,162,125,123,223, 19,167,128,238,137, 72,104, 84,165, 8, 47, 28, 35,103,228,168,194,212, 79, 49,150, 51, 83,162,
+ 86,165, 64,146, 98,123, 72, 47, 36,157,147,136, 92,135, 38, 10, 37, 97, 84,130, 94,148,166,100,190,204,233,143, 84, 76, 81,118,
+130,117,158, 94,239,190,167,113, 63,191,183, 41, 15, 89, 0,196,101,233,209, 53, 51,190, 27, 60, 11,181, 25,150,163,108, 89,197,
+ 42, 77, 19, 69, 33,133,202,164, 79, 62,135, 36,128,235,139, 72,206,251,138, 0, 64, 18, 41,203,197,173,210, 6,221,172,225,179,
+152, 25, 35,213,180,206, 50,106, 44,222,109, 25, 63,139, 56,107,129, 64,110,145, 61,105,190, 91, 94,148, 37,189,104,108, 63,159,
+ 41,125,190,238,252, 23, 49,215, 41,175, 93, 21, 33, 9, 32,135,106, 95,118,132,196,209, 29, 46,172,113,247, 59,207, 76,159,255,
+126,202,104, 22,190,165, 50,118,203,153, 71,198,163,110, 36,179, 71, 26, 41, 47,252, 61, 54,252, 78,134,222, 48,149,206, 45,154,
+230, 85,226,122, 84, 60,148,181,193,252,248,124,244,251,204, 23, 82,231,251, 25,210, 2, 84,237, 56,124,101,161,151,220,104,170,
+ 82,197, 35, 43,216,204, 17,215, 95,254,222,217,170, 64,129,132,221,174, 12,237,125,193,186, 5, 9, 10, 9, 61, 41,160,141, 49,
+136,153,252,226,198, 56,228, 60,100, 35,199,148, 56,137, 75,149,113, 86,148,164, 61, 12, 97, 25,150,201, 87, 4, 31,145, 0, 14,
+186,192, 60,119, 27,208, 10,129,129, 25,133,216,196,159, 5,203, 62,234,208, 52,176,188,167,214, 90,163,227,252,109, 65,203, 98,
+ 60, 13,138, 1,202,100,120,231,105,159,206, 33, 32,206,122, 74,176,226,139, 87,105,186,220,188,247,252,186, 42,168,172, 55,140,
+196,193, 19, 0, 5, 58,204,140,166, 49, 97, 97, 92, 3, 60, 2, 22,141, 5, 79,159,120,226, 33,211, 13,100,197,236,238,106, 3,
+154, 88, 10, 15, 25,157, 91,118,129,216,146,192, 70, 7, 66,215,247,197, 34,230,125,197,226,205,128,122,186, 9, 49,229,146,170,
+102,249, 51,101,152, 41, 16, 82, 44, 84, 52,226, 50, 88, 62,108, 19, 66,232,225,188, 67, 61,153, 2,138, 94,247,241,207, 39, 83,
+ 5,235, 28, 52, 20, 17,249, 82,134,159, 76, 40,252, 73,216,217,214, 34,244,129,144,180,125, 83,118,199,244,185, 20,138,156,134,
+182,194,181,231, 49,101,166,200,214,182,109,208, 54, 13,170,170, 66,211, 52,124, 72,114,227,208,243, 90,133,216,199,112,174,134,
+ 18,235, 28, 64, 48, 38,100,164,220,243,232,147,159,241, 20, 81,213, 53,156,243,232, 3,117, 82, 50,253,208,242, 28, 43, 32, 41,
+193,251,242,243,217,181,116,177,205, 77, 67,251,208, 35,131,223,103,254, 30, 10, 84,244, 5,198,187, 26, 51,164, 77,146,157, 50,
+ 66,107, 46,166,140, 65,142, 67, 54,125,199,171, 19,207,194,176,196,231,153, 8,137, 21,175,171, 40,119,131,249, 8, 24, 50, 57,
+100, 61,169, 37,227, 92, 41,104,111, 41,213,142, 73,105, 20,190,100, 11, 23, 95,107,141,208,245,208,236,150,113,206, 21,236,113,
+202,122,195,138, 54,116, 13, 98,232, 4,128, 12,103, 45,250, 44,107, 32,201, 45, 36,119,163, 20,163, 98,235,204,194, 56,225,127,
+166,248,124,210, 22, 5, 15, 92,156, 26, 25,229,107,142,102,209,133,220, 71,110,141,142,207, 66, 91,226,116, 49, 2,153,135, 16,
+161, 6, 50, 76,249, 60, 1, 84, 56,177,238, 24, 9, 52, 69,152, 76, 54,209,103, 35,244,136,125,187, 33,175, 65,101,250,222, 60,
+ 85, 39,192, 21, 71,231, 10, 24, 44,178, 16,149,158, 5, 62,103, 57,205,209,249,106, 56, 51,234,165, 73, 22, 30,181,116, 93, 82,
+ 9,228, 13,249,223,139,249,226,243,137, 91,114, 17,204,239,216, 69,236,148, 70, 41, 93,133,118,166, 48,240,109,139,126, 41,151,
+110, 54,143,166, 7, 98,163, 2,228, 65,213,128, 70,233,254,114,166,220,104,241,243,106, 30,195,201,158, 78, 58, 93, 98,172,235,
+162,110, 46,126,119, 30,227, 10, 1, 78,176,140,242, 98, 67,169, 18,118,163,184,187,151, 48, 18, 73, 80, 42,169,110,163, 3,127,
+ 17, 50,149,186, 89, 83, 46, 28, 98, 78, 15,235,131,177, 53, 80,200,117,242,218,204, 23, 90, 37, 40,224, 92,177, 65,217,251,157,
+ 79,155,160,244, 72,204, 88, 94,147, 97,151, 90, 30,104, 25,169,178,109, 76,241,168,141, 87,176,163, 73, 65,166,180, 41, 75, 31,
+118, 57,172, 40,121,142,212,219, 49, 16, 77,140, 82,226, 92, 73, 3, 76,125,160, 48, 9, 16,208,163,239, 41,179,217,123,143,166,
+153,177, 13,146,126, 95, 25, 97,130,223, 31, 18,155, 40,166,150,245,165,243, 49, 44,248,146, 9,130,144,232,192, 2, 57,241,178,
+107,163,145,122,242,115,183,236,189,166,192, 17,195,121,210, 29,151,132,156, 78, 22,169,195,140, 49,161,170,107,222, 87, 83, 39,
+ 97,188,229,139, 62, 21, 65,102, 98,225,151,209,134, 5,107,186, 20,137,200, 2,159, 96, 77,128,175, 54, 8,247,232, 57,212, 60,
+ 58, 23,130, 97,164,215,158, 15,133,148,169, 51, 86, 37,187,128, 38, 70,154, 45,114,178,167,155,212,180, 59,157, 53, 52,194,117,
+206, 33, 35, 97,245,236, 10, 1, 95,152,210, 88, 88, 17,222, 1, 25,148, 95,221, 7,100, 62,180,164, 32,107, 24, 25, 90,108,169,
+138,211,250,180,134,213,131,143, 94, 10, 49,202,193,142,156, 68, 71, 7, 94,230,140,135,201,116, 90,158,193,192, 22, 68, 17,228,
+129, 39,104,194, 65,136,137,167, 68, 10, 35,218,157, 32,153, 13,180,178,128,202,232,218, 25, 77,121, 56,170, 54, 33,151,196, 60,
+ 41,114,170,122, 9, 93,223,114, 20,180,131,202,153,244, 30,124, 6,146, 34,217,242,186,169,160, 28, 16, 82,199, 89,217, 50,225,
+ 33,176, 78,224,156,235,192,171,164,166,153, 81,167, 23, 40,114, 85, 91,135,170,154, 32,133,158,133,145,185, 40,216,141,172,244,
+248, 92, 81, 86,241,186,112,248,190,148, 8,169,144,114,228,105,142, 30,206,111, 74,196,130,113,154,223,119,118,196,240,197,161,
+184, 11, 13,129,176,203, 96,198,134, 16, 8,105,106,201,175, 47,115,172, 19,235,102,140,177,204, 84, 31,200,147,213,116, 2, 40,
+ 10,251, 74, 33,240, 20,129,234,161,200,249,224,164,189,137,232, 57, 29, 78,206, 26, 63, 89, 42,137,121, 68,240,108, 8,102,147,
+233,251,201,253, 96,140, 43,249,236, 57, 6, 32, 49, 0,202, 58, 62,215, 41, 65, 77,107,218,241,231, 76,120,216,156, 69,164, 59,
+110, 90,116,209,176, 24, 71,221,180, 2,208,119,109,185,216,105, 29,146,138, 7,124,108,169,132, 2,172,162,192,153,164, 56,241,
+ 81,244, 42, 44,162, 38, 57, 58,231,156,112, 35,147, 99,162,132,195,174, 67,223,207, 54, 76,192,141,113,112, 85,189,209, 9,149,
+ 50,186,134,196,163, 90,113,152, 19, 55,139, 9, 84, 84,210,247, 1, 39,233,145,182, 75,185,202,103,233,252,100,132, 59,223,177,
+142, 47,232,241, 78,120, 17, 41,108,200, 32,158,235, 0,141, 88,219,226,185, 17,166,154,198,216,153,127, 64,140,176,169, 89,243,
+ 45,159, 85,217, 93, 41,141, 18, 26, 64,135, 92, 42, 85,190,116, 3,101,175,206,181, 84,230,168, 82, 41, 84, 12,139,222,100,132,
+169, 70, 23,122,185,252,242, 70, 29,129,208,199, 36,184, 68, 59,179, 33, 45, 46,199, 52, 4,125,140, 10,159,177,103,121,209,200,
+ 91,137,192,133,127,182,177,136,110,222,166,118, 62,178,223,184, 83, 55,227,145, 20, 79, 24, 18,219,227,140, 53,200, 50,130,226,
+169,128,243, 53,197, 45,198,128, 16, 90, 89, 44, 48,172,164, 47, 83, 14,137,127, 53,134, 47, 9,229, 8, 18, 19,187, 33,121, 78,
+200, 72,176,195, 56, 82, 58,126, 14,119, 80,150, 81,168,154, 10,189,174,167,241, 96,197,151,244,108, 54, 3, 52,231, 51,247,161,
+224, 76, 37, 41,208,216,154,188,195,137, 46, 52,138,142,205, 60,186,235,135,160,149,241,164, 8,131, 74, 27, 90,141, 98,131,134,
+ 88, 80,195,187,172, 60, 42,110,164, 88,178,206, 34,230,126, 24,255, 97,128,217,140, 47, 30,235,106,158, 52,144, 50, 63,134, 88,
+190,190, 98,128,143,202,150, 19,182, 90, 18, 8, 90,143,172, 6,219, 93,207, 93,135,115, 14,211,165, 37,172,173,173, 33,117, 68,
+ 82, 19,203,139,172,135,104,135,167,209,183, 36,228,146, 41,136,100,136, 71,102,206,203, 26,194,123,143, 12,193,221, 6,182,218,
+ 80, 17,102,180, 7, 44, 9,183,156,247,132, 80,230,207, 44, 20,144, 59, 66, 62,131,137,142, 2, 28,154,173,175,161,239, 90, 88,
+107,177,105,249,173,180,166,136, 52, 70,157, 78,167,136, 41,160,109, 90,210, 6,104, 13,240,100, 77,229,140,102,157,216,238, 74,
+103,102, 9, 12, 69,189,226, 46, 36, 33,194,123, 7, 36,179,113,162,149, 19, 41,218,181,166,112, 26,126,221, 19, 51, 1, 8,134,
+ 4,116,253,108,195,234,206,185, 26, 74, 27,226, 85,244,161, 8, 97,157,119,197,246,164, 56,188,202, 24,131,179,103,207,142,148,
+253,204,207,103, 36,113, 8, 45,239,196, 29, 1, 67,178,240,219,201,186,215,117,237,128, 5,230,204,117, 18,148, 89, 56, 95, 19,
+234, 55, 70, 40,147, 57, 54,215,151,162, 53,143, 82, 0,169,139, 30,108, 79,162, 82, 13,177, 35,203,166, 98, 84,169, 64,105, 18,
+125, 77, 57,171, 73, 60,233,169, 3,207,153,108,183,252,185,144,201, 78,219,182, 52,130,150, 76,135, 81,154,157, 20,159,138,189,
+217,198,145,152, 12, 28,127, 28, 2, 69,247,198,174,167, 51, 71,206, 24,126, 45,233,119, 36, 19, 89,236, 57,141,204, 89,216,106,
+130,212,209, 10,140, 10,168,140, 28, 3,199, 41, 36,230, 68, 24,206, 88,208,108, 25,165, 85, 10, 77, 45, 21, 7, 41,169, 34,110,
+150,115, 84,177, 10, 31, 60,154, 46,235, 46,214, 90, 24,163, 97,109, 69,124,128,216,177,248,141,166, 29, 61, 7,178,164, 60, 52,
+ 3,164,187,161,159,221, 51, 53, 51, 34,208,215,134, 45,194, 86, 73, 2, 20, 33, 43,121,217,251,226, 16,200, 41, 65,153,196, 83,
+ 12, 85,172,220,229,181, 23,156, 55,108, 57,131,202,164,152, 45,108, 89, 69,134, 89,233, 13,137,114,138, 98,202, 77, 22,165,246,
+ 34, 5,250,162,136,204,121, 97,219,188,130,123,252,239,138,112, 65, 94, 76,217,225,168, 97,199,166,173, 46, 86, 13,217,109, 23,
+158,182,101,139, 77, 98,117, 42,168,235, 46,214,187,178, 91,209,188, 95,237,202,113,237, 57,122,111, 40, 86, 80,196, 67, 37,255,
+156,243,180, 29,171, 64,199, 47,148,140,160, 5, 77, 74, 28,239, 92,162, 42,133,243,157, 82, 34, 65, 76, 23,248, 48, 75,191,144,
+202,119,142,200,205, 12,187,120,185, 28,230,149,237, 27, 52,210,115,188,247,178, 39, 42, 58,135, 65,240,150, 71, 35, 38,137,244,
+139,253,176,247,149,113,163, 60,112, 41, 69, 56,231,161, 45, 95, 2,163,172,123, 89, 59,196,126, 70,135, 61,239,204,100,156, 89,
+136, 71, 25,176,218,151,221, 22,217,251, 72, 8, 35,135, 33, 21, 92,186,116, 74,196, 83,167,223,203, 57,135, 46, 52,163,106,159,
+187, 57,126,180,140,113,133, 73, 64, 32,163, 6, 33,246,229,226,119, 60,158,151,125, 25, 51,231,120,183,173, 24,118, 18,160,160,
+203,100, 74, 86, 4,162,208, 79,220,225, 10,211, 57,198,128, 12, 26,235,107,238,252,145, 83, 81,248,203, 37,172, 52,121, 69,115,
+162,174,189,170,235,162, 24,150,247, 36,198,204, 49,193, 13, 50,200,215,171,149,229,162,201,113, 52,108, 40,249,244,148, 83, 30,
+ 81, 77,167,244,103,140,101, 98,152, 1, 56,103,185, 93, 91, 35,177, 28,175, 70,178,214,240,149, 71,219,180,136,125,132,243,180,
+107, 38,220, 48,133,183, 88,239, 24,130, 83, 3,153,196, 63,221,250,250, 16,233,201,147,138,148, 51, 65, 49,152, 47, 17, 25,245,
+218,117, 84,240,213,147, 26,117, 69, 74,102,205,235,147,213,149, 51,208, 76, 98, 12, 18,167,220,199,162,248, 46,207, 62, 40,110,
+ 88, 4, 79,212,193, 36,202,131, 7, 69, 25, 87,156,212, 22,186,192, 14,135, 76,200,222, 16, 56,129,145, 38, 32,190,170,208, 7,
+238,206,178,134,119, 21,105, 38,242, 16,127, 44,205,139, 97,116,116, 8,137, 47,170,136, 73,181, 4, 91, 85,172, 76, 79,212,117,
+114,186,158,179, 14,142,119,244, 89, 1, 33, 81, 87, 26,251,142,186, 49, 91,195,121,143,204,160,157,148,104,186, 66,123, 93,113,
+222,100,190,152, 13,180, 37,208, 80, 63,155,113,231, 69,234,112,233,166,229,112,143, 41,194,213,117,129,143,228, 56, 20,157, 74,
+110, 76,100, 24,237, 56,134, 56,241,216,190, 43, 36, 61, 85,216, 29,156, 35,238,253,224,238, 41,205,195,240,172,143,115,226,157,
+119,200, 28, 63,171,120, 66, 4,129,254,176,198,133,132,168,129, 39, 47, 10,198,123,104, 67,209,167, 57,103,164,182,231, 41, 2,
+101,154,103,254,126,202, 12,194,197, 13, 83, 76,118,169,128,207, 9,107, 61,186,102, 86,130,112, 32,166,196, 24, 97,205, 16,179,
+108,189,101,119, 67, 40,162, 93,161, 59,106, 78,190,164,103, 54, 21,205,152, 26, 9,167,233, 92, 55,176, 85,205,122,170,192,141,
+230,176, 58,148,148,209,208,245,229,191,111, 26,138,134,117,140,124, 14,146,187,192,147, 51,225,179,103, 94, 11,211, 57, 30, 54,
+220,149,214,186,210,148, 42,177, 65,115,161, 70,110,156, 84,156, 70, 96,231,205, 56,112, 10,172,135,128, 2,148, 49, 38,207,171,
+168, 23,141,139, 23, 93,238,227,127, 47,221,225,188,213, 42,241,131,156,211,224,133, 29, 72,101,140,237,228,125,104, 8,113,180,
+239, 80,133, 2, 86, 10, 83, 53,108,254,199,100, 37,197, 30,107,249,231,153, 67, 41,232,193,205, 3,243,187,160, 21, 89,105,237,
+253,134,241,181, 36, 94,149,157, 30,255, 92,169,140,224,198,123,106,197,187,171, 65,113, 46,187,244,255,159, 8,212,249,108,243,
+ 69, 25,232,227, 85, 3, 74,113,144,202,142,101, 28, 67, 43,191,183,182,166, 92, 76,146, 0,199, 67, 7,218,189, 56, 18, 51,209,
+ 5,235,217,243, 76, 33, 37,117, 85, 3, 48,133,131, 47,123,228,114,184, 84,228,211, 22,138,175, 54,190,100, 75,107, 46, 8,148,
+206, 84,124, 37,178,194,104,230,169, 83,244,109, 44,140,121,122, 77,217,182,147, 3, 91,140, 98,233, 38, 3, 95,218,134, 87, 32,
+224,241,186, 80,158,198,217,225,178,154, 41, 3, 50,165, 7, 49,161, 30, 10, 75,202, 91, 39,219, 28,161, 93, 21, 23,137, 28, 8,
+163, 53, 66, 72,101,109,144, 68, 35, 33,107, 2,165,209,118, 29,234,233,132,108, 74, 33,192, 57, 75,133,152, 26,232,129, 49, 4,
+ 58,248,185,171,183,118,148,239,206, 7, 67,138, 17, 49,245, 69,236, 20, 35, 74, 49, 82,236, 77, 35,203, 99,202, 25,137, 17,145,
+142,197, 97,126, 82,163,154, 76,208,206,102, 20,127,154, 50,218,166,225,236, 4,186,196,157,247,240,174, 98,219, 14,143, 37,219,
+150, 53, 31,116, 57,118, 93, 71,232, 88,207, 43, 43, 99,128,152,105, 7,170,136, 34,168, 64, 2, 39,178, 49, 41,198,159, 58, 36,
+ 16,153, 81,240,206,190,158,194,123, 18, 63, 89,235, 16, 83, 96,210,162, 27, 5, 37, 89, 82,253, 51,175, 91,166, 93,179,217, 58,
+ 84, 38, 21, 63, 97,182, 52, 66,215,162,109, 8,197,234,234, 77, 5,251,170,149, 66, 26, 77, 52, 82,160,209,179,228,197, 3,170,
+140,121,243,168,144,144,212,197,156, 51,170, 73, 13,235, 61,197,191,174, 55,133,177,159,115,134,245, 30,125, 34, 10,101,104,251,
+ 97,236,174,169,185,192, 56,145,113,164, 92, 23,204,171,171, 60,145, 1,155, 6,138,199,246,198,121,154, 42, 4,178,113, 25, 86,
+228,147,178,191, 27, 86,127,124, 33,150, 4, 63, 13,196,204,200,107,100,210,111,241, 25, 43,151, 77,215,247,165,147, 31,226,145,
+ 89,124,170, 93, 25,131, 27, 75, 46,134,196,164,193, 28,184,225, 65,102, 42, 91, 68, 70,228, 28,136,138,167, 31, 25,137, 47, 67,
+ 42,126, 81, 20,249, 2, 11, 42,180,113,173,134, 25,152, 38,209, 23, 24,133,156, 82,228, 6,128, 59, 81,171,139, 46,130,166, 97,
+142, 29, 20,164,223, 0, 39,158,229,190, 37,219, 27, 84,129,194,200,244, 66,192, 72, 18, 93,171, 53, 54, 64,195,138, 82,140,245,
+ 79, 68,134, 36, 69, 60,253,188,110,131,237, 18,252,239,101,133,129,209, 42,154,112,196,125, 57, 19,170,170, 70,232, 19,135, 53,
+229,130,129,158, 39,124,202,100,192, 90, 83,238, 61,197,129, 93,101, 13, 48, 55,141,165, 78,157, 5,138, 74,196,131,154, 67,115,
+134,232, 95,177,157, 90, 99,121,133, 9,252, 95, 84,139,234, 94,223, 17,236,117, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
0};
diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c
index e19f774412b..29cdfffa551 100644
--- a/source/blender/editors/gpencil/drawgpencil.c
+++ b/source/blender/editors/gpencil/drawgpencil.c
@@ -754,7 +754,7 @@ void draw_gpencil_view3d_ext (Scene *scene, View3D *v3d, ARegion *ar, short only
* deal with the camera border, otherwise map the coords to the camera border. */
if(rv3d->persp == RV3D_CAMOB && !(G.f & G_RENDER_OGL)) {
rctf rectf;
- view3d_calc_camera_border(scene, ar, rv3d, v3d, &rectf);
+ view3d_calc_camera_border(scene, ar, rv3d, v3d, &rectf, -1); /* negative shift */
BLI_copy_rcti_rctf(&rect, &rectf);
}
else {
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index 75156571cf4..d42e63bf354 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -141,8 +141,20 @@ static void gp_session_validatebuffer(tGPsdata *p);
/* check if context is suitable for drawing */
static int gpencil_draw_poll (bContext *C)
{
- /* check if current context can support GPencil data */
- return (gpencil_data_get_pointers(C, NULL) != NULL);
+ if(ED_operator_regionactive(C)) {
+ /* check if current context can support GPencil data */
+ if(gpencil_data_get_pointers(C, NULL) != NULL) {
+ return 1;
+ }
+ else {
+ CTX_wm_operator_poll_msg_set(C, "failed to find grease pencil data to draw into");
+ }
+ }
+ else {
+ CTX_wm_operator_poll_msg_set(C, "active region not set");
+ }
+
+ return 0;
}
/* check if projecting strokes into 3d-geometry in the 3D-View */
@@ -890,7 +902,7 @@ static tGPsdata *gp_session_initpaint (bContext *C)
/* for camera view set the subrect */
if(rv3d->persp == RV3D_CAMOB) {
- view3d_calc_camera_border(p->scene, p->ar, NULL, v3d, &p->subrect_data);
+ view3d_calc_camera_border(p->scene, p->ar, NULL, v3d, &p->subrect_data, -1); /* negative shift */
p->subrect= &p->subrect_data;
}
diff --git a/source/blender/editors/include/ED_armature.h b/source/blender/editors/include/ED_armature.h
index 32fe10783a7..3e16cae5527 100644
--- a/source/blender/editors/include/ED_armature.h
+++ b/source/blender/editors/include/ED_armature.h
@@ -91,8 +91,8 @@ typedef struct EditBone
#define BONESEL_NOSEL (1<<31) /* Indicates a negative number */
/* useful macros */
-#define EBONE_VISIBLE(arm, ebone) ((arm->layer & ebone->layer) && !(ebone->flag & BONE_HIDDEN_A))
-#define EBONE_EDITABLE(ebone) ((ebone->flag & BONE_SELECTED) && !(ebone->flag & BONE_EDITMODE_LOCKED))
+#define EBONE_VISIBLE(arm, ebone) (((arm)->layer & (ebone)->layer) && !((ebone)->flag & BONE_HIDDEN_A))
+#define EBONE_EDITABLE(ebone) (((ebone)->flag & BONE_SELECTED) && !((ebone)->flag & BONE_EDITMODE_LOCKED))
/* used in bone_select_hierachy() */
#define BONE_SELECT_PARENT 0
@@ -107,7 +107,8 @@ void ED_keymap_armature(struct wmKeyConfig *keyconf);
void ED_armature_from_edit(struct Object *obedit);
void ED_armature_to_edit(struct Object *ob);
void ED_armature_edit_free(struct Object *ob);
-void ED_armature_deselectall(struct Object *obedit, int toggle);
+void ED_armature_deselect_all(struct Object *obedit, int toggle);
+void ED_armature_deselect_all_visible(struct Object *obedit);
int ED_do_pose_selectbuffer(struct Scene *scene, struct Base *base, unsigned int *buffer,
short hits, short extend);
diff --git a/source/blender/editors/include/ED_image.h b/source/blender/editors/include/ED_image.h
index c5f0983f494..7f507eab276 100644
--- a/source/blender/editors/include/ED_image.h
+++ b/source/blender/editors/include/ED_image.h
@@ -29,6 +29,7 @@
#define ED_IMAGE_H
struct SpaceImage;
+struct Main;
struct bContext;
struct Image;
struct ImageUser;
@@ -61,7 +62,7 @@ int ED_space_image_show_uvedit(struct SpaceImage *sima, struct Object *obedit);
int ED_space_image_show_uvshadow(struct SpaceImage *sima, struct Object *obedit);
/* UI level image (texture) updating... render calls own stuff (too) */
-void ED_image_update_frame(const struct bContext *C);
+void ED_image_update_frame(const struct Main *mainp, int cfra);
/* image_render.c, export for screen_ops.c, render operator */
void ED_space_image_output(struct bContext *C);
diff --git a/source/blender/editors/include/ED_mesh.h b/source/blender/editors/include/ED_mesh.h
index 22779fbba0b..cf0334ce6b3 100644
--- a/source/blender/editors/include/ED_mesh.h
+++ b/source/blender/editors/include/ED_mesh.h
@@ -181,12 +181,13 @@ void EM_deselect_by_material(struct EditMesh *em, int index);
void EM_automerge(struct Scene *scene, struct Object *obedit, int update);
/* editface.c */
+void paintface_flush_flags(struct Object *ob);
struct MTFace *EM_get_active_mtface(struct EditMesh *em, struct EditFace **act_efa, struct MCol **mcol, int sloppy);
-int face_select(struct bContext *C, struct Object *ob, short mval[2], int extend);
-void face_borderselect(struct bContext *C, struct Object *ob, struct rcti *rect, int select, int extend);
-void selectall_tface(struct Object *ob, int action);
-void select_linked_tfaces(struct bContext *C, struct Object *ob, short mval[2], int mode);
-int minmax_tface(struct Object *ob, float *min, float *max);
+int paintface_mouse_select(struct bContext *C, struct Object *ob, short mval[2], int extend);
+int do_paintface_box_select(struct ViewContext *vc, struct rcti *rect, int select, int extend);
+void paintface_deselect_all_visible(struct Object *ob, int action, short flush_flags);
+void paintface_select_linked(struct bContext *C, struct Object *ob, short mval[2], int mode);
+int paintface_minmax(struct Object *ob, float *min, float *max);
/* object_vgroup.c */
diff --git a/source/blender/editors/include/ED_particle.h b/source/blender/editors/include/ED_particle.h
index 87aa7ca9195..f3b65b343ef 100644
--- a/source/blender/editors/include/ED_particle.h
+++ b/source/blender/editors/include/ED_particle.h
@@ -59,7 +59,8 @@ void PE_update_object(struct Scene *scene, struct Object *ob, int useflag);
int PE_mouse_particles(struct bContext *C, short *mval, int extend);
int PE_border_select(struct bContext *C, struct rcti *rect, int select, int extend);
int PE_circle_select(struct bContext *C, int selecting, short *mval, float rad);
-int PE_lasso_select(struct bContext *C, short mcords[][2], short moves, short select);
+int PE_lasso_select(struct bContext *C, short mcords[][2], short moves, short extend, short select);
+void PE_deselect_all_visible(struct PTCacheEdit *edit);
/* undo */
void PE_undo_push(struct Scene *scene, char *str);
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h
index 8b8bb75b8e6..b679ca64a28 100644
--- a/source/blender/editors/include/ED_screen.h
+++ b/source/blender/editors/include/ED_screen.h
@@ -109,7 +109,8 @@ struct ScrArea *ED_screen_full_toggle(struct bContext *C, struct wmWindow *win,
void ED_screen_new_window(struct bContext *C, struct rcti *position, int type);
/* anim */
-void ED_update_for_newframe(const struct bContext *C, int mute);
+void ED_update_for_newframe(struct Main *bmain, struct Scene *scene, struct bScreen *screen, int mute);
+
void ED_refresh_viewport_fps(struct bContext *C);
int ED_screen_animation_play(struct bContext *C, int sync, int mode);
@@ -127,6 +128,7 @@ int ED_operator_scene_editable(struct bContext *C);
int ED_operator_view3d_active(struct bContext *C);
int ED_operator_region_view3d_active(struct bContext *C);
+int ED_operator_animview_active(struct bContext *C);
int ED_operator_timeline_active(struct bContext *C);
int ED_operator_outliner_active(struct bContext *C);
int ED_operator_outliner_active_no_editobject(struct bContext *C);
@@ -142,6 +144,7 @@ int ED_operator_logic_active(struct bContext *C);
int ED_operator_object_active(struct bContext *C);
int ED_operator_object_active_editable(struct bContext *C);
+int ED_operator_object_active_editable_mesh(struct bContext *C);
int ED_operator_editmesh(struct bContext *C);
int ED_operator_editmesh_view3d(struct bContext *C);
int ED_operator_editmesh_region_view3d(struct bContext *C);
diff --git a/source/blender/editors/include/ED_screen_types.h b/source/blender/editors/include/ED_screen_types.h
index 18d6a1a48cc..240075565af 100644
--- a/source/blender/editors/include/ED_screen_types.h
+++ b/source/blender/editors/include/ED_screen_types.h
@@ -52,7 +52,7 @@ enum {
/* don't drop frames (and ignore SCE_FRAME_DROP flag) */
ANIMPLAY_FLAG_NO_SYNC = (1<<3),
/* use nextfra at next timer update */
- ANIMPLAY_FLAG_USE_NEXT_FRAME,
+ ANIMPLAY_FLAG_USE_NEXT_FRAME = (1<<4)
};
/* ----------------------------------------------------- */
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index fe024be29e0..afc6787010a 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -106,7 +106,7 @@ int get_view3d_viewplane(struct View3D *v3d, struct RegionView3D *rv3d, int winx
int get_view3d_ortho(struct View3D *v3d, struct RegionView3D *rv3d);
void view3d_get_object_project_mat(struct RegionView3D *v3d, struct Object *ob, float pmat[4][4]);
void view3d_project_float(struct ARegion *a, float *vec, float *adr, float mat[4][4]);
-void view3d_calc_camera_border(struct Scene *scene, struct ARegion *ar, struct RegionView3D *rv3d, struct View3D *v3d, struct rctf *viewborder_r);
+void view3d_calc_camera_border(struct Scene *scene, struct ARegion *ar, struct RegionView3D *rv3d, struct View3D *v3d, struct rctf *viewborder_r, short do_shift);
/* drawobject.c itterators */
void mesh_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userData, struct EditVert *eve, int x, int y, int index), void *userData, int clipVerts);
@@ -118,6 +118,7 @@ void lattice_foreachScreenVert(struct ViewContext *vc, void (*func)(void *userDa
void ED_view3d_local_clipping(struct RegionView3D *rv3d, float mat[][4]);
int view3d_test_clipping(struct RegionView3D *rv3d, float *vec, int local);
void view3d_align_axis_to_vector(struct View3D *v3d, struct RegionView3D *rv3d, int axisidx, float vec[3]);
+float view3d_pixel_size(struct RegionView3D *rv3d, const float co[3]);
void drawcircball(int mode, float *cent, float rad, float tmat[][4]);
@@ -164,7 +165,6 @@ void ED_view3d_draw_offscreen(struct Scene *scene, struct View3D *v3d, struct AR
struct ImBuf *ED_view3d_draw_offscreen_imbuf(struct Scene *scene, struct View3D *v3d, struct ARegion *ar, int sizex, int sizey, unsigned int flag);
struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, unsigned int flag, int drawtype);
-void view3d_clipping_local(struct RegionView3D *rv3d, float mat[][4]);
Base *ED_view3d_give_base_under_cursor(struct bContext *C, short *mval);
void ED_view3d_quadview_update(struct ScrArea *sa, struct ARegion *ar);
diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h
index 3e8420df7eb..a145df908b9 100644
--- a/source/blender/editors/include/UI_icons.h
+++ b/source/blender/editors/include/UI_icons.h
@@ -30,886 +30,976 @@
once from UI_resources.h for the internal icon enum and
once for interface_api.c for the definition of the RNA enum for the icons */
-DEF_ICON(ICON_BLENDER)
-DEF_ICON(ICON_QUESTION)
-DEF_ICON(ICON_ERROR)
-DEF_ICON(ICON_CANCEL)
-DEF_ICON(ICON_TRIA_RIGHT)
-DEF_ICON(ICON_TRIA_DOWN)
-DEF_ICON(ICON_TRIA_LEFT)
-DEF_ICON(ICON_TRIA_UP)
-DEF_ICON(ICON_ARROW_LEFTRIGHT)
-DEF_ICON(ICON_PLUS)
-DEF_ICON(ICON_DISCLOSURE_TRI_DOWN)
-DEF_ICON(ICON_DISCLOSURE_TRI_RIGHT)
-DEF_ICON(ICON_RADIOBUT_OFF)
-DEF_ICON(ICON_RADIOBUT_ON)
-DEF_ICON(ICON_MENU_PANEL)
-DEF_ICON(ICON_PYTHON)
-DEF_ICON(ICON_BLANK003)
-DEF_ICON(ICON_DOT)
-DEF_ICON(ICON_BLANK004)
-DEF_ICON(ICON_X)
-DEF_ICON(ICON_BLANK005)
-DEF_ICON(ICON_GO_LEFT)
-DEF_ICON(ICON_PLUG)
-DEF_ICON(ICON_UI)
-DEF_ICON(ICON_NODE)
-DEF_ICON(ICON_NODE_SEL)
+/* ICON_ prefix added */
+DEF_ICON(BLENDER)
+DEF_ICON(QUESTION)
+DEF_ICON(ERROR)
+DEF_ICON(CANCEL)
+DEF_ICON(TRIA_RIGHT)
+DEF_ICON(TRIA_DOWN)
+DEF_ICON(TRIA_LEFT)
+DEF_ICON(TRIA_UP)
+DEF_ICON(ARROW_LEFTRIGHT)
+DEF_ICON(PLUS)
+DEF_ICON(DISCLOSURE_TRI_DOWN)
+DEF_ICON(DISCLOSURE_TRI_RIGHT)
+DEF_ICON(RADIOBUT_OFF)
+DEF_ICON(RADIOBUT_ON)
+DEF_ICON(MENU_PANEL)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK002)
+ DEF_ICON(BLANK003)
+#endif
+DEF_ICON(DOT)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK004)
+#endif
+DEF_ICON(X)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK005)
+#endif
+DEF_ICON(GO_LEFT)
+DEF_ICON(PLUG)
+DEF_ICON(UI)
+DEF_ICON(NODE)
+DEF_ICON(NODE_SEL)
/* ui */
-DEF_ICON(ICON_FULLSCREEN)
-DEF_ICON(ICON_SPLITSCREEN)
-DEF_ICON(ICON_RIGHTARROW_THIN)
-DEF_ICON(ICON_BORDERMOVE)
-DEF_ICON(ICON_VIEWZOOM)
-DEF_ICON(ICON_ZOOMIN)
-DEF_ICON(ICON_ZOOMOUT)
-DEF_ICON(ICON_PANEL_CLOSE)
-DEF_ICON(ICON_COPY_ID) //ICON_BLANK009
-DEF_ICON(ICON_EYEDROPPER)
-DEF_ICON(ICON_LINK_AREA) //ICON_BLANK010
-DEF_ICON(ICON_AUTO)
-DEF_ICON(ICON_CHECKBOX_DEHLT)
-DEF_ICON(ICON_CHECKBOX_HLT)
-DEF_ICON(ICON_UNLOCKED)
-DEF_ICON(ICON_LOCKED)
-DEF_ICON(ICON_UNPINNED)
-DEF_ICON(ICON_PINNED)
-DEF_ICON(ICON_SCREEN_BACK)
-DEF_ICON(ICON_RIGHTARROW)
-DEF_ICON(ICON_DOWNARROW_HLT)
-DEF_ICON(ICON_DOTSUP)
-DEF_ICON(ICON_DOTSDOWN)
-DEF_ICON(ICON_LINK)
-DEF_ICON(ICON_INLINK)
-DEF_ICON(ICON_PLUGIN)
+DEF_ICON(FULLSCREEN)
+DEF_ICON(SPLITSCREEN)
+DEF_ICON(RIGHTARROW_THIN)
+DEF_ICON(BORDERMOVE)
+DEF_ICON(VIEWZOOM)
+DEF_ICON(ZOOMIN)
+DEF_ICON(ZOOMOUT)
+DEF_ICON(PANEL_CLOSE)
+DEF_ICON(COPY_ID) //ICON_BLANK009
+DEF_ICON(EYEDROPPER)
+DEF_ICON(LINK_AREA) //ICON_BLANK010
+DEF_ICON(AUTO)
+DEF_ICON(CHECKBOX_DEHLT)
+DEF_ICON(CHECKBOX_HLT)
+DEF_ICON(UNLOCKED)
+DEF_ICON(LOCKED)
+DEF_ICON(UNPINNED)
+DEF_ICON(PINNED)
+DEF_ICON(SCREEN_BACK)
+DEF_ICON(RIGHTARROW)
+DEF_ICON(DOWNARROW_HLT)
+DEF_ICON(DOTSUP)
+DEF_ICON(DOTSDOWN)
+DEF_ICON(LINK)
+DEF_ICON(INLINK)
+DEF_ICON(PLUGIN)
/* various ui */
-DEF_ICON(ICON_HELP)
-DEF_ICON(ICON_GHOST_ENABLED)
-DEF_ICON(ICON_COLOR)
-DEF_ICON(ICON_LINKED)
-DEF_ICON(ICON_UNLINKED)
-DEF_ICON(ICON_HAND)
-DEF_ICON(ICON_ZOOM_ALL)
-DEF_ICON(ICON_ZOOM_SELECTED)
-DEF_ICON(ICON_ZOOM_PREVIOUS)
-DEF_ICON(ICON_ZOOM_IN)
-DEF_ICON(ICON_ZOOM_OUT)
-DEF_ICON(ICON_RENDER_REGION)
-DEF_ICON(ICON_BORDER_RECT)
-DEF_ICON(ICON_BORDER_LASSO)
-DEF_ICON(ICON_FREEZE)
-DEF_ICON(ICON_STYLUS_PRESSURE)
-DEF_ICON(ICON_GHOST_DISABLED)
-DEF_ICON(ICON_NEW)
-DEF_ICON(ICON_FILE_TICK)
-DEF_ICON(ICON_QUIT)
-DEF_ICON(ICON_URL)
-DEF_ICON(ICON_RECOVER_LAST)
-DEF_ICON(ICON_BLANK038)
-DEF_ICON(ICON_FULLSCREEN_ENTER)
-DEF_ICON(ICON_FULLSCREEN_EXIT)
-DEF_ICON(ICON_BLANK1) // Not actually blank - this is used all over the place
+DEF_ICON(HELP)
+DEF_ICON(GHOST_ENABLED)
+DEF_ICON(COLOR)
+DEF_ICON(LINKED)
+DEF_ICON(UNLINKED)
+DEF_ICON(HAND)
+DEF_ICON(ZOOM_ALL)
+DEF_ICON(ZOOM_SELECTED)
+DEF_ICON(ZOOM_PREVIOUS)
+DEF_ICON(ZOOM_IN)
+DEF_ICON(ZOOM_OUT)
+DEF_ICON(RENDER_REGION)
+DEF_ICON(BORDER_RECT)
+DEF_ICON(BORDER_LASSO)
+DEF_ICON(FREEZE)
+DEF_ICON(STYLUS_PRESSURE)
+DEF_ICON(GHOST_DISABLED)
+DEF_ICON(NEW)
+DEF_ICON(FILE_TICK)
+DEF_ICON(QUIT)
+DEF_ICON(URL)
+DEF_ICON(RECOVER_LAST)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK038)
+#endif
+DEF_ICON(FULLSCREEN_ENTER)
+DEF_ICON(FULLSCREEN_EXIT)
+DEF_ICON(BLANK1) // Not actually blank - this is used all over the place
/* BUTTONS */
-DEF_ICON(ICON_LAMP)
-DEF_ICON(ICON_MATERIAL)
-DEF_ICON(ICON_TEXTURE)
-DEF_ICON(ICON_ANIM)
-DEF_ICON(ICON_WORLD)
-DEF_ICON(ICON_SCENE)
-DEF_ICON(ICON_EDIT)
-DEF_ICON(ICON_GAME)
-DEF_ICON(ICON_RADIO)
-DEF_ICON(ICON_SCRIPT)
-DEF_ICON(ICON_PARTICLES)
-DEF_ICON(ICON_PHYSICS)
-DEF_ICON(ICON_SPEAKER)
-DEF_ICON(ICON_TEXTURE_SHADED) //ICON_BLANK041
-DEF_ICON(ICON_BLANK042)
-DEF_ICON(ICON_BLANK043)
-DEF_ICON(ICON_BLANK044)
-DEF_ICON(ICON_BLANK045)
-DEF_ICON(ICON_BLANK046)
-DEF_ICON(ICON_BLANK047)
-DEF_ICON(ICON_BLANK048)
-DEF_ICON(ICON_BLANK049)
-DEF_ICON(ICON_BLANK050)
-DEF_ICON(ICON_BLANK051)
-DEF_ICON(ICON_BLANK052)
-DEF_ICON(ICON_BLANK052b)
-
+DEF_ICON(LAMP)
+DEF_ICON(MATERIAL)
+DEF_ICON(TEXTURE)
+DEF_ICON(ANIM)
+DEF_ICON(WORLD)
+DEF_ICON(SCENE)
+DEF_ICON(EDIT)
+DEF_ICON(GAME)
+DEF_ICON(RADIO)
+DEF_ICON(SCRIPT)
+DEF_ICON(PARTICLES)
+DEF_ICON(PHYSICS)
+DEF_ICON(SPEAKER)
+DEF_ICON(TEXTURE_SHADED) //ICON_BLANK041
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK042)
+ DEF_ICON(BLANK043)
+ DEF_ICON(BLANK044)
+ DEF_ICON(BLANK045)
+ DEF_ICON(BLANK046)
+ DEF_ICON(BLANK047)
+ DEF_ICON(BLANK048)
+ DEF_ICON(BLANK049)
+ DEF_ICON(BLANK050)
+ DEF_ICON(BLANK051)
+ DEF_ICON(BLANK052)
+ DEF_ICON(BLANK052b)
+#endif
/* EDITORS */
-DEF_ICON(ICON_VIEW3D)
-DEF_ICON(ICON_IPO)
-DEF_ICON(ICON_OOPS)
-DEF_ICON(ICON_BUTS)
-DEF_ICON(ICON_FILESEL)
-DEF_ICON(ICON_IMAGE_COL)
-DEF_ICON(ICON_INFO)
-DEF_ICON(ICON_SEQUENCE)
-DEF_ICON(ICON_TEXT)
-DEF_ICON(ICON_IMASEL)
-DEF_ICON(ICON_SOUND)
-DEF_ICON(ICON_ACTION)
-DEF_ICON(ICON_NLA)
-DEF_ICON(ICON_SCRIPTWIN)
-DEF_ICON(ICON_TIME)
-DEF_ICON(ICON_NODETREE)
-DEF_ICON(ICON_LOGIC)
-DEF_ICON(ICON_CONSOLE)
-DEF_ICON(ICON_PREFERENCES)
-DEF_ICON(ICON_ASSET_MANAGER)
-DEF_ICON(ICON_BLANK057)
-DEF_ICON(ICON_BLANK058)
-DEF_ICON(ICON_BLANK059)
-DEF_ICON(ICON_BLANK060)
-DEF_ICON(ICON_BLANK061)
-DEF_ICON(ICON_BLANK061b)
-
+DEF_ICON(VIEW3D)
+DEF_ICON(IPO)
+DEF_ICON(OOPS)
+DEF_ICON(BUTS)
+DEF_ICON(FILESEL)
+DEF_ICON(IMAGE_COL)
+DEF_ICON(INFO)
+DEF_ICON(SEQUENCE)
+DEF_ICON(TEXT)
+DEF_ICON(IMASEL)
+DEF_ICON(SOUND)
+DEF_ICON(ACTION)
+DEF_ICON(NLA)
+DEF_ICON(SCRIPTWIN)
+DEF_ICON(TIME)
+DEF_ICON(NODETREE)
+DEF_ICON(LOGIC)
+DEF_ICON(CONSOLE)
+DEF_ICON(PREFERENCES)
+DEF_ICON(ASSET_MANAGER)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK057)
+ DEF_ICON(BLANK058)
+ DEF_ICON(BLANK059)
+ DEF_ICON(BLANK060)
+ DEF_ICON(BLANK061)
+ DEF_ICON(BLANK061b)
+#endif
+
/* MODES */
-DEF_ICON(ICON_OBJECT_DATAMODE) // XXX fix this up
-DEF_ICON(ICON_EDITMODE_HLT)
-DEF_ICON(ICON_FACESEL_HLT)
-DEF_ICON(ICON_VPAINT_HLT)
-DEF_ICON(ICON_TPAINT_HLT)
-DEF_ICON(ICON_WPAINT_HLT)
-DEF_ICON(ICON_SCULPTMODE_HLT)
-DEF_ICON(ICON_POSE_HLT)
-DEF_ICON(ICON_PARTICLEMODE)
-DEF_ICON(ICON_LIGHTPAINT)
-DEF_ICON(ICON_BLANK063)
-DEF_ICON(ICON_BLANK064)
-DEF_ICON(ICON_BLANK065)
-DEF_ICON(ICON_BLANK066)
-DEF_ICON(ICON_BLANK067)
-DEF_ICON(ICON_BLANK068)
-DEF_ICON(ICON_BLANK069)
-DEF_ICON(ICON_BLANK070)
-DEF_ICON(ICON_BLANK071)
-DEF_ICON(ICON_BLANK072)
-DEF_ICON(ICON_BLANK073)
-DEF_ICON(ICON_BLANK074)
-DEF_ICON(ICON_BLANK075)
-DEF_ICON(ICON_BLANK076)
-DEF_ICON(ICON_BLANK077)
-DEF_ICON(ICON_BLANK077b)
+DEF_ICON(OBJECT_DATAMODE) // XXX fix this up
+DEF_ICON(EDITMODE_HLT)
+DEF_ICON(FACESEL_HLT)
+DEF_ICON(VPAINT_HLT)
+DEF_ICON(TPAINT_HLT)
+DEF_ICON(WPAINT_HLT)
+DEF_ICON(SCULPTMODE_HLT)
+DEF_ICON(POSE_HLT)
+DEF_ICON(PARTICLEMODE)
+DEF_ICON(LIGHTPAINT)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK063)
+ DEF_ICON(BLANK064)
+ DEF_ICON(BLANK065)
+ DEF_ICON(BLANK066)
+ DEF_ICON(BLANK067)
+ DEF_ICON(BLANK068)
+ DEF_ICON(BLANK069)
+ DEF_ICON(BLANK070)
+ DEF_ICON(BLANK071)
+ DEF_ICON(BLANK072)
+ DEF_ICON(BLANK073)
+ DEF_ICON(BLANK074)
+ DEF_ICON(BLANK075)
+ DEF_ICON(BLANK076)
+ DEF_ICON(BLANK077)
+ DEF_ICON(BLANK077b)
+#endif
/* DATA */
-DEF_ICON(ICON_SCENE_DATA)
-DEF_ICON(ICON_RENDERLAYERS)
-DEF_ICON(ICON_WORLD_DATA)
-DEF_ICON(ICON_OBJECT_DATA)
-DEF_ICON(ICON_MESH_DATA)
-DEF_ICON(ICON_CURVE_DATA)
-DEF_ICON(ICON_META_DATA)
-DEF_ICON(ICON_LATTICE_DATA)
-DEF_ICON(ICON_LAMP_DATA)
-DEF_ICON(ICON_MATERIAL_DATA)
-DEF_ICON(ICON_TEXTURE_DATA)
-DEF_ICON(ICON_ANIM_DATA)
-DEF_ICON(ICON_CAMERA_DATA)
-DEF_ICON(ICON_PARTICLE_DATA)
-DEF_ICON(ICON_LIBRARY_DATA_DIRECT)
-DEF_ICON(ICON_GROUP)
-DEF_ICON(ICON_ARMATURE_DATA)
-DEF_ICON(ICON_POSE_DATA)
-DEF_ICON(ICON_BONE_DATA)
-DEF_ICON(ICON_CONSTRAINT)
-DEF_ICON(ICON_SHAPEKEY_DATA)
-DEF_ICON(ICON_CONSTRAINT_BONE)
-DEF_ICON(ICON_BLANK079)
-DEF_ICON(ICON_PACKAGE)
-DEF_ICON(ICON_UGLYPACKAGE)
-DEF_ICON(ICON_BLANK079b)
+DEF_ICON(SCENE_DATA)
+DEF_ICON(RENDERLAYERS)
+DEF_ICON(WORLD_DATA)
+DEF_ICON(OBJECT_DATA)
+DEF_ICON(MESH_DATA)
+DEF_ICON(CURVE_DATA)
+DEF_ICON(META_DATA)
+DEF_ICON(LATTICE_DATA)
+DEF_ICON(LAMP_DATA)
+DEF_ICON(MATERIAL_DATA)
+DEF_ICON(TEXTURE_DATA)
+DEF_ICON(ANIM_DATA)
+DEF_ICON(CAMERA_DATA)
+DEF_ICON(PARTICLE_DATA)
+DEF_ICON(LIBRARY_DATA_DIRECT)
+DEF_ICON(GROUP)
+DEF_ICON(ARMATURE_DATA)
+DEF_ICON(POSE_DATA)
+DEF_ICON(BONE_DATA)
+DEF_ICON(CONSTRAINT)
+DEF_ICON(SHAPEKEY_DATA)
+DEF_ICON(CONSTRAINT_BONE)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK079)
+#endif
+DEF_ICON(PACKAGE)
+DEF_ICON(UGLYPACKAGE)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK079b)
+#endif
/* DATA */
-DEF_ICON(ICON_BRUSH_DATA)
-DEF_ICON(ICON_IMAGE_DATA)
-DEF_ICON(ICON_FILE)
-DEF_ICON(ICON_FCURVE)
-DEF_ICON(ICON_FONT_DATA)
-DEF_ICON(ICON_RENDER_RESULT)
-DEF_ICON(ICON_SURFACE_DATA)
-DEF_ICON(ICON_EMPTY_DATA)
-DEF_ICON(ICON_SETTINGS)
-DEF_ICON(ICON_RENDER_ANIMATION)
-DEF_ICON(ICON_RENDER_STILL)
-DEF_ICON(ICON_BLANK080F)
-DEF_ICON(ICON_BOIDS)
-DEF_ICON(ICON_STRANDS)
-DEF_ICON(ICON_LIBRARY_DATA_INDIRECT)
-DEF_ICON(ICON_GREASEPENCIL)
-DEF_ICON(ICON_BLANK083)
-DEF_ICON(ICON_BLANK084)
-DEF_ICON(ICON_GROUP_BONE)
-DEF_ICON(ICON_GROUP_VERTEX)
-DEF_ICON(ICON_GROUP_VCOL)
-DEF_ICON(ICON_GROUP_UVS)
-DEF_ICON(ICON_BLANK089)
-DEF_ICON(ICON_BLANK090)
-DEF_ICON(ICON_RNA)
-DEF_ICON(ICON_RNA_ADD)
+DEF_ICON(BRUSH_DATA)
+DEF_ICON(IMAGE_DATA)
+DEF_ICON(FILE)
+DEF_ICON(FCURVE)
+DEF_ICON(FONT_DATA)
+DEF_ICON(RENDER_RESULT)
+DEF_ICON(SURFACE_DATA)
+DEF_ICON(EMPTY_DATA)
+DEF_ICON(SETTINGS)
+DEF_ICON(RENDER_ANIMATION)
+DEF_ICON(RENDER_STILL)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK080F)
+#endif
+DEF_ICON(BOIDS)
+DEF_ICON(STRANDS)
+DEF_ICON(LIBRARY_DATA_INDIRECT)
+DEF_ICON(GREASEPENCIL)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK083)
+ DEF_ICON(BLANK084)
+#endif
+DEF_ICON(GROUP_BONE)
+DEF_ICON(GROUP_VERTEX)
+DEF_ICON(GROUP_VCOL)
+DEF_ICON(GROUP_UVS)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK089)
+ DEF_ICON(BLANK090)
+#endif
+DEF_ICON(RNA)
+DEF_ICON(RNA_ADD)
/* available */
-DEF_ICON(ICON_BLANK092)
-DEF_ICON(ICON_BLANK093)
-DEF_ICON(ICON_BLANK094)
-DEF_ICON(ICON_BLANK095)
-DEF_ICON(ICON_BLANK096)
-DEF_ICON(ICON_BLANK097)
-DEF_ICON(ICON_BLANK098)
-DEF_ICON(ICON_BLANK099)
-DEF_ICON(ICON_BLANK100)
-DEF_ICON(ICON_BLANK101)
-DEF_ICON(ICON_BLANK102)
-DEF_ICON(ICON_BLANK103)
-DEF_ICON(ICON_BLANK104)
-DEF_ICON(ICON_BLANK105)
-DEF_ICON(ICON_BLANK106)
-DEF_ICON(ICON_BLANK107)
-DEF_ICON(ICON_BLANK108)
-DEF_ICON(ICON_BLANK109)
-DEF_ICON(ICON_BLANK110)
-DEF_ICON(ICON_BLANK111)
-DEF_ICON(ICON_BLANK112)
-DEF_ICON(ICON_BLANK113)
-DEF_ICON(ICON_BLANK114)
-DEF_ICON(ICON_BLANK115)
-DEF_ICON(ICON_BLANK116)
-DEF_ICON(ICON_BLANK116b)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK092)
+ DEF_ICON(BLANK093)
+ DEF_ICON(BLANK094)
+ DEF_ICON(BLANK095)
+ DEF_ICON(BLANK096)
+ DEF_ICON(BLANK097)
+ DEF_ICON(BLANK098)
+ DEF_ICON(BLANK099)
+ DEF_ICON(BLANK100)
+ DEF_ICON(BLANK101)
+ DEF_ICON(BLANK102)
+ DEF_ICON(BLANK103)
+ DEF_ICON(BLANK104)
+ DEF_ICON(BLANK105)
+ DEF_ICON(BLANK106)
+ DEF_ICON(BLANK107)
+ DEF_ICON(BLANK108)
+ DEF_ICON(BLANK109)
+ DEF_ICON(BLANK110)
+ DEF_ICON(BLANK111)
+ DEF_ICON(BLANK112)
+ DEF_ICON(BLANK113)
+ DEF_ICON(BLANK114)
+ DEF_ICON(BLANK115)
+ DEF_ICON(BLANK116)
+ DEF_ICON(BLANK116b)
+#endif
/* OUTLINER */
-DEF_ICON(ICON_OUTLINER_OB_EMPTY)
-DEF_ICON(ICON_OUTLINER_OB_MESH)
-DEF_ICON(ICON_OUTLINER_OB_CURVE)
-DEF_ICON(ICON_OUTLINER_OB_LATTICE)
-DEF_ICON(ICON_OUTLINER_OB_META)
-DEF_ICON(ICON_OUTLINER_OB_LAMP)
-DEF_ICON(ICON_OUTLINER_OB_CAMERA)
-DEF_ICON(ICON_OUTLINER_OB_ARMATURE)
-DEF_ICON(ICON_OUTLINER_OB_FONT)
-DEF_ICON(ICON_OUTLINER_OB_SURFACE)
-DEF_ICON(ICON_BLANK119)
-DEF_ICON(ICON_BLANK120)
-DEF_ICON(ICON_BLANK121)
-DEF_ICON(ICON_BLANK122)
-DEF_ICON(ICON_BLANK123)
-DEF_ICON(ICON_BLANK124)
-DEF_ICON(ICON_BLANK125)
-DEF_ICON(ICON_BLANK126)
-DEF_ICON(ICON_BLANK127)
-DEF_ICON(ICON_RESTRICT_VIEW_OFF)
-DEF_ICON(ICON_RESTRICT_VIEW_ON)
-DEF_ICON(ICON_RESTRICT_SELECT_OFF)
-DEF_ICON(ICON_RESTRICT_SELECT_ON)
-DEF_ICON(ICON_RESTRICT_RENDER_OFF)
-DEF_ICON(ICON_RESTRICT_RENDER_ON)
-DEF_ICON(ICON_BLANK127b)
+DEF_ICON(OUTLINER_OB_EMPTY)
+DEF_ICON(OUTLINER_OB_MESH)
+DEF_ICON(OUTLINER_OB_CURVE)
+DEF_ICON(OUTLINER_OB_LATTICE)
+DEF_ICON(OUTLINER_OB_META)
+DEF_ICON(OUTLINER_OB_LAMP)
+DEF_ICON(OUTLINER_OB_CAMERA)
+DEF_ICON(OUTLINER_OB_ARMATURE)
+DEF_ICON(OUTLINER_OB_FONT)
+DEF_ICON(OUTLINER_OB_SURFACE)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK119)
+ DEF_ICON(BLANK120)
+ DEF_ICON(BLANK121)
+ DEF_ICON(BLANK122)
+ DEF_ICON(BLANK123)
+ DEF_ICON(BLANK124)
+ DEF_ICON(BLANK125)
+ DEF_ICON(BLANK126)
+ DEF_ICON(BLANK127)
+#endif
+DEF_ICON(RESTRICT_VIEW_OFF)
+DEF_ICON(RESTRICT_VIEW_ON)
+DEF_ICON(RESTRICT_SELECT_OFF)
+DEF_ICON(RESTRICT_SELECT_ON)
+DEF_ICON(RESTRICT_RENDER_OFF)
+DEF_ICON(RESTRICT_RENDER_ON)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK127b)
+#endif
/* OUTLINER */
-DEF_ICON(ICON_OUTLINER_DATA_EMPTY)
-DEF_ICON(ICON_OUTLINER_DATA_MESH)
-DEF_ICON(ICON_OUTLINER_DATA_CURVE)
-DEF_ICON(ICON_OUTLINER_DATA_LATTICE)
-DEF_ICON(ICON_OUTLINER_DATA_META)
-DEF_ICON(ICON_OUTLINER_DATA_LAMP)
-DEF_ICON(ICON_OUTLINER_DATA_CAMERA)
-DEF_ICON(ICON_OUTLINER_DATA_ARMATURE)
-DEF_ICON(ICON_OUTLINER_DATA_FONT)
-DEF_ICON(ICON_OUTLINER_DATA_SURFACE)
-DEF_ICON(ICON_OUTLINER_DATA_POSE)
-DEF_ICON(ICON_BLANK129)
-DEF_ICON(ICON_BLANK130)
-DEF_ICON(ICON_BLANK131)
-DEF_ICON(ICON_BLANK132)
-DEF_ICON(ICON_BLANK133)
-DEF_ICON(ICON_BLANK134)
-DEF_ICON(ICON_BLANK135)
-DEF_ICON(ICON_BLANK136)
-DEF_ICON(ICON_BLANK137)
-DEF_ICON(ICON_BLANK138)
-DEF_ICON(ICON_BLANK139)
-DEF_ICON(ICON_BLANK140)
-DEF_ICON(ICON_BLANK141)
-DEF_ICON(ICON_BLANK142)
-DEF_ICON(ICON_BLANK142b)
+DEF_ICON(OUTLINER_DATA_EMPTY)
+DEF_ICON(OUTLINER_DATA_MESH)
+DEF_ICON(OUTLINER_DATA_CURVE)
+DEF_ICON(OUTLINER_DATA_LATTICE)
+DEF_ICON(OUTLINER_DATA_META)
+DEF_ICON(OUTLINER_DATA_LAMP)
+DEF_ICON(OUTLINER_DATA_CAMERA)
+DEF_ICON(OUTLINER_DATA_ARMATURE)
+DEF_ICON(OUTLINER_DATA_FONT)
+DEF_ICON(OUTLINER_DATA_SURFACE)
+DEF_ICON(OUTLINER_DATA_POSE)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK129)
+ DEF_ICON(BLANK130)
+ DEF_ICON(BLANK131)
+ DEF_ICON(BLANK132)
+ DEF_ICON(BLANK133)
+ DEF_ICON(BLANK134)
+ DEF_ICON(BLANK135)
+ DEF_ICON(BLANK136)
+ DEF_ICON(BLANK137)
+ DEF_ICON(BLANK138)
+ DEF_ICON(BLANK139)
+ DEF_ICON(BLANK140)
+ DEF_ICON(BLANK141)
+ DEF_ICON(BLANK142)
+ DEF_ICON(BLANK142b)
+#endif
/* PRIMITIVES */
-DEF_ICON(ICON_MESH_PLANE)
-DEF_ICON(ICON_MESH_CUBE)
-DEF_ICON(ICON_MESH_CIRCLE)
-DEF_ICON(ICON_MESH_UVSPHERE)
-DEF_ICON(ICON_MESH_ICOSPHERE)
-DEF_ICON(ICON_MESH_GRID)
-DEF_ICON(ICON_MESH_MONKEY)
-DEF_ICON(ICON_MESH_CYLINDER)
-DEF_ICON(ICON_MESH_TORUS)
-DEF_ICON(ICON_MESH_CONE)
-DEF_ICON(ICON_BLANK610)
-DEF_ICON(ICON_BLANK611)
-DEF_ICON(ICON_LAMP_POINT)
-DEF_ICON(ICON_LAMP_SUN)
-DEF_ICON(ICON_LAMP_SPOT)
-DEF_ICON(ICON_LAMP_HEMI)
-DEF_ICON(ICON_LAMP_AREA)
-DEF_ICON(ICON_BLANK617)
-DEF_ICON(ICON_BLANK618)
-DEF_ICON(ICON_BLANK619)
-DEF_ICON(ICON_META_PLANE)
-DEF_ICON(ICON_META_CUBE)
-DEF_ICON(ICON_META_BALL)
-DEF_ICON(ICON_META_ELLIPSOID)
-DEF_ICON(ICON_META_CAPSULE)
-DEF_ICON(ICON_BLANK625)
+DEF_ICON(MESH_PLANE)
+DEF_ICON(MESH_CUBE)
+DEF_ICON(MESH_CIRCLE)
+DEF_ICON(MESH_UVSPHERE)
+DEF_ICON(MESH_ICOSPHERE)
+DEF_ICON(MESH_GRID)
+DEF_ICON(MESH_MONKEY)
+DEF_ICON(MESH_CYLINDER)
+DEF_ICON(MESH_TORUS)
+DEF_ICON(MESH_CONE)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK610)
+ DEF_ICON(BLANK611)
+#endif
+DEF_ICON(LAMP_POINT)
+DEF_ICON(LAMP_SUN)
+DEF_ICON(LAMP_SPOT)
+DEF_ICON(LAMP_HEMI)
+DEF_ICON(LAMP_AREA)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK617)
+ DEF_ICON(BLANK618)
+ DEF_ICON(BLANK619)
+#endif
+DEF_ICON(META_PLANE)
+DEF_ICON(META_CUBE)
+DEF_ICON(META_BALL)
+DEF_ICON(META_ELLIPSOID)
+DEF_ICON(META_CAPSULE)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK625)
+#endif
/* PRIMITIVES */
-DEF_ICON(ICON_SURFACE_NCURVE)
-DEF_ICON(ICON_SURFACE_NCIRCLE)
-DEF_ICON(ICON_SURFACE_NSURFACE)
-DEF_ICON(ICON_SURFACE_NCYLINDER)
-DEF_ICON(ICON_SURFACE_NSPHERE)
-DEF_ICON(ICON_SURFACE_NTORUS)
-DEF_ICON(ICON_BLANK636)
-DEF_ICON(ICON_BLANK637)
-DEF_ICON(ICON_BLANK638)
-DEF_ICON(ICON_CURVE_BEZCURVE)
-DEF_ICON(ICON_CURVE_BEZCIRCLE)
-DEF_ICON(ICON_CURVE_NCURVE)
-DEF_ICON(ICON_CURVE_NCIRCLE)
-DEF_ICON(ICON_CURVE_PATH)
-DEF_ICON(ICON_BLANK644)
-DEF_ICON(ICON_BLANK645)
-DEF_ICON(ICON_BLANK646)
-DEF_ICON(ICON_BLANK647)
-DEF_ICON(ICON_BLANK648)
-DEF_ICON(ICON_BLANK649)
-DEF_ICON(ICON_BLANK650)
-DEF_ICON(ICON_BLANK651)
-DEF_ICON(ICON_BLANK652)
-DEF_ICON(ICON_BLANK653)
-DEF_ICON(ICON_BLANK654)
-DEF_ICON(ICON_BLANK655)
+DEF_ICON(SURFACE_NCURVE)
+DEF_ICON(SURFACE_NCIRCLE)
+DEF_ICON(SURFACE_NSURFACE)
+DEF_ICON(SURFACE_NCYLINDER)
+DEF_ICON(SURFACE_NSPHERE)
+DEF_ICON(SURFACE_NTORUS)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK636)
+ DEF_ICON(BLANK637)
+ DEF_ICON(BLANK638)
+#endif
+DEF_ICON(CURVE_BEZCURVE)
+DEF_ICON(CURVE_BEZCIRCLE)
+DEF_ICON(CURVE_NCURVE)
+DEF_ICON(CURVE_NCIRCLE)
+DEF_ICON(CURVE_PATH)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK644)
+ DEF_ICON(BLANK645)
+ DEF_ICON(BLANK646)
+ DEF_ICON(BLANK647)
+ DEF_ICON(BLANK648)
+ DEF_ICON(BLANK649)
+ DEF_ICON(BLANK650)
+ DEF_ICON(BLANK651)
+ DEF_ICON(BLANK652)
+ DEF_ICON(BLANK653)
+ DEF_ICON(BLANK654)
+ DEF_ICON(BLANK655)
+#endif
/* EMPTY */
-DEF_ICON(ICON_FORCE_FORCE)
-DEF_ICON(ICON_FORCE_WIND)
-DEF_ICON(ICON_FORCE_VORTEX)
-DEF_ICON(ICON_FORCE_MAGNETIC)
-DEF_ICON(ICON_FORCE_HARMONIC)
-DEF_ICON(ICON_FORCE_CHARGE)
-DEF_ICON(ICON_FORCE_LENNARDJONES)
-DEF_ICON(ICON_FORCE_TEXTURE)
-DEF_ICON(ICON_FORCE_CURVE)
-DEF_ICON(ICON_FORCE_BOID)
-DEF_ICON(ICON_FORCE_TURBULENCE)
-DEF_ICON(ICON_FORCE_DRAG)
-DEF_ICON(ICON_BLANK672)
-DEF_ICON(ICON_BLANK673)
-DEF_ICON(ICON_BLANK674)
-DEF_ICON(ICON_BLANK675)
-DEF_ICON(ICON_BLANK676)
-DEF_ICON(ICON_BLANK677)
-DEF_ICON(ICON_BLANK678)
-DEF_ICON(ICON_BLANK679)
-DEF_ICON(ICON_BLANK680)
-DEF_ICON(ICON_BLANK681)
-DEF_ICON(ICON_BLANK682)
-DEF_ICON(ICON_BLANK683)
-DEF_ICON(ICON_BLANK684)
-DEF_ICON(ICON_BLANK685)
+DEF_ICON(FORCE_FORCE)
+DEF_ICON(FORCE_WIND)
+DEF_ICON(FORCE_VORTEX)
+DEF_ICON(FORCE_MAGNETIC)
+DEF_ICON(FORCE_HARMONIC)
+DEF_ICON(FORCE_CHARGE)
+DEF_ICON(FORCE_LENNARDJONES)
+DEF_ICON(FORCE_TEXTURE)
+DEF_ICON(FORCE_CURVE)
+DEF_ICON(FORCE_BOID)
+DEF_ICON(FORCE_TURBULENCE)
+DEF_ICON(FORCE_DRAG)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK672)
+ DEF_ICON(BLANK673)
+ DEF_ICON(BLANK674)
+ DEF_ICON(BLANK675)
+ DEF_ICON(BLANK676)
+ DEF_ICON(BLANK677)
+ DEF_ICON(BLANK678)
+ DEF_ICON(BLANK679)
+ DEF_ICON(BLANK680)
+ DEF_ICON(BLANK681)
+ DEF_ICON(BLANK682)
+ DEF_ICON(BLANK683)
+ DEF_ICON(BLANK684)
+ DEF_ICON(BLANK685)
/* EMPTY */
-DEF_ICON(ICON_BLANK690)
-DEF_ICON(ICON_BLANK691)
-DEF_ICON(ICON_BLANK692)
-DEF_ICON(ICON_BLANK693)
-DEF_ICON(ICON_BLANK694)
-DEF_ICON(ICON_BLANK695)
-DEF_ICON(ICON_BLANK696)
-DEF_ICON(ICON_BLANK697)
-DEF_ICON(ICON_BLANK698)
-DEF_ICON(ICON_BLANK699)
-DEF_ICON(ICON_BLANK700)
-DEF_ICON(ICON_BLANK701)
-DEF_ICON(ICON_BLANK702)
-DEF_ICON(ICON_BLANK703)
-DEF_ICON(ICON_BLANK704)
-DEF_ICON(ICON_BLANK705)
-DEF_ICON(ICON_BLANK706)
-DEF_ICON(ICON_BLANK707)
-DEF_ICON(ICON_BLANK708)
-DEF_ICON(ICON_BLANK709)
-DEF_ICON(ICON_BLANK710)
-DEF_ICON(ICON_BLANK711)
-DEF_ICON(ICON_BLANK712)
-DEF_ICON(ICON_BLANK713)
-DEF_ICON(ICON_BLANK714)
-DEF_ICON(ICON_BLANK715)
+ DEF_ICON(BLANK690)
+ DEF_ICON(BLANK691)
+ DEF_ICON(BLANK692)
+ DEF_ICON(BLANK693)
+ DEF_ICON(BLANK694)
+ DEF_ICON(BLANK695)
+ DEF_ICON(BLANK696)
+ DEF_ICON(BLANK697)
+ DEF_ICON(BLANK698)
+ DEF_ICON(BLANK699)
+ DEF_ICON(BLANK700)
+ DEF_ICON(BLANK701)
+ DEF_ICON(BLANK702)
+ DEF_ICON(BLANK703)
+ DEF_ICON(BLANK704)
+ DEF_ICON(BLANK705)
+ DEF_ICON(BLANK706)
+ DEF_ICON(BLANK707)
+ DEF_ICON(BLANK708)
+ DEF_ICON(BLANK709)
+ DEF_ICON(BLANK710)
+ DEF_ICON(BLANK711)
+ DEF_ICON(BLANK712)
+ DEF_ICON(BLANK713)
+ DEF_ICON(BLANK714)
+ DEF_ICON(BLANK715)
/* EMPTY */
-DEF_ICON(ICON_BLANK720)
-DEF_ICON(ICON_BLANK721)
-DEF_ICON(ICON_BLANK722)
-DEF_ICON(ICON_BLANK733)
-DEF_ICON(ICON_BLANK734)
-DEF_ICON(ICON_BLANK735)
-DEF_ICON(ICON_BLANK736)
-DEF_ICON(ICON_BLANK737)
-DEF_ICON(ICON_BLANK738)
-DEF_ICON(ICON_BLANK739)
-DEF_ICON(ICON_BLANK740)
-DEF_ICON(ICON_BLANK741)
-DEF_ICON(ICON_BLANK742)
-DEF_ICON(ICON_BLANK743)
-DEF_ICON(ICON_BLANK744)
-DEF_ICON(ICON_BLANK745)
-DEF_ICON(ICON_BLANK746)
-DEF_ICON(ICON_BLANK747)
-DEF_ICON(ICON_BLANK748)
-DEF_ICON(ICON_BLANK749)
-DEF_ICON(ICON_BLANK750)
-DEF_ICON(ICON_BLANK751)
-DEF_ICON(ICON_BLANK752)
-DEF_ICON(ICON_BLANK753)
-DEF_ICON(ICON_BLANK754)
-DEF_ICON(ICON_BLANK755)
+ DEF_ICON(BLANK720)
+ DEF_ICON(BLANK721)
+ DEF_ICON(BLANK722)
+ DEF_ICON(BLANK733)
+ DEF_ICON(BLANK734)
+ DEF_ICON(BLANK735)
+ DEF_ICON(BLANK736)
+ DEF_ICON(BLANK737)
+ DEF_ICON(BLANK738)
+ DEF_ICON(BLANK739)
+ DEF_ICON(BLANK740)
+ DEF_ICON(BLANK741)
+ DEF_ICON(BLANK742)
+ DEF_ICON(BLANK743)
+ DEF_ICON(BLANK744)
+ DEF_ICON(BLANK745)
+ DEF_ICON(BLANK746)
+ DEF_ICON(BLANK747)
+ DEF_ICON(BLANK748)
+ DEF_ICON(BLANK749)
+ DEF_ICON(BLANK750)
+ DEF_ICON(BLANK751)
+ DEF_ICON(BLANK752)
+ DEF_ICON(BLANK753)
+ DEF_ICON(BLANK754)
+ DEF_ICON(BLANK755)
/* EMPTY */
-DEF_ICON(ICON_BLANK760)
-DEF_ICON(ICON_BLANK761)
-DEF_ICON(ICON_BLANK762)
-DEF_ICON(ICON_BLANK763)
-DEF_ICON(ICON_BLANK764)
-DEF_ICON(ICON_BLANK765)
-DEF_ICON(ICON_BLANK766)
-DEF_ICON(ICON_BLANK767)
-DEF_ICON(ICON_BLANK768)
-DEF_ICON(ICON_BLANK769)
-DEF_ICON(ICON_BLANK770)
-DEF_ICON(ICON_BLANK771)
-DEF_ICON(ICON_BLANK772)
-DEF_ICON(ICON_BLANK773)
-DEF_ICON(ICON_BLANK774)
-DEF_ICON(ICON_BLANK775)
-DEF_ICON(ICON_BLANK776)
-DEF_ICON(ICON_BLANK777)
-DEF_ICON(ICON_BLANK778)
-DEF_ICON(ICON_BLANK779)
-DEF_ICON(ICON_BLANK780)
-DEF_ICON(ICON_BLANK781)
-DEF_ICON(ICON_BLANK782)
-DEF_ICON(ICON_BLANK783)
-DEF_ICON(ICON_BLANK784)
-DEF_ICON(ICON_BLANK785)
+ DEF_ICON(BLANK760)
+ DEF_ICON(BLANK761)
+ DEF_ICON(BLANK762)
+ DEF_ICON(BLANK763)
+ DEF_ICON(BLANK764)
+ DEF_ICON(BLANK765)
+ DEF_ICON(BLANK766)
+ DEF_ICON(BLANK767)
+ DEF_ICON(BLANK768)
+ DEF_ICON(BLANK769)
+ DEF_ICON(BLANK770)
+ DEF_ICON(BLANK771)
+ DEF_ICON(BLANK772)
+ DEF_ICON(BLANK773)
+ DEF_ICON(BLANK774)
+ DEF_ICON(BLANK775)
+ DEF_ICON(BLANK776)
+ DEF_ICON(BLANK777)
+ DEF_ICON(BLANK778)
+ DEF_ICON(BLANK779)
+ DEF_ICON(BLANK780)
+ DEF_ICON(BLANK781)
+ DEF_ICON(BLANK782)
+ DEF_ICON(BLANK783)
+ DEF_ICON(BLANK784)
+ DEF_ICON(BLANK785)
+#endif
/* MODIFIERS */
-DEF_ICON(ICON_MODIFIER)
-DEF_ICON(ICON_MOD_WAVE)
-DEF_ICON(ICON_MOD_BUILD)
-DEF_ICON(ICON_MOD_DECIM)
-DEF_ICON(ICON_MOD_MIRROR)
-DEF_ICON(ICON_MOD_SOFT)
-DEF_ICON(ICON_MOD_SUBSURF)
-DEF_ICON(ICON_HOOK)
-DEF_ICON(ICON_MOD_PHYSICS)
-DEF_ICON(ICON_MOD_PARTICLES)
-DEF_ICON(ICON_MOD_BOOLEAN)
-DEF_ICON(ICON_MOD_EDGESPLIT)
-DEF_ICON(ICON_MOD_ARRAY)
-DEF_ICON(ICON_MOD_UVPROJECT)
-DEF_ICON(ICON_MOD_DISPLACE)
-DEF_ICON(ICON_MOD_CURVE)
-DEF_ICON(ICON_MOD_LATTICE)
-DEF_ICON(ICON_CONSTRAINT_DATA)
-DEF_ICON(ICON_MOD_ARMATURE)
-DEF_ICON(ICON_MOD_SHRINKWRAP)
-DEF_ICON(ICON_MOD_CAST)
-DEF_ICON(ICON_MOD_MESHDEFORM)
-DEF_ICON(ICON_MOD_BEVEL)
-DEF_ICON(ICON_MOD_SMOOTH)
-DEF_ICON(ICON_MOD_SIMPLEDEFORM)
-DEF_ICON(ICON_MOD_MASK)
+DEF_ICON(MODIFIER)
+DEF_ICON(MOD_WAVE)
+DEF_ICON(MOD_BUILD)
+DEF_ICON(MOD_DECIM)
+DEF_ICON(MOD_MIRROR)
+DEF_ICON(MOD_SOFT)
+DEF_ICON(MOD_SUBSURF)
+DEF_ICON(HOOK)
+DEF_ICON(MOD_PHYSICS)
+DEF_ICON(MOD_PARTICLES)
+DEF_ICON(MOD_BOOLEAN)
+DEF_ICON(MOD_EDGESPLIT)
+DEF_ICON(MOD_ARRAY)
+DEF_ICON(MOD_UVPROJECT)
+DEF_ICON(MOD_DISPLACE)
+DEF_ICON(MOD_CURVE)
+DEF_ICON(MOD_LATTICE)
+DEF_ICON(CONSTRAINT_DATA)
+DEF_ICON(MOD_ARMATURE)
+DEF_ICON(MOD_SHRINKWRAP)
+DEF_ICON(MOD_CAST)
+DEF_ICON(MOD_MESHDEFORM)
+DEF_ICON(MOD_BEVEL)
+DEF_ICON(MOD_SMOOTH)
+DEF_ICON(MOD_SIMPLEDEFORM)
+DEF_ICON(MOD_MASK)
/* MODIFIERS */
-DEF_ICON(ICON_MOD_CLOTH)
-DEF_ICON(ICON_MOD_EXPLODE)
-DEF_ICON(ICON_MOD_FLUIDSIM)
-DEF_ICON(ICON_MOD_MULTIRES)
-DEF_ICON(ICON_MOD_SMOKE)
-DEF_ICON(ICON_MOD_SOLIDIFY)
-DEF_ICON(ICON_MOD_SCREW)
-DEF_ICON(ICON_BLANK160)
-DEF_ICON(ICON_BLANK161)
-DEF_ICON(ICON_BLANK162)
-DEF_ICON(ICON_BLANK163)
-DEF_ICON(ICON_BLANK164)
-DEF_ICON(ICON_BLANK165)
-DEF_ICON(ICON_BLANK166)
-DEF_ICON(ICON_BLANK167)
-DEF_ICON(ICON_BLANK168)
-DEF_ICON(ICON_BLANK169)
-DEF_ICON(ICON_BLANK170)
-DEF_ICON(ICON_BLANK171)
-DEF_ICON(ICON_BLANK172)
-DEF_ICON(ICON_BLANK173)
-DEF_ICON(ICON_BLANK174)
-DEF_ICON(ICON_BLANK175)
-DEF_ICON(ICON_BLANK176)
-DEF_ICON(ICON_BLANK177)
-DEF_ICON(ICON_BLANK177b)
+DEF_ICON(MOD_CLOTH)
+DEF_ICON(MOD_EXPLODE)
+DEF_ICON(MOD_FLUIDSIM)
+DEF_ICON(MOD_MULTIRES)
+DEF_ICON(MOD_SMOKE)
+DEF_ICON(MOD_SOLIDIFY)
+DEF_ICON(MOD_SCREW)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK160)
+ DEF_ICON(BLANK161)
+ DEF_ICON(BLANK162)
+ DEF_ICON(BLANK163)
+ DEF_ICON(BLANK164)
+ DEF_ICON(BLANK165)
+ DEF_ICON(BLANK166)
+ DEF_ICON(BLANK167)
+ DEF_ICON(BLANK168)
+ DEF_ICON(BLANK169)
+ DEF_ICON(BLANK170)
+ DEF_ICON(BLANK171)
+ DEF_ICON(BLANK172)
+ DEF_ICON(BLANK173)
+ DEF_ICON(BLANK174)
+ DEF_ICON(BLANK175)
+ DEF_ICON(BLANK176)
+ DEF_ICON(BLANK177)
+ DEF_ICON(BLANK177b)
+#endif
/* ANIMATION */
-DEF_ICON(ICON_REC)
-DEF_ICON(ICON_PLAY)
-DEF_ICON(ICON_FF)
-DEF_ICON(ICON_REW)
-DEF_ICON(ICON_PAUSE)
-DEF_ICON(ICON_PREV_KEYFRAME)
-DEF_ICON(ICON_NEXT_KEYFRAME)
-DEF_ICON(ICON_PLAY_AUDIO)
-DEF_ICON(ICON_PLAY_REVERSE)
-DEF_ICON(ICON_PREVIEW_RANGE)
-DEF_ICON(ICON_BLANK180)
-DEF_ICON(ICON_PMARKER_ACT)
-DEF_ICON(ICON_PMARKER_SEL)
-DEF_ICON(ICON_PMARKER)
-DEF_ICON(ICON_MARKER_HLT)
-DEF_ICON(ICON_MARKER)
-DEF_ICON(ICON_SPACE2) // XXX
-DEF_ICON(ICON_SPACE3) // XXX
-DEF_ICON(ICON_BLANK181)
-DEF_ICON(ICON_KEY_DEHLT)
-DEF_ICON(ICON_KEY_HLT)
-DEF_ICON(ICON_MUTE_IPO_OFF)
-DEF_ICON(ICON_MUTE_IPO_ON)
-DEF_ICON(ICON_BLANK182)
-DEF_ICON(ICON_BLANK183)
-DEF_ICON(ICON_BLANK183b)
+DEF_ICON(REC)
+DEF_ICON(PLAY)
+DEF_ICON(FF)
+DEF_ICON(REW)
+DEF_ICON(PAUSE)
+DEF_ICON(PREV_KEYFRAME)
+DEF_ICON(NEXT_KEYFRAME)
+DEF_ICON(PLAY_AUDIO)
+DEF_ICON(PLAY_REVERSE)
+DEF_ICON(PREVIEW_RANGE)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK180)
+#endif
+DEF_ICON(PMARKER_ACT)
+DEF_ICON(PMARKER_SEL)
+DEF_ICON(PMARKER)
+DEF_ICON(MARKER_HLT)
+DEF_ICON(MARKER)
+DEF_ICON(SPACE2) // XXX
+DEF_ICON(SPACE3) // XXX
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK181)
+#endif
+DEF_ICON(KEY_DEHLT)
+DEF_ICON(KEY_HLT)
+DEF_ICON(MUTE_IPO_OFF)
+DEF_ICON(MUTE_IPO_ON)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK182)
+ DEF_ICON(BLANK183)
+ DEF_ICON(BLANK183b)
/* available */
-DEF_ICON(ICON_BLANK184)
-DEF_ICON(ICON_BLANK185)
-DEF_ICON(ICON_BLANK186)
-DEF_ICON(ICON_BLANK187)
-DEF_ICON(ICON_BLANK188)
-DEF_ICON(ICON_BLANK189)
-DEF_ICON(ICON_BLANK190)
-DEF_ICON(ICON_BLANK191)
-DEF_ICON(ICON_BLANK192)
-DEF_ICON(ICON_BLANK193)
-DEF_ICON(ICON_BLANK194)
-DEF_ICON(ICON_BLANK195)
-DEF_ICON(ICON_BLANK196)
-DEF_ICON(ICON_BLANK197)
-DEF_ICON(ICON_BLANK198)
-DEF_ICON(ICON_BLANK199)
-DEF_ICON(ICON_BLANK200)
-DEF_ICON(ICON_BLANK201)
-DEF_ICON(ICON_BLANK202)
-DEF_ICON(ICON_BLANK203)
-DEF_ICON(ICON_BLANK204)
-DEF_ICON(ICON_BLANK205)
-DEF_ICON(ICON_BLANK206)
-DEF_ICON(ICON_BLANK207)
-DEF_ICON(ICON_BLANK208)
-DEF_ICON(ICON_BLANK208b)
+ DEF_ICON(BLANK184)
+ DEF_ICON(BLANK185)
+ DEF_ICON(BLANK186)
+ DEF_ICON(BLANK187)
+ DEF_ICON(BLANK188)
+ DEF_ICON(BLANK189)
+ DEF_ICON(BLANK190)
+ DEF_ICON(BLANK191)
+ DEF_ICON(BLANK192)
+ DEF_ICON(BLANK193)
+ DEF_ICON(BLANK194)
+ DEF_ICON(BLANK195)
+ DEF_ICON(BLANK196)
+ DEF_ICON(BLANK197)
+ DEF_ICON(BLANK198)
+ DEF_ICON(BLANK199)
+ DEF_ICON(BLANK200)
+ DEF_ICON(BLANK201)
+ DEF_ICON(BLANK202)
+ DEF_ICON(BLANK203)
+ DEF_ICON(BLANK204)
+ DEF_ICON(BLANK205)
+ DEF_ICON(BLANK206)
+ DEF_ICON(BLANK207)
+ DEF_ICON(BLANK208)
+ DEF_ICON(BLANK208b)
+#endif
/* EDITING */
-DEF_ICON(ICON_VERTEXSEL)
-DEF_ICON(ICON_EDGESEL)
-DEF_ICON(ICON_FACESEL)
-DEF_ICON(ICON_LINKEDSEL)
-DEF_ICON(ICON_BLANK210)
-DEF_ICON(ICON_ROTATE)
-DEF_ICON(ICON_CURSOR)
-DEF_ICON(ICON_ROTATECOLLECTION)
-DEF_ICON(ICON_ROTATECENTER)
-DEF_ICON(ICON_ROTACTIVE)
-DEF_ICON(ICON_ALIGN)
-DEF_ICON(ICON_BLANK211)
-DEF_ICON(ICON_SMOOTHCURVE)
-DEF_ICON(ICON_SPHERECURVE)
-DEF_ICON(ICON_ROOTCURVE)
-DEF_ICON(ICON_SHARPCURVE)
-DEF_ICON(ICON_LINCURVE)
-DEF_ICON(ICON_NOCURVE)
-DEF_ICON(ICON_RNDCURVE)
-DEF_ICON(ICON_PROP_OFF)
-DEF_ICON(ICON_PROP_ON)
-DEF_ICON(ICON_PROP_CON)
-DEF_ICON(ICON_BLANK212)
-DEF_ICON(ICON_PARTICLE_POINT)
-DEF_ICON(ICON_PARTICLE_TIP)
-DEF_ICON(ICON_PARTICLE_PATH)
+DEF_ICON(VERTEXSEL)
+DEF_ICON(EDGESEL)
+DEF_ICON(FACESEL)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK209)
+ DEF_ICON(BLANK210)
+#endif
+DEF_ICON(ROTATE)
+DEF_ICON(CURSOR)
+DEF_ICON(ROTATECOLLECTION)
+DEF_ICON(ROTATECENTER)
+DEF_ICON(ROTACTIVE)
+DEF_ICON(ALIGN)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK211)
+#endif
+DEF_ICON(SMOOTHCURVE)
+DEF_ICON(SPHERECURVE)
+DEF_ICON(ROOTCURVE)
+DEF_ICON(SHARPCURVE)
+DEF_ICON(LINCURVE)
+DEF_ICON(NOCURVE)
+DEF_ICON(RNDCURVE)
+DEF_ICON(PROP_OFF)
+DEF_ICON(PROP_ON)
+DEF_ICON(PROP_CON)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK212)
+#endif
+DEF_ICON(PARTICLE_POINT)
+DEF_ICON(PARTICLE_TIP)
+DEF_ICON(PARTICLE_PATH)
/* EDITING */
-DEF_ICON(ICON_MAN_TRANS)
-DEF_ICON(ICON_MAN_ROT)
-DEF_ICON(ICON_MAN_SCALE)
-DEF_ICON(ICON_MANIPUL)
-DEF_ICON(ICON_SNAP_OFF)
-DEF_ICON(ICON_SNAP_ON)
-DEF_ICON(ICON_SNAP_NORMAL)
-DEF_ICON(ICON_SNAP_INCREMENT)
-DEF_ICON(ICON_SNAP_VERTEX)
-DEF_ICON(ICON_SNAP_EDGE)
-DEF_ICON(ICON_SNAP_FACE)
-DEF_ICON(ICON_SNAP_VOLUME)
-DEF_ICON(ICON_UVS_FACE)
-DEF_ICON(ICON_STICKY_UVS_LOC)
-DEF_ICON(ICON_STICKY_UVS_DISABLE)
-DEF_ICON(ICON_STICKY_UVS_VERT)
-DEF_ICON(ICON_CLIPUV_DEHLT)
-DEF_ICON(ICON_CLIPUV_HLT)
-DEF_ICON(ICON_SNAP_PEEL_OBJECT)
-DEF_ICON(ICON_GRID)
-DEF_ICON(ICON_GEARS)
-DEF_ICON(ICON_BLANK221)
-DEF_ICON(ICON_BLANK224)
-DEF_ICON(ICON_BLANK225)
-DEF_ICON(ICON_BLANK226)
-DEF_ICON(ICON_BLANK226b)
+DEF_ICON(MAN_TRANS)
+DEF_ICON(MAN_ROT)
+DEF_ICON(MAN_SCALE)
+DEF_ICON(MANIPUL)
+DEF_ICON(SNAP_OFF)
+DEF_ICON(SNAP_ON)
+DEF_ICON(SNAP_NORMAL)
+DEF_ICON(SNAP_INCREMENT)
+DEF_ICON(SNAP_VERTEX)
+DEF_ICON(SNAP_EDGE)
+DEF_ICON(SNAP_FACE)
+DEF_ICON(SNAP_VOLUME)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK220)
+#endif
+DEF_ICON(STICKY_UVS_LOC)
+DEF_ICON(STICKY_UVS_DISABLE)
+DEF_ICON(STICKY_UVS_VERT)
+DEF_ICON(CLIPUV_DEHLT)
+DEF_ICON(CLIPUV_HLT)
+DEF_ICON(SNAP_PEEL_OBJECT)
+DEF_ICON(GRID)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK221)
+ DEF_ICON(BLANK222)
+ DEF_ICON(BLANK224)
+ DEF_ICON(BLANK225)
+ DEF_ICON(BLANK226)
+ DEF_ICON(BLANK226b)
+#endif
/* EDITING */
-DEF_ICON(ICON_PASTEDOWN)
-DEF_ICON(ICON_COPYDOWN)
-DEF_ICON(ICON_PASTEFLIPUP)
-DEF_ICON(ICON_PASTEFLIPDOWN)
-DEF_ICON(ICON_BLANK227)
-DEF_ICON(ICON_BLANK228)
-DEF_ICON(ICON_BLANK229)
-DEF_ICON(ICON_BLANK230)
-DEF_ICON(ICON_SNAP_SURFACE)
-DEF_ICON(ICON_BLANK232)
-DEF_ICON(ICON_BLANK233)
-DEF_ICON(ICON_RETOPO)
-DEF_ICON(ICON_UV_VERTEXSEL)
-DEF_ICON(ICON_UV_EDGESEL)
-DEF_ICON(ICON_UV_FACESEL)
-DEF_ICON(ICON_UV_ISLANDSEL)
-DEF_ICON(ICON_UV_SYNC_SELECT)
-DEF_ICON(ICON_BLANK240)
-DEF_ICON(ICON_BLANK241)
-DEF_ICON(ICON_BLANK242)
-DEF_ICON(ICON_BLANK243)
-DEF_ICON(ICON_BLANK244)
-DEF_ICON(ICON_BLANK245)
-DEF_ICON(ICON_BLANK246)
-DEF_ICON(ICON_BLANK247)
-DEF_ICON(ICON_BLANK247b)
+DEF_ICON(PASTEDOWN)
+DEF_ICON(COPYDOWN)
+DEF_ICON(PASTEFLIPUP)
+DEF_ICON(PASTEFLIPDOWN)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK227)
+ DEF_ICON(BLANK228)
+ DEF_ICON(BLANK229)
+ DEF_ICON(BLANK230)
+#endif
+DEF_ICON(SNAP_SURFACE)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK232)
+ DEF_ICON(BLANK233)
+#endif
+DEF_ICON(RETOPO)
+DEF_ICON(UV_VERTEXSEL)
+DEF_ICON(UV_EDGESEL)
+DEF_ICON(UV_FACESEL)
+DEF_ICON(UV_ISLANDSEL)
+DEF_ICON(UV_SYNC_SELECT)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK240)
+ DEF_ICON(BLANK241)
+ DEF_ICON(BLANK242)
+ DEF_ICON(BLANK243)
+ DEF_ICON(BLANK244)
+ DEF_ICON(BLANK245)
+ DEF_ICON(BLANK246)
+ DEF_ICON(BLANK247)
+ DEF_ICON(BLANK247b)
+#endif
/* 3D VIEW */
-DEF_ICON(ICON_BBOX)
-DEF_ICON(ICON_WIRE)
-DEF_ICON(ICON_SOLID)
-DEF_ICON(ICON_SMOOTH)
-DEF_ICON(ICON_POTATO)
-DEF_ICON(ICON_BLANK248)
-DEF_ICON(ICON_ORTHO)
-DEF_ICON(ICON_ORTHO_OFF)
-DEF_ICON(ICON_CAMERA)
-DEF_ICON(ICON_LOCKVIEW_OFF)
-DEF_ICON(ICON_LOCKVIEW_ON)
-DEF_ICON(ICON_BLANK250)
-DEF_ICON(ICON_AXIS_SIDE)
-DEF_ICON(ICON_AXIS_FRONT)
-DEF_ICON(ICON_AXIS_TOP)
-DEF_ICON(ICON_NDOF_DOM)
-DEF_ICON(ICON_NDOF_TURN)
-DEF_ICON(ICON_NDOF_FLY)
-DEF_ICON(ICON_NDOF_TRANS)
-DEF_ICON(ICON_LAYER_USED)
-DEF_ICON(ICON_LAYER_ACTIVE)
-DEF_ICON(ICON_BLANK254)
-DEF_ICON(ICON_BLANK255)
-DEF_ICON(ICON_BLANK256)
-DEF_ICON(ICON_BLANK257)
-DEF_ICON(ICON_BLANK257b)
+DEF_ICON(BBOX)
+DEF_ICON(WIRE)
+DEF_ICON(SOLID)
+DEF_ICON(SMOOTH)
+DEF_ICON(POTATO)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK248)
+#endif
+DEF_ICON(ORTHO)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK249)
+ DEF_ICON(BLANK250)
+#endif
+DEF_ICON(LOCKVIEW_OFF)
+DEF_ICON(LOCKVIEW_ON)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK251)
+#endif
+DEF_ICON(AXIS_SIDE)
+DEF_ICON(AXIS_FRONT)
+DEF_ICON(AXIS_TOP)
+DEF_ICON(NDOF_DOM)
+DEF_ICON(NDOF_TURN)
+DEF_ICON(NDOF_FLY)
+DEF_ICON(NDOF_TRANS)
+DEF_ICON(LAYER_USED)
+DEF_ICON(LAYER_ACTIVE)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK254)
+ DEF_ICON(BLANK255)
+ DEF_ICON(BLANK256)
+ DEF_ICON(BLANK257)
+ DEF_ICON(BLANK257b)
/* available */
-DEF_ICON(ICON_BLANK258)
-DEF_ICON(ICON_BLANK259)
-DEF_ICON(ICON_BLANK260)
-DEF_ICON(ICON_BLANK261)
-DEF_ICON(ICON_BLANK262)
-DEF_ICON(ICON_BLANK263)
-DEF_ICON(ICON_BLANK264)
-DEF_ICON(ICON_BLANK265)
-DEF_ICON(ICON_BLANK266)
-DEF_ICON(ICON_BLANK267)
-DEF_ICON(ICON_BLANK268)
-DEF_ICON(ICON_BLANK269)
-DEF_ICON(ICON_BLANK270)
-DEF_ICON(ICON_BLANK271)
-DEF_ICON(ICON_BLANK272)
-DEF_ICON(ICON_BLANK273)
-DEF_ICON(ICON_BLANK274)
-DEF_ICON(ICON_BLANK275)
-DEF_ICON(ICON_BLANK276)
-DEF_ICON(ICON_BLANK277)
-DEF_ICON(ICON_BLANK278)
-DEF_ICON(ICON_BLANK279)
-DEF_ICON(ICON_BLANK280)
-DEF_ICON(ICON_BLANK281)
-DEF_ICON(ICON_BLANK282)
-DEF_ICON(ICON_BLANK282b)
+ DEF_ICON(BLANK258)
+ DEF_ICON(BLANK259)
+ DEF_ICON(BLANK260)
+ DEF_ICON(BLANK261)
+ DEF_ICON(BLANK262)
+ DEF_ICON(BLANK263)
+ DEF_ICON(BLANK264)
+ DEF_ICON(BLANK265)
+ DEF_ICON(BLANK266)
+ DEF_ICON(BLANK267)
+ DEF_ICON(BLANK268)
+ DEF_ICON(BLANK269)
+ DEF_ICON(BLANK270)
+ DEF_ICON(BLANK271)
+ DEF_ICON(BLANK272)
+ DEF_ICON(BLANK273)
+ DEF_ICON(BLANK274)
+ DEF_ICON(BLANK275)
+ DEF_ICON(BLANK276)
+ DEF_ICON(BLANK277)
+ DEF_ICON(BLANK278)
+ DEF_ICON(BLANK279)
+ DEF_ICON(BLANK280)
+ DEF_ICON(BLANK281)
+ DEF_ICON(BLANK282)
+ DEF_ICON(BLANK282b)
+#endif
/* FILE SELECT */
-DEF_ICON(ICON_SORTALPHA)
-DEF_ICON(ICON_SORTBYEXT)
-DEF_ICON(ICON_SORTTIME)
-DEF_ICON(ICON_SORTSIZE)
-DEF_ICON(ICON_LONGDISPLAY)
-DEF_ICON(ICON_SHORTDISPLAY)
-DEF_ICON(ICON_GHOST)
-DEF_ICON(ICON_IMGDISPLAY)
-DEF_ICON(ICON_BLANK284)
-DEF_ICON(ICON_BLANK285)
-DEF_ICON(ICON_BOOKMARKS)
-DEF_ICON(ICON_FONTPREVIEW)
-DEF_ICON(ICON_FILTER)
-DEF_ICON(ICON_NEWFOLDER)
-DEF_ICON(ICON_BLANK285F)
-DEF_ICON(ICON_FILE_PARENT)
-DEF_ICON(ICON_FILE_REFRESH)
-DEF_ICON(ICON_FILE_FOLDER)
-DEF_ICON(ICON_FILE_BLANK)
-DEF_ICON(ICON_FILE_BLEND)
-DEF_ICON(ICON_FILE_IMAGE)
-DEF_ICON(ICON_FILE_MOVIE)
-DEF_ICON(ICON_FILE_SCRIPT)
-DEF_ICON(ICON_FILE_SOUND)
-DEF_ICON(ICON_FILE_FONT)
-DEF_ICON(ICON_BLANK291b)
+DEF_ICON(SORTALPHA)
+DEF_ICON(SORTBYEXT)
+DEF_ICON(SORTTIME)
+DEF_ICON(SORTSIZE)
+DEF_ICON(LONGDISPLAY)
+DEF_ICON(SHORTDISPLAY)
+DEF_ICON(GHOST)
+DEF_ICON(IMGDISPLAY)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK284)
+ DEF_ICON(BLANK285)
+#endif
+DEF_ICON(BOOKMARKS)
+DEF_ICON(FONTPREVIEW)
+DEF_ICON(FILTER)
+DEF_ICON(NEWFOLDER)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK285F)
+#endif
+DEF_ICON(FILE_PARENT)
+DEF_ICON(FILE_REFRESH)
+DEF_ICON(FILE_FOLDER)
+DEF_ICON(FILE_BLANK)
+DEF_ICON(FILE_BLEND)
+DEF_ICON(FILE_IMAGE)
+DEF_ICON(FILE_MOVIE)
+DEF_ICON(FILE_SCRIPT)
+DEF_ICON(FILE_SOUND)
+DEF_ICON(FILE_FONT)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK291b)
/* available */
-DEF_ICON(ICON_BLANK292)
-DEF_ICON(ICON_BLANK293)
-DEF_ICON(ICON_BLANK294)
-DEF_ICON(ICON_BLANK295)
-DEF_ICON(ICON_BLANK296)
-DEF_ICON(ICON_BLANK297)
-DEF_ICON(ICON_BLANK298)
-DEF_ICON(ICON_BLANK299)
-DEF_ICON(ICON_BLANK300)
-DEF_ICON(ICON_BLANK301)
-DEF_ICON(ICON_BLANK302)
-DEF_ICON(ICON_BLANK303)
-DEF_ICON(ICON_BLANK304)
-DEF_ICON(ICON_BLANK305)
-DEF_ICON(ICON_BLANK306)
-DEF_ICON(ICON_BACK)
-DEF_ICON(ICON_FORWARD)
-DEF_ICON(ICON_BLANK309)
-DEF_ICON(ICON_BLANK310)
-DEF_ICON(ICON_BLANK311)
-DEF_ICON(ICON_BLANK312)
-DEF_ICON(ICON_BLANK313)
-DEF_ICON(ICON_BLANK314)
-DEF_ICON(ICON_BLANK315)
-DEF_ICON(ICON_BLANK316)
-DEF_ICON(ICON_DISK_DRIVE)
+ DEF_ICON(BLANK292)
+ DEF_ICON(BLANK293)
+ DEF_ICON(BLANK294)
+ DEF_ICON(BLANK295)
+ DEF_ICON(BLANK296)
+ DEF_ICON(BLANK297)
+ DEF_ICON(BLANK298)
+ DEF_ICON(BLANK299)
+ DEF_ICON(BLANK300)
+ DEF_ICON(BLANK301)
+ DEF_ICON(BLANK302)
+ DEF_ICON(BLANK303)
+ DEF_ICON(BLANK304)
+ DEF_ICON(BLANK305)
+ DEF_ICON(BLANK306)
+#endif
+DEF_ICON(BACK)
+DEF_ICON(FORWARD)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK309)
+ DEF_ICON(BLANK310)
+ DEF_ICON(BLANK311)
+ DEF_ICON(BLANK312)
+ DEF_ICON(BLANK313)
+ DEF_ICON(BLANK314)
+ DEF_ICON(BLANK315)
+ DEF_ICON(BLANK316)
+#endif
+DEF_ICON(DISK_DRIVE)
/* SHADING / TEXT */
-DEF_ICON(ICON_MATPLANE)
-DEF_ICON(ICON_MATSPHERE)
-DEF_ICON(ICON_MATCUBE)
-DEF_ICON(ICON_MONKEY)
-DEF_ICON(ICON_HAIR)
-DEF_ICON(ICON_ALIASED)
-DEF_ICON(ICON_ANTIALIASED)
-DEF_ICON(ICON_MAT_SPHERE_SKY)
-DEF_ICON(ICON_BLANK319)
-DEF_ICON(ICON_BLANK320)
-DEF_ICON(ICON_BLANK321)
-DEF_ICON(ICON_BLANK322)
-DEF_ICON(ICON_WORDWRAP_OFF)
-DEF_ICON(ICON_WORDWRAP_ON)
-DEF_ICON(ICON_SYNTAX_OFF)
-DEF_ICON(ICON_SYNTAX_ON)
-DEF_ICON(ICON_LINENUMBERS_OFF)
-DEF_ICON(ICON_LINENUMBERS_ON)
-DEF_ICON(ICON_SCRIPTPLUGINS) // XXX CREATE NEW
-DEF_ICON(ICON_BLANK323)
-DEF_ICON(ICON_BLANK324)
-DEF_ICON(ICON_BLANK325)
-DEF_ICON(ICON_BLANK326)
-DEF_ICON(ICON_BLANK327)
-DEF_ICON(ICON_BLANK328)
-DEF_ICON(ICON_BLANK328b)
+DEF_ICON(MATPLANE)
+DEF_ICON(MATSPHERE)
+DEF_ICON(MATCUBE)
+DEF_ICON(MONKEY)
+DEF_ICON(HAIR)
+DEF_ICON(ALIASED)
+DEF_ICON(ANTIALIASED)
+DEF_ICON(MAT_SPHERE_SKY)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK319)
+ DEF_ICON(BLANK320)
+ DEF_ICON(BLANK321)
+ DEF_ICON(BLANK322)
+#endif
+DEF_ICON(WORDWRAP_OFF)
+DEF_ICON(WORDWRAP_ON)
+DEF_ICON(SYNTAX_OFF)
+DEF_ICON(SYNTAX_ON)
+DEF_ICON(LINENUMBERS_OFF)
+DEF_ICON(LINENUMBERS_ON)
+DEF_ICON(SCRIPTPLUGINS) // XXX CREATE NEW
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK323)
+ DEF_ICON(BLANK324)
+ DEF_ICON(BLANK325)
+ DEF_ICON(BLANK326)
+ DEF_ICON(BLANK327)
+ DEF_ICON(BLANK328)
+ DEF_ICON(BLANK328b)
+#endif
/* SEQUENCE / IMAGE EDITOR */
-DEF_ICON(ICON_SEQ_SEQUENCER)
-DEF_ICON(ICON_SEQ_PREVIEW)
-DEF_ICON(ICON_SEQ_LUMA_WAVEFORM)
-DEF_ICON(ICON_SEQ_CHROMA_SCOPE)
-DEF_ICON(ICON_SEQ_HISTOGRAM)
-DEF_ICON(ICON_SEQ_SPLITVIEW)
-DEF_ICON(ICON_BLANK331)
-DEF_ICON(ICON_BLANK332)
-DEF_ICON(ICON_BLANK333)
-DEF_ICON(ICON_IMAGE_RGB) // XXX CHANGE TO STRAIGHT ALPHA, Z ETC
-DEF_ICON(ICON_IMAGE_RGB_ALPHA)
-DEF_ICON(ICON_IMAGE_ALPHA)
-DEF_ICON(ICON_IMAGE_ZDEPTH)
-DEF_ICON(ICON_IMAGEFILE)
-DEF_ICON(ICON_BLANK336)
-DEF_ICON(ICON_BLANK337)
-DEF_ICON(ICON_BLANK338)
-DEF_ICON(ICON_BLANK339)
-DEF_ICON(ICON_BLANK340)
-DEF_ICON(ICON_BLANK341)
-DEF_ICON(ICON_BLANK342)
-DEF_ICON(ICON_BLANK343)
-DEF_ICON(ICON_BLANK344)
-DEF_ICON(ICON_BLANK345)
-DEF_ICON(ICON_BLANK346)
-DEF_ICON(ICON_BLANK346b)
+DEF_ICON(SEQ_SEQUENCER)
+DEF_ICON(SEQ_PREVIEW)
+DEF_ICON(SEQ_LUMA_WAVEFORM)
+DEF_ICON(SEQ_CHROMA_SCOPE)
+DEF_ICON(SEQ_HISTOGRAM)
+DEF_ICON(SEQ_SPLITVIEW)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK331)
+ DEF_ICON(BLANK332)
+ DEF_ICON(BLANK333)
+#endif
+DEF_ICON(IMAGE_RGB) // XXX CHANGE TO STRAIGHT ALPHA, Z ETC
+DEF_ICON(IMAGE_RGB_ALPHA)
+DEF_ICON(IMAGE_ALPHA)
+DEF_ICON(IMAGE_ZDEPTH)
+DEF_ICON(IMAGEFILE)
+#ifndef DEF_ICON_BLANK_SKIP
+ DEF_ICON(BLANK336)
+ DEF_ICON(BLANK337)
+ DEF_ICON(BLANK338)
+ DEF_ICON(BLANK339)
+ DEF_ICON(BLANK340)
+ DEF_ICON(BLANK341)
+ DEF_ICON(BLANK342)
+ DEF_ICON(BLANK343)
+ DEF_ICON(BLANK344)
+ DEF_ICON(BLANK345)
+ DEF_ICON(BLANK346)
+ DEF_ICON(BLANK346b)
+#endif
/* brush icons */
-DEF_ICON(ICON_BRUSH_ADD)
-DEF_ICON(ICON_BRUSH_BLOB)
-DEF_ICON(ICON_BRUSH_BLUR)
-DEF_ICON(ICON_BRUSH_CLAY)
-DEF_ICON(ICON_BRUSH_CLONE)
-DEF_ICON(ICON_BRUSH_CREASE)
-DEF_ICON(ICON_BRUSH_DARKEN)
-DEF_ICON(ICON_BRUSH_FILL)
-DEF_ICON(ICON_BRUSH_FLATTEN)
-DEF_ICON(ICON_BRUSH_GRAB)
-DEF_ICON(ICON_BRUSH_INFLATE)
-DEF_ICON(ICON_BRUSH_LAYER)
-DEF_ICON(ICON_BRUSH_LIGHTEN)
-DEF_ICON(ICON_BRUSH_MIX)
-DEF_ICON(ICON_BRUSH_MULTIPLY)
-DEF_ICON(ICON_BRUSH_NUDGE)
-DEF_ICON(ICON_BRUSH_PINCH)
-DEF_ICON(ICON_BRUSH_SCRAPE)
-DEF_ICON(ICON_BRUSH_SCULPT_DRAW)
-DEF_ICON(ICON_BRUSH_SMEAR)
-DEF_ICON(ICON_BRUSH_SMOOTH)
-DEF_ICON(ICON_BRUSH_SNAKE_HOOK)
-DEF_ICON(ICON_BRUSH_SOFTEN)
-DEF_ICON(ICON_BRUSH_SUBTRACT)
-DEF_ICON(ICON_BRUSH_TEXDRAW)
-DEF_ICON(ICON_BRUSH_THUMB)
-DEF_ICON(ICON_BRUSH_ROTATE)
-DEF_ICON(ICON_BRUSH_VERTEXDRAW)
-
- /* vector icons */
-
-DEF_ICON(VICO_VIEW3D_VEC)
-DEF_ICON(VICO_EDIT_VEC)
-DEF_ICON(VICO_EDITMODE_DEHLT)
-DEF_ICON(VICO_EDITMODE_HLT)
-DEF_ICON(VICO_DISCLOSURE_TRI_RIGHT_VEC)
-DEF_ICON(VICO_DISCLOSURE_TRI_DOWN_VEC)
-DEF_ICON(VICO_MOVE_UP_VEC)
-DEF_ICON(VICO_MOVE_DOWN_VEC)
-DEF_ICON(VICO_X_VEC)
-DEF_ICON(VICO_SMALL_TRI_RIGHT_VEC)
+DEF_ICON(BRUSH_ADD)
+DEF_ICON(BRUSH_BLOB)
+DEF_ICON(BRUSH_BLUR)
+DEF_ICON(BRUSH_CLAY)
+DEF_ICON(BRUSH_CLONE)
+DEF_ICON(BRUSH_CREASE)
+DEF_ICON(BRUSH_DARKEN)
+DEF_ICON(BRUSH_FILL)
+DEF_ICON(BRUSH_FLATTEN)
+DEF_ICON(BRUSH_GRAB)
+DEF_ICON(BRUSH_INFLATE)
+DEF_ICON(BRUSH_LAYER)
+DEF_ICON(BRUSH_LIGHTEN)
+DEF_ICON(BRUSH_MIX)
+DEF_ICON(BRUSH_MULTIPLY)
+DEF_ICON(BRUSH_NUDGE)
+DEF_ICON(BRUSH_PINCH)
+DEF_ICON(BRUSH_SCRAPE)
+DEF_ICON(BRUSH_SCULPT_DRAW)
+DEF_ICON(BRUSH_SMEAR)
+DEF_ICON(BRUSH_SMOOTH)
+DEF_ICON(BRUSH_SNAKE_HOOK)
+DEF_ICON(BRUSH_SOFTEN)
+DEF_ICON(BRUSH_SUBTRACT)
+DEF_ICON(BRUSH_TEXDRAW)
+DEF_ICON(BRUSH_THUMB)
+DEF_ICON(BRUSH_ROTATE)
+DEF_ICON(BRUSH_VERTEXDRAW)
+/* vector icons, VICO_ prefix added */
+DEF_VICO(VIEW3D_VEC)
+DEF_VICO(EDIT_VEC)
+DEF_VICO(EDITMODE_DEHLT)
+DEF_VICO(EDITMODE_HLT)
+DEF_VICO(DISCLOSURE_TRI_RIGHT_VEC)
+DEF_VICO(DISCLOSURE_TRI_DOWN_VEC)
+DEF_VICO(MOVE_UP_VEC)
+DEF_VICO(MOVE_DOWN_VEC)
+DEF_VICO(X_VEC)
+DEF_VICO(SMALL_TRI_RIGHT_VEC)
diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h
index af3f91f8ba8..e3c83291089 100644
--- a/source/blender/editors/include/UI_resources.h
+++ b/source/blender/editors/include/UI_resources.h
@@ -35,7 +35,8 @@
/* elubie: TODO: move the typedef for icons to UI_interface_icons.h */
/* and add/replace include of UI_resources.h by UI_interface_icons.h */
-#define DEF_ICON(name) name,
+#define DEF_ICON(name) ICON_##name,
+#define DEF_VICO(name) VICO_##name,
typedef enum {
#define BIFICONID_FIRST (ICON_BLENDER)
@@ -45,6 +46,7 @@ typedef enum {
#define BIFNICONIDS (BIFICONID_LAST-BIFICONID_FIRST + 1)
} BIFIconID;
#undef DEF_ICON
+#undef DEF_VICO
typedef enum {
diff --git a/source/blender/editors/interface/CMakeLists.txt b/source/blender/editors/interface/CMakeLists.txt
index 31de4537c24..23a96cce3dc 100644
--- a/source/blender/editors/interface/CMakeLists.txt
+++ b/source/blender/editors/interface/CMakeLists.txt
@@ -56,8 +56,8 @@ IF(WITH_INTERNATIONAL)
ADD_DEFINITIONS(-DINTERNATIONAL)
ENDIF(WITH_INTERNATIONAL)
-IF(NOT WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
-ENDIF(NOT WITH_PYTHON)
+IF(WITH_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
+ENDIF(WITH_PYTHON)
BLENDERLIB(bf_editor_interface "${SRC}" "${INC}")
diff --git a/source/blender/editors/interface/SConscript b/source/blender/editors/interface/SConscript
index 81964a661a4..639a5268ca2 100644
--- a/source/blender/editors/interface/SConscript
+++ b/source/blender/editors/interface/SConscript
@@ -16,7 +16,7 @@ defs = []
if env['WITH_BF_INTERNATIONAL']:
defs.append('INTERNATIONAL')
-if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+if env['WITH_BF_PYTHON']:
+ defs.append('WITH_PYTHON')
env.BlenderLib ( 'bf_editors_interface', sources, Split(incs), defs, libtype=['core'], priority=[110] )
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index f65b10eaaea..099629b0422 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -629,7 +629,7 @@ void uiEndBlock(const bContext *C, uiBlock *block)
if(but->context)
CTX_store_set((bContext*)C, but->context);
- if(ot == NULL || WM_operator_poll((bContext*)C, ot)==0) {
+ if(ot == NULL || WM_operator_poll_context((bContext*)C, ot, but->opcontext)==0) {
but->flag |= UI_BUT_DISABLED;
but->lock = 1;
}
@@ -1645,7 +1645,7 @@ int ui_set_but_string(bContext *C, uiBut *but, const char *str)
/* number editing */
double value;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
{
char str_unit_convert[256];
int unit_type;
@@ -1672,7 +1672,7 @@ int ui_set_but_string(bContext *C, uiBut *but, const char *str)
}
#else
value= atof(str);
-#endif
+#endif // WITH_PYTHON
if(!ui_is_but_float(but)) value= (int)floor(value + 0.5);
if(but->type==NUMABS) value= fabs(value);
diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c
index 768be97f930..29278edf451 100644
--- a/source/blender/editors/interface/interface_draw.c
+++ b/source/blender/editors/interface/interface_draw.c
@@ -33,6 +33,7 @@
#include "DNA_screen_types.h"
#include "BLI_math.h"
+#include "BLI_rect.h"
#include "BKE_colortools.h"
#include "BKE_texture.h"
@@ -1355,6 +1356,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect
CurveMapPoint *cmp;
float fx, fy, fac[2], zoomx, zoomy, offsx, offsy;
GLint scissor[4];
+ rcti scissor_new;
int a;
cumap= (CurveMapping *)(but->editcumap? but->editcumap: but->poin);
@@ -1362,7 +1364,12 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect
/* need scissor test, curve can draw outside of boundary */
glGetIntegerv(GL_VIEWPORT, scissor);
- glScissor(ar->winrct.xmin + rect->xmin, ar->winrct.ymin+rect->ymin, rect->xmax-rect->xmin, rect->ymax-rect->ymin);
+ scissor_new.xmin= ar->winrct.xmin + rect->xmin;
+ scissor_new.ymin= ar->winrct.ymin + rect->ymin;
+ scissor_new.xmax= ar->winrct.xmin + rect->xmax;
+ scissor_new.ymax= ar->winrct.ymin + rect->ymax;
+ BLI_isect_rcti(&scissor_new, &ar->winrct, &scissor_new);
+ glScissor(scissor_new.xmin, scissor_new.ymin, scissor_new.xmax-scissor_new.xmin, scissor_new.ymax-scissor_new.ymin);
/* calculate offset and zoom */
zoomx= (rect->xmax-rect->xmin-2.0*but->aspect)/(cumap->curr.xmax - cumap->curr.xmin);
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 5dbeb08d45b..d3f915cddce 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -29,6 +29,7 @@
#include
#include
#include
+#include
#include "MEM_guardedalloc.h"
@@ -2991,42 +2992,43 @@ static int ui_numedit_but_HSVCUBE(uiBut *but, uiHandleButtonData *data, int mx,
y= ((float)my-but->y1)/(but->y2-but->y1);
CLAMP(x, 0.0, 1.0);
CLAMP(y, 0.0, 1.0);
-
- if(but->a1==0) {
- hsv[2]= x;
- hsv[1]= y;
- }
- else if(but->a1==1) {
- hsv[0]= x;
- hsv[2]= y;
- }
- else if(but->a1==2) {
- hsv[0]= x;
- hsv[1]= y;
- }
- else if(but->a1==3) {
- hsv[0]= x;
- }
- else if(but->a1==4) {
- hsv[1]= x;
- }
- else if(but->a1==5) {
- hsv[2]= x;
- }
- else if (but->a1==9){
- float range;
-
- /* vertical 'value' strip */
+ switch((int)but->a1) {
+ case UI_GRAD_SV:
+ hsv[2]= x;
+ hsv[1]= y;
+ break;
+ case UI_GRAD_HV:
+ hsv[0]= x;
+ hsv[2]= y;
+ break;
+ case UI_GRAD_HS:
+ hsv[0]= x;
+ hsv[1]= y;
+ break;
+ case UI_GRAD_H:
+ hsv[0]= x;
+ break;
+ case UI_GRAD_S:
+ hsv[1]= x;
+ break;
+ case UI_GRAD_V:
+ hsv[2]= x;
+ break;
+ case UI_GRAD_V_ALT:
+ /* vertical 'value' strip */
+
/* exception only for value strip - use the range set in but->min/max */
- range = but->softmax - but->softmin;
- hsv[2] = y*range + but->softmin;
+ hsv[2] = y * (but->softmax - but->softmin) + but->softmin;
if (color_profile)
hsv[2] = srgb_to_linearrgb(hsv[2]);
if (hsv[2] > but->softmax)
hsv[2] = but->softmax;
+ break;
+ default:
+ assert(!"invalid hsv type");
}
hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2);
@@ -3061,7 +3063,7 @@ static int ui_do_but_HSVCUBE(bContext *C, uiBlock *block, uiBut *but, uiHandleBu
return WM_UI_HANDLER_BREAK;
}
else if (event->type == ZEROKEY && event->val == KM_PRESS) {
- if (but->a1==9){
+ if (but->a1==UI_GRAD_V_ALT){
int len;
/* reset only value */
@@ -4429,7 +4431,7 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, wmEvent *event)
retval= ui_do_but_BUT(C, but, data, event);
break;
case COL:
- if(but->a1 == 9) // signal to prevent calling up color picker
+ if(but->a1 == UI_GRAD_V_ALT) // signal to prevent calling up color picker
retval= ui_do_but_EXIT(C, but, data, event);
else
retval= ui_do_but_BLOCK(C, but, data, event);
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index 5f8d604817a..e244565a6a6 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -434,7 +434,7 @@ ARegion *ui_tooltip_create(bContext *C, ARegion *butregion, uiBut *but)
if(but->flag & UI_BUT_DISABLED) {
const char *poll_msg;
CTX_wm_operator_poll_msg_set(C, NULL);
- WM_operator_poll(C, but->optype);
+ WM_operator_poll_context(C, but->optype, but->opcontext);
poll_msg= CTX_wm_operator_poll_msg_get(C);
if(poll_msg) {
BLI_snprintf(data->lines[data->totline], sizeof(data->lines[0]), "Disabled: %s", poll_msg);
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index e4837920c3e..9995ddb0d51 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -1821,7 +1821,7 @@ void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int
uiItemS(row);
if (value_slider)
- uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, softmin, softmax, 9, 0, "");
+ uiDefButR(block, HSVCUBE, 0, "", WHEEL_SIZE+6, 0, 14, WHEEL_SIZE, ptr, propname, -1, softmin, softmax, UI_GRAD_V_ALT, 0, "");
}
/********************* Layer Buttons Template ************************/
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index ed7284bf264..2a6ab525f89 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -1729,7 +1729,7 @@ void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect)
void ui_draw_gradient(rcti *rect, float *hsv, int type, float alpha)
{
int a;
- float h= hsv[0], s= hsv[1], v= hsv[0];
+ float h= hsv[0], s= hsv[1], v= hsv[2];
float dx, dy, sx1, sx2, sy;
float col0[4][3]; // left half, rect bottom to top
float col1[4][3]; // right half, rect bottom to top
@@ -2905,7 +2905,7 @@ void ui_draw_but(const bContext *C, ARegion *ar, uiStyle *style, uiBut *but, rct
break;
case HSVCUBE:
- if(but->a1==9) // vertical V slider, uses new widget draw now
+ if(but->a1 == UI_GRAD_V_ALT) // vertical V slider, uses new widget draw now
ui_draw_but_HSV_v(but, rect);
else // other HSV pickers...
ui_draw_but_HSVCUBE(but, rect);
diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c
index a17d578fc06..c1c10bf33c6 100644
--- a/source/blender/editors/interface/view2d.c
+++ b/source/blender/editors/interface/view2d.c
@@ -1069,7 +1069,7 @@ static void step_to_grid(float *step, int *power, int unit)
/* for frames, we want 1.0 frame intervals only */
if (unit == V2D_UNIT_FRAMES) {
rem = 1.0f;
- *step = 1.0f;
+ *step = 2.0f; /* use 2 since there are grid lines drawn inbetween, this way to get 1 line per frane */
}
/* prevents printing 1.0 2.0 3.0 etc */
diff --git a/source/blender/editors/interface/view2d_ops.c b/source/blender/editors/interface/view2d_ops.c
index 48523ec1a5a..5500d9aae8d 100644
--- a/source/blender/editors/interface/view2d_ops.c
+++ b/source/blender/editors/interface/view2d_ops.c
@@ -46,6 +46,8 @@
#include "UI_view2d.h"
+#include "PIL_time.h" /* USER_ZOOM_CONT */
+
static int view2d_poll(bContext *C)
{
ARegion *ar= CTX_wm_region(C);
@@ -493,7 +495,11 @@ void VIEW2D_OT_scroll_up(wmOperatorType *ot)
typedef struct v2dViewZoomData {
View2D *v2d; /* view2d we're operating in */
ARegion *ar;
-
+
+ /* needed for continuous zoom */
+ wmTimer *timer;
+ double timer_lastdraw;
+
int lastx, lasty; /* previous x/y values of mouse in window */
float dx, dy; /* running tally of previous delta values (for obtaining final zoom) */
float mx_2d, my_2d; /* initial mouse location in v2d coords */
@@ -689,7 +695,7 @@ void VIEW2D_OT_zoom_in(wmOperatorType *ot)
/* api callbacks */
ot->invoke= view_zoomin_invoke;
- ot->exec= view_zoomin_exec;
+// ot->exec= view_zoomin_exec; // XXX, needs view_zoomdrag_init called first.
ot->poll= view_zoom_poll;
/* rna - must keep these in sync with the other operators */
@@ -746,7 +752,7 @@ void VIEW2D_OT_zoom_out(wmOperatorType *ot)
/* api callbacks */
ot->invoke= view_zoomout_invoke;
- ot->exec= view_zoomout_exec;
+// ot->exec= view_zoomout_exec; // XXX, needs view_zoomdrag_init called first.
ot->poll= view_zoom_poll;
/* rna - must keep these in sync with the other operators */
@@ -773,7 +779,18 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op)
/* get amount to move view by */
dx= RNA_float_get(op->ptr, "deltax");
dy= RNA_float_get(op->ptr, "deltay");
-
+
+ /* continous zoom shouldn't move that fast... */
+ if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop?
+ double time= PIL_check_seconds_timer();
+ float time_step= (float)(time - vzd->timer_lastdraw);
+
+ dx *= time_step * 0.5f;
+ dy *= time_step * 0.5f;
+
+ vzd->timer_lastdraw= time;
+ }
+
/* only move view on an axis if change is allowed */
if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0) {
if (v2d->keepofs & V2D_LOCKOFS_X) {
@@ -823,9 +840,14 @@ static void view_zoomdrag_apply(bContext *C, wmOperator *op)
}
/* cleanup temp customdata */
-static void view_zoomdrag_exit(wmOperator *op)
+static void view_zoomdrag_exit(bContext *C, wmOperator *op)
{
if (op->customdata) {
+ v2dViewZoomData *vzd= op->customdata;
+
+ if(vzd->timer)
+ WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), vzd->timer);
+
MEM_freeN(op->customdata);
op->customdata= NULL;
}
@@ -838,7 +860,7 @@ static int view_zoomdrag_exec(bContext *C, wmOperator *op)
return OPERATOR_PASS_THROUGH;
view_zoomdrag_apply(C, op);
- view_zoomdrag_exit(op);
+ view_zoomdrag_exit(C, op);
return OPERATOR_FINISHED;
}
@@ -873,7 +895,7 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, wmEvent *event)
RNA_float_set(op->ptr, "deltay", dy);
view_zoomdrag_apply(C, op);
- view_zoomdrag_exit(op);
+ view_zoomdrag_exit(C, op);
return OPERATOR_FINISHED;
}
@@ -902,6 +924,12 @@ static int view_zoomdrag_invoke(bContext *C, wmOperator *op, wmEvent *event)
/* add temp handler */
WM_event_add_modal_handler(C, op);
+ if (U.viewzoom == USER_ZOOM_CONT) {
+ /* needs a timer to continue redrawing */
+ vzd->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f);
+ vzd->timer_lastdraw= PIL_check_seconds_timer();
+ }
+
return OPERATOR_RUNNING_MODAL;
}
@@ -912,85 +940,87 @@ static int view_zoomdrag_modal(bContext *C, wmOperator *op, wmEvent *event)
View2D *v2d= vzd->v2d;
/* execute the events */
- switch (event->type) {
- case MOUSEMOVE:
- {
- float dx, dy;
+ if (event->type == TIMER && event->customdata == vzd->timer) {
+ view_zoomdrag_apply(C, op);
+ }
+ else if(event->type == MOUSEMOVE) {
+ float dx, dy;
+
+ /* calculate new delta transform, based on zooming mode */
+ if (U.viewzoom == USER_ZOOM_SCALE) {
+ /* 'scale' zooming */
+ float dist;
- /* calculate new delta transform, based on zooming mode */
- if (U.viewzoom == USER_ZOOM_SCALE) {
- /* 'scale' zooming */
- float dist;
-
- /* x-axis transform */
- dist = (v2d->mask.xmax - v2d->mask.xmin) / 2.0f;
- dx= 1.0f - ((float)fabs(vzd->lastx - dist) + 2.0f) / ((float)fabs(event->x - dist) + 2.0f);
- dx*= 0.5f * (v2d->cur.xmax - v2d->cur.xmin);
-
- /* y-axis transform */
- dist = (v2d->mask.ymax - v2d->mask.ymin) / 2.0f;
- dy= 1.0f - ((float)fabs(vzd->lasty - dist) + 2.0f) / ((float)fabs(event->y - dist) + 2.0f);
- dy*= 0.5f * (v2d->cur.ymax - v2d->cur.ymin);
- }
- else {
- /* 'continuous' or 'dolly' */
- float fac;
-
- /* x-axis transform */
- fac= 0.01f * (event->x - vzd->lastx);
- dx= fac * (v2d->cur.xmax - v2d->cur.xmin);
-
- /* y-axis transform */
- fac= 0.01f * (event->y - vzd->lasty);
- dy= fac * (v2d->cur.ymax - v2d->cur.ymin);
-
- /* continous zoom shouldn't move that fast... */
- if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop?
- dx /= 20.0f;
- dy /= 20.0f;
- }
- }
+ /* x-axis transform */
+ dist = (v2d->mask.xmax - v2d->mask.xmin) / 2.0f;
+ dx= 1.0f - ((float)fabs(vzd->lastx - dist) + 2.0f) / ((float)fabs(event->x - dist) + 2.0f);
+ dx*= 0.5f * (v2d->cur.xmax - v2d->cur.xmin);
- /* set transform amount, and add current deltas to stored total delta (for redo) */
- RNA_float_set(op->ptr, "deltax", dx);
- RNA_float_set(op->ptr, "deltay", dy);
- vzd->dx += dx;
- vzd->dy += dy;
-
- /* store mouse coordinates for next time, if not doing continuous zoom
- * - continuous zoom only depends on distance of mouse to starting point to determine rate of change
- */
- if (U.viewzoom != USER_ZOOM_CONT) { // XXX store this setting as RNA prop?
- vzd->lastx= event->x;
- vzd->lasty= event->y;
- }
-
- /* apply zooming */
- view_zoomdrag_apply(C, op);
+ /* y-axis transform */
+ dist = (v2d->mask.ymax - v2d->mask.ymin) / 2.0f;
+ dy= 1.0f - ((float)fabs(vzd->lasty - dist) + 2.0f) / ((float)fabs(event->y - dist) + 2.0f);
+ dy*= 0.5f * (v2d->cur.ymax - v2d->cur.ymin);
}
- break;
+ else {
+ /* 'continuous' or 'dolly' */
+ float fac;
- case LEFTMOUSE:
- case MIDDLEMOUSE:
- if (event->val==KM_RELEASE) {
- /* for redo, store the overall deltas - need to respect zoom-locks here... */
- if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0)
- RNA_float_set(op->ptr, "deltax", vzd->dx);
- else
- RNA_float_set(op->ptr, "deltax", 0);
-
- if ((v2d->keepzoom & V2D_LOCKZOOM_Y)==0)
- RNA_float_set(op->ptr, "deltay", vzd->dy);
- else
- RNA_float_set(op->ptr, "deltay", 0);
+ /* x-axis transform */
+ fac= 0.01f * (event->x - vzd->lastx);
+ dx= fac * (v2d->cur.xmax - v2d->cur.xmin);
+
+ /* y-axis transform */
+ fac= 0.01f * (event->y - vzd->lasty);
+ dy= fac * (v2d->cur.ymax - v2d->cur.ymin);
+#if 0
+ /* continous zoom shouldn't move that fast... */
+ if (U.viewzoom == USER_ZOOM_CONT) { // XXX store this setting as RNA prop?
+ double time= PIL_check_seconds_timer();
+ float time_step= (float)(time - vzd->timer_lastdraw);
+
+ dx /= (0.1f / time_step);
+ dy /= (0.1f / time_step);
- /* free customdata */
- view_zoomdrag_exit(op);
- WM_cursor_restore(CTX_wm_window(C));
-
- return OPERATOR_FINISHED;
+ vzd->timer_lastdraw= time;
}
- break;
+#endif
+ }
+
+ /* set transform amount, and add current deltas to stored total delta (for redo) */
+ RNA_float_set(op->ptr, "deltax", dx);
+ RNA_float_set(op->ptr, "deltay", dy);
+ vzd->dx += dx;
+ vzd->dy += dy;
+
+ /* store mouse coordinates for next time, if not doing continuous zoom
+ * - continuous zoom only depends on distance of mouse to starting point to determine rate of change
+ */
+ if (U.viewzoom != USER_ZOOM_CONT) { // XXX store this setting as RNA prop?
+ vzd->lastx= event->x;
+ vzd->lasty= event->y;
+ }
+
+ /* apply zooming */
+ view_zoomdrag_apply(C, op);
+ } else if (ELEM(event->type, LEFTMOUSE, MIDDLEMOUSE)) {
+ if (event->val==KM_RELEASE) {
+ /* for redo, store the overall deltas - need to respect zoom-locks here... */
+ if ((v2d->keepzoom & V2D_LOCKZOOM_X)==0)
+ RNA_float_set(op->ptr, "deltax", vzd->dx);
+ else
+ RNA_float_set(op->ptr, "deltax", 0);
+
+ if ((v2d->keepzoom & V2D_LOCKZOOM_Y)==0)
+ RNA_float_set(op->ptr, "deltay", vzd->dy);
+ else
+ RNA_float_set(op->ptr, "deltay", 0);
+
+ /* free customdata */
+ view_zoomdrag_exit(C, op);
+ WM_cursor_restore(CTX_wm_window(C));
+
+ return OPERATOR_FINISHED;
+ }
}
return OPERATOR_RUNNING_MODAL;
diff --git a/source/blender/editors/mesh/editface.c b/source/blender/editors/mesh/editface.c
index e33e24a75ce..b34f024e9fb 100644
--- a/source/blender/editors/mesh/editface.c
+++ b/source/blender/editors/mesh/editface.c
@@ -52,7 +52,7 @@
#include "BIF_gl.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
//#include "BPY_extern.h"
//#include "BPY_menus.h"
#endif
@@ -67,14 +67,9 @@
/* own include */
#include "mesh_intern.h"
-/* ***************** XXX **************** */
-static int pupmenu(const char *UNUSED(dummy)) {return 0;}
-/* ***************** XXX **************** */
-
-
/* copy the face flags, most importantly selection from the mesh to the final derived mesh,
* use in object mode when selecting faces (while painting) */
-void object_facesel_flush_dm(Object *ob)
+void paintface_flush_flags(Object *ob)
{
Mesh *me= get_mesh(ob);
DerivedMesh *dm= ob->derivedFinal;
@@ -162,7 +157,7 @@ MTFace *EM_get_active_mtface(EditMesh *em, EditFace **act_efa, MCol **mcol, int
return NULL;
}
-void reveal_tface(Scene *scene)
+void paintface_unhide(Scene *scene)
{
Mesh *me;
MFace *mface;
@@ -181,11 +176,10 @@ void reveal_tface(Scene *scene)
mface++;
}
- object_facesel_flush_dm(OBACT);
-// XXX notifier! object_tface_flags_changed(OBACT, 0);
+ paintface_flush_flags(OBACT);
}
-void hide_tface(Scene *scene)
+void paintface_hide(Scene *scene)
{
Mesh *me;
MFace *mface;
@@ -196,7 +190,7 @@ void hide_tface(Scene *scene)
if(me==0 || me->totface==0) return;
if(alt) {
- reveal_tface(scene);
+ paintface_unhide(scene);
return;
}
@@ -217,8 +211,7 @@ void hide_tface(Scene *scene)
mface++;
}
- object_facesel_flush_dm(OBACT);
-// XXX notifier! object_tface_flags_changed(OBACT, 0);
+ paintface_flush_flags(OBACT);
}
/* Set tface seams based on edge data, uses hash table to find seam edges. */
@@ -236,7 +229,7 @@ static void hash_add_face(EdgeHash *ehash, MFace *mf)
}
-void select_linked_tfaces_with_seams(int mode, Mesh *me, unsigned int index)
+static void select_linked_tfaces_with_seams(int mode, Mesh *me, unsigned int index)
{
MFace *mf;
int a, doit=1, mark=0;
@@ -338,12 +331,9 @@ void select_linked_tfaces_with_seams(int mode, Mesh *me, unsigned int index)
}
MEM_freeN(linkflag);
-
- // BIF_undo_push("Select linked UV face");
- // object_tface_flags_changed(OBACT, 0);
}
-void select_linked_tfaces(bContext *UNUSED(C), Object *ob, short UNUSED(mval[2]), int mode)
+void paintface_select_linked(bContext *UNUSED(C), Object *ob, short UNUSED(mval[2]), int mode)
{
Mesh *me;
unsigned int index=0;
@@ -361,10 +351,11 @@ void select_linked_tfaces(bContext *UNUSED(C), Object *ob, short UNUSED(mval[2])
select_linked_tfaces_with_seams(mode, me, index);
- object_facesel_flush_dm(ob);
+ paintface_flush_flags(ob);
}
-void selectall_tface(Object *ob, int action)
+/* note: caller needs to run paintface_flush_flags(ob) after this */
+void paintface_deselect_all_visible(Object *ob, int action, short flush_flags)
{
Mesh *me;
MFace *mface;
@@ -406,11 +397,12 @@ void selectall_tface(Object *ob, int action)
mface++;
}
- object_facesel_flush_dm(ob);
-// XXX notifier! object_tface_flags_changed(OBACT, 0);
+ if(flush_flags) {
+ paintface_flush_flags(ob);
+ }
}
-void selectswap_tface(Scene *scene)
+void paintface_select_swap(Scene *scene)
{
Mesh *me;
MFace *mface;
@@ -430,11 +422,10 @@ void selectswap_tface(Scene *scene)
mface++;
}
- object_facesel_flush_dm(OBACT);
-// XXX notifier! object_tface_flags_changed(OBACT, 0);
+ paintface_flush_flags(OBACT);
}
-int minmax_tface(Object *ob, float *min, float *max)
+int paintface_minmax(Object *ob, float *min, float *max)
{
Mesh *me= get_mesh(ob);
MFace *mf;
@@ -672,7 +663,7 @@ int edgetag_shortest_path(Scene *scene, EditMesh *em, EditEdge *source, EditEdge
}
/* *************************************** */
-
+#if 0
static void seam_edgehash_insert_face(EdgeHash *ehash, MFace *mf)
{
BLI_edgehash_insert(ehash, mf->v1, mf->v2, NULL);
@@ -739,11 +730,10 @@ void seam_mark_clear_tface(Scene *scene, short mode)
// unwrap_lscm(1);
me->drawflag |= ME_DRAWSEAMS;
-
-// XXX notifier! object_tface_flags_changed(OBACT, 1);
}
+#endif
-int face_select(struct bContext *C, Object *ob, short mval[2], int extend)
+int paintface_mouse_select(struct bContext *C, Object *ob, short mval[2], int extend)
{
Mesh *me;
MFace *mface, *msel;
@@ -780,48 +770,38 @@ int face_select(struct bContext *C, Object *ob, short mval[2], int extend)
/* image window redraw */
- object_facesel_flush_dm(ob);
-// XXX notifier! object_tface_flags_changed(OBACT, 1);
+ paintface_flush_flags(ob);
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, ob->data);
ED_region_tag_redraw(CTX_wm_region(C)); // XXX - should redraw all 3D views
return 1;
}
-void face_borderselect(struct bContext *C, Object *ob, rcti *rect, int select, int extend)
+int do_paintface_box_select(ViewContext *vc, rcti *rect, int select, int extend)
{
Mesh *me;
MFace *mface;
struct ImBuf *ibuf;
unsigned int *rt;
- int a, sx, sy, index;
+ int a, index;
char *selar;
-
- ViewContext vc;
- view3d_set_viewcontext(C, &vc);
+ int sx= rect->xmax-rect->xmin+1;
+ int sy= rect->ymax-rect->ymin+1;
- me= get_mesh(ob);
- if(me==0) return;
- if(me->totface==0) return;
+ me= get_mesh(vc->obact);
+
+ if(me==NULL || me->totface==0 || sx*sy <= 0)
+ return OPERATOR_CANCELLED;
selar= MEM_callocN(me->totface+1, "selar");
- sx= (rect->xmax-rect->xmin+1);
- sy= (rect->ymax-rect->ymin+1);
- if(sx*sy<=0) return;
+ if (extend == 0 && select)
+ paintface_deselect_all_visible(vc->obact, SEL_DESELECT, FALSE);
- if (extend == 0 && select) {
- mface= me->mface;
- for(a=1; a<=me->totface; a++, mface++) {
- if((mface->flag & ME_HIDE) == 0)
- mface->flag &= ~ME_FACE_SEL;
- }
- }
-
- view3d_validate_backbuf(&vc);
+ view3d_validate_backbuf(vc);
ibuf = IMB_allocImBuf(sx,sy,32,IB_rect);
rt = ibuf->rect;
- glReadPixels(rect->xmin+vc.ar->winrct.xmin, rect->ymin+vc.ar->winrct.ymin, sx, sy, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect);
+ glReadPixels(rect->xmin+vc->ar->winrct.xmin, rect->ymin+vc->ar->winrct.ymin, sx, sy, GL_RGBA, GL_UNSIGNED_BYTE, ibuf->rect);
if(ENDIAN_ORDER==B_ENDIAN) IMB_convert_rgba_to_abgr(ibuf);
a= sx*sy;
@@ -847,11 +827,11 @@ void face_borderselect(struct bContext *C, Object *ob, rcti *rect, int select, i
IMB_freeImBuf(ibuf);
MEM_freeN(selar);
-
-// XXX notifier! object_tface_flags_changed(OBACT, 0);
#ifdef __APPLE__
glReadBuffer(GL_BACK);
#endif
-
- object_facesel_flush_dm(ob);
+
+ paintface_flush_flags(vc->obact);
+
+ return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/mesh/editmesh.c b/source/blender/editors/mesh/editmesh.c
index 6665e82af19..d95a2570e80 100644
--- a/source/blender/editors/mesh/editmesh.c
+++ b/source/blender/editors/mesh/editmesh.c
@@ -54,6 +54,7 @@
#include "BKE_mesh.h"
#include "BKE_paint.h"
#include "BKE_report.h"
+#include "BKE_multires.h"
#include "ED_mesh.h"
#include "ED_object.h"
@@ -1306,6 +1307,9 @@ void load_editMesh(Scene *scene, Object *ob)
}
mesh_calc_normals(me->mvert, me->totvert, me->mface, me->totface, NULL);
+
+ /* topology could be changed, ensure mdisps are ok */
+ multires_topology_changed(ob);
}
void remake_editMesh(Scene *scene, Object *ob)
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index 89991015419..5dd1b1227a3 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -138,8 +138,11 @@ printf("%d\n", event->val);
float nor[3]= {0.0, 0.0, 0.0};
/* 2D normal calc */
- float mval_f[2]= {(float)event->mval[0], (float)event->mval[1]};
-
+ float mval_f[2];
+
+ mval_f[0]= (float)event->mval[0];
+ mval_f[1]= (float)event->mval[1];
+
done= 0;
/* calculate the normal for selected edges */
diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c
index b632cb2a842..b7ae0759f7e 100644
--- a/source/blender/editors/mesh/editmesh_lib.c
+++ b/source/blender/editors/mesh/editmesh_lib.c
@@ -2578,18 +2578,23 @@ void em_deselect_nth_face(EditMesh *em, int nth, EditFace *efa_act)
ok = 0;
for (efa= em->faces.first; efa; efa= efa->next) {
- if(efa->tmp.l==1) { /* initialize */
- tag_face_edges(efa);
+ if(efa->f & SELECT) {
+ if(efa->tmp.l==1) { /* initialize */
+ tag_face_edges(efa);
+ }
+
+ if(efa->tmp.l) {
+ efa->tmp.l++;
+ }
}
-
- if(efa->tmp.l)
- efa->tmp.l++;
}
for (efa= em->faces.first; efa; efa= efa->next) {
- if(efa->tmp.l==0 && tag_face_edges_test(efa)) {
- efa->tmp.l= 1;
- ok = 1; /* keep looping */
+ if(efa->f & SELECT) {
+ if(efa->tmp.l==0 && tag_face_edges_test(efa)) {
+ efa->tmp.l= 1;
+ ok = 1; /* keep looping */
+ }
}
}
}
@@ -2644,18 +2649,23 @@ void em_deselect_nth_edge(EditMesh *em, int nth, EditEdge *eed_act)
ok = 0;
for (eed= em->edges.first; eed; eed= eed->next) {
- if(eed->tmp.l==1) { /* initialize */
- tag_edge_verts(eed);
+ if(eed->f & SELECT) {
+ if(eed->tmp.l==1) { /* initialize */
+ tag_edge_verts(eed);
+ }
+
+ if(eed->tmp.l) {
+ eed->tmp.l++;
+ }
}
-
- if(eed->tmp.l)
- eed->tmp.l++;
}
for (eed= em->edges.first; eed; eed= eed->next) {
- if(eed->tmp.l==0 && tag_edge_verts_test(eed)) {
- eed->tmp.l= 1;
- ok = 1; /* keep looping */
+ if(eed->f & SELECT) {
+ if(eed->tmp.l==0 && tag_edge_verts_test(eed)) {
+ eed->tmp.l= 1;
+ ok = 1; /* keep looping */
+ }
}
}
}
@@ -2711,18 +2721,22 @@ void em_deselect_nth_vert(EditMesh *em, int nth, EditVert *eve_act)
ok = 0;
for (eve= em->verts.first; eve; eve= eve->next) {
- if(eve->tmp.l)
- eve->tmp.l++;
+ if(eve->f & SELECT) {
+ if(eve->tmp.l)
+ eve->tmp.l++;
+ }
}
for (eed= em->edges.first; eed; eed= eed->next) {
- if(eed->v1->tmp.l==2 && eed->v2->tmp.l==0) { /* initialize */
- eed->v2->tmp.l= 1;
- ok = 1; /* keep looping */
- }
- else if(eed->v2->tmp.l==2 && eed->v1->tmp.l==0) { /* initialize */
- eed->v1->tmp.l= 1;
- ok = 1; /* keep looping */
+ if(eed->f & SELECT) {
+ if(eed->v1->tmp.l==2 && eed->v2->tmp.l==0) { /* initialize */
+ eed->v2->tmp.l= 1;
+ ok = 1; /* keep looping */
+ }
+ else if(eed->v2->tmp.l==2 && eed->v1->tmp.l==0) { /* initialize */
+ eed->v1->tmp.l= 1;
+ ok = 1; /* keep looping */
+ }
}
}
}
@@ -2740,30 +2754,77 @@ void em_deselect_nth_vert(EditMesh *em, int nth, EditVert *eve_act)
// EM_nfaces_selected(em); // flush does these
}
-int EM_deselect_nth(EditMesh *em, int nth)
+static void deselect_nth_active(EditMesh *em, EditVert **eve_p, EditEdge **eed_p, EditFace **efa_p)
{
EditSelection *ese;
- ese = ((EditSelection*)em->selected.last);
+
+ *eve_p= NULL;
+ *eed_p= NULL;
+ *efa_p= NULL;
+
+ ese= (EditSelection*)em->selected.last;
+
if(ese) {
- if(ese->type == EDITVERT) {
- em_deselect_nth_vert(em, nth, (EditVert*)ese->data);
- return 1;
- }
-
- if(ese->type == EDITEDGE) {
- em_deselect_nth_edge(em, nth, (EditEdge*)ese->data);
- return 1;
- }
- }
- else {
- EditFace *efa_act = EM_get_actFace(em, 0);
- if(efa_act) {
- em_deselect_nth_face(em, nth, efa_act);
- return 1;
+ switch(ese->type) {
+ case EDITVERT:
+ *eve_p= (EditVert *)ese->data;
+ return;
+ case EDITEDGE:
+ *eed_p= (EditEdge *)ese->data;
+ return;
+ case EDITFACE:
+ *efa_p= (EditFace *)ese->data;
+ return;
}
}
- return 0;
+ if(em->selectmode & SCE_SELECT_VERTEX) {
+ EditVert *eve;
+ for (eve= em->verts.first; eve; eve= eve->next) {
+ if(eve->f & SELECT) {
+ *eve_p= eve;
+ return;
+ }
+ }
+ }
+
+ if(em->selectmode & SCE_SELECT_EDGE) {
+ EditEdge *eed;
+ for (eed= em->edges.first; eed; eed= eed->next) {
+ if(eed->f & SELECT) {
+ *eed_p= eed;
+ return;
+ }
+ }
+ }
+
+ if(em->selectmode & SCE_SELECT_FACE) {
+ EditFace *efa= EM_get_actFace(em, 1);
+ if(efa) {
+ *efa_p= efa;
+ return;
+ }
+ }
+}
+
+int EM_deselect_nth(EditMesh *em, int nth)
+{
+ EditVert *eve;
+ EditEdge *eed;
+ EditFace *efa;
+
+ deselect_nth_active(em, &eve, &eed, &efa);
+
+ if(eve)
+ em_deselect_nth_vert(em, nth, eve);
+ else if (eed)
+ em_deselect_nth_edge(em, nth, eed);
+ else if (efa)
+ em_deselect_nth_face(em, nth, efa);
+ else
+ return 0;
+
+ return 1;
}
void EM_project_snap_verts(bContext *C, ARegion *ar, Object *obedit, EditMesh *em)
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c
index ab01a773020..309ee6b57e2 100644
--- a/source/blender/editors/mesh/editmesh_mods.c
+++ b/source/blender/editors/mesh/editmesh_mods.c
@@ -4581,10 +4581,7 @@ static int mesh_select_nth_exec(bContext *C, wmOperator *op)
EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
int nth = RNA_int_get(op->ptr, "nth");
- if(EM_deselect_nth(em, nth) == 0) {
- BKE_report(op->reports, RPT_ERROR, "Mesh has no active vert/edge/face.");
- return OPERATOR_CANCELLED;
- }
+ EM_deselect_nth(em, nth);
BKE_mesh_end_editmesh(obedit->data, em);
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 7fbdef7b391..eb450c7434b 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -57,6 +57,7 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise
#include "BLI_ghash.h"
#include "BLI_linklist.h"
#include "BLI_heap.h"
+#include "BLI_scanfill.h"
#include "BKE_context.h"
#include "BKE_depsgraph.h"
diff --git a/source/blender/editors/mesh/meshtools.c b/source/blender/editors/mesh/meshtools.c
index d8b34311e76..0307ba13424 100644
--- a/source/blender/editors/mesh/meshtools.c
+++ b/source/blender/editors/mesh/meshtools.c
@@ -63,6 +63,7 @@
#include "BKE_mesh.h"
#include "BKE_material.h"
#include "BKE_report.h"
+#include "BKE_multires.h"
#include "BLO_sys_types.h" // for intptr_t support
@@ -396,6 +397,9 @@ int join_mesh_exec(bContext *C, wmOperator *UNUSED(op))
}
}
+ if(base->object!=ob)
+ multiresModifier_prepare_join(scene, base->object, ob);
+
CustomData_merge(&me->fdata, &fdata, CD_MASK_MESH, CD_DEFAULT, totface);
CustomData_copy_data(&me->fdata, &fdata, 0, faceofs, me->totface);
diff --git a/source/blender/editors/object/CMakeLists.txt b/source/blender/editors/object/CMakeLists.txt
index bfcb233e466..224d72895ba 100644
--- a/source/blender/editors/object/CMakeLists.txt
+++ b/source/blender/editors/object/CMakeLists.txt
@@ -55,8 +55,8 @@ IF(WIN32)
LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
-IF(NOT WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
-ENDIF(NOT WITH_PYTHON)
+IF(WITH_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
+ENDIF(WITH_PYTHON)
BLENDERLIB(bf_editor_object "${SRC}" "${INC}")
diff --git a/source/blender/editors/object/SConscript b/source/blender/editors/object/SConscript
index 98085dd2fe5..e39190c0ef3 100644
--- a/source/blender/editors/object/SConscript
+++ b/source/blender/editors/object/SConscript
@@ -17,7 +17,7 @@ if env['OURPLATFORM'] == 'linux2':
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
-if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+if env['WITH_BF_PYTHON']:
+ defs.append('WITH_PYTHON')
env.BlenderLib ( 'bf_editors_object', sources, Split(incs), defs, libtype=['core'], priority=[35] )
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 56af4ce1b1c..196440f29cf 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -607,7 +607,7 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
{
Object *obedit= CTX_data_edit_object(C);
View3D *v3d= CTX_wm_view3d(C);
- RegionView3D *rv3d= NULL;
+ RegionView3D *rv3d= CTX_wm_region_view3d(C);
int newob= 0;
int enter_editmode;
unsigned int layer;
@@ -629,9 +629,6 @@ static int object_armature_add_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
- if(v3d)
- rv3d= CTX_wm_region(C)->regiondata;
-
/* v3d and rv3d are allowed to be NULL */
add_primitive_bone(CTX_data_scene(C), v3d, rv3d);
@@ -985,7 +982,7 @@ static void make_object_duplilist_real(bContext *C, Scene *scene, Base *base)
ob->lay= base->lay;
copy_m4_m4(ob->obmat, dob->mat);
- object_apply_mat4(ob, ob->obmat);
+ object_apply_mat4(ob, ob->obmat, FALSE);
}
copy_object_set_idnew(C, 0);
@@ -1647,7 +1644,7 @@ static int duplicate_exec(bContext *C, wmOperator *op)
if(BASACT==base)
ED_base_object_activate(C, basen);
- ED_render_id_flush_update(bmain, basen->object->data);
+ DAG_id_flush_update(base->object->data, 0);
}
CTX_DATA_END;
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c
index 0c28d4a608b..dd422f6d221 100644
--- a/source/blender/editors/object/object_bake.c
+++ b/source/blender/editors/object/object_bake.c
@@ -307,9 +307,7 @@ static int bake_image_exec(bContext *C, wmOperator *op)
}
else {
ListBase threads;
- BakeRender bkr;
-
- memset(&bkr, 0, sizeof(bkr));
+ BakeRender bkr= {0};
init_bake_internal(&bkr, C);
bkr.reports= op->reports;
diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c
index 09760a8f51b..e222913e703 100644
--- a/source/blender/editors/object/object_constraint.c
+++ b/source/blender/editors/object/object_constraint.c
@@ -53,7 +53,7 @@
#include "BKE_report.h"
#include "BIK_api.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -154,7 +154,7 @@ void validate_pyconstraint_cb (void *arg1, void *arg2)
data->text = text;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* this returns a string for the list of usable pyconstraint script names */
char *buildmenu_pyconstraints (Text *con_text, int *pyconindex)
{
@@ -195,12 +195,12 @@ char *buildmenu_pyconstraints (Text *con_text, int *pyconindex)
return str;
}
-#endif /* DISABLE_PYTHON */
+#endif /* WITH_PYTHON */
/* this callback gets called when the 'refresh' button of a pyconstraint gets pressed */
void update_pyconstraint_cb (void *arg1, void *arg2)
{
-#ifdef DISABLE_PYTHON
+#ifndef WITH_PYTHON
(void)arg1; /* unused */
(void)arg2; /* unused */
#else
@@ -726,6 +726,11 @@ static int childof_clear_inverse_exec (bContext *C, wmOperator *op)
bConstraint *con = edit_constraint_property_get(op, ob, CONSTRAINT_TYPE_CHILDOF);
bChildOfConstraint *data= (con) ? (bChildOfConstraint *)con->data : NULL;
+ if(data==NULL) {
+ BKE_report(op->reports, RPT_ERROR, "Childof constraint not found.");
+ return OPERATOR_CANCELLED;
+ }
+
/* simply clear the matrix */
unit_m4(data->invmat);
@@ -1297,7 +1302,7 @@ static int constraint_add_exec(bContext *C, wmOperator *op, Object *ob, ListBase
case CONSTRAINT_TYPE_PYTHON: // FIXME: this code is not really valid anymore
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
char *menustr;
int scriptint= 0;
/* popup a list of usable scripts */
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 32e49ce3f71..118c649adde 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -1323,7 +1323,7 @@ void copy_attr(Main *bmain, Scene *scene, View3D *v3d, short event)
BKE_text_to_curve(scene, base->object, 0); /* needed? */
- strcpy(cu1->family, cu->family);
+ BLI_strncpy(cu1->family, cu->family, sizeof(cu1->family));
base->object->recalc |= OB_RECALC_DATA;
}
diff --git a/source/blender/editors/object/object_hook.c b/source/blender/editors/object/object_hook.c
index 3c3e7f1df76..ee7164046ce 100644
--- a/source/blender/editors/object/object_hook.c
+++ b/source/blender/editors/object/object_hook.c
@@ -447,7 +447,7 @@ static void add_hook_object(Main *bmain, Scene *scene, Object *obedit, Object *o
hmd->indexar= indexar;
copy_v3_v3(hmd->cent, cent);
hmd->totindex= tot;
- BLI_strncpy(hmd->name, name, 32);
+ BLI_strncpy(hmd->name, name, sizeof(hmd->name));
/* matrix calculus */
/* vert x (obmat x hook->imat) x hook->obmat x ob->imat */
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 3d36ed9f45e..a9759c8c838 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -603,12 +603,13 @@ void OBJECT_OT_modifier_add(wmOperatorType *ot)
/************************ generic functions for operators using mod names and data context *********************/
-static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type)
+static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type, int obtype_flag)
{
PointerRNA ptr= CTX_data_pointer_get_type(C, "modifier", rna_type);
Object *ob= (ptr.id.data)?ptr.id.data:ED_object_active_context(C);
if (!ob || ob->id.lib) return 0;
+ if (obtype_flag && ((1<type) & obtype_flag)==0) return 0;
if (ptr.data && ((ID*)ptr.id.data)->lib) return 0;
return 1;
@@ -616,7 +617,7 @@ static int edit_modifier_poll_generic(bContext *C, StructRNA *rna_type)
static int edit_modifier_poll(bContext *C)
{
- return edit_modifier_poll_generic(C, &RNA_Modifier);
+ return edit_modifier_poll_generic(C, &RNA_Modifier, 0);
}
static void edit_modifier_properties(wmOperatorType *ot)
@@ -913,7 +914,7 @@ void OBJECT_OT_modifier_copy(wmOperatorType *ot)
static int multires_poll(bContext *C)
{
- return edit_modifier_poll_generic(C, &RNA_MultiresModifier);
+ return edit_modifier_poll_generic(C, &RNA_MultiresModifier, (1<parent= NULL;
- object_apply_mat4(ob, ob->obmat);
+ object_apply_mat4(ob, ob->obmat, TRUE);
}
else if(type == 2)
unit_m4(ob->parentinv);
@@ -906,7 +906,7 @@ static int object_track_clear_exec(bContext *C, wmOperator *op)
}
if(type == 1)
- object_apply_mat4(ob, ob->obmat);
+ object_apply_mat4(ob, ob->obmat, TRUE);
}
CTX_DATA_END;
diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c
index 66c5ab4ec4b..bd8a7f99978 100644
--- a/source/blender/editors/object/object_transform.c
+++ b/source/blender/editors/object/object_transform.c
@@ -47,6 +47,7 @@
#include "BKE_mesh.h"
#include "BKE_object.h"
#include "BKE_report.h"
+#include "BKE_multires.h"
#include "RNA_define.h"
#include "RNA_access.h"
@@ -119,7 +120,7 @@ void OBJECT_OT_location_clear(wmOperatorType *ot)
/* api callbacks */
ot->exec= object_location_clear_exec;
- ot->poll= ED_operator_object_active_editable;
+ ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -264,7 +265,7 @@ void OBJECT_OT_rotation_clear(wmOperatorType *ot)
/* api callbacks */
ot->exec= object_rotation_clear_exec;
- ot->poll= ED_operator_object_active_editable;
+ ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -330,7 +331,7 @@ void OBJECT_OT_scale_clear(wmOperatorType *ot)
/* api callbacks */
ot->exec= object_scale_clear_exec;
- ot->poll= ED_operator_object_active_editable;
+ ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -372,7 +373,7 @@ void OBJECT_OT_origin_clear(wmOperatorType *ot)
/* api callbacks */
ot->exec= object_origin_clear_exec;
- ot->poll= ED_operator_object_active_editable;
+ ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -390,7 +391,7 @@ static void ignore_parent_tx(Main *bmain, Scene *scene, Object *ob )
/* a change was made, adjust the children to compensate */
for(ob_child=bmain->object.first; ob_child; ob_child=ob_child->id.next) {
if(ob_child->parent == ob) {
- object_apply_mat4(ob_child, ob_child->obmat);
+ object_apply_mat4(ob_child, ob_child->obmat, TRUE);
what_does_parent(scene, ob_child, &workob);
invert_m4_m4(ob_child->parentinv, workob.obmat);
}
@@ -491,6 +492,8 @@ static int apply_objects_internal(bContext *C, ReportList *reports, int apply_lo
if(ob->type==OB_MESH) {
me= ob->data;
+ multiresModifier_scale_disp(scene, ob);
+
/* adjust data */
mvert= me->mvert;
for(a=0; atotvert; a++, mvert++)
@@ -574,7 +577,7 @@ static int visual_transform_apply_exec(bContext *C, wmOperator *UNUSED(op))
CTX_DATA_BEGIN(C, Object*, ob, selected_editable_objects) {
where_is_object(scene, ob);
- object_apply_mat4(ob, ob->obmat);
+ object_apply_mat4(ob, ob->obmat, TRUE);
where_is_object(scene, ob);
change = 1;
@@ -597,7 +600,7 @@ void OBJECT_OT_visual_transform_apply(wmOperatorType *ot)
/* api callbacks */
ot->exec= visual_transform_apply_exec;
- ot->poll= ED_operator_object_active_editable;
+ ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -617,7 +620,7 @@ void OBJECT_OT_location_apply(wmOperatorType *ot)
/* api callbacks */
ot->exec= location_apply_exec;
- ot->poll= ED_operator_object_active_editable;
+ ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -637,7 +640,7 @@ void OBJECT_OT_scale_apply(wmOperatorType *ot)
/* api callbacks */
ot->exec= scale_apply_exec;
- ot->poll= ED_operator_object_active_editable;
+ ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -657,7 +660,7 @@ void OBJECT_OT_rotation_apply(wmOperatorType *ot)
/* api callbacks */
ot->exec= rotation_apply_exec;
- ot->poll= ED_operator_object_active_editable;
+ ot->poll= ED_operator_scene_editable;
/* flags */
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
diff --git a/source/blender/editors/object/object_vgroup.c b/source/blender/editors/object/object_vgroup.c
index 015fab05828..dd4864f928f 100644
--- a/source/blender/editors/object/object_vgroup.c
+++ b/source/blender/editors/object/object_vgroup.c
@@ -596,7 +596,7 @@ static void vgroup_select_verts(Object *ob, int select)
static void vgroup_duplicate(Object *ob)
{
bDeformGroup *dg, *cdg;
- char name[32], s[32];
+ char name[sizeof(dg->name)];
MDeformWeight *org, *cpy;
MDeformVert *dvert, **dvert_array=NULL;
int i, idg, icdg, dvert_tot=0;
@@ -605,26 +605,17 @@ static void vgroup_duplicate(Object *ob)
if(!dg)
return;
- if(strstr(dg->name, "_copy")) {
- BLI_strncpy(name, dg->name, 32); /* will be renamed _copy.001... etc */
+ if(!strstr(dg->name, "_copy")) {
+ BLI_snprintf(name, sizeof(name), "%s_copy", dg->name);
}
else {
- BLI_snprintf(name, 32, "%s_copy", dg->name);
- while(defgroup_find_name(ob, name)) {
- if((strlen(name) + 6) > 32) {
- if (G.f & G_DEBUG)
- printf("Internal error: the name for the new vertex group is > 32 characters");
- return;
- }
- strcpy(s, name);
- BLI_snprintf(name, 32, "%s_copy", s);
- }
- }
+ BLI_snprintf(name, sizeof(name), "%s", dg->name);
+ }
cdg = defgroup_duplicate(dg);
strcpy(cdg->name, name);
defgroup_unique_name(cdg, ob);
-
+
BLI_addtail(&ob->defbase, cdg);
idg = (ob->actdef-1);
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c
index 57867fdc441..e654b868622 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -774,6 +774,7 @@ static void PE_mirror_particle(Object *ob, DerivedMesh *dm, ParticleSystem *psys
if(mpoint->keys) MEM_freeN(mpoint->keys);
mpa->hair= MEM_dupallocN(pa->hair);
+ mpa->totkey= pa->totkey;
mpoint->keys= MEM_dupallocN(point->keys);
mpoint->totkey= point->totkey;
@@ -782,7 +783,7 @@ static void PE_mirror_particle(Object *ob, DerivedMesh *dm, ParticleSystem *psys
for(k=0; ktotkey; k++, mkey++, mhkey++) {
mkey->co= mhkey->co;
mkey->time= &mhkey->time;
- mkey->flag &= PEK_SELECT;
+ mkey->flag &= ~PEK_SELECT;
}
}
@@ -1512,6 +1513,17 @@ void PARTICLE_OT_select_linked(wmOperatorType *ot)
}
/************************ border select operator ************************/
+void PE_deselect_all_visible(PTCacheEdit *edit)
+{
+ POINT_P; KEY_K;
+
+ LOOP_VISIBLE_POINTS {
+ LOOP_SELECTED_KEYS {
+ key->flag &= ~PEK_SELECT;
+ point->flag |= PEP_EDIT_RECALC;
+ }
+ }
+}
int PE_border_select(bContext *C, rcti *rect, int select, int extend)
{
@@ -1523,16 +1535,8 @@ int PE_border_select(bContext *C, rcti *rect, int select, int extend)
if(!PE_start_edit(edit))
return OPERATOR_CANCELLED;
- if (extend == 0 && select) {
- POINT_P; KEY_K;
-
- LOOP_VISIBLE_POINTS {
- LOOP_SELECTED_KEYS {
- key->flag &= ~PEK_SELECT;
- point->flag |= PEP_EDIT_RECALC;
- }
- }
- }
+ if (extend == 0 && select)
+ PE_deselect_all_visible(edit);
PE_set_view3d_data(C, &data);
data.rect= rect;
@@ -1573,7 +1577,7 @@ int PE_circle_select(bContext *C, int selecting, short *mval, float rad)
/************************ lasso select operator ************************/
-int PE_lasso_select(bContext *C, short mcords[][2], short moves, short select)
+int PE_lasso_select(bContext *C, short mcords[][2], short moves, short extend, short select)
{
Scene *scene= CTX_data_scene(C);
Object *ob= CTX_data_active_object(C);
@@ -1589,6 +1593,9 @@ int PE_lasso_select(bContext *C, short mcords[][2], short moves, short select)
if(!PE_start_edit(edit))
return OPERATOR_CANCELLED;
+ if (extend == 0 && select)
+ PE_deselect_all_visible(edit);
+
unit_m4(mat);
LOOP_VISIBLE_POINTS {
@@ -1889,7 +1896,7 @@ static void rekey_particle(PEData *data, int pa_index)
{
PTCacheEdit *edit= data->edit;
ParticleSystem *psys= edit->psys;
- ParticleSimulationData sim = {data->scene, data->ob, edit->psys, NULL};
+ ParticleSimulationData sim= {0};
ParticleData *pa= psys->particles + pa_index;
PTCacheEditPoint *point = edit->points + pa_index;
ParticleKey state;
@@ -1898,6 +1905,10 @@ static void rekey_particle(PEData *data, int pa_index)
float dval, sta, end;
int k;
+ sim.scene= data->scene;
+ sim.ob= data->ob;
+ sim.psys= edit->psys;
+
pa->flag |= PARS_REKEY;
key= new_keys= MEM_callocN(data->totrekey * sizeof(HairKey),"Hair re-key keys");
@@ -1982,7 +1993,7 @@ static void rekey_particle_to_time(Scene *scene, Object *ob, int pa_index, float
{
PTCacheEdit *edit= PE_get_current(scene, ob);
ParticleSystem *psys;
- ParticleSimulationData sim = {scene, ob, edit ? edit->psys : NULL, NULL};
+ ParticleSimulationData sim= {0};
ParticleData *pa;
ParticleKey state;
HairKey *new_keys, *key;
@@ -1993,6 +2004,10 @@ static void rekey_particle_to_time(Scene *scene, Object *ob, int pa_index, float
psys = edit->psys;
+ sim.scene= scene;
+ sim.ob= ob;
+ sim.psys= psys;
+
pa= psys->particles + pa_index;
pa->flag |= PARS_REKEY;
@@ -2187,7 +2202,7 @@ static void subdivide_particle(PEData *data, int pa_index)
{
PTCacheEdit *edit= data->edit;
ParticleSystem *psys= edit->psys;
- ParticleSimulationData sim = {data->scene, data->ob, edit->psys, NULL};
+ ParticleSimulationData sim= {0};
ParticleData *pa= psys->particles + pa_index;
PTCacheEditPoint *point = edit->points + pa_index;
ParticleKey state;
@@ -2198,6 +2213,10 @@ static void subdivide_particle(PEData *data, int pa_index)
short totnewkey=0;
float endtime;
+ sim.scene= data->scene;
+ sim.ob= data->ob;
+ sim.psys= edit->psys;
+
for(k=0, ekey=point->keys; ktotkey-1; k++,ekey++) {
if(ekey->flag&PEK_SELECT && (ekey+1)->flag&PEK_SELECT)
totnewkey++;
@@ -3087,13 +3106,13 @@ static int brush_add(PEData *data, short number)
ParticleSystem *psys= edit->psys;
ParticleData *add_pars= MEM_callocN(number*sizeof(ParticleData),"ParticleData add");
ParticleSystemModifierData *psmd= psys_get_modifier(ob,psys);
- ParticleSimulationData sim = {scene, ob, psys, psmd};
+ ParticleSimulationData sim= {0};
ParticleEditSettings *pset= PE_settings(scene);
int i, k, n= 0, totpart= psys->totpart;
float mco[2];
short dmx= 0, dmy= 0;
float co1[3], co2[3], min_d, imat[4][4];
- float framestep, timestep= psys_get_timestep(&sim);
+ float framestep, timestep;
short size= pset->brush[PE_BRUSH_ADD].size;
short size2= size*size;
DerivedMesh *dm=0;
@@ -3103,7 +3122,14 @@ static int brush_add(PEData *data, short number)
return 0;
BLI_srandom(psys->seed+data->mval[0]+data->mval[1]);
-
+
+ sim.scene= scene;
+ sim.ob= ob;
+ sim.psys= psys;
+ sim.psmd= psmd;
+
+ timestep= psys_get_timestep(&sim);
+
/* painting onto the deformed mesh, could be an option? */
if(psmd->dm->deformedOnly)
dm= psmd->dm;
@@ -3200,6 +3226,7 @@ static int brush_add(PEData *data, short number)
framestep= pa->lifetime/(float)(pset->totaddkey-1);
if(tree) {
+ ParticleData *ppa;
HairKey *hkey;
ParticleKey key[3];
KDTreeNearest ptn[3];
@@ -3224,6 +3251,8 @@ static int brush_add(PEData *data, short number)
for(w=0; wparticles+ptn[0].index;
+
for(k=0; ktotaddkey; k++) {
hkey= (HairKey*)pa->hair + k;
hkey->time= pa->time + k * framestep;
@@ -3232,6 +3261,9 @@ static int brush_add(PEData *data, short number)
psys_get_particle_on_path(&sim, ptn[0].index, key, 0);
mul_v3_fl(key[0].co, weight[0]);
+ /* TODO: interpolatint the weight would be nicer */
+ hkey->weight= (ppa->hair+MIN2(k, ppa->totkey-1))->weight;
+
if(maxw>1) {
key[1].time= key[0].time;
psys_get_particle_on_path(&sim, ptn[1].index, key + 1, 0);
@@ -3258,6 +3290,7 @@ static int brush_add(PEData *data, short number)
for(k=0, hkey=pa->hair; ktotaddkey; k++, hkey++) {
VECADDFAC(hkey->co, pa->state.co, pa->state.vel, k * framestep * timestep);
hkey->time += k * framestep;
+ hkey->weight = 1.f - (float)k/(float)(pset->totaddkey-1);
}
}
for(k=0, hkey=pa->hair; ktotaddkey; k++, hkey++) {
@@ -4001,12 +4034,16 @@ static void PE_create_particle_edit(Scene *scene, Object *ob, PointCache *cache,
key->co= hkey->co;
key->time= &hkey->time;
key->flag= hkey->editflag;
- if(!(psys->flag & PSYS_GLOBAL_HAIR))
+ if(!(psys->flag & PSYS_GLOBAL_HAIR)) {
key->flag |= PEK_USE_WCO;
+ hkey->editflag |= PEK_USE_WCO;
+ }
+
hkey++;
}
pa++;
}
+ update_world_cos(ob, edit);
}
else {
PTCacheMem *pm;
diff --git a/source/blender/editors/physics/physics_fluid.c b/source/blender/editors/physics/physics_fluid.c
index b1c373e7a91..adf5d00355e 100644
--- a/source/blender/editors/physics/physics_fluid.c
+++ b/source/blender/editors/physics/physics_fluid.c
@@ -420,7 +420,7 @@ static void fluid_init_all_channels(bContext *C, Object *UNUSED(fsDomain), Fluid
/* Modifying the global scene isn't nice, but we can do it in
* this part of the process before a threaded job is created */
scene->r.cfra = (int)eval_time;
- ED_update_for_newframe(C, 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1);
/* now scene data should be current according to animation system, so we fill the channels */
@@ -910,7 +910,7 @@ int fluidsimBake(bContext *C, ReportList *reports, Object *fsDomain)
/* reset to original current frame */
scene->r.cfra = origFrame;
- ED_update_for_newframe(C, 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, CTX_wm_screen(C), 1);
/* ---- XXX: No Time animation curve for now, leaving this code here for reference
diff --git a/source/blender/editors/physics/physics_pointcache.c b/source/blender/editors/physics/physics_pointcache.c
index 9e39862cf5d..519a85fe39a 100644
--- a/source/blender/editors/physics/physics_pointcache.c
+++ b/source/blender/editors/physics/physics_pointcache.c
@@ -83,7 +83,7 @@ void bake_console_progress(void *UNUSED(arg), int nr)
void bake_console_progress_end(void *UNUSED(arg))
{
- printf("\n");
+ printf("\rbake: done!\n");
}
static int ptcache_bake_all_exec(bContext *C, wmOperator *op)
@@ -103,7 +103,10 @@ static int ptcache_bake_all_exec(bContext *C, wmOperator *op)
baker.break_test = cache_break_test;
baker.break_data = NULL;
- if (win) {
+ /* Disabled for now as this doesn't work properly,
+ * and pointcache baking will be reimplemented with
+ * the job system soon anyways. */
+ if (win && 0) {
baker.progressbar = (void (*)(void *, int))WM_timecursor;
baker.progressend = (void (*)(void *))WM_cursor_restore;
baker.progresscontext = win;
@@ -201,7 +204,10 @@ static int ptcache_bake_exec(bContext *C, wmOperator *op)
baker.break_test = cache_break_test;
baker.break_data = NULL;
- if (win) {
+ /* Disabled for now as this doesn't work properly,
+ * and pointcache baking will be reimplemented with
+ * the job system soon anyways. */
+ if (win && 0) {
baker.progressbar = (void (*)(void *, int))WM_timecursor;
baker.progressend = (void (*)(void *))WM_cursor_restore;
baker.progresscontext = win;
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index 77fa51aa7b1..bf017856389 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -427,7 +427,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra);
// no redraw needed, we leave state as we entered it
- ED_update_for_newframe(C, 1);
+ ED_update_for_newframe(mainp, scene, CTX_wm_screen(C), 1);
WM_event_add_notifier(C, NC_SCENE|ND_RENDER_RESULT, scene);
@@ -573,11 +573,18 @@ static void render_startjob(void *rjv, short *stop, short *do_update, float *pro
static void render_endjob(void *rjv)
{
- RenderJob *rj= rjv;
+ RenderJob *rj= rjv;
+
+ /* this render may be used again by the sequencer without the active 'Render' where the callbacks
+ * would be re-assigned. assign dummy callbacks to avoid referencing freed renderjobs bug [#24508] */
+ RE_InitRenderCB(rj->re);
if(rj->main != G.main)
free_main(rj->main);
+ /* else the frame will not update for the original value */
+ ED_update_for_newframe(G.main, rj->scene, rj->win->screen, 1);
+
/* XXX render stability hack */
G.rendering = 0;
WM_main_add_notifier(NC_WINDOW, NULL);
@@ -630,6 +637,10 @@ static int screen_render_invoke(bContext *C, wmOperator *op, wmEvent *event)
if(WM_jobs_test(CTX_wm_manager(C), scene))
return OPERATOR_CANCELLED;
+ if(!RE_is_rendering_allowed(scene, op->reports, render_error_reports)) {
+ return OPERATOR_CANCELLED;
+ }
+
/* stop all running jobs, currently previews frustrate Render */
WM_jobs_stop_all(CTX_wm_manager(C));
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index ef56a596855..eb24919f99b 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -347,7 +347,7 @@ static int screen_opengl_render_anim_step(bContext *C, wmOperator *op)
/* update animated image textures for gpu, etc,
* call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */
- ED_image_update_frame(C);
+ ED_image_update_frame(bmain, scene->r.cfra);
/* go to next frame */
while(CFRAnfra) {
diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c
index e56d8fc1124..14a58a7187c 100644
--- a/source/blender/editors/render/render_shading.c
+++ b/source/blender/editors/render/render_shading.c
@@ -403,36 +403,38 @@ static int material_slot_de_select(bContext *C, int select)
BezTriple *bezt;
int a;
- for(nu= nurbs->first; nu; nu=nu->next) {
- if(nu->mat_nr==ob->actcol-1) {
- if(nu->bezt) {
- a= nu->pntsu;
- bezt= nu->bezt;
- while(a--) {
- if(bezt->hide==0) {
- if(select) {
- bezt->f1 |= SELECT;
- bezt->f2 |= SELECT;
- bezt->f3 |= SELECT;
- }
- else {
- bezt->f1 &= ~SELECT;
- bezt->f2 &= ~SELECT;
- bezt->f3 &= ~SELECT;
+ if(nurbs) {
+ for(nu= nurbs->first; nu; nu=nu->next) {
+ if(nu->mat_nr==ob->actcol-1) {
+ if(nu->bezt) {
+ a= nu->pntsu;
+ bezt= nu->bezt;
+ while(a--) {
+ if(bezt->hide==0) {
+ if(select) {
+ bezt->f1 |= SELECT;
+ bezt->f2 |= SELECT;
+ bezt->f3 |= SELECT;
+ }
+ else {
+ bezt->f1 &= ~SELECT;
+ bezt->f2 &= ~SELECT;
+ bezt->f3 &= ~SELECT;
+ }
}
+ bezt++;
}
- bezt++;
}
- }
- else if(nu->bp) {
- a= nu->pntsu*nu->pntsv;
- bp= nu->bp;
- while(a--) {
- if(bp->hide==0) {
- if(select) bp->f1 |= SELECT;
- else bp->f1 &= ~SELECT;
+ else if(nu->bp) {
+ a= nu->pntsu*nu->pntsv;
+ bp= nu->bp;
+ while(a--) {
+ if(bp->hide==0) {
+ if(select) bp->f1 |= SELECT;
+ else bp->f1 &= ~SELECT;
+ }
+ bp++;
}
- bp++;
}
}
}
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index 08cc8ebaa2f..08962883ec3 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -36,6 +36,7 @@
#include "BKE_context.h"
#include "BKE_utildefines.h"
#include "BKE_action.h"
+#include "BKE_armature.h"
#include "BKE_sequencer.h"
#include "RNA_access.h"
@@ -234,7 +235,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
if (obpose && obpose->pose && arm) {
for (pchan= obpose->pose->chanbase.first; pchan; pchan= pchan->next) {
/* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */
- if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) {
+ if (PBONE_VISIBLE(arm, pchan->bone)) {
CTX_data_list_add(result, &obpose->id, &RNA_PoseBone, pchan);
}
}
@@ -250,7 +251,7 @@ int ed_screen_context(const bContext *C, const char *member, bContextDataResult
if (obpose && obpose->pose && arm) {
for (pchan= obpose->pose->chanbase.first; pchan; pchan= pchan->next) {
/* ensure that PoseChannel is on visible layer and is not hidden in PoseMode */
- if ((pchan->bone) && (arm->layer & pchan->bone->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) {
+ if (PBONE_VISIBLE(arm, pchan->bone)) {
if (pchan->bone->flag & BONE_SELECTED || pchan->bone == arm->act_bone)
CTX_data_list_add(result, &obpose->id, &RNA_PoseBone, pchan);
}
diff --git a/source/blender/editors/screen/screen_edit.c b/source/blender/editors/screen/screen_edit.c
index 9d178a57465..e3da9af4e2d 100644
--- a/source/blender/editors/screen/screen_edit.c
+++ b/source/blender/editors/screen/screen_edit.c
@@ -643,18 +643,20 @@ static void screen_test_scale(bScreen *sc, int winsizex, int winsizey)
/* make sure it fits! */
for(sv= sc->vertbase.first; sv; sv= sv->next) {
+ /* FIXME, this resizing logic is no good when resizing the window + redrawing [#24428]
+ * need some way to store these as floats internally and re-apply from there. */
tempf= ((float)sv->vec.x)*facx;
sv->vec.x= (short)(tempf+0.5);
sv->vec.x+= AREAGRID-1;
sv->vec.x-= (sv->vec.x % AREAGRID);
-
+
CLAMP(sv->vec.x, 0, winsizex);
- tempf= ((float)sv->vec.y )*facy;
+ tempf= ((float)sv->vec.y)*facy;
sv->vec.y= (short)(tempf+0.5);
sv->vec.y+= AREAGRID-1;
sv->vec.y-= (sv->vec.y % AREAGRID);
-
+
CLAMP(sv->vec.y, 0, winsizey);
}
}
@@ -1025,27 +1027,35 @@ void ED_screen_draw(wmWindow *win)
/* make this screen usable */
/* for file read and first use, for scaling window, area moves */
void ED_screen_refresh(wmWindowManager *wm, wmWindow *win)
-{
- ScrArea *sa;
- rcti winrct= {0, win->sizex-1, 0, win->sizey-1};
+{
+ /* exception for bg mode, we only need the screen context */
+ if (!G.background) {
+ ScrArea *sa;
+ rcti winrct;
- screen_test_scale(win->screen, win->sizex, win->sizey);
+ winrct.xmin= 0;
+ winrct.xmax= win->sizex-1;
+ winrct.ymin= 0;
+ winrct.ymax= win->sizey-1;
+
+ screen_test_scale(win->screen, win->sizex, win->sizey);
+
+ if(win->screen->mainwin==0)
+ win->screen->mainwin= wm_subwindow_open(win, &winrct);
+ else
+ wm_subwindow_position(win, win->screen->mainwin, &winrct);
+
+ for(sa= win->screen->areabase.first; sa; sa= sa->next) {
+ /* set spacetype and region callbacks, calls init() */
+ /* sets subwindows for regions, adds handlers */
+ ED_area_initialize(wm, win, sa);
+ }
- if(win->screen->mainwin==0)
- win->screen->mainwin= wm_subwindow_open(win, &winrct);
- else
- wm_subwindow_position(win, win->screen->mainwin, &winrct);
-
- for(sa= win->screen->areabase.first; sa; sa= sa->next) {
- /* set spacetype and region callbacks, calls init() */
- /* sets subwindows for regions, adds handlers */
- ED_area_initialize(wm, win, sa);
+ /* wake up animtimer */
+ if(win->screen->animtimer)
+ WM_event_timer_sleep(wm, win, win->screen->animtimer, 0);
}
- /* wake up animtimer */
- if(win->screen->animtimer)
- WM_event_timer_sleep(wm, win, win->screen->animtimer, 0);
-
if(G.f & G_DEBUG) printf("set screen\n");
win->screen->do_refresh= 0;
@@ -1432,7 +1442,7 @@ void ED_screen_set_scene(bContext *C, Scene *scene)
CTX_data_scene_set(C, scene);
set_scene_bg(CTX_data_main(C), scene);
- ED_update_for_newframe(C, 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, curscreen, 1);
/* complete redraw */
WM_event_add_notifier(C, NC_WINDOW, NULL);
@@ -1738,20 +1748,17 @@ void ED_screen_animation_timer_update(bScreen *screen, int redraws, int refresh)
}
}
-/* results in fully updated anim system */
-void ED_update_for_newframe(const bContext *C, int UNUSED(mute))
-{
- Main *bmain= CTX_data_main(C);
- bScreen *screen= CTX_wm_screen(C);
- Scene *scene= CTX_data_scene(C);
-
+/* results in fully updated anim system
+ * screen can be NULL */
+void ED_update_for_newframe(Main *bmain, Scene *scene, bScreen *screen, int UNUSED(mute))
+{
#ifdef DURIAN_CAMERA_SWITCH
void *camera= scene_camera_switch_find(scene);
if(camera && scene->camera != camera) {
bScreen *sc;
scene->camera= camera;
/* are there cameras in the views that are not in the scene? */
- for(sc= CTX_data_main(C)->screen.first; sc; sc= sc->id.next) {
+ for(sc= bmain->screen.first; sc; sc= sc->id.next) {
BKE_screen_view3d_scene_sync(sc);
}
}
@@ -1761,7 +1768,7 @@ void ED_update_for_newframe(const bContext *C, int UNUSED(mute))
/* update animated image textures for gpu, etc,
* call before scene_update_for_newframe so modifiers with textuers dont lag 1 frame */
- ED_image_update_frame(C);
+ ED_image_update_frame(bmain, scene->r.cfra);
/* this function applies the changes too */
/* XXX future: do all windows */
@@ -1783,7 +1790,7 @@ void ED_update_for_newframe(const bContext *C, int UNUSED(mute))
/* update animated texture nodes */
{
Tex *tex;
- for(tex= CTX_data_main(C)->tex.first; tex; tex= tex->id.next)
+ for(tex= bmain->tex.first; tex; tex= tex->id.next)
if( tex->use_nodes && tex->nodetree ) {
ntreeTexTagAnimated( tex->nodetree );
}
diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c
index 5a6acd24c5f..7cdd19e435b 100644
--- a/source/blender/editors/screen/screen_ops.c
+++ b/source/blender/editors/screen/screen_ops.c
@@ -132,17 +132,26 @@ int ED_operator_view3d_active(bContext *C)
int ED_operator_region_view3d_active(bContext *C)
{
-#if 0 // correct but messes up poll() for menu items.
if(CTX_wm_region_view3d(C))
return TRUE;
-#else
- if(ed_spacetype_test(C, SPACE_VIEW3D))
- return TRUE;
-#endif
+
CTX_wm_operator_poll_msg_set(C, "expected a view3d region");
return FALSE;
}
+/* generic for any view2d which uses anim_ops */
+int ED_operator_animview_active(bContext *C)
+{
+ if(ED_operator_areaactive(C)) {
+ SpaceLink *sl= (SpaceLink *)CTX_wm_space_data(C);
+ if (sl && (ELEM5(sl->spacetype, SPACE_SEQ, SPACE_SOUND, SPACE_ACTION, SPACE_NLA, SPACE_TIME)))
+ return TRUE;
+ }
+
+ CTX_wm_operator_poll_msg_set(C, "expected an timeline/animation area to be active");
+ return 0;
+}
+
int ED_operator_timeline_active(bContext *C)
{
return ed_spacetype_test(C, SPACE_TIME);
@@ -229,6 +238,12 @@ int ED_operator_object_active_editable(bContext *C)
return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW));
}
+int ED_operator_object_active_editable_mesh(bContext *C)
+{
+ Object *ob = ED_object_active_context(C);
+ return ((ob != NULL) && !(ob->id.lib) && !(ob->restrictflag & OB_RESTRICT_VIEW) && ob->type == OB_MESH);
+}
+
int ED_operator_editmesh(bContext *C)
{
Object *obedit= CTX_data_edit_object(C);
@@ -2248,7 +2263,7 @@ static void SCREEN_OT_region_quadview(wmOperatorType *ot)
/* api callbacks */
// ot->invoke= WM_operator_confirm;
ot->exec= region_quadview_exec;
- ot->poll= ED_operator_areaactive;
+ ot->poll= ED_operator_region_view3d_active;
ot->flag= 0;
}
@@ -2547,7 +2562,7 @@ static int screen_animation_step(bContext *C, wmOperator *UNUSED(op), wmEvent *e
sound_seek_scene(C);
/* since we follow drawflags, we can't send notifier but tag regions ourselves */
- ED_update_for_newframe(C, 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, screen, 1);
for (sa= screen->areabase.first; sa; sa= sa->next) {
ARegion *ar;
diff --git a/source/blender/editors/sculpt_paint/paint_image.c b/source/blender/editors/sculpt_paint/paint_image.c
index a5b5baad4c5..c5402a00942 100644
--- a/source/blender/editors/sculpt_paint/paint_image.c
+++ b/source/blender/editors/sculpt_paint/paint_image.c
@@ -1011,8 +1011,11 @@ static void uv_image_outset(float (*orig_uv)[2], float (*outset_uv)[2], const fl
float puv[4][2]; /* pixelspace uv's */
float no1[2], no2[2], no3[2], no4[2]; /* normals */
float dir1[2], dir2[2], dir3[2], dir4[2];
- float ibuf_inv[2] = {1.0f / (float)ibuf_x, 1.0f / (float)ibuf_y};
-
+ float ibuf_inv[2];
+
+ ibuf_inv[0]= 1.0f / (float)ibuf_x;
+ ibuf_inv[1]= 1.0f / (float)ibuf_y;
+
/* make UV's in pixel space so we can */
puv[0][0] = orig_uv[0][0] * ibuf_x;
puv[0][1] = orig_uv[0][1] * ibuf_y;
@@ -4178,7 +4181,7 @@ static void imapaint_lift_smear(ImBuf *ibuf, ImBuf *ibufb, int *pos)
int a, tot;
imapaint_set_region(region, 0, 0, pos[0], pos[1], ibufb->x, ibufb->y);
- tot= imapaint_torus_split_region(region, ibuf, ibufb);
+ tot= imapaint_torus_split_region(region, ibufb, ibuf);
for(a=0; aexec= texture_paint_image_from_view_exec;
+ ot->poll= ED_operator_region_view3d_active;
/* flags */
ot->flag= OPTYPE_REGISTER;
diff --git a/source/blender/editors/sculpt_paint/paint_utils.c b/source/blender/editors/sculpt_paint/paint_utils.c
index e3a486a0fee..6e158fe2e66 100644
--- a/source/blender/editors/sculpt_paint/paint_utils.c
+++ b/source/blender/editors/sculpt_paint/paint_utils.c
@@ -235,7 +235,7 @@ void BRUSH_OT_curve_preset(wmOperatorType *ot)
/* face-select ops */
static int paint_select_linked_exec(bContext *C, wmOperator *UNUSED(op))
{
- select_linked_tfaces(C, CTX_data_active_object(C), NULL, 2);
+ paintface_select_linked(C, CTX_data_active_object(C), NULL, 2);
ED_region_tag_redraw(CTX_wm_region(C));
return OPERATOR_FINISHED;
}
@@ -255,7 +255,7 @@ void PAINT_OT_face_select_linked(wmOperatorType *ot)
static int paint_select_linked_pick_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
int mode= RNA_boolean_get(op->ptr, "extend") ? 1:0;
- select_linked_tfaces(C, CTX_data_active_object(C), event->mval, mode);
+ paintface_select_linked(C, CTX_data_active_object(C), event->mval, mode);
ED_region_tag_redraw(CTX_wm_region(C));
return OPERATOR_FINISHED;
}
@@ -277,7 +277,8 @@ void PAINT_OT_face_select_linked_pick(wmOperatorType *ot)
static int face_select_all_exec(bContext *C, wmOperator *op)
{
- selectall_tface(CTX_data_active_object(C), RNA_enum_get(op->ptr, "action"));
+ Object *ob= CTX_data_active_object(C);
+ paintface_deselect_all_visible(ob, RNA_enum_get(op->ptr, "action"), TRUE);
ED_region_tag_redraw(CTX_wm_region(C));
return OPERATOR_FINISHED;
}
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index fccee048525..efc39e6ae0a 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -3658,7 +3658,7 @@ static void SCULPT_OT_sculptmode_toggle(wmOperatorType *ot)
/* api callbacks */
ot->exec= sculpt_toggle_mode;
- ot->poll= ED_operator_object_active;
+ ot->poll= ED_operator_object_active_editable_mesh;
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c
index b0704e76138..32bb02ddcda 100644
--- a/source/blender/editors/space_action/action_edit.c
+++ b/source/blender/editors/space_action/action_edit.c
@@ -1102,15 +1102,13 @@ static int actkeys_framejump_exec(bContext *C, wmOperator *UNUSED(op))
ListBase anim_data= {NULL, NULL};
bAnimListElem *ale;
int filter;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
return OPERATOR_CANCELLED;
- /* init edit data */
- memset(&ked, 0, sizeof(KeyframeEditData));
-
+ /* init edit data */
/* loop over action data, averaging values */
filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS);
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
@@ -1174,7 +1172,7 @@ static void snap_action_keys(bAnimContext *ac, short mode)
bAnimListElem *ale;
int filter;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
KeyframeEditFunc edit_cb;
/* filter data */
@@ -1186,8 +1184,7 @@ static void snap_action_keys(bAnimContext *ac, short mode)
/* get beztriple editing callbacks */
edit_cb= ANIM_editkeyframes_snap(mode);
-
- memset(&ked, 0, sizeof(KeyframeEditData));
+
ked.scene= ac->scene;
if (mode == ACTKEYS_SNAP_NEAREST_MARKER) {
ked.list.first= (ac->markers) ? ac->markers->first : NULL;
@@ -1274,13 +1271,12 @@ static void mirror_action_keys(bAnimContext *ac, short mode)
bAnimListElem *ale;
int filter;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
KeyframeEditFunc edit_cb;
/* get beztriple editing callbacks */
edit_cb= ANIM_editkeyframes_mirror(mode);
-
- memset(&ked, 0, sizeof(KeyframeEditData));
+
ked.scene= ac->scene;
/* for 'first selected marker' mode, need to find first selected marker first! */
diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c
index 11b6123dbbb..d6039acce38 100644
--- a/source/blender/editors/space_action/action_select.c
+++ b/source/blender/editors/space_action/action_select.c
@@ -85,7 +85,7 @@ static void deselect_action_keys (bAnimContext *ac, short test, short sel)
bAnimListElem *ale;
int filter;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
KeyframeEditFunc test_cb, sel_cb;
/* determine type-based settings */
@@ -98,7 +98,6 @@ static void deselect_action_keys (bAnimContext *ac, short test, short sel)
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
/* init BezTriple looping data */
- memset(&ked, 0, sizeof(KeyframeEditData));
test_cb= ANIM_editkeyframes_ok(BEZT_OK_SELECTED);
/* See if we should be selecting or deselecting */
@@ -367,7 +366,7 @@ static void markers_selectkeys_between (bAnimContext *ac)
int filter;
KeyframeEditFunc ok_cb, select_cb;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
float min, max;
/* get extreme markers */
@@ -378,8 +377,7 @@ static void markers_selectkeys_between (bAnimContext *ac)
/* get editing funcs + data */
ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE);
select_cb= ANIM_editkeyframes_select(SELECT_ADD);
-
- memset(&ked, 0, sizeof(KeyframeEditData));
+
ked.f1= min;
ked.f2= max;
@@ -416,10 +414,9 @@ static void columnselect_action_keys (bAnimContext *ac, short mode)
Scene *scene= ac->scene;
CfraElem *ce;
KeyframeEditFunc select_cb, ok_cb;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};;
/* initialise keyframe editing data */
- memset(&ked, 0, sizeof(KeyframeEditData));
/* build list of columns */
switch (mode) {
@@ -613,13 +610,12 @@ static void select_moreless_action_keys (bAnimContext *ac, short mode)
bAnimListElem *ale;
int filter;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
KeyframeEditFunc build_cb;
/* init selmap building data */
build_cb= ANIM_editkeyframes_buildselmap(mode);
- memset(&ked, 0, sizeof(KeyframeEditData));
/* loop through all of the keys and select additional keyframes based on these */
filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY | ANIMFILTER_NODUPLIS);
@@ -746,13 +742,12 @@ static void actkeys_mselect_single (bAnimContext *ac, bAnimListElem *ale, short
bDopeSheet *ads= (ac->datatype == ANIMCONT_DOPESHEET) ? ac->data : NULL;
int ds_filter = ((ads) ? (ads->filterflag) : (0));
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
KeyframeEditFunc select_cb, ok_cb;
/* get functions for selecting keyframes */
select_cb= ANIM_editkeyframes_select(select_mode);
ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAME);
- memset(&ked, 0, sizeof(KeyframeEditData));
ked.f1= selx;
/* select the nominated keyframe on the given frame */
@@ -767,7 +762,7 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short
int filter;
KeyframeEditFunc ok_cb, select_cb;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
Scene *scene= ac->scene;
/* if select mode is replace, deselect all keyframes (and channels) first */
@@ -782,8 +777,7 @@ static void actkeys_mselect_leftright (bAnimContext *ac, short leftright, short
/* set callbacks and editing data */
ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE);
select_cb= ANIM_editkeyframes_select(select_mode);
-
- memset(&ked, 0, sizeof(KeyframeEditFunc));
+
if (leftright == ACTKEYS_LRSEL_LEFT) {
ked.f1 = MINAFRAMEF;
ked.f2 = (float)(CFRA + FRAME_CLICK_THRESH);
@@ -847,10 +841,9 @@ static void actkeys_mselect_column(bAnimContext *ac, short select_mode, float se
int filter;
KeyframeEditFunc select_cb, ok_cb;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
/* initialise keyframe editing data */
- memset(&ked, 0, sizeof(KeyframeEditData));
/* set up BezTriple edit callbacks */
select_cb= ANIM_editkeyframes_select(select_mode);
diff --git a/source/blender/editors/space_buttons/buttons_ops.c b/source/blender/editors/space_buttons/buttons_ops.c
index e72446366fe..a461fdcd9c6 100644
--- a/source/blender/editors/space_buttons/buttons_ops.c
+++ b/source/blender/editors/space_buttons/buttons_ops.c
@@ -175,10 +175,12 @@ static int file_browse_invoke(bContext *C, wmOperator *op, wmEvent *event)
RNA_string_set(op->ptr, "filepath", str);
MEM_freeN(str);
- if(RNA_struct_find_property(op->ptr, "relative_path"))
- if(!RNA_property_is_set(op->ptr, "relative_path"))
- RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS);
-
+ if(RNA_struct_find_property(op->ptr, "relative_path")) {
+ if(!RNA_property_is_set(op->ptr, "relative_path")) {
+ /* annoying exception!, if were dealign with the user prefs, default relative to be off */
+ RNA_boolean_set(op->ptr, "relative_path", U.flag & USER_RELPATHS && (ptr.data != &U));
+ }
+ }
WM_event_add_fileselect(C, op);
return OPERATOR_RUNNING_MODAL;
diff --git a/source/blender/editors/space_console/CMakeLists.txt b/source/blender/editors/space_console/CMakeLists.txt
index b1d9920fed4..dbef838db65 100644
--- a/source/blender/editors/space_console/CMakeLists.txt
+++ b/source/blender/editors/space_console/CMakeLists.txt
@@ -38,8 +38,8 @@ SET(SRC
space_console.c
)
-IF(NOT WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
-ENDIF(NOT WITH_PYTHON)
+IF(WITH_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
+ENDIF(WITH_PYTHON)
BLENDERLIB(bf_editor_space_console "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_console/SConscript b/source/blender/editors/space_console/SConscript
index 087090a7740..f246f08d7ac 100644
--- a/source/blender/editors/space_console/SConscript
+++ b/source/blender/editors/space_console/SConscript
@@ -17,7 +17,7 @@ incs = [
'../../blenloader',
]
-if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+if env['WITH_BF_PYTHON']:
+ defs.append('WITH_PYTHON')
env.BlenderLib ( 'bf_editors_space_console', sources, incs, defs, libtype=['core'], priority=[95] )
diff --git a/source/blender/editors/space_console/console_draw.c b/source/blender/editors/space_console/console_draw.c
index edbb539e836..f1fead47a0a 100644
--- a/source/blender/editors/space_console/console_draw.c
+++ b/source/blender/editors/space_console/console_draw.c
@@ -270,7 +270,11 @@ static int console_draw_string(ConsoleDrawContext *cdc, char *str, int str_len,
BLF_draw(mono, str);
if(cdc->sel[0] != cdc->sel[1]) {
- int isel[2]= {str_len - cdc->sel[1], str_len - cdc->sel[0]};
+ int isel[2];
+
+ isel[0]= str_len - cdc->sel[1];
+ isel[1]= str_len - cdc->sel[0];
+
// glColor4ub(255, 255, 0, 96); // debug
console_draw_sel(isel, cdc->xy, str_len, cdc->cwidth, cdc->lheight);
STEP_SEL(-(str_len + 1));
@@ -447,8 +451,12 @@ int console_text_height(struct SpaceConsole *sc, struct ARegion *ar, ReportList
void *console_text_pick(struct SpaceConsole *sc, struct ARegion *ar, ReportList *reports, int mouse_y)
{
- int mval[2] = {0, mouse_y};
void *mouse_pick= NULL;
+ int mval[2];
+
+ mval[0]= 0;
+ mval[1]= mouse_y;
+
console_text_main__internal(sc, ar, reports, 0, mval, &mouse_pick, NULL);
return (void *)mouse_pick;
}
diff --git a/source/blender/editors/space_console/console_ops.c b/source/blender/editors/space_console/console_ops.c
index 2b419b0a833..ceb16d2aab9 100644
--- a/source/blender/editors/space_console/console_ops.c
+++ b/source/blender/editors/space_console/console_ops.c
@@ -404,12 +404,17 @@ static int insert_invoke(bContext *C, wmOperator *op, wmEvent *event)
{
// if(!RNA_property_is_set(op->ptr, "text")) { /* always set from keymap XXX */
if(!RNA_string_length(op->ptr, "text")) {
- char str[2] = {event->ascii, '\0'};
/* if alt/ctrl/super are pressed pass through */
- if(event->ctrl || event->oskey)
+ if(event->ctrl || event->oskey) {
return OPERATOR_PASS_THROUGH;
+ }
+ else {
+ char str[2];
+ str[0]= event->ascii;
+ str[1]= '\0';
- RNA_string_set(op->ptr, "text", str);
+ RNA_string_set(op->ptr, "text", str);
+ }
}
return insert_exec(C, op);
}
@@ -863,7 +868,10 @@ static void console_modal_select_apply(bContext *C, wmOperator *op, wmEvent *eve
SpaceConsole *sc= CTX_wm_space_console(C);
ARegion *ar= CTX_wm_region(C);
SetConsoleCursor *scu= op->customdata;
- int mval[2] = {event->mval[0], event->mval[1]};
+ int mval[2];
+
+ mval[0]= event->mval[0];
+ mval[1]= event->mval[1];
set_cursor_to_pos(sc, ar, scu, mval, TRUE);
ED_area_tag_redraw(CTX_wm_area(C));
diff --git a/source/blender/editors/space_console/space_console.c b/source/blender/editors/space_console/space_console.c
index 70263788b13..72478133f1c 100644
--- a/source/blender/editors/space_console/space_console.c
+++ b/source/blender/editors/space_console/space_console.c
@@ -327,7 +327,7 @@ void console_keymap(struct wmKeyConfig *keyconf)
RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", DELKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_NEXT_CHAR);
RNA_enum_set(WM_keymap_add_item(keymap, "CONSOLE_OT_delete", BACKSPACEKEY, KM_PRESS, 0, 0)->ptr, "type", DEL_PREV_CHAR);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
WM_keymap_add_item(keymap, "CONSOLE_OT_execute", RETKEY, KM_PRESS, 0, 0); /* python operator - space_text.py */
WM_keymap_add_item(keymap, "CONSOLE_OT_execute", PADENTER, KM_PRESS, 0, 0);
diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c
index 43d5d54805d..41ad7ad3503 100644
--- a/source/blender/editors/space_file/filelist.c
+++ b/source/blender/editors/space_file/filelist.c
@@ -887,7 +887,7 @@ static int groupname_to_code(char *group)
char buf[32];
char *lslash;
- BLI_strncpy(buf, group, 31);
+ BLI_strncpy(buf, group, sizeof(buf));
lslash= BLI_last_slash(buf);
if (lslash)
lslash[0]= '\0';
diff --git a/source/blender/editors/space_file/filesel.c b/source/blender/editors/space_file/filesel.c
index 8ad3ef08e85..6442cfbb4eb 100644
--- a/source/blender/editors/space_file/filesel.c
+++ b/source/blender/editors/space_file/filesel.c
@@ -59,6 +59,7 @@
#include "BLI_blenlib.h"
#include "BLI_linklist.h"
+#include "BLI_path_util.h"
#include "BLI_storage_types.h"
#include "BLI_dynstr.h"
diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c
index 0aa0a87dbac..4e42e199521 100644
--- a/source/blender/editors/space_graph/graph_select.c
+++ b/source/blender/editors/space_graph/graph_select.c
@@ -85,7 +85,7 @@ static void deselect_graph_keys (bAnimContext *ac, short test, short sel)
int filter;
SpaceIpo *sipo= (SpaceIpo *)ac->sa->spacedata.first;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
KeyframeEditFunc test_cb, sel_cb;
/* determine type-based settings */
@@ -95,7 +95,6 @@ static void deselect_graph_keys (bAnimContext *ac, short test, short sel)
ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype);
/* init BezTriple looping data */
- memset(&ked, 0, sizeof(KeyframeEditData));
test_cb= ANIM_editkeyframes_ok(BEZT_OK_SELECTED);
/* See if we should be selecting or deselecting */
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index bbc8925a152..e245dfba275 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -137,21 +137,28 @@ static void image_info(Image *ima, ImBuf *ibuf, char *str)
if(ibuf->rect_float) {
if(ibuf->channels!=4) {
- sprintf(str+ofs, "%d float channel(s)", ibuf->channels);
+ ofs+= sprintf(str+ofs, "%d float channel(s)", ibuf->channels);
}
else if(ibuf->depth==32)
- strcat(str, " RGBA float");
+ ofs+= sprintf(str+ofs, " RGBA float");
else
- strcat(str, " RGB float");
+ ofs+= sprintf(str+ofs, " RGB float");
}
else {
if(ibuf->depth==32)
- strcat(str, " RGBA byte");
+ ofs+= sprintf(str+ofs, " RGBA byte");
else
- strcat(str, " RGB byte");
+ ofs+= sprintf(str+ofs, " RGB byte");
}
if(ibuf->zbuf || ibuf->zbuf_float)
- strcat(str, " + Z");
+ ofs+= sprintf(str+ofs, " + Z");
+
+ if(ima->source==IMA_SRC_SEQUENCE) {
+ char *file= BLI_last_slash(ibuf->name);
+ if(file==NULL) file= ibuf->name;
+ else file++;
+ sprintf(str+ofs, ", %s", file);
+ }
}
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index 429ba64ed0f..50730e3b35e 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -798,7 +798,7 @@ static int replace_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
RNA_string_get(op->ptr, "filepath", str);
- BLI_strncpy(sima->image->name, str, sizeof(sima->image->name)-1); /* we cant do much if the str is longer then 240 :/ */
+ BLI_strncpy(sima->image->name, str, sizeof(sima->image->name)); /* we cant do much if the str is longer then 240 :/ */
BKE_image_signal(sima->image, &sima->iuser, IMA_SIGNAL_RELOAD);
WM_event_add_notifier(C, NC_IMAGE|NA_EDITED, sima->image);
@@ -2098,11 +2098,9 @@ void IMAGE_OT_cycle_render_slot(wmOperatorType *ot)
/* goes over all ImageUsers, and sets frame numbers if auto-refresh is set */
-void ED_image_update_frame(const bContext *C)
+void ED_image_update_frame(const Main *mainp, int cfra)
{
- Main *mainp= CTX_data_main(C);
- Scene *scene= CTX_data_scene(C);
- wmWindowManager *wm= CTX_wm_manager(C);
+ wmWindowManager *wm;
wmWindow *win;
Tex *tex;
@@ -2111,13 +2109,13 @@ void ED_image_update_frame(const bContext *C)
if(tex->type==TEX_IMAGE && tex->ima) {
if(ELEM(tex->ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE)) {
if(tex->iuser.flag & IMA_ANIM_ALWAYS)
- BKE_image_user_calc_frame(&tex->iuser, scene->r.cfra, 0);
+ BKE_image_user_calc_frame(&tex->iuser, cfra, 0);
}
}
}
/* image window, compo node users */
- if(wm) {
+ for(wm=mainp->wm.first; wm; wm= wm->id.next) { /* only 1 wm */
for(win= wm->windows.first; win; win= win->next) {
ScrArea *sa;
for(sa= win->screen->areabase.first; sa; sa= sa->next) {
@@ -2126,12 +2124,12 @@ void ED_image_update_frame(const bContext *C)
BGpic *bgpic;
for(bgpic= v3d->bgpicbase.first; bgpic; bgpic= bgpic->next)
if(bgpic->iuser.flag & IMA_ANIM_ALWAYS)
- BKE_image_user_calc_frame(&bgpic->iuser, scene->r.cfra, 0);
+ BKE_image_user_calc_frame(&bgpic->iuser, cfra, 0);
}
else if(sa->spacetype==SPACE_IMAGE) {
SpaceImage *sima= sa->spacedata.first;
if(sima->iuser.flag & IMA_ANIM_ALWAYS)
- BKE_image_user_calc_frame(&sima->iuser, scene->r.cfra, 0);
+ BKE_image_user_calc_frame(&sima->iuser, cfra, 0);
}
else if(sa->spacetype==SPACE_NODE) {
SpaceNode *snode= sa->spacedata.first;
@@ -2143,7 +2141,7 @@ void ED_image_update_frame(const bContext *C)
ImageUser *iuser= node->storage;
if(ELEM(ima->source, IMA_SRC_MOVIE, IMA_SRC_SEQUENCE))
if(iuser->flag & IMA_ANIM_ALWAYS)
- BKE_image_user_calc_frame(iuser, scene->r.cfra, 0);
+ BKE_image_user_calc_frame(iuser, cfra, 0);
}
}
}
diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c
index 0789114c054..7a6e5dad017 100644
--- a/source/blender/editors/space_info/info_stats.c
+++ b/source/blender/editors/space_info/info_stats.c
@@ -327,12 +327,10 @@ static void stats_dupli_object(Base *base, Object *ob, SceneStats *stats)
/* Statistics displayed in info header. Called regularly on scene changes. */
static void stats_update(Scene *scene)
{
- SceneStats stats;
+ SceneStats stats= {0};
Object *ob= (scene->basact)? scene->basact->object: NULL;
Base *base;
- memset(&stats, 0, sizeof(stats));
-
if(scene->obedit) {
/* Edit Mode */
stats_object_edit(scene->obedit, &stats);
@@ -341,7 +339,7 @@ static void stats_update(Scene *scene)
/* Pose Mode */
stats_object_pose(ob, &stats);
}
- else if(ob && (ob->flag & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT))) {
+ else if(ob && (ob->flag & OB_MODE_ALL_PAINT)) {
/* Sculpt and Paint Mode */
stats_object_paint(ob, &stats);
}
diff --git a/source/blender/editors/space_logic/CMakeLists.txt b/source/blender/editors/space_logic/CMakeLists.txt
index 64519d606f1..7716e45167f 100644
--- a/source/blender/editors/space_logic/CMakeLists.txt
+++ b/source/blender/editors/space_logic/CMakeLists.txt
@@ -38,7 +38,7 @@ SET(SRC
)
IF(WITH_GAMEENGINE)
- ADD_DEFINITIONS(-DGAMEBLENDER)
+ ADD_DEFINITIONS(-DWITH_GAMEENGINE)
ENDIF(WITH_GAMEENGINE)
BLENDERLIB(bf_editor_space_logic "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_logic/SConscript b/source/blender/editors/space_logic/SConscript
index 0ce2eee575e..4d02363ff90 100644
--- a/source/blender/editors/space_logic/SConscript
+++ b/source/blender/editors/space_logic/SConscript
@@ -10,6 +10,6 @@ incs += ' ../../makesrna ../interface'
defs = []
if env['WITH_BF_GAMEENGINE']:
- defs.append('GAMEBLENDER=1')
+ defs.append('WITH_GAMEENGINE')
env.BlenderLib ( 'bf_editors_space_game', sources, Split(incs), defs, libtype=['core'], priority=[120] )
diff --git a/source/blender/editors/space_nla/nla_edit.c b/source/blender/editors/space_nla/nla_edit.c
index e13a229fdd1..886bd59235e 100644
--- a/source/blender/editors/space_nla/nla_edit.c
+++ b/source/blender/editors/space_nla/nla_edit.c
@@ -1258,7 +1258,7 @@ static int nlaedit_apply_scale_exec (bContext *C, wmOperator *UNUSED(op))
bAnimListElem *ale;
int filter;
- KeyframeEditData ked;
+ KeyframeEditData ked= {{0}};
/* get editor data */
if (ANIM_animdata_get_context(C, &ac) == 0)
@@ -1269,7 +1269,6 @@ static int nlaedit_apply_scale_exec (bContext *C, wmOperator *UNUSED(op))
ANIM_animdata_filter(&ac, &anim_data, filter, ac.data, ac.datatype);
/* init the editing data */
- memset(&ked, 0, sizeof(KeyframeEditData));
/* for each NLA-Track, apply scale of all selected strips */
for (ale= anim_data.first; ale; ale= ale->next) {
diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c
index 78ae82c57b0..c34ade4f5e2 100644
--- a/source/blender/editors/space_node/drawnode.c
+++ b/source/blender/editors/space_node/drawnode.c
@@ -198,7 +198,7 @@ static void node_browse_tex_cb(bContext *C, void *ntree_v, void *node_v)
node->id= &tex->id;
id_us_plus(node->id);
- BLI_strncpy(node->name, node->id->name+2, 21);
+ BLI_strncpy(node->name, node->id->name+2, sizeof(node->name));
nodeSetActive(ntree, node);
@@ -285,7 +285,7 @@ static void node_browse_text_cb(bContext *C, void *ntree_v, void *node_v)
oldid= node->id;
node->id= BLI_findlink(&bmain->text, node->menunr-1);
id_us_plus(node->id);
- BLI_strncpy(node->name, node->id->name+2, 21); /* huh? why 21? */
+ BLI_strncpy(node->name, node->id->name+2, sizeof(node->name));
node->custom1= BSET(node->custom1, NODE_DYNAMIC_NEW);
@@ -1177,7 +1177,7 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), Pointe
case TEX_MARBLE:
row= uiLayoutRow(col, 0);
- uiItemR(row, &tex_ptr, "stype", UI_ITEM_R_EXPAND, NULL, 0);
+ uiItemR(row, &tex_ptr, "marble_type", UI_ITEM_R_EXPAND, NULL, 0);
row= uiLayoutRow(col, 0);
uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0);
row= uiLayoutRow(col, 0);
@@ -1186,18 +1186,18 @@ static void node_texture_buts_proc(uiLayout *layout, bContext *UNUSED(C), Pointe
case TEX_WOOD:
uiItemR(col, &tex_ptr, "noise_basis", 0, "", 0);
- uiItemR(col, &tex_ptr, "stype", 0, "", 0);
+ uiItemR(col, &tex_ptr, "wood_type", 0, "", 0);
row= uiLayoutRow(col, 0);
uiItemR(row, &tex_ptr, "noisebasis_2", UI_ITEM_R_EXPAND, NULL, 0);
row= uiLayoutRow(col, 0);
- uiLayoutSetActive(row, !(RNA_enum_get(&tex_ptr, "stype")==TEX_BAND || RNA_enum_get(&tex_ptr, "stype")==TEX_RING));
+ uiLayoutSetActive(row, !(RNA_enum_get(&tex_ptr, "wood_type")==TEX_BAND || RNA_enum_get(&tex_ptr, "wood_type")==TEX_RING));
uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0);
break;
case TEX_CLOUDS:
uiItemR(col, &tex_ptr, "noise_basis", 0, "", 0);
row= uiLayoutRow(col, 0);
- uiItemR(row, &tex_ptr, "stype", UI_ITEM_R_EXPAND, NULL, 0);
+ uiItemR(row, &tex_ptr, "cloud_type", UI_ITEM_R_EXPAND, NULL, 0);
row= uiLayoutRow(col, 0);
uiItemR(row, &tex_ptr, "noise_type", UI_ITEM_R_EXPAND, NULL, 0);
uiItemR(col, &tex_ptr, "noise_depth", UI_ITEM_R_EXPAND, "Depth", 0);
diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c
index a81d6e3b0ce..07fe497781e 100644
--- a/source/blender/editors/space_node/node_draw.c
+++ b/source/blender/editors/space_node/node_draw.c
@@ -78,7 +78,7 @@ void ED_node_changed_update(ID *id, bNode *node)
if(treetype==NTREE_SHADER) {
DAG_id_flush_update(id, 0);
- WM_main_add_notifier(NC_MATERIAL|ND_SHADING, id);
+ WM_main_add_notifier(NC_MATERIAL|ND_SHADING_DRAW, id);
}
else if(treetype==NTREE_COMPOSIT) {
NodeTagChanged(edittree, node);
@@ -432,11 +432,9 @@ static void node_draw_mute_line(View2D *v2d, SpaceNode *snode, bNode *node)
{
bNodeSocket *valsock= NULL, *colsock= NULL, *vecsock= NULL;
bNodeSocket *sock;
- bNodeLink link;
+ bNodeLink link= {0};
int a;
- memset(&link, 0, sizeof(bNodeLink));
-
/* connect the first value buffer in with first value out */
/* connect the first RGBA buffer in with first RGBA out */
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index b8bfed2b75e..28de4c232e9 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -1785,7 +1785,7 @@ static int cut_links_intersect(bNodeLink *link, float mcoords[][2], int tot)
if(node_link_bezier_points(NULL, NULL, link, coord_array, LINK_RESOL)) {
for(i=0; i 0)
return 1;
}
@@ -1904,13 +1904,14 @@ void NODE_OT_read_renderlayers(wmOperatorType *ot)
static int node_read_fullsamplelayers_exec(bContext *C, wmOperator *UNUSED(op))
{
+ Main *bmain= CTX_data_main(C);
SpaceNode *snode= CTX_wm_space_node(C);
Scene *curscene= CTX_data_scene(C);
Render *re= RE_NewRender(curscene->id.name);
// WM_cursor_wait(1);
- RE_MergeFullSample(re, curscene, snode->nodetree);
+ RE_MergeFullSample(re, bmain, curscene, snode->nodetree);
snode_notify(C, snode);
// WM_cursor_wait(0);
diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c
index 60431f0e36d..fad34322f0a 100644
--- a/source/blender/editors/space_outliner/outliner.c
+++ b/source/blender/editors/space_outliner/outliner.c
@@ -2211,8 +2211,8 @@ static int tree_element_active_ebone(bContext *C, Scene *scene, TreeElement *te,
if(set) {
if(!(ebone->flag & BONE_HIDDEN_A)) {
bArmature *arm= scene->obedit->data;
- if(set==2) ED_armature_deselectall(scene->obedit, 2); // only clear active tag
- else ED_armature_deselectall(scene->obedit, 0); // deselect
+ if(set==2) ED_armature_deselect_all(scene->obedit, 2); // only clear active tag
+ else ED_armature_deselect_all(scene->obedit, 0); // deselect
ebone->flag |= BONE_SELECTED|BONE_ROOTSEL|BONE_TIPSEL;
arm->act_edbone= ebone;
@@ -5049,11 +5049,11 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
bArmature *arm= (bArmature *)tselem->id;
if(arm->edbo) {
EditBone *ebone= te->directdata;
- char newname[32];
+ char newname[sizeof(ebone->name)];
/* restore bone name */
- BLI_strncpy(newname, ebone->name, 32);
- BLI_strncpy(ebone->name, oldname, 32);
+ BLI_strncpy(newname, ebone->name, sizeof(ebone->name));
+ BLI_strncpy(ebone->name, oldname, sizeof(ebone->name));
ED_armature_bone_rename(obedit->data, oldname, newname);
WM_event_add_notifier(C, NC_OBJECT|ND_POSE, OBACT);
}
@@ -5064,15 +5064,15 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
{
Bone *bone= te->directdata;
Object *ob;
- char newname[32];
+ char newname[sizeof(bone->name)];
// always make current object active
tree_element_set_active_object(C, scene, soops, te, 1);
ob= OBACT;
/* restore bone name */
- BLI_strncpy(newname, bone->name, 32);
- BLI_strncpy(bone->name, oldname, 32);
+ BLI_strncpy(newname, bone->name, sizeof(bone->name));
+ BLI_strncpy(bone->name, oldname, sizeof(bone->name));
ED_armature_bone_rename(ob->data, oldname, newname);
WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob);
}
@@ -5081,15 +5081,15 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname)
{
bPoseChannel *pchan= te->directdata;
Object *ob;
- char newname[32];
+ char newname[sizeof(pchan->name)];
// always make current object active
tree_element_set_active_object(C, scene, soops, te, 1);
ob= OBACT;
/* restore bone name */
- BLI_strncpy(newname, pchan->name, 32);
- BLI_strncpy(pchan->name, oldname, 32);
+ BLI_strncpy(newname, pchan->name, sizeof(pchan->name));
+ BLI_strncpy(pchan->name, oldname, sizeof(pchan->name));
ED_armature_bone_rename(ob->data, oldname, newname);
WM_event_add_notifier(C, NC_OBJECT|ND_POSE, ob);
}
diff --git a/source/blender/editors/space_script/CMakeLists.txt b/source/blender/editors/space_script/CMakeLists.txt
index 88c0ea56ab2..17fcf2296e9 100644
--- a/source/blender/editors/space_script/CMakeLists.txt
+++ b/source/blender/editors/space_script/CMakeLists.txt
@@ -38,8 +38,7 @@ SET(SRC
IF(WITH_PYTHON)
LIST(APPEND INC ${PYTHON_INC} ../../python)
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_editor_space_script "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_script/SConscript b/source/blender/editors/space_script/SConscript
index f187df19117..8c75b999bc0 100644
--- a/source/blender/editors/space_script/SConscript
+++ b/source/blender/editors/space_script/SConscript
@@ -10,7 +10,7 @@ incs += ' ../../python'
defs = []
-if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+if env['WITH_BF_PYTHON']:
+ defs.append('WITH_PYTHON')
env.BlenderLib ( 'bf_editors_space_script', sources, Split(incs), defs, libtype=['core'], priority=[90] )
diff --git a/source/blender/editors/space_script/script_edit.c b/source/blender/editors/space_script/script_edit.c
index 23bc385c758..b9ece0add2f 100644
--- a/source/blender/editors/space_script/script_edit.c
+++ b/source/blender/editors/space_script/script_edit.c
@@ -46,7 +46,7 @@
#include "script_intern.h" // own include
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h" /* BPY_run_python_script */
#endif
@@ -54,7 +54,7 @@ static int run_pyfile_exec(bContext *C, wmOperator *op)
{
char path[512];
RNA_string_get(op->ptr, "filepath", path);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if(BPY_run_python_script(C, path, NULL, op->reports)) {
ARegion *ar= CTX_wm_region(C);
ED_region_tag_redraw(ar);
@@ -84,7 +84,7 @@ void SCRIPT_OT_python_file_run(wmOperatorType *ot)
static int script_reload_exec(bContext *C, wmOperator *UNUSED(op))
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* TODO, this crashes on netrender and keying sets, need to look into why
* disable for now unless running in debug mode */
WM_cursor_wait(1);
diff --git a/source/blender/editors/space_script/space_script.c b/source/blender/editors/space_script/space_script.c
index 66f630bb5b3..57d7bba8e3b 100644
--- a/source/blender/editors/space_script/space_script.c
+++ b/source/blender/editors/space_script/space_script.c
@@ -49,7 +49,7 @@
#include "UI_resources.h"
#include "UI_view2d.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -94,7 +94,7 @@ static void script_free(SpaceLink *sl)
{
SpaceScript *sscript= (SpaceScript*) sl;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/*free buttons references*/
if (sscript->but_refs) {
// XXX BPy_Set_DrawButtonsList(sscript->but_refs);
@@ -150,11 +150,13 @@ static void script_main_area_draw(const bContext *C, ARegion *ar)
/* data... */
// BPY_run_python_script(C, "/root/blender-svn/blender25/test.py", NULL);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if (sscript->script) {
//BPY_run_python_script_space(scpt->script.filename, NULL);
BPY_run_script_space_draw(C, sscript);
}
+#else
+ (void)sscript;
#endif
/* reset view matrix */
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 35f27953633..286442ba08c 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1159,8 +1159,9 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op)
}
SEQ_END
- /* test for effects and overlap */
- SEQP_BEGIN(ed, seq) {
+ /* test for effects and overlap
+ * dont use SEQP_BEGIN since that would be recursive */
+ for(seq= ed->seqbasep->first; seq; seq= seq->next) {
if(seq->flag & SELECT && !(seq->depth==0 && seq->flag & SEQ_LOCK)) {
seq->flag &= ~SEQ_OVERLAP;
if( seq_test_overlap(ed->seqbasep, seq) ) {
@@ -1176,7 +1177,6 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op)
calc_sequence(scene, seq);
}
}
- SEQ_END;
/* as last: */
sort_seq(scene);
@@ -1498,6 +1498,42 @@ void SEQUENCER_OT_reassign_inputs(struct wmOperatorType *ot)
}
+static int sequencer_swap_inputs_exec(bContext *C, wmOperator *op)
+{
+ Scene *scene= CTX_data_scene(C);
+ Sequence *seq, *last_seq = seq_active_get(scene);
+
+ if(last_seq->seq1==NULL || last_seq->seq2 == NULL) {
+ BKE_report(op->reports, RPT_ERROR, "No valid inputs to swap");
+ return OPERATOR_CANCELLED;
+ }
+
+ seq = last_seq->seq1;
+ last_seq->seq1 = last_seq->seq2;
+ last_seq->seq2 = seq;
+
+ update_changed_seq_and_deps(scene, last_seq, 1, 1);
+
+ WM_event_add_notifier(C, NC_SCENE|ND_SEQUENCER, scene);
+
+ return OPERATOR_FINISHED;
+}
+void SEQUENCER_OT_swap_inputs(struct wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Swap Inputs";
+ ot->idname= "SEQUENCER_OT_swap_inputs";
+ ot->description="Swap the first two inputs for the effects strip";
+
+ /* api callbacks */
+ ot->exec= sequencer_swap_inputs_exec;
+ ot->poll= sequencer_effect_poll;
+
+ /* flags */
+ ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+}
+
+
/* cut operator */
static EnumPropertyItem prop_cut_types[] = {
{SEQ_CUT_SOFT, "SOFT", 0, "Soft", ""},
@@ -2008,16 +2044,16 @@ static int sequencer_meta_separate_exec(bContext *C, wmOperator *UNUSED(op))
recurs_del_seq_flag(scene, ed->seqbasep, SEQ_FLAG_DELETE, 0);
- /* test for effects and overlap */
- SEQP_BEGIN(ed, seq) {
+ /* test for effects and overlap
+ * dont use SEQP_BEGIN since that would be recursive */
+ for(seq= ed->seqbasep->first; seq; seq= seq->next) {
if(seq->flag & SELECT) {
seq->flag &= ~SEQ_OVERLAP;
- if( seq_test_overlap(ed->seqbasep, seq) ) {
+ if(seq_test_overlap(ed->seqbasep, seq)) {
shuffle_seq(ed->seqbasep, seq, scene);
}
}
}
- SEQ_END;
sort_seq(scene);
seq_update_muting(scene, ed);
diff --git a/source/blender/editors/space_sequencer/sequencer_intern.h b/source/blender/editors/space_sequencer/sequencer_intern.h
index bf0dfff8e98..116786c3009 100644
--- a/source/blender/editors/space_sequencer/sequencer_intern.h
+++ b/source/blender/editors/space_sequencer/sequencer_intern.h
@@ -87,6 +87,7 @@ void SEQUENCER_OT_unlock(struct wmOperatorType *ot);
void SEQUENCER_OT_reload(struct wmOperatorType *ot);
void SEQUENCER_OT_refresh_all(struct wmOperatorType *ot);
void SEQUENCER_OT_reassign_inputs(struct wmOperatorType *ot);
+void SEQUENCER_OT_swap_inputs(struct wmOperatorType *ot);
void SEQUENCER_OT_duplicate(struct wmOperatorType *ot);
void SEQUENCER_OT_delete(struct wmOperatorType *ot);
void SEQUENCER_OT_images_separate(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_sequencer/sequencer_ops.c b/source/blender/editors/space_sequencer/sequencer_ops.c
index 041b475223b..62c478f916f 100644
--- a/source/blender/editors/space_sequencer/sequencer_ops.c
+++ b/source/blender/editors/space_sequencer/sequencer_ops.c
@@ -60,6 +60,7 @@ void sequencer_operatortypes(void)
WM_operatortype_append(SEQUENCER_OT_reload);
WM_operatortype_append(SEQUENCER_OT_refresh_all);
WM_operatortype_append(SEQUENCER_OT_reassign_inputs);
+ WM_operatortype_append(SEQUENCER_OT_swap_inputs);
WM_operatortype_append(SEQUENCER_OT_duplicate);
WM_operatortype_append(SEQUENCER_OT_delete);
WM_operatortype_append(SEQUENCER_OT_images_separate);
@@ -169,6 +170,7 @@ void sequencer_keymap(wmKeyConfig *keyconf)
RNA_enum_set(WM_keymap_add_item(keymap, "SEQUENCER_OT_swap", RIGHTARROWKEY, KM_PRESS, KM_ALT, 0)->ptr, "side", SEQ_SIDE_RIGHT);
WM_keymap_add_item(keymap, "SEQUENCER_OT_snap", SKEY, KM_PRESS, KM_SHIFT, 0);
+ WM_keymap_add_item(keymap, "SEQUENCER_OT_swap_inputs", SKEY, KM_PRESS, KM_ALT, 0);
/* multicam editing keyboard layout, switch to camera 1-10 using
regular number keys */
diff --git a/source/blender/editors/space_text/CMakeLists.txt b/source/blender/editors/space_text/CMakeLists.txt
index b53a86fbe39..708fc161655 100644
--- a/source/blender/editors/space_text/CMakeLists.txt
+++ b/source/blender/editors/space_text/CMakeLists.txt
@@ -40,8 +40,7 @@ SET(SRC
IF(WITH_PYTHON)
LIST(APPEND INC ${PYTHON_INC} ../../python)
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_editor_text "${SRC}" "${INC}")
diff --git a/source/blender/editors/space_text/SConscript b/source/blender/editors/space_text/SConscript
index bd87a799756..6d2816b7834 100644
--- a/source/blender/editors/space_text/SConscript
+++ b/source/blender/editors/space_text/SConscript
@@ -7,7 +7,7 @@ incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf'
incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include'
incs += ' ../../python ../../makesrna ../../blenfont'
-if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+if env['WITH_BF_PYTHON']:
+ defs.append('WITH_PYTHON')
env.BlenderLib ( 'bf_editors_space_text', sources, Split(incs), defs, libtype=['core'], priority=[95] )
diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c
index 464e144515f..b7bf61497bd 100644
--- a/source/blender/editors/space_text/text_header.c
+++ b/source/blender/editors/space_text/text_header.c
@@ -57,7 +57,7 @@
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// XXX #include "BPY_menus.h"
#endif
diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c
index af29e575482..32b71dbefb7 100644
--- a/source/blender/editors/space_text/text_ops.c
+++ b/source/blender/editors/space_text/text_ops.c
@@ -58,7 +58,7 @@
#include "RNA_access.h"
#include "RNA_define.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -171,9 +171,9 @@ static int new_exec(bContext *C, wmOperator *UNUSED(op))
else if(st) {
st->text= text;
st->top= 0;
+ text_drawcache_tag_update(st, 1);
}
- text_drawcache_tag_update(st, 1);
WM_event_add_notifier(C, NC_TEXT|NA_ADDED, text);
return OPERATOR_FINISHED;
@@ -310,7 +310,7 @@ static int reload_exec(bContext *C, wmOperator *op)
return OPERATOR_CANCELLED;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if(text->compiled)
BPY_free_compiled_text(text);
#endif
@@ -557,7 +557,7 @@ static int run_script_poll(bContext *C)
static int run_script_exec(bContext *C, wmOperator *op)
{
-#ifdef DISABLE_PYTHON
+#ifndef WITH_PYTHON
(void)C; /* unused */
BKE_report(op->reports, RPT_ERROR, "Python disabled in this build");
@@ -597,7 +597,7 @@ void TEXT_OT_run_script(wmOperatorType *ot)
static int refresh_pyconstraints_exec(bContext *UNUSED(C), wmOperator *UNUSED(op))
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#if 0
Text *text= CTX_data_edit_text(C);
Object *ob;
@@ -2603,12 +2603,16 @@ static int insert_invoke(bContext *C, wmOperator *op, wmEvent *event)
// if(!RNA_property_is_set(op->ptr, "text")) { /* always set from keymap XXX */
if(!RNA_string_length(op->ptr, "text")) {
- char str[2] = {event->ascii, '\0'};
/* if alt/ctrl/super are pressed pass through */
- if(event->ctrl || event->oskey)
+ if(event->ctrl || event->oskey) {
return OPERATOR_PASS_THROUGH;
-
- RNA_string_set(op->ptr, "text", str);
+ }
+ else {
+ char str[2];
+ str[0]= event->ascii;
+ str[1]= '\0';
+ RNA_string_set(op->ptr, "text", str);
+ }
}
ret = insert_exec(C, op);
diff --git a/source/blender/editors/space_text/text_python.c b/source/blender/editors/space_text/text_python.c
index 6e64bef4c85..720e80ec162 100644
--- a/source/blender/editors/space_text/text_python.c
+++ b/source/blender/editors/space_text/text_python.c
@@ -358,7 +358,7 @@ short do_texttools(SpaceText *st, char ascii, unsigned short evnt, short val)
}
#if 0
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* Run text plugin scripts if enabled */
if(st->doplugins && event && val) {
if(BPY_menu_do_shortcut(PYMENU_TEXTPLUGIN, event, qual)) {
diff --git a/source/blender/editors/space_time/space_time.c b/source/blender/editors/space_time/space_time.c
index a03baa2fa72..1de7704c3f0 100644
--- a/source/blender/editors/space_time/space_time.c
+++ b/source/blender/editors/space_time/space_time.c
@@ -281,7 +281,7 @@ static ActKeyColumn *time_cfra_find_ak (ActKeyColumn *ak, float cframe)
/* helper for time_draw_keyframes() */
static void time_draw_idblock_keyframes(View2D *v2d, ID *id, short onlysel)
{
- bDopeSheet ads;
+ bDopeSheet ads= {0};
DLRBT_Tree keys;
ActKeyColumn *ak;
@@ -290,7 +290,6 @@ static void time_draw_idblock_keyframes(View2D *v2d, ID *id, short onlysel)
/* init dopesheet settings */
// FIXME: the ob_to_keylist function currently doesn't take this into account...
- memset(&ads, 0, sizeof(bDopeSheet));
if (onlysel)
ads.filterflag |= ADS_FILTER_ONLYSEL;
diff --git a/source/blender/editors/space_view3d/CMakeLists.txt b/source/blender/editors/space_view3d/CMakeLists.txt
index 855d770c784..e9ed8335061 100644
--- a/source/blender/editors/space_view3d/CMakeLists.txt
+++ b/source/blender/editors/space_view3d/CMakeLists.txt
@@ -44,6 +44,7 @@ SET(SRC
view3d_buttons.c
view3d_draw.c
view3d_edit.c
+ view3d_fly.c
view3d_header.c
view3d_ops.c
view3d_select.c
@@ -54,7 +55,7 @@ SET(SRC
IF(WITH_GAMEENGINE)
LIST(APPEND INC ../../../kernel/gen_system)
- ADD_DEFINITIONS(-DGAMEBLENDER)
+ ADD_DEFINITIONS(-DWITH_GAMEENGINE)
ENDIF(WITH_GAMEENGINE)
IF(WIN32)
diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript
index d9074113ba9..bb32f8b926e 100644
--- a/source/blender/editors/space_view3d/SConscript
+++ b/source/blender/editors/space_view3d/SConscript
@@ -12,7 +12,7 @@ incs += ' #/intern/smoke/extern'
incs += ' #source/kernel/gen_system'
if env['WITH_BF_GAMEENGINE']:
- defs.append('GAMEBLENDER=1')
+ defs.append('WITH_GAMEENGINE')
if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
incs += ' ' + env['BF_PTHREADS_INC']
diff --git a/source/blender/editors/space_view3d/drawanimviz.c b/source/blender/editors/space_view3d/drawanimviz.c
index 52bb90aa8f0..7035006ea70 100644
--- a/source/blender/editors/space_view3d/drawanimviz.c
+++ b/source/blender/editors/space_view3d/drawanimviz.c
@@ -31,6 +31,7 @@
#include
#include
+#include "BLO_sys_types.h"
#include "DNA_anim_types.h"
#include "DNA_armature_types.h"
@@ -213,7 +214,7 @@ void draw_motion_path_instance(Scene *scene,
if (i == 0) {
sprintf(str, "%d", (i+sfra));
mul_v3_m4v3(co, ob->imat, mpv->co);
- view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE);
+ view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII);
}
else if ((i > stepsize) && (i < len-stepsize)) {
bMotionPathVert *mpvP = (mpv - stepsize);
@@ -222,7 +223,7 @@ void draw_motion_path_instance(Scene *scene,
if ((equals_v3v3(mpv->co, mpvP->co)==0) || (equals_v3v3(mpv->co, mpvN->co)==0)) {
sprintf(str, "%d", (sfra+i));
mul_v3_m4v3(co, ob->imat, mpv->co);
- view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE);
+ view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII);
}
}
}
@@ -280,7 +281,7 @@ void draw_motion_path_instance(Scene *scene,
sprintf(str, "%d", (sfra+i));
mul_v3_m4v3(co, ob->imat, mpv->co);
- view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE);
+ view3d_cached_text_draw_add(co, str, 0, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII);
}
}
}
diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c
index 33776abf4a0..8cfb11478be 100644
--- a/source/blender/editors/space_view3d/drawarmature.c
+++ b/source/blender/editors/space_view3d/drawarmature.c
@@ -1979,7 +1979,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt)
/* catch exception for bone with hidden parent */
flag= eBone->flag;
- if ( (eBone->parent) && ((eBone->parent->flag & BONE_HIDDEN_A) || (eBone->parent->layer & arm->layer)==0) )
+ if ( (eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent))
flag &= ~BONE_CONNECTED;
/* set temporary flag for drawing bone as active, but only if selected */
@@ -2018,7 +2018,7 @@ static void draw_ebones(View3D *v3d, ARegion *ar, Object *ob, int dt)
/* catch exception for bone with hidden parent */
flag= eBone->flag;
- if ( (eBone->parent) && ((eBone->parent->flag & BONE_HIDDEN_A) || (eBone->parent->layer & arm->layer)==0) )
+ if ( (eBone->parent) && !EBONE_VISIBLE(arm, eBone->parent))
flag &= ~BONE_CONNECTED;
/* set temporary flag for drawing bone as active, but only if selected */
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index bc340ef5b4b..7d30c404bf0 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -320,8 +320,12 @@ static void draw_xyz_wire(float *c, float size, int axis)
{
float v1[3]= {0.f, 0.f, 0.f}, v2[3] = {0.f, 0.f, 0.f};
float dim = size * 0.1;
- float dx[3]={dim, 0.0, 0.0}, dy[3]={0.0, dim, 0.0}, dz[3]={0.0, 0.0, dim};
-
+ float dx[3], dy[3], dz[3];
+
+ dx[0]=dim; dx[1]=0.f; dx[2]=0.f;
+ dy[0]=0.f; dy[1]=dim; dy[2]=0.f;
+ dz[0]=0.f; dz[1]=0.f; dz[2]=dim;
+
switch(axis) {
case 0: /* x axis */
glBegin(GL_LINES);
@@ -524,9 +528,7 @@ void drawcircball(int mode, float *cent, float rad, float tmat[][4])
/* circle for object centers, special_color is for library or ob users */
static void drawcentercircle(View3D *v3d, RegionView3D *rv3d, float *co, int selstate, int special_color)
{
- float vec[3]= {rv3d->persmat[0][3], rv3d->persmat[1][3], rv3d->persmat[2][3]};
- float size= rv3d->pixsize*((float)U.obcenter_dia*0.5f);
- size *= dot_v3v3(vec, co) + rv3d->persmat[3][3];
+ const float size= view3d_pixel_size(rv3d, co) * (float)U.obcenter_dia * 0.5f;
/* using gldepthfunc guarantees that it does write z values, but not checks for it, so centers remain visible independt order of drawing */
if(v3d->zbuf) glDepthFunc(GL_ALWAYS);
@@ -558,10 +560,10 @@ static int CachedTextLevel= 0;
typedef struct ViewCachedString {
struct ViewCachedString *next, *prev;
float vec[3], col[4];
- char str[128];
short mval[2];
short xoffs;
short flag;
+ /* str is allocated past the end */
} ViewCachedString;
void view3d_cached_text_draw_begin()
@@ -573,15 +575,18 @@ void view3d_cached_text_draw_begin()
void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag)
{
+ int alloc_len= strlen(str) + 1;
ListBase *strings= &CachedText[CachedTextLevel-1];
- ViewCachedString *vos= MEM_callocN(sizeof(ViewCachedString), "ViewCachedString");
+ ViewCachedString *vos= MEM_callocN(sizeof(ViewCachedString) + alloc_len, "ViewCachedString");
BLI_addtail(strings, vos);
- BLI_strncpy(vos->str, str, 128);
copy_v3_v3(vos->vec, co);
glGetFloatv(GL_CURRENT_COLOR, vos->col);
vos->xoffs= xoffs;
vos->flag= flag;
+
+ /* allocate past the end */
+ memcpy(++vos, str, alloc_len);
}
void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, float mat[][4])
@@ -635,8 +640,14 @@ void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, floa
}
#endif
if(vos->mval[0]!=IS_CLIPPED) {
+ const char *str= (char *)(vos+1);
glColor3fv(vos->col);
- BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, vos->str);
+ if(vos->flag & V3D_CACHE_TEXT_ASCII) {
+ BLF_draw_default_ascii((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str);
+ }
+ else {
+ BLF_draw_default((float)vos->mval[0]+vos->xoffs, (float)vos->mval[1], (depth_write)? 0.0f: 2.0f, str);
+ }
}
}
@@ -888,9 +899,10 @@ static void draw_transp_spot_volume(Lamp *la, float x, float z)
static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base, int dt, int flag)
{
Object *ob= base->object;
+ const float pixsize= view3d_pixel_size(rv3d, ob->obmat[3]);
Lamp *la= ob->data;
float vec[3], lvec[3], vvec[3], circrad, x,y,z;
- float pixsize, lampsize;
+ float lampsize;
float imat[4][4], curcol[4];
char col[4];
int drawcone= (dt>OB_WIRE && !(G.f & G_PICKSEL) && la->type == LA_SPOT && (la->mode & LA_SHOW_CONE));
@@ -906,8 +918,6 @@ static void drawlamp(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
glLoadMatrixf(rv3d->viewmat);
/* lets calculate the scale: */
- pixsize= rv3d->persmat[0][3]*ob->obmat[3][0]+ rv3d->persmat[1][3]*ob->obmat[3][1]+ rv3d->persmat[2][3]*ob->obmat[3][2]+ rv3d->persmat[3][3];
- pixsize*= rv3d->pixsize;
lampsize= pixsize*((float)U.obcenter_dia*0.5f);
/* and view aligned matrix: */
@@ -1809,8 +1819,9 @@ static void draw_dm_edges_sel_interp__setDrawInterpOptions(void *userData, int i
static void draw_dm_edges_sel_interp(DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol)
{
- unsigned char *cols[2] = {baseCol, selCol};
-
+ unsigned char *cols[2];
+ cols[0]= baseCol;
+ cols[1]= selCol;
dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_sel_interp__setDrawInterpOptions, cols);
}
@@ -2113,7 +2124,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E
else
sprintf(val, conv_float, len_v3v3(v1, v2));
- view3d_cached_text_draw_add(vmid, val, 0, 0);
+ view3d_cached_text_draw_add(vmid, val, 0, V3D_CACHE_TEXT_ASCII);
}
}
}
@@ -2152,7 +2163,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E
else
sprintf(val, conv_float, area);
- view3d_cached_text_draw_add(efa->cent, val, 0, 0);
+ view3d_cached_text_draw_add(efa->cent, val, 0, V3D_CACHE_TEXT_ASCII);
}
}
}
@@ -2194,13 +2205,13 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E
/* Vec 1 */
sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v4, v1, v2)));
interp_v3_v3v3(fvec, efa->cent, efa->v1->co, 0.8f);
- view3d_cached_text_draw_add(fvec, val, 0, 0);
+ view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII);
}
if( (e1->f & e2->f & SELECT) || (do_moving && (efa->v2->f & SELECT)) ) {
/* Vec 2 */
sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v1, v2, v3)));
interp_v3_v3v3(fvec, efa->cent, efa->v2->co, 0.8f);
- view3d_cached_text_draw_add(fvec, val, 0, 0);
+ view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII);
}
if( (e2->f & e3->f & SELECT) || (do_moving && (efa->v3->f & SELECT)) ) {
/* Vec 3 */
@@ -2209,14 +2220,14 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E
else
sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v2, v3, v1)));
interp_v3_v3v3(fvec, efa->cent, efa->v3->co, 0.8f);
- view3d_cached_text_draw_add(fvec, val, 0, 0);
+ view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII);
}
/* Vec 4 */
if(efa->v4) {
if( (e3->f & e4->f & SELECT) || (do_moving && (efa->v4->f & SELECT)) ) {
sprintf(val,"%.3f", RAD2DEG(angle_v3v3v3(v3, v4, v1)));
interp_v3_v3v3(fvec, efa->cent, efa->v4->co, 0.8f);
- view3d_cached_text_draw_add(fvec, val, 0, 0);
+ view3d_cached_text_draw_add(fvec, val, 0, V3D_CACHE_TEXT_ASCII);
}
}
}
@@ -3255,16 +3266,22 @@ static void draw_particle_arrays(int draw_as, int totpoint, int ob_dt, int selec
static void draw_particle(ParticleKey *state, int draw_as, short draw, float pixsize, float imat[4][4], float *draw_line, ParticleBillboardData *bb, ParticleDrawData *pdd)
{
float vec[3], vec2[3];
- float *vd = pdd->vd;
- float *cd = pdd->cd;
+ float *vd = NULL;
+ float *cd = NULL;
float ma_r=0.0f;
float ma_g=0.0f;
float ma_b=0.0f;
- if(pdd->ma_r) {
- ma_r = *pdd->ma_r;
- ma_g = *pdd->ma_g;
- ma_b = *pdd->ma_b;
+ /* null only for PART_DRAW_CIRC */
+ if(pdd) {
+ vd = pdd->vd;
+ cd = pdd->cd;
+
+ if(pdd->ma_r) {
+ ma_r = *pdd->ma_r;
+ ma_g = *pdd->ma_g;
+ ma_b = *pdd->ma_b;
+ }
}
switch(draw_as){
@@ -3356,8 +3373,6 @@ static void draw_particle(ParticleKey *state, int draw_as, short draw, float pix
}
case PART_DRAW_CIRC:
{
- if(pdd->ma_r)
- glColor3f(ma_r,ma_g,ma_b);
drawcircball(GL_LINE_LOOP, state->co, pixsize, imat);
break;
}
@@ -3416,7 +3431,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
ParticleData *pars, *pa;
ParticleKey state, *states=0;
ParticleBillboardData bb;
- ParticleSimulationData sim = {scene, ob, psys, NULL};
+ ParticleSimulationData sim= {0};
ParticleDrawData *pdd = psys->pdd;
Material *ma;
float vel[3], imat[4][4];
@@ -3454,6 +3469,9 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
return;
/* 2. */
+ sim.scene= scene;
+ sim.ob= ob;
+ sim.psys= psys;
sim.psmd = psmd = psys_get_modifier(ob,psys);
if(part->phystype==PART_PHYS_KEYED){
@@ -3491,12 +3509,6 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
else
cpack(0);
- if(pdd) {
- pdd->ma_r = &ma_r;
- pdd->ma_g = &ma_g;
- pdd->ma_b = &ma_b;
- }
-
timestep= psys_get_timestep(&sim);
if( (base->flag & OB_FROMDUPLI) && (ob->flag & OB_FROMGROUP) ) {
@@ -3532,12 +3544,7 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
case PART_DRAW_CROSS:
case PART_DRAW_AXIS:
/* lets calculate the scale: */
- pixsize= rv3d->persmat[0][3]*ob->obmat[3][0]+ rv3d->persmat[1][3]*ob->obmat[3][1]+ rv3d->persmat[2][3]*ob->obmat[3][2]+ rv3d->persmat[3][3];
- pixsize*= rv3d->pixsize;
- if(part->draw_size==0.0)
- pixsize*=2.0;
- else
- pixsize*=part->draw_size;
+ pixsize= view3d_pixel_size(rv3d, ob->obmat[3]);
if(draw_as==PART_DRAW_AXIS)
create_cdata = 1;
@@ -3650,11 +3657,18 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
pdd->tot_vec_size= tot_vec_size;
}
+ if(pdd) {
+ pdd->ma_r = &ma_r;
+ pdd->ma_g = &ma_g;
+ pdd->ma_b = &ma_b;
+ }
+
psys->lattice= psys_get_lattice(&sim);
- if(pdd && draw_as!=PART_DRAW_PATH){
+ /* circles don't use drawdata, so have to add a special case here */
+ if((pdd || draw_as==PART_DRAW_CIRC) && draw_as!=PART_DRAW_PATH){
/* 5. */
- if((pdd->flag & PARTICLE_DRAW_DATA_UPDATED)
+ if(pdd && (pdd->flag & PARTICLE_DRAW_DATA_UPDATED)
&& (pdd->vedata || part->draw & (PART_DRAW_SIZE|PART_DRAW_NUM|PART_DRAW_HEALTH))==0) {
totpoint = pdd->totpoint; /* draw data is up to date */
}
@@ -3822,16 +3836,24 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
char *val_pos= val;
val[0]= '\0';
- if(part->draw&PART_DRAW_NUM)
- val_pos += sprintf(val, "%i", a);
-
- if((part->draw & PART_DRAW_HEALTH) && a < totpart && part->phystype==PART_PHYS_BOIDS)
- sprintf(val_pos, (val_pos==val) ? "%.2f" : ":%.2f", pa_health);
+ if(part->draw&PART_DRAW_NUM) {
+ if(a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype==PART_PHYS_BOIDS)) {
+ sprintf(val_pos, "%d:%.2f", a, pa_health);
+ }
+ else {
+ sprintf(val_pos, "%d", a);
+ }
+ }
+ else {
+ if(a < totpart && (part->draw & PART_DRAW_HEALTH) && (part->phystype==PART_PHYS_BOIDS)) {
+ sprintf(val_pos, "%.2f", pa_health);
+ }
+ }
/* in path drawing state.co is the end point */
/* use worldspace beause object matrix is already applied */
mul_v3_m4v3(vec_txt, ob->imat, state.co);
- view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE);
+ view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII);
}
}
}
@@ -3920,12 +3942,10 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv
for(a=0, pa=psys->particles; aimat, cache[a]->co);
- view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE);
+ view3d_cached_text_draw_add(vec_txt, val, 10, V3D_CACHE_TEXT_WORLDSPACE|V3D_CACHE_TEXT_ASCII);
}
}
}
@@ -4736,9 +4756,17 @@ static void drawnurb(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base *base,
while (nr-->0) { /* accounts for empty bevel lists */
float fac= bevp->radius * ts->normalsize;
- float vec_a[3] = { fac,0, 0}; // Offset perpendicular to the curve
- float vec_b[3] = {-fac,0, 0}; // Delta along the curve
+ float vec_a[3]; // Offset perpendicular to the curve
+ float vec_b[3]; // Delta along the curve
+ vec_a[0]= fac;
+ vec_a[1]= 0.0f;
+ vec_a[2]= 0.0f;
+
+ vec_b[0]= -fac;
+ vec_b[1]= 0.0f;
+ vec_b[2]= 0.0f;
+
mul_qt_v3(bevp->quat, vec_a);
mul_qt_v3(bevp->quat, vec_b);
add_v3_v3(vec_a, bevp->vec);
@@ -5489,30 +5517,30 @@ static void draw_hooks(Object *ob)
void drawRBpivot(bRigidBodyJointConstraint *data)
{
int axis;
- float v1[3]= {data->pivX, data->pivY, data->pivZ};
- float eu[3]= {data->axX, data->axY, data->axZ};
float mat[4][4];
- eul_to_mat4(mat,eu);
+ eul_to_mat4(mat,&data->axX);
glLineWidth (4.0f);
setlinestyle(2);
for (axis=0; axis<3; axis++) {
float dir[3] = {0,0,0};
- float v[3]= {data->pivX, data->pivY, data->pivZ};
+ float v[3];
+
+ copy_v3_v3(v, &data->pivX);
dir[axis] = 1.f;
glBegin(GL_LINES);
mul_m4_v3(mat,dir);
add_v3_v3(v, dir);
- glVertex3fv(v1);
+ glVertex3fv(&data->pivX);
glVertex3fv(v);
glEnd();
if (axis==0)
- view3d_cached_text_draw_add(v, "px", 0, 0);
+ view3d_cached_text_draw_add(v, "px", 0, V3D_CACHE_TEXT_ASCII);
else if (axis==1)
- view3d_cached_text_draw_add(v, "py", 0, 0);
+ view3d_cached_text_draw_add(v, "py", 0, V3D_CACHE_TEXT_ASCII);
else
- view3d_cached_text_draw_add(v, "pz", 0, 0);
+ view3d_cached_text_draw_add(v, "pz", 0, V3D_CACHE_TEXT_ASCII);
}
glLineWidth (1.0f);
setlinestyle(0);
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 77f6e63e860..f5c1612f786 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -191,7 +191,7 @@ static SpaceLink *view3d_new(const bContext *C)
v3d->lay= v3d->layact= scene->lay;
v3d->camera= scene->camera;
}
- v3d->scenelock= 1;
+ v3d->scenelock= TRUE;
v3d->grid= 1.0f;
v3d->gridlines= 16;
v3d->gridsubdiv = 10;
@@ -206,6 +206,7 @@ static SpaceLink *view3d_new(const bContext *C)
v3d->near= 0.01f;
v3d->far= 500.0f;
+ v3d->twflag |= U.tw_flag & V3D_USE_MANIPULATOR;
v3d->twtype= V3D_MANIP_TRANSLATE;
v3d->around= V3D_CENTROID;
@@ -249,8 +250,8 @@ static SpaceLink *view3d_new(const bContext *C)
ar->regiondata= MEM_callocN(sizeof(RegionView3D), "region view3d");
rv3d= ar->regiondata;
rv3d->viewquat[0]= 1.0f;
- rv3d->persp= 1;
- rv3d->view= 7;
+ rv3d->persp= RV3D_PERSP;
+ rv3d->view= RV3D_VIEW_PERSPORTHO;
rv3d->dist= 10.0;
return (SpaceLink *)v3d;
diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c
index 450b3725bdb..9d17bbfe7da 100644
--- a/source/blender/editors/space_view3d/view3d_buttons.c
+++ b/source/blender/editors/space_view3d/view3d_buttons.c
@@ -884,14 +884,14 @@ static void v3d_posearmature_buts(uiLayout *layout, Object *ob)
void validate_editbonebutton_cb(bContext *C, void *bonev, void *namev)
{
EditBone *eBone= bonev;
- char oldname[32], newname[32];
-
+ char oldname[sizeof(eBone->name)], newname[sizeof(eBone->name)];
+
/* need to be on the stack */
- BLI_strncpy(newname, eBone->name, 32);
- BLI_strncpy(oldname, (char *)namev, 32);
+ BLI_strncpy(newname, eBone->name, sizeof(eBone->name));
+ BLI_strncpy(oldname, (char *)namev, sizeof(eBone->name));
/* restore */
- BLI_strncpy(eBone->name, oldname, 32);
-
+ BLI_strncpy(eBone->name, oldname, sizeof(eBone->name));
+
ED_armature_bone_rename(CTX_data_edit_object(C)->data, oldname, newname); // editarmature.c
WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, CTX_data_edit_object(C)); // XXX fix
}
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 30880db0c90..27afe07c4b2 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -579,6 +579,7 @@ static void draw_view_axis(RegionView3D *rv3d)
const float toll = 0.5; /* used to see when view is quasi-orthogonal */
const float start = k + 1.0; /* axis center in screen coordinates, x=y */
float ydisp = 0.0; /* vertical displacement to allow obj info text */
+ int bright = 25*(float)U.rvibright + 5; /* axis alpha (rvibright has range 0-10) */
float vec[3];
float dx, dy;
@@ -586,6 +587,9 @@ static void draw_view_axis(RegionView3D *rv3d)
/* thickness of lines is proportional to k */
glLineWidth(2);
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
/* X */
vec[0] = 1;
vec[1] = vec[2] = 0;
@@ -593,7 +597,7 @@ static void draw_view_axis(RegionView3D *rv3d)
dx = vec[0] * k;
dy = vec[1] * k;
- glColor3ub(220, 0, 0);
+ glColor4ub(220, 0, 0, bright);
glBegin(GL_LINES);
glVertex2f(start, start + ydisp);
glVertex2f(start + dx, start + dy + ydisp);
@@ -603,6 +607,9 @@ static void draw_view_axis(RegionView3D *rv3d)
BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x");
}
+ /* BLF_draw_default disables blending */
+ glEnable(GL_BLEND);
+
/* Y */
vec[1] = 1;
vec[0] = vec[2] = 0;
@@ -610,7 +617,7 @@ static void draw_view_axis(RegionView3D *rv3d)
dx = vec[0] * k;
dy = vec[1] * k;
- glColor3ub(0, 220, 0);
+ glColor4ub(0, 220, 0, bright);
glBegin(GL_LINES);
glVertex2f(start, start + ydisp);
glVertex2f(start + dx, start + dy + ydisp);
@@ -619,6 +626,8 @@ static void draw_view_axis(RegionView3D *rv3d)
if (fabs(dx) > toll || fabs(dy) > toll) {
BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y");
}
+
+ glEnable(GL_BLEND);
/* Z */
vec[2] = 1;
@@ -627,7 +636,7 @@ static void draw_view_axis(RegionView3D *rv3d)
dx = vec[0] * k;
dy = vec[1] * k;
- glColor3ub(30, 30, 220);
+ glColor4ub(30, 30, 220, bright);
glBegin(GL_LINES);
glVertex2f(start, start + ydisp);
glVertex2f(start + dx, start + dy + ydisp);
@@ -640,6 +649,7 @@ static void draw_view_axis(RegionView3D *rv3d)
/* restore line-width */
glLineWidth(1.0);
+ glDisable(GL_BLEND);
}
@@ -843,7 +853,7 @@ static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2
}
}
-void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r)
+void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, View3D *v3d, rctf *viewborder_r, short do_shift)
{
float zoomfac, size[2];
float dx= 0.0f, dy= 0.0f;
@@ -882,12 +892,13 @@ void view3d_calc_camera_border(Scene *scene, ARegion *ar, RegionView3D *rv3d, Vi
viewborder_r->xmax-= dx;
viewborder_r->ymax-= dy;
- if(v3d->camera && v3d->camera->type==OB_CAMERA) {
+ if(do_shift && v3d->camera && v3d->camera->type==OB_CAMERA) {
Camera *cam= v3d->camera->data;
float w = viewborder_r->xmax - viewborder_r->xmin;
float h = viewborder_r->ymax - viewborder_r->ymin;
float side = MAX2(w, h);
-
+
+ if(do_shift == -1) side *= -1;
viewborder_r->xmin+= cam->shiftx*side;
viewborder_r->xmax+= cam->shiftx*side;
viewborder_r->ymin+= cam->shifty*side;
@@ -922,7 +933,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d)
if(v3d->camera->type==OB_CAMERA)
ca = v3d->camera->data;
- view3d_calc_camera_border(scene, ar, rv3d, v3d, &viewborder);
+ view3d_calc_camera_border(scene, ar, rv3d, v3d, &viewborder, FALSE);
/* the offsets */
x1= viewborder.xmin;
y1= viewborder.ymin;
@@ -1259,7 +1270,7 @@ static void draw_bgpic(Scene *scene, ARegion *ar, View3D *v3d)
if(rv3d->persp==RV3D_CAMOB) {
rctf vb;
- view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb);
+ view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb, FALSE);
x1= vb.xmin;
y1= vb.ymin;
@@ -1572,22 +1583,32 @@ static void draw_dupli_objects(Scene *scene, ARegion *ar, View3D *v3d, Base *bas
void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect)
{
int x, y, w, h;
+ rcti r;
/* clamp rect by area */
-
+
+ r.xmin= 0;
+ r.xmax= ar->winx-1;
+ r.ymin= 0;
+ r.ymax= ar->winy-1;
+
/* Constrain rect to depth bounds */
- if (rect->xmin < 0) rect->xmin = 0;
- if (rect->ymin < 0) rect->ymin = 0;
- if (rect->xmax >= ar->winx) rect->xmax = ar->winx-1;
- if (rect->ymax >= ar->winy) rect->ymax = ar->winy-1;
+ BLI_isect_rcti(&r, rect, rect);
/* assign values to compare with the ViewDepths */
- x= ar->winrct.xmin + rect->xmin;
- y= ar->winrct.ymin + rect->ymin;
+ x= rect->xmin;
+ y= rect->ymin;
w= rect->xmax - rect->xmin;
h= rect->ymax - rect->ymin;
- if( d->w != w ||
+ if(w <= 0 || h <= 0) {
+ if(d->depths)
+ MEM_freeN(d->depths);
+ d->depths= NULL;
+
+ d->damaged= FALSE;
+ }
+ else if( d->w != w ||
d->h != h ||
d->x != x ||
d->y != y ||
@@ -1603,13 +1624,13 @@ void view3d_update_depths_rect(ARegion *ar, ViewDepths *d, rcti *rect)
d->depths= MEM_mallocN(sizeof(float)*d->w*d->h,"View depths Subset");
- d->damaged= 1;
+ d->damaged= TRUE;
}
if(d->damaged) {
glReadPixels(ar->winrct.xmin+d->x,ar->winrct.ymin+d->y, d->w,d->h, GL_DEPTH_COMPONENT,GL_FLOAT, d->depths);
glGetDoublev(GL_DEPTH_RANGE,d->depth_range);
- d->damaged= 0;
+ d->damaged= FALSE;
}
}
@@ -1654,7 +1675,7 @@ float view3d_depth_near(ViewDepths *d)
const float *depths= d->depths;
float depth= FLT_MAX;
- int i= d->w * d->h;
+ int i= (int)d->w * (int)d->h; /* cast to avoid short overflow */
/* far is both the starting 'far' value
* and the closest value found. */
@@ -1855,8 +1876,6 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d)
Scene *sce;
Base *base;
Object *ob;
- ARegion ar;
- RegionView3D rv3d;
shadows.first= shadows.last= NULL;
@@ -1885,6 +1904,8 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d)
/* this needs to be done better .. */
float viewmat[4][4], winmat[4][4];
int drawtype, lay, winsize, flag2=v3d->flag2;
+ ARegion ar= {0};
+ RegionView3D rv3d= {{{0}}};
drawtype= v3d->drawtype;
lay= v3d->lay;
@@ -1896,9 +1917,6 @@ static void gpu_update_lamps_shadows(Scene *scene, View3D *v3d)
GPU_lamp_shadow_buffer_bind(shadow->lamp, viewmat, &winsize, winmat);
- memset(&ar, 0, sizeof(ar));
- memset(&rv3d, 0, sizeof(rv3d));
-
ar.regiondata= &rv3d;
ar.regiontype= RGN_TYPE_WINDOW;
rv3d.persp= RV3D_CAMOB;
@@ -1984,10 +2002,19 @@ static void view3d_main_area_setup_view(Scene *scene, View3D *v3d, ARegion *ar,
{
/* note: '1.0f / len_v3(v1)' replaced 'len_v3(rv3d->viewmat[0])'
* because of float point precission problems at large values [#23908] */
- float v1[3]= {rv3d->persmat[0][0], rv3d->persmat[1][0], rv3d->persmat[2][0]};
- float v2[3]= {rv3d->persmat[0][1], rv3d->persmat[1][1], rv3d->persmat[2][1]};
- float len1= 1.0f / len_v3(v1);
- float len2= 1.0f / len_v3(v2);
+ float v1[3], v2[3];
+ float len1, len2;
+
+ v1[0]= rv3d->persmat[0][0];
+ v1[1]= rv3d->persmat[1][0];
+ v1[2]= rv3d->persmat[2][0];
+
+ v2[0]= rv3d->persmat[0][1];
+ v2[1]= rv3d->persmat[1][1];
+ v2[2]= rv3d->persmat[2][1];
+
+ len1= 1.0f / len_v3(v1);
+ len2= 1.0f / len_v3(v2);
rv3d->pixsize = (2.0f * MAX2(len1, len2)) / (float)MAX2(ar->winx, ar->winy);
}
@@ -2164,13 +2191,9 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(Scene *scene, View3D *v3d, ARegion *ar, in
/* creates own 3d views, used by the sequencer */
ImBuf *ED_view3d_draw_offscreen_imbuf_simple(Scene *scene, int width, int height, unsigned int flag, int drawtype)
{
- View3D v3d;
- ARegion ar;
- RegionView3D rv3d;
-
- memset(&v3d, 0, sizeof(v3d));
- memset(&ar, 0, sizeof(ar));
- memset(&rv3d, 0, sizeof(rv3d));
+ View3D v3d= {0};
+ ARegion ar= {0};
+ RegionView3D rv3d= {{{0}}};
/* connect data */
v3d.regionbase.first= v3d.regionbase.last= &ar;
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index a5cca6341f6..9fbfd12f902 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -1366,7 +1366,7 @@ void VIEW3D_OT_view_all(wmOperatorType *ot)
/* api callbacks */
ot->exec= view3d_all_exec;
- ot->poll= ED_operator_view3d_active;
+ ot->poll= ED_operator_region_view3d_active;
/* flags */
ot->flag= 0;
@@ -1432,7 +1432,7 @@ static int viewselected_exec(bContext *C, wmOperator *UNUSED(op)) /* like a loca
}
}
else if (paint_facesel_test(ob)) {
- ok= minmax_tface(ob, min, max);
+ ok= paintface_minmax(ob, min, max);
}
else if (ob && (ob->mode & OB_MODE_PARTICLE_EDIT)) {
ok= PE_minmax(scene, min, max);
@@ -1594,7 +1594,7 @@ static int render_border_exec(bContext *C, wmOperator *op)
rect.ymax= RNA_int_get(op->ptr, "ymax");
/* calculate range */
- view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb);
+ view3d_calc_camera_border(scene, ar, rv3d, v3d, &vb, FALSE);
scene->r.border.xmin= ((float)rect.xmin-vb.xmin)/(vb.xmax-vb.xmin);
scene->r.border.ymin= ((float)rect.ymin-vb.ymin)/(vb.ymax-vb.ymin);
@@ -2423,7 +2423,9 @@ static int set_3dcursor_invoke(bContext *C, wmOperator *UNUSED(op), wmEvent *eve
short depth_used = 0;
if (U.uiflag & USER_ORBIT_ZBUF) { /* maybe this should be accessed some other way */
- short mval_depth[2] = {mx, my};
+ short mval_depth[2];
+ mval_depth[0]= mx;
+ mval_depth[1]= my;
view3d_operator_needs_opengl(C);
if (view_autodist(scene, ar, v3d, mval_depth, fp))
depth_used= 1;
@@ -2575,10 +2577,8 @@ static float view_autodist_depth_margin(ARegion *ar, short *mval, int margin)
view3d_update_depths_rect(ar, &depth_temp, &rect);
depth_close= view3d_depth_near(&depth_temp);
-
- MEM_freeN(depth_temp.depths);
-
- return depth_close;
+ if(depth_temp.depths) MEM_freeN(depth_temp.depths);
+ return depth_close;
}
/* XXX todo Zooms in on a border drawn by the user */
@@ -3051,6 +3051,21 @@ void viewmoveNDOF(Scene *scene, ARegion *ar, View3D *v3d, int UNUSED(mode))
// XXX scrarea_do_windraw(curarea);
}
-
-
-
+/* give a 4x4 matrix from a perspective view, only needs viewquat, ofs and dist
+ * basically the same as...
+ * rv3d->persp= RV3D_PERSP
+ * setviewmatrixview3d(scene, v3d, rv3d);
+ * setcameratoview3d(v3d, rv3d, v3d->camera);
+ * ...but less of a hassle
+ * */
+void view3d_persp_mat4(RegionView3D *rv3d, float mat[][4])
+{
+ float qt[4], dvec[3];
+ copy_qt_qt(qt, rv3d->viewquat);
+ qt[0]= -qt[0];
+ quat_to_mat4(mat, qt);
+ mat[3][2] -= rv3d->dist;
+ translate_m4(mat, rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]);
+ mul_v3_v3fl(dvec, mat[2], -rv3d->dist);
+ sub_v3_v3v3(mat[3], dvec, rv3d->ofs);
+}
diff --git a/source/blender/editors/space_view3d/view3d_fly.c b/source/blender/editors/space_view3d/view3d_fly.c
new file mode 100644
index 00000000000..e137270aa5b
--- /dev/null
+++ b/source/blender/editors/space_view3d/view3d_fly.c
@@ -0,0 +1,939 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Campbell Barton
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/* defines VIEW3D_OT_fly modal operator */
+
+#include "DNA_anim_types.h"
+#include "DNA_scene_types.h"
+#include "DNA_object_types.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_math.h"
+#include "BLI_blenlib.h"
+
+#include "BKE_context.h"
+#include "BKE_object.h"
+#include "BKE_report.h"
+
+#include "BKE_depsgraph.h" /* for fly mode updating */
+
+#include "BIF_gl.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_keyframing.h"
+#include "ED_screen.h"
+#include "ED_space_api.h"
+
+#include "PIL_time.h" /* smoothview */
+
+#include "view3d_intern.h" // own include
+
+/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */
+#define FLY_MODAL_CANCEL 1
+#define FLY_MODAL_CONFIRM 2
+#define FLY_MODAL_ACCELERATE 3
+#define FLY_MODAL_DECELERATE 4
+#define FLY_MODAL_PAN_ENABLE 5
+#define FLY_MODAL_PAN_DISABLE 6
+#define FLY_MODAL_DIR_FORWARD 7
+#define FLY_MODAL_DIR_BACKWARD 8
+#define FLY_MODAL_DIR_LEFT 9
+#define FLY_MODAL_DIR_RIGHT 10
+#define FLY_MODAL_DIR_UP 11
+#define FLY_MODAL_DIR_DOWN 12
+#define FLY_MODAL_AXIS_LOCK_X 13
+#define FLY_MODAL_AXIS_LOCK_Z 14
+#define FLY_MODAL_PRECISION_ENABLE 15
+#define FLY_MODAL_PRECISION_DISABLE 16
+
+/* called in transform_ops.c, on each regeneration of keymaps */
+void fly_modal_keymap(wmKeyConfig *keyconf)
+{
+ static EnumPropertyItem modal_items[] = {
+ {FLY_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
+ {FLY_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""},
+ {FLY_MODAL_ACCELERATE, "ACCELERATE", 0, "Accelerate", ""},
+ {FLY_MODAL_DECELERATE, "DECELERATE", 0, "Decelerate", ""},
+
+ {FLY_MODAL_PAN_ENABLE, "PAN_ENABLE", 0, "Pan Enable", ""},
+ {FLY_MODAL_PAN_DISABLE, "PAN_DISABLE", 0, "Pan Disable", ""},
+
+ {FLY_MODAL_DIR_FORWARD, "FORWARD", 0, "Fly Forward", ""},
+ {FLY_MODAL_DIR_BACKWARD,"BACKWARD", 0, "Fly Backward", ""},
+ {FLY_MODAL_DIR_LEFT, "LEFT", 0, "Fly Left", ""},
+ {FLY_MODAL_DIR_RIGHT, "RIGHT", 0, "Fly Right", ""},
+ {FLY_MODAL_DIR_UP, "UP", 0, "Fly Up", ""},
+ {FLY_MODAL_DIR_DOWN, "DOWN", 0, "Fly Down", ""},
+
+ {FLY_MODAL_AXIS_LOCK_X, "AXIS_LOCK_X", 0, "X Axis Correction", "X axis correction (toggle)"},
+ {FLY_MODAL_AXIS_LOCK_Z, "AXIS_LOCK_Z", 0, "X Axis Correction", "Z axis correction (toggle)"},
+
+ {FLY_MODAL_PRECISION_ENABLE, "PRECISION_ENABLE", 0, "Precision Enable", ""},
+ {FLY_MODAL_PRECISION_DISABLE, "PRECISION_DISABLE", 0, "Precision Disable", ""},
+
+ {0, NULL, 0, NULL, NULL}};
+
+ wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "View3D Fly Modal");
+
+ /* this function is called for each spacetype, only needs to add map once */
+ if(keymap) return;
+
+ keymap= WM_modalkeymap_add(keyconf, "View3D Fly Modal", modal_items);
+
+ /* items for modal map */
+ WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CANCEL);
+ WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CANCEL);
+
+ WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CONFIRM);
+ WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM);
+ WM_modalkeymap_add_item(keymap, SPACEKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM);
+ WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM);
+
+ WM_modalkeymap_add_item(keymap, PADPLUSKEY, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE);
+ WM_modalkeymap_add_item(keymap, PADMINUS, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE);
+ WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE);
+ WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE);
+
+ WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, FLY_MODAL_PAN_ENABLE);
+ WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PAN_DISABLE); /* XXX - Bug in the event system, middle mouse release doesnt work */
+
+ /* WASD */
+ WM_modalkeymap_add_item(keymap, WKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_FORWARD);
+ WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_BACKWARD);
+ WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_LEFT);
+ WM_modalkeymap_add_item(keymap, DKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_RIGHT);
+ WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_UP);
+ WM_modalkeymap_add_item(keymap, FKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_DOWN);
+
+ WM_modalkeymap_add_item(keymap, XKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_X);
+ WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_Z);
+
+ WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_PRECISION_ENABLE);
+ WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PRECISION_DISABLE);
+
+ /* assign map to operators */
+ WM_modalkeymap_assign(keymap, "VIEW3D_OT_fly");
+
+}
+
+typedef struct FlyInfo {
+ /* context stuff */
+ RegionView3D *rv3d;
+ View3D *v3d;
+ ARegion *ar;
+ Scene *scene;
+
+ wmTimer *timer; /* needed for redraws */
+
+ short state;
+ short use_precision;
+ short redraw;
+ short mval[2];
+
+ /* fly state state */
+ float speed; /* the speed the view is moving per redraw */
+ short axis; /* Axis index to move allong by default Z to move allong the view */
+ short pan_view; /* when true, pan the view instead of rotating */
+
+ /* relative view axis locking - xlock, zlock
+ 0; disabled
+ 1; enabled but not checking because mouse hasnt moved outside the margin since locking was checked an not needed
+ when the mouse moves, locking is set to 2 so checks are done.
+ 2; mouse moved and checking needed, if no view altering is donem its changed back to 1 */
+ short xlock, zlock;
+ float xlock_momentum, zlock_momentum; /* nicer dynamics */
+ float grid; /* world scale 1.0 default */
+
+ /* root most parent */
+ Object *root_parent;
+
+ /* backup values */
+ float dist_backup; /* backup the views distance since we use a zero dist for fly mode */
+ float ofs_backup[3]; /* backup the views offset incase the user cancels flying in non camera mode */
+ float rot_backup[4]; /* backup the views quat incase the user cancels flying in non camera mode. (quat for view, eul for camera) */
+ short persp_backup; /* remember if were ortho or not, only used for restoring the view if it was a ortho view */
+
+ void *obtfm; /* backup the objects transform */
+
+ /* compare between last state */
+ double time_lastwheel; /* used to accelerate when using the mousewheel a lot */
+ double time_lastdraw; /* time between draws */
+
+ void *draw_handle_pixel;
+
+ /* use for some lag */
+ float dvec_prev[3]; /* old for some lag */
+
+} FlyInfo;
+
+static void drawFlyPixel(const struct bContext *UNUSED(C), struct ARegion *UNUSED(ar), void *arg)
+{
+ FlyInfo *fly = arg;
+
+ /* draws 4 edge brackets that frame the safe area where the
+ mouse can move during fly mode without spinning the view */
+ float x1, x2, y1, y2;
+
+ x1= 0.45*(float)fly->ar->winx;
+ y1= 0.45*(float)fly->ar->winy;
+ x2= 0.55*(float)fly->ar->winx;
+ y2= 0.55*(float)fly->ar->winy;
+ cpack(0);
+
+
+ glBegin(GL_LINES);
+ /* bottom left */
+ glVertex2f(x1,y1);
+ glVertex2f(x1,y1+5);
+
+ glVertex2f(x1,y1);
+ glVertex2f(x1+5,y1);
+
+ /* top right */
+ glVertex2f(x2,y2);
+ glVertex2f(x2,y2-5);
+
+ glVertex2f(x2,y2);
+ glVertex2f(x2-5,y2);
+
+ /* top left */
+ glVertex2f(x1,y2);
+ glVertex2f(x1,y2-5);
+
+ glVertex2f(x1,y2);
+ glVertex2f(x1+5,y2);
+
+ /* bottom right */
+ glVertex2f(x2,y1);
+ glVertex2f(x2,y1+5);
+
+ glVertex2f(x2,y1);
+ glVertex2f(x2-5,y1);
+ glEnd();
+}
+
+/* FlyInfo->state */
+#define FLY_RUNNING 0
+#define FLY_CANCEL 1
+#define FLY_CONFIRM 2
+
+static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event)
+{
+ float upvec[3]; // tmp
+ float mat[3][3];
+
+ fly->rv3d= CTX_wm_region_view3d(C);
+ fly->v3d = CTX_wm_view3d(C);
+ fly->ar = CTX_wm_region(C);
+ fly->scene= CTX_data_scene(C);
+
+ if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->id.lib) {
+ BKE_report(op->reports, RPT_ERROR, "Cannot fly a camera from an external library");
+ return FALSE;
+ }
+
+ if(fly->v3d->ob_centre) {
+ BKE_report(op->reports, RPT_ERROR, "Cannot fly when the view is locked to an object");
+ return FALSE;
+ }
+
+ if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->constraints.first) {
+ BKE_report(op->reports, RPT_ERROR, "Cannot fly an object with constraints");
+ return FALSE;
+ }
+
+ fly->state= FLY_RUNNING;
+ fly->speed= 0.0f;
+ fly->axis= 2;
+ fly->pan_view= FALSE;
+ fly->xlock= FALSE;
+ fly->zlock= FALSE;
+ fly->xlock_momentum=0.0f;
+ fly->zlock_momentum=0.0f;
+ fly->grid= 1.0f;
+ fly->use_precision= 0;
+
+ fly->dvec_prev[0]= fly->dvec_prev[1]= fly->dvec_prev[2]= 0.0f;
+
+ fly->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f);
+
+ fly->mval[0] = event->x - fly->ar->winrct.xmin;
+ fly->mval[1] = event->y - fly->ar->winrct.ymin;
+
+
+ fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer();
+
+ fly->draw_handle_pixel = ED_region_draw_cb_activate(fly->ar->type, drawFlyPixel, fly, REGION_DRAW_POST_PIXEL);
+
+ fly->rv3d->rflag |= RV3D_NAVIGATING; /* so we draw the corner margins */
+
+ /* detect weather to start with Z locking */
+ upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f;
+ copy_m3_m4(mat, fly->rv3d->viewinv);
+ mul_m3_v3(mat, upvec);
+ if (fabs(upvec[2]) < 0.1)
+ fly->zlock = 1;
+ upvec[0]=0; upvec[1]=0; upvec[2]=0;
+
+ fly->persp_backup= fly->rv3d->persp;
+ fly->dist_backup= fly->rv3d->dist;
+ if (fly->rv3d->persp==RV3D_CAMOB) {
+ Object *ob_back;
+ if((fly->root_parent=fly->v3d->camera->parent)) {
+ while(fly->root_parent->parent)
+ fly->root_parent= fly->root_parent->parent;
+ ob_back= fly->root_parent;
+ }
+ else {
+ ob_back= fly->v3d->camera;
+ }
+
+ /* store the original camera loc and rot */
+ /* TODO. axis angle etc */
+
+ fly->obtfm= object_tfm_backup(ob_back);
+
+ where_is_object(fly->scene, fly->v3d->camera);
+ negate_v3_v3(fly->rv3d->ofs, fly->v3d->camera->obmat[3]);
+
+ fly->rv3d->dist=0.0;
+ } else {
+ /* perspective or ortho */
+ if (fly->rv3d->persp==RV3D_ORTHO)
+ fly->rv3d->persp= RV3D_PERSP; /*if ortho projection, make perspective */
+ copy_qt_qt(fly->rot_backup, fly->rv3d->viewquat);
+ copy_v3_v3(fly->ofs_backup, fly->rv3d->ofs);
+ fly->rv3d->dist= 0.0f;
+
+ upvec[2]= fly->dist_backup; /*x and y are 0*/
+ mul_m3_v3(mat, upvec);
+ sub_v3_v3(fly->rv3d->ofs, upvec);
+ /*Done with correcting for the dist*/
+ }
+
+
+ /* center the mouse, probably the UI mafia are against this but without its quite annoying */
+ WM_cursor_warp(CTX_wm_window(C), fly->ar->winrct.xmin + fly->ar->winx/2, fly->ar->winrct.ymin + fly->ar->winy/2);
+
+ return 1;
+}
+
+static int flyEnd(bContext *C, FlyInfo *fly)
+{
+ RegionView3D *rv3d= fly->rv3d;
+ View3D *v3d = fly->v3d;
+
+ float upvec[3];
+
+ if(fly->state == FLY_RUNNING)
+ return OPERATOR_RUNNING_MODAL;
+
+ WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), fly->timer);
+
+ ED_region_draw_cb_exit(fly->ar->type, fly->draw_handle_pixel);
+
+ rv3d->dist= fly->dist_backup;
+
+ if (fly->state == FLY_CANCEL) {
+ /* Revert to original view? */
+ if (fly->persp_backup==RV3D_CAMOB) { /* a camera view */
+ Object *ob_back;
+ if(fly->root_parent)ob_back= fly->root_parent;
+ else ob_back= fly->v3d->camera;
+
+ /* store the original camera loc and rot */
+ object_tfm_restore(ob_back, fly->obtfm);
+
+ DAG_id_flush_update(&ob_back->id, OB_RECALC_OB);
+ } else {
+ /* Non Camera we need to reset the view back to the original location bacause the user canceled*/
+ copy_qt_qt(rv3d->viewquat, fly->rot_backup);
+ copy_v3_v3(rv3d->ofs, fly->ofs_backup);
+ rv3d->persp= fly->persp_backup;
+ }
+ }
+ else if (fly->persp_backup==RV3D_CAMOB) { /* camera */
+ DAG_id_flush_update(fly->root_parent ? &fly->root_parent->id : &v3d->camera->id, OB_RECALC_OB);
+ }
+ else { /* not camera */
+ /* Apply the fly mode view */
+ /*restore the dist*/
+ float mat[3][3];
+ upvec[0]= upvec[1]= 0;
+ upvec[2]= fly->dist_backup; /*x and y are 0*/
+ copy_m3_m4(mat, rv3d->viewinv);
+ mul_m3_v3(mat, upvec);
+ add_v3_v3(rv3d->ofs, upvec);
+ /*Done with correcting for the dist */
+ }
+
+ rv3d->rflag &= ~RV3D_NAVIGATING;
+//XXX2.5 BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); /* not working at the moment not sure why */
+
+ if(fly->obtfm)
+ MEM_freeN(fly->obtfm);
+
+ if(fly->state == FLY_CONFIRM) {
+ MEM_freeN(fly);
+ return OPERATOR_FINISHED;
+ }
+
+ MEM_freeN(fly);
+ return OPERATOR_CANCELLED;
+}
+
+static void flyEvent(FlyInfo *fly, wmEvent *event)
+{
+ if (event->type == TIMER && event->customdata == fly->timer) {
+ fly->redraw = 1;
+ }
+ else if (event->type == MOUSEMOVE) {
+ fly->mval[0] = event->x - fly->ar->winrct.xmin;
+ fly->mval[1] = event->y - fly->ar->winrct.ymin;
+ } /* handle modal keymap first */
+ else if (event->type == EVT_MODAL_MAP) {
+ switch (event->val) {
+ case FLY_MODAL_CANCEL:
+ fly->state = FLY_CANCEL;
+ break;
+ case FLY_MODAL_CONFIRM:
+ fly->state = FLY_CONFIRM;
+ break;
+
+ case FLY_MODAL_ACCELERATE:
+ {
+ double time_currwheel;
+ float time_wheel;
+
+ time_currwheel= PIL_check_seconds_timer();
+ time_wheel = (float)(time_currwheel - fly->time_lastwheel);
+ fly->time_lastwheel = time_currwheel;
+ /*printf("Wheel %f\n", time_wheel);*/
+ /*Mouse wheel delays range from 0.5==slow to 0.01==fast*/
+ time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */
+
+ if (fly->speed<0.0f) fly->speed= 0.0f;
+ else {
+ if (event->shift)
+ fly->speed+= fly->grid*time_wheel*0.1;
+ else
+ fly->speed+= fly->grid*time_wheel;
+ }
+ break;
+ }
+ case FLY_MODAL_DECELERATE:
+ {
+ double time_currwheel;
+ float time_wheel;
+
+ time_currwheel= PIL_check_seconds_timer();
+ time_wheel = (float)(time_currwheel - fly->time_lastwheel);
+ fly->time_lastwheel = time_currwheel;
+ time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */
+
+ if (fly->speed>0) fly->speed=0;
+ else {
+ if (event->shift)
+ fly->speed-= fly->grid*time_wheel*0.1;
+ else
+ fly->speed-= fly->grid*time_wheel;
+ }
+ break;
+ }
+ case FLY_MODAL_PAN_ENABLE:
+ fly->pan_view= TRUE;
+ break;
+ case FLY_MODAL_PAN_DISABLE:
+//XXX2.5 warp_pointer(cent_orig[0], cent_orig[1]);
+ fly->pan_view= FALSE;
+ break;
+
+ /* impliment WASD keys */
+ case FLY_MODAL_DIR_FORWARD:
+ if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather then stopping, game like motion */
+ else if (fly->axis==2) fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/
+ fly->axis= 2;
+ break;
+ case FLY_MODAL_DIR_BACKWARD:
+ if (fly->speed > 0.0f) fly->speed= -fly->speed;
+ else if (fly->axis==2) fly->speed -= fly->grid;
+ fly->axis= 2;
+ break;
+ case FLY_MODAL_DIR_LEFT:
+ if (fly->speed < 0.0f) fly->speed= -fly->speed;
+ else if (fly->axis==0) fly->speed += fly->grid;
+ fly->axis= 0;
+ break;
+ case FLY_MODAL_DIR_RIGHT:
+ if (fly->speed > 0.0f) fly->speed= -fly->speed;
+ else if (fly->axis==0) fly->speed -= fly->grid;
+ fly->axis= 0;
+ break;
+ case FLY_MODAL_DIR_DOWN:
+ if (fly->speed < 0.0f) fly->speed= -fly->speed;
+ else if (fly->axis==1) fly->speed += fly->grid;
+ fly->axis= 1;
+ break;
+ case FLY_MODAL_DIR_UP:
+ if (fly->speed > 0.0f) fly->speed= -fly->speed;
+ else if (fly->axis==1) fly->speed -= fly->grid;
+ fly->axis= 1;
+ break;
+
+ case FLY_MODAL_AXIS_LOCK_X:
+ if (fly->xlock) fly->xlock=0;
+ else {
+ fly->xlock = 2;
+ fly->xlock_momentum = 0.0;
+ }
+ break;
+ case FLY_MODAL_AXIS_LOCK_Z:
+ if (fly->zlock) fly->zlock=0;
+ else {
+ fly->zlock = 2;
+ fly->zlock_momentum = 0.0;
+ }
+ break;
+
+ case FLY_MODAL_PRECISION_ENABLE:
+ fly->use_precision= TRUE;
+ break;
+ case FLY_MODAL_PRECISION_DISABLE:
+ fly->use_precision= FALSE;
+ break;
+
+ }
+ }
+}
+
+static int flyApply(bContext *C, FlyInfo *fly)
+{
+
+#define FLY_ROTATE_FAC 2.5f /* more is faster */
+#define FLY_ZUP_CORRECT_FAC 0.1f /* ammount to correct per step */
+#define FLY_ZUP_CORRECT_ACCEL 0.05f /* increase upright momentum each step */
+
+ /*
+ fly mode - Shift+F
+ a fly loop where the user can move move the view as if they are flying
+ */
+ RegionView3D *rv3d= fly->rv3d;
+ View3D *v3d = fly->v3d;
+ ARegion *ar = fly->ar;
+ Scene *scene= fly->scene;
+
+ float prev_view_mat[4][4];
+
+ float mat[3][3], /* 3x3 copy of the view matrix so we can move allong the view axis */
+ dvec[3]={0,0,0}, /* this is the direction thast added to the view offset per redraw */
+
+ /* Camera Uprighting variables */
+ upvec[3]={0,0,0}, /* stores the view's up vector */
+
+ moffset[2], /* mouse offset from the views center */
+ tmp_quat[4]; /* used for rotating the view */
+
+ int cent_orig[2], /* view center */
+//XXX- can avoid using // cent[2], /* view center modified */
+ xmargin, ymargin; /* x and y margin are define the safe area where the mouses movement wont rotate the view */
+ unsigned char
+ apply_rotation= 1; /* if the user presses shift they can look about without movinf the direction there looking*/
+
+ if(fly->root_parent)
+ view3d_persp_mat4(rv3d, prev_view_mat);
+
+ /* the dist defines a vector that is infront of the offset
+ to rotate the view about.
+ this is no good for fly mode because we
+ want to rotate about the viewers center.
+ but to correct the dist removal we must
+ alter offset so the view doesn't jump. */
+
+ xmargin= ar->winx/20.0f;
+ ymargin= ar->winy/20.0f;
+
+ cent_orig[0]= ar->winrct.xmin + ar->winx/2;
+ cent_orig[1]= ar->winrct.ymin + ar->winy/2;
+
+ {
+
+ /* mouse offset from the center */
+ moffset[0]= fly->mval[0]- ar->winx/2;
+ moffset[1]= fly->mval[1]- ar->winy/2;
+
+ /* enforce a view margin */
+ if (moffset[0]>xmargin) moffset[0]-=xmargin;
+ else if (moffset[0] < -xmargin) moffset[0]+=xmargin;
+ else moffset[0]=0;
+
+ if (moffset[1]>ymargin) moffset[1]-=ymargin;
+ else if (moffset[1] < -ymargin) moffset[1]+=ymargin;
+ else moffset[1]=0;
+
+
+ /* scale the mouse movement by this value - scales mouse movement to the view size
+ * moffset[0]/(ar->winx-xmargin*2) - window size minus margin (same for y)
+ *
+ * the mouse moves isnt linear */
+
+ if(moffset[0]) {
+ moffset[0] /= ar->winx - (xmargin*2);
+ moffset[0] *= fabs(moffset[0]);
+ }
+
+ if(moffset[1]) {
+ moffset[1] /= ar->winy - (ymargin*2);
+ moffset[1] *= fabs(moffset[1]);
+ }
+
+ /* Should we redraw? */
+ if(fly->speed != 0.0f || moffset[0] || moffset[1] || fly->zlock || fly->xlock || dvec[0] || dvec[1] || dvec[2] ) {
+ float dvec_tmp[3];
+ double time_current, time_redraw; /*time how fast it takes for us to redraw, this is so simple scenes dont fly too fast */
+ float time_redraw_clamped;
+
+ time_current= PIL_check_seconds_timer();
+ time_redraw= (float)(time_current - fly->time_lastdraw);
+ time_redraw_clamped= MIN2(0.05f, time_redraw); /* clamt the redraw time to avoid jitter in roll correction */
+ fly->time_lastdraw= time_current;
+ /*fprintf(stderr, "%f\n", time_redraw);*/ /* 0.002 is a small redraw 0.02 is larger */
+
+ /* Scale the time to use shift to scale the speed down- just like
+ shift slows many other areas of blender down */
+ if (fly->use_precision)
+ fly->speed= fly->speed * (1.0f-time_redraw_clamped);
+
+ copy_m3_m4(mat, rv3d->viewinv);
+
+ if (fly->pan_view==TRUE) {
+ /* pan only */
+ dvec_tmp[0]= -moffset[0];
+ dvec_tmp[1]= -moffset[1];
+ dvec_tmp[2]= 0;
+
+ if (fly->use_precision) {
+ dvec_tmp[0] *= 0.1;
+ dvec_tmp[1] *= 0.1;
+ }
+
+ mul_m3_v3(mat, dvec_tmp);
+ mul_v3_fl(dvec_tmp, time_redraw*200.0 * fly->grid);
+
+ } else {
+ float roll; /* similar to the angle between the camera's up and the Z-up, but its very rough so just roll*/
+
+ /* rotate about the X axis- look up/down */
+ if (moffset[1]) {
+ upvec[0]=1;
+ upvec[1]=0;
+ upvec[2]=0;
+ mul_m3_v3(mat, upvec);
+ axis_angle_to_quat( tmp_quat, upvec, (float)moffset[1] * time_redraw * -FLY_ROTATE_FAC); /* Rotate about the relative up vec */
+ mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat);
+
+ if (fly->xlock) fly->xlock = 2; /*check for rotation*/
+ if (fly->zlock) fly->zlock = 2;
+ fly->xlock_momentum= 0.0f;
+ }
+
+ /* rotate about the Y axis- look left/right */
+ if (moffset[0]) {
+
+ /* if we're upside down invert the moffset */
+ upvec[0]=0;
+ upvec[1]=1;
+ upvec[2]=0;
+ mul_m3_v3(mat, upvec);
+
+ if(upvec[2] < 0.0f)
+ moffset[0]= -moffset[0];
+
+ /* make the lock vectors */
+ if (fly->zlock) {
+ upvec[0]=0;
+ upvec[1]=0;
+ upvec[2]=1;
+ } else {
+ upvec[0]=0;
+ upvec[1]=1;
+ upvec[2]=0;
+ mul_m3_v3(mat, upvec);
+ }
+
+ axis_angle_to_quat( tmp_quat, upvec, (float)moffset[0] * time_redraw * FLY_ROTATE_FAC); /* Rotate about the relative up vec */
+ mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat);
+
+ if (fly->xlock) fly->xlock = 2;/*check for rotation*/
+ if (fly->zlock) fly->zlock = 2;
+ }
+
+ if (fly->zlock==2) {
+ upvec[0]=1;
+ upvec[1]=0;
+ upvec[2]=0;
+ mul_m3_v3(mat, upvec);
+
+ /*make sure we have some z rolling*/
+ if (fabs(upvec[2]) > 0.00001f) {
+ roll= upvec[2]*5;
+ upvec[0]=0; /*rotate the view about this axis*/
+ upvec[1]=0;
+ upvec[2]=1;
+
+ mul_m3_v3(mat, upvec);
+ axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->zlock_momentum * FLY_ZUP_CORRECT_FAC); /* Rotate about the relative up vec */
+ mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat);
+
+ fly->zlock_momentum += FLY_ZUP_CORRECT_ACCEL;
+ } else {
+ fly->zlock=1; /* dont check until the view rotates again */
+ fly->zlock_momentum= 0.0f;
+ }
+ }
+
+ if (fly->xlock==2 && moffset[1]==0) { /*only apply xcorrect when mouse isnt applying x rot*/
+ upvec[0]=0;
+ upvec[1]=0;
+ upvec[2]=1;
+ mul_m3_v3(mat, upvec);
+ /*make sure we have some z rolling*/
+ if (fabs(upvec[2]) > 0.00001) {
+ roll= upvec[2] * -5;
+
+ upvec[0]= 1.0f; /*rotate the view about this axis*/
+ upvec[1]= 0.0f;
+ upvec[2]= 0.0f;
+
+ mul_m3_v3(mat, upvec);
+
+ axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->xlock_momentum*0.1f); /* Rotate about the relative up vec */
+ mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat);
+
+ fly->xlock_momentum += 0.05f;
+ } else {
+ fly->xlock=1; /* see above */
+ fly->xlock_momentum= 0.0f;
+ }
+ }
+
+
+ if (apply_rotation) {
+ /* Normal operation */
+ /* define dvec, view direction vector */
+ dvec_tmp[0]= dvec_tmp[1]= dvec_tmp[2]= 0.0f;
+ /* move along the current axis */
+ dvec_tmp[fly->axis]= 1.0f;
+
+ mul_m3_v3(mat, dvec_tmp);
+
+ mul_v3_fl(dvec_tmp, fly->speed * time_redraw * 0.25f);
+ }
+ }
+
+ /* impose a directional lag */
+ interp_v3_v3v3(dvec, dvec_tmp, fly->dvec_prev, (1.0f/(1.0f+(time_redraw*5.0f))));
+
+ if (rv3d->persp==RV3D_CAMOB) {
+ Object *lock_ob= fly->root_parent ? fly->root_parent : fly->v3d->camera;
+ if (lock_ob->protectflag & OB_LOCK_LOCX) dvec[0] = 0.0;
+ if (lock_ob->protectflag & OB_LOCK_LOCY) dvec[1] = 0.0;
+ if (lock_ob->protectflag & OB_LOCK_LOCZ) dvec[2] = 0.0;
+ }
+
+ add_v3_v3(rv3d->ofs, dvec);
+
+ /* todo, dynamic keys */
+#if 0
+ if (fly->zlock && fly->xlock)
+ ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB");
+ else if (fly->zlock)
+ ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB");
+ else if (fly->xlock)
+ ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB");
+ else
+ ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB");
+#endif
+
+ /* we are in camera view so apply the view ofs and quat to the view matrix and set the camera to the view */
+ if (rv3d->persp==RV3D_CAMOB) {
+ ID *id_key;
+ /* transform the parent or the camera? */
+ if(fly->root_parent) {
+ Object *ob_update;
+
+ float view_mat[4][4];
+ float prev_view_imat[4][4];
+ float diff_mat[4][4];
+ float parent_mat[4][4];
+
+ invert_m4_m4(prev_view_imat, prev_view_mat);
+ view3d_persp_mat4(rv3d, view_mat);
+ mul_m4_m4m4(diff_mat, prev_view_imat, view_mat);
+ mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat);
+ object_apply_mat4(fly->root_parent, parent_mat, TRUE);
+
+ // where_is_object(scene, fly->root_parent);
+
+ ob_update= v3d->camera->parent;
+ while(ob_update) {
+ DAG_id_flush_update(&ob_update->id, OB_RECALC_OB);
+ ob_update= ob_update->parent;
+ }
+
+ copy_m4_m4(prev_view_mat, view_mat);
+
+ id_key= &fly->root_parent->id;
+
+ }
+ else {
+ float view_mat[4][4];
+ view3d_persp_mat4(rv3d, view_mat);
+ object_apply_mat4(v3d->camera, view_mat, TRUE);
+ id_key= &v3d->camera->id;
+ }
+
+ /* record the motion */
+ if (autokeyframe_cfra_can_key(scene, id_key)) {
+ ListBase dsources = {NULL, NULL};
+
+ /* add datasource override for the camera object */
+ ANIM_relative_keyingset_add_source(&dsources, id_key, NULL, NULL);
+
+ /* insert keyframes
+ * 1) on the first frame
+ * 2) on each subsequent frame
+ * TODO: need to check in future that frame changed before doing this
+ */
+ if (fly->xlock || fly->zlock || moffset[0] || moffset[1]) {
+ KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation");
+ ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
+ }
+ if (fly->speed) {
+ KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location");
+ ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
+ }
+
+ /* free temp data */
+ BLI_freelistN(&dsources);
+ }
+ }
+ } else
+ /*were not redrawing but we need to update the time else the view will jump */
+ fly->time_lastdraw= PIL_check_seconds_timer();
+ /* end drawing */
+ copy_v3_v3(fly->dvec_prev, dvec);
+ }
+
+/* moved to flyEnd() */
+
+ return OPERATOR_FINISHED;
+}
+
+
+
+static int fly_invoke(bContext *C, wmOperator *op, wmEvent *event)
+{
+ RegionView3D *rv3d= CTX_wm_region_view3d(C);
+ FlyInfo *fly;
+
+ if(rv3d->viewlock)
+ return OPERATOR_CANCELLED;
+
+ fly= MEM_callocN(sizeof(FlyInfo), "FlyOperation");
+
+ op->customdata= fly;
+
+ if(initFlyInfo(C, fly, op, event)==FALSE) {
+ MEM_freeN(op->customdata);
+ return OPERATOR_CANCELLED;
+ }
+
+ flyEvent(fly, event);
+
+ WM_event_add_modal_handler(C, op);
+
+ return OPERATOR_RUNNING_MODAL;
+}
+
+static int fly_cancel(bContext *C, wmOperator *op)
+{
+ FlyInfo *fly = op->customdata;
+
+ fly->state = FLY_CANCEL;
+ flyEnd(C, fly);
+ op->customdata= NULL;
+
+ return OPERATOR_CANCELLED;
+}
+
+static int fly_modal(bContext *C, wmOperator *op, wmEvent *event)
+{
+ int exit_code;
+ short do_draw= FALSE;
+ FlyInfo *fly = op->customdata;
+
+ fly->redraw= 0;
+
+ flyEvent(fly, event);
+
+ if(event->type==TIMER && event->customdata == fly->timer)
+ flyApply(C, fly);
+
+ do_draw |= fly->redraw;
+
+ exit_code = flyEnd(C, fly);
+
+ if(exit_code!=OPERATOR_RUNNING_MODAL)
+ do_draw= TRUE;
+
+ if(do_draw) {
+ if(fly->rv3d->persp==RV3D_CAMOB) {
+ WM_event_add_notifier(C, NC_OBJECT|ND_TRANSFORM, fly->root_parent ? fly->root_parent : fly->v3d->camera);
+ }
+
+ ED_region_tag_redraw(CTX_wm_region(C));
+ }
+
+ return exit_code;
+}
+
+void VIEW3D_OT_fly(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name= "Fly Navigation";
+ ot->description= "Interactively fly around the scene";
+ ot->idname= "VIEW3D_OT_fly";
+
+ /* api callbacks */
+ ot->invoke= fly_invoke;
+ ot->cancel= fly_cancel;
+ ot->modal= fly_modal;
+ ot->poll= ED_operator_view3d_active;
+
+ /* flags */
+ ot->flag= OPTYPE_BLOCKING;
+}
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index e81d0b87589..92167f0f45e 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -66,7 +66,6 @@ void VIEW3D_OT_layers(struct wmOperatorType *ot);
/* view3d_ops.c */
void view3d_operatortypes(void);
-void view3d_keymap(struct wmKeyConfig *keyconf);
/* view3d_edit.c */
void VIEW3D_OT_zoom(struct wmOperatorType *ot);
@@ -91,6 +90,11 @@ void VIEW3D_OT_zoom_border(struct wmOperatorType *ot);
void VIEW3D_OT_drawtype(struct wmOperatorType *ot);
void view3d_boxview_copy(ScrArea *sa, ARegion *ar);
+void view3d_persp_mat4(struct RegionView3D *rv3d, float mat[][4]);
+
+/* view3d_fly.c */
+void view3d_keymap(struct wmKeyConfig *keyconf);
+void VIEW3D_OT_fly(struct wmOperatorType *ot);
/* drawanim.c */
void draw_motion_paths_init(View3D *v3d, struct ARegion *ar);
@@ -111,8 +115,9 @@ void drawaxes(float size, char drawtype);
void view3d_cached_text_draw_begin(void);
void view3d_cached_text_draw_add(const float co[3], const char *str, short xoffs, short flag);
void view3d_cached_text_draw_end(View3D *v3d, ARegion *ar, int depth_write, float mat[][4]);
-#define V3D_CACHE_TEXT_ZBUF 1
-#define V3D_CACHE_TEXT_WORLDSPACE 2
+#define V3D_CACHE_TEXT_ZBUF (1<<0)
+#define V3D_CACHE_TEXT_WORLDSPACE (1<<1)
+#define V3D_CACHE_TEXT_ASCII (1<<2)
/* drawarmature.c */
int draw_armature(Scene *scene, View3D *v3d, ARegion *ar, Base *base, int dt, int flag);
@@ -150,7 +155,6 @@ void VIEW3D_OT_setcameratoview(struct wmOperatorType *ot);
void VIEW3D_OT_object_as_camera(struct wmOperatorType *ot);
void VIEW3D_OT_localview(struct wmOperatorType *ot);
void VIEW3D_OT_game_start(struct wmOperatorType *ot);
-void VIEW3D_OT_fly(struct wmOperatorType *ot);
int boundbox_clip(RegionView3D *rv3d, float obmat[][4], struct BoundBox *bb);
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index e3212e8a3d1..2159aef0695 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -30,6 +30,7 @@
#include
#include
#include
+#include
#include "DNA_armature_types.h"
#include "DNA_curve_types.h"
@@ -48,6 +49,7 @@
#include "BKE_context.h"
#include "BKE_paint.h"
+#include "BKE_armature.h"
#include "BIF_gl.h"
@@ -345,18 +347,21 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2],
bPoseChannel *pchan;
float vec[3];
short sco1[2], sco2[2];
+ bArmature *arm= ob->data;
if(ob->type!=OB_ARMATURE || ob->pose==NULL) return;
-
+
for(pchan= ob->pose->chanbase.first; pchan; pchan= pchan->next) {
- mul_v3_m4v3(vec, ob->obmat, pchan->pose_head);
- project_short(vc->ar, vec, sco1);
- mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail);
- project_short(vc->ar, vec, sco2);
-
- if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) {
- if(select) pchan->bone->flag |= BONE_SELECTED;
- else pchan->bone->flag &= ~BONE_SELECTED;
+ if (PBONE_VISIBLE(arm, pchan->bone) && (pchan->bone->flag & BONE_UNSELECTABLE)==0) {
+ mul_v3_m4v3(vec, ob->obmat, pchan->pose_head);
+ project_short(vc->ar, vec, sco1);
+ mul_v3_m4v3(vec, ob->obmat, pchan->pose_tail);
+ project_short(vc->ar, vec, sco2);
+
+ if(lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) {
+ if(select) pchan->bone->flag |= BONE_SELECTED;
+ else pchan->bone->flag &= ~BONE_SELECTED;
+ }
}
}
@@ -368,11 +373,24 @@ static void do_lasso_select_pose(ViewContext *vc, Object *ob, short mcords[][2],
}
}
+static void object_deselect_all_visible(Scene *scene, View3D *v3d)
+{
+ Base *base;
-static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short moves, short select)
+ for(base= scene->base.first; base; base= base->next) {
+ if(BASE_SELECTABLE(v3d, base)) {
+ ED_base_object_select(base, BA_DESELECT);
+ }
+ }
+}
+
+static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short moves, short extend, short select)
{
Base *base;
+ if (extend == 0 && select)
+ object_deselect_all_visible(vc->scene, vc->v3d);
+
for(base= vc->scene->base.first; base; base= base->next) {
if(BASE_SELECTABLE(vc->v3d, base)) { /* use this to avoid un-needed lasso lookups */
project_short(vc->ar, base->object->obmat[3], &base->sx);
@@ -389,7 +407,7 @@ static void do_lasso_select_objects(ViewContext *vc, short mcords[][2], short mo
}
}
-void lasso_select_boundbox(rcti *rect, short mcords[][2], short moves)
+static void lasso_select_boundbox(rcti *rect, short mcords[][2], short moves)
{
short a;
@@ -440,7 +458,7 @@ static void do_lasso_select_mesh__doSelectFace(void *userData, EditFace *efa, in
}
}
-static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves, short select)
+static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves, short extend, short select)
{
struct { ViewContext vc; rcti *rect; short (*mcords)[2], moves, select, pass, done; } data;
ToolSettings *ts= vc->scene->toolsettings;
@@ -460,8 +478,11 @@ static void do_lasso_select_mesh(ViewContext *vc, short mcords[][2], short moves
data.done = 0;
data.pass = 0;
+ if (extend == 0 && select)
+ EM_deselect_all(vc->em);
+
/* workaround: init mats first, EM_mask_init_backbuf_border can change
- view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */
+ view matrix to pixel space, breaking edge select with backbuf. fixes bug [#20936] */
/* [#21018] breaks zbuf select. run below. only if bbsel fails */
/* ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d) */
@@ -589,7 +610,7 @@ static void do_lasso_select_curve__doSelect(void *userData, Nurb *UNUSED(nu), BP
}
}
-static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short moves, short select)
+static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short moves, short extend, short select)
{
struct { ViewContext *vc; short (*mcords)[2]; short moves; short select; } data;
@@ -599,6 +620,9 @@ static void do_lasso_select_curve(ViewContext *vc, short mcords[][2], short move
data.moves = moves;
data.select = select;
+ if (extend == 0 && select)
+ CU_deselect_all(vc->obedit);
+
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
nurbs_foreachScreenVert(vc, do_lasso_select_curve__doSelect, &data);
}
@@ -611,7 +635,7 @@ static void do_lasso_select_lattice__doSelect(void *userData, BPoint *bp, int x,
bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT);
}
}
-static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short moves, short select)
+static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short moves, short extend, short select)
{
struct { short (*mcords)[2]; short moves; short select; } data;
@@ -620,45 +644,52 @@ static void do_lasso_select_lattice(ViewContext *vc, short mcords[][2], short mo
data.moves = moves;
data.select = select;
+ if (extend == 0 && select)
+ ED_setflagsLatt(vc->obedit, 0);
+
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
lattice_foreachScreenVert(vc, do_lasso_select_lattice__doSelect, &data);
}
-static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short moves, short select)
+static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short moves, short extend, short select)
{
bArmature *arm= vc->obedit->data;
EditBone *ebone;
float vec[3];
short sco1[2], sco2[2], didpoint;
int change= FALSE;
-
+
+ if (extend==0 && select)
+ ED_armature_deselect_all_visible(vc->obedit);
+
/* set editdata in vc */
for (ebone= arm->edbo->first; ebone; ebone=ebone->next) {
-
- mul_v3_m4v3(vec, vc->obedit->obmat, ebone->head);
- project_short(vc->ar, vec, sco1);
- mul_v3_m4v3(vec, vc->obedit->obmat, ebone->tail);
- project_short(vc->ar, vec, sco2);
-
- didpoint= 0;
- if(lasso_inside(mcords, moves, sco1[0], sco1[1])) {
- if(select) ebone->flag |= BONE_ROOTSEL;
- else ebone->flag &= ~BONE_ROOTSEL;
- didpoint= 1;
- change= TRUE;
- }
- if(lasso_inside(mcords, moves, sco2[0], sco2[1])) {
- if(select) ebone->flag |= BONE_TIPSEL;
- else ebone->flag &= ~BONE_TIPSEL;
- didpoint= 1;
- change= TRUE;
- }
- /* if one of points selected, we skip the bone itself */
- if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) {
- if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED;
- else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
- change= TRUE;
+ if (EBONE_VISIBLE(arm, ebone) && (ebone->flag & BONE_UNSELECTABLE)==0) {
+ mul_v3_m4v3(vec, vc->obedit->obmat, ebone->head);
+ project_short(vc->ar, vec, sco1);
+ mul_v3_m4v3(vec, vc->obedit->obmat, ebone->tail);
+ project_short(vc->ar, vec, sco2);
+
+ didpoint= 0;
+ if(lasso_inside(mcords, moves, sco1[0], sco1[1])) {
+ if(select) ebone->flag |= BONE_ROOTSEL;
+ else ebone->flag &= ~BONE_ROOTSEL;
+ didpoint= 1;
+ change= TRUE;
+ }
+ if(lasso_inside(mcords, moves, sco2[0], sco2[1])) {
+ if(select) ebone->flag |= BONE_TIPSEL;
+ else ebone->flag &= ~BONE_TIPSEL;
+ didpoint= 1;
+ change= TRUE;
+ }
+ /* if one of points selected, we skip the bone itself */
+ if(didpoint==0 && lasso_inside_edge(mcords, moves, sco1[0], sco1[1], sco2[0], sco2[1])) {
+ if(select) ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED;
+ else ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
+ change= TRUE;
+ }
}
}
@@ -669,25 +700,56 @@ static void do_lasso_select_armature(ViewContext *vc, short mcords[][2], short m
}
}
-static void do_lasso_select_facemode(ViewContext *vc, short mcords[][2], short moves, short select)
+
+
+
+static void do_lasso_select_meta(ViewContext *vc, short mcords[][2], short moves, short extend, short select)
+{
+ MetaBall *mb = (MetaBall*)vc->obedit->data;
+ MetaElem *ml;
+ float vec[3];
+ short sco[2];
+
+ if (extend == 0 && select) {
+ for(ml= mb->editelems->first; ml; ml= ml->next) {
+ ml->flag &= ~SELECT;
+ }
+ }
+
+ for(ml= mb->editelems->first; ml; ml= ml->next) {
+
+ mul_v3_m4v3(vec, vc->obedit->obmat, &ml->x);
+ project_short(vc->ar, vec, sco);
+
+ if(lasso_inside(mcords, moves, sco[0], sco[1])) {
+ if(select) ml->flag |= SELECT;
+ else ml->flag &= ~SELECT;
+ }
+ }
+}
+
+static void do_lasso_select_paintface(ViewContext *vc, short mcords[][2], short moves, short extend, short select)
{
Object *ob= vc->obact;
Mesh *me= ob?ob->data:NULL;
rcti rect;
-
- if(me==NULL || me->mtface==NULL) return;
- if(me->totface==0) return;
-
+
+ if(me==NULL || me->totface==0)
+ return;
+
+ if(extend==0 && select)
+ paintface_deselect_all_visible(ob, SEL_DESELECT, FALSE); /* flush selection at the end */
+
em_vertoffs= me->totface+1; /* max index array */
-
+
lasso_select_boundbox(&rect, mcords, moves);
EM_mask_init_backbuf_border(vc, mcords, moves, rect.xmin, rect.ymin, rect.xmax, rect.ymax);
EM_backbuf_checkAndSelectTFaces(me, select);
-
+
EM_free_backbuf();
-
-// XXX object_tface_flags_changed(ob, 0);
+
+ paintface_flush_flags(ob);
}
#if 0
@@ -721,32 +783,44 @@ static void do_lasso_select_node(short mcords[][2], short moves, short select)
}
#endif
-void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short moves, short select)
+static void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short moves, short extend, short select)
{
Object *ob = CTX_data_active_object(C);
if(vc->obedit==NULL) { /* Object Mode */
if(paint_facesel_test(ob))
- do_lasso_select_facemode(vc, mcords, moves, select);
+ do_lasso_select_paintface(vc, mcords, moves, extend, select);
else if(ob && ob->mode & (OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT))
;
else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT)
- PE_lasso_select(C, mcords, moves, select);
+ PE_lasso_select(C, mcords, moves, extend, select);
else {
- do_lasso_select_objects(vc, mcords, moves, select);
+ do_lasso_select_objects(vc, mcords, moves, extend, select);
WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, vc->scene);
}
}
else { /* Edit Mode */
- if(vc->obedit->type==OB_MESH)
- do_lasso_select_mesh(vc, mcords, moves, select);
- else if(vc->obedit->type==OB_CURVE || vc->obedit->type==OB_SURF)
- do_lasso_select_curve(vc, mcords, moves, select);
- else if(vc->obedit->type==OB_LATTICE)
- do_lasso_select_lattice(vc, mcords, moves, select);
- else if(vc->obedit->type==OB_ARMATURE)
- do_lasso_select_armature(vc, mcords, moves, select);
-
+ switch(vc->obedit->type) {
+ case OB_MESH:
+ do_lasso_select_mesh(vc, mcords, moves, extend, select);
+ break;
+ case OB_CURVE:
+ case OB_SURF:
+ do_lasso_select_curve(vc, mcords, moves, extend, select);
+ break;
+ case OB_LATTICE:
+ do_lasso_select_lattice(vc, mcords, moves, extend, select);
+ break;
+ case OB_ARMATURE:
+ do_lasso_select_armature(vc, mcords, moves, extend, select);
+ break;
+ case OB_MBALL:
+ do_lasso_select_meta(vc, mcords, moves, extend, select);
+ break;
+ default:
+ assert(!"lasso select on incorrect object type");
+ }
+
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc->obedit->data);
}
}
@@ -757,7 +831,7 @@ void view3d_lasso_select(bContext *C, ViewContext *vc, short mcords[][2], short
static int view3d_lasso_select_exec(bContext *C, wmOperator *op)
{
ViewContext vc;
- int select, i= 0;
+ int i= 0;
short mcords[1024][2];
RNA_BEGIN(op->ptr, itemptr, "path") {
@@ -772,13 +846,15 @@ static int view3d_lasso_select_exec(bContext *C, wmOperator *op)
RNA_END;
if(i>1) {
+ short extend, select;
view3d_operator_needs_opengl(C);
/* setup view context for argument to callbacks */
view3d_set_viewcontext(C, &vc);
+ extend= RNA_boolean_get(op->ptr, "extend");
select= !RNA_boolean_get(op->ptr, "deselect");
- view3d_lasso_select(C, &vc, mcords, i, select);
+ view3d_lasso_select(C, &vc, mcords, i, extend, select);
return OPERATOR_FINISHED;
}
@@ -801,6 +877,7 @@ void VIEW3D_OT_select_lasso(wmOperatorType *ot)
RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", "");
RNA_def_boolean(ot->srna, "deselect", 0, "Deselect", "Deselect rather than select items.");
+ RNA_def_boolean(ot->srna, "extend", 1, "Extend", "Extend selection instead of deselecting everything first.");
}
@@ -1319,7 +1396,7 @@ static void do_nurbs_box_select__doSelect(void *userData, Nurb *UNUSED(nu), BPoi
}
}
}
-static void do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend)
+static int do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int extend)
{
struct { ViewContext *vc; rcti *rect; int select; } data;
@@ -1327,12 +1404,13 @@ static void do_nurbs_box_select(ViewContext *vc, rcti *rect, int select, int ext
data.rect = rect;
data.select = select;
- if (extend == 0 && select) {
+ if (extend == 0 && select)
CU_deselect_all(vc->obedit);
- }
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
nurbs_foreachScreenVert(vc, do_nurbs_box_select__doSelect, &data);
+
+ return OPERATOR_FINISHED;
}
static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, int y)
@@ -1343,7 +1421,7 @@ static void do_lattice_box_select__doSelect(void *userData, BPoint *bp, int x, i
bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT);
}
}
-static void do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend)
+static int do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int extend)
{
struct { ViewContext vc; rcti *rect; int select, pass, done; } data;
@@ -1351,12 +1429,13 @@ static void do_lattice_box_select(ViewContext *vc, rcti *rect, int select, int e
data.rect = rect;
data.select = select;
- if (extend == 0 && select) {
+ if (extend == 0 && select)
ED_setflagsLatt(vc->obedit, 0);
- }
ED_view3d_init_mats_rv3d(vc->obedit, vc->rv3d); /* for foreach's screen/vert projection */
lattice_foreachScreenVert(vc, do_lattice_box_select__doSelect, &data);
+
+ return OPERATOR_FINISHED;
}
static void do_mesh_box_select__doSelectVert(void *userData, EditVert *eve, int x, int y, int UNUSED(index))
@@ -1392,7 +1471,7 @@ static void do_mesh_box_select__doSelectFace(void *userData, EditFace *efa, int
EM_select_face_fgon(data->vc.em, efa, data->select);
}
}
-static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend)
+static int do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int extend)
{
struct { ViewContext vc; rcti *rect; short select, pass, done; } data;
ToolSettings *ts= vc->scene->toolsettings;
@@ -1405,9 +1484,7 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte
data.done = 0;
if (extend == 0 && select)
- {
EM_deselect_all(vc->em);
- }
/* workaround: init mats first, EM_mask_init_backbuf_border can change
view matrix to pixel space, breaking edge select with backbuf. fixes bug #20936 */
@@ -1451,261 +1528,280 @@ static void do_mesh_box_select(ViewContext *vc, rcti *rect, int select, int exte
EM_free_backbuf();
EM_selectmode_flush(vc->em);
+
+ return OPERATOR_FINISHED;
+}
+
+static int do_meta_box_select(ViewContext *vc, rcti *rect, int select, int extend)
+{
+ MetaBall *mb = (MetaBall*)vc->obedit->data;
+ MetaElem *ml;
+ int a;
+
+ unsigned int buffer[4*MAXPICKBUF];
+ short hits;
+
+ hits= view3d_opengl_select(vc, buffer, MAXPICKBUF, rect);
+
+ if (extend == 0 && select) {
+ for(ml= mb->editelems->first; ml; ml= ml->next) {
+ ml->flag &= ~SELECT;
+ }
+ }
+
+ for(ml= mb->editelems->first; ml; ml= ml->next) {
+ for(a=0; aselcol1==buffer[ (4 * a) + 3 ]) {
+ ml->flag |= MB_SCALE_RAD;
+ if(select) ml->flag |= SELECT;
+ else ml->flag &= ~SELECT;
+ break;
+ }
+ if(ml->selcol2==buffer[ (4 * a) + 3 ]) {
+ ml->flag &= ~MB_SCALE_RAD;
+ if(select) ml->flag |= SELECT;
+ else ml->flag &= ~SELECT;
+ break;
+ }
+ }
+ }
+
+ return OPERATOR_FINISHED;
+}
+
+static int do_armature_box_select(ViewContext *vc, rcti *rect, short select, short extend)
+{
+ bArmature *arm= vc->obedit->data;
+ EditBone *ebone;
+ int a;
+
+ unsigned int buffer[4*MAXPICKBUF];
+ short hits;
+
+ hits= view3d_opengl_select(vc, buffer, MAXPICKBUF, rect);
+
+ /* clear flag we use to detect point was affected */
+ for(ebone= arm->edbo->first; ebone; ebone= ebone->next)
+ ebone->flag &= ~BONE_DONE;
+
+ if (extend==0 && select)
+ ED_armature_deselect_all_visible(vc->obedit);
+
+ /* first we only check points inside the border */
+ for (a=0; aedbo, index & ~(BONESEL_ANY));
+ if ((ebone->flag & BONE_UNSELECTABLE)==0) {
+ if (index & BONESEL_TIP) {
+ ebone->flag |= BONE_DONE;
+ if (select) ebone->flag |= BONE_TIPSEL;
+ else ebone->flag &= ~BONE_TIPSEL;
+ }
+
+ if (index & BONESEL_ROOT) {
+ ebone->flag |= BONE_DONE;
+ if (select) ebone->flag |= BONE_ROOTSEL;
+ else ebone->flag &= ~BONE_ROOTSEL;
+ }
+ }
+ }
+ }
+
+ /* now we have to flush tag from parents... */
+ for(ebone= arm->edbo->first; ebone; ebone= ebone->next) {
+ if(ebone->parent && (ebone->flag & BONE_CONNECTED)) {
+ if(ebone->parent->flag & BONE_DONE)
+ ebone->flag |= BONE_DONE;
+ }
+ }
+
+ /* only select/deselect entire bones when no points where in the rect */
+ for (a=0; aedbo, index & ~(BONESEL_ANY));
+ if (index & BONESEL_BONE) {
+ if ((ebone->flag & BONE_UNSELECTABLE)==0) {
+ if(!(ebone->flag & BONE_DONE)) {
+ if (select)
+ ebone->flag |= (BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED);
+ else
+ ebone->flag &= ~(BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED);
+ }
+ }
+ }
+ }
+ }
+
+ ED_armature_sync_selection(arm->edbo);
+
+ return OPERATOR_CANCELLED;
+}
+
+static int do_object_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, int select, int extend)
+{
+ Bone *bone;
+ Object *ob= vc->obact;
+ unsigned int *vbuffer=NULL; /* selection buffer */
+ unsigned int *col; /* color in buffer */
+ int bone_only;
+ int bone_selected=0;
+ int totobj= MAXPICKBUF; // XXX solve later
+ short hits;
+
+ if((ob) && (ob->mode & OB_MODE_POSE))
+ bone_only= 1;
+ else
+ bone_only= 0;
+
+ if (extend == 0 && select) {
+ if (bone_only) {
+ CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) {
+ if ((pchan->bone->flag & BONE_UNSELECTABLE)==0) {
+ pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
+ }
+ }
+ CTX_DATA_END;
+ } else {
+ object_deselect_all_visible(vc->scene, vc->v3d);
+ }
+ }
+
+ /* selection buffer now has bones potentially too, so we add MAXPICKBUF */
+ vbuffer = MEM_mallocN(4 * (totobj+MAXPICKBUF) * sizeof(unsigned int), "selection buffer");
+ hits= view3d_opengl_select(vc, vbuffer, 4*(totobj+MAXPICKBUF), rect);
+ /*
+ LOGIC NOTES (theeth):
+ The buffer and ListBase have the same relative order, which makes the selection
+ very simple. Loop through both data sets at the same time, if the color
+ is the same as the object, we have a hit and can move to the next color
+ and object pair, if not, just move to the next object,
+ keeping the same color until we have a hit.
+
+ The buffer order is defined by OGL standard, hopefully no stupid GFX card
+ does it incorrectly.
+ */
+
+ if (hits>0) { /* no need to loop if there's no hit */
+ Base *base;
+ col = vbuffer + 3;
+
+ for(base= vc->scene->base.first; base && hits; base= base->next) {
+ if(BASE_SELECTABLE(vc->v3d, base)) {
+ while (base->selcol == (*col & 0xFFFF)) { /* we got an object */
+
+ if(*col & 0xFFFF0000) { /* we got a bone */
+ bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY));
+ if(bone) {
+ if(select) {
+ bone->flag |= BONE_SELECTED;
+ bone_selected=1;
+// XXX select_actionchannel_by_name(base->object->action, bone->name, 1);
+ }
+ else {
+ bArmature *arm= base->object->data;
+ bone->flag &= ~BONE_SELECTED;
+// XXX select_actionchannel_by_name(base->object->action, bone->name, 0);
+ if(arm->act_bone==bone)
+ arm->act_bone= NULL;
+
+ }
+ }
+ }
+ else if(!bone_only) {
+ if (select)
+ ED_base_object_select(base, BA_SELECT);
+ else
+ ED_base_object_select(base, BA_DESELECT);
+ }
+
+ col+=4; /* next color */
+ hits--;
+ if(hits==0) break;
+ }
+ }
+
+ if (bone_selected) {
+ WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, base->object);
+ }
+ }
+
+ WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, vc->scene);
+
+ }
+ MEM_freeN(vbuffer);
+
+ return hits > 0 ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
}
static int view3d_borderselect_exec(bContext *C, wmOperator *op)
{
ViewContext vc;
- Scene *scene= CTX_data_scene(C);
- ScrArea *sa= CTX_wm_area(C);
- View3D *v3d= sa->spacedata.first;
- Object *obedit= CTX_data_edit_object(C);
- Object *obact= CTX_data_active_object(C);
rcti rect;
- Base *base;
- MetaElem *ml;
- unsigned int buffer[4*MAXPICKBUF];
- int a, index;
- int extend;
- short hits, selecting;
+ short extend;
+ short select;
+
+ int ret= OPERATOR_CANCELLED;
view3d_operator_needs_opengl(C);
-
+
/* setup view context for argument to callbacks */
view3d_set_viewcontext(C, &vc);
- selecting= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT);
+ select= (RNA_int_get(op->ptr, "gesture_mode")==GESTURE_MODAL_SELECT);
rect.xmin= RNA_int_get(op->ptr, "xmin");
rect.ymin= RNA_int_get(op->ptr, "ymin");
rect.xmax= RNA_int_get(op->ptr, "xmax");
rect.ymax= RNA_int_get(op->ptr, "ymax");
extend = RNA_boolean_get(op->ptr, "extend");
- if(obedit==NULL && (paint_facesel_test(OBACT))) {
- face_borderselect(C, obact, &rect, selecting, extend);
- return OPERATOR_FINISHED;
- }
- else if(obedit==NULL && (obact && obact->mode & OB_MODE_PARTICLE_EDIT)) {
- return PE_border_select(C, &rect, selecting, extend);
- }
- else if(obedit==NULL && (obact && obact->mode & OB_MODE_SCULPT))
- return OPERATOR_CANCELLED;
-
- if(obedit) {
- if(obedit->type==OB_MESH) {
- Mesh *me= obedit->data;
- vc.em= me->edit_mesh;
- do_mesh_box_select(&vc, &rect, selecting, extend);
+ if(vc.obedit) {
+ switch(vc.obedit->type) {
+ case OB_MESH:
+ vc.em= ((Mesh *)vc.obedit->data)->edit_mesh;
+ ret= do_mesh_box_select(&vc, &rect, select, extend);
// if (EM_texFaceCheck())
- WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
-
- }
- else if(ELEM(obedit->type, OB_CURVE, OB_SURF)) {
- do_nurbs_box_select(&vc, &rect, selecting, extend);
- }
- else if(obedit->type==OB_MBALL) {
- MetaBall *mb = (MetaBall*)obedit->data;
- hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect);
-
- if (extend == 0 && selecting) {
- ml= mb->editelems->first;
-
- while(ml) {
- ml->flag &= ~SELECT;
- ml= ml->next;
- }
+ if(ret & OPERATOR_FINISHED) {
+ WM_event_add_notifier(C, NC_GEOM|ND_SELECT, vc.obedit->data);
}
-
- ml= mb->editelems->first;
-
- while(ml) {
- for(a=0; aselcol1==buffer[ (4 * a) + 3 ]) {
- ml->flag |= MB_SCALE_RAD;
- if(selecting) ml->flag |= SELECT;
- else ml->flag &= ~SELECT;
- break;
- }
- if(ml->selcol2==buffer[ (4 * a) + 3 ]) {
- ml->flag &= ~MB_SCALE_RAD;
- if(selecting) ml->flag |= SELECT;
- else ml->flag &= ~SELECT;
- break;
- }
- }
- ml= ml->next;
+ break;
+ case OB_CURVE:
+ case OB_SURF:
+ ret= do_nurbs_box_select(&vc, &rect, select, extend);
+ break;
+ case OB_MBALL:
+ ret= do_meta_box_select(&vc, &rect, select, extend);
+ break;
+ case OB_ARMATURE:
+ ret= do_armature_box_select(&vc, &rect, select, extend);
+ if(ret & OPERATOR_FINISHED) {
+ WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit);
}
- }
- else if(obedit->type==OB_ARMATURE) {
- bArmature *arm= obedit->data;
- EditBone *ebone;
-
- /* clear flag we use to detect point was affected */
- for(ebone= arm->edbo->first; ebone; ebone= ebone->next)
- ebone->flag &= ~BONE_DONE;
-
- if (extend==0 && selecting) {
- /* Set the flags */
- CTX_DATA_BEGIN(C, EditBone *, ebone, visible_bones) {
- /* ignore bone if selection can't change */
- if ((ebone->flag & BONE_UNSELECTABLE) == 0) {
- ebone->flag &= ~(BONE_SELECTED | BONE_TIPSEL | BONE_ROOTSEL);
- }
- }
- CTX_DATA_END;
- }
-
- hits= view3d_opengl_select(&vc, buffer, MAXPICKBUF, &rect);
-
- /* first we only check points inside the border */
- for (a=0; aedbo, index & ~(BONESEL_ANY));
- if (index & BONESEL_TIP) {
- ebone->flag |= BONE_DONE;
- if (selecting) ebone->flag |= BONE_TIPSEL;
- else ebone->flag &= ~BONE_TIPSEL;
- }
-
- if (index & BONESEL_ROOT) {
- ebone->flag |= BONE_DONE;
- if (selecting) ebone->flag |= BONE_ROOTSEL;
- else ebone->flag &= ~BONE_ROOTSEL;
- }
- }
- }
-
- /* now we have to flush tag from parents... */
- for(ebone= arm->edbo->first; ebone; ebone= ebone->next) {
- if(ebone->parent && (ebone->flag & BONE_CONNECTED)) {
- if(ebone->parent->flag & BONE_DONE)
- ebone->flag |= BONE_DONE;
- }
- }
-
- /* only select/deselect entire bones when no points where in the rect */
- for (a=0; aedbo, index & ~(BONESEL_ANY));
- if (index & BONESEL_BONE) {
- if(!(ebone->flag & BONE_DONE)) {
- if (selecting)
- ebone->flag |= (BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED);
- else
- ebone->flag &= ~(BONE_ROOTSEL|BONE_TIPSEL|BONE_SELECTED);
- }
- }
- }
- }
-
- ED_armature_sync_selection(arm->edbo);
- WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, vc.obedit);
- }
- else if(obedit->type==OB_LATTICE) {
- do_lattice_box_select(&vc, &rect, selecting, extend);
+ break;
+ case OB_LATTICE:
+ ret= do_lattice_box_select(&vc, &rect, select, extend);
+ break;
+ default:
+ assert(!"border select on incorrect object type");
}
}
else { /* no editmode, unified for bones and objects */
- Bone *bone;
- Object *ob= OBACT;
- unsigned int *vbuffer=NULL; /* selection buffer */
- unsigned int *col; /* color in buffer */
- int bone_only;
- int bone_selected=0;
- int totobj= MAXPICKBUF; // XXX solve later
-
- if((ob) && (ob->mode & OB_MODE_POSE))
- bone_only= 1;
- else
- bone_only= 0;
-
- if (extend == 0 && selecting) {
- base= FIRSTBASE;
-
- if (bone_only) {
- CTX_DATA_BEGIN(C, bPoseChannel *, pchan, visible_pose_bones) {
- pchan->bone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
- }
- CTX_DATA_END;
- } else {
- while(base) {
- Base *next = base->next;
- if(BASE_SELECTABLE(v3d, base)) {
- ED_base_object_select(base, BA_DESELECT);
- }
- base= next;
- }
- }
+ if(vc.obact && vc.obact->mode & OB_MODE_SCULPT) {
+ /* pass */
}
-
- /* selection buffer now has bones potentially too, so we add MAXPICKBUF */
- vbuffer = MEM_mallocN(4 * (totobj+MAXPICKBUF) * sizeof(unsigned int), "selection buffer");
- hits= view3d_opengl_select(&vc, vbuffer, 4*(totobj+MAXPICKBUF), &rect);
- /*
- LOGIC NOTES (theeth):
- The buffer and ListBase have the same relative order, which makes the selection
- very simple. Loop through both data sets at the same time, if the color
- is the same as the object, we have a hit and can move to the next color
- and object pair, if not, just move to the next object,
- keeping the same color until we have a hit.
-
- The buffer order is defined by OGL standard, hopefully no stupid GFX card
- does it incorrectly.
- */
-
- if (hits>0) { /* no need to loop if there's no hit */
- base= FIRSTBASE;
- col = vbuffer + 3;
-
- while(base && hits) {
- Base *next = base->next;
- if(BASE_SELECTABLE(v3d, base)) {
- while (base->selcol == (*col & 0xFFFF)) { /* we got an object */
-
- if(*col & 0xFFFF0000) { /* we got a bone */
- bone = get_indexed_bone(base->object, *col & ~(BONESEL_ANY));
- if(bone) {
- if(selecting) {
- bone->flag |= BONE_SELECTED;
- bone_selected=1;
-// XXX select_actionchannel_by_name(base->object->action, bone->name, 1);
- }
- else {
- bArmature *arm= base->object->data;
- bone->flag &= ~BONE_SELECTED;
-// XXX select_actionchannel_by_name(base->object->action, bone->name, 0);
- if(arm->act_bone==bone)
- arm->act_bone= NULL;
-
- }
- }
- }
- else if(!bone_only) {
- if (selecting)
- ED_base_object_select(base, BA_SELECT);
- else
- ED_base_object_select(base, BA_DESELECT);
- }
-
- col+=4; /* next color */
- hits--;
- if(hits==0) break;
- }
- }
-
- if (bone_selected) WM_event_add_notifier(C, NC_OBJECT|ND_BONE_SELECT, base->object);
-
- base= next;
- }
-
- WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, scene);
-
+ else if(vc.obact && paint_facesel_test(vc.obact)) {
+ ret= do_paintface_box_select(&vc, &rect, select, extend);
+ }
+ else if(vc.obact && vc.obact->mode & OB_MODE_PARTICLE_EDIT) {
+ ret= PE_border_select(C, &rect, select, extend);
+ }
+ else { /* object mode with none active */
+ ret= do_object_pose_box_select(C, &vc, &rect, select, extend);
}
- MEM_freeN(vbuffer);
}
- return OPERATOR_FINISHED;
+
+ return ret;
}
@@ -1764,7 +1860,7 @@ static int view3d_select_invoke(bContext *C, wmOperator *op, wmEvent *event)
else if(obact && obact->mode & OB_MODE_PARTICLE_EDIT)
return PE_mouse_particles(C, event->mval, extend);
else if(obact && paint_facesel_test(obact))
- retval = face_select(C, obact, event->mval, extend);
+ retval = paintface_mouse_select(C, obact, event->mval, extend);
else
retval = mouse_select(C, event->mval, extend, center, enumerate);
@@ -1829,7 +1925,7 @@ static void mesh_circle_doSelectFace(void *userData, EditFace *efa, int x, int y
}
}
-static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, float rad)
+static void mesh_circle_select(ViewContext *vc, int select, short *mval, float rad)
{
ToolSettings *ts= vc->scene->toolsettings;
int bbsel;
@@ -1841,14 +1937,14 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa
vc->em= ((Mesh *)vc->obedit->data)->edit_mesh;
data.vc = vc;
- data.select = selecting;
+ data.select = select;
data.mval[0] = mval[0];
data.mval[1] = mval[1];
data.radius = rad;
if(ts->selectmode & SCE_SELECT_VERTEX) {
if(bbsel) {
- EM_backbuf_checkAndSelectVerts(vc->em, selecting==LEFTMOUSE);
+ EM_backbuf_checkAndSelectVerts(vc->em, select==LEFTMOUSE);
} else {
mesh_foreachScreenVert(vc, mesh_circle_doSelectVert, &data, 1);
}
@@ -1856,7 +1952,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa
if(ts->selectmode & SCE_SELECT_EDGE) {
if (bbsel) {
- EM_backbuf_checkAndSelectEdges(vc->em, selecting==LEFTMOUSE);
+ EM_backbuf_checkAndSelectEdges(vc->em, select==LEFTMOUSE);
} else {
mesh_foreachScreenEdge(vc, mesh_circle_doSelectEdge, &data, 0);
}
@@ -1864,7 +1960,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa
if(ts->selectmode & SCE_SELECT_FACE) {
if(bbsel) {
- EM_backbuf_checkAndSelectFaces(vc->em, selecting==LEFTMOUSE);
+ EM_backbuf_checkAndSelectFaces(vc->em, select==LEFTMOUSE);
} else {
mesh_foreachScreenFace(vc, mesh_circle_doSelectFace, &data);
}
@@ -1874,7 +1970,7 @@ static void mesh_circle_select(ViewContext *vc, int selecting, short *mval, floa
EM_selectmode_flush(vc->em);
}
-static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *mval, float rad)
+static void paint_facesel_circle_select(ViewContext *vc, int select, short *mval, float rad)
{
Object *ob= vc->obact;
Mesh *me = ob?ob->data:NULL;
@@ -1884,10 +1980,8 @@ static void paint_facesel_circle_select(ViewContext *vc, int selecting, short *m
em_vertoffs= me->totface+1; /* max index array */
bbsel= EM_init_backbuf_circle(vc, mval[0], mval[1], (short)(rad+1.0));
- EM_backbuf_checkAndSelectTFaces(me, selecting==LEFTMOUSE);
+ EM_backbuf_checkAndSelectTFaces(me, select==LEFTMOUSE);
EM_free_backbuf();
-
-// XXX object_tface_flags_changed(OBACT, 0);
}
}
@@ -1923,13 +2017,13 @@ static void nurbscurve_circle_doSelect(void *userData, Nurb *UNUSED(nu), BPoint
}
}
}
-static void nurbscurve_circle_select(ViewContext *vc, int selecting, short *mval, float rad)
+static void nurbscurve_circle_select(ViewContext *vc, int select, short *mval, float rad)
{
struct {ViewContext *vc; short select, mval[2]; float radius; } data;
/* set vc-> edit data */
- data.select = selecting;
+ data.select = select;
data.mval[0] = mval[0];
data.mval[1] = mval[1];
data.radius = rad;
@@ -1950,13 +2044,13 @@ static void latticecurve_circle_doSelect(void *userData, BPoint *bp, int x, int
bp->f1 = data->select?(bp->f1|SELECT):(bp->f1&~SELECT);
}
}
-static void lattice_circle_select(ViewContext *vc, int selecting, short *mval, float rad)
+static void lattice_circle_select(ViewContext *vc, int select, short *mval, float rad)
{
struct {ViewContext *vc; short select, mval[2]; float radius; } data;
/* set vc-> edit data */
- data.select = selecting;
+ data.select = select;
data.mval[0] = mval[0];
data.mval[1] = mval[1];
data.radius = rad;
@@ -1989,7 +2083,7 @@ static short armature_circle_doSelectJoint(void *userData, EditBone *ebone, int
}
return 0;
}
-static void armature_circle_select(ViewContext *vc, int selecting, short *mval, float rad)
+static void armature_circle_select(ViewContext *vc, int select, short *mval, float rad)
{
struct {ViewContext *vc; short select, mval[2]; float radius; } data;
bArmature *arm= vc->obedit->data;
@@ -1997,7 +2091,7 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval,
int change= FALSE;
/* set vc->edit data */
- data.select = selecting;
+ data.select = select;
data.mval[0] = mval[0];
data.mval[1] = mval[1];
data.radius = rad;
@@ -2029,7 +2123,7 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval,
/* only if the endpoints didn't get selected, deal with the middle of the bone too */
// XXX should we just do this always?
if ( (didpoint==0) && edge_inside_circle(mval[0], mval[1], rad, sco1[0], sco1[1], sco2[0], sco2[1]) ) {
- if (selecting)
+ if (select)
ebone->flag |= BONE_TIPSEL|BONE_ROOTSEL|BONE_SELECTED;
else
ebone->flag &= ~(BONE_SELECTED|BONE_TIPSEL|BONE_ROOTSEL);
@@ -2045,21 +2139,21 @@ static void armature_circle_select(ViewContext *vc, int selecting, short *mval,
/** Callbacks for circle selection in Editmode */
-static void obedit_circle_select(ViewContext *vc, short selecting, short *mval, float rad)
+static void obedit_circle_select(ViewContext *vc, short select, short *mval, float rad)
{
switch(vc->obedit->type) {
case OB_MESH:
- mesh_circle_select(vc, selecting, mval, rad);
+ mesh_circle_select(vc, select, mval, rad);
break;
case OB_CURVE:
case OB_SURF:
- nurbscurve_circle_select(vc, selecting, mval, rad);
+ nurbscurve_circle_select(vc, select, mval, rad);
break;
case OB_LATTICE:
- lattice_circle_select(vc, selecting, mval, rad);
+ lattice_circle_select(vc, select, mval, rad);
break;
case OB_ARMATURE:
- armature_circle_select(vc, selecting, mval, rad);
+ armature_circle_select(vc, select, mval, rad);
break;
default:
return;
@@ -2078,9 +2172,9 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
int y= RNA_int_get(op->ptr, "y");
int radius= RNA_int_get(op->ptr, "radius");
int gesture_mode= RNA_int_get(op->ptr, "gesture_mode");
- int selecting;
+ int select;
- selecting= (gesture_mode==GESTURE_MODAL_SELECT);
+ select= (gesture_mode==GESTURE_MODAL_SELECT);
if(CTX_data_edit_object(C) || paint_facesel_test(obact) ||
(obact && obact->mode & OB_MODE_PARTICLE_EDIT)) {
@@ -2094,22 +2188,22 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
mval[1]= y;
if(CTX_data_edit_object(C)) {
- obedit_circle_select(&vc, selecting, mval, (float)radius);
+ obedit_circle_select(&vc, select, mval, (float)radius);
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data);
}
else if(paint_facesel_test(obact)) {
- paint_facesel_circle_select(&vc, selecting, mval, (float)radius);
+ paint_facesel_circle_select(&vc, select, mval, (float)radius);
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obact->data);
}
else
- return PE_circle_select(C, selecting, mval, (float)radius);
+ return PE_circle_select(C, select, mval, (float)radius);
}
else if(obact && obact->mode & OB_MODE_SCULPT) {
return OPERATOR_CANCELLED;
}
else {
Base *base;
- selecting= selecting?BA_SELECT:BA_DESELECT;
+ select= select?BA_SELECT:BA_DESELECT;
for(base= FIRSTBASE; base; base= base->next) {
if(BASE_SELECTABLE(v3d, base)) {
project_short(ar, base->object->obmat[3], &base->sx);
@@ -2117,7 +2211,7 @@ static int view3d_circle_select_exec(bContext *C, wmOperator *op)
int dx= base->sx-x;
int dy= base->sy-y;
if( dx*dx + dy*dy < radius*radius)
- ED_base_object_select(base, selecting);
+ ED_base_object_select(base, select);
}
}
}
diff --git a/source/blender/editors/space_view3d/view3d_view.c b/source/blender/editors/space_view3d/view3d_view.c
index 15e04f31f2f..1be7816f5ea 100644
--- a/source/blender/editors/space_view3d/view3d_view.c
+++ b/source/blender/editors/space_view3d/view3d_view.c
@@ -26,12 +26,6 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include
-#include
-#include
-#include
-
-#include "DNA_anim_types.h"
#include "DNA_camera_types.h"
#include "DNA_lamp_types.h"
#include "DNA_scene_types.h"
@@ -40,9 +34,7 @@
#include "MEM_guardedalloc.h"
#include "BLI_math.h"
-#include "BLI_blenlib.h"
-#include "BLI_editVert.h"
-#include "BLI_rand.h"
+#include "BLI_rect.h"
#include "BKE_anim.h"
#include "BKE_action.h"
@@ -52,26 +44,19 @@
#include "BKE_main.h"
#include "BKE_report.h"
#include "BKE_scene.h"
-#include "BKE_depsgraph.h" /* for fly mode updating */
-
#include "BIF_gl.h"
#include "BIF_glutil.h"
+#include "GPU_draw.h"
+
#include "WM_api.h"
#include "WM_types.h"
-#include "ED_keyframing.h"
#include "ED_screen.h"
#include "ED_armature.h"
-#include "ED_space_api.h"
-#include "GPU_draw.h"
-
-
-#include "PIL_time.h" /* smoothview */
-
-#if GAMEBLENDER == 1
+#ifdef WITH_GAMEENGINE
#include "SYS_System.h"
#endif
@@ -154,8 +139,12 @@ void view3d_settings_from_ob(Object *ob, float *ofs, float *quat, float *dist, f
}
if (dist) {
- float vec[3] = {0.0f, 0.0f, -(*dist)};
float tquat[4];
+ float vec[3];
+
+ vec[0]= 0.0f;
+ vec[1]= 0.0f;
+ vec[2]= -(*dist);
mat4_to_quat(tquat, ob->obmat);
@@ -190,10 +179,9 @@ void smooth_view(bContext *C, Object *oldcamera, Object *camera, float *ofs, flo
{
View3D *v3d = CTX_wm_view3d(C);
RegionView3D *rv3d= CTX_wm_region_view3d(C);
- struct SmoothViewStore sms;
+ struct SmoothViewStore sms= {0};
/* initialize sms */
- memset(&sms,0,sizeof(struct SmoothViewStore));
copy_v3_v3(sms.new_ofs, rv3d->ofs);
copy_qt_qt(sms.new_quat, rv3d->viewquat);
sms.new_dist= rv3d->dist;
@@ -1036,6 +1024,17 @@ int get_view3d_viewplane(View3D *v3d, RegionView3D *rv3d, int winxi, int winyi,
if(cam) {
float dx= 0.5*fac*rv3d->camdx*(x2-x1);
float dy= 0.5*fac*rv3d->camdy*(y2-y1);
+
+ /* shift offset */
+ if(cam->type==CAM_ORTHO) {
+ dx += cam->shiftx * cam->ortho_scale;
+ dy += cam->shifty * cam->ortho_scale;
+ }
+ else {
+ dx += cam->shiftx * (cam->clipsta / cam->lens) * 32.0;
+ dy += cam->shifty * (cam->clipsta / cam->lens) * 32.0;
+ }
+
x1+= dx;
x2+= dx;
y1+= dy;
@@ -1175,25 +1174,6 @@ static void view3d_viewlock(RegionView3D *rv3d)
}
}
-/* give a 4x4 matrix from a perspective view, only needs viewquat, ofs and dist
- * basically the same as...
- * rv3d->persp= RV3D_PERSP
- * setviewmatrixview3d(scene, v3d, rv3d);
- * setcameratoview3d(v3d, rv3d, v3d->camera);
- * ...but less of a hassle
- * */
-static void view3d_persp_mat4(RegionView3D *rv3d, float mat[][4])
-{
- float qt[4], dvec[3];
- copy_qt_qt(qt, rv3d->viewquat);
- qt[0]= -qt[0];
- quat_to_mat4(mat, qt);
- mat[3][2] -= rv3d->dist;
- translate_m4(mat, rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]);
- mul_v3_v3fl(dvec, mat[2], -rv3d->dist);
- sub_v3_v3v3(mat[3], dvec, rv3d->ofs);
-}
-
/* dont set windows active in in here, is used by renderwin too */
void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d)
{
@@ -1228,6 +1208,11 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d)
}
translate_m4( rv3d->viewmat,-vec[0], -vec[1], -vec[2]);
}
+ else if (v3d->ob_centre_cursor) {
+ float vec[3];
+ copy_v3_v3(vec, give_cursor(scene, v3d));
+ translate_m4(rv3d->viewmat, -vec[0], -vec[1], -vec[2]);
+ }
else translate_m4( rv3d->viewmat,rv3d->ofs[0], rv3d->ofs[1], rv3d->ofs[2]);
}
}
@@ -1513,7 +1498,6 @@ static void initlocalview(Main *bmain, Scene *scene, ScrArea *sa)
v3d->cursor[2]= -rv3d->ofs[2];
}
}
- if (v3d->near> 0.1) v3d->near= 0.1;
v3d->lay= locallay;
}
@@ -1628,7 +1612,7 @@ void VIEW3D_OT_localview(wmOperatorType *ot)
ot->poll= ED_operator_view3d_active;
}
-#if GAMEBLENDER == 1
+#ifdef WITH_GAMEENGINE
static ListBase queue_back;
static void SaveState(bContext *C)
@@ -1720,7 +1704,7 @@ void game_set_commmandline_options(GameData *gm)
/* maybe we need this defined somewhere else */
extern void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *cam_frame, int always_use_expand_framing);
-#endif // GAMEBLENDER == 1
+#endif // WITH_GAMEENGINE
int game_engine_poll(bContext *C)
{
@@ -1772,7 +1756,7 @@ int ED_view3d_context_activate(bContext *C)
static int game_engine_exec(bContext *C, wmOperator *op)
{
-#if GAMEBLENDER == 1
+#ifdef WITH_GAMEENGINE
Scene *startscene = CTX_data_scene(C);
ScrArea *sa, *prevsa= CTX_wm_area(C);
ARegion *ar, *prevar= CTX_wm_region(C);
@@ -1796,7 +1780,7 @@ static int game_engine_exec(bContext *C, wmOperator *op)
if(rv3d->persp==RV3D_CAMOB && startscene->gm.framing.type == SCE_GAMEFRAMING_BARS && startscene->gm.stereoflag != STEREO_DOME) { /* Letterbox */
rctf cam_framef;
- view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef);
+ view3d_calc_camera_border(startscene, ar, rv3d, CTX_wm_view3d(C), &cam_framef, FALSE);
cam_frame.xmin = cam_framef.xmin + ar->winrct.xmin;
cam_frame.xmax = cam_framef.xmax + ar->winrct.xmin;
cam_frame.ymin = cam_framef.ymin + ar->winrct.ymin;
@@ -1850,897 +1834,6 @@ void VIEW3D_OT_game_start(wmOperatorType *ot)
ot->poll= game_engine_poll;
}
-
-/* NOTE: these defines are saved in keymap files, do not change values but just add new ones */
-#define FLY_MODAL_CANCEL 1
-#define FLY_MODAL_CONFIRM 2
-#define FLY_MODAL_ACCELERATE 3
-#define FLY_MODAL_DECELERATE 4
-#define FLY_MODAL_PAN_ENABLE 5
-#define FLY_MODAL_PAN_DISABLE 6
-#define FLY_MODAL_DIR_FORWARD 7
-#define FLY_MODAL_DIR_BACKWARD 8
-#define FLY_MODAL_DIR_LEFT 9
-#define FLY_MODAL_DIR_RIGHT 10
-#define FLY_MODAL_DIR_UP 11
-#define FLY_MODAL_DIR_DOWN 12
-#define FLY_MODAL_AXIS_LOCK_X 13
-#define FLY_MODAL_AXIS_LOCK_Z 14
-#define FLY_MODAL_PRECISION_ENABLE 15
-#define FLY_MODAL_PRECISION_DISABLE 16
-
-/* called in transform_ops.c, on each regeneration of keymaps */
-void fly_modal_keymap(wmKeyConfig *keyconf)
-{
- static EnumPropertyItem modal_items[] = {
- {FLY_MODAL_CANCEL, "CANCEL", 0, "Cancel", ""},
- {FLY_MODAL_CONFIRM, "CONFIRM", 0, "Confirm", ""},
- {FLY_MODAL_ACCELERATE, "ACCELERATE", 0, "Accelerate", ""},
- {FLY_MODAL_DECELERATE, "DECELERATE", 0, "Decelerate", ""},
-
- {FLY_MODAL_PAN_ENABLE, "PAN_ENABLE", 0, "Pan Enable", ""},
- {FLY_MODAL_PAN_DISABLE, "PAN_DISABLE", 0, "Pan Disable", ""},
-
- {FLY_MODAL_DIR_FORWARD, "FORWARD", 0, "Fly Forward", ""},
- {FLY_MODAL_DIR_BACKWARD,"BACKWARD", 0, "Fly Backward", ""},
- {FLY_MODAL_DIR_LEFT, "LEFT", 0, "Fly Left", ""},
- {FLY_MODAL_DIR_RIGHT, "RIGHT", 0, "Fly Right", ""},
- {FLY_MODAL_DIR_UP, "UP", 0, "Fly Up", ""},
- {FLY_MODAL_DIR_DOWN, "DOWN", 0, "Fly Down", ""},
-
- {FLY_MODAL_AXIS_LOCK_X, "AXIS_LOCK_X", 0, "X Axis Correction", "X axis correction (toggle)"},
- {FLY_MODAL_AXIS_LOCK_Z, "AXIS_LOCK_Z", 0, "X Axis Correction", "Z axis correction (toggle)"},
-
- {FLY_MODAL_PRECISION_ENABLE, "PRECISION_ENABLE", 0, "Precision Enable", ""},
- {FLY_MODAL_PRECISION_DISABLE, "PRECISION_DISABLE", 0, "Precision Disable", ""},
-
- {0, NULL, 0, NULL, NULL}};
-
- wmKeyMap *keymap= WM_modalkeymap_get(keyconf, "View3D Fly Modal");
-
- /* this function is called for each spacetype, only needs to add map once */
- if(keymap) return;
-
- keymap= WM_modalkeymap_add(keyconf, "View3D Fly Modal", modal_items);
-
- /* items for modal map */
- WM_modalkeymap_add_item(keymap, ESCKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CANCEL);
- WM_modalkeymap_add_item(keymap, RIGHTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CANCEL);
-
- WM_modalkeymap_add_item(keymap, LEFTMOUSE, KM_ANY, KM_ANY, 0, FLY_MODAL_CONFIRM);
- WM_modalkeymap_add_item(keymap, RETKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM);
- WM_modalkeymap_add_item(keymap, SPACEKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM);
- WM_modalkeymap_add_item(keymap, PADENTER, KM_PRESS, KM_ANY, 0, FLY_MODAL_CONFIRM);
-
- WM_modalkeymap_add_item(keymap, PADPLUSKEY, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE);
- WM_modalkeymap_add_item(keymap, PADMINUS, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE);
- WM_modalkeymap_add_item(keymap, WHEELUPMOUSE, KM_PRESS, 0, 0, FLY_MODAL_ACCELERATE);
- WM_modalkeymap_add_item(keymap, WHEELDOWNMOUSE, KM_PRESS, 0, 0, FLY_MODAL_DECELERATE);
-
- WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_PRESS, KM_ANY, 0, FLY_MODAL_PAN_ENABLE);
- WM_modalkeymap_add_item(keymap, MIDDLEMOUSE, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PAN_DISABLE); /* XXX - Bug in the event system, middle mouse release doesnt work */
-
- /* WASD */
- WM_modalkeymap_add_item(keymap, WKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_FORWARD);
- WM_modalkeymap_add_item(keymap, SKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_BACKWARD);
- WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_LEFT);
- WM_modalkeymap_add_item(keymap, DKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_RIGHT);
- WM_modalkeymap_add_item(keymap, RKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_UP);
- WM_modalkeymap_add_item(keymap, FKEY, KM_PRESS, 0, 0, FLY_MODAL_DIR_DOWN);
-
- WM_modalkeymap_add_item(keymap, XKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_X);
- WM_modalkeymap_add_item(keymap, ZKEY, KM_PRESS, 0, 0, FLY_MODAL_AXIS_LOCK_Z);
-
- WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_PRESS, KM_ANY, 0, FLY_MODAL_PRECISION_ENABLE);
- WM_modalkeymap_add_item(keymap, LEFTSHIFTKEY, KM_RELEASE, KM_ANY, 0, FLY_MODAL_PRECISION_DISABLE);
-
- /* assign map to operators */
- WM_modalkeymap_assign(keymap, "VIEW3D_OT_fly");
-
-}
-
-typedef struct FlyInfo {
- /* context stuff */
- RegionView3D *rv3d;
- View3D *v3d;
- ARegion *ar;
- Scene *scene;
-
- wmTimer *timer; /* needed for redraws */
-
- short state;
- short use_precision;
- short redraw;
- short mval[2];
-
- /* fly state state */
- float speed; /* the speed the view is moving per redraw */
- short axis; /* Axis index to move allong by default Z to move allong the view */
- short pan_view; /* when true, pan the view instead of rotating */
-
- /* relative view axis locking - xlock, zlock
- 0; disabled
- 1; enabled but not checking because mouse hasnt moved outside the margin since locking was checked an not needed
- when the mouse moves, locking is set to 2 so checks are done.
- 2; mouse moved and checking needed, if no view altering is donem its changed back to 1 */
- short xlock, zlock;
- float xlock_momentum, zlock_momentum; /* nicer dynamics */
- float grid; /* world scale 1.0 default */
-
- /* root most parent */
- Object *root_parent;
-
- /* backup values */
- float dist_backup; /* backup the views distance since we use a zero dist for fly mode */
- float ofs_backup[3]; /* backup the views offset incase the user cancels flying in non camera mode */
- float rot_backup[4]; /* backup the views quat incase the user cancels flying in non camera mode. (quat for view, eul for camera) */
- short persp_backup; /* remember if were ortho or not, only used for restoring the view if it was a ortho view */
-
- void *obtfm; /* backup the objects transform */
-
- /* compare between last state */
- double time_lastwheel; /* used to accelerate when using the mousewheel a lot */
- double time_lastdraw; /* time between draws */
-
- void *draw_handle_pixel;
-
- /* use for some lag */
- float dvec_prev[3]; /* old for some lag */
-
-} FlyInfo;
-
-static void drawFlyPixel(const struct bContext *UNUSED(C), struct ARegion *UNUSED(ar), void *arg)
-{
- FlyInfo *fly = arg;
-
- /* draws 4 edge brackets that frame the safe area where the
- mouse can move during fly mode without spinning the view */
- float x1, x2, y1, y2;
-
- x1= 0.45*(float)fly->ar->winx;
- y1= 0.45*(float)fly->ar->winy;
- x2= 0.55*(float)fly->ar->winx;
- y2= 0.55*(float)fly->ar->winy;
- cpack(0);
-
-
- glBegin(GL_LINES);
- /* bottom left */
- glVertex2f(x1,y1);
- glVertex2f(x1,y1+5);
-
- glVertex2f(x1,y1);
- glVertex2f(x1+5,y1);
-
- /* top right */
- glVertex2f(x2,y2);
- glVertex2f(x2,y2-5);
-
- glVertex2f(x2,y2);
- glVertex2f(x2-5,y2);
-
- /* top left */
- glVertex2f(x1,y2);
- glVertex2f(x1,y2-5);
-
- glVertex2f(x1,y2);
- glVertex2f(x1+5,y2);
-
- /* bottom right */
- glVertex2f(x2,y1);
- glVertex2f(x2,y1+5);
-
- glVertex2f(x2,y1);
- glVertex2f(x2-5,y1);
- glEnd();
-}
-
-/* FlyInfo->state */
-#define FLY_RUNNING 0
-#define FLY_CANCEL 1
-#define FLY_CONFIRM 2
-
-static int initFlyInfo (bContext *C, FlyInfo *fly, wmOperator *op, wmEvent *event)
-{
- float upvec[3]; // tmp
- float mat[3][3];
-
- fly->rv3d= CTX_wm_region_view3d(C);
- fly->v3d = CTX_wm_view3d(C);
- fly->ar = CTX_wm_region(C);
- fly->scene= CTX_data_scene(C);
-
- if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->id.lib) {
- BKE_report(op->reports, RPT_ERROR, "Cannot fly a camera from an external library");
- return FALSE;
- }
-
- if(fly->v3d->ob_centre) {
- BKE_report(op->reports, RPT_ERROR, "Cannot fly when the view is locked to an object");
- return FALSE;
- }
-
- if(fly->rv3d->persp==RV3D_CAMOB && fly->v3d->camera->constraints.first) {
- BKE_report(op->reports, RPT_ERROR, "Cannot fly an object with constraints");
- return FALSE;
- }
-
- fly->state= FLY_RUNNING;
- fly->speed= 0.0f;
- fly->axis= 2;
- fly->pan_view= FALSE;
- fly->xlock= FALSE;
- fly->zlock= FALSE;
- fly->xlock_momentum=0.0f;
- fly->zlock_momentum=0.0f;
- fly->grid= 1.0f;
- fly->use_precision= 0;
-
- fly->dvec_prev[0]= fly->dvec_prev[1]= fly->dvec_prev[2]= 0.0f;
-
- fly->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.01f);
-
- fly->mval[0] = event->x - fly->ar->winrct.xmin;
- fly->mval[1] = event->y - fly->ar->winrct.ymin;
-
-
- fly->time_lastdraw= fly->time_lastwheel= PIL_check_seconds_timer();
-
- fly->draw_handle_pixel = ED_region_draw_cb_activate(fly->ar->type, drawFlyPixel, fly, REGION_DRAW_POST_PIXEL);
-
- fly->rv3d->rflag |= RV3D_NAVIGATING; /* so we draw the corner margins */
-
- /* detect weather to start with Z locking */
- upvec[0]=1.0f; upvec[1]=0.0f; upvec[2]=0.0f;
- copy_m3_m4(mat, fly->rv3d->viewinv);
- mul_m3_v3(mat, upvec);
- if (fabs(upvec[2]) < 0.1)
- fly->zlock = 1;
- upvec[0]=0; upvec[1]=0; upvec[2]=0;
-
- fly->persp_backup= fly->rv3d->persp;
- fly->dist_backup= fly->rv3d->dist;
- if (fly->rv3d->persp==RV3D_CAMOB) {
- Object *ob_back;
- if((fly->root_parent=fly->v3d->camera->parent)) {
- while(fly->root_parent->parent)
- fly->root_parent= fly->root_parent->parent;
- ob_back= fly->root_parent;
- }
- else {
- ob_back= fly->v3d->camera;
- }
-
- /* store the original camera loc and rot */
- /* TODO. axis angle etc */
-
- fly->obtfm= object_tfm_backup(ob_back);
-
- where_is_object(fly->scene, fly->v3d->camera);
- negate_v3_v3(fly->rv3d->ofs, fly->v3d->camera->obmat[3]);
-
- fly->rv3d->dist=0.0;
- } else {
- /* perspective or ortho */
- if (fly->rv3d->persp==RV3D_ORTHO)
- fly->rv3d->persp= RV3D_PERSP; /*if ortho projection, make perspective */
- copy_qt_qt(fly->rot_backup, fly->rv3d->viewquat);
- copy_v3_v3(fly->ofs_backup, fly->rv3d->ofs);
- fly->rv3d->dist= 0.0f;
-
- upvec[2]= fly->dist_backup; /*x and y are 0*/
- mul_m3_v3(mat, upvec);
- sub_v3_v3(fly->rv3d->ofs, upvec);
- /*Done with correcting for the dist*/
- }
-
-
- /* center the mouse, probably the UI mafia are against this but without its quite annoying */
- WM_cursor_warp(CTX_wm_window(C), fly->ar->winrct.xmin + fly->ar->winx/2, fly->ar->winrct.ymin + fly->ar->winy/2);
-
- return 1;
-}
-
-static int flyEnd(bContext *C, FlyInfo *fly)
-{
- RegionView3D *rv3d= fly->rv3d;
- View3D *v3d = fly->v3d;
-
- float upvec[3];
-
- if(fly->state == FLY_RUNNING)
- return OPERATOR_RUNNING_MODAL;
-
- WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), fly->timer);
-
- ED_region_draw_cb_exit(fly->ar->type, fly->draw_handle_pixel);
-
- rv3d->dist= fly->dist_backup;
-
- if (fly->state == FLY_CANCEL) {
- /* Revert to original view? */
- if (fly->persp_backup==RV3D_CAMOB) { /* a camera view */
- Object *ob_back;
- if(fly->root_parent)ob_back= fly->root_parent;
- else ob_back= fly->v3d->camera;
-
- /* store the original camera loc and rot */
- object_tfm_restore(ob_back, fly->obtfm);
-
- DAG_id_flush_update(&ob_back->id, OB_RECALC_OB);
- } else {
- /* Non Camera we need to reset the view back to the original location bacause the user canceled*/
- copy_qt_qt(rv3d->viewquat, fly->rot_backup);
- copy_v3_v3(rv3d->ofs, fly->ofs_backup);
- rv3d->persp= fly->persp_backup;
- }
- }
- else if (fly->persp_backup==RV3D_CAMOB) { /* camera */
- float mat3[3][3];
- if(fly->root_parent) {
- DAG_id_flush_update(&fly->root_parent->id, OB_RECALC_OB);
- }
- else {
- copy_m3_m4(mat3, v3d->camera->obmat);
- object_mat3_to_rot(v3d->camera, mat3, TRUE);
- DAG_id_flush_update(&v3d->camera->id, OB_RECALC_OB);
- }
- }
- else { /* not camera */
- /* Apply the fly mode view */
- /*restore the dist*/
- float mat[3][3];
- upvec[0]= upvec[1]= 0;
- upvec[2]= fly->dist_backup; /*x and y are 0*/
- copy_m3_m4(mat, rv3d->viewinv);
- mul_m3_v3(mat, upvec);
- add_v3_v3(rv3d->ofs, upvec);
- /*Done with correcting for the dist */
- }
-
- rv3d->rflag &= ~RV3D_NAVIGATING;
-//XXX2.5 BIF_view3d_previewrender_signal(fly->sa, PR_DBASE|PR_DISPRECT); /* not working at the moment not sure why */
-
- if(fly->obtfm)
- MEM_freeN(fly->obtfm);
-
- if(fly->state == FLY_CONFIRM) {
- MEM_freeN(fly);
- return OPERATOR_FINISHED;
- }
-
- MEM_freeN(fly);
- return OPERATOR_CANCELLED;
-}
-
-static void flyEvent(FlyInfo *fly, wmEvent *event)
-{
- if (event->type == TIMER && event->customdata == fly->timer) {
- fly->redraw = 1;
- }
- else if (event->type == MOUSEMOVE) {
- fly->mval[0] = event->x - fly->ar->winrct.xmin;
- fly->mval[1] = event->y - fly->ar->winrct.ymin;
- } /* handle modal keymap first */
- else if (event->type == EVT_MODAL_MAP) {
- switch (event->val) {
- case FLY_MODAL_CANCEL:
- fly->state = FLY_CANCEL;
- break;
- case FLY_MODAL_CONFIRM:
- fly->state = FLY_CONFIRM;
- break;
-
- case FLY_MODAL_ACCELERATE:
- {
- double time_currwheel;
- float time_wheel;
-
- time_currwheel= PIL_check_seconds_timer();
- time_wheel = (float)(time_currwheel - fly->time_lastwheel);
- fly->time_lastwheel = time_currwheel;
- /*printf("Wheel %f\n", time_wheel);*/
- /*Mouse wheel delays range from 0.5==slow to 0.01==fast*/
- time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */
-
- if (fly->speed<0.0f) fly->speed= 0.0f;
- else {
- if (event->shift)
- fly->speed+= fly->grid*time_wheel*0.1;
- else
- fly->speed+= fly->grid*time_wheel;
- }
- break;
- }
- case FLY_MODAL_DECELERATE:
- {
- double time_currwheel;
- float time_wheel;
-
- time_currwheel= PIL_check_seconds_timer();
- time_wheel = (float)(time_currwheel - fly->time_lastwheel);
- fly->time_lastwheel = time_currwheel;
- time_wheel = 1+ (10 - (20*MIN2(time_wheel, 0.5))); /* 0-0.5 -> 0-5.0 */
-
- if (fly->speed>0) fly->speed=0;
- else {
- if (event->shift)
- fly->speed-= fly->grid*time_wheel*0.1;
- else
- fly->speed-= fly->grid*time_wheel;
- }
- break;
- }
- case FLY_MODAL_PAN_ENABLE:
- fly->pan_view= TRUE;
- break;
- case FLY_MODAL_PAN_DISABLE:
-//XXX2.5 warp_pointer(cent_orig[0], cent_orig[1]);
- fly->pan_view= FALSE;
- break;
-
- /* impliment WASD keys */
- case FLY_MODAL_DIR_FORWARD:
- if (fly->speed < 0.0f) fly->speed= -fly->speed; /* flip speed rather then stopping, game like motion */
- else if (fly->axis==2) fly->speed += fly->grid; /* increse like mousewheel if were already moving in that difection*/
- fly->axis= 2;
- break;
- case FLY_MODAL_DIR_BACKWARD:
- if (fly->speed > 0.0f) fly->speed= -fly->speed;
- else if (fly->axis==2) fly->speed -= fly->grid;
- fly->axis= 2;
- break;
- case FLY_MODAL_DIR_LEFT:
- if (fly->speed < 0.0f) fly->speed= -fly->speed;
- else if (fly->axis==0) fly->speed += fly->grid;
- fly->axis= 0;
- break;
- case FLY_MODAL_DIR_RIGHT:
- if (fly->speed > 0.0f) fly->speed= -fly->speed;
- else if (fly->axis==0) fly->speed -= fly->grid;
- fly->axis= 0;
- break;
- case FLY_MODAL_DIR_DOWN:
- if (fly->speed < 0.0f) fly->speed= -fly->speed;
- else if (fly->axis==1) fly->speed += fly->grid;
- fly->axis= 1;
- break;
- case FLY_MODAL_DIR_UP:
- if (fly->speed > 0.0f) fly->speed= -fly->speed;
- else if (fly->axis==1) fly->speed -= fly->grid;
- fly->axis= 1;
- break;
-
- case FLY_MODAL_AXIS_LOCK_X:
- if (fly->xlock) fly->xlock=0;
- else {
- fly->xlock = 2;
- fly->xlock_momentum = 0.0;
- }
- break;
- case FLY_MODAL_AXIS_LOCK_Z:
- if (fly->zlock) fly->zlock=0;
- else {
- fly->zlock = 2;
- fly->zlock_momentum = 0.0;
- }
- break;
-
- case FLY_MODAL_PRECISION_ENABLE:
- fly->use_precision= TRUE;
- break;
- case FLY_MODAL_PRECISION_DISABLE:
- fly->use_precision= FALSE;
- break;
-
- }
- }
-}
-
-static int flyApply(bContext *C, FlyInfo *fly)
-{
-
-#define FLY_ROTATE_FAC 2.5f /* more is faster */
-#define FLY_ZUP_CORRECT_FAC 0.1f /* ammount to correct per step */
-#define FLY_ZUP_CORRECT_ACCEL 0.05f /* increase upright momentum each step */
-
- /*
- fly mode - Shift+F
- a fly loop where the user can move move the view as if they are flying
- */
- RegionView3D *rv3d= fly->rv3d;
- View3D *v3d = fly->v3d;
- ARegion *ar = fly->ar;
- Scene *scene= fly->scene;
-
- float prev_view_mat[4][4];
-
- float mat[3][3], /* 3x3 copy of the view matrix so we can move allong the view axis */
- dvec[3]={0,0,0}, /* this is the direction thast added to the view offset per redraw */
-
- /* Camera Uprighting variables */
- upvec[3]={0,0,0}, /* stores the view's up vector */
-
- moffset[2], /* mouse offset from the views center */
- tmp_quat[4]; /* used for rotating the view */
-
- int cent_orig[2], /* view center */
-//XXX- can avoid using // cent[2], /* view center modified */
- xmargin, ymargin; /* x and y margin are define the safe area where the mouses movement wont rotate the view */
- unsigned char
- apply_rotation= 1; /* if the user presses shift they can look about without movinf the direction there looking*/
-
- if(fly->root_parent)
- view3d_persp_mat4(rv3d, prev_view_mat);
-
- /* the dist defines a vector that is infront of the offset
- to rotate the view about.
- this is no good for fly mode because we
- want to rotate about the viewers center.
- but to correct the dist removal we must
- alter offset so the view doesn't jump. */
-
- xmargin= ar->winx/20.0f;
- ymargin= ar->winy/20.0f;
-
- cent_orig[0]= ar->winrct.xmin + ar->winx/2;
- cent_orig[1]= ar->winrct.ymin + ar->winy/2;
-
- {
-
- /* mouse offset from the center */
- moffset[0]= fly->mval[0]- ar->winx/2;
- moffset[1]= fly->mval[1]- ar->winy/2;
-
- /* enforce a view margin */
- if (moffset[0]>xmargin) moffset[0]-=xmargin;
- else if (moffset[0] < -xmargin) moffset[0]+=xmargin;
- else moffset[0]=0;
-
- if (moffset[1]>ymargin) moffset[1]-=ymargin;
- else if (moffset[1] < -ymargin) moffset[1]+=ymargin;
- else moffset[1]=0;
-
-
- /* scale the mouse movement by this value - scales mouse movement to the view size
- * moffset[0]/(ar->winx-xmargin*2) - window size minus margin (same for y)
- *
- * the mouse moves isnt linear */
-
- if(moffset[0]) {
- moffset[0] /= ar->winx - (xmargin*2);
- moffset[0] *= fabs(moffset[0]);
- }
-
- if(moffset[1]) {
- moffset[1] /= ar->winy - (ymargin*2);
- moffset[1] *= fabs(moffset[1]);
- }
-
- /* Should we redraw? */
- if(fly->speed != 0.0f || moffset[0] || moffset[1] || fly->zlock || fly->xlock || dvec[0] || dvec[1] || dvec[2] ) {
- float dvec_tmp[3];
- double time_current, time_redraw; /*time how fast it takes for us to redraw, this is so simple scenes dont fly too fast */
- float time_redraw_clamped;
-
- time_current= PIL_check_seconds_timer();
- time_redraw= (float)(time_current - fly->time_lastdraw);
- time_redraw_clamped= MIN2(0.05f, time_redraw); /* clamt the redraw time to avoid jitter in roll correction */
- fly->time_lastdraw= time_current;
- /*fprintf(stderr, "%f\n", time_redraw);*/ /* 0.002 is a small redraw 0.02 is larger */
-
- /* Scale the time to use shift to scale the speed down- just like
- shift slows many other areas of blender down */
- if (fly->use_precision)
- fly->speed= fly->speed * (1.0f-time_redraw_clamped);
-
- copy_m3_m4(mat, rv3d->viewinv);
-
- if (fly->pan_view==TRUE) {
- /* pan only */
- dvec_tmp[0]= -moffset[0];
- dvec_tmp[1]= -moffset[1];
- dvec_tmp[2]= 0;
-
- if (fly->use_precision) {
- dvec_tmp[0] *= 0.1;
- dvec_tmp[1] *= 0.1;
- }
-
- mul_m3_v3(mat, dvec_tmp);
- mul_v3_fl(dvec_tmp, time_redraw*200.0 * fly->grid);
-
- } else {
- float roll; /* similar to the angle between the camera's up and the Z-up, but its very rough so just roll*/
-
- /* rotate about the X axis- look up/down */
- if (moffset[1]) {
- upvec[0]=1;
- upvec[1]=0;
- upvec[2]=0;
- mul_m3_v3(mat, upvec);
- axis_angle_to_quat( tmp_quat, upvec, (float)moffset[1] * time_redraw * -FLY_ROTATE_FAC); /* Rotate about the relative up vec */
- mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat);
-
- if (fly->xlock) fly->xlock = 2; /*check for rotation*/
- if (fly->zlock) fly->zlock = 2;
- fly->xlock_momentum= 0.0f;
- }
-
- /* rotate about the Y axis- look left/right */
- if (moffset[0]) {
-
- /* if we're upside down invert the moffset */
- upvec[0]=0;
- upvec[1]=1;
- upvec[2]=0;
- mul_m3_v3(mat, upvec);
-
- if(upvec[2] < 0.0f)
- moffset[0]= -moffset[0];
-
- /* make the lock vectors */
- if (fly->zlock) {
- upvec[0]=0;
- upvec[1]=0;
- upvec[2]=1;
- } else {
- upvec[0]=0;
- upvec[1]=1;
- upvec[2]=0;
- mul_m3_v3(mat, upvec);
- }
-
- axis_angle_to_quat( tmp_quat, upvec, (float)moffset[0] * time_redraw * FLY_ROTATE_FAC); /* Rotate about the relative up vec */
- mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat);
-
- if (fly->xlock) fly->xlock = 2;/*check for rotation*/
- if (fly->zlock) fly->zlock = 2;
- }
-
- if (fly->zlock==2) {
- upvec[0]=1;
- upvec[1]=0;
- upvec[2]=0;
- mul_m3_v3(mat, upvec);
-
- /*make sure we have some z rolling*/
- if (fabs(upvec[2]) > 0.00001f) {
- roll= upvec[2]*5;
- upvec[0]=0; /*rotate the view about this axis*/
- upvec[1]=0;
- upvec[2]=1;
-
- mul_m3_v3(mat, upvec);
- axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->zlock_momentum * FLY_ZUP_CORRECT_FAC); /* Rotate about the relative up vec */
- mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat);
-
- fly->zlock_momentum += FLY_ZUP_CORRECT_ACCEL;
- } else {
- fly->zlock=1; /* dont check until the view rotates again */
- fly->zlock_momentum= 0.0f;
- }
- }
-
- if (fly->xlock==2 && moffset[1]==0) { /*only apply xcorrect when mouse isnt applying x rot*/
- upvec[0]=0;
- upvec[1]=0;
- upvec[2]=1;
- mul_m3_v3(mat, upvec);
- /*make sure we have some z rolling*/
- if (fabs(upvec[2]) > 0.00001) {
- roll= upvec[2] * -5;
-
- upvec[0]= 1.0f; /*rotate the view about this axis*/
- upvec[1]= 0.0f;
- upvec[2]= 0.0f;
-
- mul_m3_v3(mat, upvec);
-
- axis_angle_to_quat( tmp_quat, upvec, roll*time_redraw_clamped*fly->xlock_momentum*0.1f); /* Rotate about the relative up vec */
- mul_qt_qtqt(rv3d->viewquat, rv3d->viewquat, tmp_quat);
-
- fly->xlock_momentum += 0.05f;
- } else {
- fly->xlock=1; /* see above */
- fly->xlock_momentum= 0.0f;
- }
- }
-
-
- if (apply_rotation) {
- /* Normal operation */
- /* define dvec, view direction vector */
- dvec_tmp[0]= dvec_tmp[1]= dvec_tmp[2]= 0.0f;
- /* move along the current axis */
- dvec_tmp[fly->axis]= 1.0f;
-
- mul_m3_v3(mat, dvec_tmp);
-
- mul_v3_fl(dvec_tmp, fly->speed * time_redraw * 0.25f);
- }
- }
-
- /* impose a directional lag */
- interp_v3_v3v3(dvec, dvec_tmp, fly->dvec_prev, (1.0f/(1.0f+(time_redraw*5.0f))));
-
- if (rv3d->persp==RV3D_CAMOB) {
- Object *lock_ob= fly->root_parent ? fly->root_parent : fly->v3d->camera;
- if (lock_ob->protectflag & OB_LOCK_LOCX) dvec[0] = 0.0;
- if (lock_ob->protectflag & OB_LOCK_LOCY) dvec[1] = 0.0;
- if (lock_ob->protectflag & OB_LOCK_LOCZ) dvec[2] = 0.0;
- }
-
- add_v3_v3(rv3d->ofs, dvec);
-
- /* todo, dynamic keys */
-#if 0
- if (fly->zlock && fly->xlock)
- ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB");
- else if (fly->zlock)
- ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z on, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB");
- else if (fly->xlock)
- ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X on/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB");
- else
- ED_area_headerprint(fly->ar, "FlyKeys Speed:(+/- | Wheel), Upright Axis:X off/Z off, Slow:Shift, Direction:WASDRF, Ok:LMB, Pan:MMB, Cancel:RMB");
-#endif
-
- /* we are in camera view so apply the view ofs and quat to the view matrix and set the camera to the view */
- if (rv3d->persp==RV3D_CAMOB) {
- ID *id_key;
- /* transform the parent or the camera? */
- if(fly->root_parent) {
- Object *ob_update;
-
- float view_mat[4][4];
- float prev_view_imat[4][4];
- float diff_mat[4][4];
- float parent_mat[4][4];
-
- invert_m4_m4(prev_view_imat, prev_view_mat);
- view3d_persp_mat4(rv3d, view_mat);
- mul_m4_m4m4(diff_mat, prev_view_imat, view_mat);
- mul_m4_m4m4(parent_mat, fly->root_parent->obmat, diff_mat);
- object_apply_mat4(fly->root_parent, parent_mat);
-
- // where_is_object(scene, fly->root_parent);
-
- ob_update= v3d->camera->parent;
- while(ob_update) {
- DAG_id_flush_update(&ob_update->id, OB_RECALC_OB);
- ob_update= ob_update->parent;
- }
-
- copy_m4_m4(prev_view_mat, view_mat);
-
- id_key= &fly->root_parent->id;
-
- }
- else {
- float view_mat[4][4];
- view3d_persp_mat4(rv3d, view_mat);
- object_apply_mat4(v3d->camera, view_mat);
- id_key= &v3d->camera->id;
- }
-
- /* record the motion */
- if (autokeyframe_cfra_can_key(scene, id_key)) {
- ListBase dsources = {NULL, NULL};
-
- /* add datasource override for the camera object */
- ANIM_relative_keyingset_add_source(&dsources, id_key, NULL, NULL);
-
- /* insert keyframes
- * 1) on the first frame
- * 2) on each subsequent frame
- * TODO: need to check in future that frame changed before doing this
- */
- if (fly->xlock || fly->zlock || moffset[0] || moffset[1]) {
- KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Rotation");
- ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
- }
- if (fly->speed) {
- KeyingSet *ks= ANIM_builtin_keyingset_get_named(NULL, "Location");
- ANIM_apply_keyingset(C, &dsources, NULL, ks, MODIFYKEY_MODE_INSERT, (float)CFRA);
- }
-
- /* free temp data */
- BLI_freelistN(&dsources);
- }
- }
- } else
- /*were not redrawing but we need to update the time else the view will jump */
- fly->time_lastdraw= PIL_check_seconds_timer();
- /* end drawing */
- copy_v3_v3(fly->dvec_prev, dvec);
- }
-
-/* moved to flyEnd() */
-
- return OPERATOR_FINISHED;
-}
-
-
-
-static int fly_invoke(bContext *C, wmOperator *op, wmEvent *event)
-{
- RegionView3D *rv3d= CTX_wm_region_view3d(C);
- FlyInfo *fly;
-
- if(rv3d->viewlock)
- return OPERATOR_CANCELLED;
-
- fly= MEM_callocN(sizeof(FlyInfo), "FlyOperation");
-
- op->customdata= fly;
-
- if(initFlyInfo(C, fly, op, event)==FALSE) {
- MEM_freeN(op->customdata);
- return OPERATOR_CANCELLED;
- }
-
- flyEvent(fly, event);
-
- WM_event_add_modal_handler(C, op);
-
- return OPERATOR_RUNNING_MODAL;
-}
-
-static int fly_cancel(bContext *C, wmOperator *op)
-{
- FlyInfo *fly = op->customdata;
-
- fly->state = FLY_CANCEL;
- flyEnd(C, fly);
- op->customdata= NULL;
-
- return OPERATOR_CANCELLED;
-}
-
-static int fly_modal(bContext *C, wmOperator *op, wmEvent *event)
-{
- int exit_code;
-
- FlyInfo *fly = op->customdata;
-
- fly->redraw= 0;
-
- flyEvent(fly, event);
-
- if(event->type==TIMER && event->customdata == fly->timer)
- flyApply(C, fly);
-
- if(fly->redraw) {
- ED_region_tag_redraw(CTX_wm_region(C));
- }
-
- exit_code = flyEnd(C, fly);
-
- if(exit_code!=OPERATOR_RUNNING_MODAL)
- ED_region_tag_redraw(CTX_wm_region(C));
-
- return exit_code;
-}
-
-void VIEW3D_OT_fly(wmOperatorType *ot)
-{
-
- /* identifiers */
- ot->name= "Fly Navigation";
- ot->description= "Interactively fly around the scene";
- ot->idname= "VIEW3D_OT_fly";
-
- /* api callbacks */
- ot->invoke= fly_invoke;
- ot->cancel= fly_cancel;
- ot->modal= fly_modal;
- ot->poll= ED_operator_view3d_active;
-
- /* flags */
- ot->flag= OPTYPE_BLOCKING;
-
-}
-
/* ************************************** */
void view3d_align_axis_to_vector(View3D *v3d, RegionView3D *rv3d, int axisidx, float vec[3])
@@ -2780,3 +1873,12 @@ int view3d_is_ortho(View3D *v3d, RegionView3D *rv3d)
{
return (rv3d->persp == RV3D_ORTHO || (v3d->camera && ((Camera *)v3d->camera->data)->type == CAM_ORTHO));
}
+
+float view3d_pixel_size(struct RegionView3D *rv3d, const float co[3])
+{
+ return (rv3d->persmat[3][3] + (
+ rv3d->persmat[0][3]*co[0] +
+ rv3d->persmat[1][3]*co[1] +
+ rv3d->persmat[2][3]*co[2])
+ ) * rv3d->pixsize;
+}
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 4c6fb887ebc..0f27316ec5b 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -534,6 +534,9 @@ wmKeyMap* transform_modal_keymap(wmKeyConfig *keyconf)
WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_SNAP_INV_ON);
WM_modalkeymap_add_item(keymap, LEFTCTRLKEY, KM_RELEASE, KM_ANY, 0, TFM_MODAL_SNAP_INV_OFF);
+
+ WM_modalkeymap_add_item(keymap, RIGHTCTRLKEY, KM_PRESS, KM_ANY, 0, TFM_MODAL_SNAP_INV_ON);
+ WM_modalkeymap_add_item(keymap, RIGHTCTRLKEY, KM_RELEASE, KM_ANY, 0, TFM_MODAL_SNAP_INV_OFF);
WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, 0, 0, TFM_MODAL_ADD_SNAP);
WM_modalkeymap_add_item(keymap, AKEY, KM_PRESS, KM_ALT, 0, TFM_MODAL_REMOVE_SNAP);
@@ -1224,7 +1227,10 @@ static void drawHelpline(bContext *UNUSED(C), int x, int y, void *customdata)
if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR))
{
float vecrot[3], cent[2];
- int mval[2] = {x, y};
+ int mval[2];
+
+ mval[0]= x;
+ mval[1]= y;
VECCOPY(vecrot, t->center);
if(t->flag & T_EDIT) {
@@ -1669,7 +1675,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int
/* overwrite initial values if operator supplied a non-null vector */
if (RNA_property_is_set(op->ptr, "value"))
{
- float values[4];
+ float values[4]= {0}; /* incase value isn't length 4, avoid uninitialized memory */
RNA_float_get_array(op->ptr, "value", values);
QUATCOPY(t->values, values);
QUATCOPY(t->auto_values, values);
@@ -1681,6 +1687,7 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int
{
RNA_float_get_array(op->ptr, "axis", t->axis);
normalize_v3(t->axis);
+ copy_v3_v3(t->axis_orig, t->axis);
}
/* Constraint init from operator */
@@ -1919,14 +1926,13 @@ static void constraintTransLim(TransInfo *UNUSED(t), TransData *td)
{
if (td->con) {
bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_LOCLIMIT);
- bConstraintOb cob;
+ bConstraintOb cob= {0};
bConstraint *con;
/* Make a temporary bConstraintOb for using these limit constraints
* - they only care that cob->matrix is correctly set ;-)
* - current space should be local
*/
- memset(&cob, 0, sizeof(bConstraintOb));
unit_m4(cob.matrix);
VECCOPY(cob.matrix[3], td->loc);
@@ -2084,14 +2090,13 @@ static void constraintSizeLim(TransInfo *t, TransData *td)
{
if (td->con && td->ext) {
bConstraintTypeInfo *cti= get_constraint_typeinfo(CONSTRAINT_TYPE_SIZELIMIT);
- bConstraintOb cob;
+ bConstraintOb cob= {0};
bConstraint *con;
/* Make a temporary bConstraintOb for using these limit constraints
* - they only care that cob->matrix is correctly set ;-)
* - current space should be local
*/
- memset(&cob, 0, sizeof(bConstraintOb));
if ((td->flag & TD_SINGLESIZE) && !(t->con.mode & CON_APPLY)) {
/* scale val and reset size */
return; // TODO: fix this case
@@ -2839,6 +2844,8 @@ void initRotation(TransInfo *t)
negate_v3_v3(t->axis, t->viewinv[2]);
normalize_v3(t->axis);
+
+ copy_v3_v3(t->axis_orig, t->axis);
}
static void ElementRotation(TransInfo *t, TransData *td, float mat[3][3], short around) {
@@ -3105,8 +3112,7 @@ int Rotation(TransInfo *t, short UNUSED(mval[2]))
t->con.applyRot(t, NULL, t->axis, NULL);
} else {
/* reset axis if constraint is not set */
- negate_v3_v3(t->axis, t->viewinv[2]);
- normalize_v3(t->axis);
+ copy_v3_v3(t->axis, t->axis_orig);
}
applySnapping(t, &final);
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 49ce4d2e0dd..b9f3382e9d3 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -314,6 +314,7 @@ typedef struct TransInfo {
float values[4];
float auto_values[4];
float axis[3];
+ float axis_orig[3]; /* TransCon can change 'axis', store the original value here */
void *view;
struct ScrArea *sa;
@@ -556,7 +557,6 @@ void flushTransSeq(TransInfo *t);
/*********************** exported from transform_manipulator.c ********** */
int gimbal_axis(struct Object *ob, float gmat[][3]); /* return 0 when no gimbal for selection */
int calc_manipulator_stats(const struct bContext *C);
-float get_drawsize(struct ARegion *ar, float *co);
/*********************** TransData Creation and General Handling *********** */
void createTransData(struct bContext *C, TransInfo *t);
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 818e5c2df66..edae59fc00c 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -678,7 +678,7 @@ int count_set_pose_transflags(int *out_mode, short around, Object *ob)
for (pchan = ob->pose->chanbase.first; pchan; pchan = pchan->next) {
bone = pchan->bone;
- if ((bone->layer & arm->layer) && !(pchan->bone->flag & BONE_HIDDEN_P)) {
+ if (PBONE_VISIBLE(arm, bone)) {
if ((bone->flag & BONE_SELECTED) && !(ob->proxy && pchan->bone->layer & arm->layer_protected))
bone->flag |= BONE_TRANSFORM;
else
@@ -3868,8 +3868,13 @@ static void SeqTransInfo(TransInfo *t, Sequence *seq, int *recursive, int *count
#ifdef XXX_DURIAN_ANIM_TX_HACK
/* hack */
if((seq->flag & SELECT)==0 && seq->type & SEQ_EFFECT) {
- Sequence *seq_t[3] = {seq->seq1, seq->seq2, seq->seq3};
+ Sequence *seq_t[3];
int i;
+
+ seq_t[0]= seq->seq1;
+ seq_t[1]= seq->seq2;
+ seq_t[2]= seq->seq3;
+
for(i=0; i<3; i++) {
if (seq_t[i] && ((seq_t[i])->flag & SELECT) && !(seq_t[i]->flag & SEQ_LOCK) && !(seq_t[i]->flag & (SEQ_LEFTSEL|SEQ_RIGHTSEL)))
seq->flag |= SELECT;
@@ -5080,6 +5085,17 @@ void special_aftertrans_update(bContext *C, TransInfo *t)
if (C && recalcObPaths) {
//ED_objects_clear_paths(C); // XXX for now, don't need to clear
ED_objects_recalculate_paths(C, t->scene);
+
+ /* recalculating the frame positions means we loose our original transform if its not auto-keyed [#24451]
+ * this hack re-applies it, which is annoying, only alternatives are...
+ * - dont recalc paths.
+ * - have an object_handle_update() which gives is the new transform without touching the objects.
+ * - only recalc paths on auto-keying.
+ * - ED_objects_recalculate_paths could backup/restore transforms.
+ * - re-apply the transform which is simplest in this case. (2 lines below)
+ */
+ t->redraw |= TREDRAW_HARD;
+ transformApply(C, t);
}
}
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index cd40cb3bb25..22888a6b007 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -334,15 +334,13 @@ void recalcData(TransInfo *t)
Scene *scene= t->scene;
SpaceAction *saction= (SpaceAction *)t->sa->spacedata.first;
- bAnimContext ac;
+ bAnimContext ac= {0};
ListBase anim_data = {NULL, NULL};
bAnimListElem *ale;
int filter;
/* initialise relevant anim-context 'context' data from TransInfo data */
/* NOTE: sync this with the code in ANIM_animdata_get_context() */
- memset(&ac, 0, sizeof(bAnimContext));
-
ac.scene= t->scene;
ac.obact= OBACT;
ac.sa= t->sa;
@@ -1570,12 +1568,3 @@ void calculatePropRatio(TransInfo *t)
strcpy(t->proptext, "");
}
}
-
-float get_drawsize(ARegion *ar, float *co)
-{
- RegionView3D *rv3d= ar->regiondata;
- float vec[3]= {rv3d->persmat[0][3], rv3d->persmat[1][3], rv3d->persmat[2][3]};
- float size= rv3d->pixsize * 5;
- size *= dot_v3v3(vec, co) + rv3d->persmat[3][3];
- return size;
-}
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index f3afd5793bc..7ed569dab93 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -156,6 +156,37 @@ static void stats_editbone(RegionView3D *rv3d, EditBone *ebo)
protectflag_to_drawflags(OB_LOCK_LOC|OB_LOCK_ROT|OB_LOCK_SCALE, &rv3d->twdrawflag);
}
+/* could move into BLI_math however this is only useful for display/editing purposes */
+static void axis_angle_to_gimbal_axis(float gmat[3][3], float axis[3], float angle)
+{
+ /* X/Y are arbitrary axies, most importantly Z is the axis of rotation */
+
+ float cross_vec[3];
+ float quat[4];
+
+ /* this is an un-scientific method to get a vector to cross with
+ * XYZ intentionally YZX */
+ cross_vec[0]= axis[1];
+ cross_vec[1]= axis[2];
+ cross_vec[2]= axis[0];
+
+ /* X-axis */
+ cross_v3_v3v3(gmat[0], cross_vec, axis);
+ normalize_v3(gmat[0]);
+ axis_angle_to_quat(quat, axis, angle);
+ mul_qt_v3(quat, gmat[0]);
+
+ /* Y-axis */
+ axis_angle_to_quat(quat, axis, M_PI/2.0);
+ copy_v3_v3(gmat[1], gmat[0]);
+ mul_qt_v3(quat, gmat[1]);
+
+ /* Z-axis */
+ copy_v3_v3(gmat[2], axis);
+
+ normalize_m3(gmat);
+}
+
static int test_rotmode_euler(short rotmode)
{
@@ -169,10 +200,18 @@ int gimbal_axis(Object *ob, float gmat[][3])
{
bPoseChannel *pchan= get_active_posechannel(ob);
- if(pchan && test_rotmode_euler(pchan->rotmode)) {
+ if(pchan) {
float mat[3][3], tmat[3][3], obmat[3][3];
+ if(test_rotmode_euler(pchan->rotmode)) {
+ eulO_to_gimbal_axis(mat, pchan->eul, pchan->rotmode);
+ }
+ else if (pchan->rotmode == ROT_MODE_AXISANGLE) {
+ axis_angle_to_gimbal_axis(mat, pchan->rotAxis, pchan->rotAngle);
+ }
+ else { /* quat */
+ return 0;
+ }
- eulO_to_gimbal_axis(mat, pchan->eul, pchan->rotmode);
/* apply bone transformation */
mul_m3_m3m3(tmat, pchan->bone->bone_mat, mat);
@@ -201,24 +240,23 @@ int gimbal_axis(Object *ob, float gmat[][3])
}
else {
if(test_rotmode_euler(ob->rotmode)) {
-
-
- if (ob->parent)
- {
- float parent_mat[3][3], amat[3][3];
-
- eulO_to_gimbal_axis(amat, ob->rot, ob->rotmode);
- copy_m3_m4(parent_mat, ob->parent->obmat);
- normalize_m3(parent_mat);
- mul_m3_m3m3(gmat, parent_mat, amat);
- return 1;
- }
- else
- {
- eulO_to_gimbal_axis(gmat, ob->rot, ob->rotmode);
- return 1;
- }
+ eulO_to_gimbal_axis(gmat, ob->rot, ob->rotmode);
}
+ else if(ob->rotmode == ROT_MODE_AXISANGLE) {
+ axis_angle_to_gimbal_axis(gmat, ob->rotAxis, ob->rotAngle);
+ }
+ else { /* quat */
+ return 0;
+ }
+
+ if (ob->parent)
+ {
+ float parent_mat[3][3];
+ copy_m3_m4(parent_mat, ob->parent->obmat);
+ normalize_m3(parent_mat);
+ mul_m3_m3m3(gmat, parent_mat, gmat);
+ }
+ return 1;
}
}
@@ -278,7 +316,7 @@ int calc_manipulator_stats(const bContext *C)
bArmature *arm= obedit->data;
EditBone *ebo;
for (ebo= arm->edbo->first; ebo; ebo=ebo->next){
- if(ebo->layer & arm->layer && !(ebo->flag & BONE_HIDDEN_A)) {
+ if(EBONE_VISIBLE(arm, ebo)) {
if (ebo->flag & BONE_TIPSEL) {
calc_tw_center(scene, ebo->tail);
totsel++;
@@ -405,7 +443,7 @@ int calc_manipulator_stats(const bContext *C)
mul_m4_v3(ob->obmat, scene->twmax);
}
}
- else if(ob && (ob->mode & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT))) {
+ else if(ob && (ob->mode & OB_MODE_ALL_PAINT)) {
;
}
else if(ob && ob->mode & OB_MODE_PARTICLE_EDIT) {
@@ -1363,17 +1401,6 @@ static void draw_manipulator_rotate_cyl(View3D *v3d, RegionView3D *rv3d, int mov
/* ********************************************* */
-static float get_manipulator_drawsize(ARegion *ar)
-{
- RegionView3D *rv3d= ar->regiondata;
- float size = get_drawsize(ar, rv3d->twmat[3]);
-
- size*= (float)U.tw_size;
-
- return size;
-}
-
-
/* main call, does calc centers & orientation too */
/* uses global G.moving */
static int drawflags= 0xFFFF; // only for the calls below, belongs in scene...?
@@ -1421,7 +1448,7 @@ void BIF_draw_manipulator(const bContext *C)
break;
}
- mul_mat3_m4_fl(rv3d->twmat, get_manipulator_drawsize(ar));
+ mul_mat3_m4_fl(rv3d->twmat, view3d_pixel_size(rv3d, rv3d->twmat[3]) * U.tw_size * 5.0f);
}
test_manipulator_axis(C);
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index 16519bdf647..28ff095e706 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -86,33 +86,23 @@ TransformOrientation* findOrientationName(bContext *C, char *name)
return NULL;
}
-void uniqueOrientationName(bContext *C, char *name)
+static void uniqueOrientationName(bContext *C, char *name)
{
if (findOrientationName(C, name) != NULL)
{
- char tempname[64];
- int number;
- char *dot;
-
-
- number = strlen(name);
-
- if (number && isdigit(name[number-1]))
- {
- dot = strrchr(name, '.'); // last occurrence
- if (dot)
- *dot=0;
- }
-
- for (number = 1; number <= 999; number++)
- {
- sprintf(tempname, "%s.%03d", name, number);
- if (findOrientationName(C, tempname) == NULL)
- {
- BLI_strncpy(name, tempname, 32);
- break;
+ /* note: this block is used in other places, when changing logic apply to all others, search this message */
+ char tempname[sizeof(((TransformOrientation *)NULL)->name)];
+ char left[sizeof(((TransformOrientation *)NULL)->name)];
+ int number;
+ int len= BLI_split_name_num(left, &number, name);
+ do { /* nested while loop looks bad but likely it wont run most times */
+ while(BLI_snprintf(tempname, sizeof(tempname), "%s.%03d", left, number) >= sizeof(tempname)) {
+ if(len > 0) left[--len]= '\0'; /* word too long */
+ else number= 0; /* reset, must be a massive number */
}
- }
+ } while(number++, findOrientationName(C, tempname));
+
+ BLI_strncpy(name, tempname, sizeof(tempname));
}
}
@@ -893,7 +883,7 @@ int getTransformOrientation(const bContext *C, float normal[3], float plane[3],
result = ORIENTATION_EDGE;
}
}
- else if(ob && (ob->mode & (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT|OB_MODE_PARTICLE_EDIT)))
+ else if(ob && (ob->mode & (OB_MODE_ALL_PAINT|OB_MODE_PARTICLE_EDIT)))
{
}
else {
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index adaaf7c9de6..06a2db527fd 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -146,16 +146,16 @@ void drawSnapping(const struct bContext *C, TransInfo *t)
glDisable(GL_DEPTH_TEST);
- size = 0.5f * UI_GetThemeValuef(TH_VERTEX_SIZE);
+ size = 2.5f * UI_GetThemeValuef(TH_VERTEX_SIZE);
invert_m4_m4(imat, rv3d->viewmat);
for (p = t->tsnap.points.first; p; p = p->next) {
- drawcircball(GL_LINE_LOOP, p->co, size * get_drawsize(t->ar, p->co), imat);
+ drawcircball(GL_LINE_LOOP, p->co, view3d_pixel_size(rv3d, p->co) * size, imat);
}
if (t->tsnap.status & POINT_INIT) {
- drawcircball(GL_LINE_LOOP, t->tsnap.snapPoint, size * get_drawsize(t->ar, t->tsnap.snapPoint), imat);
+ drawcircball(GL_LINE_LOOP, t->tsnap.snapPoint, view3d_pixel_size(rv3d, t->tsnap.snapPoint) * size, imat);
}
/* draw normal if needed */
diff --git a/source/blender/editors/util/undo.c b/source/blender/editors/util/undo.c
index a4f661e9511..37a3a65f170 100644
--- a/source/blender/editors/util/undo.c
+++ b/source/blender/editors/util/undo.c
@@ -156,7 +156,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
if(do_glob_undo) {
if(U.uiflag & USER_GLOBALUNDO) {
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// XXX BPY_scripts_clear_pyobjects();
#endif
if(undoname)
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index d311733e945..d8c618d4d07 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -3182,6 +3182,7 @@ void ED_operatortypes_uvedit(void)
void ED_keymap_uvedit(wmKeyConfig *keyconf)
{
wmKeyMap *keymap;
+ wmKeyMapItem *kmi;
keymap= WM_keymap_find(keyconf, "UV Editor", 0, 0);
keymap->poll= ED_operator_uvedit;
@@ -3234,6 +3235,19 @@ void ED_keymap_uvedit(wmKeyConfig *keyconf)
WM_keymap_add_menu(keymap, "IMAGE_MT_uvs_snap", SKEY, KM_PRESS, KM_SHIFT, 0);
WM_keymap_add_menu(keymap, "IMAGE_MT_uvs_select_mode", TABKEY, KM_PRESS, KM_CTRL, 0);
+ /* pivot */
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", COMMAKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "space_data.uv_editor.pivot_point");
+ RNA_string_set(kmi->ptr, "value", "CENTER");
+
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", COMMAKEY, KM_PRESS, KM_CTRL, 0);
+ RNA_string_set(kmi->ptr, "data_path", "space_data.uv_editor.pivot_point");
+ RNA_string_set(kmi->ptr, "value", "MEDIAN");
+
+ kmi = WM_keymap_add_item(keymap, "WM_OT_context_set_enum", PERIODKEY, KM_PRESS, 0, 0);
+ RNA_string_set(kmi->ptr, "data_path", "space_data.uv_editor.pivot_point");
+ RNA_string_set(kmi->ptr, "value", "CURSOR");
+
ED_object_generic_keymap(keyconf, keymap, 2);
transform_keymap_for_space(keyconf, keymap, SPACE_IMAGE);
diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt
index 02a43abf098..a2bfddd96fb 100644
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@ -28,7 +28,6 @@ SET(INC
.
../blenlib
../blenkernel
- ../include
../imbuf
../makesdna
../makesrna
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c
index 90c33f68c65..7d2006a3aab 100644
--- a/source/blender/gpu/intern/gpu_buffers.c
+++ b/source/blender/gpu/intern/gpu_buffers.c
@@ -491,7 +491,11 @@ void *GPU_build_mesh_buffers(GHash *map, MVert *mvert, MFace *mface,
if(tri_data) {
for(i = 0; i < totface; ++i) {
MFace *f = mface + face_indices[i];
- int v[3] = {f->v1, f->v2, f->v3};
+ int v[3];
+
+ v[0]= f->v1;
+ v[1]= f->v2;
+ v[2]= f->v3;
for(j = 0; j < (f->v4 ? 2 : 1); ++j) {
for(k = 0; k < 3; ++k) {
diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c
index a31ec950711..d7aa7c3377d 100644
--- a/source/blender/gpu/intern/gpu_material.c
+++ b/source/blender/gpu/intern/gpu_material.c
@@ -629,10 +629,8 @@ static void shade_one_light(GPUShadeInput *shi, GPUShadeResult *shr, GPULamp *la
}
else {
if(lamp->type == LA_AREA) {
- float area[4][4], areasize;
+ float area[4][4]= {{0.0f}}, areasize= 0.0f;
- memset(&area, 0, sizeof(area));
- memset(&areasize, 0, sizeof(areasize));
mat->dynproperty |= DYN_LAMP_VEC|DYN_LAMP_CO;
GPU_link(mat, "shade_inp_area", GPU_builtin(GPU_VIEW_POSITION), GPU_dynamic_uniform(lamp->dynco), GPU_dynamic_uniform(lamp->dynvec), vn, GPU_uniform((float*)area),
GPU_uniform(&areasize), GPU_uniform(&lamp->k), &inp);
diff --git a/source/blender/ikplugin/CMakeLists.txt b/source/blender/ikplugin/CMakeLists.txt
index 61d5ff4f7fe..1c1cc27611a 100644
--- a/source/blender/ikplugin/CMakeLists.txt
+++ b/source/blender/ikplugin/CMakeLists.txt
@@ -28,7 +28,6 @@ SET(INC
../blenlib
../makesdna
../blenkernel
- ../include
../ikplugin
../../../intern/guardedalloc
../../../intern/iksolver/extern
diff --git a/source/blender/imbuf/intern/anim_movie.c b/source/blender/imbuf/intern/anim_movie.c
index 8df0d69bcfa..421ef08dc25 100644
--- a/source/blender/imbuf/intern/anim_movie.c
+++ b/source/blender/imbuf/intern/anim_movie.c
@@ -839,7 +839,15 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
}
}
+/* disable seek_by_bytes for now, since bitrates are guessed wrong!
+ also: MPEG2TS-seeking was fixed in later versions of ffmpeg, so problem
+ is somewhat fixed by now (until we add correct timecode management code...)
+*/
+#if 0
seek_by_bytes = !!(anim->pFormatCtx->iformat->flags & AVFMT_TS_DISCONT);
+#else
+ seek_by_bytes = FALSE;
+#endif
if (position != anim->curposition + 1) {
#ifdef FFMPEG_OLD_FRAME_RATE
@@ -851,12 +859,9 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
av_q2d(anim->pFormatCtx->streams[anim->videoStream]
->r_frame_rate);
#endif
- double time_base =
- av_q2d(anim->pFormatCtx->streams[anim->videoStream]
- ->time_base);
+ double pts_time_base = av_q2d(anim->pFormatCtx->streams[anim->videoStream]->time_base);
long long pos;
- long long st_time = anim->pFormatCtx
- ->streams[anim->videoStream]->start_time;
+ long long st_time = anim->pFormatCtx->start_time;
int ret;
if (seek_by_bytes) {
@@ -876,7 +881,7 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
}
if (st_time != AV_NOPTS_VALUE) {
- pos += st_time * AV_TIME_BASE * time_base;
+ pos += st_time;
}
}
@@ -891,9 +896,9 @@ static ImBuf * ffmpeg_fetchibuf(struct anim * anim, int position) {
}
pts_to_search = (long long)
- (((double) position) / time_base / frame_rate);
+ (((double) position) / pts_time_base / frame_rate);
if (st_time != AV_NOPTS_VALUE) {
- pts_to_search += st_time;
+ pts_to_search += st_time / pts_time_base/ AV_TIME_BASE;
}
pos_found = 0;
diff --git a/source/blender/imbuf/intern/cache.c b/source/blender/imbuf/intern/cache.c
index 77e01d8ebef..5650a4f9b94 100644
--- a/source/blender/imbuf/intern/cache.c
+++ b/source/blender/imbuf/intern/cache.c
@@ -82,6 +82,8 @@ typedef struct ImGlobalTileCache {
int totthread;
ThreadMutex mutex;
+
+ int initialized;
} ImGlobalTileCache;
static ImGlobalTileCache GLOBAL_CACHE;
@@ -203,6 +205,8 @@ void imb_tile_cache_init(void)
/* initialize for one thread, for places that access textures
outside of rendering (displace modifier, painting, ..) */
IMB_tile_cache_params(0, 0);
+
+ GLOBAL_CACHE.initialized = 1;
}
void imb_tile_cache_exit(void)
@@ -210,19 +214,23 @@ void imb_tile_cache_exit(void)
ImGlobalTile *gtile;
int a;
- for(gtile=GLOBAL_CACHE.tiles.first; gtile; gtile=gtile->next)
- imb_global_cache_tile_unload(gtile);
+ if(GLOBAL_CACHE.initialized) {
+ for(gtile=GLOBAL_CACHE.tiles.first; gtile; gtile=gtile->next)
+ imb_global_cache_tile_unload(gtile);
- for(a=0; ax * ibuf->y; i > 0; i--, to+=4, tof+=4) {
const float d = (BLI_frand()-0.5)*dither;
- const float col[4] = {d+tof[0], d+tof[1], d+tof[2], d+tof[3]};
+ float col[4];
+
+ col[0]= d + tof[0];
+ col[1]= d + tof[1];
+ col[2]= d + tof[2];
+ col[3]= d + tof[3];
+
to[0] = FTOCHAR(col[0]);
to[1] = FTOCHAR(col[1]);
to[2] = FTOCHAR(col[2]);
diff --git a/source/blender/makesdna/DNA_action_types.h b/source/blender/makesdna/DNA_action_types.h
index d9f0f20ad52..caba9815a8d 100644
--- a/source/blender/makesdna/DNA_action_types.h
+++ b/source/blender/makesdna/DNA_action_types.h
@@ -203,12 +203,10 @@ typedef struct bPoseChannel {
struct bPoseChannel *child; /* set on read file or rebuild pose, the 'ik' child, for b-bones */
struct ListBase iktree; /* only while evaluating pose */
- /* only while deform, stores precalculated b_bone deform mats,
- dual quaternions */
- void *b_bone_mats;
- void *dual_quat;
- void *b_bone_dual_quats;
-
+ bMotionPath *mpath; /* motion path cache for this bone */
+ struct Object *custom; /* draws custom object instead of default bone shape */
+ struct bPoseChannel *custom_tx; /* odd feature, display with another bones transform. needed in rare cases for advanced rigs, since the alternative is highly complicated - campbell */
+
/* transforms - written in by actions or transform */
float loc[3];
float size[3];
@@ -234,9 +232,6 @@ typedef struct bPoseChannel {
float iklinweight; /* weight of joint stretch constraint */
float *path; /* totpath x 3 x float */ // XXX depreceated... old animation system (armature only viz)
- bMotionPath *mpath; /* motion path cache for this bone */
- struct Object *custom; /* draws custom object instead of default bone shape */
- struct bPoseChannel *custom_tx; /* odd feature, display with another bones transform. needed in rare cases for advanced rigs, since the alternative is highly complicated - campbell */
} bPoseChannel;
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 0708698c40c..30b2503c677 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -548,12 +548,8 @@ typedef struct MeshDeformModifierData {
} MeshDeformModifierData;
typedef enum {
- eParticleSystemFlag_Loaded = (1<<0),
- eParticleSystemFlag_Pars = (1<<1),
- eParticleSystemFlag_FromCurve = (1<<2),
- eParticleSystemFlag_DM_changed = (1<<3),
- eParticleSystemFlag_Disabled = (1<<4),
- eParticleSystemFlag_psys_updated = (1<<5),
+ eParticleSystemFlag_Pars = (1<<0),
+ eParticleSystemFlag_psys_updated = (1<<1),
} ParticleSystemModifierFlag;
typedef struct ParticleSystemModifierData {
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index 60b4f6a51b6..a5e8e1545b0 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -557,6 +557,9 @@ typedef enum ObjectMode {
OB_MODE_POSE = 64
} ObjectMode;
+/* any mode where the brush system is used */
+#define OB_MODE_ALL_PAINT (OB_MODE_SCULPT|OB_MODE_VERTEX_PAINT|OB_MODE_WEIGHT_PAINT|OB_MODE_TEXTURE_PAINT)
+
#define MAX_DUPLI_RECUR 8
#ifdef __cplusplus
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 0e2eea0b942..0ca31983ac5 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -157,7 +157,7 @@ typedef struct SpaceSeq {
} SpaceSeq;
typedef struct FileSelectParams {
- char title[24]; /* title, also used for the text of the execute button */
+ char title[32]; /* title, also used for the text of the execute button */
char dir[240]; /* directory */
char file[80]; /* file */
char renamefile[80];
@@ -241,34 +241,30 @@ typedef struct SpaceImage {
ListBase regionbase; /* storage of regions for inactive spaces */
int spacetype;
- float blockscale;
- short blockhandler[8];
-
+ int flag;
+
struct Image *image;
struct ImageUser iuser;
+ struct CurveMapping *cumap;
- struct CurveMapping *cumap;
- short menunr, imanr, pad2;
+ struct Scopes scopes; /* histogram waveform and vectorscope */
+ struct Histogram sample_line_hist; /* sample line histogram */
+
+ struct bGPdata *gpd; /* grease pencil data */
+
+ float cursor[2]; /* UV editor 2d cursor */
+ float xof, yof; /* user defined offset, image is centered */
+ float zoom; /* user defined zoom level */
+ float centx, centy; /* storage for offset while render drawing */
+
short curtile; /* the currently active tile of the image when tile is enabled, is kept in sync with the active faces tile */
- int flag;
- short imtypenr, lock;
- short pin, pad3;
+ short imtypenr;
+ short lock;
+ short pin;
char dt_uv; /* UV draw type */
char sticky; /* sticky selection type */
char dt_uvstretch;
char around;
- float cursor[2]; /* UV editor 2d cursor */
-
- float xof, yof; /* user defined offset, image is centered */
- float zoom, pad4; /* user defined zoom level */
- float centx, centy; /* storage for offset while render drawing */
-
- struct bGPdata *gpd; /* grease pencil data */
-
- struct Scopes scopes; /* histogram waveform and vectorscope */
-
- struct Histogram sample_line_hist; /* sample line histogram */
-
} SpaceImage;
typedef struct SpaceNla {
diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h
index 9de5ad198a6..307e111abe6 100644
--- a/source/blender/makesdna/DNA_view3d_types.h
+++ b/source/blender/makesdna/DNA_view3d_types.h
@@ -160,7 +160,7 @@ typedef struct View3D {
* The drawing mode for the 3d display. Set to OB_WIRE, OB_SOLID,
* OB_SHADED or OB_TEXTURE */
short drawtype;
- short pad2;
+ short ob_centre_cursor; /* optional bool for 3d cursor to define center */
short scenelock, around, pad3;
short flag, flag2;
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index 58e4101421f..10c1946416d 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -698,6 +698,7 @@ int RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop);
void RNA_property_update(struct bContext *C, PointerRNA *ptr, PropertyRNA *prop);
void RNA_property_update_main(struct Main *bmain, struct Scene *scene, PointerRNA *ptr, PropertyRNA *prop);
+int RNA_property_update_check(struct PropertyRNA *prop);
/* Property Data */
diff --git a/source/blender/makesrna/RNA_define.h b/source/blender/makesrna/RNA_define.h
index 16ca718e335..dc31573e8dd 100644
--- a/source/blender/makesrna/RNA_define.h
+++ b/source/blender/makesrna/RNA_define.h
@@ -132,6 +132,7 @@ void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname,
void RNA_def_property_flag(PropertyRNA *prop, int flag);
void RNA_def_property_clear_flag(PropertyRNA *prop, int flag);
+void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype);
void RNA_def_property_array(PropertyRNA *prop, int length);
void RNA_def_property_multi_array(PropertyRNA *prop, int dimension, int length[]);
void RNA_def_property_range(PropertyRNA *prop, double min, double max);
diff --git a/source/blender/makesrna/SConscript b/source/blender/makesrna/SConscript
index ef2035cb5a2..e32f453b67e 100644
--- a/source/blender/makesrna/SConscript
+++ b/source/blender/makesrna/SConscript
@@ -47,13 +47,13 @@ if env['WITH_BF_LCMS']:
incs += ' ' + env['BF_LCMS_INC']
if env['WITH_BF_GAMEENGINE']:
- defs.append('GAMEBLENDER=1')
+ defs.append('WITH_GAMEENGINE')
if env['BF_UNIT_TEST']:
defs.append('UNIT_TEST')
-if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+if env['WITH_BF_PYTHON']:
+ defs.append('WITH_PYTHON')
if env['OURPLATFORM'] == 'linux2':
cflags='-pthread'
diff --git a/source/blender/makesrna/intern/CMakeLists.txt b/source/blender/makesrna/intern/CMakeLists.txt
index 50704b4c45a..d430fd405fc 100644
--- a/source/blender/makesrna/intern/CMakeLists.txt
+++ b/source/blender/makesrna/intern/CMakeLists.txt
@@ -27,12 +27,16 @@
# Generated code has some unused vars we can ignore.
REMOVE_STRICT_FLAGS()
+MESSAGE(STATUS "Configuring makesrna")
+
FILE(GLOB DEFSRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*.c")
FILE(GLOB APISRC RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "*_api.c")
LIST(REMOVE_ITEM DEFSRC rna_access.c rna_define.c makesrna.c)
LIST(REMOVE_ITEM DEFSRC ${APISRC})
STRING(REGEX REPLACE "rna_([a-zA-Z0-9_-]*).c" "${CMAKE_CURRENT_BINARY_DIR}/rna_\\1_gen.c" GENSRC "${DEFSRC}")
+SET_SOURCE_FILES_PROPERTIES(GENSRC PROPERTIES GENERATED true)
+
SET(SRC
makesrna.c
@@ -62,16 +66,16 @@ INCLUDE_DIRECTORIES(
FILE(GLOB INC_FILES ../*.h ../../makesdna/*.h)
-IF(NOT WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
-ENDIF(NOT WITH_PYTHON)
+IF(WITH_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
+ENDIF(WITH_PYTHON)
IF(WIN32)
LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
IF(WITH_GAMEENGINE)
- ADD_DEFINITIONS(-DGAMEBLENDER)
+ ADD_DEFINITIONS(-DWITH_GAMEENGINE)
ENDIF(WITH_GAMEENGINE)
IF(WITH_IMAGE_OPENEXR)
@@ -148,5 +152,3 @@ ADD_CUSTOM_COMMAND(
# Build bf_rna
SET(SRC rna_access.c ${GENSRC})
BLENDERLIB(bf_rna "${SRC}" "${INC}")
-
-MESSAGE(STATUS "Configuring makesrna")
diff --git a/source/blender/makesrna/intern/SConscript b/source/blender/makesrna/intern/SConscript
index ecee3f94796..b8e30bcfe98 100644
--- a/source/blender/makesrna/intern/SConscript
+++ b/source/blender/makesrna/intern/SConscript
@@ -6,7 +6,7 @@ def normpath(path):
return os.path.abspath(os.path.normpath(path))
Import ('env')
-cflags = ['-Wall']
+cflags = [] #['-Wall']
defines = []
root_build_dir=normpath(env['BF_BUILDDIR'])
@@ -68,7 +68,7 @@ if env['WITH_BF_LCMS']:
defs.append('WITH_LCMS')
if env['WITH_BF_GAMEENGINE']:
- defs.append('GAMEBLENDER=1')
+ defs.append('WITH_GAMEENGINE')
if env['WITH_BF_FFTW3']:
defs.append('FFTW3=1')
@@ -85,8 +85,8 @@ if env['WITH_BF_JACK']:
if env['BF_UNIT_TEST']:
defs.append('UNIT_TEST')
-if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+if env['WITH_BF_PYTHON']:
+ defs.append('WITH_PYTHON')
if env['OURPLATFORM'] == 'linux2':
cflags='-pthread'
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index 6cb5858648a..fe82c6e06e1 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -101,11 +101,10 @@ void RNA_main_pointer_create(struct Main *main, PointerRNA *r_ptr)
void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
{
- PointerRNA tmp;
StructRNA *type, *idtype= NULL;
if(id) {
- memset(&tmp, 0, sizeof(tmp));
+ PointerRNA tmp= {{0}};
tmp.data= id;
idtype= rna_ID_refine(&tmp);
@@ -126,11 +125,10 @@ void RNA_id_pointer_create(ID *id, PointerRNA *r_ptr)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
{
- PointerRNA tmp;
StructRNA *idtype= NULL;
if(id) {
- memset(&tmp, 0, sizeof(tmp));
+ PointerRNA tmp= {{0}};
tmp.data= id;
idtype= rna_ID_refine(&tmp);
}
@@ -1268,6 +1266,14 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR
}
+/* must keep in sync with 'rna_property_update'
+ * note, its possible this returns a false positive in the case of PROP_CONTEXT_UPDATE
+ * but this isnt likely to be a performance problem. */
+int RNA_property_update_check(PropertyRNA *prop)
+{
+ return (prop->magic != RNA_MAGIC || prop->update || prop->noteflag);
+}
+
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
{
rna_property_update(C, CTX_data_main(C), CTX_data_scene(C), ptr, prop);
@@ -1966,9 +1972,7 @@ PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
return RNA_property_pointer_get(ptr, prop);
}
else {
- PointerRNA result;
-
- memset(&result, 0, sizeof(result));
+ PointerRNA result= {{0}};
return result;
}
}
diff --git a/source/blender/makesrna/intern/rna_actuator.c b/source/blender/makesrna/intern/rna_actuator.c
index a4becb87e28..49df68d6681 100644
--- a/source/blender/makesrna/intern/rna_actuator.c
+++ b/source/blender/makesrna/intern/rna_actuator.c
@@ -41,7 +41,7 @@ EnumPropertyItem actuator_type_items[] ={
{ACT_CAMERA, "CAMERA", 0, "Camera", ""},
{ACT_CONSTRAINT, "CONSTRAINT", 0, "Constraint", ""},
{ACT_EDIT_OBJECT, "EDIT_OBJECT", 0, "Edit Object", ""},
- {ACT_IPO, "F-Curve", 0, "F-Curve", ""},
+ {ACT_IPO, "FCURVE", 0, "F-Curve", ""},
{ACT_2DFILTER, "FILTER_2D", 0, "Filter 2D", ""},
{ACT_GAME, "GAME", 0, "Game", ""},
{ACT_MESSAGE, "MESSAGE", 0, "Message", ""},
@@ -1384,16 +1384,16 @@ static void rna_def_random_actuator(BlenderRNA *brna)
PropertyRNA *prop;
static EnumPropertyItem prop_distribution_items[] ={
- {ACT_RANDOM_BOOL_CONST, "RESTART", 0, "Bool Constant", ""},
- {ACT_RANDOM_BOOL_UNIFORM, "SET", 0, "Bool Uniform", ""},
- {ACT_RANDOM_BOOL_BERNOUILLI, "CAMERA", 0, "Bool Bernoulli", ""},
- {ACT_RANDOM_INT_CONST, "ADDFRONT", 0, "Int Constant", ""},
- {ACT_RANDOM_INT_UNIFORM, "ADDBACK", 0, "Int Uniform", ""},
- {ACT_RANDOM_INT_POISSON, "REMOVE", 0, "Int Poisson", ""},
- {ACT_RANDOM_FLOAT_CONST, "SUSPEND", 0, "Float Constant", ""},
- {ACT_RANDOM_FLOAT_UNIFORM, "RESUME", 0, "Float Uniform", ""},
- {ACT_RANDOM_FLOAT_NORMAL, "RESUME", 0, "Float Normal", ""},
- {ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL, "RESUME", 0, "Float Neg. Exp.", ""},
+ {ACT_RANDOM_BOOL_CONST, "BOOL_CONSTANT", 0, "Bool Constant", ""},
+ {ACT_RANDOM_BOOL_UNIFORM, "BOOL_UNIFORM", 0, "Bool Uniform", ""},
+ {ACT_RANDOM_BOOL_BERNOUILLI, "BOOL_BERNOUILLI", 0, "Bool Bernouilli", ""},
+ {ACT_RANDOM_INT_CONST, "INT_CONSTANT", 0, "Int Constant", ""},
+ {ACT_RANDOM_INT_UNIFORM, "INT_UNIFORM", 0, "Int Uniform", ""},
+ {ACT_RANDOM_INT_POISSON, "INT_POISSON", 0, "Int Poisson", ""},
+ {ACT_RANDOM_FLOAT_CONST, "FLOAT_CONSTANT", 0, "Float Constant", ""},
+ {ACT_RANDOM_FLOAT_UNIFORM, "FLOAT_UNIFORM", 0, "Float Uniform", ""},
+ {ACT_RANDOM_FLOAT_NORMAL, "FLOAT_NORMAL", 0, "Float Normal", ""},
+ {ACT_RANDOM_FLOAT_NEGATIVE_EXPONENTIAL, "FLOAT_NEGATIVE_EXPONENTIAL", 0, "Float Neg. Exp.", ""},
{0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "RandomActuator", "Actuator");
diff --git a/source/blender/makesrna/intern/rna_controller.c b/source/blender/makesrna/intern/rna_controller.c
index ee0707ad0ae..73ac46e8e78 100644
--- a/source/blender/makesrna/intern/rna_controller.c
+++ b/source/blender/makesrna/intern/rna_controller.c
@@ -207,7 +207,6 @@ void RNA_def_controller(BlenderRNA *brna)
prop= RNA_def_property(srna, "expression", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "str");
- RNA_def_property_string_maxlength(prop, 127);
RNA_def_property_ui_text(prop, "Expression", "");
RNA_def_property_update(prop, NC_LOGIC, NULL);
diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c
index 7983b8f8a7f..c7802de9ebb 100644
--- a/source/blender/makesrna/intern/rna_curve.c
+++ b/source/blender/makesrna/intern/rna_curve.c
@@ -844,7 +844,7 @@ static void rna_def_font(BlenderRNA *brna, StructRNA *srna)
/* strings */
prop= RNA_def_property(srna, "family", PROP_STRING, PROP_NONE);
- RNA_def_property_string_maxlength(prop, 21);
+ RNA_def_property_string_maxlength(prop, (sizeof((ID *)NULL)->name)-2);
RNA_def_property_ui_text(prop, "Object Font", "Use Blender Objects as font characters. Give font objects a common name followed by the character it represents, eg. familya, familyb etc, and turn on Verts Duplication");
RNA_def_property_update(prop, 0, "rna_Curve_update_data");
diff --git a/source/blender/makesrna/intern/rna_define.c b/source/blender/makesrna/intern/rna_define.c
index 0a8e0bad7f0..85f31e245d4 100644
--- a/source/blender/makesrna/intern/rna_define.c
+++ b/source/blender/makesrna/intern/rna_define.c
@@ -1005,6 +1005,11 @@ void RNA_def_property_clear_flag(PropertyRNA *prop, int flag)
prop->flag &= ~flag;
}
+void RNA_def_property_subtype(PropertyRNA *prop, PropertySubType subtype)
+{
+ prop->subtype= subtype;
+}
+
void RNA_def_property_array(PropertyRNA *prop, int length)
{
StructRNA *srna= DefRNA.laststruct;
@@ -2235,8 +2240,11 @@ PropertyRNA *RNA_def_float_matrix(StructOrFunctionRNA *cont_, const char *identi
{
ContainerRNA *cont= cont_;
PropertyRNA *prop;
- int length[2]= {rows, columns};
-
+ int length[2];
+
+ length[0]= rows;
+ length[1]= columns;
+
prop= RNA_def_property(cont, identifier, PROP_FLOAT, PROP_MATRIX);
RNA_def_property_multi_array(prop, 2, length);
if(default_value) RNA_def_property_float_array_default(prop, default_value);
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index 92c860a8074..62e7b516e9e 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -171,9 +171,19 @@ static void rna_Image_file_format_set(PointerRNA *ptr, int value)
{
Image *image= (Image*)ptr->data;
if(BKE_imtype_is_movie(value) == 0) { /* should be able to throw an error here */
- ImBuf *ibuf= BKE_image_get_ibuf(image, NULL);
+ ImBuf *ibuf;
+ int ftype= BKE_imtype_to_ftype(value);
+
+ /*
+ ibuf= BKE_image_get_ibuf(image, NULL);
if(ibuf)
- ibuf->ftype= BKE_imtype_to_ftype(value);
+ ibuf->ftype= ftype;
+ */
+
+ /* to be safe change all buffer file types */
+ for(ibuf= image->ibufs.first; ibuf; ibuf= ibuf->next) {
+ ibuf->ftype= ftype;
+ }
}
}
diff --git a/source/blender/makesrna/intern/rna_image_api.c b/source/blender/makesrna/intern/rna_image_api.c
index 74d61101273..6e495c5db8e 100644
--- a/source/blender/makesrna/intern/rna_image_api.c
+++ b/source/blender/makesrna/intern/rna_image_api.c
@@ -73,9 +73,17 @@ static void rna_Image_save_render(Image *image, bContext *C, ReportList *reports
if (ibuf == NULL) {
BKE_reportf(reports, RPT_ERROR, "Couldn't acquire buffer from image");
}
-
- if (!BKE_write_ibuf(NULL, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality)) {
- BKE_reportf(reports, RPT_ERROR, "Couldn't write image: %s", path);
+ else {
+ /* temp swap out the color */
+ const unsigned char imb_depth_back= ibuf->depth;
+ const float dither_back= ibuf->dither;
+ ibuf->depth= scene->r.planes;
+ ibuf->dither= scene->r.dither_intensity;
+ if (!BKE_write_ibuf(NULL, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality)) {
+ BKE_reportf(reports, RPT_ERROR, "Couldn't write image: %s", path);
+ }
+ ibuf->depth= imb_depth_back;
+ ibuf->dither= dither_back;
}
BKE_image_release_ibuf(image, lock);
diff --git a/source/blender/makesrna/intern/rna_material.c b/source/blender/makesrna/intern/rna_material.c
index bf4a958eeb4..8557f115737 100644
--- a/source/blender/makesrna/intern/rna_material.c
+++ b/source/blender/makesrna/intern/rna_material.c
@@ -695,8 +695,8 @@ static void rna_def_material_colors(StructRNA *srna)
{MA_RAMP_SAT, "SATURATION", 0, "Saturation", ""},
{MA_RAMP_VAL, "VALUE", 0, "Value", ""},
{MA_RAMP_COLOR, "COLOR", 0, "Color", ""},
- {MA_RAMP_SOFT, "SOFT LIGHT", 0, "Soft Light", ""},
- {MA_RAMP_LINEAR, "LINEAR LIGHT", 0, "Linear Light", ""},
+ {MA_RAMP_SOFT, "SOFT_LIGHT", 0, "Soft Light", ""},
+ {MA_RAMP_LINEAR, "LINEAR_LIGHT", 0, "Linear Light", ""},
{0, NULL, 0, NULL, NULL}};
static EnumPropertyItem prop_ramp_input_items[] = {
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index e83a17cc277..7fc07d6c193 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -811,7 +811,7 @@ static void rna_def_modifier_decimate(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "DecimateModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_DECIM);
- prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_PERCENTAGE);
+ prop= RNA_def_property(srna, "ratio", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "percent");
RNA_def_property_range(prop, 0, 1);
RNA_def_property_ui_range(prop, 0, 1, 1, 2);
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index c29ad0d9adf..599aa4abc91 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -143,7 +143,8 @@ static void rna_Object_internal_update(Main *bmain, Scene *scene, PointerRNA *pt
static void rna_Object_matrix_world_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
- object_apply_mat4(ptr->id.data, ((Object *)ptr->id.data)->obmat);
+ /* dont use compat so we get pradictable rotation */
+ object_apply_mat4(ptr->id.data, ((Object *)ptr->id.data)->obmat, FALSE);
rna_Object_internal_update(bmain, scene, ptr);
}
@@ -177,7 +178,8 @@ static void rna_Object_matrix_local_set(PointerRNA *ptr, const float values[16])
copy_m4_m4(ob->obmat, (float(*)[4])values);
}
- object_apply_mat4(ob, ob->obmat);
+ /* dont use compat so we get pradictable rotation */
+ object_apply_mat4(ob, ob->obmat, FALSE);
}
void rna_Object_internal_update_data(Main *bmain, Scene *scene, PointerRNA *ptr)
diff --git a/source/blender/makesrna/intern/rna_pose.c b/source/blender/makesrna/intern/rna_pose.c
index e4a3be023ca..b4a132dd1ec 100644
--- a/source/blender/makesrna/intern/rna_pose.c
+++ b/source/blender/makesrna/intern/rna_pose.c
@@ -550,7 +550,7 @@ static void rna_PoseChannel_matrix_local_get(PointerRNA *ptr, float *values)
static void rna_PoseChannel_matrix_local_set(PointerRNA *ptr, const float *values)
{
bPoseChannel *pchan= (bPoseChannel*)ptr->data;
- pchan_apply_mat4(pchan, (float (*)[4])values);
+ pchan_apply_mat4(pchan, (float (*)[4])values, FALSE); /* no compat for pradictable result */
}
#else
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index e6b86ae8766..ae965b237cd 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -47,7 +47,7 @@
static RenderEngineType internal_render_type = {
NULL, NULL, "BLENDER_RENDER", "Blender Render", RE_INTERNAL, NULL, {NULL, NULL, NULL, NULL}};
-#if GAMEBLENDER == 1
+#ifdef WITH_GAMEENGINE
static RenderEngineType internal_game_type = {
NULL, NULL, "BLENDER_GAME", "Blender Game", RE_INTERNAL|RE_GAME, NULL, {NULL, NULL, NULL, NULL}};
#endif
@@ -57,7 +57,7 @@ ListBase R_engines = {NULL, NULL};
void RE_engines_init()
{
BLI_addtail(&R_engines, &internal_render_type);
-#if GAMEBLENDER == 1
+#ifdef WITH_GAMEENGINE
BLI_addtail(&R_engines, &internal_game_type);
#endif
}
diff --git a/source/blender/makesrna/intern/rna_scene_api.c b/source/blender/makesrna/intern/rna_scene_api.c
index 800922ceba0..4b5edb5c6e9 100644
--- a/source/blender/makesrna/intern/rna_scene_api.c
+++ b/source/blender/makesrna/intern/rna_scene_api.c
@@ -96,8 +96,9 @@ void RNA_api_scene_render(StructRNA *srna)
func= RNA_def_function(srna, "frame_path", "rna_SceneRender_get_frame_path");
RNA_def_function_ui_description(func, "Return the absolute path to the filename to be written for a given frame.");
parm= RNA_def_int(func, "frame", INT_MIN, INT_MIN, INT_MAX, "", "Frame number to use, if unset the current frame will be used.", MINAFRAME, MAXFRAME);
- parm= RNA_def_string(func, "name", "", FILE_MAX, "File Name", "the resulting filename from the scenes render settings.");
+ parm= RNA_def_string(func, "filepath", "", FILE_MAX, "File Path", "the resulting filepath from the scenes render settings.");
RNA_def_property_flag(parm, PROP_THICK_WRAP); /* needed for string return value */
+ RNA_def_property_subtype(parm, PROP_FILEPATH); /* allow non utf8 */
RNA_def_function_output(func, parm);
}
diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c
index 3b83ec2d3ad..8f83e0b39a4 100644
--- a/source/blender/makesrna/intern/rna_sculpt_paint.c
+++ b/source/blender/makesrna/intern/rna_sculpt_paint.c
@@ -162,8 +162,19 @@ static int rna_Brush_mode_poll(PointerRNA *ptr, PointerRNA value)
Scene *scene= (Scene *)ptr->id.data;
Object *ob = OBACT;
Brush *brush= value.id.data;
- return ob->mode & brush->ob_mode;
+
+ /* weak, for object painting we need to check against the object mode
+ * but for 2D view image painting we always want texture brushes
+ * this is not quite correct since you could be in object weightpaint
+ * mode at the same time as the 2D image view, but for now its *good enough* */
+ if(ob && ob->mode & OB_MODE_ALL_PAINT) {
+ return ob->mode & brush->ob_mode;
+ }
+ else {
+ return OB_MODE_TEXTURE_PAINT & brush->ob_mode;
+ }
}
+
#else
static void rna_def_paint(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_sensor.c b/source/blender/makesrna/intern/rna_sensor.c
index 6dddb042533..a1e25207f1f 100644
--- a/source/blender/makesrna/intern/rna_sensor.c
+++ b/source/blender/makesrna/intern/rna_sensor.c
@@ -491,7 +491,7 @@ static void rna_def_armature_sensor(BlenderRNA *brna)
{SENS_ARM_LIN_ERROR_BELOW, "LINERRORBELOW", 0, "Lin error below", ""},
{SENS_ARM_LIN_ERROR_ABOVE, "LINERRORABOVE", 0, "Lin error above", ""},
{SENS_ARM_ROT_ERROR_BELOW, "ROTERRORBELOW", 0, "Rot error below", ""},
- {SENS_ARM_ROT_ERROR_ABOVE, "ROTERRORBELOW", 0, "Rot error above", ""},
+ {SENS_ARM_ROT_ERROR_ABOVE, "ROTERRORABOVE", 0, "Rot error above", ""},
{0, NULL, 0, NULL, NULL}};
srna= RNA_def_struct(brna, "ArmatureSensor", "Sensor");
diff --git a/source/blender/makesrna/intern/rna_sequencer.c b/source/blender/makesrna/intern/rna_sequencer.c
index 923f4560532..681de0dc792 100644
--- a/source/blender/makesrna/intern/rna_sequencer.c
+++ b/source/blender/makesrna/intern/rna_sequencer.c
@@ -119,7 +119,7 @@ static void rna_Sequence_start_frame_set(PointerRNA *ptr, int value)
Sequence *seq= (Sequence*)ptr->data;
Scene *scene= (Scene*)ptr->id.data;
- seq->start= value;
+ seq_translate(scene, seq, value - seq->start);
rna_Sequence_frame_change_update(scene, seq);
}
@@ -502,6 +502,12 @@ static void rna_Sequence_attenuation_set(PointerRNA *ptr, float value)
}
+static int rna_Sequence_input_count_get(PointerRNA *ptr)
+{
+ Sequence *seq= (Sequence*)(ptr->data);
+
+ return get_sequence_effect_num_inputs(seq->type);
+}
/*static void rna_SoundSequence_filename_set(PointerRNA *ptr, const char *value)
{
Sequence *seq= (Sequence*)(ptr->data);
@@ -985,6 +991,24 @@ static void rna_def_sequence(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Speed factor", "Multiply the current speed of the sequence with this number or remap current frame to this frame");
RNA_def_property_update(prop, NC_SCENE|ND_SEQUENCER, "rna_Sequence_update");
+ /* effect strip inputs */
+
+ prop= RNA_def_property(srna, "input_count", PROP_INT, PROP_UNSIGNED);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_int_funcs(prop, "rna_Sequence_input_count_get", NULL, NULL);
+
+ prop= RNA_def_property(srna, "input_1", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "seq1");
+ RNA_def_property_ui_text(prop, "Input 1", "First input for the effect strip");
+
+ prop= RNA_def_property(srna, "input_2", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "seq2");
+ RNA_def_property_ui_text(prop, "Input 2", "Second input for the effect strip");
+
+ prop= RNA_def_property(srna, "input_3", PROP_POINTER, PROP_NONE);
+ RNA_def_property_pointer_sdna(prop, NULL, "seq1");
+ RNA_def_property_ui_text(prop, "Input 3", "Third input for the effect strip");
+
RNA_api_sequence_strip(srna);
}
diff --git a/source/blender/makesrna/intern/rna_smoke.c b/source/blender/makesrna/intern/rna_smoke.c
index 53f27bc06fb..11b00e1c77f 100644
--- a/source/blender/makesrna/intern/rna_smoke.c
+++ b/source/blender/makesrna/intern/rna_smoke.c
@@ -33,6 +33,7 @@
#include "BKE_smoke.h"
#include "DNA_modifier_types.h"
+#include "DNA_object_force.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_smoke_types.h"
@@ -64,6 +65,11 @@ static void rna_Smoke_reset(Main *bmain, Scene *scene, PointerRNA *ptr)
smokeModifier_reset(settings->smd);
+ if(settings->smd && settings->smd->domain) {
+ settings->point_cache[0]->flag |= PTCACHE_OUTDATED;
+ settings->point_cache[1]->flag |= PTCACHE_OUTDATED;
+ }
+
rna_Smoke_update(bmain, scene, ptr);
}
@@ -73,6 +79,11 @@ static void rna_Smoke_reset_dependancy(Main *bmain, Scene *scene, PointerRNA *pt
smokeModifier_reset(settings->smd);
+ if(settings->smd && settings->smd->domain) {
+ settings->smd->domain->point_cache[0]->flag |= PTCACHE_OUTDATED;
+ settings->smd->domain->point_cache[1]->flag |= PTCACHE_OUTDATED;
+ }
+
rna_Smoke_dependency_update(bmain, scene, ptr);
}
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index 70ccd4f8a6e..80a053c3c99 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -1008,12 +1008,17 @@ static void rna_def_space_view3d(BlenderRNA *brna)
prop= RNA_def_property(srna, "lock_object", PROP_POINTER, PROP_NONE);
RNA_def_property_flag(prop, PROP_EDITABLE);
RNA_def_property_pointer_sdna(prop, NULL, "ob_centre");
- RNA_def_property_ui_text(prop, "Lock Object", "3D View center is locked to this object's position");
+ RNA_def_property_ui_text(prop, "Lock to Object", "3D View center is locked to this object's position");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
prop= RNA_def_property(srna, "lock_bone", PROP_STRING, PROP_NONE);
RNA_def_property_string_sdna(prop, NULL, "ob_centre_bone");
- RNA_def_property_ui_text(prop, "Lock Bone", "3D View center is locked to this bone's position");
+ RNA_def_property_ui_text(prop, "Lock to Bone", "3D View center is locked to this bone's position");
+ RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
+
+ prop= RNA_def_property(srna, "lock_cursor", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "ob_centre_cursor", 1);
+ RNA_def_property_ui_text(prop, "Lock to Cursor", "3D View center is locked to the cursor's position");
RNA_def_property_update(prop, NC_SPACE|ND_SPACE_VIEW3D, NULL);
prop= RNA_def_property(srna, "viewport_shade", PROP_ENUM, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_texture.c b/source/blender/makesrna/intern/rna_texture.c
index 567166fd15f..4b5b450a620 100644
--- a/source/blender/makesrna/intern/rna_texture.c
+++ b/source/blender/makesrna/intern/rna_texture.c
@@ -429,8 +429,8 @@ static void rna_def_mtex(BlenderRNA *brna)
{MTEX_BLEND_SAT, "SATURATION", 0, "Saturation", ""},
{MTEX_BLEND_VAL, "VALUE", 0, "Value", ""},
{MTEX_BLEND_COLOR, "COLOR", 0, "Color", ""},
- {MTEX_SOFT_LIGHT, "SOFT LIGHT", 0, "Soft Light", ""},
- {MTEX_LIN_LIGHT , "LINEAR LIGHT", 0, "Linear Light", ""},
+ {MTEX_SOFT_LIGHT, "SOFT_LIGHT", 0, "Soft Light", ""},
+ {MTEX_LIN_LIGHT , "LINEAR_LIGHT", 0, "Linear Light", ""},
{0, NULL, 0, NULL, NULL}};
static EnumPropertyItem output_node_items[] = {
diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c
index a230a51e792..2e4c6e5a7b7 100644
--- a/source/blender/makesrna/intern/rna_ui_api.c
+++ b/source/blender/makesrna/intern/rna_ui_api.c
@@ -65,11 +65,15 @@ static PointerRNA rna_uiItemO(uiLayout *layout, char *opname, char *name, int ic
#else
-#define DEF_ICON(name) {name, (#name)+5, 0, (#name)+5, ""},
+#define DEF_ICON_BLANK_SKIP
+#define DEF_ICON(name) {ICON_##name, (#name), 0, (#name), ""},
+#define DEF_VICO(name) {VICO_##name, (#name), 0, (#name), ""},
static EnumPropertyItem icon_items[] = {
#include "UI_icons.h"
{0, NULL, 0, NULL, NULL}};
+#undef DEF_ICON_BLANK_SKIP
#undef DEF_ICON
+#undef DEF_VICO
static void api_ui_item_common(FunctionRNA *func)
{
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index b00afa73ca9..97bf19f019a 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -33,6 +33,7 @@
#include "DNA_space_types.h"
#include "DNA_userdef_types.h"
#include "DNA_brush_types.h"
+#include "DNA_view3d_types.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -47,6 +48,7 @@
#include "BKE_DerivedMesh.h"
#include "BKE_depsgraph.h"
#include "DNA_object_types.h"
+#include "DNA_screen_types.h"
#include "GPU_draw.h"
#include "BKE_global.h"
@@ -58,6 +60,34 @@ static void rna_userdef_update(Main *bmain, Scene *scene, PointerRNA *ptr)
WM_main_add_notifier(NC_WINDOW, NULL);
}
+static void rna_userdef_show_manipulator_update(Main *bmain, Scene *scene, PointerRNA *ptr)
+{
+ UserDef *userdef = (UserDef *)ptr->data;
+
+ /* lame, loop over all views and set */
+ bScreen *sc;
+ ScrArea *sa;
+ SpaceLink *sl;
+
+ /* from scene copy to the other views */
+ for(sc=bmain->screen.first; sc; sc=sc->id.next) {
+ for(sa=sc->areabase.first; sa; sa=sa->next) {
+ for(sl=sa->spacedata.first; sl; sl=sl->next) {
+ if(sl->spacetype==SPACE_VIEW3D) {
+ View3D *v3d= (View3D *)sl;
+ if(userdef->tw_flag & V3D_USE_MANIPULATOR)
+ v3d->twflag |= V3D_USE_MANIPULATOR;
+ else
+ v3d->twflag &= ~V3D_USE_MANIPULATOR;
+ }
+ }
+ }
+ }
+
+ rna_userdef_update(bmain, scene, ptr);
+}
+
+
static void rna_userdef_script_autoexec_update(Main *bmain, Scene *scene, PointerRNA *ptr)
{
UserDef *userdef = (UserDef*)ptr->data;
@@ -2008,9 +2038,9 @@ static void rna_def_userdef_view(BlenderRNA *brna)
/* 3D transform widget */
prop= RNA_def_property(srna, "show_manipulator", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "tw_flag", 1);
+ RNA_def_property_boolean_sdna(prop, NULL, "tw_flag", V3D_USE_MANIPULATOR);
RNA_def_property_ui_text(prop, "Manipulator", "Use 3D transform manipulator");
- RNA_def_property_update(prop, 0, "rna_userdef_update");
+ RNA_def_property_update(prop, 0, "rna_userdef_show_manipulator_update");
prop= RNA_def_property(srna, "manipulator_size", PROP_INT, PROP_NONE);
RNA_def_property_int_sdna(prop, NULL, "tw_size");
@@ -2733,11 +2763,11 @@ static void rna_def_userdef_filepaths(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Temporary Directory", "The directory for storing temporary save files");
RNA_def_property_update(prop, 0, "rna_userdef_temp_update");
- prop= RNA_def_property(srna, "image_editor", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "image_editor", PROP_STRING, PROP_FILEPATH);
RNA_def_property_string_sdna(prop, NULL, "image_editor");
RNA_def_property_ui_text(prop, "Image Editor", "Path to an image editor");
- prop= RNA_def_property(srna, "animation_player", PROP_STRING, PROP_DIRPATH);
+ prop= RNA_def_property(srna, "animation_player", PROP_STRING, PROP_FILEPATH);
RNA_def_property_string_sdna(prop, NULL, "anim_player");
RNA_def_property_ui_text(prop, "Animation Player", "Path to a custom animation/frame sequence player");
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 1bc22b7af25..f8c262dff43 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -649,7 +649,7 @@ static void rna_wmClipboard_set(PointerRNA *ptr, const char *value)
WM_clipboard_text_set((void *) value, FALSE);
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
static void rna_Operator_unregister(const bContext *C, StructRNA *type)
{
char *idname;
@@ -952,7 +952,7 @@ static StructRNA *rna_MacroOperator_register(const bContext *C, ReportList *repo
return dummyot.ext.srna;
}
-#endif /* DISABLE_PYTHON */
+#endif /* WITH_PYTHON */
static StructRNA* rna_Operator_refine(PointerRNA *opr)
{
@@ -1061,7 +1061,7 @@ static void rna_def_operator(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Operator", "Storage of an operator being executed, or registered after execution");
RNA_def_struct_sdna(srna, "wmOperator");
RNA_def_struct_refine_func(srna, "rna_Operator_refine");
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
RNA_def_struct_register_funcs(srna, "rna_Operator_register", "rna_Operator_unregister");
#endif
@@ -1124,7 +1124,7 @@ static void rna_def_macro_operator(BlenderRNA *brna)
RNA_def_struct_ui_text(srna, "Macro Operator", "Storage of a macro operator being executed, or registered after execution");
RNA_def_struct_sdna(srna, "wmOperator");
RNA_def_struct_refine_func(srna, "rna_MacroOperator_refine");
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
RNA_def_struct_register_funcs(srna, "rna_MacroOperator_register", "rna_Operator_unregister");
#endif
diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c
index dd2c4b6efb6..9e93557968d 100644
--- a/source/blender/modifiers/intern/MOD_explode.c
+++ b/source/blender/modifiers/intern/MOD_explode.c
@@ -663,7 +663,7 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd,
DerivedMesh *explode, *dm=to_explode;
MFace *mf=0, *mface;
ParticleSettings *part=psmd->psys->part;
- ParticleSimulationData sim = {scene, ob, psmd->psys, psmd};
+ ParticleSimulationData sim= {0};
ParticleData *pa=NULL, *pars=psmd->psys->particles;
ParticleKey state;
EdgeHash *vertpahash;
@@ -680,6 +680,11 @@ static DerivedMesh * explodeMesh(ExplodeModifierData *emd,
mface= dm->getFaceArray(dm);
totpart= psmd->psys->totpart;
+ sim.scene= scene;
+ sim.ob= ob;
+ sim.psys= psmd->psys;
+ sim.psmd= psmd;
+
timestep= psys_get_timestep(&sim);
//if(part->flag & PART_GLOB_TIME)
diff --git a/source/blender/modifiers/intern/MOD_particlesystem.c b/source/blender/modifiers/intern/MOD_particlesystem.c
index 9d99174b7c4..cd56bd3c8bc 100644
--- a/source/blender/modifiers/intern/MOD_particlesystem.c
+++ b/source/blender/modifiers/intern/MOD_particlesystem.c
@@ -154,6 +154,10 @@ static void deformVerts(ModifierData *md, Object *ob,
psmd->dm->needsFree = 1;
psmd->dm->release(psmd->dm);
}
+ else {
+ /* no dm before, so recalc particles fully */
+ psys->recalc |= PSYS_RECALC_RESET;
+ }
/* make new dm */
psmd->dm=CDDM_copy(dm);
@@ -175,7 +179,6 @@ static void deformVerts(ModifierData *md, Object *ob,
/* in file read dm hasn't really changed but just wasn't saved in file */
psys->recalc |= PSYS_RECALC_RESET;
- psmd->flag |= eParticleSystemFlag_DM_changed;
psmd->totdmvert= psmd->dm->getNumVerts(psmd->dm);
psmd->totdmedge= psmd->dm->getNumEdges(psmd->dm);
@@ -186,7 +189,6 @@ static void deformVerts(ModifierData *md, Object *ob,
psmd->flag &= ~eParticleSystemFlag_psys_updated;
particle_system_update(md->scene, ob, psys);
psmd->flag |= eParticleSystemFlag_psys_updated;
- psmd->flag &= ~eParticleSystemFlag_DM_changed;
}
}
diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt
index d4383f330c4..5a6470d994e 100644
--- a/source/blender/nodes/CMakeLists.txt
+++ b/source/blender/nodes/CMakeLists.txt
@@ -146,8 +146,7 @@ ENDIF(WIN32)
IF(WITH_PYTHON)
SET(INC ${INC} ../python ${PYTHON_INC})
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_nodes "${SRC}" "${INC}")
diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript
index 3e7e0dbe54c..4bed612144c 100644
--- a/source/blender/nodes/SConscript
+++ b/source/blender/nodes/SConscript
@@ -22,10 +22,9 @@ defs = []
if env['WITH_BF_PYTHON']:
incs += ' ' + env['BF_PYTHON_INC']
incs += ' ../python'
+ defs.append('WITH_PYTHON')
if env['BF_DEBUG']:
defs.append('_DEBUG')
-else:
- defs.append('DISABLE_PYTHON')
if env['OURPLATFORM'] == 'linux2':
cflags='-pthread'
diff --git a/source/blender/nodes/intern/CMP_util.c b/source/blender/nodes/intern/CMP_util.c
index c762d8cb42d..06c4740f6b9 100644
--- a/source/blender/nodes/intern/CMP_util.c
+++ b/source/blender/nodes/intern/CMP_util.c
@@ -1303,7 +1303,7 @@ CompBuf* qd_downScaledCopy(CompBuf* src, int scale)
void IIR_gauss(CompBuf* src, float sigma, int chan, int xy)
{
double q, q2, sc, cf[4], tsM[9], tsu[3], tsv[3];
- float *X, *Y, *W;
+ double *X, *Y, *W;
int i, x, y, sz;
// <0.5 not valid, though can have a possibly useful sort of sharpening effect
@@ -1367,9 +1367,9 @@ void IIR_gauss(CompBuf* src, float sigma, int chan, int xy)
// intermediate buffers
sz = MAX2(src->x, src->y);
- X = MEM_callocN(sz*sizeof(float), "IIR_gauss X buf");
- Y = MEM_callocN(sz*sizeof(float), "IIR_gauss Y buf");
- W = MEM_callocN(sz*sizeof(float), "IIR_gauss W buf");
+ X = MEM_callocN(sz*sizeof(double), "IIR_gauss X buf");
+ Y = MEM_callocN(sz*sizeof(double), "IIR_gauss Y buf");
+ W = MEM_callocN(sz*sizeof(double), "IIR_gauss W buf");
if (xy & 1) { // H
for (y=0; yy; ++y) {
const int yx = y*src->x;
diff --git a/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c b/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c
index 5e391e02feb..a548893905a 100644
--- a/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c
+++ b/source/blender/nodes/intern/SHD_nodes/SHD_dynamic.c
@@ -27,22 +27,22 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifndef DISABLE_PYTHON
+/* TODO, support python3.x */
+#undef WITH_PYTHON
+
+#ifdef WITH_PYTHON
#include
#include
#include
#endif
-/* TODO, support python3.x */
-#define DISABLE_PYTHON 1
-
#include "DNA_text_types.h"
#include "BKE_text.h"
#include "BKE_utildefines.h"
// XXX
#if 0
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "api2_2x/Node.h"
#include "api2_2x/gen_utils.h"
#include "BPY_extern.h"
@@ -57,7 +57,7 @@ static void node_dynamic_setup(bNode *node);
static void node_dynamic_exec_cb(void *data, bNode *node, bNodeStack **in, bNodeStack **out);
static void node_dynamic_free_storage_cb(bNode *node);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
static PyObject *init_dynamicdict(void) {
PyObject *newscriptdict, *item;
PyGILState_STATE gilstate = PyGILState_Ensure();
@@ -156,7 +156,7 @@ static void node_dynamic_update_socket_links(bNode *node, bNodeTree *ntree)
static void node_dynamic_free_storage_cb(bNode *node)
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
NodeScriptDict *nsd;
PyObject *pydict;
BPy_Node *pynode;
@@ -186,7 +186,7 @@ static void node_dynamic_disable(bNode *node)
/* Disable all pynodes using the given text (script) id */
static void node_dynamic_disable_all_by_id(ID *id)
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
Material *ma; /* XXX hardcoded for shaders */
for (ma= G.main->mat.first; ma; ma= ma->id.next) {
@@ -346,7 +346,7 @@ int nodeDynamicUnlinkText(ID *txtid) {
static void node_dynamic_pyerror_print(bNode *node)
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyGILState_STATE gilstate = PyGILState_Ensure();
fprintf(stderr, "\nError in dynamic node script \"%s\":\n", node->name);
@@ -373,7 +373,7 @@ static void node_dynamic_register_type(bNode *node)
node->typeinfo->name = BLI_strdup(node->name);
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* node_dynamic_get_pynode:
* Find the pynode definition from the script */
static PyObject *node_dynamic_get_pynode(PyObject *dict)
@@ -415,11 +415,11 @@ static PyObject *node_dynamic_get_pynode(PyObject *dict)
"no PyNode definition found in the script!");
return NULL;
}
-#endif /* DISABLE_PYTHON */
+#endif /* WITH_PYTHON */
static int node_dynamic_parse(struct bNode *node)
{
-#ifdef DISABLE_PYTHON
+#ifndef WITH_PYTHON
return -1;
#else
PyObject *dict= NULL;
@@ -516,7 +516,7 @@ static int node_dynamic_parse(struct bNode *node)
* pynodes already linked to a script (node->id != NULL). */
static void node_dynamic_setup(bNode *node)
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
NodeScriptDict *nsd = NULL;
bNodeTree *nodetree = NULL;
bNodeType *ntype = NULL;
@@ -640,7 +640,7 @@ static void node_dynamic_setup(bNode *node)
node->custom1 = BSET(node->custom1, NODE_DYNAMIC_READY);
PyGILState_Release(gilstate);
-#endif /* DISABLE_PYTHON */
+#endif /* WITH_PYTHON */
return;
}
@@ -673,7 +673,7 @@ static void node_dynamic_init_cb(bNode *node) {
/* node_dynamic_copy_cb: pynode copy callback */
static void node_dynamic_copy_cb(bNode *orig_node, bNode *new_node)
{
-#ifdef DISABLE_PYTHON
+#ifndef WITH_PYTHON
return;
#else
NodeScriptDict *nsd;
@@ -698,7 +698,7 @@ static void node_dynamic_copy_cb(bNode *orig_node, bNode *new_node)
/* node_dynamic_exec_cb: the execution callback called per pixel
* during rendering. */
static void node_dynamic_exec_cb(void *data, bNode *node, bNodeStack **in, bNodeStack **out) {
-#ifdef DISABLE_PYTHON
+#ifndef WITH_PYTHON
return;
#else
BPy_Node *mynode = NULL;
diff --git a/source/blender/python/generic/CMakeLists.txt b/source/blender/python/generic/CMakeLists.txt
index 4ac3fc36ebd..2f5551d4c96 100644
--- a/source/blender/python/generic/CMakeLists.txt
+++ b/source/blender/python/generic/CMakeLists.txt
@@ -34,10 +34,10 @@ SET(SRC
bgl.c
blf_api.c
bpy_internal_import.c
- geometry.c
mathutils.c
mathutils_color.c
mathutils_euler.c
+ mathutils_geometry.c
mathutils_matrix.c
mathutils_quat.c
mathutils_vector.c
diff --git a/source/blender/python/generic/bgl.c b/source/blender/python/generic/bgl.c
index 86b7bc522fe..321152ab581 100644
--- a/source/blender/python/generic/bgl.c
+++ b/source/blender/python/generic/bgl.c
@@ -1115,12 +1115,11 @@ static struct PyModuleDef BGL_module_def = {
};
-PyObject *BGL_Init(void)
+PyObject *BPyInit_bgl(void)
{
- PyObject *mod, *dict, *item;
- mod = PyModule_Create(&BGL_module_def);
- PyDict_SetItemString(PyImport_GetModuleDict(), BGL_module_def.m_name, mod);
- dict= PyModule_GetDict(mod);
+ PyObject *submodule, *dict, *item;
+ submodule= PyModule_Create(&BGL_module_def);
+ dict= PyModule_GetDict(submodule);
if( PyType_Ready( &BGL_bufferType) < 0)
return NULL; /* should never happen */
@@ -1612,6 +1611,6 @@ PyObject *BGL_Init(void)
EXPP_ADDCONST(GL_TEXTURE_BINDING_1D);
EXPP_ADDCONST(GL_TEXTURE_BINDING_2D);
- return mod;
+ return submodule;
}
diff --git a/source/blender/python/generic/bgl.h b/source/blender/python/generic/bgl.h
index 80b0b90f643..5e40cda3114 100644
--- a/source/blender/python/generic/bgl.h
+++ b/source/blender/python/generic/bgl.h
@@ -38,7 +38,7 @@
#include
-PyObject *BGL_Init(void);
+PyObject *BPyInit_bgl(void);
/*@ Create a buffer object */
/*@ dimensions is an array of ndimensions integers representing the size of each dimension */
diff --git a/source/blender/python/generic/blf_api.c b/source/blender/python/generic/blf_api.c
index 66d8cdd923a..80e140b7eac 100644
--- a/source/blender/python/generic/blf_api.c
+++ b/source/blender/python/generic/blf_api.c
@@ -390,17 +390,16 @@ static struct PyModuleDef BLF_module_def = {
0, /* m_free */
};
-PyObject *BLF_Init(void)
+PyObject *BPyInit_blf(void)
{
PyObject *submodule;
submodule = PyModule_Create(&BLF_module_def);
- PyDict_SetItemString(PyImport_GetModuleDict(), BLF_module_def.m_name, submodule);
PyModule_AddIntConstant(submodule, "ROTATION", BLF_ROTATION);
PyModule_AddIntConstant(submodule, "CLIPPING", BLF_CLIPPING);
PyModule_AddIntConstant(submodule, "SHADOW", BLF_SHADOW);
PyModule_AddIntConstant(submodule, "KERNING_DEFAULT", BLF_KERNING_DEFAULT);
- return (submodule);
+ return submodule;
}
diff --git a/source/blender/python/generic/blf_api.h b/source/blender/python/generic/blf_api.h
index fae20ace996..db17f62337b 100644
--- a/source/blender/python/generic/blf_api.h
+++ b/source/blender/python/generic/blf_api.h
@@ -22,5 +22,4 @@
* ***** END GPL LICENSE BLOCK *****
*/
-
-PyObject *BLF_Init(void);
+PyObject *BPyInit_blf(void);
diff --git a/source/blender/python/generic/bpy_internal_import.c b/source/blender/python/generic/bpy_internal_import.c
index 3ee0c76a44a..dae0da82dbd 100644
--- a/source/blender/python/generic/bpy_internal_import.c
+++ b/source/blender/python/generic/bpy_internal_import.c
@@ -26,7 +26,12 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include
+#include "compile.h" /* for the PyCodeObject */
+#include "eval.h" /* for PyEval_EvalCode */
+
#include "bpy_internal_import.h"
+
#include "DNA_text_types.h"
#include "MEM_guardedalloc.h"
@@ -62,16 +67,17 @@ void bpy_import_main_set(struct Main *maggie)
/* returns a dummy filename for a textblock so we can tell what file a text block comes from */
void bpy_text_filename_get(char *fn, Text *text)
{
- sprintf(fn, "%s/%s", text->id.lib ? text->id.lib->filepath : G.main->name, text->id.name+2);
-
- /* XXX, this is a bug in python's Py_CompileString()!
+#if PY_VERSION_HEX >= 0x03020000
+ sprintf(fn, "%s%c%s", text->id.lib ? text->id.lib->filepath : G.main->name, SEP, text->id.name+2);
+#else
+ /* this is a bug in python's Py_CompileString()!, fixed for python 3.2.
the string encoding should not be required to be utf-8
- reported: http://bugs.python.org/msg115202
- */
- BLI_utf8_invalid_strip(fn, strlen(fn));
+ reported: http://bugs.python.org/msg115202 */
+ strcpy(fn, text->id.name+2);
+#endif
}
-PyObject *bpy_text_import( Text *text )
+PyObject *bpy_text_import(Text *text)
{
char *buf = NULL;
char modulename[24];
diff --git a/source/blender/python/generic/bpy_internal_import.h b/source/blender/python/generic/bpy_internal_import.h
index f191ab22651..dd7a3ab9f64 100644
--- a/source/blender/python/generic/bpy_internal_import.h
+++ b/source/blender/python/generic/bpy_internal_import.h
@@ -28,8 +28,8 @@
/* Note, the BGE needs to use this too, keep it minimal */
-#ifndef EXPP_bpy_import_h
-#define EXPP_bpy_import_h
+#ifndef BPY_INTERNAL_IMPORT_H
+#define BPY_INTERNAL_IMPORT_H
/* python redefines :/ */
#ifdef _POSIX_C_SOURCE
@@ -40,16 +40,12 @@
#undef _XOPEN_SOURCE
#endif
-#include
-#include "compile.h" /* for the PyCodeObject */
-#include "eval.h" /* for PyEval_EvalCode */
-
struct Text;
-PyObject* bpy_text_import( struct Text *text );
-PyObject* bpy_text_import_name( char *name, int *found );
-PyObject* bpy_text_reimport( PyObject *module, int *found );
-/* void bpy_text_clear_modules( int clear_all );*/ /* Clear user modules */
+PyObject* bpy_text_import(struct Text *text);
+PyObject* bpy_text_import_name(char *name, int *found);
+PyObject* bpy_text_reimport(PyObject *module, int *found);
+/* void bpy_text_clear_modules(int clear_all);*/ /* Clear user modules */
void bpy_text_filename_get(char *fn, struct Text *text);
@@ -60,4 +56,4 @@ extern PyMethodDef bpy_reload_meth;
struct Main *bpy_import_main_get(void);
void bpy_import_main_set(struct Main *maggie);
-#endif /* EXPP_bpy_import_h */
+#endif /* BPY_INTERNAL_IMPORT_H */
diff --git a/source/blender/python/generic/mathutils.c b/source/blender/python/generic/mathutils.c
index c1f24e413c8..73f16cb0cf1 100644
--- a/source/blender/python/generic/mathutils.c
+++ b/source/blender/python/generic/mathutils.c
@@ -245,10 +245,11 @@ static struct PyModuleDef M_Mathutils_module_def = {
0, /* m_free */
};
-PyObject *Mathutils_Init(void)
+PyMODINIT_FUNC BPyInit_mathutils(void)
{
PyObject *submodule;
-
+ PyObject *item;
+
if( PyType_Ready( &vector_Type ) < 0 )
return NULL;
if( PyType_Ready( &matrix_Type ) < 0 )
@@ -261,7 +262,6 @@ PyObject *Mathutils_Init(void)
return NULL;
submodule = PyModule_Create(&M_Mathutils_module_def);
- PyDict_SetItemString(PyImport_GetModuleDict(), M_Mathutils_module_def.m_name, submodule);
/* each type has its own new() function */
PyModule_AddObject( submodule, "Vector", (PyObject *)&vector_Type );
@@ -270,7 +270,15 @@ PyObject *Mathutils_Init(void)
PyModule_AddObject( submodule, "Quaternion", (PyObject *)&quaternion_Type );
PyModule_AddObject( submodule, "Color", (PyObject *)&color_Type );
+ /* submodule */
+ PyModule_AddObject( submodule, "geometry", (item=BPyInit_mathutils_geometry()));
+ /* XXX, python doesnt do imports with this usefully yet
+ * 'from mathutils.geometry import PolyFill'
+ * ...fails without this. */
+ PyDict_SetItemString(PyThreadState_GET()->interp->modules, "mathutils.geometry", item);
+ Py_INCREF(item);
+
mathutils_matrix_vector_cb_index= Mathutils_RegisterCallback(&mathutils_matrix_vector_cb);
- return (submodule);
+ return submodule;
}
diff --git a/source/blender/python/generic/mathutils.h b/source/blender/python/generic/mathutils.h
index 85fbe3225ba..22f1536bb10 100644
--- a/source/blender/python/generic/mathutils.h
+++ b/source/blender/python/generic/mathutils.h
@@ -55,13 +55,13 @@ typedef struct {
#include "mathutils_quat.h"
#include "mathutils_euler.h"
#include "mathutils_color.h"
+#include "mathutils_geometry.h"
PyObject *BaseMathObject_getOwner( BaseMathObject * self, void * );
PyObject *BaseMathObject_getWrapped( BaseMathObject *self, void * );
void BaseMathObject_dealloc(BaseMathObject * self);
-PyObject *Mathutils_Init(void);
-PyObject *Noise_Init(void); /* lazy, saves having own header */
+PyMODINIT_FUNC BPyInit_mathutils(void);
int EXPP_FloatsAreEqual(float A, float B, int floatSteps);
int EXPP_VectorsAreEqual(float *vecA, float *vecB, int size, int floatSteps);
diff --git a/source/blender/python/generic/geometry.c b/source/blender/python/generic/mathutils_geometry.c
similarity index 98%
rename from source/blender/python/generic/geometry.c
rename to source/blender/python/generic/mathutils_geometry.c
index e0583cc0028..e57eb4ce83d 100644
--- a/source/blender/python/generic/geometry.c
+++ b/source/blender/python/generic/mathutils_geometry.c
@@ -27,7 +27,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#include "geometry.h"
+#include "mathutils_geometry.h"
/* Used for PolyFill */
#include "BKE_displist.h"
@@ -819,7 +819,7 @@ struct PyMethodDef M_Geometry_methods[] = {
static struct PyModuleDef M_Geometry_module_def = {
PyModuleDef_HEAD_INIT,
- "geometry", /* m_name */
+ "mathutils.geometry", /* m_name */
M_Geometry_doc, /* m_doc */
0, /* m_size */
M_Geometry_methods, /* m_methods */
@@ -830,12 +830,8 @@ static struct PyModuleDef M_Geometry_module_def = {
};
/*----------------------------MODULE INIT-------------------------*/
-PyObject *Geometry_Init(void)
+PyMODINIT_FUNC BPyInit_mathutils_geometry(void)
{
- PyObject *submodule;
-
- submodule = PyModule_Create(&M_Geometry_module_def);
- PyDict_SetItemString(PyImport_GetModuleDict(), M_Geometry_module_def.m_name, submodule);
-
- return (submodule);
+ PyObject *submodule= PyModule_Create(&M_Geometry_module_def);
+ return submodule;
}
diff --git a/source/blender/python/generic/geometry.h b/source/blender/python/generic/mathutils_geometry.h
similarity index 96%
rename from source/blender/python/generic/geometry.h
rename to source/blender/python/generic/mathutils_geometry.h
index 401efcc7888..3d3f7c606a4 100644
--- a/source/blender/python/generic/geometry.h
+++ b/source/blender/python/generic/mathutils_geometry.h
@@ -34,6 +34,6 @@
#include
#include "mathutils.h"
-PyObject *Geometry_Init(void);
+PyMODINIT_FUNC BPyInit_mathutils_geometry(void);
#endif /* EXPP_Geometry_H */
diff --git a/source/blender/python/generic/mathutils_matrix.c b/source/blender/python/generic/mathutils_matrix.c
index 36a9bf8b55d..c74ec3536e5 100644
--- a/source/blender/python/generic/mathutils_matrix.c
+++ b/source/blender/python/generic/mathutils_matrix.c
@@ -942,6 +942,7 @@ PyObject *Matrix_scalePart(MatrixObject * self)
scale[2]= tmat[2][2];
return newVectorObject(scale, 3, Py_NEW, NULL);
}
+
/*---------------------------Matrix.invert() ---------------------*/
static char Matrix_Invert_doc[] =
".. method:: invert()\n"
@@ -1009,6 +1010,41 @@ PyObject *Matrix_Invert(MatrixObject * self)
return (PyObject *)self;
}
+/*---------------------------Matrix.decompose() ---------------------*/
+static char Matrix_decompose_doc[] =
+".. method:: decompose()\n"
+"\n"
+" Return the location, rotaion and scale components of this matrix.\n"
+"\n"
+" :return: loc, rot, scale triple.\n"
+" :rtype: (:class:`Vector`, :class:`Quaternion`, :class:`Vector`)";
+static PyObject *Matrix_decompose(MatrixObject * self)
+{
+ PyObject *ret;
+ float loc[3];
+ float rot[3][3];
+ float quat[4];
+ float size[3];
+
+ if(self->colSize != 4 || self->rowSize != 4) {
+ PyErr_SetString(PyExc_AttributeError, "Matrix.decompose(): inappropriate matrix size - expects 4x4 matrix\n");
+ return NULL;
+ }
+
+ if(!BaseMath_ReadCallback(self))
+ return NULL;
+
+ mat4_to_loc_rot_size(loc, rot, size, (float (*)[4])self->contigPtr);
+ mat3_to_quat(quat, rot);
+
+ ret= PyTuple_New(3);
+ PyTuple_SET_ITEM(ret, 0, newVectorObject(loc, 3, Py_NEW, NULL));
+ PyTuple_SET_ITEM(ret, 1, newQuaternionObject(quat, Py_NEW, NULL));
+ PyTuple_SET_ITEM(ret, 2, newVectorObject(size, 3, Py_NEW, NULL));
+
+ return ret;
+}
+
/*---------------------------Matrix.determinant() ----------------*/
static char Matrix_Determinant_doc[] =
@@ -1755,6 +1791,7 @@ static struct PyMethodDef Matrix_methods[] = {
{"translation_part", (PyCFunction) Matrix_TranslationPart, METH_NOARGS, Matrix_TranslationPart_doc},
{"rotation_part", (PyCFunction) Matrix_RotationPart, METH_NOARGS, Matrix_RotationPart_doc},
{"scale_part", (PyCFunction) Matrix_scalePart, METH_NOARGS, Matrix_scalePart_doc},
+ {"decompose", (PyCFunction) Matrix_decompose, METH_NOARGS, Matrix_decompose_doc},
{"resize4x4", (PyCFunction) Matrix_Resize4x4, METH_NOARGS, Matrix_Resize4x4_doc},
{"to_4x4", (PyCFunction) Matrix_to_4x4, METH_NOARGS, Matrix_to_4x4_doc},
{"to_3x3", (PyCFunction) Matrix_to_3x3, METH_NOARGS, Matrix_to_3x3_doc},
diff --git a/source/blender/python/generic/noise.c b/source/blender/python/generic/noise.c
index a9bbc016a54..b12ca47bdda 100644
--- a/source/blender/python/generic/noise.c
+++ b/source/blender/python/generic/noise.c
@@ -122,8 +122,6 @@ static int left = 1;
static int initf = 0;
static unsigned long *next;
-PyObject *Noise_Init(void);
-
/* initializes state[N] with a seed */
static void init_genrand(unsigned long s)
{
@@ -657,10 +655,9 @@ static struct PyModuleDef noise_module_def = {
0, /* m_free */
};
-PyObject *Noise_Init(void)
+PyObject *BPyInit_noise(void)
{
PyObject *submodule = PyModule_Create(&noise_module_def);
- PyDict_SetItemString(PyImport_GetModuleDict(), noise_module_def.m_name, submodule);
/* use current time as seed for random number generator by default */
setRndSeed(0);
diff --git a/source/blender/python/intern/bpy.c b/source/blender/python/intern/bpy.c
index 9b1f09a7984..b1c4a9951cd 100644
--- a/source/blender/python/intern/bpy.c
+++ b/source/blender/python/intern/bpy.c
@@ -38,7 +38,7 @@
#include "BKE_utildefines.h"
/* external util modules */
-#include "../generic/geometry.h"
+#include "../generic/mathutils.h"
#include "../generic/bgl.h"
#include "../generic/blf_api.h"
#include "../generic/IDProp.h"
@@ -197,13 +197,7 @@ void BPy_init_modules( void )
printf("bpy: couldnt find 'scripts/modules', blender probably wont start.\n");
}
/* stand alone utility modules not related to blender directly */
- Geometry_Init();
- Mathutils_Init();
- Noise_Init();
- BGL_Init();
- BLF_Init();
- IDProp_Init_Types();
- AUD_initPython();
+ IDProp_Init_Types(); /* not actually a submodule, just types */
Freestyle_Init();
mod = PyModule_New("_bpy");
diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c
index 3ff0d86b433..a894fa60237 100644
--- a/source/blender/python/intern/bpy_interface.c
+++ b/source/blender/python/intern/bpy_interface.c
@@ -23,13 +23,12 @@
* ***** END GPL LICENSE BLOCK *****
*/
-
-
/* grr, python redefines */
#ifdef _POSIX_C_SOURCE
#undef _POSIX_C_SOURCE
#endif
+#include
#include "bpy.h"
#include "bpy_rna.h"
@@ -197,6 +196,24 @@ void BPY_set_context(bContext *C)
BPy_SetContext(C);
}
+/* init-tab */
+extern PyObject *BPyInit_noise(void);
+extern PyObject *BPyInit_mathutils(void);
+// extern PyObject *BPyInit_mathutils_geometry(void); // BPyInit_mathutils calls, py doesnt work with thos :S
+extern PyObject *BPyInit_bgl(void);
+extern PyObject *BPyInit_blf(void);
+extern PyObject *AUD_initPython(void);
+
+static struct _inittab bpy_internal_modules[]= {
+ {"noise", BPyInit_noise},
+ {"mathutils", BPyInit_mathutils},
+// {"mathutils.geometry", BPyInit_mathutils_geometry},
+ {"bgl", BPyInit_bgl},
+ {"blf", BPyInit_blf},
+ {"aud", AUD_initPython},
+ {NULL, NULL}
+};
+
/* call BPY_set_context first */
void BPY_start_python( int argc, char **argv )
{
@@ -207,6 +224,9 @@ void BPY_start_python( int argc, char **argv )
utf8towchar(bprogname_wchar, bprogname);
Py_SetProgramName(bprogname_wchar);
+ /* builtin modules */
+ PyImport_ExtendInittab(bpy_internal_modules);
+
BPY_start_python_path(); /* allow to use our own included python */
Py_Initialize( );
diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c
index 3ffa78dab70..f3e960f87b2 100644
--- a/source/blender/python/intern/bpy_operator.c
+++ b/source/blender/python/intern/bpy_operator.c
@@ -46,12 +46,15 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args)
char *opname;
PyObject *context_dict= NULL; /* optional args */
PyObject *context_dict_back;
+ char *context_str= NULL;
PyObject *ret;
+ int context= WM_OP_EXEC_DEFAULT;
+
// XXX Todo, work out a better solution for passing on context, could make a tuple from self and pack the name and Context into it...
bContext *C = BPy_GetContext();
- if (!PyArg_ParseTuple(args, "s|O:_bpy.ops.poll", &opname, &context_dict))
+ if (!PyArg_ParseTuple(args, "s|Os:_bpy.ops.poll", &opname, &context_dict, &context_str))
return NULL;
ot= WM_operatortype_find(opname, TRUE);
@@ -61,6 +64,15 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args)
return NULL;
}
+ if(context_str) {
+ if(RNA_enum_value_from_id(operator_context_items, context_str, &context)==0) {
+ char *enum_str= BPy_enum_as_string(operator_context_items);
+ PyErr_Format(PyExc_TypeError, "Calling operator \"bpy.ops.%s.poll\" error, expected a string enum in (%.200s)", opname, enum_str);
+ MEM_freeN(enum_str);
+ return NULL;
+ }
+ }
+
if(!PyDict_Check(context_dict))
context_dict= NULL;
@@ -70,7 +82,7 @@ static PyObject *pyop_poll(PyObject *UNUSED(self), PyObject *args)
Py_XINCREF(context_dict); /* so we done loose it */
/* main purpose of thsi function */
- ret= WM_operator_poll((bContext*)C, ot) ? Py_True : Py_False;
+ ret= WM_operator_poll_context((bContext*)C, ot, context) ? Py_True : Py_False;
/* restore with original context dict, probably NULL but need this for nested operator calls */
Py_XDECREF(context_dict);
@@ -126,7 +138,7 @@ static PyObject *pyop_call(PyObject *UNUSED(self), PyObject *args)
CTX_py_dict_set(C, (void *)context_dict);
Py_XINCREF(context_dict); /* so we done loose it */
- if(WM_operator_poll((bContext*)C, ot) == FALSE) {
+ if(WM_operator_poll_context((bContext*)C, ot, context) == FALSE) {
const char *msg= CTX_wm_operator_poll_msg_get(C);
PyErr_Format( PyExc_SystemError, "Operator bpy.ops.%.200s.poll() %s", opname, msg ? msg : "failed, context is incorrect");
CTX_wm_operator_poll_msg_set(C, NULL); /* better set to NULL else it could be used again */
@@ -313,14 +325,8 @@ static struct PyModuleDef bpy_ops_module = {
PyObject *BPY_operator_module(void)
{
PyObject *submodule;
-
- submodule= PyModule_Create(&bpy_ops_module);
- PyDict_SetItemString(PyImport_GetModuleDict(), bpy_ops_module.m_name, submodule);
- /* INCREF since its its assumed that all these functions return the
- * module with a new ref like PyDict_New, since they are passed to
- * PyModule_AddObject which steals a ref */
- Py_INCREF(submodule);
+ submodule= PyModule_Create(&bpy_ops_module);
return submodule;
}
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c
index a3b0c4739c4..2bffd7f6b88 100644
--- a/source/blender/python/intern/bpy_rna.c
+++ b/source/blender/python/intern/bpy_rna.c
@@ -120,7 +120,9 @@ static int mathutils_rna_vector_set(BaseMathObject *bmo, int subtype)
}
RNA_property_float_set_array(&self->ptr, self->prop, bmo->data);
- RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
+ if(RNA_property_update_check(self->prop)) {
+ RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
+ }
/* Euler order exception */
if(subtype==MATHUTILS_CB_SUBTYPE_EUL) {
@@ -129,7 +131,9 @@ static int mathutils_rna_vector_set(BaseMathObject *bmo, int subtype)
short order= pyrna_rotation_euler_order_get(&self->ptr, &prop_eul_order, eul->order);
if(order != eul->order) {
RNA_property_enum_set(&self->ptr, prop_eul_order, eul->order);
- RNA_property_update(BPy_GetContext(), &self->ptr, prop_eul_order);
+ if(RNA_property_update_check(prop_eul_order)) {
+ RNA_property_update(BPy_GetContext(), &self->ptr, prop_eul_order);
+ }
}
}
return 1;
@@ -160,7 +164,11 @@ static int mathutils_rna_vector_set_index(BaseMathObject *bmo, int UNUSED(subtyp
RNA_property_float_clamp(&self->ptr, self->prop, &bmo->data[index]);
RNA_property_float_set_index(&self->ptr, self->prop, index, bmo->data[index]);
- RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
+
+ if(RNA_property_update_check(self->prop)) {
+ RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
+ }
+
return 1;
}
@@ -201,7 +209,10 @@ static int mathutils_rna_matrix_set(BaseMathObject *bmo, int UNUSED(subtype))
/* can ignore clamping here */
RNA_property_float_set_array(&self->ptr, self->prop, bmo->data);
- RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
+
+ if(RNA_property_update_check(self->prop)) {
+ RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
+ }
return 1;
}
@@ -1235,7 +1246,9 @@ static int pyrna_py_to_prop(PointerRNA *ptr, PropertyRNA *prop, void *data, PyOb
}
/* Run rna property functions */
- RNA_property_update(BPy_GetContext(), ptr, prop);
+ if(RNA_property_update_check(prop)) {
+ RNA_property_update(BPy_GetContext(), ptr, prop);
+ }
return 0;
}
@@ -1309,8 +1322,10 @@ static int pyrna_py_to_prop_array_index(BPy_PropertyArrayRNA *self, int index, P
}
/* Run rna property functions */
- RNA_property_update(BPy_GetContext(), ptr, prop);
-
+ if(RNA_property_update_check(prop)) {
+ RNA_property_update(BPy_GetContext(), ptr, prop);
+ }
+
return ret;
}
@@ -1720,7 +1735,9 @@ static int pyrna_prop_array_ass_subscript( BPy_PropertyArrayRNA *self, PyObject
}
if(ret != -1) {
- RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
+ if(RNA_property_update_check(self->prop)) {
+ RNA_property_update(BPy_GetContext(), &self->ptr, self->prop);
+ }
}
return ret;
diff --git a/source/blender/render/CMakeLists.txt b/source/blender/render/CMakeLists.txt
index 10a6d891e42..b65aefeb162 100644
--- a/source/blender/render/CMakeLists.txt
+++ b/source/blender/render/CMakeLists.txt
@@ -36,7 +36,6 @@ SET(INC
../makesrna
../blenkernel
../imbuf
- ../include
../../kernel/gen_messaging
../../../intern/smoke/extern
../../../intern/guardedalloc
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index dee557386b0..42bf95827e7 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -159,6 +159,9 @@ struct Render *RE_GetRender(const char *name);
/* returns 1 while render is working (or renders called from within render) */
int RE_RenderInProgress(struct Render *re);
+/* assign default dummy callbacks */
+void RE_InitRenderCB(struct Render *re);
+
/* use free render as signal to do everything over (previews) */
void RE_FreeRender (struct Render *re);
/* only called on exit */
@@ -221,7 +224,7 @@ void RE_WriteRenderResult(RenderResult *rr, char *filename, int compress);
struct RenderResult *RE_MultilayerConvert(void *exrhandle, int rectx, int recty);
/* do a full sample buffer compo */
-void RE_MergeFullSample(struct Render *re, struct Scene *sce, struct bNodeTree *ntree);
+void RE_MergeFullSample(struct Render *re, struct Main *bmain, struct Scene *sce, struct bNodeTree *ntree);
/* ancient stars function... go away! */
void RE_make_stars(struct Render *re, struct Scene *scenev3d, void (*initfunc)(void),
@@ -298,5 +301,7 @@ void RE_engine_update_stats(RenderEngine *engine, char *stats, char *info);
void RE_engines_init(void);
void RE_engines_exit(void);
+int RE_is_rendering_allowed(struct Scene *scene, void *erh, void (*error)(void *handle, char *str));
+
#endif /* RE_PIPELINE_H */
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 65eda26ef9b..79913ef1b6c 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -131,7 +131,8 @@ struct Render
ThreadRWMutex resultmutex;
/* window size, display rect, viewplane */
- int winx, winy;
+ int winx, winy; /* buffer width and height with percentage applied
+ * without border & crop. convert to long before multiplying together to avoid overflow. */
rcti disprect; /* part within winx winy */
rctf viewplane; /* mapped on winx winy */
float viewdx, viewdy; /* size of 1 pixel */
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index e70287e522e..89176944652 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -1485,7 +1485,7 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
ParticleKey state;
ParticleCacheKey *cache=0;
ParticleBillboardData bb;
- ParticleSimulationData sim = {re->scene, ob, psys, NULL};
+ ParticleSimulationData sim = {0};
ParticleStrandData sd;
StrandBuffer *strandbuf=0;
StrandVert *svert=0;
@@ -1519,10 +1519,15 @@ static int render_new_particle_system(Render *re, ObjectRen *obr, ParticleSystem
/* 2. start initialising things */
/* last possibility to bail out! */
- sim.psmd = psmd = psys_get_modifier(ob,psys);
+ psmd = psys_get_modifier(ob,psys);
if(!(psmd->modifier.mode & eModifierMode_Render))
return 0;
+ sim.scene= re->scene;
+ sim.ob= ob;
+ sim.psys= psys;
+ sim.psmd= psmd;
+
if(part->phystype==PART_PHYS_KEYED)
psys_count_keyed_targets(&sim);
@@ -5186,7 +5191,7 @@ static void calculate_speedvector(float *vectors, int step, float winsq, float w
static float *calculate_strandsurface_speedvectors(Render *re, ObjectInstanceRen *obi, StrandSurface *mesh)
{
- float winsq= re->winx*re->winy, winroot= sqrt(winsq), (*winspeed)[4];
+ float winsq= (float)re->winx*(float)re->winy, winroot= sqrt(winsq), (*winspeed)[4]; /* int's can wrap on large images */
float ho[4], prevho[4], nextho[4], winmat[4][4], vec[2];
int a;
@@ -5225,7 +5230,7 @@ static void calculate_speedvectors(Render *re, ObjectInstanceRen *obi, float *ve
StrandSurface *mesh= NULL;
float *speed, (*winspeed)[4]=NULL, ho[4], winmat[4][4];
float *co1, *co2, *co3, *co4, w[4];
- float winsq= re->winx*re->winy, winroot= sqrt(winsq);
+ float winsq= (float)re->winx*(float)re->winy, winroot= sqrt(winsq); /* int's can wrap on large images */
int a, *face, *index;
if(obi->flag & R_TRANSFORMED)
@@ -5292,7 +5297,7 @@ static int load_fluidsimspeedvectors(Render *re, ObjectInstanceRen *obi, float *
VertRen *ver= NULL;
float *speed, div, zco[2], avgvel[4] = {0.0, 0.0, 0.0, 0.0};
float zmulx= re->winx/2, zmuly= re->winy/2, len;
- float winsq= re->winx*re->winy, winroot= sqrt(winsq);
+ float winsq= (float)re->winx*(float)re->winy, winroot= sqrt(winsq); /* int's can wrap on large images */
int a, j;
float hoco[4], ho[4], fsvec[4], camco[4];
float mat[4][4], winmat[4][4];
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 2d072a58b2b..4995e98fc07 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -452,7 +452,7 @@ static int passtype_from_name(char *str)
return 0;
}
-static void render_unique_exr_name(Render *re, char *str, int sample)
+static void scene_unique_exr_name(Scene *scene, char *str, int sample)
{
char di[FILE_MAX], name[FILE_MAXFILE+MAX_ID_NAME+100], fi[FILE_MAXFILE];
@@ -460,13 +460,18 @@ static void render_unique_exr_name(Render *re, char *str, int sample)
BLI_splitdirstring(di, fi);
if(sample==0)
- sprintf(name, "%s_%s.exr", fi, re->scene->id.name+2);
+ sprintf(name, "%s_%s.exr", fi, scene->id.name+2);
else
- sprintf(name, "%s_%s%d.exr", fi, re->scene->id.name+2, sample);
+ sprintf(name, "%s_%s%d.exr", fi, scene->id.name+2, sample);
BLI_make_file_string("/", str, btempdir, name);
}
+static void render_unique_exr_name(Render *re, char *str, int sample)
+{
+ scene_unique_exr_name(re->scene, str, sample);
+}
+
static void render_layer_add_pass(RenderResult *rr, RenderLayer *rl, int channels, int passtype)
{
char *typestr= get_pass_name(passtype, 0);
@@ -1163,6 +1168,18 @@ Render *RE_NewRender(const char *name)
BLI_rw_mutex_init(&re->resultmutex);
}
+ RE_InitRenderCB(re);
+
+ /* init some variables */
+ re->ycor= 1.0f;
+
+ return re;
+}
+
+/* called for new renders and when finishing rendering so
+ * we calways have valid callbacks on a render */
+void RE_InitRenderCB(Render *re)
+{
/* set default empty callbacks */
re->display_init= result_nothing;
re->display_clear= result_nothing;
@@ -1176,11 +1193,6 @@ Render *RE_NewRender(const char *name)
re->stats_draw= stats_nothing;
/* clear callback handles */
re->dih= re->dch= re->ddh= re->sdh= re->prh= re->tbh= re->erh= NULL;
-
- /* init some variables */
- re->ycor= 1.0f;
-
- return re;
}
/* only call this while you know it will remove the link too */
@@ -1542,8 +1554,10 @@ static RenderPart *find_next_pano_slice(Render *re, int *minx, rctf *viewplane)
static RenderPart *find_next_part(Render *re, int minx)
{
RenderPart *pa, *best= NULL;
- int centx=re->winx/2, centy=re->winy/2, tot=1;
- int mindist, distx, disty;
+
+ /* long long int's needed because of overflow [#24414] */
+ long long int centx=re->winx/2, centy=re->winy/2, tot=1;
+ long long int mindist= (long long int)re->winx * (long long int)re->winy;
/* find center of rendered parts, image center counts for 1 too */
for(pa= re->parts.first; pa; pa= pa->next) {
@@ -1557,12 +1571,11 @@ static RenderPart *find_next_part(Render *re, int minx)
centy/=tot;
/* closest of the non-rendering parts */
- mindist= re->winx*re->winy;
for(pa= re->parts.first; pa; pa= pa->next) {
if(pa->ready==0 && pa->nr==0) {
- distx= centx - (pa->disprect.xmin+pa->disprect.xmax)/2;
- disty= centy - (pa->disprect.ymin+pa->disprect.ymax)/2;
- distx= (int)sqrt(distx*distx + disty*disty);
+ long long int distx= centx - (pa->disprect.xmin+pa->disprect.xmax)/2;
+ long long int disty= centy - (pa->disprect.ymin+pa->disprect.ymax)/2;
+ distx= (long long int)sqrt(distx*distx + disty*disty);
if(distxr.mode & R_PANORAMA) {
if(pa->disprect.xmin==minx) {
@@ -1975,7 +1988,7 @@ static void do_render_fields_3d(Render *re)
/* first field, we have to call camera routine for correct aspect and subpixel offset */
RE_SetCamera(re, re->scene->camera);
- if(re->r.mode & R_MBLUR)
+ if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0)
do_render_blur_3d(re);
else
do_render_3d(re);
@@ -1995,7 +2008,7 @@ static void do_render_fields_3d(Render *re)
re->field_offs = 0.5f;
}
RE_SetCamera(re, re->scene->camera);
- if(re->r.mode & R_MBLUR)
+ if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0)
do_render_blur_3d(re);
else
do_render_3d(re);
@@ -2085,7 +2098,7 @@ static void do_render_fields_blur_3d(Render *re)
if(re->r.mode & R_FIELDS)
do_render_fields_3d(re);
- else if(re->r.mode & R_MBLUR)
+ else if(re->r.mode & R_MBLUR && (re->r.scemode & R_FULL_SAMPLE)==0)
do_render_blur_3d(re);
else
do_render_3d(re);
@@ -2386,10 +2399,12 @@ static void do_merge_fullsample(Render *re, bNodeTree *ntree)
BLI_rw_mutex_unlock(&re->resultmutex);
}
-void RE_MergeFullSample(Render *re, Scene *sce, bNodeTree *ntree)
+void RE_MergeFullSample(Render *re, Main *bmain, Scene *sce, bNodeTree *ntree)
{
Scene *scene;
bNode *node;
+
+ re->main= bmain;
/* first call RE_ReadRenderResult on every renderlayer scene. this creates Render structs */
@@ -2585,6 +2600,12 @@ static void do_render_seq(Render * re)
/* if (R.rectz) freeN(R.rectz); */
/* R.rectz = BLI_dupallocN(ibuf->zbuf); */
/* } */
+
+ /* Same things as above, old rectf can hang around from previous render. */
+ if(rr->rectf) {
+ MEM_freeN(rr->rectf);
+ rr->rectf= NULL;
+ }
}
if (recurs_depth == 0) { /* with nested scenes, only free on toplevel... */
@@ -2654,61 +2675,112 @@ static void do_render_all_options(Render *re)
}
}
-static int is_rendering_allowed(Render *re)
+static int check_valid_camera(Scene *scene)
+{
+ int check_comp= 1;
+
+ if (scene->camera == NULL)
+ scene->camera= scene_find_camera(scene);
+
+ if(scene->r.scemode&R_DOSEQ) {
+ if(scene->ed) {
+ Sequence *seq= scene->ed->seqbase.first;
+
+ check_comp= 0;
+
+ while(seq) {
+ if(seq->type == SEQ_SCENE) {
+ if(!seq->scene_camera) {
+ if(!seq->scene->camera && !scene_find_camera(seq->scene)) {
+ if(seq->scene == scene) {
+ /* for current scene camera could be unneeded due to compisite nodes */
+ check_comp= 1;
+ } else {
+ /* for other scenes camera is necessary */
+ return 0;
+ }
+ }
+ }
+ }
+
+ seq= seq->next;
+ }
+ }
+ }
+
+ if(check_comp) { /* no sequencer or sequencer depends on compositor */
+ if(scene->r.scemode&R_DOCOMP && scene->use_nodes) {
+ bNode *node= scene->nodetree->nodes.first;
+
+ while(node) {
+ if(node->type == CMP_NODE_R_LAYERS) {
+ Scene *sce= node->id ? (Scene*)node->id : scene;
+
+ if(!sce->camera && !scene_find_camera(sce)) {
+ /* all render layers nodes need camera */
+ return 0;
+ }
+ }
+
+ node= node->next;
+ }
+ } else return scene->camera != NULL;
+ }
+
+ return 1;
+}
+
+int RE_is_rendering_allowed(Scene *scene, void *erh, void (*error)(void *handle, char *str))
{
SceneRenderLayer *srl;
/* forbidden combinations */
- if(re->r.mode & R_PANORAMA) {
- if(re->r.mode & R_BORDER) {
- re->error(re->erh, "No border supported for Panorama");
+ if(scene->r.mode & R_PANORAMA) {
+ if(scene->r.mode & R_BORDER) {
+ error(erh, "No border supported for Panorama");
return 0;
}
- if(re->r.mode & R_ORTHO) {
- re->error(re->erh, "No Ortho render possible for Panorama");
+ if(scene->r.mode & R_ORTHO) {
+ error(erh, "No Ortho render possible for Panorama");
return 0;
}
}
- if(re->r.mode & R_BORDER) {
- if(re->r.border.xmax <= re->r.border.xmin ||
- re->r.border.ymax <= re->r.border.ymin) {
- re->error(re->erh, "No border area selected.");
+ if(scene->r.mode & R_BORDER) {
+ if(scene->r.border.xmax <= scene->r.border.xmin ||
+ scene->r.border.ymax <= scene->r.border.ymin) {
+ error(erh, "No border area selected.");
return 0;
}
}
- if(re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) {
+ if(scene->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) {
char str[FILE_MAX];
- render_unique_exr_name(re, str, 0);
+ scene_unique_exr_name(scene, str, 0);
if (BLI_is_writable(str)==0) {
- re->error(re->erh, "Can not save render buffers, check the temp default path");
+ error(erh, "Can not save render buffers, check the temp default path");
return 0;
}
- /* no osa + fullsample won't work... */
- if(re->osa==0)
- re->r.scemode &= ~R_FULL_SAMPLE;
-
/* no fullsample and edge */
- if((re->r.scemode & R_FULL_SAMPLE) && (re->r.mode & R_EDGE)) {
- re->error(re->erh, "Full Sample doesn't support Edge Enhance");
+ if((scene->r.scemode & R_FULL_SAMPLE) && (scene->r.mode & R_EDGE)) {
+ error(erh, "Full Sample doesn't support Edge Enhance");
return 0;
}
}
else
- re->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */
+ scene->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */
- if(re->r.scemode & R_DOCOMP) {
- if(re->scene->use_nodes) {
- bNodeTree *ntree= re->scene->nodetree;
+ if(scene->r.scemode & R_DOCOMP) {
+ if(scene->use_nodes) {
+ bNodeTree *ntree= scene->nodetree;
bNode *node;
if(ntree==NULL) {
- re->error(re->erh, "No Nodetree in Scene");
+ error(erh, "No Nodetree in Scene");
return 0;
}
@@ -2718,46 +2790,51 @@ static int is_rendering_allowed(Render *re)
if(node==NULL) {
- re->error(re->erh, "No Render Output Node in Scene");
+ error(erh, "No Render Output Node in Scene");
return 0;
}
}
}
/* check valid camera, without camera render is OK (compo, seq) */
- if(re->scene->camera==NULL)
- re->scene->camera= scene_find_camera(re->scene);
-
- if(!(re->r.scemode & (R_DOSEQ|R_DOCOMP))) {
- if(re->scene->camera==NULL) {
- re->error(re->erh, "No camera");
- return 0;
- }
+ if(!check_valid_camera(scene)) {
+ error(erh, "No camera");
+ return 0;
}
/* layer flag tests */
- if(re->r.scemode & R_SINGLE_LAYER) {
- srl= BLI_findlink(&re->scene->r.layers, re->r.actlay);
+ if(scene->r.scemode & R_SINGLE_LAYER) {
+ srl= BLI_findlink(&scene->r.layers, scene->r.actlay);
/* force layer to be enabled */
srl->layflag &= ~SCE_LAY_DISABLE;
}
- for(srl= re->scene->r.layers.first; srl; srl= srl->next)
+ for(srl= scene->r.layers.first; srl; srl= srl->next)
if(!(srl->layflag & SCE_LAY_DISABLE))
break;
if(srl==NULL) {
- re->error(re->erh, "All RenderLayers are disabled");
+ error(erh, "All RenderLayers are disabled");
return 0;
}
/* renderer */
- if(!ELEM(re->r.renderer, R_INTERN, R_YAFRAY)) {
- re->error(re->erh, "Unknown render engine set");
+ if(!ELEM(scene->r.renderer, R_INTERN, R_YAFRAY)) {
+ error(erh, "Unknown render engine set");
return 0;
}
+
return 1;
}
+static void validate_render_settings(Render *re)
+{
+ if(re->r.scemode & (R_EXR_TILE_FILE|R_FULL_SAMPLE)) {
+ /* no osa + fullsample won't work... */
+ if(re->r.osa==0)
+ re->r.scemode &= ~R_FULL_SAMPLE;
+ } else re->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */
+}
+
static void update_physics_cache(Render *re, Scene *scene, int UNUSED(anim_init))
{
PTCacheBaker baker;
@@ -2834,10 +2911,9 @@ static int render_initialize_from_main(Render *re, Main *bmain, Scene *scene, Sc
/* initstate makes new result, have to send changed tags around */
ntreeCompositTagRender(re->scene);
-
- if(!is_rendering_allowed(re))
- return 0;
-
+
+ validate_render_settings(re);
+
re->display_init(re->dih, re->result);
re->display_clear(re->dch, re->result);
diff --git a/source/blender/render/intern/source/pointdensity.c b/source/blender/render/intern/source/pointdensity.c
index d8156594085..a5609390ef4 100644
--- a/source/blender/render/intern/source/pointdensity.c
+++ b/source/blender/render/intern/source/pointdensity.c
@@ -94,7 +94,7 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa
{
DerivedMesh* dm;
ParticleKey state;
- ParticleSimulationData sim = {re->scene, ob, psys, NULL};
+ ParticleSimulationData sim= {0};
ParticleData *pa=NULL;
float cfra = BKE_curframe(re->scene);
int i, childexists;
@@ -103,10 +103,9 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa
float partco[3];
float obview[4][4];
-
/* init everything */
if (!psys || !ob || !pd) return;
-
+
mul_m4_m4m4(obview, re->viewinv, ob->obmat);
/* Just to create a valid rendering context for particles */
@@ -119,6 +118,10 @@ static void pointdensity_cache_psys(Render *re, PointDensity *pd, Object *ob, Pa
return;
}
+ sim.scene= re->scene;
+ sim.ob= ob;
+ sim.psys= psys;
+
/* in case ob->imat isn't up-to-date */
invert_m4_m4(ob->imat, ob->obmat);
diff --git a/source/blender/render/intern/source/rayshade.c b/source/blender/render/intern/source/rayshade.c
index 1172bee7d67..17ec48c8422 100644
--- a/source/blender/render/intern/source/rayshade.c
+++ b/source/blender/render/intern/source/rayshade.c
@@ -718,7 +718,7 @@ static void traceray(ShadeInput *origshi, ShadeResult *origshr, short depth, flo
shi.mask= origshi->mask;
shi.osatex= origshi->osatex;
- shi.depth= 1; /* only used to indicate tracing */
+ shi.depth= origshi->depth + 1; /* only used to indicate tracing */
shi.thread= origshi->thread;
//shi.sample= 0; // memset above, so dont need this
shi.xs= origshi->xs;
@@ -1458,8 +1458,8 @@ void ray_trace(ShadeInput *shi, ShadeResult *shr)
float diff[3];
int do_tra, do_mir;
- do_tra= ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f);
- do_mir= ((shi->mat->mode & MA_RAYMIRROR) && shi->ray_mirror!=0.0f);
+ do_tra= ((shi->mat->mode & MA_TRANSP) && (shi->mat->mode & MA_RAYTRANSP) && shr->alpha!=1.0f && (shi->depth <= shi->mat->ray_depth_tra));
+ do_mir= ((shi->mat->mode & MA_RAYMIRROR) && shi->ray_mirror!=0.0f && (shi->depth <= shi->mat->ray_depth));
/* raytrace mirror amd refract like to separate the spec color */
if(shi->combinedflag & SCE_PASS_SPEC)
@@ -1570,7 +1570,7 @@ static void ray_trace_shadow_tra(Isect *is, ShadeInput *origshi, int depth, int
memset(&shi, 0, sizeof(ShadeInput));
/* end warning! - Campbell */
- shi.depth= 1; /* only used to indicate tracing */
+ shi.depth= origshi->depth + 1; /* only used to indicate tracing */
shi.mask= origshi->mask;
shi.thread= origshi->thread;
shi.passflag= SCE_PASS_COMBINED;
diff --git a/source/blender/render/intern/source/strand.c b/source/blender/render/intern/source/strand.c
index 88d042e7b97..be17d640b66 100644
--- a/source/blender/render/intern/source/strand.c
+++ b/source/blender/render/intern/source/strand.c
@@ -825,6 +825,8 @@ int zbuffer_strands_abuf(Render *re, RenderPart *pa, APixstrand *apixbuf, ListBa
/* for all object instances */
for(obi=re->instancetable.first, i=0; obi; obi=obi->next, i++) {
+ Material *ma;
+
obr= obi->obr;
if(!obr->strandbuf || !(obr->strandbuf->lay & lay))
@@ -836,6 +838,14 @@ int zbuffer_strands_abuf(Render *re, RenderPart *pa, APixstrand *apixbuf, ListBa
else
copy_m4_m4(obwinmat, winmat);
+ /* test if we should skip it */
+ ma = obr->strandbuf->ma;
+
+ if(shadow && !(ma->mode & MA_SHADBUF))
+ continue;
+ else if(!shadow && (ma->mode & MA_ONLYCAST))
+ continue;
+
if(clip_render_object(obi->obr->boundbox, bounds, winmat))
continue;
diff --git a/source/blender/render/intern/source/volume_precache.c b/source/blender/render/intern/source/volume_precache.c
index 39e8315e7cf..ccdef6006d4 100644
--- a/source/blender/render/intern/source/volume_precache.c
+++ b/source/blender/render/intern/source/volume_precache.c
@@ -91,12 +91,11 @@ int intersect_outside_volume(RayObject *tree, Isect *isect, float *offset, int l
/* Uses ray tracing to check if a point is inside or outside an ObjectInstanceRen */
int point_inside_obi(RayObject *tree, ObjectInstanceRen *UNUSED(obi), float *co)
{
- Isect isect;
+ Isect isect= {{0}};
float vec[3] = {0.0f,0.0f,1.0f};
int final_depth=0, depth=0, limit=20;
/* set up the isect */
- memset(&isect, 0, sizeof(isect));
VECCOPY(isect.start, co);
VECCOPY(isect.vec, vec);
isect.mode= RE_RAY_MIRROR;
@@ -486,7 +485,11 @@ static void *vol_precache_part(void *data)
float scatter_col[3] = {0.f, 0.f, 0.f};
float co[3], cco[3];
int x, y, z, i;
- const int res[3]= {pa->res[0], pa->res[1], pa->res[2]};
+ int res[3];
+
+ res[0]= pa->res[0];
+ res[1]= pa->res[1];
+ res[2]= pa->res[2];
for (z= pa->minz; z < pa->maxz; z++) {
co[2] = pa->bbmin[2] + (pa->voxel[2] * (z + 0.5f));
diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt
index 36d9f2b5c8c..6c93334fd0a 100644
--- a/source/blender/windowmanager/CMakeLists.txt
+++ b/source/blender/windowmanager/CMakeLists.txt
@@ -33,7 +33,6 @@ SET(INC
../makesdna
../makesrna
../blenkernel
- ../include
../imbuf
../blenloader
../editors/include
@@ -87,10 +86,13 @@ ENDIF(WITH_FFMPEG)
IF(WITH_PYTHON)
LIST(APPEND INC ../python ${PYTHON_INC})
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
+IF(WITH_GAMEENGINE)
+ ADD_DEFINITIONS(-DWITH_GAMEENGINE)
+ENDIF(WITH_GAMEENGINE)
+
IF(WIN32)
LIST(APPEND INC ${PTHREADS_INC})
ENDIF(WIN32)
diff --git a/source/blender/windowmanager/SConscript b/source/blender/windowmanager/SConscript
index 51168d7a9d3..cbaf74ddc10 100644
--- a/source/blender/windowmanager/SConscript
+++ b/source/blender/windowmanager/SConscript
@@ -16,8 +16,8 @@ incs += ' #/intern/elbeem #/extern/glew/include'
defs = [ 'GLEW_STATIC' ]
-if not env['WITH_BF_PYTHON']:
- defs.append('DISABLE_PYTHON')
+if env['WITH_BF_PYTHON']:
+ defs.append('WITH_PYTHON')
if env['WITH_BF_COLLADA']:
defs.append('WITH_COLLADA')
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 2a36e91ac66..7d4690ac7e1 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -218,6 +218,7 @@ struct wmOperatorTypeMacro *WM_operatortype_macro_define(struct wmOperatorType *
int WM_operator_poll (struct bContext *C, struct wmOperatorType *ot);
+int WM_operator_poll_context(struct bContext *C, struct wmOperatorType *ot, int context);
int WM_operator_call (struct bContext *C, struct wmOperator *op);
int WM_operator_repeat (struct bContext *C, struct wmOperator *op);
int WM_operator_name_call (struct bContext *C, const char *opstring, int context, struct PointerRNA *properties);
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index 1b0870194a6..76b5762fa4e 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -58,7 +58,7 @@
#include "ED_screen.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -69,7 +69,7 @@
void WM_operator_free(wmOperator *op)
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if(op->py_instance) {
/* do this first incase there are any __del__ functions or
* similar that use properties */
@@ -232,12 +232,13 @@ void WM_check(bContext *C)
/* case: no open windows at all, for old file reads */
wm_window_add_ghostwindows(C, wm);
+ }
- /* case: fileread */
- if((wm->initialized & WM_INIT_WINDOW) == 0) {
- ED_screens_initialize(wm);
- wm->initialized |= WM_INIT_WINDOW;
- }
+ /* case: fileread */
+ /* note: this runs in bg mode to set the screen context cb */
+ if((wm->initialized & WM_INIT_WINDOW) == 0) {
+ ED_screens_initialize(wm);
+ wm->initialized |= WM_INIT_WINDOW;
}
}
@@ -274,7 +275,7 @@ void wm_add_default(bContext *C)
win= wm_window_new(C);
win->screen= screen;
screen->winid= win->winid;
- BLI_strncpy(win->screenname, screen->id.name+2, 21);
+ BLI_strncpy(win->screenname, screen->id.name+2, sizeof(win->screenname));
wm->winactive= win;
wm->file_saved= 1;
diff --git a/source/blender/windowmanager/intern/wm_cursors.c b/source/blender/windowmanager/intern/wm_cursors.c
index 1803a1cee91..ab49c8a34bf 100644
--- a/source/blender/windowmanager/intern/wm_cursors.c
+++ b/source/blender/windowmanager/intern/wm_cursors.c
@@ -216,16 +216,13 @@ void WM_timecursor(wmWindow *win, int nr)
{0, 60, 66, 66, 60, 66, 66, 60},
{0, 56, 68, 68, 120, 64, 68, 56}
};
- unsigned char mask[16][2];
- unsigned char bitmap[16][2];
+ unsigned char mask[16][2]= {{0}};
+ unsigned char bitmap[16][2]= {{0}};
int i, idx;
if(win->lastcursor == 0)
win->lastcursor= win->cursor;
- memset(&bitmap, 0x00, sizeof(bitmap));
- memset(&mask, 0xFF, sizeof(mask));
-
/* print number bottom right justified */
for (idx= 3; nr && idx>=0; idx--) {
char *digit= number_bitmaps[nr%10];
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index 47ca4314cc7..910a528d419 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -72,6 +72,8 @@
#include "wm_event_types.h"
#include "wm_draw.h"
+static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, PointerRNA *properties, ReportList *reports, short context, short poll_only);
+
/* ************ event management ************** */
void wm_event_add(wmWindow *win, wmEvent *event_to_add)
@@ -241,7 +243,7 @@ void wm_event_do_notifiers(bContext *C)
if(!G.rendering) {
/* depsgraph gets called, might send more notifiers */
- ED_update_for_newframe(C, 1);
+ ED_update_for_newframe(CTX_data_main(C), win->screen->scene, win->screen, 1);
}
}
}
@@ -364,9 +366,9 @@ int WM_operator_poll(bContext *C, wmOperatorType *ot)
wmOperatorTypeMacro *otmacro;
for(otmacro= ot->macro.first; otmacro; otmacro= otmacro->next) {
- wmOperatorType *ot= WM_operatortype_find(otmacro->idname, 0);
+ wmOperatorType *ot_macro= WM_operatortype_find(otmacro->idname, 0);
- if(0==WM_operator_poll(C, ot))
+ if(0==WM_operator_poll(C, ot_macro))
return 0;
}
@@ -379,6 +381,12 @@ int WM_operator_poll(bContext *C, wmOperatorType *ot)
return 1;
}
+/* sets up the new context and calls 'wm_operator_invoke()' with poll_only */
+int WM_operator_poll_context(bContext *C, wmOperatorType *ot, int context)
+{
+ return wm_operator_call_internal(C, ot, NULL, NULL, context, TRUE);
+}
+
static void wm_operator_print(wmOperator *op)
{
char *buf = WM_operator_pystring(NULL, op->type, op->ptr, 1);
@@ -603,11 +611,15 @@ static void wm_region_mouse_co(bContext *C, wmEvent *event)
}
}
-int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties, ReportList *reports)
+int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerRNA *properties, ReportList *reports, short poll_only)
{
wmWindowManager *wm= CTX_wm_manager(C);
int retval= OPERATOR_PASS_THROUGH;
+ /* this is done because complicated setup is done to call this function that is better not duplicated */
+ if(poll_only)
+ return WM_operator_poll(C, ot);
+
if(WM_operator_poll(C, ot)) {
wmOperator *op= wm_operator_create(wm, ot, properties, reports); /* if reports==NULL, theyll be initialized */
@@ -693,7 +705,7 @@ int wm_operator_invoke(bContext *C, wmOperatorType *ot, wmEvent *event, PointerR
* this is for python to access since its done the operator lookup
*
* invokes operator in context */
-static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int context, PointerRNA *properties, ReportList *reports)
+static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, PointerRNA *properties, ReportList *reports, short context, short poll_only)
{
wmWindow *window= CTX_wm_window(C);
wmEvent *event;
@@ -758,7 +770,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex
CTX_wm_region_set(C, ar1);
}
- retval= wm_operator_invoke(C, ot, event, properties, reports);
+ retval= wm_operator_invoke(C, ot, event, properties, reports, poll_only);
/* set region back */
CTX_wm_region_set(C, ar);
@@ -772,7 +784,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex
ARegion *ar= CTX_wm_region(C);
CTX_wm_region_set(C, NULL);
- retval= wm_operator_invoke(C, ot, event, properties, reports);
+ retval= wm_operator_invoke(C, ot, event, properties, reports, poll_only);
CTX_wm_region_set(C, ar);
return retval;
@@ -786,7 +798,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex
CTX_wm_region_set(C, NULL);
CTX_wm_area_set(C, NULL);
- retval= wm_operator_invoke(C, ot, event, properties, reports);
+ retval= wm_operator_invoke(C, ot, event, properties, reports, poll_only);
CTX_wm_region_set(C, ar);
CTX_wm_area_set(C, area);
@@ -794,7 +806,7 @@ static int wm_operator_call_internal(bContext *C, wmOperatorType *ot, int contex
}
case WM_OP_EXEC_DEFAULT:
case WM_OP_INVOKE_DEFAULT:
- return wm_operator_invoke(C, ot, event, properties, reports);
+ return wm_operator_invoke(C, ot, event, properties, reports, poll_only);
}
}
@@ -807,7 +819,7 @@ int WM_operator_name_call(bContext *C, const char *opstring, int context, Pointe
{
wmOperatorType *ot= WM_operatortype_find(opstring, 0);
if(ot)
- return wm_operator_call_internal(C, ot, context, properties, NULL);
+ return wm_operator_call_internal(C, ot, properties, NULL, context, FALSE);
return 0;
}
@@ -839,7 +851,7 @@ int WM_operator_call_py(bContext *C, wmOperatorType *ot, int context, PointerRNA
printf("error \"%s\" operator has no exec function, python cannot call it\n", op->type->name);
#endif
- retval= wm_operator_call_internal(C, ot, context, properties, reports);
+ retval= wm_operator_call_internal(C, ot, properties, reports, context, FALSE);
/* keep the reports around if needed later */
if ( (retval & OPERATOR_RUNNING_MODAL) ||
@@ -1168,7 +1180,7 @@ static int wm_handler_operator_call(bContext *C, ListBase *handlers, wmEventHand
wmOperatorType *ot= WM_operatortype_find(event->keymap_idname, 0);
if(ot)
- retval= wm_operator_invoke(C, ot, event, properties, NULL);
+ retval= wm_operator_invoke(C, ot, event, properties, NULL, FALSE);
}
/* Finished and pass through flag as handled */
@@ -1421,7 +1433,7 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
if(drop->poll(C, drag, event)) {
drop->copy(drag, drop);
- wm_operator_invoke(C, drop->ot, event, drop->ptr, NULL);
+ wm_operator_invoke(C, drop->ot, event, drop->ptr, NULL, FALSE);
action |= WM_HANDLER_BREAK;
}
}
@@ -1636,7 +1648,7 @@ void wm_event_do_handlers(bContext *C)
int ncfra = sound_sync_scene(scene) * FPS + 0.5;
if(ncfra != scene->r.cfra) {
scene->r.cfra = ncfra;
- ED_update_for_newframe(C, 1);
+ ED_update_for_newframe(CTX_data_main(C), scene, win->screen, 1);
WM_event_add_notifier(C, NC_WINDOW, NULL);
}
}
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 6db7f2554c4..ca37f0db61b 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -96,7 +96,7 @@
#include "GPU_draw.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -195,7 +195,7 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist)
else
win->screen= ED_screen_duplicate(win, screen);
- BLI_strncpy(win->screenname, win->screen->id.name+2, 21);
+ BLI_strncpy(win->screenname, win->screen->id.name+2, sizeof(win->screenname));
win->screen->winid= win->winid;
}
}
@@ -317,7 +317,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports)
ED_editors_init(C);
DAG_on_load_update(CTX_data_main(C));
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* run any texts that were loaded in and flagged as modules */
BPY_load_user_modules(C);
#endif
@@ -400,7 +400,7 @@ int WM_read_homefile(bContext *C, wmOperator *op)
ED_editors_init(C);
DAG_on_load_update(CTX_data_main(C));
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if(CTX_py_init_get(C)) {
/* sync addons, these may have changed from the defaults */
BPY_eval_string(C, "__import__('bpy').utils.addon_reset_all()");
diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c
index 8dcf65886e4..c1e28654f73 100644
--- a/source/blender/windowmanager/intern/wm_gesture.c
+++ b/source/blender/windowmanager/intern/wm_gesture.c
@@ -232,8 +232,12 @@ static void draw_filled_lasso(wmGesture *gt)
int i;
for (i=0; ipoints; i++, lasso+=2) {
- float co[3] = {(float)lasso[0], (float)lasso[1], 0.f};
-
+ float co[3];
+
+ co[0]= (float)lasso[0];
+ co[1]= (float)lasso[1];
+ co[2]= 0.0f;
+
v = BLI_addfillvert(co);
if (lastv)
e = BLI_addfilledge(lastv, v);
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index e373579577d..d98459a113c 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -61,11 +61,13 @@
#include "RE_pipeline.h" /* RE_ free stuff */
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
+#ifdef WITH_GAMEENGINE
#include "SYS_System.h"
+#endif
#include "RNA_define.h"
@@ -141,7 +143,7 @@ void WM_init(bContext *C, int argc, char **argv)
* before WM_read_homefile() or make py-drivers check if python is running.
* Will try fix when the crash can be repeated. - campbell. */
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
BPY_set_context(C); /* necessary evil */
BPY_start_python(argc, argv);
BPY_load_user_modules(C);
@@ -396,7 +398,7 @@ void WM_exit(bContext *C)
// free_txt_data();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* XXX - old note */
/* before free_blender so py's gc happens while library still exists */
/* needed at least for a rare sigsegv that can happen in pydrivers */
@@ -432,9 +434,9 @@ void WM_exit(bContext *C)
wm_ghost_exit();
CTX_free(C);
-
+#ifdef WITH_GAMEENGINE
SYS_DeleteSystem(SYS_GetSystem());
-
+#endif
if(MEM_get_memory_blocks_in_use()!=0) {
printf("Error Totblock: %d\n", MEM_get_memory_blocks_in_use());
MEM_printmemlist();
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index ccdb19adfce..7fa58db54bb 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -31,6 +31,7 @@
#include
#include
#include
+#include
#ifdef WIN32
#include
#include
@@ -889,6 +890,11 @@ static uiBlock *wm_block_create_redo(bContext *C, ARegion *ar, void *arg_op)
block= uiBeginBlock(C, ar, "redo_popup", UI_EMBOSS);
uiBlockClearFlag(block, UI_BLOCK_LOOP);
uiBlockSetFlag(block, UI_BLOCK_KEEP_OPEN|UI_BLOCK_RET_1|UI_BLOCK_MOVEMOUSE_QUIT);
+
+ /* if register is not enabled, the operator gets freed on OPERATOR_FINISHED
+ * ui_apply_but_funcs_after calls redo_cb and crashes */
+ assert(op->type->flag & OPTYPE_REGISTER);
+
uiBlockSetHandleFunc(block, redo_cb, arg_op);
if(!op->properties) {
@@ -1021,6 +1027,11 @@ int WM_operator_props_popup(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
{
int retval= OPERATOR_CANCELLED;
+ if((op->type->flag & OPTYPE_REGISTER)==0) {
+ BKE_reportf(op->reports, RPT_ERROR, "Operator '%s' does not have register enabled, incorrect invoke function.", op->type->idname);
+ return OPERATOR_CANCELLED;
+ }
+
if(op->type->exec) {
retval= op->type->exec(C, op);
@@ -1059,6 +1070,11 @@ int WM_operator_ui_popup(bContext *C, wmOperator *op, int width, int height)
int WM_operator_redo_popup(bContext *C, wmOperator *op)
{
+ if((op->type->flag & OPTYPE_REGISTER)==0) {
+ BKE_reportf(op->reports, RPT_ERROR, "Operator '%s' does not have register enabled, incorrect invoke function.", op->type->idname);
+ return OPERATOR_CANCELLED;
+ }
+
uiPupBlock(C, wm_block_create_redo, op);
return OPERATOR_CANCELLED;
@@ -1904,7 +1920,7 @@ static void WM_OT_save_mainfile(wmOperatorType *ot)
#include "../../collada/collada.h"
-static int wm_collada_export_invoke(bContext *C, wmOperator *op, wmEvent *event)
+static int wm_collada_export_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
{
if(!RNA_property_is_set(op->ptr, "filepath")) {
char filepath[FILE_MAX];
@@ -2850,7 +2866,10 @@ int WM_radial_control_invoke(bContext *C, wmOperator *op, wmEvent *event)
int mode = RNA_int_get(op->ptr, "mode");
float initial_value = RNA_float_get(op->ptr, "initial_value");
//float initial_size = RNA_float_get(op->ptr, "initial_size");
- int mouse[2] = {event->x, event->y};
+ int mouse[2];
+
+ mouse[0]= event->x;
+ mouse[1]= event->y;
//if (initial_size == 0)
// initial_size = WM_RADIAL_CONTROL_DISPLAY_SIZE;
@@ -2986,7 +3005,8 @@ static int redraw_timer_exec(bContext *C, wmOperator *op)
for(a=0; ascreen= ED_screen_duplicate(win, winorig->screen);
- BLI_strncpy(win->screenname, win->screen->id.name+2, 21);
+ BLI_strncpy(win->screenname, win->screen->id.name+2, sizeof(win->screenname));
win->screen->winid= win->winid;
win->screen->do_refresh= 1;
diff --git a/source/blenderplayer/CMakeLists.txt b/source/blenderplayer/CMakeLists.txt
index b1dbde8d4b1..6c97c2a4465 100644
--- a/source/blenderplayer/CMakeLists.txt
+++ b/source/blenderplayer/CMakeLists.txt
@@ -74,8 +74,8 @@ IF(UNIX)
bf_converter
bf_ketsji
bf_bullet
+ bf_dummy
bf_common
- bf_dummy
bf_logic
bf_rasterizer
bf_oglrasterizer
diff --git a/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt b/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
index a242c8b7551..28510b0a113 100644
--- a/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
+++ b/source/blenderplayer/bad_level_call_stubs/CMakeLists.txt
@@ -48,7 +48,7 @@ IF(WITH_BUILDINFO)
ENDIF(WITH_BUILDINFO)
IF(WITH_GAMEENGINE)
- ADD_DEFINITIONS(-DGAMEBLENDER)
+ ADD_DEFINITIONS(-DWITH_GAMEENGINE)
ENDIF(WITH_GAMEENGINE)
IF(WITH_INTERNATIONAL)
diff --git a/source/blenderplayer/bad_level_call_stubs/SConscript b/source/blenderplayer/bad_level_call_stubs/SConscript
index 5d71f83719f..0217f1aeacc 100644
--- a/source/blenderplayer/bad_level_call_stubs/SConscript
+++ b/source/blenderplayer/bad_level_call_stubs/SConscript
@@ -12,6 +12,6 @@ if env['WITH_BF_INTERNATIONAL']:
defs += 'WITH_FREETYPE2'
if env['WITH_BF_GAMEENGINE']:
- defs += ' GAMEBLENDER=1'
+ defs += ' WITH_GAMEENGINE'
env.BlenderLib ('blenkernel_blc', sources = Split(sources), includes=Split(incs), defines=Split(defs), libtype=['player'],priority=[220] )
diff --git a/source/blenderplayer/bad_level_call_stubs/stubs.c b/source/blenderplayer/bad_level_call_stubs/stubs.c
index f2970293b05..7f0a57be371 100644
--- a/source/blenderplayer/bad_level_call_stubs/stubs.c
+++ b/source/blenderplayer/bad_level_call_stubs/stubs.c
@@ -28,7 +28,7 @@
* BKE_bad_level_calls function stubs
*/
-#if GAMEBLENDER == 1
+#ifdef WITH_GAMEENGINE
#include
#include "DNA_listBase.h"
#include "RNA_types.h"
@@ -358,6 +358,7 @@ struct wmOperatorTypeMacro *WM_operatortype_macro_define(struct wmOperatorType *
int WM_operator_call_py(struct bContext *C, struct wmOperatorType *ot, int context, struct PointerRNA *properties, struct ReportList *reports){return 0;}
int WM_operatortype_remove(const char *idname){return 0;}
int WM_operator_poll(struct bContext *C, struct wmOperatorType *ot){return 0;}
+int WM_operator_poll_context(struct bContext *C, struct wmOperatorType *ot, int context){return 0;}
int WM_operator_props_popup(struct bContext *C, struct wmOperator *op, struct wmEvent *event){return 0;}
void WM_operator_properties_free(struct PointerRNA *ptr){}
void WM_operator_properties_create(struct PointerRNA *ptr, const char *opstring){}
@@ -443,4 +444,4 @@ int CSG_PerformBooleanOperation(
CSG_VertexIteratorDescriptor obBVertices)
{ return 0;}
-#endif // GAMEBLENDER == 1
+#endif // WITH_GAMEENGINE
diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt
index f0b3ac53343..e42f707a38e 100644
--- a/source/creator/CMakeLists.txt
+++ b/source/creator/CMakeLists.txt
@@ -41,8 +41,6 @@ INCLUDE_DIRECTORIES(
../blender/gpu
../blender/freestyle
../blender/windowmanager
- ../kernel/gen_messaging
- ../kernel/gen_system
)
IF(WIN32)
@@ -75,10 +73,18 @@ ENDIF(WITH_IMAGE_HDR)
IF(WITH_PYTHON)
INCLUDE_DIRECTORIES(../blender/python)
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
+IF(WITH_GAMEENGINE)
+ INCLUDE_DIRECTORIES(
+ ../kernel/gen_messaging
+ ../kernel/gen_system
+ )
+
+ ADD_DEFINITIONS(-DWITH_GAMEENGINE)
+ENDIF(WITH_GAMEENGINE)
+
IF(NOT WITH_SDL)
ADD_DEFINITIONS(-DDISABLE_SDL)
ENDIF(NOT WITH_SDL)
@@ -536,13 +542,13 @@ ENDIF(WITH_MOD_FLUID)
bf_intern_ctr
bf_blroutines
bf_converter
- bf_dummy
+ bf_dummy
bf_bullet
bf_intern_smoke
extern_minilzo
extern_lzma
- bf_common
bf_ketsji
+ bf_common
bf_logic
bf_rasterizer
bf_oglrasterizer
diff --git a/source/creator/SConscript b/source/creator/SConscript
index d8f875b3d49..96899489c1f 100644
--- a/source/creator/SConscript
+++ b/source/creator/SConscript
@@ -31,10 +31,9 @@ if not env['WITH_BF_SDL']:
if env['WITH_BF_PYTHON']:
incs += ' ../blender/python'
+ defs.append('WITH_PYTHON')
if env['BF_DEBUG']:
defs.append('_DEBUG')
-else:
- defs.append('DISABLE_PYTHON')
if env['BF_BUILDINFO']:
defs.append('BUILD_DATE')
diff --git a/source/creator/creator.c b/source/creator/creator.c
index a89bef537a9..46176106026 100644
--- a/source/creator/creator.c
+++ b/source/creator/creator.c
@@ -57,8 +57,7 @@
#include "BLI_args.h"
#include "BLI_threads.h"
-
-#include "GEN_messaging.h"
+#include "BLI_scanfill.h" // for BLI_setErrorCallBack, TODO, move elsewhere
#include "DNA_ID.h"
#include "DNA_scene_types.h"
@@ -80,7 +79,7 @@
#include "IMB_imbuf.h" // for IMB_init
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "BPY_extern.h"
#endif
@@ -99,7 +98,12 @@
#include "FRS_freestyle.h"
/* for passing information between creator and gameengine */
+#ifdef WITH_GAMEENGINE
+#include "GEN_messaging.h"
#include "SYS_System.h"
+#else /* dummy */
+#define SYS_SystemHandle int
+#endif
#include
@@ -446,6 +450,9 @@ static int register_extension(int UNUSED(argc), char **UNUSED(argv), void *data)
static int no_joystick(int UNUSED(argc), char **UNUSED(argv), void *data)
{
+#ifndef WITH_GAMEENGINE
+ (void)data;
+#else
SYS_SystemHandle *syshandle = data;
/**
@@ -454,6 +461,7 @@ static int no_joystick(int UNUSED(argc), char **UNUSED(argv), void *data)
*/
SYS_WriteCommandLineInt(*syshandle, "nojoystick",1);
if (G.f & G_DEBUG) printf("disabling nojoystick\n");
+#endif
return 0;
}
@@ -635,8 +643,13 @@ static int set_extension(int argc, char **argv, void *data)
static int set_ge_parameters(int argc, char **argv, void *data)
{
- SYS_SystemHandle syshandle = *(SYS_SystemHandle*)data;
int a = 0;
+#ifdef WITH_GAMEENGINE
+ SYS_SystemHandle syshandle = *(SYS_SystemHandle*)data;
+#else
+ (void)data;
+#endif
+
/**
gameengine parameters are automaticly put into system
-g [paramname = value]
@@ -657,7 +670,9 @@ example:
{
a++;
/* assignment */
+#ifdef WITH_GAMEENGINE
SYS_WriteCommandLineString(syshandle,paramname,argv[a]);
+#endif
} else
{
printf("error: argument assignment (%s) without value.\n",paramname);
@@ -666,8 +681,9 @@ example:
/* name arg eaten */
} else {
+#ifdef WITH_GAMEENGINE
SYS_WriteCommandLineInt(syshandle,argv[a],1);
-
+#endif
/* doMipMap */
if (!strcmp(argv[a],"nomipmap"))
{
@@ -815,7 +831,7 @@ static int set_skip_frame(int argc, char **argv, void *data)
}
/* macro for ugly context setup/reset */
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#define BPY_CTX_SETUP(_cmd) \
{ \
wmWindowManager *wm= CTX_wm_manager(C); \
@@ -833,11 +849,11 @@ static int set_skip_frame(int argc, char **argv, void *data)
CTX_data_scene_set(C, prevscene); \
} \
-#endif /* DISABLE_PYTHON */
+#endif /* WITH_PYTHON */
static int run_python(int argc, char **argv, void *data)
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
bContext *C = data;
/* workaround for scripts not getting a bpy.context.scene, causes internal errors elsewhere */
@@ -858,12 +874,12 @@ static int run_python(int argc, char **argv, void *data)
(void)argc; (void)argv; (void)data; /* unused */
printf("This blender was built without python support\n");
return 0;
-#endif /* DISABLE_PYTHON */
+#endif /* WITH_PYTHON */
}
static int run_python_console(int UNUSED(argc), char **argv, void *data)
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
bContext *C = data;
const char *expr= "__import__('code').interact()";
@@ -874,7 +890,7 @@ static int run_python_console(int UNUSED(argc), char **argv, void *data)
(void)argv; (void)data; /* unused */
printf("This blender was built without python support\n");
return 0;
-#endif /* DISABLE_PYTHON */
+#endif /* WITH_PYTHON */
}
static int load_file(int UNUSED(argc), char **argv, void *data)
@@ -900,7 +916,7 @@ static int load_file(int UNUSED(argc), char **argv, void *data)
}
/* WM_read_file() runs normally but since we're in background mode do here */
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* run any texts that were loaded in and flagged as modules */
BPY_load_user_modules(C);
#endif
@@ -1079,8 +1095,12 @@ int main(int argc, char **argv)
IMB_init();
+#ifdef WITH_GAMEENGINE
syshandle = SYS_GetSystem();
GEN_init_messaging_system();
+#else
+ syshandle= 0;
+#endif
/* first test for background */
ba = BLI_argsInit(argc, argv); /* skip binary path */
@@ -1116,13 +1136,6 @@ int main(int argc, char **argv)
#ifndef DISABLE_SDL
BLI_setenv("SDL_VIDEODRIVER", "dummy");
-/* I think this is not necessary anymore (04-24-2010 neXyon)
-#ifdef __linux__
- // On linux the default SDL driver dma often would not play
- // use alsa if none is set
- setenv("SDL_AUDIODRIVER", "alsa", 0);
-#endif
-*/
#endif
}
else {
@@ -1132,7 +1145,7 @@ int main(int argc, char **argv)
BLI_where_is_temp( btempdir, 0 ); /* call after loading the startup.blend so we can read U.tempdir */
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/**
* NOTE: the U.pythondir string is NULL until WM_init() is executed,
* so we provide the BPY_ function below to append the user defined
@@ -1143,7 +1156,8 @@ int main(int argc, char **argv)
*/
// TODO - U.pythondir
-
+#else
+ printf("\n* WARNING * - Blender compiled without Python!\nthis is not intended for typical usage\n\n");
#endif
CTX_py_init_set(C, 1);
diff --git a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
index 858a5964a52..9de4020ecff 100644
--- a/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
+++ b/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
@@ -142,7 +142,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
BLI_strncpy(pathname, blenderdata->name, sizeof(pathname));
BLI_strncpy(oldsce, G.main->name, sizeof(oldsce));
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
resetGamePythonPath(); // need this so running a second time wont use an old blendfiles path
setGamePythonPath(G.main->name);
@@ -172,7 +172,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
bool frameRate = (SYS_GetCommandLineInt(syshandle, "show_framerate", 0) != 0);
bool animation_record = (SYS_GetCommandLineInt(syshandle, "animation_record", 0) != 0);
bool displaylists = (SYS_GetCommandLineInt(syshandle, "displaylists", 0) != 0);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
bool nodepwarnings = (SYS_GetCommandLineInt(syshandle, "ignore_deprecation_warnings", 0) != 0);
#endif
bool novertexarrays = (SYS_GetCommandLineInt(syshandle, "novertexarrays", 0) != 0);
@@ -221,7 +221,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
ketsjiengine->SetUseFixedTime(usefixed);
ketsjiengine->SetTimingDisplay(frameRate, profile, properties);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
CValue::SetDeprecationWarnings(nodepwarnings);
#endif
@@ -311,7 +311,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
if(blenderdata) {
BLI_strncpy(G.main->name, blenderdata->name, sizeof(G.main->name));
BLI_strncpy(pathname, blenderdata->name, sizeof(pathname));
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
setGamePythonPath(G.main->name);
#endif
}
@@ -382,11 +382,11 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
scene,
canvas);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// some python things
PyObject *gameLogic, *gameLogic_keys;
setupGamePython(ketsjiengine, startscene, blenderdata, pyGlobalDict, &gameLogic, &gameLogic_keys, 0, NULL);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
//initialize Dome Settings
if(scene->gm.stereoflag == STEREO_DOME)
@@ -477,7 +477,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
// when exiting the mainloop
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// Clears the dictionary by hand:
// This prevents, extra references to global variables
// inside the GameLogic dictionary when the python interpreter is finalized.
@@ -499,7 +499,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
gameLogic_keys_new = NULL;
#endif
ketsjiengine->StopEngine();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
exitGamePythonScripting();
#endif
networkdevice->Disconnect();
@@ -510,7 +510,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
sceneconverter = NULL;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
Py_DECREF(gameLogic_keys);
gameLogic_keys = NULL;
#endif
@@ -575,7 +575,7 @@ extern "C" void StartKetsjiShell(struct bContext *C, struct ARegion *ar, rcti *c
BLI_strncpy(G.main->name, oldsce, sizeof(G.main->name));
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
Py_DECREF(pyGlobalDict);
// Release Python's GIL
diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt
index 661f9c5b25d..1f895ad0abc 100644
--- a/source/gameengine/BlenderRoutines/CMakeLists.txt
+++ b/source/gameengine/BlenderRoutines/CMakeLists.txt
@@ -8,7 +8,6 @@ SET(INC
../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer
../../../source/gameengine/Converter
../../../source/blender/imbuf
- ../../../intern/ghost/include
../../../intern/moto/include
../../../source/gameengine/Ketsji
../../../source/blender/blenlib
@@ -16,8 +15,7 @@ SET(INC
../../../source/blender/blenfont
../../../source/blender/editors/include
../../../source/blender/windowmanager
- ../../../source/blender
- ../../../source/blender/include
+ ../../../source/blender
../../../source/blender/makesdna
../../../source/blender/makesrna
../../../source/gameengine/Rasterizer
@@ -28,7 +26,6 @@ SET(INC
../../../source/gameengine/Physics/common
../../../source/gameengine/Physics/Bullet
../../../source/gameengine/Network/LoopBackNetwork
- ../../../source/blender/misc
../../../source/blender/blenloader
../../../source/blender/gpu
../../../extern/bullet2/src
@@ -54,8 +51,7 @@ ENDIF(WITH_FFMPEG)
IF(WITH_PYTHON)
LIST(APPEND INC ${PYTHON_INC})
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_blroutines "${SRC}" "${INC}")
diff --git a/source/gameengine/BlenderRoutines/SConscript b/source/gameengine/BlenderRoutines/SConscript
index 1a774fc8aba..91dc2692384 100644
--- a/source/gameengine/BlenderRoutines/SConscript
+++ b/source/gameengine/BlenderRoutines/SConscript
@@ -27,8 +27,7 @@ if env['WITH_BF_FFMPEG']:
if env['WITH_BF_PYTHON']:
incs += ' ' + env['BF_PYTHON_INC']
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
if env['WITH_BF_CXX_GUARDEDALLOC']:
defs.append('WITH_CXX_GUARDEDALLOC')
diff --git a/source/gameengine/Converter/BL_ActionActuator.cpp b/source/gameengine/Converter/BL_ActionActuator.cpp
index b8d4c4e0f04..39e3e87708e 100644
--- a/source/gameengine/Converter/BL_ActionActuator.cpp
+++ b/source/gameengine/Converter/BL_ActionActuator.cpp
@@ -428,7 +428,7 @@ bool BL_ActionActuator::Update(double curtime, bool frame)
return keepgoing;
};
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -674,4 +674,4 @@ PyObject* BL_ActionActuator::pyattr_get_channel_names(void *self_v, const KX_PYA
return ret;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Converter/BL_ActionActuator.h b/source/gameengine/Converter/BL_ActionActuator.h
index 10ce1fad27a..9682c0e45f7 100644
--- a/source/gameengine/Converter/BL_ActionActuator.h
+++ b/source/gameengine/Converter/BL_ActionActuator.h
@@ -84,7 +84,7 @@ public:
bAction* GetAction() { return m_action; }
void SetAction(bAction* act) { m_action= act; }
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
KX_PYMETHOD_O(BL_ActionActuator,GetChannel);
KX_PYMETHOD_DOC(BL_ActionActuator,setChannel);
@@ -131,7 +131,7 @@ public:
return 1;
}
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
protected:
diff --git a/source/gameengine/Converter/BL_ArmatureActuator.cpp b/source/gameengine/Converter/BL_ArmatureActuator.cpp
index 82b8307a2bc..db36f7e7c38 100644
--- a/source/gameengine/Converter/BL_ArmatureActuator.cpp
+++ b/source/gameengine/Converter/BL_ArmatureActuator.cpp
@@ -175,7 +175,7 @@ bool BL_ArmatureActuator::Update(double curtime, bool frame)
return result;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python Integration Hooks */
@@ -257,5 +257,5 @@ PyObject* BL_ArmatureActuator::pyattr_get_constraint(void *self, const struct KX
return constraint->GetProxy();
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Converter/BL_ArmatureActuator.h b/source/gameengine/Converter/BL_ArmatureActuator.h
index 72e2e96ea73..b3f9ee2f1f2 100644
--- a/source/gameengine/Converter/BL_ArmatureActuator.h
+++ b/source/gameengine/Converter/BL_ArmatureActuator.h
@@ -66,14 +66,14 @@ public:
virtual bool Update(double curtime, bool frame);
virtual void ReParent(SCA_IObject* parent);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* These are used to get and set m_target */
static PyObject* pyattr_get_constraint(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
private:
// identify the constraint that this actuator controls
diff --git a/source/gameengine/Converter/BL_ArmatureChannel.cpp b/source/gameengine/Converter/BL_ArmatureChannel.cpp
index 8f5ec230486..13de701c510 100644
--- a/source/gameengine/Converter/BL_ArmatureChannel.cpp
+++ b/source/gameengine/Converter/BL_ArmatureChannel.cpp
@@ -33,7 +33,7 @@
#include "BLI_math.h"
#include "BLI_string.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyTypeObject BL_ArmatureChannel::Type = {
PyVarObject_HEAD_INIT(NULL, 0)
@@ -72,7 +72,7 @@ PyObject *BL_ArmatureChannel::NewProxy(bool py_owns)
return NewProxyPlus_Ext(this, &Type, m_posechannel, py_owns);
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
BL_ArmatureChannel::BL_ArmatureChannel(
BL_ArmatureObject *armature,
@@ -85,7 +85,7 @@ BL_ArmatureChannel::~BL_ArmatureChannel()
{
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// PYTHON
@@ -461,4 +461,4 @@ PyObject *BL_ArmatureBone::py_bone_get_children(void *self, const struct KX_PYAT
return childrenlist;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Converter/BL_ArmatureChannel.h b/source/gameengine/Converter/BL_ArmatureChannel.h
index 79f0cc80348..e1c18215c53 100644
--- a/source/gameengine/Converter/BL_ArmatureChannel.h
+++ b/source/gameengine/Converter/BL_ArmatureChannel.h
@@ -57,7 +57,7 @@ public:
struct bPoseChannel *posechannel);
virtual ~BL_ArmatureChannel();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// Python access
virtual PyObject* py_repr(void);
@@ -65,7 +65,7 @@ public:
static int py_attr_setattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static PyObject* py_attr_get_joint_rotation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static int py_attr_set_joint_rotation(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
/* this is a factory class to access bBone data field in the GE.
@@ -82,7 +82,7 @@ private:
public:
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
static PyObject *py_bone_repr(PyObject *self);
static PyObject *py_bone_get_parent(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject *py_bone_get_children(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
diff --git a/source/gameengine/Converter/BL_ArmatureConstraint.cpp b/source/gameengine/Converter/BL_ArmatureConstraint.cpp
index 0b7ab043d16..fa7f8a1bea1 100644
--- a/source/gameengine/Converter/BL_ArmatureConstraint.cpp
+++ b/source/gameengine/Converter/BL_ArmatureConstraint.cpp
@@ -33,7 +33,7 @@
#include "BLI_math.h"
#include "BLI_string.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyTypeObject BL_ArmatureConstraint::Type = {
PyVarObject_HEAD_INIT(NULL, 0)
@@ -62,7 +62,7 @@ PyObject* BL_ArmatureConstraint::py_repr(void)
return PyUnicode_FromString(m_name);
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
BL_ArmatureConstraint::BL_ArmatureConstraint(
BL_ArmatureObject *armature,
@@ -237,7 +237,7 @@ void BL_ArmatureConstraint::SetSubtarget(KX_GameObject* subtarget)
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// PYTHON
@@ -447,4 +447,4 @@ int BL_ArmatureConstraint::py_attr_setattr(void *self_v, const struct KX_PYATTRI
return PY_SET_ATTR_FAIL;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Converter/BL_ArmatureConstraint.h b/source/gameengine/Converter/BL_ArmatureConstraint.h
index a9f612b6c0c..92da8327edb 100644
--- a/source/gameengine/Converter/BL_ArmatureConstraint.h
+++ b/source/gameengine/Converter/BL_ArmatureConstraint.h
@@ -104,14 +104,14 @@ public:
void SetTarget(KX_GameObject* target);
void SetSubtarget(KX_GameObject* subtarget);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// Python access
virtual PyObject* py_repr(void);
static PyObject* py_attr_getattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static int py_attr_setattr(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
#endif //__BL_ARMATURECONSTRAINT
diff --git a/source/gameengine/Converter/BL_ArmatureObject.cpp b/source/gameengine/Converter/BL_ArmatureObject.cpp
index 97d6b6efd27..0c5bb036b04 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.cpp
+++ b/source/gameengine/Converter/BL_ArmatureObject.cpp
@@ -594,7 +594,7 @@ float BL_ArmatureObject::GetBoneLength(Bone* bone) const
return (float)(MT_Point3(bone->head) - MT_Point3(bone->tail)).length();
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// PYTHON
@@ -661,4 +661,4 @@ KX_PYMETHODDEF_DOC_NOARGS(BL_ArmatureObject, update,
Py_RETURN_NONE;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Converter/BL_ArmatureObject.h b/source/gameengine/Converter/BL_ArmatureObject.h
index 646e9d45365..525c265d607 100644
--- a/source/gameengine/Converter/BL_ArmatureObject.h
+++ b/source/gameengine/Converter/BL_ArmatureObject.h
@@ -108,14 +108,14 @@ public:
virtual int GetGameObjectType() { return OBJ_ARMATURE; }
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// PYTHON
static PyObject* pyattr_get_constraints(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_channels(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
KX_PYMETHOD_DOC_NOARGS(BL_ArmatureObject, update);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
protected:
/* list element: BL_ArmatureConstraint. Use SG_DListHead to have automatic list replication */
diff --git a/source/gameengine/Converter/BL_BlenderDataConversion.cpp b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
index 69483aed1ec..715e5e33e75 100644
--- a/source/gameengine/Converter/BL_BlenderDataConversion.cpp
+++ b/source/gameengine/Converter/BL_BlenderDataConversion.cpp
@@ -1740,8 +1740,9 @@ static KX_GameObject *gameobject_from_blenderobject(
bool bHasDvert = mesh->dvert != NULL && ob->defbase.first;
bool bHasArmature = (BL_ModifierDeformer::HasArmatureDeformer(ob) && ob->parent && ob->parent->type == OB_ARMATURE && bHasDvert);
bool bHasModifier = BL_ModifierDeformer::HasCompatibleDeformer(ob);
+#ifdef USE_BULLET
bool bHasSoftBody = (!ob->parent && (ob->gameflag & OB_SOFT_BODY));
-
+#endif
if (bHasModifier) {
BL_ModifierDeformer *dcont = new BL_ModifierDeformer((BL_DeformableGameObject *)gameobj,
kxscene->GetBlenderScene(), ob, meshobj);
diff --git a/source/gameengine/Converter/BL_DeformableGameObject.h b/source/gameengine/Converter/BL_DeformableGameObject.h
index 076bfaeb458..12f641eee96 100644
--- a/source/gameengine/Converter/BL_DeformableGameObject.h
+++ b/source/gameengine/Converter/BL_DeformableGameObject.h
@@ -37,6 +37,7 @@
#include "DNA_mesh_types.h"
#include "KX_GameObject.h"
#include "BL_MeshDeformer.h"
+#include "KX_SoftBodyDeformer.h"
#include
class BL_ShapeActionActuator;
@@ -79,7 +80,20 @@ public:
bool GetShape(vector &shape);
Key* GetKey()
{
- return (m_pDeformer) ? ((BL_MeshDeformer*)m_pDeformer)->GetMesh()->key : NULL;
+ if(m_pDeformer) {
+ BL_MeshDeformer *deformer= dynamic_cast(m_pDeformer); // incase its not a MeshDeformer
+ if(deformer) {
+ return deformer->GetMesh()->key;
+ }
+
+#if 0 // TODO. shape keys for softbody, currently they dont store a mesh.
+ KX_SoftBodyDeformer *deformer_soft= dynamic_cast(m_pDeformer);
+ if(deformer) {
+ return deformer->GetMesh()->key;
+ }
+#endif
+ }
+ return NULL;
}
virtual void SetDeformer(class RAS_Deformer* deformer);
diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.cpp b/source/gameengine/Converter/BL_ShapeActionActuator.cpp
index 08d3e54a7c5..ccd7dc6f745 100644
--- a/source/gameengine/Converter/BL_ShapeActionActuator.cpp
+++ b/source/gameengine/Converter/BL_ShapeActionActuator.cpp
@@ -408,7 +408,7 @@ bool BL_ShapeActionActuator::Update(double curtime, bool frame)
return keepgoing;
};
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -491,4 +491,4 @@ int BL_ShapeActionActuator::pyattr_set_action(void *self_v, const KX_PYATTRIBUTE
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Converter/BL_ShapeActionActuator.h b/source/gameengine/Converter/BL_ShapeActionActuator.h
index 64cd21e5544..e6457e2c686 100644
--- a/source/gameengine/Converter/BL_ShapeActionActuator.h
+++ b/source/gameengine/Converter/BL_ShapeActionActuator.h
@@ -82,7 +82,7 @@ public:
bAction* GetAction() { return m_action; }
void SetAction(bAction* act) { m_action= act; }
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
static PyObject* pyattr_get_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static int pyattr_set_action(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
@@ -125,7 +125,7 @@ public:
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
protected:
diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt
index e6b5f6c81a0..9e0b4242f28 100644
--- a/source/gameengine/Converter/CMakeLists.txt
+++ b/source/gameengine/Converter/CMakeLists.txt
@@ -41,7 +41,6 @@ SET(INC
../../../source/blender/blenkernel
../../../source/blender/windowmanager
../../../source/blender
- ../../../source/blender/include
../../../source/blender/makesdna
../../../source/blender/makesrna
../../../source/gameengine/Rasterizer
@@ -54,7 +53,6 @@ SET(INC
../../../source/gameengine/Physics/Bullet
../../../source/gameengine/Physics/Dummy
../../../source/gameengine/Network/LoopBackNetwork
- ../../../source/blender/misc
../../../source/blender/blenloader
../../../source/blender/gpu
../../../source/blender/ikplugin
@@ -87,8 +85,7 @@ SET(SRC
IF(WITH_PYTHON)
LIST(APPEND INC ${PYTHON_INC})
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
IF(WITH_BULLET)
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
index 7ec7104f1f4..05b0e75b070 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.cpp
@@ -906,7 +906,7 @@ void KX_BlenderSceneConverter::TestHandlesPhysicsObjectToAnimationIpo()
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject *KX_BlenderSceneConverter::GetPyNamespace()
{
return m_ketsjiEngine->GetPyNamespace();
diff --git a/source/gameengine/Converter/KX_BlenderSceneConverter.h b/source/gameengine/Converter/KX_BlenderSceneConverter.h
index 20f3f863563..8692a75ecb6 100644
--- a/source/gameengine/Converter/KX_BlenderSceneConverter.h
+++ b/source/gameengine/Converter/KX_BlenderSceneConverter.h
@@ -174,7 +174,7 @@ public:
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject *GetPyNamespace();
#endif
diff --git a/source/gameengine/Converter/KX_ConvertControllers.cpp b/source/gameengine/Converter/KX_ConvertControllers.cpp
index a6b62ecb7b0..3bca6b9ab11 100644
--- a/source/gameengine/Converter/KX_ConvertControllers.cpp
+++ b/source/gameengine/Converter/KX_ConvertControllers.cpp
@@ -153,7 +153,7 @@ void BL_ConvertControllers(
bPythonCont* pycont = (bPythonCont*) bcontr->data;
SCA_PythonController* pyctrl = new SCA_PythonController(gameobj, pycont->mode);
gamecontroller = pyctrl;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
pyctrl->SetNamespace(converter->GetPyNamespace());
@@ -183,7 +183,7 @@ void BL_ConvertControllers(
}
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
break;
}
@@ -210,7 +210,7 @@ void BL_ConvertControllers(
converter->RegisterGameController(gamecontroller, bcontr);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if (bcontr->type==CONT_PYTHON) {
SCA_PythonController *pyctrl= static_cast(gamecontroller);
/* not strictly needed but gives syntax errors early on and
@@ -225,7 +225,7 @@ void BL_ConvertControllers(
// pyctrl->Import();
}
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
//done with gamecontroller
gamecontroller->Release();
diff --git a/source/gameengine/Converter/KX_ConvertProperties.cpp b/source/gameengine/Converter/KX_ConvertProperties.cpp
index 44c0ad38909..6c850008e5e 100644
--- a/source/gameengine/Converter/KX_ConvertProperties.cpp
+++ b/source/gameengine/Converter/KX_ConvertProperties.cpp
@@ -126,7 +126,7 @@ void BL_ConvertProperties(Object* object,KX_GameObject* gameobj,SCA_TimeEventMan
propval->Release();
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* Warn if we double up on attributes, this isnt quite right since it wont find inherited attributes however there arnt many */
for(PyAttributeDef *attrdef = KX_GameObject::Attributes; attrdef->m_name; attrdef++) {
if(strcmp(prop->name, attrdef->m_name)==0) {
@@ -141,7 +141,7 @@ void BL_ConvertProperties(Object* object,KX_GameObject* gameobj,SCA_TimeEventMan
}
}
/* end warning check */
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
prop = prop->next;
}
diff --git a/source/gameengine/Converter/SConscript b/source/gameengine/Converter/SConscript
index a276d1623df..f6cf2331a43 100644
--- a/source/gameengine/Converter/SConscript
+++ b/source/gameengine/Converter/SConscript
@@ -29,8 +29,7 @@ if env['BF_DEBUG']:
if env['WITH_BF_PYTHON']:
incs += ' ' + env['BF_PYTHON_INC']
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
if env['WITH_BF_CXX_GUARDEDALLOC']:
defs.append('WITH_CXX_GUARDEDALLOC')
diff --git a/source/gameengine/Expressions/BoolValue.cpp b/source/gameengine/Expressions/BoolValue.cpp
index e6bb454a1b5..5510554bd22 100644
--- a/source/gameengine/Expressions/BoolValue.cpp
+++ b/source/gameengine/Expressions/BoolValue.cpp
@@ -201,9 +201,9 @@ CValue* CBoolValue::GetReplica()
return replica;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* CBoolValue::ConvertValueToPython()
{
return PyBool_FromLong(m_bool != 0);
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Expressions/BoolValue.h b/source/gameengine/Expressions/BoolValue.h
index dac70e3c0b7..8110b9719bf 100644
--- a/source/gameengine/Expressions/BoolValue.h
+++ b/source/gameengine/Expressions/BoolValue.h
@@ -45,7 +45,7 @@ public:
void Configure(CValue* menuvalue);
virtual CValue* GetReplica();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
virtual PyObject* ConvertValueToPython();
#endif
diff --git a/source/gameengine/Expressions/CMakeLists.txt b/source/gameengine/Expressions/CMakeLists.txt
index 828afa7ae92..ad446d1085e 100644
--- a/source/gameengine/Expressions/CMakeLists.txt
+++ b/source/gameengine/Expressions/CMakeLists.txt
@@ -58,8 +58,7 @@ SET(SRC
IF(WITH_PYTHON)
LIST(APPEND INC ${PYTHON_INC})
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_expressions "${SRC}" "${INC}")
diff --git a/source/gameengine/Expressions/FloatValue.cpp b/source/gameengine/Expressions/FloatValue.cpp
index 82c86ac68b2..e00121354f8 100644
--- a/source/gameengine/Expressions/FloatValue.cpp
+++ b/source/gameengine/Expressions/FloatValue.cpp
@@ -310,9 +310,9 @@ CValue* CFloatValue::GetReplica()
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* CFloatValue::ConvertValueToPython()
{
return PyFloat_FromDouble(m_float);
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Expressions/FloatValue.h b/source/gameengine/Expressions/FloatValue.h
index 49d4efa9f74..83b9ff1db5e 100644
--- a/source/gameengine/Expressions/FloatValue.h
+++ b/source/gameengine/Expressions/FloatValue.h
@@ -36,7 +36,7 @@ public:
virtual CValue* GetReplica();
virtual CValue* Calc(VALUE_OPERATOR op, CValue *val);
virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
virtual PyObject* ConvertValueToPython();
#endif
diff --git a/source/gameengine/Expressions/IntValue.cpp b/source/gameengine/Expressions/IntValue.cpp
index 83e57200db0..5ba57e756c0 100644
--- a/source/gameengine/Expressions/IntValue.cpp
+++ b/source/gameengine/Expressions/IntValue.cpp
@@ -322,7 +322,7 @@ void CIntValue::SetValue(CValue* newval)
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* CIntValue::ConvertValueToPython()
{
if((m_int > INT_MIN) && (m_int < INT_MAX))
@@ -330,4 +330,4 @@ PyObject* CIntValue::ConvertValueToPython()
else
return PyLong_FromLongLong(m_int);
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Expressions/IntValue.h b/source/gameengine/Expressions/IntValue.h
index 63efea56d14..e484c436177 100644
--- a/source/gameengine/Expressions/IntValue.h
+++ b/source/gameengine/Expressions/IntValue.h
@@ -48,7 +48,7 @@ public:
void AddConfigurationData(CValue* menuvalue);
virtual CValue* GetReplica();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
virtual PyObject* ConvertValueToPython();
#endif
diff --git a/source/gameengine/Expressions/KX_Python.h b/source/gameengine/Expressions/KX_Python.h
index 7901d5226f7..62353f04e50 100644
--- a/source/gameengine/Expressions/KX_Python.h
+++ b/source/gameengine/Expressions/KX_Python.h
@@ -40,7 +40,7 @@
#undef _POSIX_C_SOURCE
#endif
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "Python.h"
#define USE_MATHUTILS // Blender 2.5x api will use mathutils, for a while we might want to test without it
diff --git a/source/gameengine/Expressions/ListValue.cpp b/source/gameengine/Expressions/ListValue.cpp
index 4d9d82efb98..258aada6565 100644
--- a/source/gameengine/Expressions/ListValue.cpp
+++ b/source/gameengine/Expressions/ListValue.cpp
@@ -268,7 +268,7 @@ bool CListValue::IsModified()
return bmod;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -674,4 +674,4 @@ PyObject* CListValue::Pyfrom_id(PyObject* value)
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Expressions/ListValue.h b/source/gameengine/Expressions/ListValue.h
index 8f3b9dcda0b..ff675dd0e68 100644
--- a/source/gameengine/Expressions/ListValue.h
+++ b/source/gameengine/Expressions/ListValue.h
@@ -60,7 +60,7 @@ public:
bool CheckEqual(CValue* first,CValue* second);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
virtual PyObject* py_repr(void) {
PyObject *py_proxy= this->GetProxy();
PyObject *py_list= PySequence_List(py_proxy);
diff --git a/source/gameengine/Expressions/PyObjectPlus.cpp b/source/gameengine/Expressions/PyObjectPlus.cpp
index 32bf4ba95c4..9195bd64f3f 100644
--- a/source/gameengine/Expressions/PyObjectPlus.cpp
+++ b/source/gameengine/Expressions/PyObjectPlus.cpp
@@ -49,7 +49,7 @@
PyObjectPlus::~PyObjectPlus()
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if(m_proxy) {
BGE_PROXY_REF(m_proxy)= NULL;
Py_DECREF(m_proxy); /* Remove own reference, python may still have 1 */
@@ -60,14 +60,14 @@ PyObjectPlus::~PyObjectPlus()
PyObjectPlus::PyObjectPlus() : SG_QList() // constructor
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
m_proxy= NULL;
#endif
};
void PyObjectPlus::ProcessReplica()
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* Clear the proxy, will be created again if needed with GetProxy()
* otherwise the PyObject will point to the wrong reference */
m_proxy= NULL;
@@ -84,7 +84,7 @@ void PyObjectPlus::ProcessReplica()
*/
void PyObjectPlus::InvalidateProxy() // check typename of each parent
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if(m_proxy) {
BGE_PROXY_REF(m_proxy)=NULL;
Py_DECREF(m_proxy);
@@ -94,7 +94,7 @@ void PyObjectPlus::InvalidateProxy() // check typename of each parent
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/*------------------------------
* PyObjectPlus Type -- Every class, even the abstract one should have a Type
@@ -1224,4 +1224,4 @@ void PyObjectPlus::SetDeprecationWarningFirst(WarnLink* wlink) {m_base_wlink_f
void PyObjectPlus::SetDeprecationWarningLinkLast(WarnLink* wlink) {m_base_wlink_last= wlink;}
void PyObjectPlus::NullDeprecationWarning() {m_base_wlink_first= m_base_wlink_last= NULL;}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Expressions/PyObjectPlus.h b/source/gameengine/Expressions/PyObjectPlus.h
index b2688231a43..d69be6af5e5 100644
--- a/source/gameengine/Expressions/PyObjectPlus.h
+++ b/source/gameengine/Expressions/PyObjectPlus.h
@@ -43,7 +43,7 @@
* Python defines
------------------------------*/
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#ifdef USE_MATHUTILS
extern "C" {
#include "../../blender/python/generic/mathutils.h" /* so we can have mathutils callbacks */
@@ -459,7 +459,7 @@ typedef struct KX_PYATTRIBUTE_DEF {
------------------------------*/
typedef PyTypeObject * PyParentObject; // Define the PyParent Object
-#else // DISABLE_PYTHON
+#else // WITH_PYTHON
#ifdef WITH_CXX_GUARDEDALLOC
#define Py_Header \
@@ -505,7 +505,7 @@ public:
virtual ~PyObjectPlus(); // destructor
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject *m_proxy; /* actually a PyObjectPlus_Proxy */
/* These static functions are referenced by ALL PyObjectPlus_Proxy types
@@ -561,7 +561,7 @@ public:
static bool m_ignore_deprecation_warnings;
};
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject *py_getattr_dict(PyObject *pydict, PyObject *tp_dict);
#endif
diff --git a/source/gameengine/Expressions/SConscript b/source/gameengine/Expressions/SConscript
index 85db689a9ba..dea652dabb4 100644
--- a/source/gameengine/Expressions/SConscript
+++ b/source/gameengine/Expressions/SConscript
@@ -9,8 +9,7 @@ defs = []
if env['WITH_BF_PYTHON']:
incs += ' ' + env['BF_PYTHON_INC']
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
if env['WITH_BF_CXX_GUARDEDALLOC']:
defs.append('WITH_CXX_GUARDEDALLOC')
diff --git a/source/gameengine/Expressions/StringValue.h b/source/gameengine/Expressions/StringValue.h
index d28e435e2a7..ef8228141a2 100644
--- a/source/gameengine/Expressions/StringValue.h
+++ b/source/gameengine/Expressions/StringValue.h
@@ -39,11 +39,11 @@ public:
virtual CValue* CalcFinal(VALUE_DATA_TYPE dtype, VALUE_OPERATOR op, CValue *val);
virtual void SetValue(CValue* newval) { m_strString = newval->GetText(); SetModified(true); };
virtual CValue* GetReplica();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
virtual PyObject* ConvertValueToPython() {
return PyUnicode_FromString(m_strString.Ptr());
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
private:
// data member
diff --git a/source/gameengine/Expressions/Value.cpp b/source/gameengine/Expressions/Value.cpp
index 1f4f961268b..262f543f834 100644
--- a/source/gameengine/Expressions/Value.cpp
+++ b/source/gameengine/Expressions/Value.cpp
@@ -29,7 +29,7 @@
double CValue::m_sZeroVec[3] = {0.0,0.0,0.0};
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyTypeObject CValue::Type = {
PyVarObject_HEAD_INIT(NULL, 0)
@@ -60,7 +60,7 @@ PyTypeObject CValue::Type = {
PyMethodDef CValue::Methods[] = {
{NULL,NULL} //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/*#define CVALUE_DEBUG*/
@@ -520,7 +520,7 @@ CValue* CValue::FindIdentifier(const STR_String& identifiername)
return result;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyAttributeDef CValue::Attributes[] = {
KX_PYATTRIBUTE_RO_FUNCTION("name", CValue, pyattr_get_name),
@@ -611,7 +611,7 @@ PyObject* CValue::ConvertKeysToPython( void )
return pylist;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
///////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/source/gameengine/Expressions/Value.h b/source/gameengine/Expressions/Value.h
index 009d95ee4d2..e6ea431ec1c 100644
--- a/source/gameengine/Expressions/Value.h
+++ b/source/gameengine/Expressions/Value.h
@@ -198,7 +198,7 @@ public:
#include "PyObjectPlus.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "object.h"
#endif
class CValue : public PyObjectPlus
@@ -221,7 +221,7 @@ public:
// Construction / Destruction
CValue();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
//static PyObject* PyMake(PyObject*,PyObject*);
virtual PyObject *py_repr(void)
{
@@ -237,7 +237,7 @@ public:
static PyObject * pyattr_get_name(void * self, const KX_PYATTRIBUTE_DEF * attrdef);
virtual PyObject* ConvertKeysToPython( void );
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/GameLogic/CMakeLists.txt b/source/gameengine/GameLogic/CMakeLists.txt
index 57150a90e99..b346df2b340 100644
--- a/source/gameengine/GameLogic/CMakeLists.txt
+++ b/source/gameengine/GameLogic/CMakeLists.txt
@@ -87,8 +87,7 @@ ENDIF(WITH_SDL)
IF(WITH_PYTHON)
LIST(APPEND INC ${PYTHON_INC})
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_logic "${SRC}" "${INC}")
diff --git a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
index f6d24af0e67..3e9217251b5 100644
--- a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
+++ b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp
@@ -96,7 +96,7 @@ void SCA_2DFilterActuator::SetShaderText(const char *text)
m_shaderText = text;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
diff --git a/source/gameengine/GameLogic/SCA_ANDController.cpp b/source/gameengine/GameLogic/SCA_ANDController.cpp
index 53c9be5215e..7e2c5bdb350 100644
--- a/source/gameengine/GameLogic/SCA_ANDController.cpp
+++ b/source/gameengine/GameLogic/SCA_ANDController.cpp
@@ -87,7 +87,7 @@ CValue* SCA_ANDController::GetReplica()
return replica;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -123,5 +123,5 @@ PyMethodDef SCA_ANDController::Methods[] = {
PyAttributeDef SCA_ANDController::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
index c77e58d2f3b..d6c328cd730 100644
--- a/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.cpp
@@ -110,7 +110,7 @@ void SCA_ActuatorSensor::Update()
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -160,6 +160,6 @@ int SCA_ActuatorSensor::CheckActuator(void *self, const PyAttributeDef*)
return 1;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_ActuatorSensor.h b/source/gameengine/GameLogic/SCA_ActuatorSensor.h
index 323746889bf..eb52d365079 100644
--- a/source/gameengine/GameLogic/SCA_ActuatorSensor.h
+++ b/source/gameengine/GameLogic/SCA_ActuatorSensor.h
@@ -56,7 +56,7 @@ public:
virtual void ReParent(SCA_IObject* parent);
void Update();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -64,7 +64,7 @@ public:
static int CheckActuator(void *self, const PyAttributeDef*);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
#endif
diff --git a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
index e364225af3d..88f5855b223 100644
--- a/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_AlwaysSensor.cpp
@@ -94,7 +94,7 @@ bool SCA_AlwaysSensor::Evaluate()
return result;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
diff --git a/source/gameengine/GameLogic/SCA_DelaySensor.cpp b/source/gameengine/GameLogic/SCA_DelaySensor.cpp
index 6cad801e429..abe72fb6757 100644
--- a/source/gameengine/GameLogic/SCA_DelaySensor.cpp
+++ b/source/gameengine/GameLogic/SCA_DelaySensor.cpp
@@ -120,7 +120,7 @@ bool SCA_DelaySensor::Evaluate()
return trigger;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -160,6 +160,6 @@ PyAttributeDef SCA_DelaySensor::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_IController.cpp b/source/gameengine/GameLogic/SCA_IController.cpp
index c291ff091aa..0c6b8350bca 100644
--- a/source/gameengine/GameLogic/SCA_IController.cpp
+++ b/source/gameengine/GameLogic/SCA_IController.cpp
@@ -194,7 +194,7 @@ void SCA_IController::ApplyState(unsigned int state)
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* Python api */
@@ -247,4 +247,4 @@ PyObject* SCA_IController::pyattr_get_actuators(void *self_v, const KX_PYATTRIBU
{
return KX_PythonSeq_CreatePyObject((static_cast(self_v))->m_proxy, KX_PYGENSEQ_CONT_TYPE_ACTUATORS);
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/GameLogic/SCA_IController.h b/source/gameengine/GameLogic/SCA_IController.h
index e23a0d7dc92..2d19770be4a 100644
--- a/source/gameengine/GameLogic/SCA_IController.h
+++ b/source/gameengine/GameLogic/SCA_IController.h
@@ -99,11 +99,11 @@ public:
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
static PyObject* pyattr_get_state(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_sensors(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_actuators(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
#endif
diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
index f2e1a8dd151..afda218c99c 100644
--- a/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
+++ b/source/gameengine/GameLogic/SCA_ILogicBrick.cpp
@@ -169,7 +169,7 @@ CValue* SCA_ILogicBrick::GetEvent()
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* python stuff */
@@ -253,4 +253,4 @@ PyObject* SCA_ILogicBrick::BoolToPyArg(bool boolarg)
return PyLong_FromSsize_t(boolarg? KX_TRUE: KX_FALSE);
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/GameLogic/SCA_ILogicBrick.h b/source/gameengine/GameLogic/SCA_ILogicBrick.h
index 3225c245550..a444210e8d9 100644
--- a/source/gameengine/GameLogic/SCA_ILogicBrick.h
+++ b/source/gameengine/GameLogic/SCA_ILogicBrick.h
@@ -133,7 +133,7 @@ public:
virtual void Replace_IScene(SCA_IScene *val) {};
virtual void Replace_NetworkScene(NG_NetworkScene *val) {};
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// python methods
static PyObject* pyattr_get_owner(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
@@ -157,7 +157,7 @@ protected:
/** Convert a a c++ value to KX_TRUE, KX_FALSE in Python. */
PyObject* BoolToPyArg(bool);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
diff --git a/source/gameengine/GameLogic/SCA_IObject.cpp b/source/gameengine/GameLogic/SCA_IObject.cpp
index 7c0a5b2db15..ff71d1bf96b 100644
--- a/source/gameengine/GameLogic/SCA_IObject.cpp
+++ b/source/gameengine/GameLogic/SCA_IObject.cpp
@@ -303,7 +303,7 @@ void SCA_IObject::SetState(unsigned int state)
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -342,4 +342,4 @@ PyAttributeDef SCA_IObject::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/GameLogic/SCA_IObject.h b/source/gameengine/GameLogic/SCA_IObject.h
index 0178da5f343..591be6fe53b 100644
--- a/source/gameengine/GameLogic/SCA_IObject.h
+++ b/source/gameengine/GameLogic/SCA_IObject.h
@@ -41,7 +41,7 @@ class SCA_ISensor;
class SCA_IController;
class SCA_IActuator;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
template T PyVecTo(PyObject*);
#endif
diff --git a/source/gameengine/GameLogic/SCA_ISensor.cpp b/source/gameengine/GameLogic/SCA_ISensor.cpp
index fada69848b2..c655924aa48 100644
--- a/source/gameengine/GameLogic/SCA_ISensor.cpp
+++ b/source/gameengine/GameLogic/SCA_ISensor.cpp
@@ -300,7 +300,7 @@ void SCA_ISensor::Activate(class SCA_LogicManager* logicmgr)
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ----------------------------------------------- */
/* Python Functions */
@@ -427,6 +427,6 @@ int SCA_ISensor::pyattr_check_tap(void *self_v, const KX_PYATTRIBUTE_DEF *attrde
self->m_level = false;
return 0;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_ISensor.h b/source/gameengine/GameLogic/SCA_ISensor.h
index 2d3a3ef08a0..f31dd83343b 100644
--- a/source/gameengine/GameLogic/SCA_ISensor.h
+++ b/source/gameengine/GameLogic/SCA_ISensor.h
@@ -190,7 +190,7 @@ public:
bool IsNoLink() const
{ return !m_links; }
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* Python functions: */
KX_PYMETHOD_DOC_NOARGS(SCA_ISensor,reset);
@@ -210,7 +210,7 @@ public:
KX_SENSOR_JUST_DEACTIVATED
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
#endif //__SCA_ISENSOR
diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
index 29a6a73b865..a68938ec834 100644
--- a/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_JoystickSensor.cpp
@@ -241,7 +241,7 @@ bool SCA_JoystickSensor::isValid(SCA_JoystickSensor::KX_JOYSENSORMODE m)
return res;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
diff --git a/source/gameengine/GameLogic/SCA_JoystickSensor.h b/source/gameengine/GameLogic/SCA_JoystickSensor.h
index 90fb16de747..39f826dfe02 100644
--- a/source/gameengine/GameLogic/SCA_JoystickSensor.h
+++ b/source/gameengine/GameLogic/SCA_JoystickSensor.h
@@ -117,7 +117,7 @@ public:
return m_joyindex;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -157,7 +157,7 @@ public:
return 0;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
index 1a87528e540..fe4124eb833 100644
--- a/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.cpp
@@ -408,7 +408,7 @@ void SCA_KeyboardSensor::LogKeystrokes(void)
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python Functions */
@@ -501,7 +501,7 @@ PyObject* SCA_KeyboardSensor::pyattr_get_events(void *self_v, const KX_PYATTRIBU
return resultlist;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* Accessed from python */
diff --git a/source/gameengine/GameLogic/SCA_KeyboardSensor.h b/source/gameengine/GameLogic/SCA_KeyboardSensor.h
index 5ca329b0846..0a3b25ac361 100644
--- a/source/gameengine/GameLogic/SCA_KeyboardSensor.h
+++ b/source/gameengine/GameLogic/SCA_KeyboardSensor.h
@@ -103,7 +103,7 @@ public:
virtual bool IsPositiveTrigger();
bool TriggerOnAllKeys();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
diff --git a/source/gameengine/GameLogic/SCA_LogicManager.cpp b/source/gameengine/GameLogic/SCA_LogicManager.cpp
index d003c5618f1..ab06fe7f9ef 100644
--- a/source/gameengine/GameLogic/SCA_LogicManager.cpp
+++ b/source/gameengine/GameLogic/SCA_LogicManager.cpp
@@ -307,7 +307,7 @@ void SCA_LogicManager::AddTriggeredController(SCA_IController* controller, SCA_I
{
controller->Activate(m_triggeredControllerSet);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// so that the controller knows which sensor has activited it
// only needed for python controller
diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.cpp b/source/gameengine/GameLogic/SCA_MouseSensor.cpp
index 9f4b25986b0..af11353c93e 100644
--- a/source/gameengine/GameLogic/SCA_MouseSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_MouseSensor.cpp
@@ -232,7 +232,7 @@ bool SCA_MouseSensor::isValid(SCA_MouseSensor::KX_MOUSESENSORMODE m)
return ((m > KX_MOUSESENSORMODE_NODEF) && (m < KX_MOUSESENSORMODE_MAX));
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -305,6 +305,6 @@ PyAttributeDef SCA_MouseSensor::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_MouseSensor.h b/source/gameengine/GameLogic/SCA_MouseSensor.h
index f52b57a3e11..dc0e9a11d39 100644
--- a/source/gameengine/GameLogic/SCA_MouseSensor.h
+++ b/source/gameengine/GameLogic/SCA_MouseSensor.h
@@ -104,7 +104,7 @@ class SCA_MouseSensor : public SCA_ISensor
static void UpdateHotkey(void *self);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
diff --git a/source/gameengine/GameLogic/SCA_NANDController.cpp b/source/gameengine/GameLogic/SCA_NANDController.cpp
index c09a53d8ac7..bcb2c84a083 100644
--- a/source/gameengine/GameLogic/SCA_NANDController.cpp
+++ b/source/gameengine/GameLogic/SCA_NANDController.cpp
@@ -87,7 +87,7 @@ CValue* SCA_NANDController::GetReplica()
return replica;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
diff --git a/source/gameengine/GameLogic/SCA_NORController.cpp b/source/gameengine/GameLogic/SCA_NORController.cpp
index 8ebd79efcfa..5711fb5751b 100644
--- a/source/gameengine/GameLogic/SCA_NORController.cpp
+++ b/source/gameengine/GameLogic/SCA_NORController.cpp
@@ -87,7 +87,7 @@ CValue* SCA_NORController::GetReplica()
return replica;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -124,6 +124,6 @@ PyAttributeDef SCA_NORController::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_ORController.cpp b/source/gameengine/GameLogic/SCA_ORController.cpp
index a638147e211..72c368d632f 100644
--- a/source/gameengine/GameLogic/SCA_ORController.cpp
+++ b/source/gameengine/GameLogic/SCA_ORController.cpp
@@ -83,7 +83,7 @@ void SCA_ORController::Trigger(SCA_LogicManager* logicmgr)
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -120,6 +120,6 @@ PyAttributeDef SCA_ORController::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
index c1b49d32712..a5ac5654e21 100644
--- a/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
+++ b/source/gameengine/GameLogic/SCA_PropertyActuator.cpp
@@ -217,7 +217,7 @@ void SCA_PropertyActuator::Relink(GEN_Map *obj_map)
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.cpp b/source/gameengine/GameLogic/SCA_PropertySensor.cpp
index be86b976a70..a32cc50fd63 100644
--- a/source/gameengine/GameLogic/SCA_PropertySensor.cpp
+++ b/source/gameengine/GameLogic/SCA_PropertySensor.cpp
@@ -304,7 +304,7 @@ CValue* SCA_PropertySensor::FindIdentifier(const STR_String& identifiername)
return GetParent()->FindIdentifier(identifiername);
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -378,6 +378,6 @@ PyAttributeDef SCA_PropertySensor::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_PropertySensor.h b/source/gameengine/GameLogic/SCA_PropertySensor.h
index 9a5c4762558..5a29c526fc0 100644
--- a/source/gameengine/GameLogic/SCA_PropertySensor.h
+++ b/source/gameengine/GameLogic/SCA_PropertySensor.h
@@ -84,7 +84,7 @@ public:
virtual bool IsPositiveTrigger();
virtual CValue* FindIdentifier(const STR_String& identifiername);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
diff --git a/source/gameengine/GameLogic/SCA_PythonController.cpp b/source/gameengine/GameLogic/SCA_PythonController.cpp
index 45f0684c02f..109b199f230 100644
--- a/source/gameengine/GameLogic/SCA_PythonController.cpp
+++ b/source/gameengine/GameLogic/SCA_PythonController.cpp
@@ -35,10 +35,10 @@
#include "SCA_IActuator.h"
#include "PyObjectPlus.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "compile.h"
#include "eval.h"
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
#include
@@ -49,7 +49,7 @@ SCA_PythonController* SCA_PythonController::m_sCurrentController = NULL;
SCA_PythonController::SCA_PythonController(SCA_IObject* gameobj, int mode)
: SCA_IController(gameobj),
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
m_bytecode(NULL),
m_function(NULL),
#endif
@@ -57,7 +57,7 @@ SCA_PythonController::SCA_PythonController(SCA_IObject* gameobj, int mode)
m_bModified(true),
m_debug(false),
m_mode(mode)
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
, m_pythondictionary(NULL)
#endif
@@ -84,7 +84,7 @@ int SCA_PythonController::Release()
SCA_PythonController::~SCA_PythonController()
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
//printf("released python byte script\n");
Py_XDECREF(m_bytecode);
@@ -104,7 +104,7 @@ CValue* SCA_PythonController::GetReplica()
{
SCA_PythonController* replica = new SCA_PythonController(*this);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* why is this needed at all??? - m_bytecode is NULL'd below so this doesnt make sense
* but removing it crashes blender (with YoFrankie). so leave in for now - Campbell */
Py_XINCREF(replica->m_bytecode);
@@ -146,7 +146,7 @@ void SCA_PythonController::SetScriptName(const STR_String& name)
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
void SCA_PythonController::SetNamespace(PyObject* pythondictionary)
{
if (m_pythondictionary)
@@ -171,7 +171,7 @@ int SCA_PythonController::IsTriggered(class SCA_ISensor* sensor)
return 0;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* warning, self is not the SCA_PythonController, its a PyObjectPlus_Proxy */
PyObject* SCA_PythonController::sPyGetCurrentController(PyObject *self)
@@ -527,13 +527,13 @@ int SCA_PythonController::pyattr_set_script(void *self_v, const KX_PYATTRIBUTE_D
return PY_SET_ATTR_SUCCESS;
}
-#else // DISABLE_PYTHON
+#else // WITH_PYTHON
void SCA_PythonController::Trigger(SCA_LogicManager* logicmgr)
{
/* intentionally blank */
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_PythonController.h b/source/gameengine/GameLogic/SCA_PythonController.h
index bd78014038c..602b5e27e47 100644
--- a/source/gameengine/GameLogic/SCA_PythonController.h
+++ b/source/gameengine/GameLogic/SCA_PythonController.h
@@ -42,7 +42,7 @@ class SCA_IObject;
class SCA_PythonController : public SCA_IController
{
Py_Header;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
struct _object * m_bytecode; /* SCA_PYEXEC_SCRIPT only */
PyObject* m_function; /* SCA_PYEXEC_MODULE only */
#endif
@@ -55,7 +55,7 @@ class SCA_PythonController : public SCA_IController
protected:
STR_String m_scriptText;
STR_String m_scriptName;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* m_pythondictionary; /* for SCA_PYEXEC_SCRIPT only */
PyObject* m_pythonfunction; /* for SCA_PYEXEC_MODULE only */
#endif
@@ -83,7 +83,7 @@ class SCA_PythonController : public SCA_IController
void SetScriptText(const STR_String& text);
void SetScriptName(const STR_String& name);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
void SetNamespace(PyObject* pythondictionary);
#endif
void SetDebug(bool debug) { m_debug = debug; }
@@ -94,7 +94,7 @@ class SCA_PythonController : public SCA_IController
bool Import();
void ErrorPrint(const char *error_msg);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
static const char* sPyGetCurrentController__doc__;
static PyObject* sPyGetCurrentController(PyObject* self);
static const char* sPyAddActiveActuator__doc__;
diff --git a/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp b/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp
index 3d5d3568335..213446935b6 100644
--- a/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp
+++ b/source/gameengine/GameLogic/SCA_PythonKeyboard.cpp
@@ -33,20 +33,20 @@ SCA_PythonKeyboard::SCA_PythonKeyboard(SCA_IInputDevice* keyboard)
: PyObjectPlus(),
m_keyboard(keyboard)
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
m_event_dict = PyDict_New();
#endif
}
SCA_PythonKeyboard::~SCA_PythonKeyboard()
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyDict_Clear(m_event_dict);
Py_DECREF(m_event_dict);
#endif
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
diff --git a/source/gameengine/GameLogic/SCA_PythonKeyboard.h b/source/gameengine/GameLogic/SCA_PythonKeyboard.h
index 260835155e6..6a89ba7de76 100644
--- a/source/gameengine/GameLogic/SCA_PythonKeyboard.h
+++ b/source/gameengine/GameLogic/SCA_PythonKeyboard.h
@@ -32,14 +32,14 @@ class SCA_PythonKeyboard : public PyObjectPlus
Py_Header;
private:
class SCA_IInputDevice *m_keyboard;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* m_event_dict;
#endif
public:
SCA_PythonKeyboard(class SCA_IInputDevice* keyboard);
virtual ~SCA_PythonKeyboard();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
static PyObject* pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
#endif
};
diff --git a/source/gameengine/GameLogic/SCA_PythonMouse.cpp b/source/gameengine/GameLogic/SCA_PythonMouse.cpp
index 936ee2ff5c4..7267eb74594 100644
--- a/source/gameengine/GameLogic/SCA_PythonMouse.cpp
+++ b/source/gameengine/GameLogic/SCA_PythonMouse.cpp
@@ -35,20 +35,20 @@ SCA_PythonMouse::SCA_PythonMouse(SCA_IInputDevice* mouse, RAS_ICanvas* canvas)
m_mouse(mouse),
m_canvas(canvas)
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
m_event_dict = PyDict_New();
#endif
}
SCA_PythonMouse::~SCA_PythonMouse()
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyDict_Clear(m_event_dict);
Py_DECREF(m_event_dict);
#endif
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
diff --git a/source/gameengine/GameLogic/SCA_PythonMouse.h b/source/gameengine/GameLogic/SCA_PythonMouse.h
index 9e1085e6bec..15a7e19c602 100644
--- a/source/gameengine/GameLogic/SCA_PythonMouse.h
+++ b/source/gameengine/GameLogic/SCA_PythonMouse.h
@@ -33,7 +33,7 @@ class SCA_PythonMouse : public PyObjectPlus
private:
class SCA_IInputDevice *m_mouse;
class RAS_ICanvas *m_canvas;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* m_event_dict;
#endif
public:
@@ -42,7 +42,7 @@ public:
void Show(bool visible);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
KX_PYMETHOD_DOC(SCA_PythonMouse, show);
static PyObject* pyattr_get_events(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.cpp b/source/gameengine/GameLogic/SCA_RandomActuator.cpp
index 4b90ca7dadf..c3d5988be24 100644
--- a/source/gameengine/GameLogic/SCA_RandomActuator.cpp
+++ b/source/gameengine/GameLogic/SCA_RandomActuator.cpp
@@ -305,7 +305,7 @@ void SCA_RandomActuator::enforceConstraints() {
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
diff --git a/source/gameengine/GameLogic/SCA_RandomActuator.h b/source/gameengine/GameLogic/SCA_RandomActuator.h
index 41d19f5b4c4..1fd2180f32c 100644
--- a/source/gameengine/GameLogic/SCA_RandomActuator.h
+++ b/source/gameengine/GameLogic/SCA_RandomActuator.h
@@ -92,7 +92,7 @@ class SCA_RandomActuator : public SCA_IActuator
virtual CValue* GetReplica();
virtual void ProcessReplica();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -112,7 +112,7 @@ class SCA_RandomActuator : public SCA_IActuator
KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatNormal);
KX_PYMETHOD_DOC_VARARGS(SCA_RandomActuator, setFloatNegativeExponential);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
}; /* end of class KX_EditObjectActuator : public SCA_PropertyActuator */
diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.cpp b/source/gameengine/GameLogic/SCA_RandomSensor.cpp
index a7d18ff40d4..8194f1c97c8 100644
--- a/source/gameengine/GameLogic/SCA_RandomSensor.cpp
+++ b/source/gameengine/GameLogic/SCA_RandomSensor.cpp
@@ -120,7 +120,7 @@ bool SCA_RandomSensor::Evaluate()
return evaluateResult;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -176,6 +176,6 @@ int SCA_RandomSensor::pyattr_set_seed(void *self_v, const KX_PYATTRIBUTE_DEF *at
return PY_SET_ATTR_SUCCESS;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_RandomSensor.h b/source/gameengine/GameLogic/SCA_RandomSensor.h
index 3be17943d84..af5a767c1c1 100644
--- a/source/gameengine/GameLogic/SCA_RandomSensor.h
+++ b/source/gameengine/GameLogic/SCA_RandomSensor.h
@@ -56,7 +56,7 @@ public:
virtual bool IsPositiveTrigger();
virtual void Init();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
diff --git a/source/gameengine/GameLogic/SCA_XNORController.cpp b/source/gameengine/GameLogic/SCA_XNORController.cpp
index 9f54e41d110..f1f76c83718 100644
--- a/source/gameengine/GameLogic/SCA_XNORController.cpp
+++ b/source/gameengine/GameLogic/SCA_XNORController.cpp
@@ -91,7 +91,7 @@ CValue* SCA_XNORController::GetReplica()
return replica;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -128,6 +128,6 @@ PyAttributeDef SCA_XNORController::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SCA_XORController.cpp b/source/gameengine/GameLogic/SCA_XORController.cpp
index a58f30a3bed..ee63b72e455 100644
--- a/source/gameengine/GameLogic/SCA_XORController.cpp
+++ b/source/gameengine/GameLogic/SCA_XORController.cpp
@@ -91,7 +91,7 @@ CValue* SCA_XORController::GetReplica()
return replica;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -127,6 +127,6 @@ PyMethodDef SCA_XORController::Methods[] = {
PyAttributeDef SCA_XORController::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/GameLogic/SConscript b/source/gameengine/GameLogic/SConscript
index c9d1fed875d..04990e10d06 100644
--- a/source/gameengine/GameLogic/SConscript
+++ b/source/gameengine/GameLogic/SConscript
@@ -16,8 +16,7 @@ else:
if env['WITH_BF_PYTHON']:
incs += ' ' + env['BF_PYTHON_INC']
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
if env['OURPLATFORM'] in ('win32-vc', 'win64-vc'):
if env['BF_DEBUG']:
diff --git a/source/gameengine/GamePlayer/common/CMakeLists.txt b/source/gameengine/GamePlayer/common/CMakeLists.txt
index 47ac7f73a51..39667a27c7d 100644
--- a/source/gameengine/GamePlayer/common/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/common/CMakeLists.txt
@@ -39,7 +39,6 @@ SET(INC
../../../../source/blender/blenlib
../../../../source/blender/blenkernel
../../../../source/blender
- ../../../../source/blender/include
../../../../source/blender/makesdna
../../../../source/gameengine/Rasterizer
../../../../source/gameengine/GameLogic
@@ -49,7 +48,6 @@ SET(INC
../../../../source/gameengine/Physics/common
../../../../source/gameengine/Network/LoopBackNetwork
../../../../source/gameengine/GamePlayer/ghost
- ../../../../source/blender/misc
../../../../source/blender/blenloader
../../../../source/blender/gpu
../../../../extern/glew/include
@@ -71,6 +69,11 @@ SET(SRC
GPC_System.cpp
)
+IF(WITH_PYTHON)
+ LIST(APPEND INC ${PYTHON_INC})
+ ADD_DEFINITIONS(-DWITH_PYTHON)
+ENDIF(WITH_PYTHON)
+
ADD_DEFINITIONS(-DGLEW_STATIC)
BLENDERLIB_NOLIST(gp_common "${SRC}" "${INC}")
diff --git a/source/gameengine/GamePlayer/common/SConscript b/source/gameengine/GamePlayer/common/SConscript
index 7a16e950b36..60cb437b10f 100644
--- a/source/gameengine/GamePlayer/common/SConscript
+++ b/source/gameengine/GamePlayer/common/SConscript
@@ -62,8 +62,7 @@ defs = [ 'GLEW_STATIC' ]
if env['WITH_BF_PYTHON']:
incs += Split(env['BF_PYTHON_INC'])
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
incs += Split(env['BF_PNG_INC'])
incs += Split(env['BF_ZLIB_INC'])
diff --git a/source/gameengine/GamePlayer/ghost/CMakeLists.txt b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
index 6ce9f7be280..e02a8a53ba2 100644
--- a/source/gameengine/GamePlayer/ghost/CMakeLists.txt
+++ b/source/gameengine/GamePlayer/ghost/CMakeLists.txt
@@ -40,7 +40,6 @@ SET(INC
../../../../source/blender/blenkernel
../../../../source/blender/readblenfile
../../../../source/blender
- ../../../../source/blender/include
../../../../source/blender/makesdna
../../../../source/blender/makesrna
../../../../source/gameengine/Rasterizer
@@ -51,7 +50,6 @@ SET(INC
../../../../source/gameengine/Physics/common
../../../../source/gameengine/Network/LoopBackNetwork
../../../../source/gameengine/GamePlayer/common
- ../../../../source/blender/misc
../../../../source/blender/blenloader
../../../../source/blender/gpu
../../../../extern/glew/include
@@ -72,4 +70,9 @@ IF(WITH_FFMPEG)
ADD_DEFINITIONS(-DWITH_FFMPEG)
ENDIF(WITH_FFMPEG)
+IF(WITH_PYTHON)
+ LIST(APPEND INC ${PYTHON_INC})
+ ADD_DEFINITIONS(-DWITH_PYTHON)
+ENDIF(WITH_PYTHON)
+
BLENDERLIB_NOLIST(gp_ghost "${SRC}" "${INC}")
diff --git a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
index d1b8fb12336..197e31af188 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
@@ -603,8 +603,11 @@ bool GPG_Application::initEngine(GHOST_IWindow* window, const int stereoMode)
m_ketsjiengine->SetNetworkDevice(m_networkdevice);
m_ketsjiengine->SetTimingDisplay(frameRate, false, false);
-
+#ifdef WITH_PYTHON
CValue::SetDeprecationWarnings(nodepwarnings);
+#else
+ (void)nodepwarnings;
+#endif
m_ketsjiengine->SetUseFixedTime(fixed_framerate);
m_ketsjiengine->SetTimingDisplay(frameRate, profile, properties);
@@ -677,20 +680,21 @@ bool GPG_Application::startEngine(void)
m_startScene,
m_canvas);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// some python things
PyObject *gameLogic, *gameLogic_keys;
setupGamePython(m_ketsjiengine, startscene, m_maggie, NULL, &gameLogic, &gameLogic_keys, m_argc, m_argv);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
//initialize Dome Settings
if(m_startScene->gm.stereoflag == STEREO_DOME)
m_ketsjiengine->InitDome(m_startScene->gm.dome.res, m_startScene->gm.dome.mode, m_startScene->gm.dome.angle, m_startScene->gm.dome.resbuf, m_startScene->gm.dome.tilt, m_startScene->gm.dome.warptext);
+#ifdef WITH_PYTHON
// Set the GameLogic.globalDict from marshal'd data, so we can
// load new blend files and keep data in GameLogic.globalDict
loadGamePythonConfig(m_pyGlobalDictString, m_pyGlobalDictString_Length);
-
+#endif
m_sceneconverter->ConvertScene(
startscene,
m_rendertools,
@@ -723,6 +727,7 @@ bool GPG_Application::startEngine(void)
void GPG_Application::stopEngine()
{
+#ifdef WITH_PYTHON
// GameLogic.globalDict gets converted into a buffer, and sorted in
// m_pyGlobalDictString so we can restore after python has stopped
// and started between .blend file loads.
@@ -735,6 +740,8 @@ void GPG_Application::stopEngine()
// when exiting the mainloop
exitGamePythonScripting();
+#endif
+
m_ketsjiengine->StopEngine();
m_networkdevice->Disconnect();
diff --git a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
index 94142e7a604..45eea75eb2f 100644
--- a/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
+++ b/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
@@ -822,8 +822,9 @@ int main(int argc, char** argv)
BLI_strncpy(pathname, maggie->name, sizeof(pathname));
BLI_strncpy(G.main->name, maggie->name, sizeof(G.main->name));
+#ifdef WITH_PYTHON
setGamePythonPath(G.main->name);
-
+#endif
if (firstTimeRunning)
{
firstTimeRunning = false;
diff --git a/source/gameengine/GamePlayer/ghost/SConscript b/source/gameengine/GamePlayer/ghost/SConscript
index 41520a06c66..d2224884f7f 100644
--- a/source/gameengine/GamePlayer/ghost/SConscript
+++ b/source/gameengine/GamePlayer/ghost/SConscript
@@ -44,8 +44,7 @@ defs = [ 'GLEW_STATIC' ]
if env['WITH_BF_PYTHON']:
incs += Split(env['BF_PYTHON_INC'])
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
diff --git a/source/gameengine/Ketsji/BL_Shader.cpp b/source/gameengine/Ketsji/BL_Shader.cpp
index 8edefe7ac2d..b00c1b7efb7 100644
--- a/source/gameengine/Ketsji/BL_Shader.cpp
+++ b/source/gameengine/Ketsji/BL_Shader.cpp
@@ -728,7 +728,7 @@ void BL_Shader::SetUniform(int uniform, const int* val, int len)
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyMethodDef BL_Shader::Methods[] =
{
@@ -1411,6 +1411,6 @@ KX_PYMETHODDEF_DOC( BL_Shader, setUniformDef, "setUniformDef(name, enum)" )
return NULL;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
// eof
diff --git a/source/gameengine/Ketsji/BL_Shader.h b/source/gameengine/Ketsji/BL_Shader.h
index 5108acea0ff..77c642ecc7b 100644
--- a/source/gameengine/Ketsji/BL_Shader.h
+++ b/source/gameengine/Ketsji/BL_Shader.h
@@ -222,7 +222,7 @@ public:
void SetUniform(int uniform, const int val);
// Python interface
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
virtual PyObject* py_repr(void) { return PyUnicode_FromFormat("BL_Shader\n\tvertex shader:%s\n\n\tfragment shader%s\n\n", vertProg, fragProg); }
// -----------------------------------
diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt
index 68f0a0de994..1ca71e678e8 100644
--- a/source/gameengine/Ketsji/CMakeLists.txt
+++ b/source/gameengine/Ketsji/CMakeLists.txt
@@ -32,7 +32,6 @@ SET(INC
../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer
../../../source/gameengine/Converter
../../../source/blender/imbuf
- ../../../intern/ghost/include
../../../intern/moto/include
../../../source/gameengine/Ketsji
../../../source/blender/blenlib
@@ -40,7 +39,6 @@ SET(INC
../../../source/blender/python
../../../source/blender/python/generic
../../../source/blender
- ../../../source/blender/include
../../../source/blender/makesdna
../../../source/gameengine/Rasterizer
../../../source/gameengine/GameLogic
@@ -51,7 +49,6 @@ SET(INC
../../../source/gameengine/Physics/common
../../../source/gameengine/Network/LoopBackNetwork
../../../intern/audaspace/intern
- ../../../source/blender/misc
../../../source/blender/blenloader
../../../source/blender/gpu
../../../extern/glew/include
@@ -137,8 +134,7 @@ ENDIF(WITH_SDL)
IF(WITH_PYTHON)
LIST(APPEND INC ${PYTHON_INC})
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
IF(WITH_FFMPEG)
diff --git a/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt b/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt
index 2b1c1a698f3..5099534c0ad 100644
--- a/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt
+++ b/source/gameengine/Ketsji/KXNetwork/CMakeLists.txt
@@ -46,8 +46,7 @@ SET(SRC
IF(WITH_PYTHON)
LIST(APPEND INC ${PYTHON_INC})
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(kx_network "${SRC}" "${INC}")
diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp
index e047a9aa273..0f563dc4fe4 100644
--- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp
+++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageActuator.cpp
@@ -91,7 +91,7 @@ CValue* KX_NetworkMessageActuator::GetReplica()
return replica;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* -------------------------------------------------------------------- */
/* Python interface --------------------------------------------------- */
@@ -132,4 +132,4 @@ PyAttributeDef KX_NetworkMessageActuator::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
index 56ccac9a93e..91b05990ba1 100644
--- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
+++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.cpp
@@ -154,7 +154,7 @@ bool KX_NetworkMessageSensor::IsPositiveTrigger()
return m_IsUp;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -215,4 +215,4 @@ PyObject* KX_NetworkMessageSensor::pyattr_get_subjects(void *self_v, const KX_PY
}
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
index 1efd25dd65f..8f5a11426a7 100644
--- a/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
+++ b/source/gameengine/Ketsji/KXNetwork/KX_NetworkMessageSensor.h
@@ -71,7 +71,7 @@ public:
m_NetworkScene= val;
};
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------- */
/* Python interface -------------------------------------------- */
@@ -81,7 +81,7 @@ public:
static PyObject* pyattr_get_bodies(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_subjects(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
diff --git a/source/gameengine/Ketsji/KXNetwork/SConscript b/source/gameengine/Ketsji/KXNetwork/SConscript
index e7f98ff5850..78cdc8df9af 100644
--- a/source/gameengine/Ketsji/KXNetwork/SConscript
+++ b/source/gameengine/Ketsji/KXNetwork/SConscript
@@ -11,7 +11,6 @@ defs = []
if env['WITH_BF_PYTHON']:
incs += ' ' + env['BF_PYTHON_INC']
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
env.BlenderLib ( 'bf_network', Split(sources), Split(incs), defines=defs,libtype=['core','player'], priority=[400,125], cxx_compileflags=env['BGE_CXXFLAGS'])
diff --git a/source/gameengine/Ketsji/KX_ArmatureSensor.cpp b/source/gameengine/Ketsji/KX_ArmatureSensor.cpp
index a47a1972beb..732c0b910df 100644
--- a/source/gameengine/Ketsji/KX_ArmatureSensor.cpp
+++ b/source/gameengine/Ketsji/KX_ArmatureSensor.cpp
@@ -149,7 +149,7 @@ bool KX_ArmatureSensor::Evaluate()
return (reset) ? true : false;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -201,4 +201,4 @@ PyObject* KX_ArmatureSensor::pyattr_get_constraint(void *self, const struct KX_P
Py_RETURN_NONE;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_ArmatureSensor.h b/source/gameengine/Ketsji/KX_ArmatureSensor.h
index 636309f5bdf..b007899c4ff 100644
--- a/source/gameengine/Ketsji/KX_ArmatureSensor.h
+++ b/source/gameengine/Ketsji/KX_ArmatureSensor.h
@@ -66,14 +66,14 @@ public:
// identify the constraint that this actuator controls
void FindConstraint();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
static PyObject* pyattr_get_constraint(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
private:
struct bConstraint* m_constraint;
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
index d88997e2128..a4dc68b92e5 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
@@ -783,7 +783,7 @@ void KX_BlenderMaterial::SetBlenderGLSLShader(int layer)
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyMethodDef KX_BlenderMaterial::Methods[] =
{
@@ -967,4 +967,4 @@ KX_PYMETHODDEF_DOC( KX_BlenderMaterial, setBlending , "setBlending( bge.logic.sr
return NULL;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_BlenderMaterial.h b/source/gameengine/Ketsji/KX_BlenderMaterial.h
index 239e334f68a..745045ff784 100644
--- a/source/gameengine/Ketsji/KX_BlenderMaterial.h
+++ b/source/gameengine/Ketsji/KX_BlenderMaterial.h
@@ -98,7 +98,7 @@ public:
}
};
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// --------------------------------
virtual PyObject* py_repr(void) { return PyUnicode_FromString(mMaterial->matname.ReadPtr()); }
@@ -113,7 +113,7 @@ public:
KX_PYMETHOD_DOC( KX_BlenderMaterial, setTexture );
KX_PYMETHOD_DOC( KX_BlenderMaterial, setBlending );
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
// --------------------------------
// pre calculate to avoid pops/lag at startup
diff --git a/source/gameengine/Ketsji/KX_Camera.cpp b/source/gameengine/Ketsji/KX_Camera.cpp
index 2402baf92ac..46a92365302 100644
--- a/source/gameengine/Ketsji/KX_Camera.cpp
+++ b/source/gameengine/Ketsji/KX_Camera.cpp
@@ -474,7 +474,7 @@ int KX_Camera::GetViewportTop() const
return m_camdata.m_viewporttop;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
//----------------------------------------------------------------------------
//Python
diff --git a/source/gameengine/Ketsji/KX_Camera.h b/source/gameengine/Ketsji/KX_Camera.h
index ad2460d34ef..130dfd4067d 100644
--- a/source/gameengine/Ketsji/KX_Camera.h
+++ b/source/gameengine/Ketsji/KX_Camera.h
@@ -41,7 +41,7 @@
#include "IntValue.h"
#include "RAS_CameraData.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* utility conversion function */
bool ConvertPythonToCamera(PyObject * value, KX_Camera **object, bool py_none_ok, const char *error_prefix);
#endif
@@ -269,7 +269,7 @@ public:
virtual int GetGameObjectType() { return OBJ_CAMERA; }
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
KX_PYMETHOD_DOC_VARARGS(KX_Camera, sphereInsideFrustum);
KX_PYMETHOD_DOC_O(KX_Camera, boxInsideFrustum);
KX_PYMETHOD_DOC_O(KX_Camera, pointInsideFrustum);
diff --git a/source/gameengine/Ketsji/KX_CameraActuator.cpp b/source/gameengine/Ketsji/KX_CameraActuator.cpp
index bc67ecbe1a5..18d3e046577 100644
--- a/source/gameengine/Ketsji/KX_CameraActuator.cpp
+++ b/source/gameengine/Ketsji/KX_CameraActuator.cpp
@@ -346,7 +346,7 @@ CValue *KX_CameraActuator::findObject(char *obName)
return NULL;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -414,6 +414,6 @@ int KX_CameraActuator::pyattr_set_object(void *self_v, const KX_PYATTRIBUTE_DEF
return PY_SET_ATTR_SUCCESS;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/Ketsji/KX_CameraActuator.h b/source/gameengine/Ketsji/KX_CameraActuator.h
index 2bc0ee18593..0a0a47f1ce2 100644
--- a/source/gameengine/Ketsji/KX_CameraActuator.h
+++ b/source/gameengine/Ketsji/KX_CameraActuator.h
@@ -114,7 +114,7 @@ private :
/** Methods inherited from SCA_ILogicBrick */
virtual void Relink(GEN_Map *obj_map);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -124,7 +124,7 @@ private :
static PyObject* pyattr_get_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static int pyattr_set_object(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
diff --git a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
index 9380f4b5d2f..15a4a4680bb 100644
--- a/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
+++ b/source/gameengine/Ketsji/KX_ConstraintActuator.cpp
@@ -557,7 +557,7 @@ bool KX_ConstraintActuator::IsValidMode(KX_ConstraintActuator::KX_CONSTRAINTTYPE
return res;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
index b1baa5fe9e1..2882ca5a371 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.cpp
@@ -45,7 +45,7 @@ KX_ConstraintWrapper::~KX_ConstraintWrapper()
{
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* KX_ConstraintWrapper::PyGetConstraintId()
{
@@ -120,4 +120,4 @@ PyObject* KX_ConstraintWrapper::pyattr_get_constraintId(void *self_v, const KX_P
return self->PyGetConstraintId();
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_ConstraintWrapper.h b/source/gameengine/Ketsji/KX_ConstraintWrapper.h
index db9543c23ae..58c204d5da0 100644
--- a/source/gameengine/Ketsji/KX_ConstraintWrapper.h
+++ b/source/gameengine/Ketsji/KX_ConstraintWrapper.h
@@ -40,7 +40,7 @@ public:
virtual ~KX_ConstraintWrapper ();
int getConstraintId() { return m_constraintId;};
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
KX_PYMETHOD_NOARGS(KX_ConstraintWrapper,GetConstraintId);
KX_PYMETHOD(KX_ConstraintWrapper,SetParam);
KX_PYMETHOD(KX_ConstraintWrapper,GetParam);
diff --git a/source/gameengine/Ketsji/KX_Dome.cpp b/source/gameengine/Ketsji/KX_Dome.cpp
index 64ef06a4e09..36fc02ab833 100644
--- a/source/gameengine/Ketsji/KX_Dome.cpp
+++ b/source/gameengine/Ketsji/KX_Dome.cpp
@@ -24,7 +24,7 @@ Developed as part of a Research and Development project for SAT - La Société d
#include "KX_Dome.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include
#endif
diff --git a/source/gameengine/Ketsji/KX_GameActuator.cpp b/source/gameengine/Ketsji/KX_GameActuator.cpp
index 208c526398a..1a195913e4a 100644
--- a/source/gameengine/Ketsji/KX_GameActuator.cpp
+++ b/source/gameengine/Ketsji/KX_GameActuator.cpp
@@ -124,7 +124,7 @@ bool KX_GameActuator::Update()
}
case KX_GAME_SAVECFG:
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if (m_ketsjiengine)
{
char mashal_path[512];
@@ -152,11 +152,11 @@ bool KX_GameActuator::Update()
delete [] marshal_buffer;
}
break;
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
}
case KX_GAME_LOADCFG:
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if (m_ketsjiengine)
{
char mashal_path[512];
@@ -191,7 +191,7 @@ bool KX_GameActuator::Update()
}
}
break;
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
}
default:
; /* do nothing? this is an internal error !!! */
@@ -201,7 +201,7 @@ bool KX_GameActuator::Update()
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -241,4 +241,4 @@ PyAttributeDef KX_GameActuator::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_GameObject.cpp b/source/gameengine/Ketsji/KX_GameObject.cpp
index bbb17cd1df9..6b1c36a1589 100644
--- a/source/gameengine/Ketsji/KX_GameObject.cpp
+++ b/source/gameengine/Ketsji/KX_GameObject.cpp
@@ -102,7 +102,7 @@ KX_GameObject::KX_GameObject(
m_xray(false),
m_pHitObject(NULL),
m_isDeformable(false)
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
, m_attr_dict(NULL)
#endif
{
@@ -148,12 +148,12 @@ KX_GameObject::~KX_GameObject()
{
delete m_pGraphicController;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if (m_attr_dict) {
PyDict_Clear(m_attr_dict); /* incase of circular refs or other weired cases */
Py_DECREF(m_attr_dict);
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
}
KX_GameObject* KX_GameObject::GetClientObject(KX_ClientObjectInfo* info)
@@ -348,7 +348,7 @@ void KX_GameObject::ProcessReplica()
m_pClient_info->m_gameobject = this;
m_state = 0;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if(m_attr_dict)
m_attr_dict= PyDict_Copy(m_attr_dict);
#endif
@@ -1448,7 +1448,7 @@ void KX_GameObject_Mathutils_Callback_Init(void)
#endif // USE_MATHUTILS
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------- python stuff ---------------------------------------------------*/
PyMethodDef KX_GameObject::Methods[] = {
{"applyForce", (PyCFunction) KX_GameObject::sPyApplyForce, METH_VARARGS},
@@ -3053,4 +3053,4 @@ bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py
return false;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_GameObject.h b/source/gameengine/Ketsji/KX_GameObject.h
index 14587d25c7f..640816e19ca 100644
--- a/source/gameengine/Ketsji/KX_GameObject.h
+++ b/source/gameengine/Ketsji/KX_GameObject.h
@@ -60,7 +60,7 @@ class PHY_IGraphicController;
class PHY_IPhysicsEnvironment;
struct Object;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* utility conversion function */
bool ConvertPythonToGameObject(PyObject * value, KX_GameObject **object, bool py_none_ok, const char *error_prefix);
#endif
@@ -116,7 +116,7 @@ public:
*/
static KX_GameObject* GetClientObject(KX_ClientObjectInfo* info);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// Python attributes that wont convert into CValue
//
// there are 2 places attributes can be stored, in the CValue,
@@ -796,7 +796,7 @@ public:
CListValue* GetChildren();
CListValue* GetChildrenRecursive();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/**
* @section Python interface functions.
*/
diff --git a/source/gameengine/Ketsji/KX_IpoActuator.cpp b/source/gameengine/Ketsji/KX_IpoActuator.cpp
index eca40cafb0e..605aea5f592 100644
--- a/source/gameengine/Ketsji/KX_IpoActuator.cpp
+++ b/source/gameengine/Ketsji/KX_IpoActuator.cpp
@@ -400,7 +400,7 @@ int KX_IpoActuator::string2mode(char* modename) {
return res;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -448,6 +448,6 @@ PyAttributeDef KX_IpoActuator::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
index 4f3b6e5bb96..a1c7957dc72 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
@@ -112,7 +112,7 @@ KX_KetsjiEngine::KX_KetsjiEngine(KX_ISystem* system)
m_rendertools(NULL),
m_sceneconverter(NULL),
m_networkdevice(NULL),
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
m_pythondictionary(NULL),
#endif
m_keyboarddevice(NULL),
@@ -233,7 +233,7 @@ void KX_KetsjiEngine::SetRasterizer(RAS_IRasterizer* rasterizer)
m_rasterizer = rasterizer;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/*
* At the moment the bge.logic module is imported into 'pythondictionary' after this function is called.
* if this function ever changes to assign a copy, make sure the game logic module is imported into this dictionary before hand.
@@ -370,7 +370,7 @@ void KX_KetsjiEngine::RenderDome()
}
m_dome->Draw();
// Draw Callback for the last scene
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
scene->RunDrawingCallbacks(scene->GetPostDrawCB());
#endif
EndFrame();
@@ -612,7 +612,7 @@ else
m_logger->StartLog(tc_physics, m_kxsystem->GetTimeInSeconds(), true);
SG_SetActiveStage(SG_STAGE_PHYSICS1);
// set Python hooks for each scene
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment());
#endif
KX_SetActiveScene(scene);
@@ -716,7 +716,7 @@ else
m_suspendeddelta = scene->getSuspendedDelta();
// set Python hooks for each scene
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PHY_SetActiveEnvironment(scene->GetPhysicsEnvironment());
#endif
KX_SetActiveScene(scene);
@@ -1287,7 +1287,7 @@ void KX_KetsjiEngine::RenderFrame(KX_Scene* scene, KX_Camera* cam)
m_logger->StartLog(tc_rasterizer, m_kxsystem->GetTimeInSeconds(), true);
SG_SetActiveStage(SG_STAGE_RENDER);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// Run any pre-drawing python callbacks
scene->RunDrawingCallbacks(scene->GetPreDrawCB());
#endif
@@ -1304,7 +1304,7 @@ void KX_KetsjiEngine::PostRenderScene(KX_Scene* scene)
{
m_rendertools->MotionBlur(m_rasterizer);
scene->Render2DFilters(m_canvas);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
scene->RunDrawingCallbacks(scene->GetPostDrawCB());
#endif
m_rasterizer->FlushDebugLines();
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h
index f52ec8192cc..4ce14e100cc 100644
--- a/source/gameengine/Ketsji/KX_KetsjiEngine.h
+++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h
@@ -70,7 +70,7 @@ private:
class RAS_IRenderTools* m_rendertools;
class KX_ISceneConverter* m_sceneconverter;
class NG_NetworkDeviceInterface* m_networkdevice;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* borrowed from sys.modules["__main__"], dont manage ref's */
PyObject* m_pythondictionary;
#endif
@@ -204,7 +204,7 @@ public:
void SetCanvas(RAS_ICanvas* canvas);
void SetRenderTools(RAS_IRenderTools* rendertools);
void SetRasterizer(RAS_IRasterizer* rasterizer);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
void SetPyNamespace(PyObject* pythondictionary);
PyObject* GetPyNamespace(){return m_pythondictionary;};
#endif
diff --git a/source/gameengine/Ketsji/KX_Light.cpp b/source/gameengine/Ketsji/KX_Light.cpp
index fdd325c46a1..b608be4c89f 100644
--- a/source/gameengine/Ketsji/KX_Light.cpp
+++ b/source/gameengine/Ketsji/KX_Light.cpp
@@ -259,7 +259,7 @@ void KX_LightObject::UnbindShadowBuffer(RAS_IRasterizer *ras)
GPU_lamp_shadow_buffer_unbind(lamp);
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python Integration Hooks */
/* ------------------------------------------------------------------------- */
@@ -385,4 +385,4 @@ int KX_LightObject::pyattr_set_type(void* self_v, const KX_PYATTRIBUTE_DEF *attr
return PY_SET_ATTR_SUCCESS;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_Light.h b/source/gameengine/Ketsji/KX_Light.h
index 334aed1995d..f7b40d24293 100644
--- a/source/gameengine/Ketsji/KX_Light.h
+++ b/source/gameengine/Ketsji/KX_Light.h
@@ -69,7 +69,7 @@ public:
virtual int GetGameObjectType() { return OBJ_LIGHT; }
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* attributes */
static PyObject* pyattr_get_color(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static int pyattr_set_color(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef, PyObject* value);
diff --git a/source/gameengine/Ketsji/KX_MeshProxy.cpp b/source/gameengine/Ketsji/KX_MeshProxy.cpp
index a5ff7ebcbc1..3cedda38201 100644
--- a/source/gameengine/Ketsji/KX_MeshProxy.cpp
+++ b/source/gameengine/Ketsji/KX_MeshProxy.cpp
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "KX_MeshProxy.h"
#include "RAS_IPolygonMaterial.h"
@@ -308,4 +308,4 @@ bool ConvertPythonToMesh(PyObject * value, RAS_MeshObject **object, bool py_none
return false;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_MeshProxy.h b/source/gameengine/Ketsji/KX_MeshProxy.h
index 7b627040b4c..29231498163 100644
--- a/source/gameengine/Ketsji/KX_MeshProxy.h
+++ b/source/gameengine/Ketsji/KX_MeshProxy.h
@@ -29,7 +29,7 @@
#ifndef __KX_MESHPROXY
#define __KX_MESHPROXY
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "SCA_IObject.h"
@@ -74,7 +74,7 @@ public:
static PyObject * pyattr_get_numPolygons(void * self, const KX_PYATTRIBUTE_DEF * attrdef);
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
#endif //__KX_MESHPROXY
diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
index 19114c86c98..637210525f8 100644
--- a/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
+++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.cpp
@@ -347,7 +347,7 @@ const MT_Vector2& KX_MouseFocusSensor::HitUV() const
return m_hitUV;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -442,7 +442,7 @@ PyObject* KX_MouseFocusSensor::pyattr_get_hit_uv(void *self_v, const KX_PYATTRIB
return PyObjectFrom(self->HitUV());
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/Ketsji/KX_MouseFocusSensor.h b/source/gameengine/Ketsji/KX_MouseFocusSensor.h
index c969aa3ec74..3ea0f932314 100644
--- a/source/gameengine/Ketsji/KX_MouseFocusSensor.h
+++ b/source/gameengine/Ketsji/KX_MouseFocusSensor.h
@@ -94,7 +94,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
const MT_Vector3& HitNormal() const;
const MT_Vector2& HitUV() const;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -109,7 +109,7 @@ class KX_MouseFocusSensor : public SCA_MouseSensor
static PyObject* pyattr_get_hit_normal(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_hit_uv(void* self_v, const KX_PYATTRIBUTE_DEF *attrdef);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* --------------------------------------------------------------------- */
SCA_IObject* m_hitObject;
diff --git a/source/gameengine/Ketsji/KX_NearSensor.cpp b/source/gameengine/Ketsji/KX_NearSensor.cpp
index 36c1b0f5bd1..c9af5d8d2a5 100644
--- a/source/gameengine/Ketsji/KX_NearSensor.cpp
+++ b/source/gameengine/Ketsji/KX_NearSensor.cpp
@@ -242,7 +242,7 @@ bool KX_NearSensor::NewHandleCollision(void* obj1,void* obj2,const PHY_CollData
return false; // was DT_CONTINUE; but this was defined in Sumo as false
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python Functions */
@@ -285,4 +285,4 @@ PyAttributeDef KX_NearSensor::Attributes[] = {
{NULL} //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_NearSensor.h b/source/gameengine/Ketsji/KX_NearSensor.h
index 10dba22c4e9..67f235ceae2 100644
--- a/source/gameengine/Ketsji/KX_NearSensor.h
+++ b/source/gameengine/Ketsji/KX_NearSensor.h
@@ -78,7 +78,7 @@ public:
virtual bool BroadPhaseSensorFilterCollision(void*obj1,void*obj2) { return false; };
virtual sensortype GetSensorType() { return ST_NEAR; }
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -99,7 +99,7 @@ public:
return 0;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
diff --git a/source/gameengine/Ketsji/KX_ObjectActuator.cpp b/source/gameengine/Ketsji/KX_ObjectActuator.cpp
index 0d0cac3c084..9f1df329005 100644
--- a/source/gameengine/Ketsji/KX_ObjectActuator.cpp
+++ b/source/gameengine/Ketsji/KX_ObjectActuator.cpp
@@ -313,7 +313,7 @@ bool KX_ObjectActuator::isValid(KX_ObjectActuator::KX_OBJECT_ACT_VEC_TYPE type)
return res;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -636,6 +636,6 @@ int KX_ObjectActuator::pyattr_set_reference(void *self, const struct KX_PYATTRIB
return PY_SET_ATTR_SUCCESS;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/Ketsji/KX_ObjectActuator.h b/source/gameengine/Ketsji/KX_ObjectActuator.h
index b12cf77d3e1..9dab1e39cba 100644
--- a/source/gameengine/Ketsji/KX_ObjectActuator.h
+++ b/source/gameengine/Ketsji/KX_ObjectActuator.h
@@ -157,7 +157,7 @@ public:
}
virtual bool Update();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -217,7 +217,7 @@ public:
return 0;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
diff --git a/source/gameengine/Ketsji/KX_ParentActuator.cpp b/source/gameengine/Ketsji/KX_ParentActuator.cpp
index 62740585831..b41d48f5cf3 100644
--- a/source/gameengine/Ketsji/KX_ParentActuator.cpp
+++ b/source/gameengine/Ketsji/KX_ParentActuator.cpp
@@ -130,7 +130,7 @@ bool KX_ParentActuator::Update()
return false;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -199,6 +199,6 @@ int KX_ParentActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUTE
return PY_SET_ATTR_SUCCESS;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/Ketsji/KX_ParentActuator.h b/source/gameengine/Ketsji/KX_ParentActuator.h
index 884b1829ae3..28745c6d0f5 100644
--- a/source/gameengine/Ketsji/KX_ParentActuator.h
+++ b/source/gameengine/Ketsji/KX_ParentActuator.h
@@ -77,7 +77,7 @@ class KX_ParentActuator : public SCA_IActuator
virtual void Relink(GEN_Map *obj_map);
virtual bool UnlinkObject(SCA_IObject* clientobj);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -87,7 +87,7 @@ class KX_ParentActuator : public SCA_IActuator
static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
}; /* end of class KX_ParentActuator : public SCA_PropertyActuator */
diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
index 15fc3e5c471..471774866ac 100644
--- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.cpp
@@ -46,7 +46,7 @@ KX_PhysicsObjectWrapper::~KX_PhysicsObjectWrapper()
{
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* KX_PhysicsObjectWrapper::PySetPosition(PyObject* args)
{
diff --git a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h
index 01980c0f644..ca7e99350c4 100644
--- a/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h
+++ b/source/gameengine/Ketsji/KX_PhysicsObjectWrapper.h
@@ -39,14 +39,14 @@ public:
KX_PhysicsObjectWrapper(class PHY_IPhysicsController* ctrl,class PHY_IPhysicsEnvironment* physenv);
virtual ~KX_PhysicsObjectWrapper();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetPosition);
KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetLinearVelocity);
KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetAngularVelocity);
KX_PYMETHOD_VARARGS(KX_PhysicsObjectWrapper,SetActive);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
private:
class PHY_IPhysicsController* m_ctrl;
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.cpp b/source/gameengine/Ketsji/KX_PolyProxy.cpp
index 9395e57e68b..9843d93c506 100644
--- a/source/gameengine/Ketsji/KX_PolyProxy.cpp
+++ b/source/gameengine/Ketsji/KX_PolyProxy.cpp
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "KX_PolyProxy.h"
#include "KX_MeshProxy.h"
@@ -267,4 +267,4 @@ KX_PYMETHODDEF_DOC_NOARGS(KX_PolyProxy, getMaterial,
}
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_PolyProxy.h b/source/gameengine/Ketsji/KX_PolyProxy.h
index 3e669630e30..179fb67f85f 100644
--- a/source/gameengine/Ketsji/KX_PolyProxy.h
+++ b/source/gameengine/Ketsji/KX_PolyProxy.h
@@ -29,7 +29,7 @@
#ifndef __KX_POLYROXY
#define __KX_POLYPROXY
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "SCA_IObject.h"
@@ -77,7 +77,7 @@ public:
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
#endif //__KX_POLYPROXY
diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
index 63204b16e8b..89889845125 100644
--- a/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
+++ b/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
@@ -54,7 +54,7 @@ KX_PolygonMaterial::KX_PolygonMaterial()
m_tface(NULL),
m_mcol(NULL),
m_material(NULL),
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
m_pymaterial(NULL),
#endif
m_pass(0)
@@ -90,7 +90,7 @@ void KX_PolygonMaterial::Initialize(
m_tface = tface;
m_mcol = mcol;
m_material = ma;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
m_pymaterial = 0;
#endif
m_pass = 0;
@@ -98,19 +98,19 @@ void KX_PolygonMaterial::Initialize(
KX_PolygonMaterial::~KX_PolygonMaterial()
{
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if (m_pymaterial)
{
Py_DECREF(m_pymaterial);
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
}
bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingInfo) const
{
bool dopass = false;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
if (m_pymaterial)
{
PyObject *pyRasty = PyCObject_FromVoidPtr((void*)rasty, NULL); /* new reference */
@@ -130,7 +130,7 @@ bool KX_PolygonMaterial::Activate(RAS_IRasterizer* rasty, TCachingInfo& cachingI
}
}
else
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
{
switch (m_pass++)
{
@@ -201,7 +201,7 @@ void KX_PolygonMaterial::GetMaterialRGBAColor(unsigned char *rgba) const
RAS_IPolyMaterial::GetMaterialRGBAColor(rgba);
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
//----------------------------------------------------------------------------
//Python
@@ -393,4 +393,4 @@ int KX_PolygonMaterial::pyattr_set_specular(void *self_v, const KX_PYATTRIBUTE_D
return PY_SET_ATTR_SUCCESS;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_PolygonMaterial.h b/source/gameengine/Ketsji/KX_PolygonMaterial.h
index 03b4bf11a18..17adbac79c0 100644
--- a/source/gameengine/Ketsji/KX_PolygonMaterial.h
+++ b/source/gameengine/Ketsji/KX_PolygonMaterial.h
@@ -58,7 +58,7 @@ private:
unsigned int* m_mcol;
Material* m_material;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* m_pymaterial;
#endif
@@ -122,7 +122,7 @@ public:
}
virtual void GetMaterialRGBAColor(unsigned char *rgba) const;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
KX_PYMETHOD_DOC(KX_PolygonMaterial, updateTexture);
KX_PYMETHOD_DOC(KX_PolygonMaterial, setTexture);
KX_PYMETHOD_DOC(KX_PolygonMaterial, activate);
diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
index bbf8152bd68..d2cb9aef985 100644
--- a/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
+++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.cpp
@@ -37,7 +37,7 @@
#include "PyObjectPlus.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
// nasty glob variable to connect scripting language
// if there is a better way (without global), please do so!
@@ -659,5 +659,5 @@ PHY_IPhysicsEnvironment* PHY_GetActiveEnvironment()
return g_CurrentActivePhysicsEnvironment;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_PyConstraintBinding.h b/source/gameengine/Ketsji/KX_PyConstraintBinding.h
index a1b3c3d6da3..6da60794eb0 100644
--- a/source/gameengine/Ketsji/KX_PyConstraintBinding.h
+++ b/source/gameengine/Ketsji/KX_PyConstraintBinding.h
@@ -29,7 +29,7 @@
#ifndef PHY_PYTHON_CONSTRAINTBINDING
#define PHY_PYTHON_CONSTRAINTBINDING
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include
@@ -37,7 +37,7 @@ PyObject* initPythonConstraintBinding();
void PHY_RemovePythonConstraintBinding();
void PHY_SetActiveEnvironment(class PHY_IPhysicsEnvironment* env);
PHY_IPhysicsEnvironment* PHY_GetActiveEnvironment();
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
#endif //PHY_PYTHON_CONSTRAINTBINDING
diff --git a/source/gameengine/Ketsji/KX_PyMath.cpp b/source/gameengine/Ketsji/KX_PyMath.cpp
index 12f88331d15..45957ca1911 100644
--- a/source/gameengine/Ketsji/KX_PyMath.cpp
+++ b/source/gameengine/Ketsji/KX_PyMath.cpp
@@ -32,7 +32,7 @@
#pragma warning (disable : 4786)
#endif //WIN32
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "MT_Vector3.h"
#include "MT_Vector4.h"
@@ -190,4 +190,4 @@ PyObject* PyObjectFrom(const MT_Tuple2 &vec)
#endif
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_PyMath.h b/source/gameengine/Ketsji/KX_PyMath.h
index 9c9688f79cd..589bd72c760 100644
--- a/source/gameengine/Ketsji/KX_PyMath.h
+++ b/source/gameengine/Ketsji/KX_PyMath.h
@@ -42,7 +42,7 @@
#include "KX_Python.h"
#include "PyObjectPlus.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#ifdef USE_MATHUTILS
extern "C" {
#include "../../blender/python/generic/mathutils.h" /* so we can have mathutils callbacks */
@@ -239,4 +239,4 @@ PyObject* PyObjectFrom(const MT_Tuple4 &pos);
#endif
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_PythonInit.cpp b/source/gameengine/Ketsji/KX_PythonInit.cpp
index 56ec61f9f4c..99870c42018 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInit.cpp
@@ -34,20 +34,28 @@
#pragma warning (disable : 4786)
#endif //WIN32
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
+
+#ifdef _POSIX_C_SOURCE
+#undef _POSIX_C_SOURCE
+#endif
+
+#ifdef _XOPEN_SOURCE
+#undef _XOPEN_SOURCE
+#endif
+
+#include
extern "C" {
#include "bpy_internal_import.h" /* from the blender python api, but we want to import text too! */
#include "py_capi_utils.h"
#include "mathutils.h" // Blender.Mathutils module copied here so the blenderlayer can use.
- #include "geometry.h" // Blender.Geometry module copied here so the blenderlayer can use.
#include "bgl.h"
#include "blf_api.h"
#include "marshal.h" /* python header for loading/saving dicts */
}
-#define WITH_PYTHON
#include "AUD_PyInit.h"
#endif
@@ -130,7 +138,7 @@ extern "C" {
// 'local' copy of canvas ptr, for window height/width python scripts
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
static RAS_ICanvas* gp_Canvas = NULL;
static char gp_GamePythonPath[FILE_MAXDIR + FILE_MAXFILE] = "";
@@ -138,7 +146,7 @@ static char gp_GamePythonPathOrig[FILE_MAXDIR + FILE_MAXFILE] = ""; // not super
static SCA_PythonKeyboard* gp_PythonKeyboard = NULL;
static SCA_PythonMouse* gp_PythonMouse = NULL;
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
static KX_Scene* gp_KetsjiScene = NULL;
static KX_KetsjiEngine* gp_KetsjiEngine = NULL;
@@ -167,7 +175,7 @@ void KX_RasterizerDrawDebugLine(const MT_Vector3& from,const MT_Vector3& to,cons
gp_Rasterizer->DrawDebugLine(from,to,color);
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
static PyObject *gp_OrigPythonSysPath= NULL;
static PyObject *gp_OrigPythonSysModules= NULL;
@@ -2324,22 +2332,22 @@ PyObject* initGameKeys()
PyObject* initMathutils()
{
- return Mathutils_Init();
+ return BPyInit_mathutils();
}
PyObject* initGeometry()
{
- return Geometry_Init();
+ return BPyInit_mathutils_geometry();
}
PyObject* initBGL()
{
- return BGL_Init();
+ return BPyInit_bgl();
}
PyObject* initBLF()
{
- return BLF_Init();
+ return BPyInit_blf();
}
// utility function for loading and saving the globalDict
@@ -2443,4 +2451,4 @@ void resetGamePythonPath()
gp_GamePythonPathOrig[0] = '\0';
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_PythonInit.h b/source/gameengine/Ketsji/KX_PythonInit.h
index fb59a2f21eb..7b0ed08c6bb 100644
--- a/source/gameengine/Ketsji/KX_PythonInit.h
+++ b/source/gameengine/Ketsji/KX_PythonInit.h
@@ -39,7 +39,7 @@ typedef enum {
extern bool gUseVisibilityTemp;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* initGameLogic(class KX_KetsjiEngine *engine, class KX_Scene* ketsjiscene);
PyObject* initGameKeys();
PyObject* initRasterizer(class RAS_IRasterizer* rasty,class RAS_ICanvas* canvas);
diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
index 6b9d7a2cccf..3cca4f39f85 100644
--- a/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
+++ b/source/gameengine/Ketsji/KX_PythonInitTypes.cpp
@@ -32,7 +32,7 @@
#ifndef _adr_py_init_types_h_ // only process once,
#define _adr_py_init_types_h_ // even if multiply included
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* Only for Class::Parents */
#include "BL_BlenderShader.h"
@@ -256,6 +256,6 @@ void initPyTypes(void)
#endif
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
#endif
diff --git a/source/gameengine/Ketsji/KX_PythonInitTypes.h b/source/gameengine/Ketsji/KX_PythonInitTypes.h
index c16fafedf93..1053f320e5e 100644
--- a/source/gameengine/Ketsji/KX_PythonInitTypes.h
+++ b/source/gameengine/Ketsji/KX_PythonInitTypes.h
@@ -30,7 +30,7 @@
#ifndef _adr_py_init_types_h_ // only process once,
#define _adr_py_init_types_h_ // even if multiply included
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
void initPyTypes(void);
#endif
diff --git a/source/gameengine/Ketsji/KX_PythonSeq.cpp b/source/gameengine/Ketsji/KX_PythonSeq.cpp
index 5c87fe2e757..bed3f33ab77 100644
--- a/source/gameengine/Ketsji/KX_PythonSeq.cpp
+++ b/source/gameengine/Ketsji/KX_PythonSeq.cpp
@@ -28,7 +28,7 @@
* Readonly sequence wrapper for lookups on logic bricks
*/
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "KX_PythonSeq.h"
#include "KX_GameObject.h"
@@ -512,4 +512,4 @@ PyTypeObject KX_PythonSeq_Type = {
NULL
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_PythonSeq.h b/source/gameengine/Ketsji/KX_PythonSeq.h
index ca8f667852a..7ca36cc19f4 100644
--- a/source/gameengine/Ketsji/KX_PythonSeq.h
+++ b/source/gameengine/Ketsji/KX_PythonSeq.h
@@ -31,7 +31,7 @@
#ifndef _adr_py_seq_h_ // only process once,
#define _adr_py_seq_h_ // even if multiply included
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "PyObjectPlus.h"
@@ -61,6 +61,6 @@ typedef struct {
PyObject *KX_PythonSeq_CreatePyObject(PyObject *base, short type);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
#endif // _adr_py_seq_h_
diff --git a/source/gameengine/Ketsji/KX_RadarSensor.cpp b/source/gameengine/Ketsji/KX_RadarSensor.cpp
index 041559158dd..60dc3be7d6e 100644
--- a/source/gameengine/Ketsji/KX_RadarSensor.cpp
+++ b/source/gameengine/Ketsji/KX_RadarSensor.cpp
@@ -172,7 +172,7 @@ void KX_RadarSensor::SynchronizeTransform()
/* Python Functions */
/* ------------------------------------------------------------------------- */
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python Integration Hooks */
@@ -212,4 +212,4 @@ PyAttributeDef KX_RadarSensor::Attributes[] = {
{NULL} //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_RaySensor.cpp b/source/gameengine/Ketsji/KX_RaySensor.cpp
index e745d1f0334..001c7a290d7 100644
--- a/source/gameengine/Ketsji/KX_RaySensor.cpp
+++ b/source/gameengine/Ketsji/KX_RaySensor.cpp
@@ -309,7 +309,7 @@ bool KX_RaySensor::Evaluate()
return result;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -365,4 +365,4 @@ PyObject* KX_RaySensor::pyattr_get_hitobject(void *self_v, const KX_PYATTRIBUTE_
Py_RETURN_NONE;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_RaySensor.h b/source/gameengine/Ketsji/KX_RaySensor.h
index 34f7d8a7b1d..ac0b5eba26b 100644
--- a/source/gameengine/Ketsji/KX_RaySensor.h
+++ b/source/gameengine/Ketsji/KX_RaySensor.h
@@ -90,12 +90,12 @@ public:
KX_RAY_AXIS_NEG_Z
};
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* Attributes */
static PyObject* pyattr_get_hitobject(void *self_v, const KX_PYATTRIBUTE_DEF *attrdef);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
index eee6146f6ed..34b49045337 100644
--- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.cpp
@@ -159,7 +159,7 @@ void KX_SCA_AddObjectActuator::Relink(GEN_Map *obj_map)
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -246,7 +246,7 @@ PyObject* KX_SCA_AddObjectActuator::PyInstantAddObject()
Py_RETURN_NONE;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
void KX_SCA_AddObjectActuator::InstantAddObject()
{
diff --git a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
index c2068d157ee..16612f9a743 100644
--- a/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
+++ b/source/gameengine/Ketsji/KX_SCA_AddObjectActuator.h
@@ -122,7 +122,7 @@ public:
void InstantAddObject();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
KX_PYMETHOD_DOC_NOARGS(KX_SCA_AddObjectActuator,InstantAddObject);
@@ -130,7 +130,7 @@ public:
static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
static PyObject* pyattr_get_objectLastCreated(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
}; /* end of class KX_SCA_AddObjectActuator : public KX_EditObjectActuator */
diff --git a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp
index bc59c63dc69..6e36bde59ec 100644
--- a/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_DynamicActuator.cpp
@@ -37,7 +37,7 @@
#include "KX_SCA_DynamicActuator.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -77,7 +77,7 @@ PyAttributeDef KX_SCA_DynamicActuator::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Native functions */
diff --git a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp
index c9ead726905..f50dc9fc46a 100644
--- a/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_EndObjectActuator.cpp
@@ -80,7 +80,7 @@ CValue* KX_SCA_EndObjectActuator::GetReplica()
return replica;
};
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions : integration hooks */
@@ -116,6 +116,6 @@ PyAttributeDef KX_SCA_EndObjectActuator::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
index 20c3168d7ba..51a3979830d 100644
--- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.cpp
@@ -40,7 +40,7 @@
#include "PyObjectPlus.h"
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -110,7 +110,7 @@ KX_PYMETHODDEF_DOC(KX_SCA_ReplaceMeshActuator, instantReplaceMesh,
Py_RETURN_NONE;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Native functions */
diff --git a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
index 4a6ae9f8fce..573ec76782c 100644
--- a/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
+++ b/source/gameengine/Ketsji/KX_SCA_ReplaceMeshActuator.h
@@ -74,7 +74,7 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator
void InstantReplaceMesh();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
@@ -90,7 +90,7 @@ class KX_SCA_ReplaceMeshActuator : public SCA_IActuator
KX_PYMETHOD_DOC(KX_SCA_ReplaceMeshActuator,instantReplaceMesh);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
diff --git a/source/gameengine/Ketsji/KX_Scene.cpp b/source/gameengine/Ketsji/KX_Scene.cpp
index 3d7fcb25f2b..c48112dbcb7 100644
--- a/source/gameengine/Ketsji/KX_Scene.cpp
+++ b/source/gameengine/Ketsji/KX_Scene.cpp
@@ -208,7 +208,7 @@ KX_Scene::KX_Scene(class SCA_IInputDevice* keyboarddevice,
m_bucketmanager=new RAS_BucketManager();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
m_attr_dict = PyDict_New(); /* new ref */
m_draw_call_pre = NULL;
m_draw_call_post = NULL;
@@ -262,7 +262,7 @@ KX_Scene::~KX_Scene()
delete m_bucketmanager;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyDict_Clear(m_attr_dict);
Py_DECREF(m_attr_dict);
@@ -1073,8 +1073,9 @@ void KX_Scene::ReplaceMesh(class CValue* obj,void* meshobj, bool use_gfx, bool u
blendobj->parent && // original object had armature (not sure this test is needed)
blendobj->parent->type == OB_ARMATURE &&
blendmesh->dvert!=NULL; // mesh has vertex group
+#ifdef USE_BULLET
bool bHasSoftBody = (!parentobj && (blendobj->gameflag & OB_SOFT_BODY));
-
+#endif
bool releaseParent = true;
@@ -1838,7 +1839,7 @@ void KX_Scene::Render2DFilters(RAS_ICanvas* canvas)
m_filtermanager.RenderFilters(canvas);
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
void KX_Scene::RunDrawingCallbacks(PyObject* cb_list)
{
@@ -2248,4 +2249,4 @@ KX_PYMETHODDEF_DOC(KX_Scene, get, "")
return def;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_Scene.h b/source/gameengine/Ketsji/KX_Scene.h
index cd8277ec39f..9b4a6ec5ec6 100644
--- a/source/gameengine/Ketsji/KX_Scene.h
+++ b/source/gameengine/Ketsji/KX_Scene.h
@@ -99,7 +99,7 @@ class KX_Scene : public PyObjectPlus, public SCA_IScene
{
Py_Header;
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* m_attr_dict;
PyObject* m_draw_call_pre;
PyObject* m_draw_call_post;
@@ -544,7 +544,7 @@ public:
void Update2DFilter(vector& propNames, void* gameObj, RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text);
void Render2DFilters(RAS_ICanvas* canvas);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
/* --------------------------------------------------------------------- */
diff --git a/source/gameengine/Ketsji/KX_SceneActuator.cpp b/source/gameengine/Ketsji/KX_SceneActuator.cpp
index 8f6000ebc3d..f991b843c99 100644
--- a/source/gameengine/Ketsji/KX_SceneActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SceneActuator.cpp
@@ -210,7 +210,7 @@ KX_Scene* KX_SceneActuator::FindScene(char * sceneName)
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -283,6 +283,6 @@ int KX_SceneActuator::pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_
return PY_SET_ATTR_SUCCESS;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/Ketsji/KX_SceneActuator.h b/source/gameengine/Ketsji/KX_SceneActuator.h
index 360488f9f74..b49357b21ca 100644
--- a/source/gameengine/Ketsji/KX_SceneActuator.h
+++ b/source/gameengine/Ketsji/KX_SceneActuator.h
@@ -89,7 +89,7 @@ class KX_SceneActuator : public SCA_IActuator
virtual bool Update();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
virtual void Replace_IScene(SCA_IScene *val)
{
@@ -103,7 +103,7 @@ class KX_SceneActuator : public SCA_IActuator
static PyObject* pyattr_get_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static int pyattr_set_camera(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
}; /* end of class KXSceneActuator */
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.cpp b/source/gameengine/Ketsji/KX_SoundActuator.cpp
index 9ebb36578c4..d5f8aa74880 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.cpp
+++ b/source/gameengine/Ketsji/KX_SoundActuator.cpp
@@ -233,7 +233,7 @@ bool KX_SoundActuator::Update(double curtime, bool frame)
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -496,4 +496,4 @@ int KX_SoundActuator::pyattr_set_pitch(void *self, const struct KX_PYATTRIBUTE_D
return PY_SET_ATTR_SUCCESS;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_SoundActuator.h b/source/gameengine/Ketsji/KX_SoundActuator.h
index c175a184a15..7c1108ea8fb 100644
--- a/source/gameengine/Ketsji/KX_SoundActuator.h
+++ b/source/gameengine/Ketsji/KX_SoundActuator.h
@@ -93,7 +93,7 @@ public:
CValue* GetReplica();
void ProcessReplica();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* -------------------------------------------------------------------- */
/* Python interface --------------------------------------------------- */
@@ -115,7 +115,7 @@ public:
static PyObject* pyattr_get_pitch(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static PyObject* pyattr_get_type(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
};
diff --git a/source/gameengine/Ketsji/KX_StateActuator.cpp b/source/gameengine/Ketsji/KX_StateActuator.cpp
index 33f21f49810..ff4c3985a04 100644
--- a/source/gameengine/Ketsji/KX_StateActuator.cpp
+++ b/source/gameengine/Ketsji/KX_StateActuator.cpp
@@ -124,7 +124,7 @@ void KX_StateActuator::Activate(SG_DList& head)
}
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -165,4 +165,4 @@ PyAttributeDef KX_StateActuator::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_TouchSensor.cpp b/source/gameengine/Ketsji/KX_TouchSensor.cpp
index 9b44f487682..b590624e6c7 100644
--- a/source/gameengine/Ketsji/KX_TouchSensor.cpp
+++ b/source/gameengine/Ketsji/KX_TouchSensor.cpp
@@ -283,7 +283,7 @@ bool KX_TouchSensor::NewHandleCollision(void*object1,void*object2,const PHY_Coll
return false; // was DT_CONTINUE but this was defined in sumo as false.
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
diff --git a/source/gameengine/Ketsji/KX_TouchSensor.h b/source/gameengine/Ketsji/KX_TouchSensor.h
index c9448897936..80e5a0f938e 100644
--- a/source/gameengine/Ketsji/KX_TouchSensor.h
+++ b/source/gameengine/Ketsji/KX_TouchSensor.h
@@ -118,7 +118,7 @@ public:
// todo: put some info for collision maybe
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* --------------------------------------------------------------------- */
/* Python interface ---------------------------------------------------- */
diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.cpp b/source/gameengine/Ketsji/KX_TrackToActuator.cpp
index ae8d2f6459b..cae183ac4a2 100644
--- a/source/gameengine/Ketsji/KX_TrackToActuator.cpp
+++ b/source/gameengine/Ketsji/KX_TrackToActuator.cpp
@@ -417,7 +417,7 @@ bool KX_TrackToActuator::Update(double curtime, bool frame)
return result;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -486,6 +486,6 @@ int KX_TrackToActuator::pyattr_set_object(void *self, const struct KX_PYATTRIBUT
return PY_SET_ATTR_SUCCESS;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
/* eof */
diff --git a/source/gameengine/Ketsji/KX_TrackToActuator.h b/source/gameengine/Ketsji/KX_TrackToActuator.h
index 2b44994f103..33b2ecb1aa5 100644
--- a/source/gameengine/Ketsji/KX_TrackToActuator.h
+++ b/source/gameengine/Ketsji/KX_TrackToActuator.h
@@ -69,7 +69,7 @@ class KX_TrackToActuator : public SCA_IActuator
virtual void Relink(GEN_Map *obj_map);
virtual bool Update(double curtime, bool frame);
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* Python part */
@@ -77,7 +77,7 @@ class KX_TrackToActuator : public SCA_IActuator
static PyObject* pyattr_get_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef);
static int pyattr_set_object(void *self, const struct KX_PYATTRIBUTE_DEF *attrdef, PyObject *value);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
}; /* end of class KX_TrackToActuator : public KX_EditObjectActuator */
diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
index 4ee80c64570..17368357cc4 100644
--- a/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
+++ b/source/gameengine/Ketsji/KX_VehicleWrapper.cpp
@@ -29,7 +29,7 @@ KX_VehicleWrapper::~KX_VehicleWrapper()
m_motionStates.clear();
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
PyObject* KX_VehicleWrapper::PyAddWheel(PyObject* args)
{
@@ -319,4 +319,4 @@ PyAttributeDef KX_VehicleWrapper::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_VehicleWrapper.h b/source/gameengine/Ketsji/KX_VehicleWrapper.h
index 2ca06da18fc..4cde50b0932 100644
--- a/source/gameengine/Ketsji/KX_VehicleWrapper.h
+++ b/source/gameengine/Ketsji/KX_VehicleWrapper.h
@@ -20,7 +20,7 @@ public:
virtual ~KX_VehicleWrapper ();
int getConstraintId();
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
KX_PYMETHOD_VARARGS(KX_VehicleWrapper,AddWheel);
KX_PYMETHOD_VARARGS(KX_VehicleWrapper,GetNumWheels);
@@ -47,7 +47,7 @@ public:
KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetSuspensionCompression);
KX_PYMETHOD_VARARGS(KX_VehicleWrapper,SetRollInfluence);
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
private:
PHY_IVehicle* m_vehicle;
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.cpp b/source/gameengine/Ketsji/KX_VertexProxy.cpp
index 09630ad2851..f66d11394fd 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.cpp
+++ b/source/gameengine/Ketsji/KX_VertexProxy.cpp
@@ -26,7 +26,7 @@
* ***** END GPL LICENSE BLOCK *****
*/
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "KX_VertexProxy.h"
#include "KX_MeshProxy.h"
@@ -553,4 +553,4 @@ PyObject* KX_VertexProxy::PySetUV2(PyObject* args)
Py_RETURN_NONE;
}
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/KX_VertexProxy.h b/source/gameengine/Ketsji/KX_VertexProxy.h
index b39d3ecb7d4..a5f2e5a08e0 100644
--- a/source/gameengine/Ketsji/KX_VertexProxy.h
+++ b/source/gameengine/Ketsji/KX_VertexProxy.h
@@ -29,7 +29,7 @@
#ifndef __KX_VERTEXPROXY
#define __KX_VERTEXPROXY
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
#include "SCA_IObject.h"
@@ -102,7 +102,7 @@ public:
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
#endif //__KX_VERTEXPROXY
diff --git a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
index e2f2badf051..464dbd14721 100644
--- a/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
+++ b/source/gameengine/Ketsji/KX_VisibilityActuator.cpp
@@ -79,7 +79,7 @@ KX_VisibilityActuator::Update()
return false;
}
-#ifndef DISABLE_PYTHON
+#ifdef WITH_PYTHON
/* ------------------------------------------------------------------------- */
/* Python functions */
@@ -121,4 +121,4 @@ PyAttributeDef KX_VisibilityActuator::Attributes[] = {
{ NULL } //Sentinel
};
-#endif // DISABLE_PYTHON
+#endif // WITH_PYTHON
diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript
index 6f06d0ff19c..5f7cf9edcd8 100644
--- a/source/gameengine/Ketsji/SConscript
+++ b/source/gameengine/Ketsji/SConscript
@@ -30,8 +30,7 @@ else:
if env['WITH_BF_PYTHON']:
incs += ' ' + env['BF_PYTHON_INC']
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')
diff --git a/source/gameengine/Physics/Bullet/CMakeLists.txt b/source/gameengine/Physics/Bullet/CMakeLists.txt
index faa9385a745..1954d58df3e 100644
--- a/source/gameengine/Physics/Bullet/CMakeLists.txt
+++ b/source/gameengine/Physics/Bullet/CMakeLists.txt
@@ -24,6 +24,9 @@
#
# ***** END GPL LICENSE BLOCK *****
+# since this includes bullet we get errors from the headers too
+REMOVE_STRICT_FLAGS()
+
SET(INC
.
../common
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index 421a9fc64b8..54f98d16cf6 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -13,6 +13,10 @@ subject to the following restrictions:
3. This notice may not be removed or altered from any source distribution.
*/
+#ifndef WIN32
+#include
+#endif
+
#include "CcdPhysicsController.h"
#include "btBulletDynamicsCommon.h"
#include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h"
diff --git a/source/gameengine/Physics/Bullet/SConscript b/source/gameengine/Physics/Bullet/SConscript
index 6cebe0638b0..272d0003c1a 100644
--- a/source/gameengine/Physics/Bullet/SConscript
+++ b/source/gameengine/Physics/Bullet/SConscript
@@ -24,8 +24,7 @@ defs = []
if env['WITH_BF_PYTHON']:
incs += ' ' + env['BF_PYTHON_INC']
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
if env['WITH_BF_CXX_GUARDEDALLOC']:
defs.append('WITH_CXX_GUARDEDALLOC')
diff --git a/source/gameengine/Physics/common/CMakeLists.txt b/source/gameengine/Physics/common/CMakeLists.txt
index 0389280340f..f67de0f77d0 100644
--- a/source/gameengine/Physics/common/CMakeLists.txt
+++ b/source/gameengine/Physics/common/CMakeLists.txt
@@ -27,7 +27,6 @@
SET(INC
.
../Dummy
- ../../../intern/moto/include
)
SET(SRC
diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
index 0c16d6a29c2..93d82702e90 100644
--- a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
+++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp
@@ -512,11 +512,11 @@ void RAS_2DFilterManager::EnableFilter(vector& propNames, void* game
return;
}
- if(mode>=RAS_2DFILTER_MOTIONBLUR && mode<=RAS_2DFILTER_INVERT)
- {
- if(m_filters[pass])
- glDeleteObjectARB(m_filters[pass]);
- m_filters[pass] = CreateShaderProgram(mode);
- m_enabled[pass] = 1;
- }
+ // We've checked all other cases, which means we must be dealing with a builtin filter
+ if(m_filters[pass])
+ glDeleteObjectARB(m_filters[pass]);
+ m_filters[pass] = CreateShaderProgram(mode);
+ m_gameObjects[pass] = NULL;
+ AnalyseShader(pass, propNames);
+ m_enabled[pass] = 1;
}
diff --git a/source/gameengine/Rasterizer/SConscript b/source/gameengine/Rasterizer/SConscript
index dc189c54a40..045714e80ac 100644
--- a/source/gameengine/Rasterizer/SConscript
+++ b/source/gameengine/Rasterizer/SConscript
@@ -10,8 +10,7 @@ defs = [ 'GLEW_STATIC' ]
if env['WITH_BF_PYTHON']:
incs += ' ' + env['BF_PYTHON_INC']
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
if env['WITH_BF_CXX_GUARDEDALLOC']:
defs.append('WITH_CXX_GUARDEDALLOC')
diff --git a/source/gameengine/VideoTexture/CMakeLists.txt b/source/gameengine/VideoTexture/CMakeLists.txt
index 1c624482d30..1bde0bc8a40 100644
--- a/source/gameengine/VideoTexture/CMakeLists.txt
+++ b/source/gameengine/VideoTexture/CMakeLists.txt
@@ -33,7 +33,6 @@ SET(INC
../../../source/gameengine/Rasterizer
../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer
../../../source/gameengine/BlenderRoutines
- ../../../source/blender/include
../../../source/blender/blenlib
../../../source/blender/blenkernel
../../../source/blender/makesdna
@@ -76,8 +75,7 @@ ENDIF(WITH_FFMPEG)
IF(WITH_PYTHON)
LIST(APPEND INC ${PYTHON_INC})
-ELSE(WITH_PYTHON)
- ADD_DEFINITIONS(-DDISABLE_PYTHON)
+ ADD_DEFINITIONS(-DWITH_PYTHON)
ENDIF(WITH_PYTHON)
BLENDERLIB(bf_videotex "${SRC}" "${INC}")
diff --git a/source/gameengine/VideoTexture/SConscript b/source/gameengine/VideoTexture/SConscript
index 21a5f8ce3fe..8a5e3726aa7 100644
--- a/source/gameengine/VideoTexture/SConscript
+++ b/source/gameengine/VideoTexture/SConscript
@@ -21,8 +21,7 @@ if env['OURPLATFORM'] in ('win32-vc', 'win64-vc','win32-mingw'):
if env['WITH_BF_PYTHON']:
incs += ' ' + env['BF_PYTHON_INC']
-else:
- defs.append('DISABLE_PYTHON')
+ defs.append('WITH_PYTHON')
if env['WITH_BF_FFMPEG']:
defs.append('WITH_FFMPEG')