Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/blender/blenkernel/BKE_node.h107
-rw-r--r--source/blender/blenkernel/BKE_texture.h2
-rw-r--r--source/blender/blenkernel/intern/material.c29
-rw-r--r--source/blender/blenkernel/intern/node.c440
-rw-r--r--source/blender/blenkernel/intern/node_shaders.c518
-rw-r--r--source/blender/blenkernel/intern/texture.c34
-rw-r--r--source/blender/blenloader/intern/readfile.c88
-rw-r--r--source/blender/blenloader/intern/writefile.c37
-rw-r--r--source/blender/include/BIF_glutil.h6
-rw-r--r--source/blender/include/BIF_interface.h1
-rw-r--r--source/blender/include/BIF_interface_icons.h4
-rw-r--r--source/blender/include/BIF_previewrender.h33
-rw-r--r--source/blender/include/BIF_resources.h12
-rw-r--r--source/blender/include/BSE_node.h23
-rw-r--r--source/blender/include/blendef.h3
-rw-r--r--source/blender/include/butspace.h40
-rw-r--r--source/blender/include/interface.h2
-rw-r--r--source/blender/makesdna/DNA_material_types.h6
-rw-r--r--source/blender/makesdna/DNA_node_types.h62
-rw-r--r--source/blender/makesdna/DNA_space_types.h8
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h7
-rw-r--r--source/blender/render/extern/include/render.h1
-rw-r--r--source/blender/render/extern/include/render_types.h3
-rw-r--r--source/blender/render/intern/source/ray.c4
-rw-r--r--source/blender/render/intern/source/rendercore.c9
-rw-r--r--source/blender/render/intern/source/texture.c2
-rw-r--r--source/blender/src/blenderbuttons.c2852
-rw-r--r--source/blender/src/butspace.c24
-rw-r--r--source/blender/src/buttons_shading.c758
-rw-r--r--source/blender/src/drawimage.c8
-rw-r--r--source/blender/src/drawnode.c634
-rw-r--r--source/blender/src/drawseq.c2
-rw-r--r--source/blender/src/drawview.c2
-rw-r--r--source/blender/src/edit.c95
-rw-r--r--source/blender/src/editnode.c723
-rw-r--r--source/blender/src/editview.c4
-rw-r--r--source/blender/src/glutil.c32
-rw-r--r--source/blender/src/header_buttonswin.c4
-rw-r--r--source/blender/src/header_info.c2
-rw-r--r--source/blender/src/header_ipo.c2
-rw-r--r--source/blender/src/header_node.c44
-rw-r--r--source/blender/src/headerbuttons.c21
-rw-r--r--source/blender/src/interface.c176
-rw-r--r--source/blender/src/interface_draw.c183
-rw-r--r--source/blender/src/interface_icons.c120
-rw-r--r--source/blender/src/interface_panel.c15
-rw-r--r--source/blender/src/outliner.c5
-rw-r--r--source/blender/src/previewrender.c532
-rw-r--r--source/blender/src/renderwin.c14
-rw-r--r--source/blender/src/resources.c31
-rw-r--r--source/blender/src/space.c8
-rw-r--r--source/blender/src/usiblender.c23
52 files changed, 4831 insertions, 2964 deletions
diff --git a/source/blender/blenkernel/BKE_node.h b/source/blender/blenkernel/BKE_node.h
index 4146ebc71a0..83087204567 100644
--- a/source/blender/blenkernel/BKE_node.h
+++ b/source/blender/blenkernel/BKE_node.h
@@ -37,40 +37,113 @@ struct bNodeTree;
struct bNode;
struct bNodeLink;
struct bNodeSocket;
+struct bNodeStack;
+struct uiBlock;
+struct rctf;
struct ListBase;
#define SOCK_IN 1
#define SOCK_OUT 2
+/* ************** NODE TYPE DEFINITIONS ***** */
-/* ************** GENERIC API *************** */
+typedef struct bNodeSocketType {
+ int type, limit;
+ char *name;
+ float val1, val2, val3, val4; /* default alloc value for inputs */
+ float min, max; /* default range for inputs */
+
+ /* after this line is used internal only */
+ struct bNodeSocket *sock; /* to verify */
+
+} bNodeSocketType;
-void nodeFreeNode(struct bNodeTree *ntree, struct bNode *node);
-void nodeFreeTree(struct bNodeTree *ntree);
+typedef struct bNodeType {
+ int type;
+ char *name;
+ float width, minwidth, maxwidth;
+ short nclass, flag;
+
+ bNodeSocketType *inputs, *outputs;
+
+ char storagename[64]; /* struct name for DNA */
+
+ void (*execfunc)(void *data, struct bNode *, struct bNodeStack **, struct bNodeStack **);
+
+ /* after this line is set on startup of blender */
+ int (*butfunc)(struct uiBlock *, struct bNode *, rctf *);
-struct bNode *nodeAddNode(struct bNodeTree *ntree, char *name);
-struct bNodeLink *nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock);
+} bNodeType;
+
+/* nodetype->nclass, also for themes */
+#define NODE_CLASS_INPUT 0
+#define NODE_CLASS_OUTPUT 1
+#define NODE_CLASS_GENERATOR 2
+#define NODE_CLASS_OPERATOR 3
+
+/* ************** GENERIC API, TREES *************** */
+
+struct bNodeTree *ntreeAddTree(int type);
+void ntreeInitTypes(struct bNodeTree *ntree);
+void ntreeFreeTree(struct bNodeTree *ntree);
+struct bNodeTree *ntreeCopyTree(struct bNodeTree *ntree, int internal_select);
+
+void ntreeSolveOrder(struct bNodeTree *ntree);
+
+void ntreeBeginExecTree(struct bNodeTree *ntree, int xsize, int ysize);
+void ntreeExecTree(struct bNodeTree *ntree);
+void ntreeEndExecTree(struct bNodeTree *ntree);
+void ntreeClearPixelTree(struct bNodeTree *, int, int);
+
+/* ************** GENERIC API, NODES *************** */
+
+void nodeAddToPreview(struct bNode *, float *, int, int);
+
+struct bNode *nodeAddNodeType(struct bNodeTree *ntree, int type);
+void nodeFreeNode(struct bNodeTree *ntree, struct bNode *node);
struct bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node);
-struct bNodeSocket *nodeAddSocket(struct bNode *node, int type, int where, int limit, char *name);
+struct bNodeLink *nodeAddLink(struct bNodeTree *ntree, struct bNode *fromnode, struct bNodeSocket *fromsock, struct bNode *tonode, struct bNodeSocket *tosock);
+void nodeRemLink(struct bNodeTree *ntree, struct bNodeLink *link);
struct bNodeLink *nodeFindLink(struct bNodeTree *ntree, struct bNodeSocket *from, struct bNodeSocket *to);
int nodeCountSocketLinks(struct bNodeTree *ntree, struct bNodeSocket *sock);
-
-void nodeSolveOrder(struct bNodeTree *ntree);
-void nodeExecTree(struct bNodeTree *ntree);
+struct bNode *nodeGetActive(struct bNodeTree *ntree);
+struct bNode *nodeGetActiveID(struct bNodeTree *ntree, short idtype);
/* ************** SHADER NODES *************** */
-/* types are needed to restore callbacks */
-#define SH_NODE_TEST 0
-#define SH_NODE_RGB 1
-#define SH_NODE_VALUE 2
-#define SH_NODE_MIX_RGB 3
-#define SH_NODE_SHOW_RGB 4
+struct ShadeInput;
+struct ShadeResult;
+
+/* note: types are needed to restore callbacks, don't change values */
+#define SH_NODE_INPUT 0
+#define SH_NODE_OUTPUT 1
+
+#define SH_NODE_MATERIAL 100
+#define SH_NODE_RGB 101
+#define SH_NODE_VALUE 102
+#define SH_NODE_MIX_RGB 103
+#define SH_NODE_VALTORGB 104
+#define SH_NODE_RGBTOBW 105
+#define SH_NODE_TEXTURE 106
+
+/* custom defines: options for Material node */
+#define SH_NODE_MAT_DIFF 1
+#define SH_NODE_MAT_SPEC 2
+#define SH_NODE_MAT_NEG 4
+
+/* the type definitions array */
+extern bNodeType *node_all_shaders[];
+
+/* API */
+struct bNode *nodeShaderAdd(struct bNodeTree *ntree, int type);
+void nodeShaderSetExecfunc(struct bNode *node);
+
+void ntreeShaderExecTree(struct bNodeTree *ntree, struct ShadeInput *shi, struct ShadeResult *shr);
-struct bNode *node_shader_add(struct bNodeTree *ntree, int type);
-void node_shader_set_execfunc(struct bNode *node);
+ /* switch material render loop */
+void set_node_shader_lamp_loop(void (*lamp_loop_func)(struct ShadeInput *, struct ShadeResult *));
#endif
diff --git a/source/blender/blenkernel/BKE_texture.h b/source/blender/blenkernel/BKE_texture.h
index 23c31564a66..4db98599206 100644
--- a/source/blender/blenkernel/BKE_texture.h
+++ b/source/blender/blenkernel/BKE_texture.h
@@ -50,7 +50,7 @@ int test_dlerr(const char *name, const char *symbol);
void open_plugin_tex(struct PluginTex *pit);
struct PluginTex *add_plugin_tex(char *str);
void free_plugin_tex(struct PluginTex *pit);
-struct ColorBand *add_colorband(void);
+struct ColorBand *add_colorband(int rangetype);
int do_colorband(struct ColorBand *coba, float in, float out[4]);
void default_tex(struct Tex *tex);
struct Tex *add_texture(char *name);
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 47b3f1e34ea..5054774f339 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -40,6 +40,7 @@
#include "DNA_material_types.h"
#include "DNA_mesh_types.h"
#include "DNA_meta_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_scene_types.h"
#include "DNA_texture_types.h"
@@ -55,6 +56,7 @@
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mesh.h"
+#include "BKE_node.h"
#include "BKE_utildefines.h"
#include "BPY_extern.h"
@@ -84,6 +86,10 @@ void free_material(Material *ma)
if(ml->mat) ml->mat->id.us--;
BLI_freelistN(&ma->layers);
+
+ if(ma->nodetree)
+ ntreeFreeTree(ma->nodetree);
+
}
void init_material(Material *ma)
@@ -169,6 +175,10 @@ Material *copy_material(Material *ma)
for(ml= man->layers.first; ml; ml= ml->next)
id_us_plus((ID *)ml->mat);
+ if(ma->nodetree) {
+ man->nodetree= ntreeCopyTree(ma->nodetree, 0); /* 0 == full new tree */
+ }
+
return man;
}
@@ -567,16 +577,25 @@ void new_material_to_objectdata(Object *ob)
ob->actcol= ob->totcol;
}
+/* will be renamed... now easy to re-use for nodes! */
Material *get_active_matlayer(Material *ma)
{
- MaterialLayer *ml;
if(ma==NULL) return NULL;
- for(ml= ma->layers.first; ml; ml= ml->next)
- if(ml->flag & ML_ACTIVE) break;
- if(ml)
- return ml->mat;
+ if(ma->use_nodes) {
+ bNode *node= nodeGetActiveID(ma->nodetree, ID_MA);
+ if(node && node->id) {
+ return (Material *)node->id;
+ }
+ }
+ else {
+ MaterialLayer *ml;
+ for(ml= ma->layers.first; ml; ml= ml->next)
+ if(ml->flag & ML_ACTIVE) break;
+ if(ml)
+ return ml->mat;
+ }
return ma;
}
diff --git a/source/blender/blenkernel/intern/node.c b/source/blender/blenkernel/intern/node.c
index 3d568e4e391..fbaa0b35c5e 100644
--- a/source/blender/blenkernel/intern/node.c
+++ b/source/blender/blenkernel/intern/node.c
@@ -28,33 +28,197 @@
*/
#include <stdlib.h>
+#include <string.h>
#include "DNA_ID.h"
#include "DNA_node_types.h"
#include "BKE_blender.h"
#include "BKE_node.h"
+#include "BKE_utildefines.h"
#include "BLI_arithb.h"
#include "BLI_blenlib.h"
#include "MEM_guardedalloc.h"
+/* ************** Type stuff ********** */
+
+static bNodeType *nodeGetType(bNodeTree *ntree, int type)
+{
+ bNodeType **typedefs= ntree->alltypes;
+
+ while( *typedefs && (*typedefs)->type!=type)
+ typedefs++;
+
+ return *typedefs;
+}
+
+void ntreeInitTypes(bNodeTree *ntree)
+{
+ bNode *node;
+
+ if(ntree->type==NTREE_SHADER)
+ ntree->alltypes= node_all_shaders;
+ else {
+ ntree->alltypes= NULL;
+ printf("Error: no type definitions for nodes\n");
+ }
+
+ for(node= ntree->nodes.first; node; node= node->next) {
+ node->typeinfo= nodeGetType(ntree, node->type);
+ if(node->typeinfo==NULL)
+ printf("Error: no typeinfo for node %s\n", node->name);
+ }
+
+ ntree->init |= NTREE_TYPE_INIT;
+}
+
+/* only used internal... we depend on type definitions! */
+static bNodeSocket *node_add_socket_type(ListBase *lb, bNodeSocketType *stype)
+{
+ bNodeSocket *sock= MEM_callocN(sizeof(bNodeSocket), "sock");
+
+ BLI_strncpy(sock->name, stype->name, NODE_MAXSTR);
+ if(stype->limit==0) sock->limit= 0xFFF;
+ else sock->limit= stype->limit;
+ sock->type= stype->type;
+
+ sock->ns.vec[0]= stype->val1;
+ sock->ns.vec[1]= stype->val2;
+ sock->ns.vec[2]= stype->val3;
+ sock->ns.vec[3]= stype->val4;
+
+ if(lb)
+ BLI_addtail(lb, sock);
+
+ return sock;
+}
+
+static void node_rem_socket(bNodeTree *ntree, ListBase *lb, bNodeSocket *sock)
+{
+ bNodeLink *link, *next;
+
+ for(link= ntree->links.first; link; link= next) {
+ next= link->next;
+ if(link->fromsock==sock || link->tosock==sock) {
+ nodeRemLink(ntree, link);
+ }
+ }
+
+ BLI_remlink(lb, sock);
+ MEM_freeN(sock);
+}
+
+static bNodeSocket *verify_socket(ListBase *lb, bNodeSocketType *stype)
+{
+ bNodeSocket *sock;
+
+ for(sock= lb->first; sock; sock= sock->next) {
+ if(strncmp(sock->name, stype->name, NODE_MAXSTR)==0)
+ break;
+ }
+ if(sock) {
+ sock->type= stype->type; /* in future, read this from tydefs! */
+ if(stype->limit==0) sock->limit= 0xFFF;
+ else sock->limit= stype->limit;
+ BLI_remlink(lb, sock);
+ return sock;
+ }
+ else {
+ return node_add_socket_type(NULL, stype);
+ }
+}
+
+static void verify_socket_list(bNodeTree *ntree, ListBase *lb, bNodeSocketType *stype_first)
+{
+ bNodeSocketType *stype;
+
+ /* no inputs anymore? */
+ if(stype_first==NULL) {
+ while(lb->first)
+ node_rem_socket(ntree, lb, lb->first);
+ }
+ else {
+ /* step by step compare */
+ stype= stype_first;
+ while(stype->type != -1) {
+ stype->sock= verify_socket(lb, stype);
+ stype++;
+ }
+ /* leftovers are removed */
+ while(lb->first)
+ node_rem_socket(ntree, lb, lb->first);
+ /* and we put back the verified sockets */
+ stype= stype_first;
+ while(stype->type != -1) {
+ BLI_addtail(lb, stype->sock);
+ stype++;
+ }
+ }
+}
+
+void ntreeVerifyTypes(bNodeTree *ntree)
+{
+ bNode *node;
+ bNodeType *ntype;
+
+ if((ntree->init & NTREE_TYPE_INIT)==0)
+ ntreeInitTypes(ntree);
+
+ /* check inputs and outputs, and remove or insert them */
+ for(node= ntree->nodes.first; node; node= node->next) {
+ ntype= node->typeinfo;
+ if(ntype) {
+ /* might add some other verify stuff here */
+
+ verify_socket_list(ntree, &node->inputs, ntype->inputs);
+ verify_socket_list(ntree, &node->outputs, ntype->outputs);
+ }
+ }
+}
+
+
+
/* ************** Add stuff ********** */
/* not very important, but the stack solver likes to know a maximum */
#define MAX_SOCKET 64
-bNode *nodeAddNode(struct bNodeTree *ntree, char *name)
+bNode *nodeAddNodeType(bNodeTree *ntree, int type)
{
- bNode *node= MEM_callocN(sizeof(bNode), "new node");
+ bNode *node;
+ bNodeType *ntype= nodeGetType(ntree, type);
+ bNodeSocketType *stype;
+ node= MEM_callocN(sizeof(bNode), "new node");
BLI_addtail(&ntree->nodes, node);
- BLI_strncpy(node->name, name, NODE_MAXSTR);
+ node->typeinfo= ntype;
+
+ BLI_strncpy(node->name, ntype->name, NODE_MAXSTR);
+ node->type= ntype->type;
+ node->flag= NODE_SELECT|ntype->flag;
+ node->width= ntype->width;
+
+ if(ntype->inputs) {
+ stype= ntype->inputs;
+ while(stype->type != -1) {
+ node_add_socket_type(&node->inputs, stype);
+ stype++;
+ }
+ }
+ if(ntype->outputs) {
+ stype= ntype->outputs;
+ while(stype->type != -1) {
+ node_add_socket_type(&node->outputs, stype);
+ stype++;
+ }
+ }
return node;
}
-/* keep listorder identical, for copying links */
+/* keep socket listorder identical, for copying links */
+/* ntree is the target tree */
bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node)
{
bNode *nnode= MEM_callocN(sizeof(bNode), "dupli node");
@@ -67,8 +231,13 @@ bNode *nodeCopyNode(struct bNodeTree *ntree, struct bNode *node)
if(nnode->id)
nnode->id->us++;
- node->flag= NODE_SELECT;
-
+ if(nnode->storage)
+ nnode->storage= MEM_dupallocN(nnode->storage);
+
+ node->new= nnode;
+ nnode->new= NULL;
+ nnode->preview= NULL;
+
return nnode;
}
@@ -85,19 +254,22 @@ bNodeLink *nodeAddLink(bNodeTree *ntree, bNode *fromnode, bNodeSocket *fromsock,
return link;
}
-bNodeSocket *nodeAddSocket(bNode *node, int type, int where, int limit, char *name)
+void nodeRemLink(bNodeTree *ntree, bNodeLink *link)
{
- bNodeSocket *sock= MEM_callocN(sizeof(bNodeSocket), "sock");
+ BLI_remlink(&ntree->links, link);
+ if(link->tosock)
+ link->tosock->link= NULL;
+ MEM_freeN(link);
+}
+
+
+bNodeTree *ntreeAddTree(int type)
+{
+ bNodeTree *ntree= MEM_callocN(sizeof(bNodeTree), "new node tree");
+ ntree->type= type;
- BLI_strncpy(sock->name, name, NODE_MAXSTR);
- sock->limit= limit;
- sock->type= type;
- if(where==SOCK_IN)
- BLI_addtail(&node->inputs, sock);
- else
- BLI_addtail(&node->outputs, sock);
-
- return sock;
+ ntreeInitTypes(ntree);
+ return ntree;
}
/* ************** Free stuff ********** */
@@ -125,8 +297,7 @@ static void node_unlink_node(bNodeTree *ntree, bNode *node)
break;
}
if(sock) {
- BLI_remlink(&ntree->links, link);
- MEM_freeN(link);
+ nodeRemLink(ntree, link);
}
}
}
@@ -144,10 +315,18 @@ void nodeFreeNode(bNodeTree *ntree, bNode *node)
BLI_freelistN(&node->inputs);
BLI_freelistN(&node->outputs);
+ if(node->preview) {
+ if(node->preview->rect)
+ MEM_freeN(node->preview->rect);
+ MEM_freeN(node->preview);
+ }
+ if(node->storage)
+ MEM_freeN(node->storage);
+
MEM_freeN(node);
}
-void nodeFreeTree(bNodeTree *ntree)
+void ntreeFreeTree(bNodeTree *ntree)
{
bNode *node, *next;
@@ -156,12 +335,64 @@ void nodeFreeTree(bNodeTree *ntree)
nodeFreeNode(NULL, node); /* NULL -> no unlinking needed */
}
BLI_freelistN(&ntree->links);
- BLI_freelistN(&ntree->inputs);
- BLI_freelistN(&ntree->outputs);
MEM_freeN(ntree);
}
+bNodeTree *ntreeCopyTree(bNodeTree *ntree, int internal_select)
+{
+ bNodeTree *newtree;
+ bNode *node, *nnode, *last;
+ bNodeLink *link, *nlink;
+ bNodeSocket *sock;
+ int a;
+
+ if(ntree==NULL) return NULL;
+
+ if(internal_select==0) {
+ newtree= MEM_dupallocN(ntree);
+ newtree->nodes.first= newtree->nodes.last= NULL;
+ newtree->links.first= newtree->links.last= NULL;
+ }
+ else
+ newtree= ntree;
+
+ last= ntree->nodes.last;
+ for(node= ntree->nodes.first; node; node= node->next) {
+
+ node->new= NULL;
+ if(internal_select==0 || (node->flag & NODE_SELECT)) {
+ nnode= nodeCopyNode(newtree, node); /* sets node->new */
+ if(internal_select) {
+ node->flag &= ~NODE_SELECT;
+ nnode->flag |= NODE_SELECT;
+ }
+ node->flag &= ~NODE_ACTIVE;
+ }
+ if(node==last) break;
+ }
+
+ /* check for copying links */
+ for(link= ntree->links.first; link; link= link->next) {
+ if(link->fromnode->new && link->tonode->new) {
+ nlink= nodeAddLink(newtree, link->fromnode->new, NULL, link->tonode->new, NULL);
+ /* sockets were copied in order */
+ for(a=0, sock= link->fromnode->outputs.first; sock; sock= sock->next, a++) {
+ if(sock==link->fromsock)
+ break;
+ }
+ nlink->fromsock= BLI_findlink(&link->fromnode->new->outputs, a);
+
+ for(a=0, sock= link->tonode->inputs.first; sock; sock= sock->next, a++) {
+ if(sock==link->tosock)
+ break;
+ }
+ nlink->tosock= BLI_findlink(&link->tonode->new->inputs, a);
+ }
+ }
+ return newtree;
+}
+
/* ************ find stuff *************** */
bNodeLink *nodeFindLink(bNodeTree *ntree, bNodeSocket *from, bNodeSocket *to)
@@ -189,6 +420,31 @@ int nodeCountSocketLinks(bNodeTree *ntree, bNodeSocket *sock)
return tot;
}
+bNode *nodeGetActive(bNodeTree *ntree)
+{
+ bNode *node;
+
+ if(ntree==NULL) return NULL;
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ if(node->flag & NODE_ACTIVE)
+ break;
+ return node;
+}
+
+bNode *nodeGetActiveID(bNodeTree *ntree, short idtype)
+{
+ bNode *node;
+
+ if(ntree==NULL) return NULL;
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ if(node->id && GS(node->id->name)==idtype)
+ if(node->flag & NODE_ACTIVE_ID)
+ break;
+ return node;
+}
+
/* ************** dependency stuff *********** */
/* node is guaranteed to be not checked before */
@@ -220,7 +476,7 @@ static int node_recurs_check(bNode *node, bNode ***nsort, int level)
return 0xFFF;
}
-void nodeSolveOrder(bNodeTree *ntree)
+void ntreeSolveOrder(bNodeTree *ntree)
{
bNode *node, **nodesort, **nsort;
bNodeSocket *sock;
@@ -266,78 +522,164 @@ void nodeSolveOrder(bNodeTree *ntree)
MEM_freeN(nodesort);
+ /* find the active outputs, tree type dependant, might become handler */
+ if(ntree->type==NTREE_SHADER) {
+ /* shader nodes only accepts one output */
+ int output= 0;
+
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->typeinfo->nclass==NODE_CLASS_OUTPUT) {
+ if(output==0)
+ node->flag |= NODE_DO_OUTPUT;
+ else
+ node->flag &= ~NODE_DO_OUTPUT;
+ output= 1;
+ }
+ }
+ }
+
+ /* here we could recursively set which nodes have to be done,
+ might be different for editor or for "real" use... */
+
+
+
}
+/* *************** preview *********** */
+
+/* if node->preview, then we assume the rect to exist */
+
+static void nodeInitPreview(bNode *node, int xsize, int ysize)
+{
+ /* signal we don't do anything, preview writing is protected */
+ if(xsize==0 || ysize==0)
+ return;
+
+ /* sanity checks & initialize */
+ if(node->preview) {
+ if(node->preview->xsize!=xsize && node->preview->ysize!=ysize) {
+ MEM_freeN(node->preview->rect);
+ node->preview->rect= NULL;
+ }
+ }
+
+ if(node->preview==NULL) {
+ node->preview= MEM_callocN(sizeof(bNodePreview), "node preview");
+ }
+ if(node->preview->rect==NULL) {
+ node->preview->rect= MEM_callocN(4*xsize + xsize*ysize*sizeof(float)*4, "node preview rect");
+ node->preview->xsize= xsize;
+ node->preview->ysize= ysize;
+ }
+}
+
+void nodeAddToPreview(bNode *node, float *col, int x, int y)
+{
+ bNodePreview *preview= node->preview;
+ if(preview) {
+ if(x>=0 && y>=0) {
+ if(x<preview->xsize && y<preview->ysize) {
+ float *tar= preview->rect+ 4*((preview->xsize*y) + x);
+ QUATCOPY(tar, col);
+ }
+ else printf("prv out bound x y %d %d\n", x, y);
+ }
+ else printf("prv out bound x y %d %d\n", x, y);
+ }
+}
+
+
+
/* ******************* executing ************* */
-void nodeBeginExecTree(bNodeTree *ntree)
+void ntreeBeginExecTree(bNodeTree *ntree, int xsize, int ysize)
{
bNode *node;
bNodeSocket *sock;
int index= 0;
- if((ntree->init & NTREE_EXEC_SET)==0) {
- for(node= ntree->nodes.first; node; node= node->next) {
- if(ntree->type==NTREE_SHADER)
- node_shader_set_execfunc(node);
- }
- ntree->init |= NTREE_EXEC_SET;
- }
+ if((ntree->init & NTREE_TYPE_INIT)==0)
+ ntreeInitTypes(ntree);
- /* create indices for stack */
+ /* create indices for stack, check preview */
for(node= ntree->nodes.first; node; node= node->next) {
-
for(sock= node->outputs.first; sock; sock= sock->next) {
sock->stack_index= index++;
}
+
+ if(node->typeinfo->flag & NODE_PREVIEW) /* hrms, check for closed nodes? */
+ nodeInitPreview(node, xsize, ysize);
+
}
if(index) {
- ntree->stack= MEM_callocN(index*sizeof(bNodeStack), "node stack");
+ bNodeStack *ns;
+ int a;
+
+ ns=ntree->stack= MEM_callocN(index*sizeof(bNodeStack), "node stack");
+ for(a=0; a<index; a++, ns++) ns->hasinput= 1;
}
+
+ ntree->init |= NTREE_EXEC_INIT;
}
-void nodeEndExecTree(bNodeTree *ntree)
+void ntreeEndExecTree(bNodeTree *ntree)
{
if(ntree->stack) {
MEM_freeN(ntree->stack);
ntree->stack= NULL;
}
+
+ ntree->init &= ~NTREE_EXEC_INIT;
}
-static void node_get_stack(bNode *node, bNodeStack *stack, bNodeStack **spp)
+static void node_get_stack(bNode *node, bNodeStack *stack, bNodeStack **in, bNodeStack **out)
{
- static bNodeStack empty= {{1.0f, 1.0f, 1.0f, 1.0f}, NULL};
bNodeSocket *sock;
/* build pointer stack */
for(sock= node->inputs.first; sock; sock= sock->next) {
if(sock->link)
- *(spp++)= stack + sock->link->fromsock->stack_index;
+ *(in++)= stack + sock->link->fromsock->stack_index;
else
- *(spp++)= &empty; /* input is not written into */
+ *(in++)= &sock->ns;
}
for(sock= node->outputs.first; sock; sock= sock->next) {
- *(spp++)= stack + sock->stack_index;
+ *(out++)= stack + sock->stack_index;
}
}
/* nodes are presorted, so exec is in order of list */
-void nodeExecTree(bNodeTree *ntree)
+void ntreeExecTree(bNodeTree *ntree)
{
bNode *node;
- bNodeStack *ns[MAX_SOCKET]; /* arbitrary... watch this */
+ bNodeStack *nsin[MAX_SOCKET]; /* arbitrary... watch this */
+ bNodeStack *nsout[MAX_SOCKET]; /* arbitrary... watch this */
- nodeBeginExecTree(ntree);
+ /* only when initialized */
+ if(ntree->init & NTREE_EXEC_INIT) {
- for(node= ntree->nodes.first; node; node= node->next) {
- if(node->execfunc) {
- node_get_stack(node, ntree->stack, ns);
- node->execfunc(node, ns);
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->typeinfo->execfunc) {
+ node_get_stack(node, ntree->stack, nsin, nsout);
+ node->typeinfo->execfunc(ntree->data, node, nsin, nsout);
+ }
}
}
-
- nodeEndExecTree(ntree);
}
+/* clear one pixel in all the preview images */
+void ntreeClearPixelTree(bNodeTree *ntree, int x, int y)
+{
+ bNode *node;
+ float vec[4]= {0.0f, 0.0f, 0.0f, 0.0f};
+
+ /* only when initialized */
+ if(ntree->init & NTREE_EXEC_INIT) {
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->preview)
+ nodeAddToPreview(node, vec, x, y);
+ }
+ }
+}
diff --git a/source/blender/blenkernel/intern/node_shaders.c b/source/blender/blenkernel/intern/node_shaders.c
index 74728abac9c..f2ece280d58 100644
--- a/source/blender/blenkernel/intern/node_shaders.c
+++ b/source/blender/blenkernel/intern/node_shaders.c
@@ -30,10 +30,13 @@
#include <stdlib.h>
#include "DNA_ID.h"
+#include "DNA_material_types.h"
#include "DNA_node_types.h"
+#include "DNA_texture_types.h"
#include "BKE_blender.h"
#include "BKE_node.h"
+#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BLI_arithb.h"
@@ -41,186 +44,443 @@
#include "MEM_guardedalloc.h"
-/* **************** testnode ************ */
+#include "render.h" /* <- shadeinput/output */
-static void blendcolor(float *col1, float *col2, float *output, float fac)
+/* ********* exec data struct, remains internal *********** */
+
+typedef struct ShaderCallData {
+ ShadeInput *shi;
+ ShadeResult *shr;
+} ShaderCallData;
+
+
+/* **************** call to switch lamploop for material node ************ */
+
+static void (*node_shader_lamp_loop)(ShadeInput *, ShadeResult *);
+
+void set_node_shader_lamp_loop(void (*lamp_loop_func)(ShadeInput *, ShadeResult *))
{
- output[0]= (1.0f-fac)*col1[0] + (fac)*col2[0];
- output[1]= (1.0f-fac)*col1[1] + (fac)*col2[1];
- output[2]= (1.0f-fac)*col1[2] + (fac)*col2[2];
+ node_shader_lamp_loop= lamp_loop_func;
}
-static void node_shader_exec_test(bNode *node, bNodeStack **ns)
+/* **************** input node ************ */
+
+static void node_shader_exec_input(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
-
- blendcolor(ns[0]->vec, ns[1]->vec, ns[2]->vec, 0.5);
+ if(data) {
+ ShadeResult *shr= ((ShaderCallData *)data)->shr;
+ ShadeInput *shi= ((ShaderCallData *)data)->shi;
+ float col[4];
+
+ /* stack order output sockets: color, alpha, normal */
+ VecAddf(col, shr->diff, shr->spec);
+ col[3]= shr->alpha;
+
+ VECCOPY(out[0]->vec, col);
+ out[1]->vec[0]= shr->alpha;
+ VECCOPY(out[2]->vec, shi->vn);
+
+ if(shi->do_preview)
+ nodeAddToPreview(node, col, shi->xs, shi->ys);
+
+ }
+}
-// printvecf(node->name, ns[2]->vec);
+
+/* **************** output node ************ */
+
+static void node_shader_exec_output(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ if(data) {
+ ShadeInput *shi= ((ShaderCallData *)data)->shi;
+ float col[4];
+
+ /* stack order input sockets: col, alpha, normal */
+ VECCOPY(col, in[0]->vec);
+ col[3]= in[1]->vec[0];
+
+ if(shi->do_preview) {
+ nodeAddToPreview(node, col, shi->xs, shi->ys);
+ node->lasty= shi->ys;
+ }
+
+ if(node->flag & NODE_DO_OUTPUT) {
+ ShadeResult *shr= ((ShaderCallData *)data)->shr;
+
+ VECCOPY(shr->diff, col);
+ col[0]= col[1]= col[2]= 0.0f;
+ VECCOPY(shr->spec, col);
+ shr->alpha= col[3];
+
+ // VECCOPY(shr->nor, in[3]->vec);
+ }
+ }
}
-static bNode *node_shader_add_test(bNodeTree *ntree)
+/* **************** material node ************ */
+
+static void node_shader_exec_material(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- bNode *node= nodeAddNode(ntree, "TestNode");
- static int tot= 0;
+ if(data && node->id) {
+ ShadeResult shrnode;
+ ShadeInput *shi;
+ float col[4], *nor;
- sprintf(node->name, "Testnode%d", tot++);
- node->type= SH_NODE_TEST;
- node->width= 80.0f;
-
- /* add sockets */
- nodeAddSocket(node, SOCK_RGBA, SOCK_IN, 1, "Col");
- nodeAddSocket(node, SOCK_RGBA, SOCK_IN, 1, "Spec");
- nodeAddSocket(node, SOCK_RGBA, SOCK_OUT, 0xFFF, "Diffuse");
-
- return node;
+ shi= ((ShaderCallData *)data)->shi;
+
+ shi->mat= (Material *)node->id;
+
+ /* retrieve normal */
+ if(in[0]->hasinput)
+ nor= in[0]->vec;
+ else
+ nor= shi->vno;
+
+ if(node->custom1 & SH_NODE_MAT_NEG) {
+ shi->vn[0]= -nor[0];
+ shi->vn[1]= -nor[1];
+ shi->vn[2]= -nor[2];
+ }
+ else {
+ VECCOPY(shi->vn, nor);
+ }
+
+ node_shader_lamp_loop(shi, &shrnode);
+
+ if(node->custom1 & SH_NODE_MAT_DIFF) {
+ VECCOPY(col, shrnode.diff);
+ if(node->custom1 & SH_NODE_MAT_SPEC) {
+ VecAddf(col, col, shrnode.spec);
+ }
+ }
+ else if(node->custom1 & SH_NODE_MAT_SPEC) {
+ VECCOPY(col, shrnode.spec);
+ }
+ else
+ col[0]= col[1]= col[2]= 0.0f;
+
+ col[3]= shrnode.alpha;
+
+ if(shi->do_preview)
+ nodeAddToPreview(node, col, shi->xs, shi->ys);
+
+ /* stack order output: color, alpha, normal */
+ VECCOPY(out[0]->vec, col);
+ out[1]->vec[0]= shrnode.alpha;
+
+ if(node->custom1 & SH_NODE_MAT_NEG) {
+ shi->vn[0]= -shi->vn[0];
+ shi->vn[1]= -shi->vn[1];
+ shi->vn[2]= -shi->vn[2];
+ }
+ VECCOPY(out[2]->vec, shi->vn);
+ }
}
-/* **************** value node ************ */
+/* **************** texture node ************ */
-static void node_shader_exec_value(bNode *node, bNodeStack **ns)
+static void node_shader_exec_texture(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- /* no input node! */
- ns[0]->vec[0]= node->ns.vec[0];
-// printf("%s %f\n", node->name, ns[0]->vec[0]);
+ if(data && node->id) {
+ ShadeInput *shi;
+
+ shi= ((ShaderCallData *)data)->shi;
+
+ multitex_ext((Tex *)node->id, shi->co, out[0]->vec, out[1]->vec, out[1]->vec+1, out[1]->vec+2, out[1]->vec+3);
+
+ if(shi->do_preview)
+ nodeAddToPreview(node, out[1]->vec, shi->xs, shi->ys);
+
+ }
}
-static bNode *node_shader_add_value(bNodeTree *ntree)
+/* **************** value node ************ */
+
+static void node_shader_exec_value(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- bNode *node= nodeAddNode(ntree, "Value");
-
- node->type= SH_NODE_VALUE;
- node->width= 80.0f;
- node->prv_h= 20.0f;
+ bNodeSocket *sock= node->outputs.first;
- /* add sockets */
- nodeAddSocket(node, SOCK_VALUE, SOCK_OUT, 0xFFF, "");
-
- return node;
+ out[0]->vec[0]= sock->ns.vec[0];
}
/* **************** rgba node ************ */
-static void node_shader_exec_rgb(bNode *node, bNodeStack **ns)
+static void node_shader_exec_rgb(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- /* no input node! */
- QUATCOPY(ns[0]->vec, node->ns.vec);
+ bNodeSocket *sock= node->outputs.first;
-// printvecf(node->name, ns[0]->vec);
+ VECCOPY(out[0]->vec, sock->ns.vec);
}
+
+
+/* **************** mix rgb node ************ */
-static bNode *node_shader_add_rgb(bNodeTree *ntree)
+static void node_shader_exec_mix_rgb(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- bNode *node= nodeAddNode(ntree, "RGB");
+ /* stack order in: fac, col1, col2 */
+ /* stack order out: col */
+ float col[3];
- node->type= SH_NODE_RGB;
- node->width= 100.0f;
- node->prv_h= 100.0f;
- node->ns.vec[3]= 1.0f; /* alpha init */
-
- /* add sockets */
- nodeAddSocket(node, SOCK_RGBA, SOCK_OUT, 0xFFF, "");
+ VECCOPY(col, in[1]->vec);
+ ramp_blend(node->custom1, col, col+1, col+2, in[0]->vec[0], in[2]->vec);
+ VECCOPY(out[0]->vec, col);
+}
+
+/* **************** val to rgb node ************ */
+
+static void node_shader_exec_valtorgb(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
+{
+ /* stack order in: fac */
+ /* stack order out: col, alpha */
- return node;
+ if(node->storage) {
+ do_colorband(node->storage, in[0]->vec[0], out[0]->vec);
+ out[1]->vec[0]= out[0]->vec[3];
+ }
}
-/* **************** mix rgba node ************ */
+/* **************** rgb to bw node ************ */
-static void node_shader_exec_mix_rgb(bNode *node, bNodeStack **ns)
+static void node_shader_exec_rgbtobw(void *data, bNode *node, bNodeStack **in, bNodeStack **out)
{
- /* stack order is fac, col1, col2, out */
- blendcolor(ns[1]->vec, ns[2]->vec, ns[3]->vec, ns[0]->vec[0]);
+ /* stack order out: bw */
+ /* stack order in: col */
+
+ out[0]->vec[0]= in[0]->vec[0]*0.35f + in[0]->vec[1]*0.45f + in[0]->vec[2]*0.2f;
}
-static bNode *node_shader_add_mix_rgb(bNodeTree *ntree)
+
+/* ******************* execute ************ */
+
+void ntreeShaderExecTree(bNodeTree *ntree, ShadeInput *shi, ShadeResult *shr)
{
- bNode *node= nodeAddNode(ntree, "Mix RGB");
+ ShaderCallData scd;
- node->type= SH_NODE_MIX_RGB;
- node->width= 80.0f;
- node->prv_h= 0.0f;
+ /* convert caller data to struct */
+ scd.shi= shi;
+ scd.shr= shr;
+ ntree->data= &scd;
- /* add sockets */
- nodeAddSocket(node, SOCK_VALUE, SOCK_IN, 1, "Fac");
- nodeAddSocket(node, SOCK_RGBA, SOCK_IN, 1, "Color1");
- nodeAddSocket(node, SOCK_RGBA, SOCK_IN, 1, "Color2");
- nodeAddSocket(node, SOCK_RGBA, SOCK_OUT, 0xFFF, "Color");
+ ntreeExecTree(ntree);
- return node;
}
-/* **************** show rgba node ************ */
+/* ******************************************************** */
+/* ********* Shader Node type definitions ***************** */
+/* ******************************************************** */
-static void node_shader_exec_show_rgb(bNode *node, bNodeStack **ns)
-{
- /* only input node! */
- QUATCOPY(node->ns.vec, ns[0]->vec);
+/* SocketType syntax:
+ socket type, max connections (0 is no limit), name, 4 values for default, 2 values for range */
+
+/* Verification rule: If name changes, a saved socket and its links will be removed! Type changes are OK */
+
+/* *************** INPUT ********************* */
+static bNodeSocketType sh_node_input_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 0, "Alpha", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_VECTOR, 0, "Normal", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_input= {
+ /* type code */ SH_NODE_INPUT,
+ /* name */ "Input",
+ /* width+range */ 80, 60, 200,
+ /* class+opts */ NODE_CLASS_INPUT, NODE_PREVIEW,
+ /* input sock */ NULL,
+ /* output sock */ sh_node_input_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_input,
-// printvecf(node->name, ns[0]->vec);
-}
+};
-static bNode *node_shader_add_show_rgb(bNodeTree *ntree)
-{
- bNode *node= nodeAddNode(ntree, "Show RGB");
+/* **************** OUTPUT ******************** */
+static bNodeSocketType sh_node_output_in[]= {
+ { SOCK_RGBA, 1, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 1, "Alpha", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_VECTOR, 1, "Normal", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_output= {
+ /* type code */ SH_NODE_OUTPUT,
+ /* name */ "Output",
+ /* width+range */ 80, 60, 200,
+ /* class+opts */ NODE_CLASS_OUTPUT, NODE_PREVIEW,
+ /* input sock */ sh_node_output_in,
+ /* output sock */ NULL,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_output,
- node->type= SH_NODE_SHOW_RGB;
- node->width= 80.0f;
- node->prv_h= 0.0f;
- node->ns.vec[3]= 1.0f; /* alpha init */
+};
+
+/* **************** MATERIAL ******************** */
+static bNodeSocketType sh_node_material_in[]= {
+ { SOCK_VECTOR, 1, "Normal", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeSocketType sh_node_material_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 0, "Alpha", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_VECTOR, 0, "Normal", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_material= {
+ /* type code */ SH_NODE_MATERIAL,
+ /* name */ "Material",
+ /* width+range */ 120, 60, 200,
+ /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS|NODE_PREVIEW,
+ /* input sock */ sh_node_material_in,
+ /* output sock */ sh_node_material_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_material,
- /* add sockets */
- nodeAddSocket(node, SOCK_RGBA, SOCK_IN, 1, "");
+};
+
+/* **************** TEXTURE ******************** */
+static bNodeSocketType sh_node_texture_out[]= {
+ { SOCK_VALUE, 0, "Value", 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_RGBA , 0, "Color", 1.0f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VECTOR, 0, "Normal", 0.0f, 0.0f, 0.0f, 1.0f, -1.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_texture= {
+ /* type code */ SH_NODE_TEXTURE,
+ /* name */ "Texture",
+ /* width+range */ 120, 60, 200,
+ /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS|NODE_PREVIEW,
+ /* input sock */ NULL,
+ /* output sock */ sh_node_texture_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_texture,
- return node;
-}
+};
+
+/* **************** VALUE ******************** */
+static bNodeSocketType sh_node_value_out[]= {
+ { SOCK_VALUE, 0, "Value", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeType sh_node_value= {
+ /* type code */ SH_NODE_VALUE,
+ /* name */ "Value",
+ /* width+range */ 80, 40, 120,
+ /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS,
+ /* input sock */ NULL,
+ /* output sock */ sh_node_value_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_value,
+
+};
-/* **************** API for add ************** */
+/* **************** RGB ******************** */
+static bNodeSocketType sh_node_rgb_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
-bNode *node_shader_add(bNodeTree *ntree, int type)
-{
- bNode *node= NULL;
-
- switch(type) {
- case SH_NODE_TEST:
- node= node_shader_add_test(ntree);
- break;
- case SH_NODE_VALUE:
- node= node_shader_add_value(ntree);
- break;
- case SH_NODE_RGB:
- node= node_shader_add_rgb(ntree);
- break;
- case SH_NODE_SHOW_RGB:
- node= node_shader_add_show_rgb(ntree);
- break;
- case SH_NODE_MIX_RGB:
- node= node_shader_add_mix_rgb(ntree);
- break;
- }
- return node;
-}
+static bNodeType sh_node_rgb= {
+ /* type code */ SH_NODE_RGB,
+ /* name */ "RGB",
+ /* width+range */ 100, 60, 140,
+ /* class+opts */ NODE_CLASS_GENERATOR, NODE_OPTIONS,
+ /* input sock */ NULL,
+ /* output sock */ sh_node_rgb_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_rgb,
+
+};
-/* ******************* set the callbacks, called from UI, loader ***** */
+/* **************** MIX RGB ******************** */
+static bNodeSocketType sh_node_mix_rgb_in[]= {
+ { SOCK_VALUE, 1, "Fac", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { SOCK_RGBA, 1, "Color1", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_RGBA, 1, "Color2", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeSocketType sh_node_mix_rgb_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_mix_rgb= {
+ /* type code */ SH_NODE_MIX_RGB,
+ /* name */ "Mix",
+ /* width+range */ 80, 40, 120,
+ /* class+opts */ NODE_CLASS_OPERATOR, NODE_OPTIONS,
+ /* input sock */ sh_node_mix_rgb_in,
+ /* output sock */ sh_node_mix_rgb_out,
+ /* storage */ "",
+ /* execfunc */ node_shader_exec_mix_rgb,
+
+};
+
+
+/* **************** VALTORGB ******************** */
+static bNodeSocketType sh_node_valtorgb_in[]= {
+ { SOCK_VALUE, 1, "Fac", 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeSocketType sh_node_valtorgb_out[]= {
+ { SOCK_RGBA, 0, "Color", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { SOCK_VALUE, 0, "Alpha", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_valtorgb= {
+ /* type code */ SH_NODE_VALTORGB,
+ /* name */ "ColorRamp",
+ /* width+range */ 240, 200, 300,
+ /* class+opts */ NODE_CLASS_OPERATOR, NODE_OPTIONS,
+ /* input sock */ sh_node_valtorgb_in,
+ /* output sock */ sh_node_valtorgb_out,
+ /* storage */ "ColorBand",
+ /* execfunc */ node_shader_exec_valtorgb,
+
+};
+
+
+/* **************** RGBTOBW ******************** */
+static bNodeSocketType sh_node_rgbtobw_in[]= {
+ { SOCK_RGBA, 1, "Color", 0.5f, 0.5f, 0.5f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+static bNodeSocketType sh_node_rgbtobw_out[]= {
+ { SOCK_VALUE, 0, "Val", 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f},
+ { -1, 0, "" }
+};
+
+static bNodeType sh_node_rgbtobw= {
+ /* type code */ SH_NODE_RGBTOBW,
+ /* name */ "RGB to BW",
+ /* width+range */ 80, 40, 120,
+ /* class+opts */ NODE_CLASS_OPERATOR, 0,
+ /* input sock */ sh_node_rgbtobw_in,
+ /* output sock */ sh_node_rgbtobw_out,
+ /* storage */ "ColorBand",
+ /* execfunc */ node_shader_exec_rgbtobw,
+
+};
+
+
+/* ****************** types array for all shaders ****************** */
+
+bNodeType *node_all_shaders[]= {
+ &sh_node_input,
+ &sh_node_output,
+ &sh_node_material,
+ &sh_node_value,
+ &sh_node_rgb,
+ &sh_node_mix_rgb,
+ &sh_node_valtorgb,
+ &sh_node_rgbtobw,
+ &sh_node_texture,
+ NULL
+};
-void node_shader_set_execfunc(bNode *node)
-{
- switch(node->type) {
- case SH_NODE_TEST:
- node->execfunc= node_shader_exec_test;
- break;
- case SH_NODE_VALUE:
- node->execfunc= node_shader_exec_value;
- break;
- case SH_NODE_RGB:
- node->execfunc= node_shader_exec_rgb;
- break;
- case SH_NODE_SHOW_RGB:
- node->execfunc= node_shader_exec_show_rgb;
- break;
- case SH_NODE_MIX_RGB:
- node->execfunc= node_shader_exec_mix_rgb;
- break;
- }
-}
diff --git a/source/blender/blenkernel/intern/texture.c b/source/blender/blenkernel/intern/texture.c
index 7873340f7d8..123298c723a 100644
--- a/source/blender/blenkernel/intern/texture.c
+++ b/source/blender/blenkernel/intern/texture.c
@@ -199,25 +199,39 @@ void free_plugin_tex(PluginTex *pit)
/* ****************** COLORBAND ******************* */
-ColorBand *add_colorband()
+ColorBand *add_colorband(int rangetype)
{
ColorBand *coba;
int a;
coba= MEM_callocN( sizeof(ColorBand), "colorband");
- coba->data[0].r= 0.0;
- coba->data[0].g= 0.0;
- coba->data[0].b= 0.0;
- coba->data[0].a= 0.0;
coba->data[0].pos= 0.0;
-
- coba->data[1].r= 0.0;
- coba->data[1].g= 1.0;
- coba->data[1].b= 1.0;
- coba->data[1].a= 1.0;
coba->data[1].pos= 1.0;
+ if(rangetype==0) {
+ coba->data[0].r= 0.0;
+ coba->data[0].g= 0.0;
+ coba->data[0].b= 0.0;
+ coba->data[0].a= 0.0;
+
+ coba->data[1].r= 0.0;
+ coba->data[1].g= 1.0;
+ coba->data[1].b= 1.0;
+ coba->data[1].a= 1.0;
+ }
+ else {
+ coba->data[0].r= 0.0;
+ coba->data[0].g= 0.0;
+ coba->data[0].b= 0.0;
+ coba->data[0].a= 1.0;
+
+ coba->data[1].r= 1.0;
+ coba->data[1].g= 1.0;
+ coba->data[1].b= 1.0;
+ coba->data[1].a= 1.0;
+ }
+
for(a=2; a<MAXCOLORBAND; a++) {
coba->data[a].r= 0.5;
coba->data[a].g= 0.5;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index bf6928b7b20..295ebc15a68 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -76,6 +76,7 @@
#include "DNA_meshdata_types.h"
#include "DNA_modifier_types.h"
#include "DNA_nla_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_object_fluidsim.h" // NT
@@ -1205,6 +1206,61 @@ static void test_pointer_array(FileData *fd, void **mat)
}
}
+/* ************ READ NODE TREE *************** */
+
+/* ntree is not NULL */
+static void lib_link_nodetree(FileData *fd, ID *id, bNodeTree *ntree)
+{
+ bNode *node;
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ node->id= newlibadr_us(fd, id->lib, node->id);
+}
+
+static bNodeTree *direct_link_nodetree(FileData *fd, bNodeTree *ntree)
+{
+ /* note: writing and reading goes in sync, for speed */
+ if(ntree) {
+ ntree= newdataadr(fd, ntree);
+
+ if(ntree) {
+ bNode *node;
+ bNodeSocket *sock;
+ bNodeLink *link;
+
+ ntree->init= 0; /* to set callbacks */
+ ntree->data= NULL; /* safety only */
+
+ link_list(fd, &ntree->nodes);
+ for(node= ntree->nodes.first; node; node= node->next) {
+ node->storage= newdataadr(fd, node->storage);
+ link_list(fd, &node->inputs);
+ link_list(fd, &node->outputs);
+ }
+ link_list(fd, &ntree->links);
+
+ /* and we connect the rest */
+ for(node= ntree->nodes.first; node; node= node->next) {
+ node->preview= NULL;
+ node->lasty= 0;
+ for(sock= node->inputs.first; sock; sock= sock->next)
+ sock->link= newdataadr(fd, sock->link);
+ }
+ for(link= ntree->links.first; link; link= link->next) {
+ link->fromnode= newdataadr(fd, link->fromnode);
+ link->tonode= newdataadr(fd, link->tonode);
+ link->fromsock= newdataadr(fd, link->fromsock);
+ link->tosock= newdataadr(fd, link->tosock);
+ }
+ /* right after read file, the save-undo will need it */
+ /* verify also does a full type checking. This is relative slow... so we
+ might move this later to the do_versions, and put ntreeInitTypes() only here */
+ ntreeVerifyTypes(ntree);
+ }
+ }
+ return ntree;
+}
+
/* ************ READ PACKEDFILE *************** */
static PackedFile *direct_link_packedfile(FileData *fd, PackedFile *oldpf)
@@ -1993,7 +2049,7 @@ static void lib_link_material(FileData *fd, Main *main)
ma->ipo= newlibadr_us(fd, ma->id.lib, ma->ipo);
ma->group= newlibadr_us(fd, ma->id.lib, ma->group);
-
+
for(a=0; a<MAX_MTEX; a++) {
mtex= ma->mtex[a];
if(mtex) {
@@ -2005,7 +2061,10 @@ static void lib_link_material(FileData *fd, Main *main)
for (ml=ma->layers.first; ml; ml=ml->next)
ml->mat= newlibadr_us(fd, ma->id.lib, ml->mat);
-
+
+ if(ma->nodetree)
+ lib_link_nodetree(fd, &ma->id, ma->nodetree);
+
ma->id.flag -= LIB_NEEDLINK;
}
ma= ma->id.next;
@@ -2026,7 +2085,8 @@ static void direct_link_material(FileData *fd, Material *ma)
direct_link_scriptlink(fd, &ma->scriptlink);
link_list(fd, &ma->layers);
-
+
+ ma->nodetree= direct_link_nodetree(fd, ma->nodetree);
}
/* ************ READ MESH ***************** */
@@ -2994,6 +3054,13 @@ void lib_link_screen_restore(Main *newmain, Scene *curscene)
ssound->sound= restore_pointer_by_name(newmain, (ID *)ssound->sound, 1);
}
+ else if(sl->spacetype==SPACE_NODE) {
+ SpaceNode *snode= (SpaceNode *)sl;
+
+ snode->nodetree= NULL;
+ snode->block= NULL;
+ snode->flag |= SNODE_DO_PREVIEW;
+ }
}
sa= sa->next;
}
@@ -3088,6 +3155,7 @@ static void direct_link_screen(FileData *fd, bScreen *sc)
SpaceNode *snode= (SpaceNode *)sl;
snode->nodetree= NULL;
snode->block= NULL;
+ snode->flag |= SNODE_DO_PREVIEW;
}
}
@@ -5115,11 +5183,8 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
ma->strand_sta= ma->strand_end= 1.0f;
ma->mode |= MA_TANGENT_STR;
}
- /* remove this test before 2.40 too! pad is set to denote check was done */
- if(ma->pad==0) {
- if(ma->mode & MA_TRACEBLE) ma->mode |= MA_SHADBUF;
- ma->pad= 1;
- }
+ if(ma->mode & MA_TRACEBLE) ma->mode |= MA_SHADBUF;
+
/* orange stuff, so should be done for 2.40 too */
if(ma->layers.first==NULL) {
ma->ml_flag= ML_RENDER;
@@ -5379,6 +5444,13 @@ static void expand_material(FileData *fd, Main *mainvar, Material *ma)
if(ml->mat)
expand_doit(fd, mainvar, ml->mat);
}
+
+ if(ma->nodetree) {
+ bNode *node;
+ for(node= ma->nodetree->nodes.first; node; node= node->next)
+ if(node->id)
+ expand_doit(fd, mainvar, node->id);
+ }
}
static void expand_lamp(FileData *fd, Main *mainvar, Lamp *la)
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index 23d9d04ce3b..704215aaa7e 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -124,6 +124,7 @@ Important to know is that 'streaming' has been added to files, for Blender Publi
#include "DNA_material_types.h"
#include "DNA_modifier_types.h"
#include "DNA_nla_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_object_force.h"
#include "DNA_oops_types.h"
@@ -153,6 +154,7 @@ Important to know is that 'streaming' has been added to files, for Blender Publi
#include "BKE_global.h" // for G
#include "BKE_library.h" // for set_listbasepointers
#include "BKE_main.h" // G.main
+#include "BKE_node.h"
#include "BKE_packedFile.h" // for packAll
#include "BKE_screen.h" // for waitcursor
#include "BKE_scene.h" // for do_seq
@@ -317,7 +319,7 @@ static void writestruct(WriteData *wd, int filecode, char *structname, int nr, v
BHead bh;
short *sp;
- if(adr==0 || nr==0) return;
+ if(adr==NULL || nr==0) return;
/* init BHead */
bh.code= filecode;
@@ -326,7 +328,7 @@ static void writestruct(WriteData *wd, int filecode, char *structname, int nr, v
bh.SDNAnr= dna_findstruct_nr(wd->sdna, structname);
if(bh.SDNAnr== -1) {
- printf("error: can't find SDNA code %s\n", structname);
+ printf("error: can't find SDNA code <%s>\n", structname);
return;
}
sp= wd->sdna->structs[bh.SDNAnr];
@@ -360,6 +362,33 @@ static void writedata(WriteData *wd, int filecode, int len, void *adr) /* do not
if(len) mywrite(wd, adr, len);
}
+/* this is only direct data */
+static void write_nodetree(WriteData *wd, bNodeTree *ntree)
+{
+ bNode *node;
+ bNodeSocket *sock;
+ bNodeLink *link;
+
+ writestruct(wd, DATA, "bNodeTree", 1, ntree);
+
+ /* for link_list() speed, we write per list */
+
+ for(node= ntree->nodes.first; node; node= node->next)
+ writestruct(wd, DATA, "bNode", 1, node);
+
+ for(node= ntree->nodes.first; node; node= node->next) {
+ if(node->storage)
+ writestruct(wd, DATA, node->typeinfo->storagename, 1, node->storage);
+ for(sock= node->inputs.first; sock; sock= sock->next)
+ writestruct(wd, DATA, "bNodeSocket", 1, sock);
+ for(sock= node->outputs.first; sock; sock= sock->next)
+ writestruct(wd, DATA, "bNodeSocket", 1, sock);
+ }
+
+ for(link= ntree->links.first; link; link= link->next)
+ writestruct(wd, DATA, "bNodeLink", 1, link);
+}
+
static void write_scriptlink(WriteData *wd, ScriptLink *slink)
{
writedata(wd, DATA, sizeof(void *)*slink->totscript, slink->scripts);
@@ -1014,7 +1043,9 @@ static void write_materials(WriteData *wd, ListBase *idbase)
for (ml=ma->layers.first; ml; ml=ml->next)
writestruct(wd, DATA, "MaterialLayer", 1, ml);
-
+
+ if(ma->nodetree)
+ write_nodetree(wd, ma->nodetree);
}
ma= ma->id.next;
}
diff --git a/source/blender/include/BIF_glutil.h b/source/blender/include/BIF_glutil.h
index 43fa758d3cf..b585f91ec3e 100644
--- a/source/blender/include/BIF_glutil.h
+++ b/source/blender/include/BIF_glutil.h
@@ -125,7 +125,7 @@ void glaRasterPosSafe2f (float x, float y, float known_good_x, float known_good
* to use the glScissor functionality if images are to be drawn
* with an inset view matrix.
*/
-void glaDrawPixelsSafe (float x, float y, int img_w, int img_h, void *rect);
+void glaDrawPixelsSafe (float x, float y, int img_w, int img_h, int format, void *rect);
/**
* Functions like a limited glDrawPixels, but actually draws the
@@ -135,11 +135,11 @@ void glaDrawPixelsSafe (float x, float y, int img_w, int img_h, void *rect);
* pixel unpacking parameters are _not_ respected.
* @attention This routine makes many assumptions: the rect data
- * is expected to be in RGBA unsigned byte format, and the
+ * is expected to be in RGBA byte or float format, and the
* modelview and projection matrices are assumed to define a
* 1-to-1 mapping to screen space.
*/
-void glaDrawPixelsTex (float x, float y, int img_w, int img_h, void *rect);
+void glaDrawPixelsTex (float x, float y, int img_w, int img_h, int format, void *rect);
/* 2D Drawing Assistance */
diff --git a/source/blender/include/BIF_interface.h b/source/blender/include/BIF_interface.h
index 70a7de4a84c..9ddab3305c8 100644
--- a/source/blender/include/BIF_interface.h
+++ b/source/blender/include/BIF_interface.h
@@ -153,6 +153,7 @@ struct ScrArea;
#define PULLDOWN (27<<9)
#define ROUNDBOX (28<<9)
#define CHARTAB (29<<9)
+#define BUT_COLORBAND (30<<9)
#define BUTTYPE (31<<9)
diff --git a/source/blender/include/BIF_interface_icons.h b/source/blender/include/BIF_interface_icons.h
index 2ec14b53cf2..ba5a119df7e 100644
--- a/source/blender/include/BIF_interface_icons.h
+++ b/source/blender/include/BIF_interface_icons.h
@@ -47,8 +47,8 @@ void BIF_icons_init(int first_dyn_id);
int BIF_icon_get_width(int icon_id);
int BIF_icon_get_height(int icon_id);
void BIF_icon_set_aspect(int icon_id, float aspect);
-void BIF_icon_draw(int x, int y, int icon_id);
-void BIF_icon_draw_blended(int x, int y, int icon_id, int colorid, int shade);
+void BIF_icon_draw(float x, float y, int icon_id);
+void BIF_icon_draw_blended(float x, float y, int icon_id, int colorid, int shade);
void BIF_icons_free();
void BIF_icons_free_drawinfo(void *drawinfo);
diff --git a/source/blender/include/BIF_previewrender.h b/source/blender/include/BIF_previewrender.h
index cb8041832b5..b8ed73505f5 100644
--- a/source/blender/include/BIF_previewrender.h
+++ b/source/blender/include/BIF_previewrender.h
@@ -35,6 +35,8 @@ struct RenderInfo;
struct Image;
struct ScrArea;
+#define PREVIEW_RENDERSIZE 140
+
typedef void (*VectorDrawFunc)(int x, int y, int w, int h, float alpha);
/* stores rendered preview - is also used for icons */
@@ -45,22 +47,23 @@ typedef struct RenderInfo {
short cury;
} RenderInfo;
-/* Set the previewrect for drawing */
-void BIF_set_previewrect(int win, int xmin, int ymin, int xmax, int ymax, short pr_rectx, short pr_recty);
-void BIF_end_previewrect(void);
-
-void BIF_all_preview_changed(void);
-void BIF_preview_changed (struct SpaceButs *sbuts);
-void BIF_previewrender_buts (struct SpaceButs *sbuts);
/* Render the preview
- * a) into the ri->rect
- * b) draw it in the area using the block UIMat
- if doDraw is false, the preview is not drawn and the function is not dynamic,
- so no events are processed. Hopefully fast enough for 64x64 rendering or
- at least 32x32 */
-void BIF_previewrender (struct ID* id, struct RenderInfo *ri, struct ScrArea *area, int doDraw);
+pr_method:
+- PR_DRAW_RENDER: preview is rendered and drawn, as indicated by called context (buttons panel)
+- PR_ICON_RENDER: the preview is not drawn and the function is not dynamic,
+ so no events are processed. Hopefully fast enough for at least 32x32
+- PR_DO_RENDER: preview is rendered, not drawn, but events are processed for afterqueue,
+ in use for node editor now.
+*/
+
+#define PR_DRAW_RENDER 0
+#define PR_ICON_RENDER 1
+#define PR_DO_RENDER 2
+
+void BIF_previewrender (struct ID *id, struct RenderInfo *ri, struct ScrArea *area, int pr_method);
+void BIF_previewrender_buts (struct SpaceButs *sbuts);
void BIF_previewdraw (void);
-void BIF_previewdraw_render(struct RenderInfo* ri, struct ScrArea* area);
+void BIF_preview_changed(short id_code);
+
-void BIF_calcpreview_image(struct Image* img, struct RenderInfo* ri, unsigned int w, unsigned int h);
diff --git a/source/blender/include/BIF_resources.h b/source/blender/include/BIF_resources.h
index 933c619f11f..3e366710992 100644
--- a/source/blender/include/BIF_resources.h
+++ b/source/blender/include/BIF_resources.h
@@ -182,8 +182,8 @@ typedef enum {
ICON_CHECKBOX_HLT,
ICON_LINK,
ICON_INLINK,
- ICON_BEVELBUT_HLT,
- ICON_BEVELBUT_DEHLT,
+ ICON_BLANK12,
+ ICON_BLANK13,
ICON_PASTEDOWN,
ICON_COPYDOWN,
ICON_CONSTANT,
@@ -456,7 +456,13 @@ enum {
TH_STRIP,
TH_STRIP_SELECT,
- TH_LAMP
+ TH_LAMP,
+
+ TH_NODE,
+ TH_NODE_IN_OUT,
+ TH_NODE_OPERATOR,
+ TH_NODE_GENERATOR,
+ TH_NODE_FREE,
};
/* XXX WARNING: previous is saved in file, so do not change order! */
diff --git a/source/blender/include/BSE_node.h b/source/blender/include/BSE_node.h
index 0cb8018c0d0..458887c91d1 100644
--- a/source/blender/include/BSE_node.h
+++ b/source/blender/include/BSE_node.h
@@ -30,27 +30,36 @@
#ifndef BSE_NODE_H
#define BSE_NODE_H
+/* ********** drawing sizes *********** */
#define NODE_DY 20
#define NODE_DYS 10
-#define NODE_SOCK 5
+#define NODE_SOCKSIZE 5
+#define BASIS_RAD 8.0f
+#define HIDDEN_RAD 15.0f
+
struct SpaceNode;
struct bNode;
-
-/* ************* button events *********** */
-
-#define B_NODE_EXEC 1
+struct Material;
/* ************* API for editnode.c *********** */
+void snode_tag_dirty(struct SpaceNode *snode);
+
+void snode_set_context(struct SpaceNode *snode);
void node_deselectall(struct SpaceNode *snode, int swap);
void node_transform_ext(int mode, int unused);
+void node_shader_default(struct Material *ma);
-/* ************* Shader nodes ***************** */
+/* ************* drawnode.c *************** */
+void node_draw_link(struct SpaceNode *snode, struct bNodeLink *link);
+
+void init_node_butfuncs(void);
-void node_shader_set_drawfunc(struct bNode *node);
+/* ************* Shader nodes ***************** */
+struct bNode *node_add_shadernode(struct SpaceNode *snode, int type, float locx, float locy);
#endif
diff --git a/source/blender/include/blendef.h b/source/blender/include/blendef.h
index 5963d5e3e14..e0061dc3403 100644
--- a/source/blender/include/blendef.h
+++ b/source/blender/include/blendef.h
@@ -374,7 +374,8 @@
#define B_NLAHOME 801
/* NODE: 851-900 */
-#define B_NODEHOME 851
+#define B_NODEHOME 851
+#define B_NODE_USEMAT 852
/* FREE 901 - 999 */
diff --git a/source/blender/include/butspace.h b/source/blender/include/butspace.h
index 713f9abf488..7dae5af58e3 100644
--- a/source/blender/include/butspace.h
+++ b/source/blender/include/butspace.h
@@ -37,7 +37,9 @@
struct Base;
struct Object;
struct ID;
-
+struct ColorBand;
+struct uiBlock;
+struct rctf;
/* buts->scaflag */
#define BUTS_SENS_SEL 1
@@ -87,6 +89,7 @@ extern void do_armbuts(unsigned short event);
extern char *get_vertexgroup_menustr(struct Object *ob); // used in object buttons
/* shading */
+extern void draw_colorband_buts_small(struct uiBlock *block, struct ColorBand *coba, rctf *rct, int event);
extern void material_panels(void);
extern void do_matbuts(unsigned short event);
extern void lamp_panels(void);
@@ -122,6 +125,7 @@ void test_matpoin_but(char *name, struct ID **idpp);
void test_scriptpoin_but(char *name, struct ID **idpp);
void test_actionpoin_but(char *name, ID **idpp);
void test_grouppoin_but(char *name, ID **idpp);
+void test_texpoin_but(char *name, ID **idpp);
void test_idbutton_cb(void *namev, void *arg2_unused);
@@ -169,20 +173,25 @@ void test_idbutton_cb(void *namev, void *arg2_unused);
#define B_ACTCOL 1204
#define B_MATFROM 1205
#define B_MATPRV 1206
-#define B_MTEXCOL 1207
-#define B_TEXCLEAR 1208
-#define B_MATPRV_DRAW 1209
-#define B_MTEXPASTE 1210
-#define B_MTEXCOPY 1211
-#define B_MATLAY 1212
-#define B_MATHALO 1213
-#define B_MATZTRANSP 1214
-#define B_MATRAYTRANSP 1215
-#define B_MATCOLORBAND 1216
-/* yafray: material preset menu event */
-#define B_MAT_YF_PRESET 1217
-
-#define B_MAT_LAYERBROWSE 1218
+#define B_LAMPPRV 1207
+#define B_WORLDPRV 1208
+#define B_TEXPRV 1209
+#define B_MTEXCOL 1210
+#define B_TEXCLEAR 1211
+#define B_MTEXPASTE 1212
+#define B_MTEXCOPY 1213
+#define B_MATLAY 1214
+#define B_MATHALO 1215
+#define B_MATZTRANSP 1216
+#define B_MATRAYTRANSP 1217
+#define B_MATCOLORBAND 1218
+ /* yafray: material preset menu event */
+#define B_MAT_YF_PRESET 1219
+
+#define B_MAT_LAYERBROWSE 1220
+#define B_MAT_USENODES 1221
+ /* also handled in editnode.c */
+#define B_NODE_EXEC 1222
/* *********************** */
#define B_TEXBUTS 1400
@@ -207,7 +216,6 @@ void test_idbutton_cb(void *namev, void *arg2_unused);
#define B_REDRAWCBAND 1318
#define B_BANDCOL 1319
#define B_LOADTEXIMA1 1320
-#define B_TEXPRV 1321
#define B_PLUGBUT 1325
/* B_PLUGBUT reserves 24 buttons at least! */
diff --git a/source/blender/include/interface.h b/source/blender/include/interface.h
index 1c26a714c51..526f24e704e 100644
--- a/source/blender/include/interface.h
+++ b/source/blender/include/interface.h
@@ -223,6 +223,8 @@ extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, flo
extern void ui_set_embossfunc(uiBut *but, int drawtype);
extern void ui_draw_but(uiBut *but);
extern void ui_rasterpos_safe(float x, float y, float aspect);
+extern void ui_draw_tria_icon(float x, float y, float aspect, char dir);
+extern void ui_draw_anti_x(float x1, float y1, float x2, float y2);
#endif
diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 79d73ff2b99..6d8527d5896 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -47,6 +47,7 @@ struct Ipo;
struct Material;
struct ColorBand;
struct Group;
+struct bNodeTree;
typedef struct MaterialLayer {
struct MaterialLayer *next, *prev;
@@ -88,7 +89,7 @@ typedef struct Material {
float sbias; /* shadow bias */
/* for buttons and render*/
- char rgbsel, texact, pr_type, pad;
+ char rgbsel, texact, pr_type, use_nodes;
short pr_back, pr_lamp, septex, ml_flag; /* ml_flag is for disable base material */
/* shaders */
@@ -109,8 +110,9 @@ typedef struct Material {
struct MTex *mtex[10];
ListBase layers;
+ struct bNodeTree *nodetree;
struct Ipo *ipo;
- struct Group *group;
+ struct Group *group; /* light group */
/* dynamic properties */
float friction, fh, reflect;
diff --git a/source/blender/makesdna/DNA_node_types.h b/source/blender/makesdna/DNA_node_types.h
index db118d706b3..3c350e5c559 100644
--- a/source/blender/makesdna/DNA_node_types.h
+++ b/source/blender/makesdna/DNA_node_types.h
@@ -36,17 +36,28 @@
struct ID;
struct SpaceNode;
struct bNodeLink;
+struct bNodeType;
#define NODE_MAXSTR 32
+
+typedef struct bNodeStack {
+ float vec[4];
+ float min, max; /* min/max for values (UI writes it, execute might use it) */
+ void *data;
+ short hasinput, pad; /* hasinput tagged for executing */
+ int pad1;
+} bNodeStack;
+
typedef struct bNodeSocket {
struct bNodeSocket *next, *prev;
char name[32];
+ bNodeStack ns; /* custom data for inputs, only UI writes in this */
short type, flag, limit, stack_index;
float locx, locy;
- struct bNodeLink *link; /* input link to parent, max one! */
+ struct bNodeLink *link; /* input link to parent, max one! set in nodeSolveOrder() */
} bNodeSocket;
@@ -57,11 +68,13 @@ typedef struct bNodeSocket {
#define SOCK_IMAGE 3
/* sock->flag, first bit is select */
+#
+#
+typedef struct bNodePreview {
+ float *rect;
+ char xsize, ysize;
+} bNodePreview;
-typedef struct bNodeStack {
- float vec[4];
- void *data;
-} bNodeStack;
/* limit data in bNode to what we want to see saved? */
typedef struct bNode {
@@ -69,23 +82,32 @@ typedef struct bNode {
char name[32];
short type, flag, done, level;
+ short lasty, pad, pad1, pad2;
ListBase inputs, outputs;
- struct ID *id; /* optional link to libdata */
- bNodeStack ns; /* builtin data, for UI to write into */
+ struct ID *id; /* optional link to libdata */
+ void *storage; /* custom data, must be struct, for storage in file */
- float locx, locy; /* root offset for drawing */
- float width, prv_h;
- rctf tot; /* entire boundbox */
- rctf prv; /* optional preview area */
+ float locx, locy; /* root offset for drawing */
+ float width;
+ short custom1, custom2; /* to be abused for buttons */
+ rctf totr; /* entire boundbox */
+ rctf butr; /* optional buttons area */
+ rctf prvr; /* optional preview area */
+ bNodePreview *preview; /* optional preview image */
- void (*drawfunc)(struct SpaceNode *, struct bNode *);
- void (*execfunc)(struct bNode *, struct bNodeStack **);
+ struct bNodeType *typeinfo; /* lookup of callbacks and defaults */
} bNode;
/* node->flag */
-#define NODE_SELECT 1
+#define NODE_SELECT 1
+#define NODE_OPTIONS 2
+#define NODE_PREVIEW 4
+#define NODE_HIDDEN 8
+#define NODE_ACTIVE 16
+#define NODE_ACTIVE_ID 32
+#define NODE_DO_OUTPUT 64
typedef struct bNodeLink {
struct bNodeLink *next, *prev;
@@ -99,10 +121,11 @@ typedef struct bNodeLink {
typedef struct bNodeTree {
ListBase nodes, links;
- ListBase inputs, outputs; /* default inputs and outputs, for solving tree */
- bNodeStack *stack;
+ void *data; /* custom data, set by execute caller, no read/write handling */
+ bNodeStack *stack; /* stack is only while executing */
- int type, init;
+ int type, init; /* set init on fileread */
+ struct bNodeType **alltypes; /* type definitions, set on fileread */
} bNodeTree;
@@ -111,9 +134,8 @@ typedef struct bNodeTree {
#define NTREE_COMPOSIT 1
/* ntree->init, flag */
-#define NTREE_EXEC_SET 1
-#define NTREE_DRAW_SET 2
-
+#define NTREE_TYPE_INIT 1
+#define NTREE_EXEC_INIT 2
#endif
diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h
index 4ae9445dca1..902e0805aaa 100644
--- a/source/blender/makesdna/DNA_space_types.h
+++ b/source/blender/makesdna/DNA_space_types.h
@@ -300,17 +300,19 @@ typedef struct SpaceNode {
View2D v2d;
- struct ID *from;
- int flag;
+ struct ID *id, *from; /* context, no need to save in file? well... pinning... */
+ short flag, menunr; /* menunr: browse id block in header */
float aspect;
void *curfont;
struct uiBlock *block;
struct bNodeTree *nodetree;
+ int treetype, pad; /* treetype: same nodetree->type */
} SpaceNode;
-
+/* snode->flag */
+#define SNODE_DO_PREVIEW 1
#
#
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index f1441e7b720..f5cc2ce4810 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -85,7 +85,7 @@ typedef struct ThemeSpace {
char edge[4], edge_select[4];
char edge_seam[4], edge_facesel[4];
char face[4], face_select[4]; // solid faces
- char face_dot[4]; // selected color
+ char face_dot[4]; // selected color
char normal[4];
char bone_solid[4], bone_pose[4];
char strip[4], strip_select[4];
@@ -93,8 +93,8 @@ typedef struct ThemeSpace {
char vertex_size, facedot_size;
char bpad[2];
- char syntaxl[4], syntaxn[4], syntaxb[4]; //syn-
- char syntaxv[4], syntaxc[4]; //tax
+ char syntaxl[4], syntaxn[4], syntaxb[4]; // syntax for textwindow and nodes
+ char syntaxv[4], syntaxc[4];
} ThemeSpace;
@@ -119,6 +119,7 @@ typedef struct bTheme {
ThemeSpace text;
ThemeSpace toops;
ThemeSpace ttime;
+ ThemeSpace tnode;
} bTheme;
diff --git a/source/blender/render/extern/include/render.h b/source/blender/render/extern/include/render.h
index 5f8ceb45b15..c0eced8ad3a 100644
--- a/source/blender/render/extern/include/render.h
+++ b/source/blender/render/extern/include/render.h
@@ -190,6 +190,7 @@ void do_specular_ramp(ShadeInput *shi, float is, float t, float *spec);
void ramp_spec_result(float *specr, float *specg, float *specb, ShadeInput *shi);
void matlayer_blend(struct MaterialLayer *ml, float blendfac, struct ShadeResult *target, struct ShadeResult *src);
+void ramp_blend(int type, float *r, float *g, float *b, float fac, float *col);
/* --------------------------------------------------------------------- */
/* ray.c (2) */
diff --git a/source/blender/render/extern/include/render_types.h b/source/blender/render/extern/include/render_types.h
index dc2f5616f29..ed3a54975ce 100644
--- a/source/blender/render/extern/include/render_types.h
+++ b/source/blender/render/extern/include/render_types.h
@@ -102,7 +102,8 @@ typedef struct ShadeInput
float dxrefract[3], dyrefract[3];
float dxstrand, dystrand;
- float xs, ys; /* pixel to be rendered */
+ int xs, ys; /* pixel to be rendered */
+ short do_preview, pr_type; /* for nodes, in previewrender */
short osatex, puno;
int mask;
int depth;
diff --git a/source/blender/render/intern/source/ray.c b/source/blender/render/intern/source/ray.c
index 30973b0891b..a91219846de 100644
--- a/source/blender/render/intern/source/ray.c
+++ b/source/blender/render/intern/source/ray.c
@@ -2071,7 +2071,7 @@ void ray_ao(ShadeInput *shi, World *wrld, float *shadfac)
nrm= shi->facenor;
}
- vec= sphere_sampler(wrld->aomode, wrld->aosamp, floor(shi->xs+0.5), floor(shi->ys+0.5) );
+ vec= sphere_sampler(wrld->aomode, wrld->aosamp, shi->xs, shi->ys);
// warning: since we use full sphere now, and dotproduct is below, we do twice as much
tot= 2*wrld->aosamp*wrld->aosamp;
@@ -2202,7 +2202,7 @@ void ray_shadow(ShadeInput *shi, LampRen *lar, float *shadfac)
else shadfac[3]= 1.0; // 1.0=full light
fac= 0.0;
- jitlamp= give_jitter_plane(lar, floor(shi->xs+0.5), floor(shi->ys+0.5));
+ jitlamp= give_jitter_plane(lar, shi->xs, shi->ys);
a= lar->ray_totsamp;
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c
index 890a0b26674..acac0d48e2c 100644
--- a/source/blender/render/intern/source/rendercore.c
+++ b/source/blender/render/intern/source/rendercore.c
@@ -2198,7 +2198,7 @@ void shade_input_set_coords(ShadeInput *shi, float u, float v, int i1, int i2, i
}
if(texco & TEXCO_REFL) {
/* mirror reflection colour textures (and envmap) */
- calc_R_ref(shi);
+ calc_R_ref(shi); /* wrong location for normal maps! XXXXXXXXXXXXXX */
}
if(texco & TEXCO_STRESS) {
float *s1, *s2, *s3;
@@ -2279,9 +2279,10 @@ void *shadepixel(float x, float y, int z, int facenr, int mask, float *col, floa
return NULL;
}
/* currently in use for dithering (soft shadow) and detecting thread */
- shi.xs= x;
- shi.ys= y;
-
+ shi.xs= (int)(x+0.5f);
+ shi.ys= (int)(y+0.5f);
+ shi.do_preview= 0;
+
/* mask is used to indicate amount of samples (ray shad/mir and AO) */
shi.mask= mask;
shi.depth= 0; // means first hit, not raytracing
diff --git a/source/blender/render/intern/source/texture.c b/source/blender/render/intern/source/texture.c
index f792a07e307..9b38a65a4b9 100644
--- a/source/blender/render/intern/source/texture.c
+++ b/source/blender/render/intern/source/texture.c
@@ -2352,7 +2352,7 @@ void render_realtime_texture(ShadeInput *shi)
tex2.type= TEX_IMAGE;
}
- if(((int)(shi->ys+0.5)) & 1) tex= &tex1; else tex= &tex2; // threadsafe
+ if(shi->ys & 1) tex= &tex1; else tex= &tex2; // threadsafe
ima = shi->vlr->tface->tpage;
if(ima) {
diff --git a/source/blender/src/blenderbuttons.c b/source/blender/src/blenderbuttons.c
index e8a31711523..0ac27df840c 100644
--- a/source/blender/src/blenderbuttons.c
+++ b/source/blender/src/blenderbuttons.c
@@ -1,1442 +1,1430 @@
/* DataToC output of file <blenderbuttons> */
-int datatoc_blenderbuttons_size= 49463;
+int datatoc_blenderbuttons_size= 49081;
char datatoc_blenderbuttons[]= {
-137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 0, 0, 0, 1,
- 0, 8, 2, 0, 0, 0, 74,242, 89, 48, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0,
- 0, 0, 4,103, 65, 77, 65, 0, 0,192,153,201, 12,156,227, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0,110, 39, 0, 0,115,175, 0,
- 0,246,112, 0, 0,129,232, 0, 0,107,215, 0, 0,226,170, 0, 0, 48,131, 0, 0, 21, 42,251,118,133,113, 0, 0,192,173, 73,
- 68, 65, 84,120,218, 98,244,137,169,101, 24, 5,163, 96, 20,140,130, 81, 48,242, 0, 64, 0, 49,141, 6,193, 40, 24, 5,163, 96,
- 20,140, 76, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0,
- 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64, 44,112,
-150,175,173, 12,241,218, 54, 31,126,130,204, 29,213, 59, 8,245,162,105,167,186,189, 7, 14, 28,112,112,112, 24, 13,231, 81,189,
-163,122, 7,185, 94, 60, 0, 32,128, 88,134, 71, 61,150,158,158, 14,103,207,156, 57,115, 64,108,159, 49, 99, 6, 35, 35,227,176,
-111, 50,192,131, 58, 50, 50,114,205,154, 53, 16,118, 72, 72,200,104, 99,106,248, 69, 52,253,179,210, 40,160, 51, 0, 8, 32, 22,
- 90,164,128,219,183,111,247,244,244, 64,216, 37, 37, 37,170,170,170,116,240,201,255,255,255,129, 36,253,139, 96, 96, 40, 61,120,
-240, 0,200, 80, 80, 80, 24,144,234, 7,107, 45,136,213, 37,192, 54, 59,126, 19,150, 47, 95,142,223,253, 64, 43, 86,173, 90, 5,
- 97,175, 95,191,222,213,213, 21,194, 6,214, 4,180,171, 3,140,141,141,129,228,217,179,103,201,144, 29,153,224,222,189,123,157,
-157,157,112,110,121,121,185,146,146,210, 32,175, 54, 6,208,205, 35, 25, 0, 4, 16, 11,158, 66, 28, 66,146, 90,124, 67,138,161,
-198, 85, 45, 60,178,252, 95, 30,127,172, 15,171, 25,216, 98,145,214, 0,232, 53, 96,209,255, 0, 12,118,236,216, 65,255,118, 19,
- 36,192,103,130, 1,144,221,213,213, 5,228,150,149,149, 97, 85, 28, 24, 24, 8, 97,252,249,243,247,215,239,159,191,126,254,130,
-128, 63,127,254,224,210,130,181,244, 71, 3,192,154,128,166,117, 0,158,218, 11, 82, 1,140, 2, 92,237, 0, 32,128, 20,172,116,
- 72,150, 16,171,201,200, 2, 3,232,230, 17, 14, 0, 2, 8,103, 5, 0,108,194,175,170,173, 10,107,110, 35, 41, 14,128, 17, 9,
- 41,250,129,236, 55,223,222, 50, 8, 51, 84,238,109,248,116,239,125,122, 42,253,138, 69,204,196, 68,107,171,225,117,128,135,135,
- 7,144, 4,178,233,233,217,253,251,247, 3, 25,142,142,142,104,117, 0, 30, 0, 44,238,127,253,250,253,235, 23, 74,233,127,230,
-204, 25, 19, 19, 19,130, 54,134,133,133, 65, 24,145,145,145,187,119,239,134, 87, 0,100, 68, 16,145,161, 4,108,221, 3, 75,127,
- 55, 55, 55,100,193, 93,187,118, 1,251, 43, 16, 54,214,169,136, 17, 94,250, 35,135, 45, 25,229, 50,217, 90,200,232, 7, 80,203,
-205,163,128, 12, 0, 16, 64, 44,184,154,255,106,106,106,170, 60,124, 36,117, 2,224,165, 63,176,232,111,119,110,128, 8, 38,110,
-204, 98, 16, 99, 8,236, 10, 35, 24,151,152, 5, 55,121,101,247,227,199,143,129,164,172,172, 44,156, 1, 49,153,186,135, 94,160,
-121, 7, 94, 7,252,254,253,103,198,140, 25,148, 55,130,136,209,142, 86,250,195, 53, 98, 13, 73,148,210,255, 55,176,244,255,249,
- 19, 92, 9,192, 75,255,255,255,254, 19, 83,250, 3, 85, 66,216,189,189,189,240, 38, 63,124, 50,128,120, 55,163, 57,155,120, 0,
- 47,250,129, 53,144,161,161,225,104, 30, 70, 30, 69,193,154,120,224, 73, 2,168,128,224,184, 10,188, 67, 9, 73,195,112, 46, 49,
-205, 32,204,162,156, 96, 70, 64,115, 51,176, 73,193,200,200,232,226,226, 66,146,155, 33, 32, 57, 57,121,238,220,185,163,201,128,
- 36, 0, 16, 64, 76,184,154,255, 45,225, 33, 63, 94,191, 46,209,214,128,143,230,227, 7,144, 33, 35,120,233, 95, 82, 82, 2,140,
- 66, 32, 57,223,127, 26, 80, 92, 64, 93, 4,174, 6, 15, 40,155,122, 11,136,178,123,174,199, 55, 95, 9,170,188, 64,170,103,158,
- 60,121,130,167, 74,160,110,233, 15, 44,235, 49,139,108, 96, 29, 0, 44, 82,205,205,204, 72, 53, 13, 50,186, 2, 4,251, 97, 0,
-127, 33, 14, 47, 73, 29,193, 0, 51,195,227, 46,253,255,130,138,253,159,160,193, 31,228,210,255,239,223,191, 95,191,127, 37,232,
- 84, 72, 47, 1,185,163,176, 6, 12,136, 28,252, 1,185, 25,105, 36, 7,200, 38,232, 77,172,165, 63,176,232, 7,246,114, 32,165,
- 63, 43, 11,235,104, 54, 38, 56,108, 2, 17, 68, 30,100,199, 95,148,147,215, 2,131, 40, 70, 46,253,113, 53,236,176,186, 25, 88,
-250, 3,211,210,234,213,171,247,236,217, 67,170,155,129,165, 63, 11, 11, 11,144, 28, 77, 6, 36, 1,128, 0, 98,194,211,252,255,
-246,226,185,167,161, 17, 49, 5, 55,164,206, 0, 54,255,129, 12, 72,233, 15,233, 52, 0, 73, 72, 29,240,228,211, 51,163, 50, 11,
-130,117,201,215,239,192, 98,232,239,243,183, 63,159,190,254,241,248,229, 15, 34,139, 78, 72, 10,195, 85,250,211, 14, 96,214, 1,
- 64,240,227,215,207, 31, 63,126, 16,111, 8,164, 28,135,140,173,139,138,138,194,155,198,248,115, 14,114, 59, 26,179,227,140, 39,
-223,130,198,253,129,197, 63,184,241, 15, 47,253,127,255,254,253,245,235,215,207,159, 62,211,122,116, 98,213,170,213, 48, 30, 35,
- 24, 50, 0, 69,136,175, 3,224,165, 63,164,232,103, 98, 98,226,224,224,224,230,225, 26,205,198, 52,234,215, 18,217,167,196, 90,
-121,160,141, 8, 17,163, 23,222,143, 4,214, 1, 36, 57, 27, 82,250,131, 6, 52, 70,235, 0, 18, 1, 64, 0,118,205, 94, 7, 65,
- 24,136,227, 36,208,224,238, 32,239, 64,124,156,250, 8,142, 60, 15,137, 3, 59, 60,150,176, 16,135,106, 75, 33, 90,130, 7, 37,
- 23, 98,180,158,137, 35, 55, 53, 13,133,210,143,223,221,253,219,224, 45,202, 79,199,121, 16,155,242,108,147, 0, 74, 32, 96,195,
-127,203,125,172,196,242,118, 31,125,125,131,106,123,169,205,173, 49, 87,101,132, 52,148, 31,120,185,252,131,193, 62, 22, 32,133,
- 20, 66,252,119,212,210, 52,197,131, 95, 84,252, 97,149, 67,125,215,182,116, 7, 0, 77,178, 44, 43,171,138,249,254, 46,138,144,
-254, 73,146,196,113,236,216, 54,240, 69,120, 12,125,192, 50, 47,113,159, 64,220, 39,254, 63, 70,250,247,150,254,224, 13,180,214,
- 74, 41, 41, 73, 14, 0, 37, 32,107,244,216, 63, 47,114,111,240, 46,117, 61,206,154,157,179, 97, 24,125, 64, 81, 28, 56,167, 44,
-176, 37,253, 25, 99, 97, 24,110, 38, 35,246,124, 53,138, 2,249, 9,220,116, 45,200,161, 8,185,141,115,110,209,255,211,109, 2,
-164,255, 76,180, 32,128,200,102,213,130,136,246, 20, 64, 76, 88, 71,114, 76,148, 85,127,188,126, 13, 44,253,129,108, 59,112,179,
-148,152, 78,192,189, 43,119,144, 13, 65, 99,191,189,252,130,160, 9,164,150,254,240,162, 31, 88, 13,200,202,202,194, 5,127,195,
- 0,176,232, 7,182,109,223,189,123, 71,221, 80,131, 88,186, 99,199, 14,120, 63, 0, 82,250,235,233,233,253, 0,214, 0,223,191,
-195,107, 38,252, 89,110,234,180,169, 64, 71,202, 72, 75,255,254,251, 23,173,244, 39,152,109, 32,117, 0,114,131, 11,178, 26, 21,
-107,191, 4,165, 2,248,245, 27, 82,250,159, 62,117,250,219,247,239,192,210,243,227,199,143,192,128,122,255,254, 61,241, 33, 0,
- 25, 5, 34,126,232, 31,148, 0,222,188,125,251,246,205,155,183,239, 64, 52,152, 9, 20,212,208,212,124, 7,102, 16,211,252, 7,
-146,192,210, 31,218,240,231,230,230,225,225,229,229,225, 5, 50, 70,179, 49,174,210,156,248, 6, 56,100, 5, 1,156,129,139, 77,
-146,237,104, 35, 66, 4,117,185,184,184, 0,235, 0, 96,233,239,234,234, 74,124,159, 3, 88,214, 3, 75,124, 56,119,180,244, 39,
- 9, 0, 4, 16, 19,102,243,127, 85,109, 21,144,241,237,197,115,184, 32, 49, 51, 1, 37, 37, 37, 83, 83, 39, 50,128,103,125,129,
-138,225,171, 72,129,108,215,197, 1, 64,246,185,174, 19, 64, 53,212,117, 61, 60,109, 61,121,242, 4,210,228,135,148,251,208,238,
-203,215,175,192,210, 13,216, 30,231,226,162,254, 40, 1,208,234,140,140, 12,144,141,127,254, 92,187,118,237,252,185,115,250,122,
-250, 63,126,128, 59, 0,223,191, 47, 89,188, 24, 34,139, 39,185,247,246,246,106,105,106, 1, 93, 11, 12,165, 63,191,127, 61,125,
-242,148,108,239, 51,192,102, 32, 24,192,219, 17,240,245, 0,126,255,252,243, 23, 52,242,115,242,228,137,175,223,191,126,249,252,
- 9, 88,250,191, 7,149,254,239, 72,170, 38, 33,253, 0,146, 90,106,135, 14, 29,250, 12, 2,159,192,228,103, 17, 97, 97, 96,233,
-127,227,250,245,131,135, 14, 17,163, 29,210,252,103, 97, 97, 5,198, 38, 15,176,236, 7, 98, 30, 46, 78, 46,206, 23, 47, 94,140,
-102, 99, 8, 40, 47, 47,135,151,191,240,201, 85, 8, 3, 34, 8, 81, 64,100,179, 29,255,184, 16,254,210,159,248,182, 63,154,155,
-129,117, 0,176,244, 39,201,205,200,117,192,104,233, 79, 42, 0, 8, 32, 44, 67, 64,194,247, 31,188, 3, 15,254,192, 69,128,157,
-128, 30,134, 27,248, 13,130, 12,245,220, 56,123, 77, 64, 93, 4, 88,226,247,196, 66, 43, 12, 72,233, 15,105,254, 19, 92, 77,180,
-174,221,128,188,246,248,245,235,215, 33, 41, 0,121, 52,128, 21, 12, 94,191,126,237,229,229, 69,139,176,131,148,185,192,134,191,
-153,153,217,143,159, 63,191,255,248, 14,110,253,127, 7, 49,126,252,152, 50,101, 10,174,156, 3, 89,169,249,247,239,223,179,103,
-207,177,178, 48, 67, 66,230,254,131, 7, 79,159, 62, 93,190,124, 69,100,100, 4, 80, 4,222, 15,192,154,193,224,131, 78,104, 45,
- 56,130, 43, 80, 33,109,255,227,199,143,127,253,242, 13, 82, 65,126,250,252,233,211,167,143,159, 62,125, 33,126, 32, 5,210,252,
-135,239, 4, 38,166, 26, 0, 42,134,179, 21, 21, 20,128, 69, 63, 40,181, 92,191,126, 31,220,107, 65,150,197, 3, 44,173, 44,217,
-217,216, 57, 57, 57,129, 61, 0,118,118,118, 96,228, 82,125,122,127, 72, 3,228,213, 50,240,197, 51,240,154, 0, 77, 1,254, 66,
- 28,235, 80, 62, 73, 61, 15, 34,171, 13,106,185, 25, 82, 7,140,150,254,164, 2,128, 0, 98,193, 28,255,113, 94,178, 12,171, 82,
-130,235, 65, 33,205, 7,163, 50, 11, 97, 93, 9, 72,185, 15, 31,252, 1, 54,255, 9,166, 6,242, 22,252, 66, 44,213,212,212,188,
-124,249, 50,188, 8,195, 28,244, 7, 42, 35,254,124, 12, 82,109, 71, 22, 89,178,120, 9,176,244,135,236,176,194,186, 30, 31,121,
-157,254,191,127,127,245,244,141, 46, 94,188,116,253,218, 53, 22, 86, 86, 96,201,248,228,233, 19, 96, 83,151,153,153, 57, 44, 44,
- 12, 88, 7, 48, 48,240, 99,154, 0,212, 14,201, 93, 16,219,209,246, 1,224,119, 48,176,244, 63,122,244,232, 23, 32, 0,205,250,
-126, 2,151,254, 64,226,243,151,207, 95,190,126,251, 70,208,179,192,162,255, 12, 24, 48, 96, 44, 3,197, 95, 13, 56, 56, 56, 32,
- 7, 20,164,220, 63,127,254, 60, 3, 17,219,143,141,193, 0,200,224,225,226,225, 0, 21,254, 28,108,108,108, 76, 76, 76,163,165,
- 63,250, 24, 44, 82,185,185,122,245,106, 96,107,154, 1,117, 66,149,152, 37,149,200,109, 11, 82, 87, 51,147, 49,238, 79, 21, 55,
-195,235,128,209, 52, 64, 42, 0, 8, 32, 22,180, 86, 60,133,219, 46,224, 41, 0, 82, 13, 64,138,126, 6, 26,111,197,130, 88,170,
-171,171,123,250,244,105, 96,123, 31, 81,241,188, 5,205, 72,199,198,198,210, 52, 4,145,189,246,255,255,255,152,216,152, 41, 83,
-166,130,199,217,255,240,243,243, 19,172,231,110,221,186, 5,108,209, 66,244, 2,217,104,202,238,225,168,180,144,235, 0,200,108,
- 48,100, 73, 40,254,112,134, 44,159,183,182,182,166,196,179,240, 53,160,164,158, 5, 4,212,123,224,192,129,229, 96,128,220, 51,
- 32, 50,109, 0,171,144,223,127,126,255,254,252,123,116,202, 23, 23, 32,184, 98, 18,168,128,200,208,134,239, 3, 32, 47, 51, 18,
-175,145,138,110, 30, 5,100, 0,128, 0,162,254, 97,112,192,216, 2, 13,253,119,209,245, 44, 32, 72,178, 51, 53, 53,221,182,109,
- 27,164,220,167,188,111, 65,222, 96, 20,124, 47, 46,214,210,159, 42, 0,243,204, 6,200,178, 81,130, 77, 54,170,132, 3,220, 16,
- 96,105, 78,234,217, 15, 14, 96, 64,170,141,163,231,252,144,209, 22,161,127,226, 39,207,198, 65,226,230, 17, 11, 0, 2,136, 38,
-167,129, 82,222,147, 32,187, 14,160,209,112, 63,237, 50, 0,229,134,143,230,150, 81, 48,228,146,241, 40, 24, 36, 0, 32,128, 24,
-169,123, 64,194, 40, 24, 5,163, 96, 20,140,130,161, 2, 0, 2,104,244, 70,176, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70,
- 43,128, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70, 43,128, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70, 43,128, 81, 48,
- 10, 70,193, 40, 24,161, 0, 32,128, 70, 47,133, 31,213, 59,170,151,230,122,113, 45,207,165,181,222,209, 56, 26,213,139, 31, 0,
- 4,208,104, 15, 96, 20,140, 2,218, 2,200,233,246, 16,146, 84, 64,204,145,250,163, 0, 43,184,121,243,230,104, 32, 16, 4, 0,
- 1, 52, 90, 1, 12, 36,184,118,237, 90, 58, 18, 0,114, 7,191,222, 81, 64, 18,184,119,239, 30,228, 96, 3, 32,137,124,236, 1,
-241,165, 63,228, 88, 89,178,207,228,193, 37, 66, 69,189,240, 59, 57,200, 3,180,168,222,128,165,127,127,127,255,104,242, 35, 8,
- 0, 2,136,101,248,121,233,240,225,195,182,182,182,131,223,157,144,116,223,219,219, 11, 23, 41, 46, 46,102, 32,250, 50, 72, 32,
-249,111,165, 32,162, 38, 15,159, 72, 7,189,163,128, 84,128,124,212, 1, 73,167, 26, 32,151,254, 64,146,145,145,145,248, 35, 22,
- 40,217, 45, 72,134, 94,200, 57,254,120,156, 7,236,253, 64, 14,249,193,227, 89, 76,189, 4,117,225, 47,253,255,253,251, 55,107,
-214,172,165, 75,151, 70, 71, 71,143,166, 67, 92, 0, 32,128,134, 97, 15, 96, 9,142,195,236, 6, 91,233,159,159,159,143, 92,250,
- 67, 42, 3,160, 32, 49, 13,174, 5,185,220,200, 37, 56,164, 64, 7, 10,210, 84,239,199,143, 31, 51, 51, 51,225,183,208,188,120,
-241, 2,168,165,181,181,181,185,185,185,170,170, 10,114, 94, 63, 46,192,246,241,171,110,230,124,158,253,247, 33,220, 63, 47,254,
- 92, 77,255,113,169,149,237, 72,179,224,230, 42,249,115,187,164,135,107, 6, 35,227, 60,125,180,210, 31, 2, 72,234, 7,208,185,
- 7, 0, 57,199, 31,162,114, 15, 24,160,149,227,248,111,248,130,235,197,212, 69, 70,231, 0, 94,250, 3,155, 83,192,210,255,200,
-145, 35,163,165, 60, 30, 0, 16, 64,195,173, 2, 0, 54,255,129,109,165, 65, 30,235,144, 33, 23, 57, 57, 57,120,195, 31,210,246,
-135, 11,226, 25,147,129, 72,197,217,176,193, 26,239,239,129, 8,194,134, 8,210, 72, 47, 16,156, 60,121,146,131,131,227,248,241,
-227,136,212,195,196, 84, 93, 93, 93, 91, 91, 27, 31, 31,191,117,235, 86, 60,122, 37, 78, 94,251,207,193,202,117,252, 17, 92,132,
-145,233,191, 94,245, 47,155,218,247,230,241,175, 78,111,149, 30,205,138,152,165, 63, 35, 12, 16, 89, 7, 32, 79, 24,164,163, 2,
- 6, 66,211, 9,148,232,133,215, 1,239,222,185,204,156,249,158,164,210, 31,107,253, 1,215, 69,106,175, 20, 88,250,247,245,245,
- 1, 67, 12,152, 50,207,156, 57, 3, 44, 13, 70,147, 19,126, 0, 16, 64, 76,248, 11, 83, 50, 66,144,194,241,101,160,141, 16,141,
-228, 69, 30,176,249, 63, 99,198, 52,178, 59, 1,244, 73, 49, 19, 39, 78,132,183,253,129, 69,127, 47, 24,192,235, 0, 32, 27,168,
- 0,143, 94,120,251, 29, 88,124,223,222, 22, 11, 68,240,114, 28, 40, 69,188, 94, 72,155,148, 72,189,192,210,231,216,177, 99,192,
-222,244,163, 71,143,158, 63,127,142, 38,245,240,225, 67, 73, 73, 73, 6,220,154, 37,143, 93,121, 18,109,205,246,232, 35,227,115,
-248,161,211,144,171,220, 24,222, 61,100, 23,146,252, 62,204,242,213,189,123,247,240, 20,181,120, 38, 3,208,218,254,104,247,202,
-225,175, 3,144,111,224,154,137, 10, 24, 8,221,207,133, 44,251,127,149, 32, 50, 98, 32,241,110, 47, 72,185, 79, 82, 57,142, 92,
-127, 0, 17,121,165, 63,176,123, 58, 97,194, 4, 96,219,191,160,160, 0, 88, 7, 64,218,130,211,167, 79, 31, 45,229,241, 0,128,
- 0, 98,193, 83, 20, 46, 93,186, 28,146,224,136, 31, 82,135, 36,205,152,152, 24,136, 22,160, 33,144, 50,133,200,184, 4,170, 95,
-178,100, 9, 80, 59,184, 40, 95, 66,146,213,240,230, 63, 36,159,144, 49, 19, 0,177,157, 84, 75, 41, 1,144,210, 31, 94,238, 35,
-115, 9, 87,221,224,210, 31,194, 6,213, 1, 94,139,209, 6,118,240,235,133,199, 8,184, 14, 72, 39,168, 23, 88,196,255,250,245,
-203,216,216, 24,216,187, 2,118, 2,130,130,130, 64,117,198,191,127,237,237,237, 95,190,124, 97,101,101, 5,102, 63, 92,122,133,
- 30, 62,101,250,245,231,131,177, 2,235,145,103, 44,199, 95,254, 14, 82, 4,197,209,191,255,151,218,217,222,125,225,253,206,202,
-227,154,121,123, 56,101, 42,130,205,222,206,206, 78, 96,121,135, 57,192,141, 89,178,195,155,255,152, 42, 7,225, 41, 94,233,233,
-130, 72, 53, 10,168, 97, 1, 12, 6,178,239,249, 32,181,237, 15,204,245,240,187, 33,109,108,108,128,217,121,180,244, 39, 8, 0,
- 2,136, 5,119, 81,184,108,230, 76, 80,240,101,100,100, 17, 89, 38, 66,198,181,181,180,180,224, 34,182, 96, 0,233, 19, 16,140,
- 81,120,233, 15,183,139,212,226, 24,232,230,152,152, 40,112, 13, 20, 5,100,147, 90,121, 0,173,131,223,103, 48, 36,166,145,233,
- 9,142, 30, 61,106,110,110, 14, 44,143,128,228,134, 13, 27, 2, 2, 2, 32, 67, 64,149,149,149, 12,224,171, 23,150, 47, 95, 14,
-148, 50, 53, 53,197,212, 43,127,244,204, 11,115, 77, 96, 97,246,213, 92,150,121,195,243,223, 1,138,224, 33, 32, 6,189,202, 95,
- 64,173, 95,223,126,220,183, 92, 69,222,252,139,158,233,147, 97, 16, 80,248, 47, 85,135,131,213, 96,128, 89,136, 35,223,169,130,
-235, 90,105,172, 23, 55, 14, 56, 0,214,103,152, 75, 93, 33, 99, 59,164, 2, 50,116, 65,206, 12,103, 97, 97, 41, 44, 44, 60,115,
-230,204,232,208, 63,145, 0, 32,128,176, 87, 0,192,182, 63,164, 36, 5,130,232,232, 72, 32,151, 96,129, 8, 25,234, 65, 46,253,
-225, 0, 34, 8, 84,128, 85, 22,169,248, 70, 41,253, 33, 12,160, 32,145,101, 49, 48,202,129,197, 19, 68, 49,144, 4, 86, 0,196,
-119, 2,224,165, 63,114,238, 34,178,206,163,164,253,130,220,234, 39,169,249, 15, 25,177, 1,182,250, 33,157, 0, 85, 82,154,255,
- 80,189,225,233,240,187,159, 8,234,253,253,251, 55, 48, 83,241,242,242, 94,186,116,233,239,223,191,159, 62,125,186,126,253,186,
-176,176, 48, 92, 1,144,237,237,237, 61,109,218, 52,204, 10,128,249,247,111,217, 51,151,217,120,165, 89, 47,189,253,248,151,247,
-243, 39,182,191,215,191, 48, 8,115,192, 21,112, 11,255, 49,245,126,178,112,154,237,240,168, 0,128,161,138, 57,244,129,121,201,
- 34,164, 7,128,182, 97,135,164,181, 58,180,184,225,142, 26,222,127, 15,233, 10, 32,247, 6,136,239, 64, 0,195,141,140,210,127,
-233,210,165,135, 14, 29,250,191, 74,144, 49,236,125,127,127, 63,176,226, 4, 54, 77,102,204,152, 49, 90,190, 19, 4, 0, 1,196,
-130,181, 52, 4,134, 32,114, 65, 12,172, 0,128,197, 43,176, 87,133,199,160,137, 19, 39, 66,134,110,176, 2,160, 20, 80, 1,158,
-244, 13, 25,124, 71, 43,115,193,229,248, 18, 98,202,113,228, 46, 11, 4,196,198, 70, 47, 94,188,148,152,114, 28,185,244, 71,107,
- 97, 17,212,139,199,203,120, 0,176,159, 4, 47,238,225,163,255,200,179, 2, 64, 5,120,244, 50,133, 67,135,242, 33,117, 0, 3,
-210,154, 78,166,240,247, 36,232, 13, 79, 39, 82,239,133, 11, 23,228,228,228,128,109, 43, 8,119,209,162, 69,199,143, 31,247,241,
-241, 65, 86,243,242,229, 75, 14, 14, 14, 76,189, 10, 23, 46,124,144,147, 60, 89,152, 4,225,178, 45,186,253,247,248, 71, 38, 31,
- 20,149, 31, 95,114,178,115,252, 30, 54,153, 10, 88,178, 43, 41, 41,225,185,235,170,188,188,156,200,107, 14,145,135,128,112,117,
- 8, 6,109, 32,144,161, 30, 82,113,146,164,119,217,178,165, 7, 14, 28, 96, 92, 3,106,142,236,170,225,117,107,249,108,103,103,
- 55,186,244,147, 72, 0, 16, 64, 44,152,165, 33,114,243, 31,222, 9, 0, 22,166,200,181, 2, 86,128, 71, 22, 82,148, 19,108,254,
- 99, 45, 97, 9,118, 2, 32,110, 70, 46,253, 33,131,128, 64, 7, 3,197,129, 89, 8, 79,213,133, 89,250,147, 84, 7,144, 55, 82,
- 4,233, 9, 61,122,244, 8,178,230, 7,185,225, 15, 20,196,213,145, 66,214,187,232,200, 47,200,186, 29,228,198, 59, 80,144, 70,
-122,129,197, 61,178, 79,237,237,237,187,187,187,157,157,157,255,253,251,215,214,214, 6, 36,191,127,255, 14, 12,103,172, 49,168,
-126,252,248, 37, 91, 7, 56,247,143,189,228,223,238,199, 12,206, 98,255,255, 49, 92,106, 99,253,242,143,231,221,119,190,119,140,
- 66,126, 49, 23,135, 83,190, 2,150,239,248,167, 91, 73, 41, 26, 87,129,200, 61, 97,196,244, 71,225,233, 22,235,106, 78, 60,247,
- 53, 34,235, 5,182,163, 73,210,139,217,138,135,220,225, 76,159, 1, 55,208, 52, 53,164,244,191,244,103,254,254, 95,224,242,106,
-180,244, 39, 22, 0, 4, 16, 74, 5,144,145,145, 5,186,213, 54, 38, 10,179, 37, 14, 25, 23, 2,162, 25, 51,166,209,200, 41, 88,
- 11, 83,130, 53, 7,220,205,184, 12, 4, 86, 93, 64,132, 86, 61, 32, 87, 60,120, 50, 42, 48,121,209,104, 50, 0,158,217,200,216,
- 8, 6, 84,144,144,158,158, 48,249, 43,234,102,174,247,180,211, 11,190,158, 30, 1,228,229,229,167, 76,153, 66,100, 89,182, 13,
- 85,239, 63,121, 30,206, 41,154, 64,134,246, 76, 86, 6, 6, 96,171,255, 61, 24, 61, 28,174, 25, 12, 94, 16, 67, 24,116,184, 45,
- 14,107, 73, 13, 23, 33,184, 10,136, 12,189,152,173,120, 34,251, 55,148,135, 45, 48, 25, 3,203,125, 32,123,193,254, 95, 43,142,
-253, 2, 22, 5,163,251, 25, 73, 2, 0, 1,132, 82, 1,224, 41,220, 33,211,185, 4, 19, 31,217, 10,200,190,201, 22,127,133, 68,
-161,179,105,157, 93,175, 93,187, 6, 95,253, 9, 25,162,193, 63, 77,130,166, 23,178,131,151,158,122, 71, 1,169,160,188,188, 28,
- 62, 22, 4,100,211,199, 82, 58,239, 4, 30, 88,224,222,242,121,168, 56,117, 16, 2,128, 0, 98, 25, 13,130, 1, 4,192, 98,151,
-236, 36, 59, 80,122, 71, 1,169, 99, 65,144,147, 18,128, 36,241,237, 98,148,213,159,176,193, 31, 92, 75, 66,113,141,231,224, 23,
-161,133, 94, 90, 84, 93,248, 1,176,243, 10, 12, 22, 63,255, 52,104,119,115,251, 57, 8,195,203,211,104, 52,237, 17, 3, 0, 2,
-104,180, 2, 24, 5,163,128,182,192,197,197, 5, 88, 1, 16, 63,177, 73,121,105, 59,176, 61, 0,250,214, 22,255, 33, 59, 10, 71,
- 1,121, 0, 32,128, 70, 47,133, 31,137,128,243,231,141,239,236, 26,163,225, 48, 10, 70,193, 8, 7, 0, 1, 52,122, 28,244, 72,
- 4,163,165,255, 40, 24, 5,163, 0, 8, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163,
- 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,136, 38,151,194,223,191,122,156,129,233,
-135,164,140,244,231,239, 95,223,191,253,170,166,105, 67,188,222, 35,231,238, 50,252, 99,127,249,244, 41, 55, 39,183,160, 16,183,
-185,137, 34,241,122, 41,113,243,191, 55, 83,120,121,190,115,114, 51,179, 48, 51, 49,114, 48, 62,255,148, 79,188,222, 79,188, 65,
-130,194,130,252, 60,204, 12, 44, 12,239, 46,204,194,111, 47,167,244, 13,226,221,252,253, 41,202, 96,189, 20,215, 75,226,245, 62,
-251, 38,142,162,247, 39, 9,246, 62, 67,157, 36,144,254, 69,194,245,170, 79,217,212, 7,131, 94,109,108,225,220,217,185,186,188,
- 28,203, 81, 51, 87, 81,195,153, 83,230, 23, 9,113,244,132, 13, 37,109, 72,147, 16, 71,155,159,162,196,209,143,159,220,196,235,
-229, 96,255,138, 98,148,223, 20,226,245,250,110,202, 65,230, 22,191, 32,225,216,156, 94,137, 12, 26,229,193, 81,189, 52,210,139,
- 7, 0, 4, 16,190,101,160,169, 7,138, 24, 29,227,103,253,215, 39,198,160,123, 87,118, 49, 50,252,227, 97,231,156, 63,115,217,
-194,133, 19,173, 93,172,255,124,253,166,165, 97,247,239, 31, 67,118,217, 95, 45, 45,245, 59,119, 30,254,248,254,135, 87,210, 26,
- 83,239,209,243,175,254, 51, 48,126,249,249, 61,189,168,165,113,146,251,179,171,103,129,201,123,219,197, 39, 76, 76, 12, 19, 27,
-106,110,221,186,169,160, 32,207,206,201, 34, 44,200,142,197,222,117,211,216,216,216, 56, 57, 57,121,120,120, 68, 4, 56, 68, 89,
-121, 69, 37,185,249,217,121, 5,216,152, 88, 88, 88,254,255,251,251,137,153,225,211,171, 79,135,121,117,113,185,252,227,221,169,
-188,156, 31,249, 4,216,120,184, 89,217, 56,153, 88,152, 25,152,216, 88,212,165,103,255,254,207,124,239, 89, 18,126, 95,239,127,
-164, 44, 34, 34, 34,206,243,227,251,143,159, 76,236,156, 12,191, 25,254,200,197,124,120,255, 78,228,243, 54,218, 85,218,179,102,
-205, 74, 75, 75, 27,109,188, 16, 4,184,138,123, 82,213, 0,129, 4, 39,215,211,167, 79, 89, 57,216,255,113,113,209,211, 11,223,
-222, 93, 56,182,119, 5,178,136, 75,104,199,224, 12,237,197,139, 22,177,179,177,253,251,247,143,155,135,199,215,207,111, 52,249,
- 13, 9, 0, 16, 64, 4,246, 1,252,223,187, 48,205,153,112, 29, 16,234,167,242,211, 73,232,247,151, 15, 44,127,153,204,244,100,
-226,227,161,205,103, 96, 9,126,226,248, 2, 17, 57,233,127, 95, 62,217,155,235, 62,123,246,126,207,249, 63,104,122,211,211,219,
- 24,216,248, 25,185,248,254, 51,255,191,120, 45,113,222,138,157,208, 38,249, 63, 6, 15, 75, 75,134, 47, 47, 24, 24,120,239, 94,
-190,206, 42, 34, 96,109,161,195, 35, 32,134,197,122, 70, 38, 32, 98,252,207,204,250, 11,104,204, 31,102,102,102, 86,102,102, 54,
- 86, 16,249,251, 47, 3,227,159,127, 32,119,224, 0, 47, 46,182, 8,241, 51,240,113,113,137,138, 8,243,241,113,253,103,250,251,
-231,223,151,191, 12,127,121,120,184, 68, 36,100,148, 84,143,236, 57,136,253, 28,161, 25,187,127,241,243,114,243, 11,124,254,241,
-141,237,235, 87, 14, 54,118, 14,214, 31,127, 65,237,193,111, 63,190,126,251,254,232,189,206,171, 55,239, 62,189,126, 18,102,133,
-221,234,213,157,132,174, 73, 74,112, 17, 20, 23,196, 90,250, 83,177, 14,168,234,238, 6,146,109,165,165,100,232,173,236,234, 2,
-146,237,101,101,196,107,185,242,244,233,173, 91,183,128,140, 32, 71, 71, 34,181,204, 92, 5, 58, 9, 7,249, 86, 44, 32, 27, 66,
- 50,192,206, 71, 3,178,211,176, 29, 33, 9, 44,217,241,151,239,196,148,254,138,130, 66,223,127,253, 4, 50,216, 56, 57,126,125,
-255,241,239,235,183, 55, 47,158, 75,234,234,226,209, 34,169,172, 70,208, 95,252,242,154, 55,246,109, 36,168, 12, 88,250,219,184,
- 68,112, 8, 26, 16, 21, 88,161,239, 8, 42, 9, 11, 11, 91, 21,186, 7,171,148,227,158,215,112,182,150, 0,168,100,120,245,227,
-223,247, 63,160, 16,254, 10, 38,103,154, 11,168,241,178, 98,213,219,211,211, 83, 85, 80,226, 31, 20,248,227,199,247,137,253,125,
- 83,166, 76,201,201,201,161, 48,113,222,185,115,167, 27,156, 62, 9,110, 44, 56,126,252,248,131, 7, 15,222,190,125,251,249,243,
-103, 94, 94, 94, 97, 97, 97, 5, 5, 5, 75, 96,233, 49, 10,192, 96,203,146,102, 56, 27,109,221, 63, 64, 0,225,171, 0,102, 59,
-244, 5,159,104,253,119,108,107,154, 21, 3,254, 58,224,231,151,119, 18, 42,206, 45,165, 65, 11,102, 30,128,136, 28, 60, 54,227,
-235,183,159, 94, 46,249, 86,214, 9, 17, 97, 78,156,156,236,191,254,254,249,252,237,151,154, 5,230,161, 61, 15, 25,126, 49, 4,
- 69, 79, 79, 45,130,118, 45, 61,172, 28, 56, 56,216, 55,236,219,185,237,232,241, 69,243,167,253,248,254,147,141,153,133,135,139,
-141,143,237,239,157, 71, 47,208,171, 40, 96, 17,240,255, 31, 8, 49,253, 3,178,127,254, 98,103, 0, 86, 49,236, 12,255,127,253,
-253,203,204, 0, 44,202,255,254,250,247,231,239, 63,172,206,190,123,170, 93, 70,244, 63, 31, 47,183,180,140,162,134,174, 10, 47,
- 15,231,199, 47,175, 95,188,126,241,254,227,203,223, 63, 24,185,128,181,130,168,117,112,224,229,181,235,213,209, 52, 78, 95,250,
-248, 47, 47,239,119, 22, 6, 54, 14,182,239,223,216,126,125, 99,251,193,193,206,194, 8,204, 37,204, 63,190,127,249,254,237,243,
-247,239, 95,191,127,250,248,249,197,195, 9, 19, 30, 43, 27, 99,223,255,217,189,168, 27, 87,120,150,198, 97, 47,145,223,191,127,
-143,204, 22, 18, 18,130,148,134,130,130,130,119,239,222, 93,189,122, 53, 73,181, 2,155, 56,116,252, 1,104,168, 32,185,105,107,
-214,234,213,217,217,217,191, 95,189, 34,166,244, 23, 19, 19, 11,114,115,251,205,206,222,219,219, 27,236,228, 68,204,241,150, 64,
- 15,246, 52, 52, 64, 71, 42,234,235,123, 27, 27,177,178,113,105, 71,174, 3,128, 12, 99, 99,227, 61,123,238,185,184, 40, 17, 89,
-250,107, 72, 72, 10,240,241, 65,146, 25, 55, 7,231,243,215,175, 62,189,255,192, 35, 32,248,240,244, 25,121, 83, 19, 60, 26,253,
-210, 74, 98,130,125, 85, 21, 20, 32,220,250,222,201,112,169,198,226, 92, 32,249,104,251, 94, 51, 53, 89,162,134,122,136, 44,253,
-161, 45, 11, 33, 66, 42, 8,239, 71,227,102, 97,188,216,152,204,200, 39,242,247,222,197,159,247,174,222,122,247,213,100, 59,190,
-248,157, 49,115,102, 81,122,118, 92, 74,210,234,165, 43,128, 37,111, 75,103, 23,111, 67, 11,252,210, 8, 74,138,126, 80, 94,192,
-219, 58, 1,150,248,187,118,237,250,253,251,183,178,178,178,173,173, 45, 63, 63,255,135, 15, 31,158, 61,123,118,255,254,125, 32,
-233,230,230, 6,172, 15, 70, 75,127, 52, 46,114, 29, 0, 16, 64,232, 21, 64,218,109,216,209, 58,224, 29,118,255,255,125, 97,248,
-245,243,247,129,101,105, 14, 12,132,250, 1,108, 90,154,234, 76, 76, 7,110,125,120,203,192,112,253,227,211,219,192,254,242,198,
-173,147,190,189,249, 27,157, 88, 8,108,206,251,249, 90,254,101,225,193,165,249,214,173,235, 64, 53, 94,250,192,102,157, 20, 3,
-131,252,143,159,191, 66, 60,220, 56, 4,152, 22, 45,219, 1,108,190,175, 89,177,128,249,207,103, 77,121,246, 59,143,208, 53,254,
-251, 15,186,151, 10, 8,254,254,253,251,147,245,255,111,198,223,191,126,253,250,198,245,131,225, 31, 7,211,255,191,127,217,254,
-127,249,245,227,215,247,111, 12,124, 88, 44, 21,229,249,201,194,194, 9,108, 47,168,168,168,136, 75,152, 51, 48, 51,253,253,123,
-150,233,255,135, 31, 95,129, 85,198,215, 23,207,222,137, 10,191, 17, 22,176,150,148, 93,204,192,128,210,226,227,252,241,231,255,
-207, 55, 12, 63,216,127, 49,253,254,202,198,242,133,147,149,133,149,141,225, 31, 55, 35, 51,227,151,175,223,222,191,120,120,247,
-236,209,119,143, 30, 1, 93,197,244,159,153,200,120,154, 55,125, 30,132,145,148,137,115,220, 9,249,158, 41, 32,187,168,168,232,
-209,163, 71,192, 34,146,188,189,151, 83,167, 78,125,249,242,229,154, 53,107,188,237,236, 4,197,196, 72,213, 14,108,251,191, 7,
-151,140,144,131,225,210,195, 8, 28, 87, 9,108,251, 3, 75,127, 80, 66, 97, 99, 83, 83, 83, 91,187,111, 31, 49, 93, 1,202,207,
- 64, 6,150,242,192, 66, 31,114, 97, 8,156, 12, 13, 13, 37, 88,250,171,137,137, 3, 75,127,102, 38,166,172,152,232,239, 63,126,
-246,206,157,203,197,201,249, 3, 8,190,127,103, 98, 97,126,124,254,188,172,161, 33, 46,189,144, 82,254,246,131, 7,200, 92, 50,
-128,185, 83,196,158,213, 21,174,126,201,255,217, 85,137,212, 2, 63,203, 19,114,155, 35, 86, 17, 92, 0,216,240,127,248,229,239,
- 65, 87, 81,214,252,153,159,162, 21, 89, 4,197, 8,150,254,123,247,238, 85,144,148, 74,201,202,168, 40, 44,155, 50,127,134,153,
-145,209,140,201, 51, 10,202, 74,150, 90,154, 95,190,124, 89, 23,111, 87, 9,127,209, 15, 52, 25,200,197,175, 30, 88,250,139,138,
-138, 26, 26, 26, 50,129,123,249,192, 28,199,202,202, 10,108, 24, 73, 72, 72, 0,235, 0,160,108,112,112,240,104,233,159, 86, 14,
- 29, 54,156,213, 89,129, 86, 7, 0, 4, 16, 74, 5,144,122,172,242, 27, 51,199,191,191,255,254, 49, 50,243,254,255,206, 0,108,
- 6, 51, 48, 51, 72,171,177,254,250,250,127,207,188, 52,151, 36,188,117,192, 63,102,102, 72, 97, 7, 44,107,101,248,165,213, 31,
-222, 92, 51,125,230,124,166,159, 92,110,142,214, 59,246, 30,253,246,141,129, 75,136, 31, 83, 27, 39,151,250,247,111, 55,129,197,
- 55,124, 84,134,129,225, 25, 19,179, 67, 92,124,242, 63,246,175, 91,182,206,243,243, 77,226,226,102,248,246, 22,152,136, 37, 48,
-181,255,102, 96,102, 5,151,254,191,255,252,253,249,233,247,183,223,223, 62,112,178,252,254,198,250,147,229, 55,243,111, 70, 96,
- 65,254,233,251,159,175,159,127, 51,136,163,107,188,184,191, 83, 73,130,145,153,153,145,145,137,253,239,223,255,127,190, 61,250,
-249,247,247,211, 23, 31,223,189,255,242,241,243, 95,166, 31, 63,254, 48,188, 96,102,189, 32, 37,247,137,151,131, 19,211, 94,160,
- 87,255,127,254,241,253,243,179,191, 47, 63, 50, 43,203, 0,211,223,223, 63, 63, 63,188,120,112,243,212,241,215, 15, 31,129,139,
- 45, 22, 38, 96,232, 50, 83,243, 12,119, 72, 3,127,214,172, 89, 33, 33, 33, 6, 6, 6,236,236,236,125,125,125,228, 25, 5,105,
-254, 91,232,232,136,139,139, 3, 75,112, 31,123,123, 41,210,235, 0, 65,112,185,207, 42, 38, 6, 52, 1, 72, 18,236, 7, 0,219,
-254,172, 63,127,174, 93,187, 22,185, 43, 64,252,112, 16,217, 0, 82,238, 35, 95,201, 2,172, 62, 9, 86, 0, 95,191,125, 19, 21,
- 18, 74, 12, 9,249,240,241,211,235,119,111, 89, 89, 89, 32, 0, 88,196,176,115,114,125,122,251,230,243,227, 39,188,178, 56,167,
-230,128,165,255,146,181,155,145, 43, 0, 72, 63,192,220, 72,207,203,209,158, 8, 87,127,102, 96,224,229, 21, 54,112,241,227,222,
-189,105, 46,125, 70,255, 47, 45,156,240,115,199,124,177,217,231,128, 53, 1, 51,159,208,159,247,175,128,165, 63,176, 67,240,245,
-207,127,102, 28,195,168,247,239,220,217,182,105,235,194,217, 11, 39,205,157, 54,163,111,130,144,176, 80, 75, 91,203,162,101, 75,
-109, 45,172,231,205,157, 23, 20, 26,100,107,109, 75, 70,233,191,105,211, 38, 96,191, 86, 82, 82, 18,237, 2,106,180,145, 31, 96,
-219,223,200,200,232,207,159, 63,192,174, 0, 7, 7, 7,176, 2,184,113,227, 6,176,169,193,195,195, 3,236,237,189,120,241, 2,
-168,102,116, 44, 8, 81,128,148,119, 64,234, 0, 56, 0, 8, 32,148, 10, 96,182, 85, 59, 84, 29,211,229,255,251,230, 51, 10, 75,
- 50,164, 76, 62,205,169,105,250,120,227,191, 89,181,204, 71,150,167,217, 50,205,250,135,165, 74,223,180,239, 93,154,202, 39,255,
-248,252,226, 92, 96, 7,226, 29, 48,225, 50, 48,252,148, 87, 55,226, 96,103,249,254,245, 39,195, 47, 80,197, 0,236,139,189,122,
-247, 30, 83,239,132,254, 34,208,221,241, 39,230, 50, 49, 65,150, 49,128,134,107,254,125,191,250,227,231,111, 78, 30, 14, 6, 54,
- 80,197,240,249,211, 39, 49,164,251,167, 80, 60,240,239,215,191,127, 44,192, 20,240,243,231,207, 47, 44,204, 44,191,152, 24,158,
-127,250,195,245,231, 47,219,191,255,172,204,223,152, 89,254,124,253,246,229, 23,150, 69, 29,188, 60, 95,255,252, 97,252,249,235,
- 47, 48,123,223,186,243,232,201,243, 55,223,127,253,254,244,229,221,151,207, 31,126,252,253,197, 8, 76,244,223, 62,126,250,118,
-255,225,211,143,111, 63,127,101, 96, 80, 65,211, 14,116, 22, 36, 71,252,249,248,245,201,133,235, 47,175,223,255,244,249,206,231,
- 15, 31,254, 51,176,176, 50, 51,254,103,100,101, 98, 2,245,161, 8, 30, 83, 82, 26, 87,138,103, 44, 8,139,127, 89,160, 81, 6,
-204, 30,192, 26, 23,249,176, 73, 82,155,255,192, 90, 4, 52,198, 45, 42, 74,252, 41, 99,216,139,117,112,185, 15,172, 3,240,116,
- 2,174, 60,125,202, 0, 62,251, 26,216, 34,131,244, 3, 64,197,205,165, 75, 64,114,221,254,253,248,235,128,226,250,122,200, 72,
- 23,144, 93,210,208, 0,239, 19,224, 25,249, 65, 6,192,230, 63,218, 56, 50,228,208, 99,248, 88, 16, 86, 32,192,194,242,227,215,
- 79, 96, 8,223,184,119, 23,104,227,181, 91,183,127,253,250,205,196,192, 8, 12,127,160, 99,128, 45,142,239, 95,191,237, 94,181,
- 50, 8,233, 48, 87, 52, 0, 47,253, 99,130,125,145,197, 79,158,187,164,170, 40,207, 78,216,225,176,177, 11,118, 85, 96,209, 15,
-236, 7, 0,145,103, 96,242,111, 22, 85, 26,150, 16,239,158,179,201,169,189,202,230, 96,119,138,252,123,102,199,223, 79,160, 73,
-133, 87,217, 86,242, 51,143,255,253,135,189, 41,163,174,170,206,197,197, 61,105,206, 84, 71,123,123,115, 75,139, 93,219,118,222,
-184,115, 11,216, 49,231, 96,103,183, 54,182,222,186,105,235,155, 87,111, 2, 3, 3,137, 47,250,129,205,246,123,247, 64, 81,118,
-234,212,169,140,140, 12, 60,189,219, 7, 15, 30, 40, 43, 43, 67, 24, 23, 47, 94,148,151,151, 87, 84, 84,124,255,254,253,153, 51,
-103,148,148,148,128,141, 12,160, 8, 80,106,180, 2,192, 3, 0, 2, 8,203, 28, 64, 26,227,197,255, 7,151, 49, 50,179, 48,228,
-206,205,127, 32, 57,169,111, 33,176,176,156, 94,123, 51,181, 77,157,121,207,172, 52, 89,205, 89,170, 89,192, 54, 55, 19, 19,202,
-224,134, 10,159,204,149, 75,235,192, 76, 96,193,248, 21,124,212,251,111,134,223, 63, 89,254, 1,155, 14,160, 50,125,253,134, 93,
- 64,210,218, 19, 75, 25,177,227,242,127, 15, 67, 29,120, 23, 22, 88,202, 49, 48,176, 50,176,114,252, 97,252,251, 15,124,210, 83,
-120, 52,232, 76,249,135,199,102, 97,234, 5,166,203, 63,255,152,152,254,252, 97,250,245,243, 27,184, 27,248,157,153,153,251,207,
-247, 79,223,129,133, 48, 35,176,103,240,237, 47,195,183, 95,127, 48,253,249,231,215,191, 31,172,204,255,190,253,249,243,239,227,
-231, 47,191,153, 25, 89,127,254,249,253,235,255, 47, 32,193,192,246,143,137,145,129,145,253,223,199,239,127, 95,188,254,246,245,
- 39,250,196, 53, 19, 35,180,195, 2, 44,151, 32,103, 81,253,254,241,253,227,187,119, 76,192, 80, 99,249,207,240,159,133,153,145,
-129,248,150,255,205,135, 55,213,229,213,241,140,252, 32, 15,136,115,114,114,194,107, 2, 96, 62,129,148,254,192,106,128,159,159,
-255,227,199,143, 31,128, 53, 16, 17, 99, 38,144,230, 63,176,155, 12,225,230,228,228, 76,158, 60,153,188, 78, 0,220, 4,200, 64,
- 16,254,209,127, 70, 94, 94,160,131,203,202,202,128,141,232,223,239,223, 3,221, 92,145,147, 67,176, 31,128, 60,214,143,107, 62,
- 0, 83, 87, 39,161,105,246,179, 96, 0, 97, 99,158,136,245,254,221, 59, 30, 94,222, 55,239,223,239, 63,121,146,133,137,249,231,
-239,223,223,190,127, 7, 54, 48, 33, 85, 17, 48,145,252,250,249, 19,127, 80, 99, 14,251, 0, 69, 32,157, 0, 85, 5,133, 71,247,
-238,144, 20,194,192, 58,224,235,235,147,219,215,207, 37,163, 31, 64,112,228, 7, 14, 46,172,154,109, 16, 95,200,174,168, 7,202,
- 32,111,158,223,122, 7, 90,105,202,110,233,243,232,239, 31,174, 41, 39,177,106,249,244,233, 19, 59, 39,135,138,162,226,253, 39,
-143,223,190,126, 27, 30, 19,189,109,239,238,137, 29,189,235,183,109, 82, 85, 84,141, 11,142, 61,126,238,232,250,181,107, 3,113,
- 15,197,192, 75,127, 96,209,239,234,234, 10,169,161,159, 61,123, 6, 44,253,241,187,246,237,219,183,182,182,182,192, 60, 14, 44,
-229,143, 30, 61,170,165,165, 5, 76, 81,178,178,178,192,206, 49, 19, 24, 0, 59, 16,240, 40, 30, 5, 88, 1, 64, 0,177, 96, 41,
-253,247, 45, 96, 96,103,103, 16,146,251, 38,107, 62,169,101, 6,195,223,175, 12, 47, 62,213, 44, 63,152,225,159,193,176,103,225,
-163, 23,175, 25, 84, 25,254,253,253,131, 86, 1,220,249,244, 73, 77,128,239,207, 79,134, 59, 7,150,168, 56,184,131,199, 72, 24,
-126,255,250,205,202,192,244,229, 7,104, 17,133,135,131, 17,167,176, 52, 86, 71,120,232, 50,110,187,248,159, 21,216,220,151,115,
-255,245,232, 48,164, 19,192,202,198,254,155,225, 7, 15, 39,232,238,192, 77,219,150,127,127,251,216, 66, 89, 0,203,192,211,191,
-127,108,191,190,255,102, 96, 3, 86, 2, 12, 63, 64, 89, 20,216, 43,252, 9, 44,218, 89, 88, 25,126, 48,252,255, 7, 26, 26, 2,
-138, 96,230,128,111, 63,254, 49, 51, 51,254,254,243,251,199,207,127,159, 62,255, 0,185,246,223,255, 95, 63,255, 1,107, 31,102,
-160,110, 14, 6,198,239,127,255,129,150, 16,125,255,252, 29, 95, 8,130,186, 2,255, 24,254, 51, 50, 48, 49, 1, 75, 7,230,127,
-255, 25,129, 12, 80, 45,248,143, 9, 88, 49, 49,254, 99,198,223,252, 39, 53,194,184, 96,203, 16,145, 75,127, 96,123, 7,216, 5,
- 6,118,131,224, 45,101, 98,154,255, 10, 34, 34, 16, 46,144, 65, 97, 39,128,200,209,255,255,159, 63,215,214,214,254,124,251, 22,
-114,253,163, 10,184, 6, 98,253,249,211,215,215,247,233,171, 87,210, 84, 93, 97, 9, 31,225,129, 79, 0,160, 1, 99, 99, 99,120,
- 15,224,234, 83,140,246,193,207, 95, 31,126,189,251,241,227,135, 0, 63, 63, 7, 48, 41,254,253, 3, 12, 88, 96, 89,243, 11,216,
- 17,248,253,251,223,159,191,248,195,249,246,131, 7,240, 25, 96,228,177, 32,228,153, 97, 82, 1,183,168, 57,176, 29, 69,134, 70,
-226,231, 0,236,119,191,126,165,176, 6,216, 9, 96, 84,212,147,159,127,254,205,143,127,220, 44,140,191,142,108,184,121,239, 62,
-174, 4,242,253,207,175,179,199, 79, 77,232,233,183,114,176,169,105,106,216,185,125,231,210, 69,139, 45,237,108,100, 21,228, 88,
-184, 88,247, 30,222,187,108,225,226,117, 27,214,110,221,186,213,219,219, 27, 83, 59,228,158, 28,120,209, 15, 1,192,118, 12, 49,
-254, 2,166,121, 96,137, 15, 74,192, 10, 10,192,216, 4,118,215,128,217, 31,216,234,103,103,103, 7, 54,134,128,130,188,188,188,
- 64, 53, 35,185,124, 7,182,108,182, 44,105, 70, 27,246, 65, 6, 0, 1,132, 50,176, 7, 26,249, 57,188,148,129,147,227,193,167,
- 95, 12,223, 63,178,255,251,166,167,163,196,240,246, 27,195,175, 63, 14,250,106,160,133,153,191,127, 48, 51,130,135,104,254,253,
-197, 48,234,195,173, 15,143, 88,216, 25, 60,252, 10,151, 77, 2, 54, 82,126, 49,124,251,249,247, 59,195,134,253, 23,246,156, 6,
-221, 23, 47, 35,167, 8, 90, 99,143, 3,120,233, 51,254,254,193,176,105,235, 14, 19,183, 92, 80,243,159,129,149,153,147, 33,204,
- 39,212,203,206, 31, 40,251,228,225,221,255,191,255, 98,111,221, 0,155, 99,160,201,234,191, 63,127,129,166,127,127,254,248,254,
-237,219,183, 47, 95,190,124,254,244, 17, 24,247,159, 62,127,249,241,229,203,247,239, 88,138,240,207, 95, 24,191,255,248, 11, 68,
- 95,191,253,254,252,229,231,251,207, 63, 63,124,250,245,241,243,239, 15, 31, 64,228,187,183,127,222,189,255,243,238,227,159, 55,
-239,126,189,124,131,101, 4,137, 9, 88, 28, 0,179,214, 95, 70, 70, 38, 96,153,255, 31,228,142,255,204,127,255, 65,195,243, 31,
- 56,187, 16, 51,255,171,105,169,121,116,219,209,157,251,118, 66,234, 3, 96,111, 0,143, 98, 96, 18,103,129,133, 97, 23,120, 21,
-102, 69, 69, 5,228,148,121,228,101,145,196, 52,255,197,197, 81,102, 69,178,179,179,183, 30, 58,244,140,136,197, 60, 88, 1,176,
-249,143,191, 10, 1, 54,243, 33,140,149, 43, 87,222,121, 1, 90,202,181,229,192, 1,184,224,205,155, 55, 69, 69, 69,105,148, 7,
- 32,165, 60,242, 21,137, 16, 54,158,241, 31, 80, 69,203,199,251,239,239,223, 79,239,222,191,121,243,230,237,135,247, 95,191,125,
- 3,162,207, 95,190,124,253,248,233,243,135, 15,192, 84,246,235,199, 15, 96, 53,128, 75, 59,114, 41, 15, 47,253, 33,108,228, 21,
- 65,248,193,151,215, 39,247,172, 70,100,221,111,239, 46,208,186,188,120, 30,174, 0, 44,247,129,165,255,207,131,107, 30, 38, 26,
- 2, 75,255,195,174,162,127, 62,190, 54,217,241,138, 5, 71,244, 2, 91, 18,169,249,153,119,110,222, 60,126,224, 48, 63, 47,127,
-100,120,164,128,176,208,185, 83,103,120,216, 56,184,185,185, 37, 21,164,150,175, 88, 94, 81, 93,245,133,184, 50, 29, 2,140,140,
-136, 58,205, 31, 88,190, 3, 11,122, 96, 75, 31,216,234, 55, 51, 51,211,214,214, 22, 17, 17,225,224,224, 0, 22,253,250,250,250,
- 2, 2, 2,144, 85,161, 35,188,141,143,220,187,197,236,233, 2, 4, 16,162, 7,144,118,107,218,255,215, 15,126,176,114,236,121,
-197, 5,140,107,133, 15,207,153,215,181,108, 79,111,238,214, 82,145, 20,228,200,213,224,100,152,122,254,255,239, 95,143,153,193,
-227, 6, 88,202, 25, 30, 96,138, 5, 82, 23, 47,109,214, 55,240,173,171, 89,180,113, 93,223,174,253,215, 29, 45,181, 89, 88,216,
-119, 31, 62,247,159,153,229,215,223,191,248,221,234, 97,168,177,227,236, 13,134,222,142, 16, 95, 47, 31, 31,223,157,251,214, 3,
- 27,232,222,238,145, 76,127,127,179, 50, 99, 47, 78,129, 69,255, 95, 80, 73,251,151, 5,216,210,255,207, 2,108, 2, 0, 27,194,
-160, 37, 1,192,134, 56, 35,168,127, 0,233, 37, 96,233, 63,126,231,101, 98,126,207,198,206, 4,106, 53,255,253, 15,108,237,255,
-251, 15,236, 61, 0, 59, 1, 12, 76, 28,255, 25,153,129,173,121,198,191, 76,140, 63,255,254,255,240,245, 63,159, 56,214, 1, 25,
-196, 89,228,144,240, 96, 97,254,207, 4,170, 16,152,225,133, 33,168,110,192,221,252, 7,150,254,208, 86,234,130, 61, 64, 4,100,
- 0, 43, 3, 6, 47,124, 65,244, 15, 60, 20,187,102,205, 26, 72,222, 83, 84, 84,132,120, 16,216, 44, 5,122,156, 96, 5, 0, 44,
-253, 33,205,127, 69,234, 21,184,172,224,129, 35,111,123,156, 19,155, 86,186,186,189,189,189,192,102, 62,176,160, 7,246, 6, 2,
-192, 39,227,171,171,171,195, 5, 31, 62,124, 40,194,206, 46, 1,235,145, 80,119, 14, 0, 8, 32, 87,178, 32, 95,123, 75,240,210,
-218,247,111, 62, 50, 50,252, 1,181, 40, 94,126, 99,227,224, 0,109, 42, 4,247, 0,190,127,249,242,243,235, 87,208,132,211,135,
- 15, 30,184,239,158,133,148,242,144, 81, 32,115, 35,189,147,231, 46,193,165,208,166, 4,112, 54,111, 95,159, 60,121, 96,189,179,
- 87, 4,180, 50,248,120,251,230,165,163,100, 52,252,137, 31,255, 1,245,213,222,125,125,148, 98,250,255,254, 37,177,217,231,190,
-254,249,255, 41, 90,145,127,217,253, 79,137,194,192,210,159, 9,119, 5,159,157,147, 83,219,209, 34, 38, 44,242,251,223,223,219,
-143,239, 69, 71, 70, 45, 90,178,100,227,134, 77, 81,209, 81, 63,127,252, 60,124,230,216,247,239, 95,210, 18, 18,246, 30, 63,142,
-185,142, 3, 24, 35,119,238,220,113, 3,119, 16,145,251, 1,111,223,190, 45, 45, 45,133, 79, 12, 96, 5,194,194,194,207,158, 61,
- 19, 20, 20,156, 49, 99,134,169,169,169,161,161, 33, 27, 27, 27, 48,239,159, 56,113,194,194,194, 2,168, 0, 40, 43,140, 99,238,
-112,196,214, 1,104, 0, 32,128, 16, 21,192, 44,181, 44,135,175, 51,111, 61,121,255,220, 23,220,232, 56, 89,241,127,203,116,169,
-151,247,251,237,131, 24, 62,188, 99,104, 91,240,255,233,141,191,156,220, 31,222,129,186,239,140, 24, 91,171, 14, 30,216,104,239,
-224, 12,100,124,253,247,251,206,135, 71,192, 18, 89,133, 79,209,209, 81, 79, 92, 68,226,237,199, 79,160, 14,194,175, 63,207, 63,
-124,213,196,230, 8, 25, 57,203, 39,143,142,131,211, 44,139, 7,104, 37, 40,203,142,203,191,119,110, 89,243,242,205, 51, 97, 1,
- 80, 23, 79,128,141, 85, 82, 0,251, 18,210, 95, 12, 44,108,160,150, 24, 51,176,209,205,244, 23,216, 71,249,243,151,149, 5, 82,
-250, 51,128, 23,137,130,182, 8, 96, 3, 1, 17, 21, 27, 22,151,112,177,253,103, 97,133,245, 36,126, 51,252,249,207,240,227, 23,
-195,223,159,192,134, 61, 35, 35, 27, 35,208,220,175, 63, 25,146, 19,186,208,182, 86,195,103,128,255, 49, 1,235, 13,208,248, 15,
-164, 13, 14,236, 1, 48, 49,131,170, 35,160,236,127,102, 96,183, 0, 95, 39, 0, 94,250,163,177, 65,117, 0,174,225,166,191,127,
-129, 69, 15,176,248,134, 84, 0,107,192, 0,200, 85, 86, 86, 6,218, 62,113,226, 68, 96,135,224,221, 59,124,187,129, 74,192, 96,
-199,142, 29, 95, 95,162,156, 88, 0,172, 15,238,223,191,207,128,119, 83, 24,230,206, 47, 96,209, 15,172, 78,128, 65,231, 99,111,
- 47,141,123,254, 0, 88,178, 91,233,233,189,125,240, 0, 88,202,223,130,173, 5, 82,149,148, 44, 42, 42, 58,122,244,168,154,154,
-154,142,180, 52,158,105, 15,228,113,127,226,231, 0,144, 39, 3,202,203, 65,139, 62,239,221,131,182,253,225,219, 2,240, 44, 4,
-226,145, 22,251,254,252, 5, 48,101,125, 5, 54, 50,223,188, 6, 38,174,255,255,255,253,248,241,227, 63, 24,220,191,118,253,247,
-175,159,120,150, 0,161,244,110, 29,237,129, 8,190, 36,148,152, 33,160, 47,111, 78, 1, 75,127,144, 51,184,185, 55, 34,117, 2,
- 76,108, 3,105, 90, 82,152,108,127,117,198,147,193,192,216,229, 85,182,149,196,180, 99,192,250, 64,144,141,241,237,187,247, 44,
-140,140, 44,120,199, 8,227,226,226,224,236,205,155, 55,123,121,123,110,217,180,101,213,170, 85, 13,213,181,187, 14,236,101,102,
- 97,150,150,145, 6, 6, 36, 3, 27,150,133,124, 42, 42, 42,152,213,192,238,221,187, 25, 8,109, 1, 3,182,244,239,221,187,167,
-165,165, 85, 80, 80,176, 98,197, 10,126,126,254, 27, 55,110, 32,143, 13, 0,101, 21,200, 29,112, 27, 33, 0, 32,128, 80,230, 0,
- 14, 24,166, 51,192, 86, 54,111,121, 37,224, 35,202,248,255,204,182,255,199, 55,129,234,126, 14,142, 31, 92,188,187, 5, 28, 94,
- 88,186,128,199, 34,208, 55, 4,222,188,245,235,200,137, 54, 80,153,200,204, 1, 25,174,184,243,233,121, 93, 78,210,183,111, 63,
- 63,125, 7,205, 1,252, 98, 98,119,242, 8,193,234,136,218,234,132, 29, 91,193,219,106,254, 66, 6, 91,254,120,232, 50, 70,100,
-245,113,113,177,243,129,231, 0, 88,255,253,144, 22,197, 94,190,176,252,255,243,139, 17, 84, 7, 0,139,138,191,192, 60, 10,204,
-169,127,192,115,182,140, 76,192,238,192, 31, 72, 69,133,163, 14,248,240, 93,224,251,207,183,108, 44, 32, 69, 64, 21,127,128,213,
-199,239,255,191,255,252,255,242,253, 31,168,249,207,192,248,251, 31,116, 48, 7,189, 32, 6,141,238,255, 5,194,255,192, 98, 1,
- 60,254,195,200,128,110, 5, 68, 91, 94,161, 35,174,115, 57,174, 31,191, 78,106,108, 1,211,244,247,239,223,117,117,117,149,148,
-148, 30, 60,120,176, 10,188, 75, 22, 82, 25, 64, 64, 71, 71, 7,193, 58, 0, 8,176, 78,175, 5,199,199, 51, 16,177, 41, 12,178,
- 53, 23, 25,248, 58, 56, 16,156, 61,150,128, 53,196,144,123, 3,192,134,191,137,186, 58,219,215,175,248,189, 76, 73,250, 70, 46,
-229,145,119, 81, 48, 16,177, 79,152, 83, 82,226,219,237, 59,127,255,252,249,244,254, 3,184,119, 5,138,226,247, 47, 95,125,122,
-255, 30,232, 42, 60,205,127,180,201,128, 37,107, 55, 35, 47,253, 68,158, 30,192, 14,190, 93, 60,177, 31,178,158,130, 97,227,106,
-208, 2, 80, 35,251, 8, 33, 49, 3, 90,150, 3,255, 81,234, 0,134,217, 6, 25,117, 47,254,253,211, 95,112,234,148,135,184,246,
-150,151,192,210,159,151,149,216,131, 35,129,145,187,239,192, 62, 39, 87,231, 77,107, 55, 52,119,118,148,127,252,248,255,223,191,
-149, 43,215,138,136,136, 60,250,132, 83, 23, 90, 53,192, 64,104, 11, 24, 16, 88, 90, 90, 2,219,248,231,206,157, 51, 50, 50,114,
-118,118,222,191,127,191,156,156, 28,176,133,100,111,111, 15,140, 32,160, 56, 43, 43,235, 8, 95, 2, 4,217, 7, 0,239, 1,160,
-113,129, 0, 32,128,112,238, 4, 6,246, 3,230, 94,222,163,243,247,170, 4,235,199, 31,255, 89,110,255, 23, 96,126,253,233,133,
- 5,116, 27, 33, 19,182, 1, 25, 81, 33, 67,175,132,184,191,255,225, 77,245,255, 95,190,126, 98,102,225,103, 96,226, 42,235, 33,
-176, 83,201,195, 91,103,195,212, 10, 6,166,111,240,130,148,135,135,255,239,239,247, 12,255,191, 62, 60, 54,203, 68, 79, 14,231,
-224, 50,176,145, 13,206,154,127, 24,152,217,254,131,171, 1,112,233, 15,106, 46, 51, 64, 9, 92, 32, 33,173,102,214,228,134, 63,
-191,223,177,128, 23, 57,131,250,248,127,254,255,248,205,240,233, 51,176, 51,240,255,207,127, 38, 22, 86,198,214, 38, 44,139, 91,
- 82, 82, 64,195,199, 11, 23,220, 97,252, 13,106,254,131,186, 25, 32, 10,220, 74,250,207,204, 8,154,139, 98, 41, 46,113,195, 99,
-117, 74,115,202,131,187, 15,200,136, 81, 96,250,126, 15, 94, 63, 99,108,108,108,102,102,246,250,245,235,187,119,239,130, 22, 38,
-254,251,183,118,237, 90,130,117, 64, 78,124, 60,167,152,152, 15,182,225,154, 28,112, 5,192,137,187, 40,135,100, 72, 52,189,210,
-226,226, 36,185, 31,216, 27,176, 6,247, 6,196, 56, 57,117,172,172,104,154,250,209,202,119, 96,136,161,205, 6, 19,172, 3,132,
- 85, 85, 62,191,127,207,194,206,246,243,231,143,191,191,255, 0, 3,153, 87, 80,240,227,187,119,192,210, 31,127,243, 31,190, 17,
- 12, 50, 1,112,242,220, 37, 96, 5, 0, 31,253,199,181, 47, 76, 77,242,253,155,183,111, 86,173, 94, 14, 23, 9,139, 78,126,247,
-139,180,117,159,152, 99, 62, 24, 34,140, 4,251, 1, 12,219,161, 7, 57,168,108,132,238,189,255,248,251, 47,241,110,112,114,112,
-186, 40,120,209,205,219, 35, 53, 54, 89, 79, 95,119,211,198,205,199, 47,156, 77, 75, 75,123, 68,232,144, 50,120, 53,208, 13, 6,
- 4,119, 56, 2,107, 11, 96,143, 97,203,150, 45,192, 38, 17,176,223, 0, 89, 11,119,245,234, 85, 96,219, 31, 88,250,195,235,146,
- 17, 14,208, 54, 3, 35, 3,128, 0,194,119, 20,196, 63, 93,151, 75, 12, 46,151, 72,177, 73, 71,199,122,210,164, 69,121,249,145,
-210,242,192, 84,251,147,149,157,227,201,243, 79,246,190,113,196,232, 53, 52, 84, 74, 72, 8, 91, 48,111, 29,195,191,135,192,150,
-253,159, 31,223,165, 37,249,229,248,254, 16,208,246,247, 31, 11,211,191,223,140, 44,172,255,255, 64,171, 1, 32,241,255, 47,145,
-203, 90,210,114, 65, 67, 10,245,149,153,172, 44,140,144,115,131,254,254,253,251,225, 51,176, 38, 96, 96,102,249, 55,109, 42,190,
-244, 23,159, 0,218, 28, 48,111,238, 77, 6,200,137, 52, 76,192,238, 2,104,204,167,168,196,135,160,189, 31,191,124,196,122,212,
- 15, 65, 0, 44,131,128,157, 0,160, 35, 63,125,250,196,204,204, 12,100, 72, 72, 72,252,254,253, 27, 57,171, 0,235, 0, 92,103,
- 66, 64,154,234,130,100, 45,247, 20,130, 4, 41,137, 37, 62, 38, 16, 39,113, 88,150,236, 57, 0,180,146, 29,235, 90, 32,130,219,
-193, 20,204, 76,129,228,141,131, 7,127,124,251,254,239,239, 95, 77, 99, 99, 93, 43, 59, 30,105,188, 1,248,159,241,225,253,187,
-160, 25, 23, 6,134,164, 32,232,148, 14, 80, 4,153,141,117,139,200,173,231,192, 36, 33, 24, 30,157,242,240,241,139, 19,135,182,
- 0, 69, 86, 45,157,107,110,231,195, 43,110, 67, 76, 64,133,129,246, 97, 16, 62,233,225, 47, 35,246, 77, 8,143, 2, 37,182, 63,
-251, 65,173, 66, 71, 31, 12,206,156, 57,179,247,196, 65, 97, 17, 97,146, 14, 41,129, 84, 3,196,168,228,229,229, 13, 14, 14, 62,
-126,252, 56,176, 25,116,234,212,169,209,179,128, 48, 71,255,209, 74,127,180,249, 0,128, 0,162,254,165,240,202, 26,166, 91,119,
-222, 9,240,230, 18,147,150,125,247,249,143,189,119, 44,241,122, 45, 77, 53, 44, 77,171,210,211,235, 24, 24, 94, 10,242,178,200,
- 9,253, 35, 60,106,153, 88, 66,185,155, 27,219,167, 3,201,252,130,156, 95,223,127,255, 3, 47,181,236,159,218, 79,164,222,164,
-100,208, 73, 65,243,230,220,248,247,159,185,178,194,159, 14,145, 10, 58,242,232,231,207, 95,191,126, 65,138, 69, 72,129, 56, 92,
-207, 7, 37,120,194, 4,241,128,152, 83, 63,113, 1, 13,123,123,226, 21, 63,191,119,211, 92, 85,134,108,187,222,254, 82,225, 17,
- 87,113, 9,181, 33, 85, 35,174, 83,222,144, 0,211, 31, 70,246,239, 76,216,231,255,239,126,254,163,198,139,167, 64, 32,103,161,
-176,137,137, 9, 29, 18,137, 37, 24,140, 22,247,184,234, 0, 60,178, 0, 1, 52,122, 41,252,144, 4,163,183,186,143,130, 81, 48,
- 10, 40, 7, 0, 1, 52,122, 35,216,144, 4,163,165,255, 40, 24, 5,163,128,114, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,
-140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16,
- 64, 52,185, 20,126, 84,239,168,222,193,169, 23,114, 26,196,104, 88,141,234, 29, 81,122,241, 0,128, 0, 98, 65,203, 30,196,232,
-193,154,133, 40,209, 59, 10, 72, 5,184, 10,178, 81, 64,106, 40, 17, 25,146,143, 30, 61,122,250,244, 41, 59, 59,187,136,136,136,
-156,156, 28,221,188, 0, 63,243,117, 48,231,160, 87,175, 94, 61,125,250, 20,191, 26,105,105,105, 49,108,187, 79, 40,209, 59, 10,
- 40, 7, 0, 1,132,190,236,151,224,206,123, 60, 27,172,208,244, 98, 30, 77, 76,211, 51,135,233, 95,184,224, 87, 80, 80, 80,160,
-169,169,137, 95,187, 52,234, 25, 56,200, 57, 33, 52, 52,212,197,197, 5,143, 94,170,212, 1,238,238,238, 64,114,231,206,157,116,
-208,251,245,235,215,181,107,215, 66, 46,133, 15, 14, 14, 54,196,125,159, 34,166,103, 9, 94, 10, 63, 99,198, 12,172,173, 13,252,
-161, 68, 76, 24, 2, 75,168,159, 63,127, 2,173,224,224,224,248,241,227, 7,176, 38, 56,125,250,180,190,190,190,138,138, 10, 46,
- 45,214,214,214, 4,253,245,252,249,115,200,181, 39,248, 1,176,244,135, 28,247, 77, 76, 88, 17,179, 23, 36, 44, 44, 12,127,186,
-130, 0,121,121,121, 6,240,121,203, 64,191, 67,226, 14, 79,154, 4,166,219,162,162, 34, 60,150,190,127,255,222,220,220, 28,107,
- 80, 3,245,106,105,105,225,209,251,242,229,203,218,218,218,209,230, 14, 37, 0,207,165,240, 0, 1,196, 50,108, 60, 73,255, 70,
-241,198, 25, 30,184,164, 2, 50,119, 16,212,190,127,255,126,120,246,248,246,237, 27, 23, 23,215,235,215,175, 9,214, 46,123,246,
-236, 65,102, 35,103, 72, 32,119,245,234,213,196, 7,194,229,203,151, 33,133, 56,154, 57, 36,129,140,140,140,236,236,108, 98,174,
-126,133,220, 4, 25, 23, 23, 7,244,111,111,111,175,130,130,130,160, 32,225,189,208,192,146,119,251,246,237, 16,182,135,135,199,
-142, 29, 59,176,178,241,244, 56,225, 9, 3,200, 48, 54, 54,158, 53,107, 22,164,160, 36, 38,193,124,252,248,145, 23, 12,128,165,
- 63, 39, 39, 39,176, 50,248,240,225, 3, 63, 63,255,169, 83,167, 24,192, 27, 86,113,105,212,209,209, 1, 22,151,240,130, 27,185,
- 21, 15, 44,208,129,228,137, 19, 39,162,162,162,136, 9, 97, 34, 75,127, 8,152, 48, 97, 2,229, 9,155,155,155,251,218,181,107,
-172,172,172,191,126,253, 2, 6,242,237,219,183, 43, 43, 43, 9,234,122,137,116,188,160,173,173,237,225,195,135,225,220, 55,111,
-222, 16,169, 17, 19, 60,128, 29,162, 55, 10, 40, 47,253, 25, 48, 46,133, 7, 8,192,222, 25,219, 48, 8, 3, 81, 52,146,171,204,
- 16, 15,225, 34, 61,131,120, 10,247, 46,211, 51,144,229, 13, 34,121, 28,183,121,242, 33, 11,129, 2, 7,105, 40,242, 43, 64, 50,
- 58,225,227,223, 63, 23,247, 47, 90, 0, 74, 41, 74,133,120,157,131,145,199,243, 53,137,154,119, 84, 46, 17,234, 23,121, 53,142,
-163, 70,199, 45,124,225, 33,238,148, 18, 44,185,152,116,166, 65, 55,133, 23,111,200,163, 64,251,231,156,187, 41,252,238,151, 71,
-251,203,204, 72, 49,133,167, 6,104, 90,129,223, 77,225, 9, 12,210,159,155,194,147, 39,176,243,110,192,236, 14,188,127,107,102,
- 9,104,127,154,140,123, 51,133,175,181, 26, 99,120,213, 70, 1, 16,150,239, 26, 95,110, 79,128,133, 68,171,111, 2, 64, 8, 65,
- 46,122, 70,173,159,124, 3,194, 31,178,142, 49, 82, 3, 72,140, 97, 24,148,236, 63, 7,236,239,189,159,215, 0,105, 35, 54, 18,
-233,244,230, 58,231,104,163, 41, 87, 50,203, 86, 96,173, 37,193,248, 41,200,207, 63,251, 79,172,210,124,225,215,166,240, 31, 1,
-216, 59,155, 19, 6, 97, 56,138, 11,210, 13,114,235, 16, 30, 29,160,189,101,129,220, 29, 35,251,184, 71,134,201, 49,217, 64,232,
-207,252,105, 16, 81, 19,219, 82, 40,244, 29,130, 40,228,160,201,251,240,144,247, 73, 1, 96,155, 21,239, 84,130,205,134,181, 60,
-171, 1, 44,187,223,250, 57,158,217,255, 20,157, 9,133,193,218,114,120,250,242, 52,208,122, 96,255,155,185, 20,229, 46,165,240,
-140, 53, 46,126,133, 91, 2, 83, 49, 3, 99,113, 6, 40, 21,215,255, 90, 20,120, 7,155,165,240,197,208,195,215, 65, 0,134, 97,
- 32, 7,132, 16, 46,207, 86,120, 46, 80,130, 24,227,113,114,130,253,179, 42,139, 0, 72, 14, 72, 77,100,181,121, 11,222,207,181,
-207, 95, 88,216,216,109,231,156,214, 26, 37, 80, 74,113, 13,251, 35, 6,172,210,182,173,233, 55,154,217,223, 90, 43,155,113,149,
- 3,246, 48,142,227, 65, 8,240,222, 27, 99,246,158, 78,211,116, 77,224,109, 75, 56,238,186,174,239,123, 49, 28,127,251,191,100,
-255,102,171, 20,254, 33, 0,123,215,110,195, 48, 8, 68,163,140,132,216,129, 79,155, 53,178, 6, 27,100,141,136, 58, 29,107, 32,
-209,177,131, 27, 40,242,146, 83, 40,130, 13, 1, 81,230, 10,203,182,140,125, 6,241,222,221, 67,226, 86, 18, 64, 45, 92,252,184,
- 50,188,138, 3,180,214,163,121, 64,215,195,238,171, 46,215,199,253, 38, 38,126, 16,240,135,121, 85,123, 27, 99, 28,165,132,137,
-126, 46, 69,225,129,218,136,149, 48, 3, 39, 8,128,140, 26,130, 3,142,250,138,212,255,211,167, 40,124,217, 59,158,138,194,211,
-205,198, 64, 75, 41,203,122,146, 82,170,228, 4, 13,229,167,142, 66,234,162,240, 69, 11,218,181, 16,194,249,189,151, 56, 78,240,
- 69,239, 61,109,190, 68, 69,225, 95,181,166,183,205, 90,219,128,242,130,254,200, 54,190,216,104, 72,213,193,195,228,240,104, 42,
- 48, 97, 41, 37,198,152,115,142,115,142, 81, 35,145, 13,151, 66,136,156,115,183, 57, 16, 31, 71, 99,204,145, 22,180,220, 16,118,
- 32,161, 4,167,162, 91,224, 57,198,136,208, 31,124, 0,183,255,208,223,181,167, 0,162,102, 5, 64,245, 73, 96, 50,234, 0, 96,
-115,146,164,126, 0, 36,107, 45, 93,186, 20, 77,124,219,182,109, 64, 65, 34, 13, 57,113, 95,203, 66,241, 26,241, 35, 63,240, 6,
- 38,188,169, 8, 76,190,144,194,136,212,210, 31, 94,135,145,212, 60,132, 52,255,209, 46,133, 39,175, 19, 0, 55, 1,207,165,240,
-240, 38, 63,176, 76, 1, 54,102, 85, 85, 85,129,141,104,118,118,118,126,126,254,150,150, 22,130,253, 0,228,177,126, 92,243, 1,
-100, 84,237,192,130, 24,174, 6,243, 68, 44, 96, 3,159,151,151, 23, 88,234, 29, 59,118, 12,216,248, 5,150, 44,223,145, 46,133,
- 7,221, 59, 77,232, 82,120,204, 97, 31,120, 91, 30, 24,221,175, 72,188,125, 19, 24,191,144, 21, 65,100,244, 3, 8,142,252,192,
- 1, 48, 34, 74, 75, 75, 33, 57, 14,104,221,237,219,183, 25, 64,199,244, 26, 2,235, 63, 98,214,225, 80, 82,214, 67, 42, 15, 50,
- 12, 4,198, 35, 48,118, 44, 45, 45,225, 7,207, 1, 93, 11,236,187,140, 22,238, 12, 72,119, 2, 35, 15, 1, 33,167,118,128, 0,
- 26,236,147,192,244,169, 3,128,234, 33,253, 86,120, 71,152,200,210, 31,216,252, 39,219,107,144,230, 63, 90,195,255,197,139, 23,
-180, 46,253,225,205,127, 29, 29, 29, 8, 23,200,160,176, 19,128, 31,192, 71,255,185,185,185,107,107,107,129,165, 63, 68,220,192,
- 0,116,201, 9,176,220,247,245,245, 61,114,228, 8,144,164,162,165,240, 48,129, 79, 0,160, 1, 96,179, 17,222, 3,192, 92, 55,
- 13, 44, 83,128,117,192,143, 31, 63,128,181, 20,176,174,130, 92,183, 9,191, 20, 30,200,192, 95,250, 67, 42,117,204,177, 32,228,
-153, 97, 82, 1,217, 26,137,159, 3, 0,214,199,222,222,222,192, 28,196,197,197,229,224,224, 0, 12, 1, 96,148, 1,107,232, 5,
- 11, 22, 48, 49,209,118,211, 40,176,172,135, 15, 31, 65, 50, 32,241,213, 9,176, 65,243,232,209,163,240,240,112, 6,240,165,211,
-160,171,199, 70, 1, 90, 63, 24,199,189,240, 0, 1,200, 59,131, 28,132, 65, 32,138,238, 61,141,186, 55,158,171, 27,238,194,198,
-112,136, 90, 57, 66, 87,156,130, 21, 97,107,244,153, 73, 8,193, 90, 1, 99, 98,226, 95,145,118, 51,105, 50,111,102, 24,202,252,
-250,159,192, 29,157, 0, 84,159,188, 39, 88,164,186,181,158,254,162,253,110,123,158, 46,167,105, 35,241,128,106,160,201, 84, 48,
- 52,142,163,236,227,227,126,117,137,225, 45,125,156, 14,250, 75,250,255, 60, 20, 30, 27,228, 85,135,222, 14,133, 7, 34,178,192,
- 63,231,249, 49,220,220, 24,147, 30,126,117, 40,124, 58,243, 83, 68,205,245,102, 59,233, 63,148,199, 66,239,189,244,234, 81,140,
- 49,132, 0, 95,168, 6,168, 0,174,175,199, 13,229,176, 46,250,246,197,185,254,245, 40,146,155, 93,115,108,244, 67,105,173,225,
- 62,244,119,206, 89,107,161,191, 82,138,216, 60, 12, 67, 77, 0, 56, 44,169, 41, 6,224,134,173,244,151, 77, 72,161, 63, 98,113,
-108,185,187,251, 79, 68, 5,144, 58, 1,185,238, 2,104,144, 78, 2, 83, 82,250, 3,211, 16, 25,221,100,200, 88, 16,176, 43, 64,
-124,233, 15, 44,238,129,165, 63,116,148, 99,221,250,181,224, 91,252,128,149, 1,131,147, 35, 3, 3,225,101,160,144, 85,137,144,
-177, 32, 96, 19, 21,114, 9, 42,176, 8, 38, 34,249,130,138, 90,248,189,240,164,150,254,144,230, 63,214,198, 62,121,157, 0, 72,
-181,145,147,147,131, 51,160,130,131,145, 47,133,143,137,137, 97,192,184, 20, 62, 54, 22,231,189, 17, 20,206, 1, 48,144,117, 41,
-188,176,176,240,219,183,111,129,237,253,215,175, 95, 3,123, 0,240, 75,225,129,253, 54, 96,124, 1, 75,127, 96, 53,128, 54,184,
-143, 12, 32,165, 60,100, 20, 8,237, 38, 50, 60,186,208, 74,127,200, 38, 0,100, 46, 25, 13,127,226,199,127,128,224,246,237,219,
-192,232, 0,122,208,210,210, 18, 72, 2, 3, 13, 88,158,110,218,180,137,153,153,153,152, 10,128,146, 86, 60,178, 9, 36,233, 50,
- 6, 3, 32,227,220,185,115, 64, 55,219,216,216, 0,147, 22,176,151,137,188, 96,122,196, 2,200, 42, 32,180, 73, 96,228, 85, 64,
- 0, 1,216,187,130, 20,134, 65, 32,248, 1,159, 32,248, 12,207,130, 63,242,149,130, 79,240,228, 55,188,116,154,129,101, 91, 75,
-220,228, 80,122,232,158, 36, 36, 16, 54, 58, 51,113, 71,246,119,139,192,223, 68,127,205, 1,151,180,255,199,241,147, 3,108, 19,
-151, 3, 8, 46,125,100,172,214,186,125,118,237, 11, 79, 71,208,246,253,165, 41,252,170,161,104,164, 59,241,228,173, 39,191, 72,
- 39, 64, 70,160,191,108, 40,173,129,239, 24, 66, 96,255,119, 16, 0,189, 64,250,162,110, 41,254,206,117,175,231, 0,236, 53, 0,
- 61, 9,145,147,156, 51, 16, 65,239,152,157,231,202,123,223,123,103,231,181, 57, 39, 25, 72,154,194,179, 38,108, 52,243,228, 35,
- 68,191, 91,118,114, 4,238,113,179, 94, 68,183,237,164,198,160,227,179,148, 2,249,159, 82, 2, 31, 56,231,198, 24, 70, 2, 16,
- 4,167,144,186, 87, 18,184,170,253,185,142,144,177,214, 26, 6,128,254, 24, 35,242,134, 95,153,127, 29,120, 27, 15, 1,196,130,
-153,223,200, 54, 11, 45,117, 34,183, 95,144,155, 69,180, 43,253,129,201,142,194,165,114, 36,105,127,252, 4,231,120, 61, 39, 39,
- 23, 65,237, 88, 7,166,137, 4,192, 2, 5, 88,226,239,221,187, 23,126, 47, 60,124, 49, 40, 49,117, 24,214, 75,225, 33, 59,110,
- 8,110, 10,195,172,212,115,115,115,241,148,254, 16, 32, 36, 36, 4, 25,226, 7,182,166,145, 27,254, 53, 53, 53,248,147, 28,133,
-251, 0,144, 67, 3,109,171, 4,193,250, 30,216, 21,219,182,109,219,159, 63,127, 62,124,128, 92, 10, 15,114, 9,176, 67, 0,228,
- 2,217,196, 55,228,129,246, 34, 47,253, 68,158, 30,192, 95,250, 51,144, 59,199, 67,121, 29, 80, 81, 81,113,240,224, 65, 96, 52,
-181,183,183, 3, 91, 12,192, 14, 16,100, 75, 4,193, 33, 62, 50, 90,241,200,122, 73, 5,192,154,233,233,211,167,200,251, 0, 46,
- 94,188, 8,236,186, 1, 91, 21, 68,174, 91, 29, 9, 0,109, 18, 24, 25, 0, 4, 16, 11,254, 66, 28, 87,223,150,214,128,140,210,
-159,206,249,164,165,165, 5,255,254, 70,130,149, 37, 37, 67,186,144, 66, 19,178, 12, 31,200,128,236, 5,131,223, 11,143,167, 92,
-131, 92,236, 14, 44,188,144,231, 0, 32,205,219,178,178, 50,252,165, 45, 86,189,164, 14, 25, 17,217,240,167, 86,151, 20, 57, 28,
- 48, 47,133,199, 95, 7, 0,131,197,219,219, 27,216,146,101, 99, 99,251,249,243, 39,176, 14, 0,134,176,128,128, 0,176,192,194,
-115, 80, 7,114, 62,130, 79,255, 2,237, 5,170,135,231, 29, 92,185, 12,146, 36,208,182, 13,147, 58,247,139, 57,230, 67,210, 40,
- 16,164, 14,128,111,254,202,202,202,130, 48,128, 61, 33, 60, 90,158, 61,123,134,188,219,107,197,138, 21, 4, 79,248,193,165,151,
- 36,112, 1, 12,208, 4,159,128,193,104,185,207,128,116, 39, 48,114,209,143,188, 10, 8, 32,128, 88,168, 88,190, 99,234,165, 79,
-109, 65,255,210, 31, 8, 68,193,128,108,237, 74, 96, 64, 45,199,192,199,127,144,203, 62,172,151,125,146,125,228, 3,133,122,177,
-246, 6,136, 4,100,207, 1,160, 37, 9,172, 93, 46,130,201, 6,216,173,188,123,247,238,254,253,251,191,127,255,254,247,239, 95,
- 3, 3,131,176,176, 48,130,113,119,226,196, 9,120, 55, 2, 46,130,204,198,149, 42,224,141, 3, 72,205, 1,204, 65, 4, 43, 27,
- 56, 8,163,236,254,100,178,115,144,180,180,116, 96, 96, 32,126, 53,205,205,205, 84,215, 59, 10, 72,170, 3, 48, 75,127, 32, 0,
- 8, 32, 22,106,149,161,163,167, 53, 13, 56, 64,139, 2,226,143,132, 29, 66,158, 26, 16,163,148,193,128,120,245,192,254, 13,145,
-231,252,224,105, 28,144, 81,221, 82,171,134, 38, 21,136,137,137,145, 29,182,148,232, 29, 5,196,215, 1,184,164, 0, 2,104,244,
- 82,248, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70,111, 4, 27, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,
-163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,
-130, 17, 10, 0, 2,136,134,151,194,143, 94,192, 61,170,119,136,234,221,236, 55,133,120,189,190,155,114,168,165,119,163, 47, 9,
-122,253, 55,163,232,245,177, 1, 93, 47,202,200,200,248,251,247,239,251,247,239,255,250,245,139,133,133,229,201,147, 39,145,252,
- 10, 59,207,156,249,174, 39,107, 97, 97,193,204,204, 12, 89, 68,187,229,200, 83,106,133, 21,196, 94, 56,128,236, 80,185,122,245,
-170,148,148,212,187,119,239,128, 36, 39, 39, 39, 3,108, 67, 31,154,189, 88,245, 62,190,178, 36,221,246,209,178, 51,106, 44, 98,
-110, 60,188,124,184,244,142,166,103,226,245,226, 1, 0, 1, 68,194, 81, 16,248, 55, 37, 82,241, 2,110,147, 51,107,174,191,124,
-207,203,204,172,199,205,180,203, 54,129,160,250,255,255,255, 50, 50,226,220,245,247,239,255, 47,134,255, 12, 76, 76,108, 4,205,
- 25, 18, 23,112, 15, 54,112,243,230,205,254,254,254,222, 42, 16,123,195, 97,208, 25, 0,120, 20, 63,120,242,248,233,147, 39, 55,
-111,220,120,255,254,189,188,188, 60, 15, 47,175,135,171, 27,126,243, 33, 71, 36, 65, 0,174,203,203,128,226,196,199, 20,100, 23,
- 52,214, 59,132,241,129,208,119,144,180, 6, 58,136,105,181, 16, 9, 26,141,251, 25,148,226,193,201,107, 1,195,217, 34,146,195,
- 55,228, 13,194,222, 53, 34,120, 20, 2, 75,207,175, 95,191,238,218,181, 11,152,140, 67, 89,133, 37,100, 69,127,124,253,206,249,
-237,143,117, 73,170,157,111,248,150,185, 51, 54,239,221,235,230,230, 70,135, 36,241,247,239, 95,160, 27,244,245,245,213,212,212,
-206,157, 59,247,227,199, 15, 85, 85, 85,204,195,225,177,130, 63,127,254, 92, 60,115, 94, 38,217,176,204, 76,251,196,174,158,181,
-151, 29, 84,117,156,136,212, 59, 10,200, 0, 0, 1, 68, 84, 5, 64,204,145, 62, 84,185,128,219,245,242,122,185,151, 15, 24, 88,
- 25,152,255,253,249,247,225,203,179, 55,140,127,174, 84,252,116, 12,229,214,192,115,116,215,255, 83,151,107,126,255,102, 17, 22,
- 98, 97,102,102,249,249,147,233,198, 45,230,111,223,216, 76, 12,254,253,250,195,120,232, 4, 15, 80, 69,124,112,168, 0, 31,225,
- 10,128,164, 11,184,113,213, 28,180,190,178,131, 1,114,140,101, 61, 35, 99, 19,214,186,240, 63, 80, 42,236,122, 40,125,150,132,
-195, 74,255,255,224,210,223,238,200,145, 35,120, 42, 0, 61,253, 93, 90, 90, 38,171, 87,243,157, 60, 14,218, 6,117,235,198, 77,
- 32,153,146,184,238,227,151,156,207, 31,240,157, 36,225,234,234, 10,172, 6,128,165,252,190,125,251,176,158,148, 71,252,166,127,
-204,148,156,145,158, 62,131,184,202, 3,249, 26,122, 18,128, 82, 60,226, 80, 54, 50, 42, 0,152,239,240,156, 60, 10, 1,119,239,
-222, 61,176,106, 85,147, 75,152, 65,116, 22,155,184, 32, 3, 11, 19, 3, 3, 19,176,249,195,240,143,245,223,207,255, 94,241,105,
-143, 38,117, 28, 59,118,204,202,202,138,214,133, 41, 19, 19,147,129,129,193,129, 3, 7,128,117,128,153,153,217,139, 23, 47, 46,
- 94,188,168,167,167, 71,204, 49, 51, 64,207, 58, 59,185,182,247,109, 42, 79,184,108,225,145,105, 97,190,167,100,242, 19, 53,211,
- 56,172,122, 33,177,137,191,122, 0,202,146, 92,217, 15, 35,128,118, 33, 48,162,239, 5, 91,253, 15, 16, 64, 44, 68,102, 24,131,
- 56,221, 76,235, 28,226,235, 0, 50, 46,224, 54,190,119, 92, 65, 92,138,193,192,140,145,135, 95,127,215,170, 55,255,126, 63,255,
-248, 89,139,227,223,133,109, 75, 63,255,103,224,213,196, 94, 7, 0, 99,158,155,139,229,223, 63,214,143, 31,217,216, 88, 88, 56,
- 57, 89, 29,173, 24,254, 1, 19, 33, 35,235,171,119, 12,108,172,172, 44,140,191,254,252,254, 77,108,110, 37,177,236,134, 31,217,
- 8, 57,136,106,235, 13,214, 31,191,127,167, 39,154, 16,172, 6, 8,214,169,248,246,127,214,131, 50, 3,228, 22, 36,172, 82,196,
-128,219,123,249,122, 86, 69, 66,216,197,161,203,213, 92, 62,145, 81,250,247,245,245, 1,115,123,113, 27,244,226, 39, 60, 57,220,
-193,225,163,154, 26,176,233,189,217,214,118, 18, 92, 48, 42,138, 1,124,135,219,148,229,171,240,213, 1,144,210, 31,114,176, 87,
-120,120, 56,228,212, 35,130, 5, 34,214,182, 63,228,192, 12,184, 59, 51, 50,136, 45,253,201, 4,198,125, 12,176,139,218, 65, 21,
-128, 81, 47,195,185, 98, 26, 89, 5,172, 29,167, 7,166, 41, 58,185, 50, 48,255,100,100,101, 98,100, 97, 98,100,102,253,255,159,
-241,223,215, 63,255,255,254,253,255,235,111,106,124, 86, 86, 93,254, 93,113,113,146, 54,181,145, 1,128,121, 65, 82, 82, 18, 24,
-206, 7, 15, 30,188,113,227, 6,176,254,182,180,180, 60,121,242,164,182,182, 54, 65,189, 71,246, 46, 15, 50,248,118,246, 51,115,
- 84,253, 23, 27,195,137, 57, 5,225, 61,229, 31,202,123,150, 42, 25, 70,225, 41,220,225,197, 11, 48,138,209, 68, 40, 57,143,114,
- 36, 0,128, 0, 98, 33,166,144, 90,182, 99,169,178,138,114,122, 83, 42, 49,117, 0,121, 23,112, 91,221,220,167, 45, 47,203, 40,
- 37,203, 16,152,245,255,235, 87,134,119,111,133, 94, 61,253,125,116,235,215,119, 63,185, 25,254,190, 56,184,233,159,148, 10, 63,
- 63, 63,214, 26, 0, 88,250, 63,125,206,114,245,182, 56,232,200, 66, 6,102,126,222,191,134, 90,223, 21,229,153,216, 88,152, 88,
- 89,216, 68, 5, 24,127,254,252, 1, 63, 67, 31, 15, 32,245, 2,110, 72,233, 15, 41,250, 65,126, 63,242,251,251, 47,208, 5,191,
-206,229,187, 59, 59, 93, 9,154,115,183,227, 46, 43,227,109,104, 52, 48, 62,101, 20,209,128,177, 95,137, 38,226,219, 28, 15,108,
-251, 35, 95,102,130, 34,149,190, 26, 44,133,175,249,255,230,178,100,205, 20,255,255, 12,255,219, 11, 54,152, 59,168, 45,155,118,
-184,119,117, 20,195,234,255,245, 69,211,164,212,137,109, 74,127,121,152, 46,205,193,240,237,237, 85, 96,227,139, 87, 76, 15, 82,
-250, 79,159, 62, 29,171, 98, 94,129, 43,106,106,192, 50,247, 24,176,159,112,242, 36, 3,248,206, 62, 16,128,239,240,143, 12,155,
- 50, 99, 78, 53,211, 63, 89,172,218, 33,165, 63,176,237, 15, 44, 83,240,220, 59, 70,176, 41, 3, 41,253,145,234,131,244, 25, 51,
-176, 39, 75,166,176,247, 12,176, 20,195, 8,198,255, 66, 81,101, 25, 33,163, 50, 32,202, 27,181,207,195, 20,254, 30, 50, 96, 3,
- 26,126,252,151, 80, 80, 80, 0, 17, 7, 50,128, 53, 1,147,106, 50,212, 96,176, 26, 52,189, 44,225,232,246, 34,223,195, 8,146,
-197,109,239,143, 31, 63, 36,228, 21, 24,254,253, 98, 98,103, 96,100, 97,254,243,249,227,143,123,247, 95, 63,121, 42, 99,229,192,
-200, 38,192,248,251, 23, 3, 51, 83,103,102,137,235,172,134,162,162, 34,178,203, 11, 92, 71,140,192, 75,100, 96,122,248,254,253,
-187,144,144, 16,176,125, 0, 12,237,251,247,239, 47, 88,176, 64, 83, 83,243,195,135, 15, 4, 59, 88, 64,189,242, 76, 39, 37,229,
- 60, 62, 28,188,252,241, 61,251,226, 45,127,182,157, 88,146, 23,202,201,242, 13, 24,107, 81,216,251,187,163, 0, 47,192,140, 44,
-180, 62, 1, 64, 0,177,224, 47,250,129, 65,236, 88,101, 63,235,224,204, 52,134,244, 11,139, 46, 51, 88, 19,182, 18, 82,238,127,
-251,182, 20, 24,167, 63,126,204, 19, 18,218, 67,204, 5,220,234,111,174, 51,104,104, 50,120, 37, 48,124,126,195,248,246, 29,131,
-184, 36,195,167,119,188,204,255,249, 56, 24, 36,126, 50,188,250,242,225,251,190,245,252,129, 9,216,135, 62,191,177, 92,191, 45,
- 4,236, 60,114,179,126,103,102, 98, 6,182,125, 94,190,228, 86, 87,249, 39, 35,201, 24, 23,250,247,255, 63,166, 15,239, 88,136,
-169, 0, 72,189,128, 27,185,244,103, 96, 97,190,247, 28,148,123, 31,189,252, 33, 39,206,161,154,176,185,179,211, 23,191, 33,192,
-210, 31, 88,238, 51, 51,190,249,251, 95,132, 93,140,145, 59,226,217,191,127,239,126,252, 88,253,247, 76, 25, 37, 61, 21,130,181,
- 87,245, 20, 63, 75,161,154, 41, 27,146,121,152,228,128,220,172, 92,117,125, 51,165,165, 83, 15, 54,246,101,207,156, 73,108,103,
- 25, 88, 4,165, 23, 94,129,132,191,141,141, 13,176, 2,192, 85,250,131,106, 68,135,183, 12, 12,151, 24, 24,174,124,120,201,163,
- 42,199, 48,123,246,151,253,251, 25, 84, 85,129, 78, 5,149,114, 64, 65, 80, 23, 83,247,250,165,139,178, 88, 75,127, 96,219,246,
- 31, 24, 48,128,239,147, 33,181,192,130,179,145, 75,127, 6,208, 52, 0,206,216, 1,118, 11, 32,101, 56,214, 90,246, 31,172,220,
- 1, 54,118,128,225,176,249, 16,202,132,219,244, 25, 51, 33,253, 11, 5, 5, 5, 96,246,153, 56,113, 34, 68, 28,200, 0, 86, 0,
- 59,119,238,132,159, 91,201,128,161, 23,210, 29, 1,234, 74, 77, 77,197, 50, 62, 14,235,244,204,154, 61, 27,104,239,150,195, 79,
-209, 74, 67, 22, 94, 94, 6, 86,230,191,223, 62, 92,223,182,119,233,170, 53,211,158,129, 44, 58,213,200,167,106,231,245,243,209,
-227,171, 23,207, 94,190,127,235,227,139, 23, 87,174, 0, 35, 78,130,140,210, 4,243,216, 53,204, 18,252,217,179,103,181,181,181,
- 61, 61, 61,191,126,253, 2,102, 73, 94, 94,222,175, 95,191,158, 58,117, 10,127,178,132,232,253,240,228,104,227,252, 71,115, 11,
-164,222,125, 5,246,230,153,100, 4, 57, 94,188,249,149,222,245, 71,223,196, 88, 14,119,175, 14, 82, 13,192, 35, 26,147, 49, 10,
-208, 74,127,228, 90, 1, 32,128,152,112,229, 25,200,185,231,136,222,186, 71, 52, 49, 22, 64,110,128,249,246,109, 25,164,244,231,
- 56,253,224,219, 78, 21, 6, 66, 55,195,200, 28, 92,193,250,251, 59, 35, 43, 35,195,243, 7, 12,191,255, 48, 60,190,246,255,229,
-115,198, 55,207,121,254,252, 99,101,248,207,244,159,231,205,183, 63, 29,187, 79,224,210, 46, 45,193,226,226,192,160,173,246,139,
-133,153, 21,216,228, 23,225, 97, 55,212,103, 98,101,101, 99,103, 99,255,255,143,253,225, 19,118,208, 21,126,255,136,106, 44, 64,
- 46,224,134, 4, 2,254,211, 58,129,178,200,151,138, 68, 78,120,178,247,236,123, 96,233, 15,169, 3,110, 63,249,206,224,178, 10,
-191, 9,192,210, 31, 84, 13,124,190,204,205,125,135,157,227, 51,176,244,255,253,251, 44, 51,179,210,175,175,111,105,151, 2,238,
-158,255, 2,140, 26,120,233,255,252,230,127, 35, 95,230,220, 22, 87, 27, 87, 96,247,252, 63, 88,150, 48, 88,182,108, 89,113, 27,
- 35,143,168, 46, 48, 76, 61, 2, 51,143, 28, 57,130, 71,241, 63,166,199, 98, 98,208,210,255,243, 91,208, 41,217,250,250,160,210,
- 63, 46, 14, 90,250,127,126,203, 9, 68, 66, 92,207,177,106, 15, 9, 9,113,116,116,116,114,114, 10, 15, 15,103, 70, 5,112, 17,
-252,174, 69, 75,201,196,214,112, 72,101, 19, 4, 96,114, 25, 25,176,180, 43,224, 26,221,220,220,208,218,218,192, 78, 0,228,216,
- 62,196,240, 37, 42,216, 48,115, 38,176,116,134, 24, 14,247, 38,124,112, 28,206,197,106, 47,219,255,255, 76, 92,236,191, 95, 60,
-156, 89, 83,179,224,235,135,247,246, 22, 16,241,185, 75, 22, 52,148,164,168, 21, 69, 54, 93,222,183,234,253,125, 87, 63, 63, 34,
- 59,184,192,226, 30,152, 11,206,159, 63,143, 84,101,206,192, 58,202, 7, 9,144,203,151, 47, 31, 60,120, 48, 50, 50, 18,216, 75,
-251,242,229, 11,228, 0,109, 96,191,132,135,135, 39, 44, 44,204,218,218, 26, 87,209, 15,210,123,124,237,173,157, 69, 69,149,189,
-155,235,165,174, 63,101,249,248,133,249, 31, 35,195,219, 47,191,254, 11, 43, 23, 86,181,250, 4,196,224,172,170,129,213, 56, 56,
-195,206, 4, 3,172,140, 81,128,171,244, 7, 2,128, 0, 98,193, 90,244,147,209, 49, 68, 19, 1,150,254,104,221, 2, 60, 23,112,
-243,127,120,252,159,241, 3,227,249, 99,255, 63,125,102, 20, 19,103, 96,227, 97, 60,179,151, 65, 84,140,129,153,229,207,175,255,
-191,254,254,123,247,143,225, 63, 35, 46, 87,253,127,243,142,229,248, 25,118, 41,113,150, 80,255,223,172,172,192, 54, 16, 35, 51,
- 51, 11, 51,248, 14, 11, 14, 54, 70, 49, 81,134,143,111,255,146,116,207, 1, 49, 23,112,163, 52,255, 25, 24,150,231, 72,194,217,
- 38, 21,247, 88,255,191,249,205, 40, 66,240, 10,111,142, 47,251,133,154,150,188, 46,206,120,243,142, 83,234,247,213,191,127, 65,
- 21,198,195, 11, 18,180, 75, 4, 93, 51,138, 83,220,102,194, 75,127,136,160,133, 96,141,149,118,136,165,208, 85,160, 44,193, 60,
-179,116,233,210, 67,135, 14,189,125,235, 44, 44,188,151, 71, 68, 7,152, 90,152,152,152,240,204,179, 61,122, 4,172, 44,175, 64,
-198,141,128, 30,126,247,149,193,204, 12, 60, 9,113,155, 97,234, 84,134,207,159, 24,190,126, 97,248,242,149,129, 91, 16,223, 36,
- 4,230,136,255,221,187,119,129,100, 91, 91, 27,144, 84, 83, 83, 35,111, 52, 3, 30,221,120,148,229,231,231,195, 91,241,200, 69,
- 57,126,195, 21, 21, 21,225,163,255,112, 0,233, 4, 0,165, 16,157, 0, 84,144, 44,173,118,235,234,181,167,130,130,192, 32,205,
-203,203,155, 52,105, 18,241,246,218,254, 20,248,255,239, 75, 74, 91,181,110, 72,200,204,182, 54,248,253, 45, 51,111, 67, 2, 31,
-116, 76,255,238,221,187,129, 86,131, 51,248, 55,130,165, 63,164, 75, 7, 12, 28, 96, 43,219,192,192, 0, 88, 19, 0, 53,102,102,
-102, 62,254,140,165,138,125,242,228,137,191,191, 63,208,107,219,182,109,131, 92,153,201, 0, 94,210,195, 0,190, 71, 8,207, 60,
- 45, 80,252,222,205, 11, 13,101, 73,194,170,171,207,175,142,191,244,152,241,209, 75, 22, 96,171,239,231,175,223,239,254, 11,103,
- 39,103,145,183, 4,136,146,123, 77, 70, 20, 0, 8, 32, 44, 67, 64,192,106, 28,153,251,225,233,123, 98, 74, 76,120, 15, 0, 60,
- 4, 4,138, 48, 96,243,159,253,202,211,191, 2,160, 70, 31,254, 11,184, 47, 60,120,245,147,251,175,250,247,243,210,143,110, 49,
-168,232, 49, 48,253, 97,224, 19,250,121,241,230,215,207, 76, 95,255,254,255,244,239, 15, 63, 3, 59,195,255, 63, 56, 18,208,191,
- 47, 95,152,217,152,255,124,250,200,116,234, 18,171,131, 57,203,191,127, 44,143, 31,179,158,187,194,201,195,206, 40, 33,202,100,
- 99,249,251,202, 59, 96, 33, 69, 90,130, 32,166,149, 84,190, 26, 20, 50,157,161,130,144, 66, 31, 58,176,243,255, 13, 43,176,117,
-255,255,253,162, 20,193, 72,188,119,210,177,190, 60,253,151, 1, 52,250,209,195,194, 31,249,242,225,153, 46, 25,110, 9,205,143,
- 79,159,190,120,240,140,166, 81,174,111,166,244, 21, 28,165,223, 56,175,113,125,215, 90,215, 8,157, 33,183,118,209, 62,190,138,
-112,219, 63,208,238,208,134, 13, 46, 2,199,247,244, 87, 51, 20,182,254,183,179,179,195,191,244, 83, 65, 70, 22,121,210,113,203,
- 22,208,220,239,178,101,192, 78,192,255, 9, 19, 24,155,154,190,128, 42, 6, 6, 6, 85,117,193,226, 66,124, 86, 67, 26,191,192,
- 14,193,202,149, 43,225,237, 98, 15, 15, 15,204, 82,146,248,106,158,160, 26, 96,137, 9, 44,178, 49, 43,128,190,190, 62,228,245,
-169,152,192,197,197, 5,126, 21, 59, 50, 0, 10,246,247,247,227,234, 16, 31,186,246,168,170,169, 36,185,190,172,242,215, 47,160,
-165,152, 94, 3,218,187,103,207, 30,172,101,162,157,150,220,188,185, 83,141,163,162, 26, 27, 27,177,214, 19, 64, 65,160,246,217,
-179,103, 19, 19, 56,192,210, 31, 50,197, 10,172, 38,103,192, 0, 80, 4, 88, 19, 60,198,182,198,252,247,239,223, 91,182,108,113,
-118,118,190,125,251,246,215,175, 95,129, 92, 96, 13,244,235,215, 47,200,181, 57,248, 75,240,159, 63,127,158, 93, 27,101, 23,212,
-180,243,224,221,251,207,153, 63,125,101, 98,102, 97,120,250,149, 51,175,162,154,160, 94,200,212, 14,254,177,160, 81,128,171,249,
- 15, 4, 0, 1,196,132,150, 37,128,192, 1, 12, 46,194,192,189,211, 15, 63,126,255, 40,108, 70,212,218,103, 72, 41,207,197, 21,
- 13, 44,253, 89, 31,190,253,207,200,200,150,252,150,129,208, 5,220, 44, 60,108,127,254, 51, 60,248,241,235,217,235, 55,127,175,
- 28,100,184,120,234,231,165,243,191, 63,188,125,243,253,223,251,175,156,183,127,254,127,203,192,252,227, 47,214,210,255, 47,176,
- 63, 44, 45,197, 44, 47,247,159,133,153, 5,152,230,128, 45,255,175,223, 88,111,222,226,228,231,100, 17, 21, 98, 55, 53,100,226,
-224, 96, 7, 15, 89, 19,104, 68,144,113, 1,247,163,151, 63,246,158,125, 15, 47,250, 33,165, 63,251,191,135, 64,212,224,206,242,
- 8,216,244,197, 11,214,222,255, 39,218, 11,109, 56,223,255,250,247,201,221,167, 55,143, 94,125,241,224, 3,173,147,194,178,105,
-160, 10,254,211,171,255,192,210,223, 33,153, 37,168,158, 21,130,122, 87, 69, 49, 50, 48,226,207,108,254, 54, 7,227,139, 92, 4,
- 79,236, 5,230,186,141, 71, 29, 24,192,199,229, 19,180, 81, 77, 67, 29,169, 10, 97,152, 50,133,225,206, 29, 80, 63,160,177,241,
- 63, 28, 8, 10, 10,226, 28, 68, 2,143,221,255, 5, 3, 96,147, 31,216,246,191, 5, 6,192,162,176,164,164,132, 96, 56, 83, 2,
- 32, 77,117,180,242, 20,216, 39, 0,122, 31, 87, 43, 30,222, 2, 69,107,254, 67, 0, 86, 65, 56, 56,204,254,129,145,137,103, 78,
- 85, 43,207,150, 61,192, 44, 3, 63, 83, 58, 93, 85, 39,223,216,138,139,139, 11, 88,221,214,214,214, 2, 61,142,121,139,214,220,
-167,183,158,107,107, 73, 75, 75, 3,131, 11,179,198,130,244, 63,136,239, 27,193, 23,216, 0,155,252, 12,176,205, 19, 88, 47,146,
-131,120, 86, 86, 86, 22, 24, 17,192, 78,134,138,138, 10, 11, 11, 11,164,134,182,176,176, 32,166,169,174,172, 97, 56,107,151,192,
-165,109,245,182,150,154,220, 28, 76,220, 92,127, 57,217,127,122,250, 19,117,183, 1,176,188,130,184, 19,207, 88,208, 40,192, 3,
- 0, 2,136, 9,107,152, 2, 65, 62, 24, 0,185,205, 25,205,191, 95,253,225,228,228, 32, 50, 52, 33,117, 62,151,251,157,255,204,
- 76,181,235,190, 49, 16,113, 1,183,178,169,227, 55, 14,161, 23,255,217, 78,255,100, 60,249,254,247,229, 23,255,111,190,100,188,
-249,145,243,213, 55,174, 7,127,190,124,251,245,239,212,199,111, 88,111,224, 99,100,100,102,100, 96, 18,224,101,178, 52,102, 14,
-245,255,235,104, 14, 76,123, 44, 34, 66, 44,142, 54,140, 78,246,204, 86,230, 92,194, 34, 2,236,108,236,192,226,159,137,233, 63,
-254,210,159,212, 11,184,129,138, 65, 3,253, 12, 12,103, 58, 64,125,133,157,165,160, 21, 74,192,134, 63,243,255,175, 63,153,228,
-129,236,119,239,222, 17,115,131, 43, 48,112,128,249,121,217,151,175,223,127, 49,197,175,152,243,138,131, 19,200,160, 93,124,151,
-132, 45, 63,254,174,117,217, 98,104, 83, 31,216,252,183, 16,172,129,176, 91,179,183,204,192, 61, 9, 12, 44, 20,250,107, 24, 18,
-138,156, 5, 78,236,113,236,178,103,242,102, 56,112,224, 0,145, 73, 66, 94, 94, 30,206,118,114, 98, 16, 16, 0,118,176, 24,204,
-245,121, 57,216,152,153, 97, 61, 51, 19, 83, 83,156,105,148,137, 9, 50,226, 15, 44,250,213,144, 64, 19, 24, 60,123,246,140, 96,
- 17,131, 60,136, 15, 7, 25, 25, 68,181, 16,129, 45,125,180, 27,181,128,133, 56,254,230, 63,242,220, 3,188, 1, 11, 97,163, 77,
- 68,163,129, 95,140,140,255,190,253,100,149,144, 79,111,105, 73,224, 22, 16, 56,112, 28, 58, 52, 20,147,208,208, 51,231,118,223,
-242, 58, 93,167, 48, 65,197,221,155, 54, 97, 54, 80, 2, 50,210,181,117,116, 32, 19,212,127, 97, 0, 62,128,134,204,197, 58,224,
- 3, 44,220, 33,115,188,144, 65,127,120, 89, 15,108,242, 67, 26,215,192,154, 0,200,198,229, 83, 86, 86,214,128,128,128,143, 31,
- 63, 2,107, 38, 78, 78, 78, 81, 81, 81, 1, 1, 1,252,183, 72,194,245,178,179,179, 7,103, 76, 90,112,218,228,193,227, 79,226,
-252,204,150,234,140,122,138,255,185,249,248, 70, 75,103, 90, 55,255,129, 0, 32,128, 88,240,119,144,225,141, 98, 25,123, 41, 34,
-219, 14,240, 11,184,217,146, 87, 51, 16,119, 1,247, 61, 61, 23,150, 59, 55,126,124,249,244,233,231,239,215, 63,216, 95,254,248,
-174,197,194,246,244,255,215,247,255,127,127,254,253,127,239,199,255, 15,126,254, 11,198, 57, 38, 3,108,182, 50,190,126,207,120,
-250, 52, 59, 59, 43, 27, 43, 27,155,172, 36,155,163, 45, 19, 27, 27, 11,176,163,252,240, 17,227,229,171,156, 98, 34,204,127,255,
-254,199, 95,250, 51,144,120, 1, 55,104,140,168, 51,140,213,121, 26,144,249,246, 45,116,218,150,237,223,243, 95, 76,146,217,186,
-183,158, 63, 7, 21, 19,248,203,199,140,117,179,224, 85,227,106,216,125,181, 43, 46, 31,163,233, 30, 46, 85,231, 79, 12,171,254,
- 31,221,115, 21,200,182,210, 6,237,170, 45, 43,168, 63,118, 85,187,103, 85, 84,213, 84,111,252, 14, 6,182,253,133,132, 32,163,
- 90, 7,192, 53,156,203,255,255,171,193, 5,235,255,213,171,241, 93,144, 27, 18, 20,188,123,231, 46, 6,240,194,127, 71, 71,198,
- 55,143,249,191,190,231,248,254,137,109,197, 66,198,252,252,255, 15, 95,125, 54,183,180,208,211,214,193, 63, 7, 0, 25,244, 7,
-166, 43, 6,240, 37,130, 16,241, 87, 96, 64,204, 56, 15, 48,102,129, 21, 9,114,249, 11,108, 50, 18,179, 11, 12, 50,104, 14,159,
- 9,128,244, 6,240, 55,255, 25,144, 86, 61, 32,175,231,193,191, 20, 2, 82, 87,253,249,252,153, 85, 68,136,153,139, 71, 59, 56,
-164,201,205,181, 10,178,148,211,208,232,239,247, 31,172,194,226,186, 22, 14, 10, 50,138,147,174, 31,215,209,209,121,126, 26,229,
- 70,210, 12, 80,210, 5, 85,114, 89,192,178, 27,188, 90,244, 15, 82,137, 15,108,148, 3, 69,224, 11, 76,189, 81,203, 2, 96,201,
- 14,244, 35,100,156, 7, 24, 98,144,161, 30,100, 89, 60,165, 63,196,217,192,226, 30,216,222,191,113,227,198,185,115,231,128,145,
-197,205,205,253,237,219, 55, 34, 7,235,197,197,197,253,253,253, 79, 28, 57, 53, 97,245,110, 62, 70, 54,117,241,159,119,222,112,
-219,168,255,134,215, 16,184, 6,244,129,226,240, 12, 59, 58, 4, 68, 30, 0, 8, 32, 22, 98,198, 73,129, 65,249,228,224, 51,134,
- 40,162, 74,127,120,137,134,102, 14,254, 58, 64, 86, 76,248,220,215,223,175,153,126, 63,250,241,147,243, 23,203,134,159,159,126,
-252,253,247,224, 7,195,233,111,223,129,241,234,225,225,129,107, 80, 30,146, 62,132,248, 24,117,117,254,220,186,205,206,196,200,
-248,251, 15,211,167,207, 76, 98, 34,140, 31, 63, 51,222,188,197,202,206, 10, 76,253, 44,255,254, 49,225, 47,253, 25, 72,191,128,
- 27,188,102, 52, 11,216, 7, 0, 54,246,129,253,223, 78, 87,134,242,221,118, 5, 58,199, 32,141, 68,130,205,127,228,142, 17, 50,
- 27, 82,198,225,111, 52, 49,212, 51,154,204,186,135, 57, 87, 1,221, 9,188, 7,223,229, 80,109,217, 91,170,167,250, 30, 95,245,
-223, 82,232,170,181,139,246,145,221, 87, 79,188,111, 1,214,162,173,217,155,129, 69, 43, 30,123,129,165, 63, 48,168, 3, 3, 3,
-103,207,254, 4,201,146,140,176,245, 40,161,161,136,232,222,124,216, 18, 83,111,118, 94,238,212, 73,147,129,205,255, 95, 47,100,
- 31,127, 96,255, 7,234, 59, 49, 72,126, 21, 47, 77,251,188,251,132,186,150, 37,190, 58, 15, 82,244, 67,110,121,125,241,226, 5,
-164, 79,240,242,229, 75, 6, 82,230,250, 32,147,153,104,163,231, 51, 64,130,233,120,214,131,194, 99, 4, 62, 19, 0,236, 13, 16,
-211,252, 71, 46,164,136, 87, 12,108, 50,191,120,248, 64, 81, 89,245,223,159,159,140,127,254,178,240,242,241, 26,153,240, 24,154,
-254,251,250,231,239,183,159,255,255,252,101,248,251,175,124,122, 79,120, 84, 56,102,227,250,207, 10, 65, 60, 38,163,201,250,111,
- 70, 87, 0, 44,226, 33, 35,254, 12, 72,247, 0, 35,215, 1,248, 61,168,174,174, 62,121,242,228,215,175, 95,187,186,186,158, 57,
-115, 6, 88,250, 3,181, 16,188, 51, 21,162,215,194,220, 60, 35, 57,227,254,147,251,177,201, 25, 39,119, 47,124,254,249,157,137,
-189,171,184,140, 26,122,194,198,150, 17,224, 5, 20,230,254,175,209,141, 96,196, 0,128, 0, 98, 33, 50,243, 16,217,246, 71, 46,
-209, 72,186,128,251,190, 77,164,160, 13,195,221, 89, 61,239, 56, 25,223,254,255,254,243, 31,179, 56, 11, 7, 19,199,191,255, 95,
-191,225,191, 19, 21,216,166,187,115,143, 81, 76,132, 65,128,159, 81, 71,235, 15, 59, 43, 51, 27,235,159, 95,127,216, 95,191, 99,
-120,246,244,173, 32, 47,203,237,251, 44,252,252, 2, 63,126,252,192, 95,250, 51,144,126,138, 3,100,223,128,137, 9,104,223,175,
-144,144,208,243,231,207, 11,116,158,195, 75,127,130, 70, 97,189,162,150, 40, 0,222,238,139,188,219, 14, 77, 10, 63, 16,214,123,
- 58, 99,230,140, 91,123,248,122, 87, 71, 30, 95, 5,234, 64,149,132, 45, 7,245, 12,240,150,254,144,136, 3, 23,244,159,192,121,
-143, 1,173,100, 91,208,187, 23, 72,114,203, 1,243, 33,150, 73, 66, 96, 3, 31,104,130,136,216,174,191,159,207, 48, 50, 51,124,
-251,193,201,248,249, 15, 11, 19,139,184,178,166,155,156, 23,203,127,156,206, 6, 22, 40, 42, 42, 42,148,167, 79,200, 48, 49,176,
- 14,128, 47,143,129,247, 3,136,159, 9,128, 20, 67, 4,155,255,100, 3, 39, 39,167,236, 85,179,154, 62,127, 48,176,183, 97, 18,
- 23, 4, 89,247,251, 63,232, 56, 7, 6, 86, 70,102, 22, 70, 54,230,217, 51,250,248,156, 77,148,149,149,169,190, 7, 10, 50,212,
- 51,125,250,116, 32,169,175,175, 79,146, 94, 96, 13,189,119,239, 94,102,102,102, 91, 91, 91, 96,240,162, 13,253, 3, 59, 4,192,
-130, 30, 45,216,225, 0,216, 99, 88,180, 96, 33, 27, 51,123, 72,100, 8, 80,141,141, 87, 10, 74,189,245,231, 15, 68,239,232,170,
- 30, 90,140,255, 0, 1, 64, 0,177, 80,203, 26,170, 92,192,109,146, 86, 2, 44,148,127,237, 92,199,244,237,231,219,191,255, 21,
-205,108,236,229,228,240,151,164,192,100,167,167, 30, 7,222,235,203,196,242,255, 39,184, 97,192,240, 26, 54, 42,192,202,193,160,
-165,137,179, 33, 6, 41,193,201,187,128, 27,110, 2,100,205, 40,188,189, 15,100, 16, 83, 30, 65,236, 37, 47,168,195,174,135,130,
- 3, 19,139, 59,195, 8,245, 30,224, 64,205,229,211, 76, 23,184, 59,137, 61, 7, 2, 92,202, 51,198, 23, 65,207,231,130, 4, 42,
- 80, 16, 88,238,115,203,133, 18,212,254,242,185,219, 75, 6,183,127, 76,143,249,249, 62, 50, 8, 49,128,142,127,248,197,192, 66,
- 98,210,162, 4, 64,234, 0, 50, 52,194,103, 2, 72,106,254,227,105,189, 98, 5,192,146, 93, 34, 47,111,194,174, 93,247,154, 55,
-132,178, 10, 11,128, 15,116,251,254,237, 79,126, 73, 37, 51,151,208,182,133, 51, 47,138, 48,186,145,114,152,207,223,191,127, 24,
- 24,136, 45, 58, 9, 14,245,224,242,221,173, 91,183,128,164,134,134,198,219,183,111,129,189,109, 96,169, 45, 44, 44,204, 0, 59,
-159,142,141,141, 13,210,105,195,170,247,212,169, 83,255,254, 48, 90, 89,235, 3,123,120, 64,149,191,126,253,146,145,145,129, 72,
-125,252,248, 17,216,209, 1, 26,194,206,206,142,167,221, 9,201,218,200,140,209, 33, 32,226, 1, 64, 0,177,208,200, 92,178, 51,
- 45,232, 62,236,204, 18,146,180,112,112,112, 2, 17,249,214,145,117, 1, 55,102, 53, 64,134,189,228, 89,135,199,181,180, 62, 3,
- 14,220,192,103, 0, 31,198,131, 44, 24, 74,146, 33, 76,255,100, 63,127,144, 29,168, 20, 79,222,209, 96,192, 86, 63,193, 17,124,
-172,128, 36, 93,192, 82,143,139,139, 43, 48, 48, 16,114,164,243, 35,216,145,206, 71,247,238,134, 28,233,236,108,225,140, 75,239,
-236,247,237,169,130,149, 40, 66,120, 79, 15,197, 85, 7,144,225, 71, 83, 83, 83,200,146,127, 96,119, 28, 88,130, 3, 25,175, 95,
-191, 6,146, 60, 60,160, 85,206, 16, 17, 86, 86, 86,172,254,245,241,241,129, 40, 0,234,133,116,211, 33,203,186, 32,171,194, 32,
- 34,192,138, 1,107, 3,110,116,145, 15, 49, 0,255,173,239, 0, 1, 52,122, 41,252, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,
-163, 55,130,141,130, 81, 48, 10, 70,193, 8, 5, 0, 1, 52, 90, 1,140,130, 81, 48, 10, 70,193, 8, 5, 0, 1, 52, 90, 1,140,
-130, 81, 48, 10, 70,193, 8, 5, 0, 1,196, 50, 26, 4, 67, 5, 24,226,184,220, 7, 15, 56, 63, 58,193, 51, 10, 70,193, 40,192,
- 13, 0, 2,136,134,151,194,211, 65, 47, 27,219, 46, 78,246, 23,172,108, 31,254,253, 3, 45, 73, 4,157,255,201, 8, 62, 5, 20,
-180,110,152,233, 63, 35, 11,136, 98,248,179,121, 43,235,255,255,255,245,244, 18, 6,131,155, 41,209, 43, 67,202,178,135, 39,168,
-203,224, 70, 47,209, 30,213, 59,170,119,100,234,197, 3, 0, 2,104,104,247, 0, 14, 29,185, 99,102,242, 91, 80,128,225,221,123,
-198,243, 23, 57, 88,152, 88,188,220,255,238,222, 47, 10, 44,246, 25,153,152, 56,120, 25,156,204, 62, 48, 48,176,216, 88,254, 63,
-117,134,128, 79,247, 31, 3, 29,106,207,250,255,183,185,173,211,199,151,143, 46,223,126,248,247,219, 15,250,220,172, 59,210,192,
-245,155,231,126,253,248,198,203, 43, 69,210, 66, 88,172,203,186,137, 92, 8, 72,137, 94, 8, 80, 84, 84,132, 28,229, 15, 57, 81,
-153, 36,255, 34,159,132, 72,222, 90,210, 81, 48, 10,104, 4, 0, 2, 8,189, 88, 92,184,104, 46,126, 13,241,113,201,184,164, 40,
+137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 0, 0, 0, 1, 0, 8,
+ 2, 0, 0, 0, 74,242, 89, 48, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0,
+ 4,103, 65, 77, 65, 0, 0,192,153,201, 12,156,227, 0, 0, 0, 32, 99, 72, 82, 77, 0, 0,110, 39, 0, 0,115,175, 0, 0,246,
+112, 0, 0,129,232, 0, 0,107,215, 0, 0,226,170, 0, 0, 48,131, 0, 0, 21, 42,251,118,133,113, 0, 0,191, 47, 73, 68, 65,
+ 84,120,218, 98,244,137,169,101, 24, 5,163, 96, 20,140,130, 81, 48,242, 0, 64, 0, 49,141, 6,193, 40, 24, 5,163, 96, 20,140,
+ 76, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,
+163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64, 44,112,150,175,
+173, 12,241,218, 54, 31,126,130,204, 29,213, 59, 8,245,162,105,167,186,189, 7, 14, 28,112,112,112, 24, 13,231, 81,189,163,122,
+ 7,185, 94, 60, 0, 32,128, 88,134, 71, 61,150,158,158, 14,103,207,156, 57,115, 64,108,159, 49, 99, 6, 35, 35,227,176,111, 50,
+192,131, 58, 50, 50,114,205,154, 53, 16,118, 72, 72,200,104, 99,106,248, 69, 52,253,179,210, 40,160, 51, 0, 8, 32, 22, 90,164,
+128,219,183,111,247,244,244, 64,216, 37, 37, 37,170,170,170,116,240,201,255,255,255,129, 36,253,139, 96, 96, 40, 61,120,240, 0,
+200, 80, 80, 80, 24,144,234, 7,107, 45,136,213, 37,192, 54, 59,126, 19,150, 47, 95,142,223,253, 64, 43, 86,173, 90, 5, 97,175,
+ 95,191,222,213,213, 21,194, 6,214, 4,180,171, 3,140,141,141,129,228,217,179,103,201,144, 29,153,224,222,189,123,157,157,157,
+112,110,121,121,185,146,146,210, 32,175, 54, 6,208,205, 35, 25, 0, 4, 16, 11,158, 66, 28, 66,146, 90,124, 67,138,161,198, 85,
+ 45, 60,178,252, 95, 30,127,172, 15,171, 25,216, 98,145,214, 0,232, 53, 96,209,255, 0, 12,118,236,216, 65,255,118, 19, 36,192,
+103,130, 1,144,221,213,213, 5,228,150,149,149, 97, 85, 28, 24, 24, 8, 97,252,249,243,247,215,239,159,191,126,254,130,128, 63,
+127,254,224,210,130,181,244, 71, 3,192,154,128,166,117, 0,158,218, 11, 82, 1,140, 2, 92,237, 0, 32,128, 20,172,116, 72,150,
+ 16,171,201,200, 2, 3,232,230, 17, 14, 0, 2, 8,103, 5, 0,108,194,175,170,173, 10,107,110, 35, 41, 14,128, 17, 9, 41,250,
+129,236, 55,223,222, 50, 8, 51, 84,238,109,248,116,239,125,122, 42,253,138, 69,204,196, 68,107,171,225,117,128,135,135, 7,144,
+ 4,178,233,233,217,253,251,247, 3, 25,142,142,142,104,117, 0, 30, 0, 44,238,127,253,250,253,235, 23, 74,233,127,230,204, 25,
+ 19, 19, 19,130, 54,134,133,133, 65, 24,145,145,145,187,119,239,134, 87, 0,100, 68, 16,145,161, 4,108,221, 3, 75,127, 55, 55,
+ 55,100,193, 93,187,118, 1,251, 43, 16, 54,214,169,136, 17, 94,250, 35,135, 45, 25,229, 50,217, 90,200,232, 7, 80,203,205,163,
+128, 12, 0, 16, 64, 44,184,154,255,106,106,106,170, 60,124, 36,117, 2,224,165, 63,176,232,111,119,110,128, 8, 38,110,204, 98,
+ 16, 99, 8,236, 10, 35, 24,151,152, 5, 55,121,101,247,227,199,143,129,164,172,172, 44,156, 1, 49,153,186,135, 94,160,121, 7,
+ 94, 7,252,254,253,103,198,140, 25,148, 55,130,136,209,142, 86,250,195, 53, 98, 13, 73,148,210,255, 55,176,244,255,249, 19, 92,
+ 9,192, 75,255,255,255,254, 19, 83,250, 3, 85, 66,216,189,189,189,240, 38, 63,124, 50,128,120, 55,163, 57,155,120, 0, 47,250,
+129, 53,144,161,161,225,104, 30, 70, 30, 69,193,154,120,224, 73, 2,168,128,224,184, 10,188, 67, 9, 73,195,112, 46, 49,205, 32,
+204,162,156, 96, 70, 64,115, 51,176, 73,193,200,200,232,226,226, 66,146,155, 33, 32, 57, 57,121,238,220,185,163,201,128, 36, 0,
+ 16, 64, 76,184,154,255, 45,225, 33, 63, 94,191, 46,209,214,128,143,230,227, 7,144, 33, 35,120,233, 95, 82, 82, 2,140, 66, 32,
+ 57,223,127, 26, 80, 92, 64, 93, 4,174, 6, 15, 40,155,122, 11,136,178,123,174,199, 55, 95, 9,170,188, 64,170,103,158, 60,121,
+130,167, 74,160,110,233, 15, 44,235, 49,139,108, 96, 29, 0, 44, 82,205,205,204, 72, 53, 13, 50,186, 2, 4,251, 97, 0,127, 33,
+ 14, 47, 73, 29,193, 0, 51,195,227, 46,253,255,130,138,253,159,160,193, 31,228,210,255,239,223,191, 95,191,127, 37,232, 84, 72,
+ 47, 1,185,163,176, 6, 12,136, 28,252, 1,185, 25,105, 36, 7,200, 38,232, 77,172,165, 63,176,232, 7,246,114, 32,165, 63, 43,
+ 11,235,104, 54, 38, 56,108, 2, 17, 68, 30,100,199, 95,148,147,215, 2,131, 40, 70, 46,253,113, 53,236,176,186, 25, 88,250, 3,
+211,210,234,213,171,247,236,217, 67,170,155,129,165, 63, 11, 11, 11,144, 28, 77, 6, 36, 1,128, 0, 98,194,211,252,255,246,226,
+185,167,161, 17, 49, 5, 55,164,206, 0, 54,255,129, 12, 72,233, 15,233, 52, 0, 73, 72, 29,240,228,211, 51,163, 50, 11,130,117,
+201,215,239,192, 98,232,239,243,183, 63,159,190,254,241,248,229, 15, 34,139, 78, 72, 10,195, 85,250,211, 14, 96,214, 1, 64,240,
+227,215,207, 31, 63,126, 16,111, 8,164, 28,135,140,173,139,138,138,194,155,198,248,115, 14,114, 59, 26,179,227,140, 39,223,130,
+198,253,129,197, 63,184,241, 15, 47,253,127,255,254,253,245,235,215,207,159, 62,211,122,116, 98,213,170,213, 48, 30, 35, 24, 50,
+ 0, 69,136,175, 3,224,165, 63,164,232,103, 98, 98,226,224,224,224,230,225, 26,205,198, 52,234,215, 18,217,167,196, 90,121,160,
+141, 8, 17,163, 23,222,143, 4,214, 1, 36, 57, 27, 82,250,131, 6, 52, 70,235, 0, 18, 1, 64, 0,118,205, 94, 7, 65, 24,136,
+227, 36,208,224,238, 32,239, 64,124,156,250, 8,142, 60, 15,137, 3, 59, 60,150,176, 16,135,106, 75, 33, 90,130, 7, 37, 23, 98,
+180,158,137, 35, 55, 53, 13,133,210,143,223,221,253,219,224, 45,202, 79,199,121, 16,155,242,108,147, 0, 74, 32, 96,195,127,203,
+125,172,196,242,118, 31,125,125,131,106,123,169,205,173, 49, 87,101,132, 52,148, 31,120,185,252,131,193, 62, 22, 32,133, 20, 66,
+252,119,212,210, 52,197,131, 95, 84,252, 97,149, 67,125,215,182,116, 7, 0, 77,178, 44, 43,171,138,249,254, 46,138,144,254, 73,
+146,196,113,236,216, 54,240, 69,120, 12,125,192, 50, 47,113,159, 64,220, 39,254, 63, 70,250,247,150,254,224, 13,180,214, 74, 41,
+ 41, 73, 14, 0, 37, 32,107,244,216, 63, 47,114,111,240, 46,117, 61,206,154,157,179, 97, 24,125, 64, 81, 28, 56,167, 44,176, 37,
+253, 25, 99, 97, 24,110, 38, 35,246,124, 53,138, 2,249, 9,220,116, 45,200,161, 8,185,141,115,110,209,255,211,109, 2,164,255,
+ 76,180, 32,128,200,102,213,130,136,246, 20, 64, 76, 88, 71,114, 76,148, 85,127,188,126, 13, 44,253,129,108, 59,112,179,148,152,
+ 78,192,189, 43,119,144, 13, 65, 99,191,189,252,130,160, 9,164,150,254,240,162, 31, 88, 13,200,202,202,194, 5,127,195, 0,176,
+232, 7,182,109,223,189,123, 71,221, 80,131, 88,186, 99,199, 14,120, 63, 0, 82,250,235,233,233,253, 0,214, 0,223,191,195,107,
+ 38,252, 89,110,234,180,169, 64, 71,202, 72, 75,255,254,251, 23,173,244, 39,152,109, 32,117, 0,114,131, 11,178, 26, 21,107,191,
+ 4,165, 2,248,245, 27, 82,250,159, 62,117,250,219,247,239,192,210,243,227,199,143,192,128,122,255,254, 61,241, 33, 0, 25, 5,
+ 34,126,232, 31,148, 0,222,188,125,251,246,205,155,183,239, 64, 52,152, 9, 20,212,208,212,124, 7,102, 16,211,252, 7,146,192,
+210, 31,218,240,231,230,230,225,225,229,229,225, 5, 50, 70,179, 49,174,210,156,248, 6, 56,100, 5, 1,156,129,139, 77,146,237,
+104, 35, 66, 4,117,185,184,184, 0,235, 0, 96,233,239,234,234, 74,124,159, 3, 88,214, 3, 75,124, 56,119,180,244, 39, 9, 0,
+ 4, 16, 19,102,243,127, 85,109, 21,144,241,237,197,115,184, 32, 49, 51, 1, 37, 37, 37, 83, 83, 39, 50,128,103,125,129,138,225,
+171, 72,129,108,215,197, 1, 64,246,185,174, 19, 64, 53,212,117, 61, 60,109, 61,121,242, 4,210,228,135,148,251,208,238,203,215,
+175,192,210, 13,216, 30,231,226,162,254, 40, 1,208,234,140,140, 12,144,141,127,254, 92,187,118,237,252,185,115,250,122,250, 63,
+126,128, 59, 0,223,191, 47, 89,188, 24, 34,139, 39,185,247,246,246,106,105,106, 1, 93, 11, 12,165, 63,191,127, 61,125,242,148,
+108,239, 51,192,102, 32, 24,192,219, 17,240,245, 0,126,255,252,243, 23, 52,242,115,242,228,137,175,223,191,126,249,252, 9, 88,
+250,191, 7,149,254,239, 72,170, 38, 33,253, 0,146, 90,106,135, 14, 29,250, 12, 2,159,192,228,103, 17, 97, 97, 96,233,127,227,
+250,245,131,135, 14, 17,163, 29,210,252,103, 97, 97, 5,198, 38, 15,176,236, 7, 98, 30, 46, 78, 46,206, 23, 47, 94,140,102, 99,
+ 8, 40, 47, 47,135,151,191,240,201, 85, 8, 3, 34, 8, 81, 64,100,179, 29,255,184, 16,254,210,159,248,182, 63,154,155,129,117,
+ 0,176,244, 39,201,205,200,117,192,104,233, 79, 42, 0, 8, 32, 44, 67, 64,194,247, 31,188, 3, 15,254,192, 69,128,157,128, 30,
+134, 27,248, 13,130, 12,245,220, 56,123, 77, 64, 93, 4, 88,226,247,196, 66, 43, 12, 72,233, 15,105,254, 19, 92, 77,180,174,221,
+128,188,246,248,245,235,215, 33, 41, 0,121, 52,128, 21, 12, 94,191,126,237,229,229, 69,139,176,131,148,185,192,134,191,153,153,
+217,143,159, 63,191,255,248, 14,110,253,127, 7, 49,126,252,152, 50,101, 10,174,156, 3, 89,169,249,247,239,223,179,103,207,177,
+178, 48, 67, 66,230,254,131, 7, 79,159, 62, 93,190,124, 69,100,100, 4, 80, 4,222, 15,192,154,193,224,131, 78,104, 45, 56,130,
+ 43, 80, 33,109,255,227,199,143,127,253,242, 13, 82, 65,126,250,252,233,211,167,143,159, 62,125, 33,126, 32, 5,210,252,135,239,
+ 4, 38,166, 26, 0, 42,134,179, 21, 21, 20,128, 69, 63, 40,181, 92,191,126, 31,220,107, 65,150,197, 3, 44,173, 44,217,217,216,
+ 57, 57, 57,129, 61, 0,118,118,118, 96,228, 82,125,122,127, 72, 3,228,213, 50,240,197, 51,240,154, 0, 77, 1,254, 66, 28,235,
+ 80, 62, 73, 61, 15, 34,171, 13,106,185, 25, 82, 7,140,150,254,164, 2,128, 0, 98,193, 28,255,113, 94,178, 12,171, 82,130,235,
+ 65, 33,205, 7,163, 50, 11, 97, 93, 9, 72,185, 15, 31,252, 1, 54,255, 9,166, 6,242, 22,252, 66, 44,213,212,212,188,124,249,
+ 50,188, 8,195, 28,244, 7, 42, 35,254,124, 12, 82,109, 71, 22, 89,178,120, 9,176,244,135,236,176,194,186, 30, 31,121,157,254,
+191,127,127,245,244,141, 46, 94,188,116,253,218, 53, 22, 86, 86, 96,201,248,228,233, 19, 96, 83,151,153,153, 57, 44, 44, 12, 88,
+ 7, 48, 48,240, 99,154, 0,212, 14,201, 93, 16,219,209,246, 1,224,119, 48,176,244, 63,122,244,232, 23, 32, 0,205,250,126, 2,
+151,254, 64,226,243,151,207, 95,190,126,251, 70,208,179,192,162,255, 12, 24, 48, 96, 44, 3,197, 95, 13, 56, 56, 56, 32, 7, 20,
+164,220, 63,127,254, 60, 3, 17,219,143,141,193, 0,200,224,225,226,225, 0, 21,254, 28,108,108,108, 76, 76, 76,163,165, 63,250,
+ 24, 44, 82,185,185,122,245,106, 96,107,154, 1,117, 66,149,152, 37,149,200,109, 11, 82, 87, 51,147, 49,238, 79, 21, 55,195,235,
+128,209, 52, 64, 42, 0, 8, 32, 22,180, 86, 60,133,219, 46,224, 41, 0, 82, 13, 64,138,126, 6, 26,111,197,130, 88,170,171,171,
+123,250,244,105, 96,123, 31, 81,241,188, 5,205, 72,199,198,198,210, 52, 4,145,189,246,255,255,255,152,216,152, 41, 83,166,130,
+199,217,255,240,243,243, 19,172,231,110,221,186, 5,108,209, 66,244, 2,217,104,202,238,225,168,180,144,235, 0,200,108, 48,100,
+ 73, 40,254,112,134, 44,159,183,182,182,166,196,179,240, 53,160,164,158, 5, 4,212,123,224,192,129,229, 96,128,220, 51, 32, 50,
+109, 0,171,144,223,127,126,255,254,252,123,116,202, 23, 23, 32,184, 98, 18,168,128,200,208,134,239, 3, 32, 47, 51, 18,175,145,
+138,110, 30, 5,100, 0,128, 0,162,254, 97,112,192,216, 2, 13,253,119,209,245, 44, 32, 72,178, 51, 53, 53,221,182,109, 27,164,
+220,167,188,111, 65,222, 96, 20,124, 47, 46,214,210,159, 42, 0,243,204, 6,200,178, 81,130, 77, 54,170,132, 3,220, 16, 96,105,
+ 78,234,217, 15, 14, 96, 64,170,141,163,231,252,144,209, 22,161,127,226, 39,207,198, 65,226,230, 17, 11, 0, 2,136, 38,167,129,
+ 82,222,147, 32,187, 14,160,209,112, 63,237, 50, 0,229,134,143,230,150, 81, 48,228,146,241, 40, 24, 36, 0, 32,128, 24,169,123,
+ 64,194, 40, 24, 5,163, 96, 20,140,130,161, 2, 0, 2,104,244, 70,176, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70, 43,128,
+ 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70, 43,128, 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70, 43,128, 81, 48, 10, 70,
+193, 40, 24,161, 0, 32,128, 70, 47,133, 31,213, 59,170,151,230,122,113, 45,207,165,181,222,209, 56, 26,213,139, 31, 0, 4,208,
+104, 15, 96, 20,140, 2,218, 2,200,233,246, 16,146, 84, 64,204,145,250,163, 0, 43,184,121,243,230,104, 32, 16, 4, 0, 1, 52,
+ 90, 1, 12, 36,184,118,237, 90, 58, 18, 0,114, 7,191,222, 81, 64, 18,184,119,239, 30,228, 96, 3, 32,137,124,236, 1,241,165,
+ 63,228, 88, 89,178,207,228,193, 37, 66, 69,189,240, 59, 57,200, 3,180,168,222,128,165,127,127,127,255,104,242, 35, 8, 0, 2,
+136,101,248,121,233,240,225,195,182,182,182,131,223,157,144,116,223,219,219, 11, 23, 41, 46, 46,102, 32,250, 50, 72, 32,249,111,
+165, 32,162, 38, 15,159, 72, 7,189,163,128, 84,128,124,212, 1, 73,167, 26, 32,151,254, 64,146,145,145,145,248, 35, 22, 40,217,
+ 45, 72,134, 94,200, 57,254,120,156, 7,236,253, 64, 14,249,193,227, 89, 76,189, 4,117,225, 47,253,255,253,251, 55,107,214,172,
+165, 75,151, 70, 71, 71,143,166, 67, 92, 0, 32,128,134, 97, 15, 96, 9,142,195,236, 6, 91,233,159,159,159,143, 92,250, 67, 42,
+ 3,160, 32, 49, 13,174, 5,185,220,200, 37, 56,164, 64, 7, 10,210, 84,239,199,143, 31, 51, 51, 51,225,183,208,188,120,241, 2,
+168,165,181,181,181,185,185,185,170,170, 10,114, 94, 63, 46,192,246,241,171,110,230,124,158,253,247, 33,220, 63, 47,254, 92, 77,
+255,113,169,149,237, 72,179,224,230, 42,249,115,187,164,135,107, 6, 35,227, 60,125,180,210, 31, 2, 72,234, 7,208,185, 7, 0,
+ 57,199, 31,162,114, 15, 24,160,149,227,248,111,248,130,235,197,212, 69, 70,231, 0, 94,250, 3,155, 83,192,210,255,200,145, 35,
+163,165, 60, 30, 0, 16, 64,195,173, 2, 0, 54,255,129,109,165, 65, 30,235,144, 33, 23, 57, 57, 57,120,195, 31,210,246,135, 11,
+226, 25,147,129, 72,197,217,176,193, 26,239,239,129, 8,194,134, 8,210, 72, 47, 16,156, 60,121,146,131,131,227,248,241,227,136,
+212,195,196, 84, 93, 93, 93, 91, 91, 27, 31, 31,191,117,235, 86, 60,122, 37, 78, 94,251,207,193,202,117,252, 17, 92,132,145,233,
+191, 94,245, 47,155,218,247,230,241,175, 78,111,149, 30,205,138,152,165, 63, 35, 12, 16, 89, 7, 32, 79, 24,164,163, 2, 6, 66,
+211, 9,148,232,133,215, 1,239,222,185,204,156,249,158,164,210, 31,107,253, 1,215, 69,106,175, 20, 88,250,247,245,245, 1, 67,
+ 12,152, 50,207,156, 57, 3, 44, 13, 70,147, 19,126, 0, 16, 64, 76,248, 11, 83, 50, 66,144,194,241,101,160,141, 16,141,228, 69,
+ 30,176,249, 63, 99,198, 52,178, 59, 1,244, 73, 49, 19, 39, 78,132,183,253,129, 69,127, 47, 24,192,235, 0, 32, 27,168, 0,143,
+ 94,120,251, 29, 88,124,223,222, 22, 11, 68,240,114, 28, 40, 69,188, 94, 72,155,148, 72,189,192,210,231,216,177, 99,192,222,244,
+163, 71,143,158, 63,127,142, 38,245,240,225, 67, 73, 73, 73, 6,220,154, 37,143, 93,121, 18,109,205,246,232, 35,227,115,248,161,
+211,144,171,220, 24,222, 61,100, 23,146,252, 62,204,242,213,189,123,247,240, 20,181,120, 38, 3,208,218,254,104,247,202,225,175,
+ 3,144,111,224,154,137, 10, 24, 8,221,207,133, 44,251,127,149, 32, 50, 98, 32,241,110, 47, 72,185, 79, 82, 57,142, 92,127, 0,
+ 17,121,165, 63,176,123, 58, 97,194, 4, 96,219,191,160,160, 0, 88, 7, 64,218,130,211,167, 79, 31, 45,229,241, 0,128, 0, 98,
+193, 83, 20, 46, 93,186, 28,146,224,136, 31, 82,135, 36,205,152,152, 24,136, 22,160, 33,144, 50,133,200,184, 4,170, 95,178,100,
+ 9, 80, 59,184, 40, 95, 66,146,213,240,230, 63, 36,159,144, 49, 19, 0,177,157, 84, 75, 41, 1,144,210, 31, 94,238, 35,115, 9,
+ 87,221,224,210, 31,194, 6,213, 1, 94,139,209, 6,118,240,235,133,199, 8,184, 14, 72, 39,168, 23, 88,196,255,250,245,203,216,
+216, 24,216,187, 2,118, 2,130,130,130, 64,117,198,191,127,237,237,237, 95,190,124, 97,101,101, 5,102, 63, 92,122,133, 30, 62,
+101,250,245,231,131,177, 2,235,145,103, 44,199, 95,254, 14, 82, 4,197,209,191,255,151,218,217,222,125,225,253,206,202,227,154,
+121,123, 56,101, 42,130,205,222,206,206, 78, 96,121,135, 57,192,141, 89,178,195,155,255,152, 42, 7,225, 41, 94,233,233,130, 72,
+ 53, 10,168, 97, 1, 12, 6,178,239,249, 32,181,237, 15,204,245,240,187, 33,109,108,108,128,217,121,180,244, 39, 8, 0, 2,136,
+ 5,119, 81,184,108,230, 76, 80,240,101,100,100, 17, 89, 38, 66,198,181,181,180,180,224, 34,182, 96, 0,233, 19, 16,140, 81,120,
+233, 15,183,139,212,226, 24,232,230,152,152, 40,112, 13, 20, 5,100,147, 90,121, 0,173,131,223,103, 48, 36,166,145,233, 9,142,
+ 30, 61,106,110,110, 14, 44,143,128,228,134, 13, 27, 2, 2, 2, 32, 67, 64,149,149,149, 12,224,171, 23,150, 47, 95, 14,148, 50,
+ 53, 53,197,212, 43,127,244,204, 11,115, 77, 96, 97,246,213, 92,150,121,195,243,223, 1,138,224, 33, 32, 6,189,202, 95, 64,173,
+ 95,223,126,220,183, 92, 69,222,252,139,158,233,147, 97, 16, 80,248, 47, 85,135,131,213, 96,128, 89,136, 35,223,169,130,235, 90,
+105,172, 23, 55, 14, 56, 0,214,103,152, 75, 93, 33, 99, 59,164, 2, 50,116, 65,206, 12,103, 97, 97, 41, 44, 44, 60,115,230,204,
+232,208, 63,145, 0, 32,128,176, 87, 0,192,182, 63,164, 36, 5,130,232,232, 72, 32,151, 96,129, 8, 25,234, 65, 46,253,225, 0,
+ 34, 8, 84,128, 85, 22,169,248, 70, 41,253, 33, 12,160, 32,145,101, 49, 48,202,129,197, 19, 68, 49,144, 4, 86, 0,196,119, 2,
+224,165, 63,114,238, 34,178,206,163,164,253,130,220,234, 39,169,249, 15, 25,177, 1,182,250, 33,157, 0, 85, 82,154,255, 80,189,
+225,233,240,187,159, 8,234,253,253,251, 55, 48, 83,241,242,242, 94,186,116,233,239,223,191,159, 62,125,186,126,253,186,176,176,
+ 48, 92, 1,144,237,237,237, 61,109,218, 52,204, 10,128,249,247,111,217, 51,151,217,120,165, 89, 47,189,253,248,151,247,243, 39,
+182,191,215,191, 48, 8,115,192, 21,112, 11,255, 49,245,126,178,112,154,237,240,168, 0,128,161,138, 57,244,129,121,201, 34,164,
+ 7,128,182, 97,135,164,181, 58,180,184,225,142, 26,222,127, 15,233, 10, 32,247, 6,136,239, 64, 0,195,141,140,210,127,233,210,
+165,135, 14, 29,250,191, 74,144, 49,236,125,127,127, 63,176,226, 4, 54, 77,102,204,152, 49, 90,190, 19, 4, 0, 1,196,130,181,
+ 52, 4,134, 32,114, 65, 12,172, 0,128,197, 43,176, 87,133,199,160,137, 19, 39, 66,134,110,176, 2,160, 20, 80, 1,158,244, 13,
+ 25,124, 71, 43,115,193,229,248, 18, 98,202,113,228, 46, 11, 4,196,198, 70, 47, 94,188,148,152,114, 28,185,244, 71,107, 97, 17,
+212,139,199,203,120, 0,176,159, 4, 47,238,225,163,255,200,179, 2, 64, 5,120,244, 50,133, 67,135,242, 33,117, 0, 3,210,154,
+ 78,166,240,247, 36,232, 13, 79, 39, 82,239,133, 11, 23,228,228,228,128,109, 43, 8,119,209,162, 69,199,143, 31,247,241,241, 65,
+ 86,243,242,229, 75, 14, 14, 14, 76,189, 10, 23, 46,124,144,147, 60, 89,152, 4,225,178, 45,186,253,247,248, 71, 38, 31, 20,149,
+ 31, 95,114,178,115,252, 30, 54,153, 10, 88,178, 43, 41, 41,225,185,235,170,188,188,156,200,107, 14,145,135,128,112,117, 8, 6,
+109, 32,144,161, 30, 82,113,146,164,119,217,178,165, 7, 14, 28, 96, 92, 3,106,142,236,170,225,117,107,249,108,103,103, 55,186,
+244,147, 72, 0, 16, 64, 44,152,165, 33,114,243, 31,222, 9, 0, 22,166,200,181, 2, 86,128, 71, 22, 82,148, 19,108,254, 99, 45,
+ 97, 9,118, 2, 32,110, 70, 46,253, 33,131,128, 64, 7, 3,197,129, 89, 8, 79,213,133, 89,250,147, 84, 7,144, 55, 82, 4,233,
+ 9, 61,122,244, 8,178,230, 7,185,225, 15, 20,196,213,145, 66,214,187,232,200, 47,200,186, 29,228,198, 59, 80,144, 70,122,129,
+197, 61,178, 79,237,237,237,187,187,187,157,157,157,255,253,251,215,214,214, 6, 36,191,127,255, 14, 12,103,172, 49,168,126,252,
+248, 37, 91, 7, 56,247,143,189,228,223,238,199, 12,206, 98,255,255, 49, 92,106, 99,253,242,143,231,221,119,190,119,140, 66,126,
+ 49, 23,135, 83,190, 2,150,239,248,167, 91, 73, 41, 26, 87,129,200, 61, 97,196,244, 71,225,233, 22,235,106, 78, 60,247, 53, 34,
+235, 5,182,163, 73,210,139,217,138,135,220,225, 76,159, 1, 55,208, 52, 53,164,244,191,244,103,254,254, 95,224,242,106,180,244,
+ 39, 22, 0, 4, 16, 74, 5,144,145,145, 5,186,213, 54, 38, 10,179, 37, 14, 25, 23, 2,162, 25, 51,166,209,200, 41, 88, 11, 83,
+130, 53, 7,220,205,184, 12, 4, 86, 93, 64,132, 86, 61, 32, 87, 60,120, 50, 42, 48,121,209,104, 50, 0,158,217,200,216, 8, 6,
+ 84,144,144,158,158, 48,249, 43,234,102,174,247,180,211, 11,190,158, 30, 1,228,229,229,167, 76,153, 66,100, 89,182, 13, 85,239,
+ 63,121, 30,206, 41,154, 64,134,246, 76, 86, 6, 6, 96,171,255, 61, 24, 61, 28,174, 25, 12, 94, 16, 67, 24,116,184, 45, 14,107,
+ 73, 13, 23, 33,184, 10,136, 12,189,152,173,120, 34,251, 55,148,135, 45, 48, 25, 3,203,125, 32,123,193,254, 95, 43,142,253, 2,
+ 22, 5,163,251, 25, 73, 2, 0, 1,132, 82, 1,224, 41,220, 33,211,185, 4, 19, 31,217, 10,200,190,201, 22,127,133, 68,161,179,
+105,157, 93,175, 93,187, 6, 95,253, 9, 25,162,193, 63, 77,130,166, 23,178,131,151,158,122, 71, 1,169,160,188,188, 28, 62, 22,
+ 4,100,211,199, 82, 58,239, 4, 30, 88,224,222,242,121,168, 56,117, 16, 2,128, 0, 98, 25, 13,130, 1, 4,192, 98,151,236, 36,
+ 59, 80,122, 71, 1,169, 99, 65,144,147, 18,128, 36,241,237, 98,148,213,159,176,193, 31, 92, 75, 66,113,141,231,224, 23,161,133,
+ 94, 90, 84, 93,248, 1,176,243, 10, 12, 22, 63,255, 52,104,119,115,251, 57, 8,195,203,211,104, 52,237, 17, 3, 0, 2,104,180,
+ 2, 24, 5,163,128,182,192,197,197, 5, 88, 1, 16, 63,177, 73,121,105, 59,176, 61, 0,250,214, 22,255, 33, 59, 10, 71, 1,121,
+ 0, 32,128, 70, 47,133, 31,137,128,243,231,141,239,236, 26,163,225, 48, 10, 70,193, 8, 7, 0, 1, 52,122, 28,244, 72, 4,163,
+165,255, 40, 24, 5,163, 0, 8, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,
+140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,136, 38,151,194,223,191,122,156,129,233,135,164,
+140,244,231,239, 95,223,191,253,170,166,105, 67,188,222, 35,231,238, 50,252, 99,127,249,244, 41, 55, 39,183,160, 16,183,185,137,
+ 34,241,122, 41,113,243,191, 55, 83,120,121,190,115,114, 51,179, 48, 51, 49,114, 48, 62,255,148, 79,188,222, 79,188, 65,130,194,
+130,252, 60,204, 12, 44, 12,239, 46,204,194,111, 47,167,244, 13,226,221,252,253, 41,202, 96,189, 20,215, 75,226,245, 62,251, 38,
+142,162,247, 39, 9,246, 62, 67,157, 36,144,254, 69,194,245,170, 79,217,212, 7,131, 94,109,108,225,220,217,185,186,188, 28,203,
+ 81, 51, 87, 81,195,153, 83,230, 23, 9,113,244,132, 13, 37,109, 72,147, 16, 71,155,159,162,196,209,143,159,220,196,235,229, 96,
+255,138, 98,148,223, 20,226,245,250,110,202, 65,230, 22,191, 32,225,216,156, 94,137, 12, 26,229,193, 81,189, 52,210,139, 7, 0,
+ 4, 16,190,101,160,169, 7,138, 24, 29,227,103,253,215, 39,198,160,123, 87,118, 49, 50,252,227, 97,231,156, 63,115,217,194,133,
+ 19,173, 93,172,255,124,253,166,165, 97,247,239, 31, 67,118,217, 95, 45, 45,245, 59,119, 30,254,248,254,135, 87,210, 26, 83,239,
+209,243,175,254, 51, 48,126,249,249, 61,189,168,165,113,146,251,179,171,103,129,201,123,219,197, 39, 76, 76, 12, 19, 27,106,110,
+221,186,169,160, 32,207,206,201, 34, 44,200,142,197,222,117,211,216,216,216, 56, 57, 57,121,120,120, 68, 4, 56, 68, 89,121, 69,
+ 37,185,249,217,121, 5,216,152, 88, 88, 88,254,255,251,251,137,153,225,211,171, 79,135,121,117,113,185,252,227,221,169,188,156,
+ 31,249, 4,216,120,184, 89,217, 56,153, 88,152, 25,152,216, 88,212,165,103,255,254,207,124,239, 89, 18,126, 95,239,127,164, 44,
+ 34, 34, 34,206,243,227,251,143,159, 76,236,156, 12,191, 25,254,200,197,124,120,255, 78,228,243, 54,218, 85,218,179,102,205, 74,
+ 75, 75, 27,109,188, 16, 4,184,138,123, 82,213, 0,129, 4, 39,215,211,167, 79, 89, 57,216,255,113,113,209,211, 11,223,222, 93,
+ 56,182,119, 5,178,136, 75,104,199,224, 12,237,197,139, 22,177,179,177,253,251,247,143,155,135,199,215,207,111, 52,249, 13, 9,
+ 0, 16, 64, 4,246, 1,252,223,187, 48,205,153,112, 29, 16,234,167,242,211, 73,232,247,151, 15, 44,127,153,204,244,100,226,227,
+161,205,103, 96, 9,126,226,248, 2, 17, 57,233,127, 95, 62,217,155,235, 62,123,246,126,207,249, 63,104,122,211,211,219, 24,216,
+248, 25,185,248,254, 51,255,191,120, 45,113,222,138,157,208, 38,249, 63, 6, 15, 75, 75,134, 47, 47, 24, 24,120,239, 94,190,206,
+ 42, 34, 96,109,161,195, 35, 32,134,197,122, 70, 38, 32, 98,252,207,204,250, 11,104,204, 31,102,102,102, 86,102,102, 54, 86, 16,
+249,251, 47, 3,227,159,127, 32,119,224, 0, 47, 46,182, 8,241, 51,240,113,113,137,138, 8,243,241,113,253,103,250,251,231,223,
+151,191, 12,127,121,120,184, 68, 36,100,148, 84,143,236, 57,136,253, 28,161, 25,187,127,241,243,114,243, 11,124,254,241,141,237,
+235, 87, 14, 54,118, 14,214, 31,127, 65,237,193,111, 63,190,126,251,254,232,189,206,171, 55,239, 62,189,126, 18,102,133,221,234,
+213,157,132,174, 73, 74,112, 17, 20, 23,196, 90,250, 83,177, 14,168,234,238, 6,146,109,165,165,100,232,173,236,234, 2,146,237,
+101,101,196,107,185,242,244,233,173, 91,183,128,140, 32, 71, 71, 34,181,204, 92, 5, 58, 9, 7,249, 86, 44, 32, 27, 66, 50,192,
+206, 71, 3,178,211,176, 29, 33, 9, 44,217,241,151,239,196,148,254,138,130, 66,223,127,253, 4, 50,216, 56, 57,126,125,255,241,
+239,235,183, 55, 47,158, 75,234,234,226,209, 34,169,172, 70,208, 95,252,242,154, 55,246,109, 36,168, 12, 88,250,219,184, 68,112,
+ 8, 26, 16, 21, 88,161,239, 8, 42, 9, 11, 11, 91, 21,186, 7,171,148,227,158,215,112,182,150, 0,168,100,120,245,227,223,247,
+ 63,160, 16,254, 10, 38,103,154, 11,168,241,178, 98,213,219,211,211, 83, 85, 80,226, 31, 20,248,227,199,247,137,253,125, 83,166,
+ 76,201,201,201,161, 48,113,222,185,115,167, 27,156, 62, 9,110, 44, 56,126,252,248,131, 7, 15,222,190,125,251,249,243,103, 94,
+ 94, 94, 97, 97, 97, 5, 5, 5, 75, 96,233, 49, 10,192, 96,203,146,102, 56, 27,109,221, 63, 64, 0,225,171, 0,102, 59,244, 5,
+159,104,253,119,108,107,154, 21, 3,254, 58,224,231,151,119, 18, 42,206, 45,165, 65, 11,102, 30,128,136, 28, 60, 54,227,235,183,
+159, 94, 46,249, 86,214, 9, 17, 97, 78,156,156,236,191,254,254,249,252,237,151,154, 5,230,161, 61, 15, 25,126, 49, 4, 69, 79,
+ 79, 45,130,118, 45, 61,172, 28, 56, 56,216, 55,236,219,185,237,232,241, 69,243,167,253,248,254,147,141,153,133,135,139,141,143,
+237,239,157, 71, 47,208,171, 40, 96, 17,240,255, 31, 8, 49,253, 3,178,127,254, 98,103, 0, 86, 49,236, 12,255,127,253,253,203,
+204, 0, 44,202,255,254,250,247,231,239, 63,172,206,190,123,170, 93, 70,244, 63, 31, 47,183,180,140,162,134,174, 10, 47, 15,231,
+199, 47,175, 95,188,126,241,254,227,203,223, 63, 24,185,128,181,130,168,117,112,224,229,181,235,213,209, 52, 78, 95,250,248, 47,
+ 47,239,119, 22, 6, 54, 14,182,239,223,216,126,125, 99,251,193,193,206,194, 8,204, 37,204, 63,190,127,249,254,237,243,247,239,
+ 95,191,127,250,248,249,197,195, 9, 19, 30, 43, 27, 99,223,255,217,189,168, 27, 87,120,150,198, 97, 47,145,223,191,127,143,204,
+ 22, 18, 18,130,148,134,130,130,130,119,239,222, 93,189,122, 53, 73,181, 2,155, 56,116,252, 1,104,168, 32,185,105,107,214,234,
+213,217,217,217,191, 95,189, 34,166,244, 23, 19, 19, 11,114,115,251,205,206,222,219,219, 27,236,228, 68,204,241,150, 64, 15,246,
+ 52, 52, 64, 71, 42,234,235,123, 27, 27,177,178,113,105, 71,174, 3,128, 12, 99, 99,227, 61,123,238,185,184, 40, 17, 89,250,107,
+ 72, 72, 10,240,241, 65,146, 25, 55, 7,231,243,215,175, 62,189,255,192, 35, 32,248,240,244, 25,121, 83, 19, 60, 26,253,210, 74,
+ 98,130,125, 85, 21, 20, 32,220,250,222,201,112,169,198,226, 92, 32,249,104,251, 94, 51, 53, 89,162,134,122,136, 44,253,161, 45,
+ 11, 33, 66, 42, 8,239, 71,227,102, 97,188,216,152,204,200, 39,242,247,222,197,159,247,174,222,122,247,213,100, 59,190,248,157,
+ 49,115,102, 81,122,118, 92, 74,210,234,165, 43,128, 37,111, 75,103, 23,111, 67, 11,252,210, 8, 74,138,126, 80, 94,192,219, 58,
+ 1,150,248,187,118,237,250,253,251,183,178,178,178,173,173, 45, 63, 63,255,135, 15, 31,158, 61,123,118,255,254,125, 32,233,230,
+230, 6,172, 15, 70, 75,127, 52, 46,114, 29, 0, 16, 64,232, 21, 64,218,109,216,209, 58,224, 29,118,255,255,125, 97,248,245,243,
+247,129,101,105, 14, 12,132,250, 1,108, 90,154,234, 76, 76, 7,110,125,120,203,192,112,253,227,211,219,192,254,242,198,173,147,
+190,189,249, 27,157, 88, 8,108,206,251,249, 90,254,101,225,193,165,249,214,173,235, 64, 53, 94,250,192,102,157, 20, 3,131,252,
+143,159,191, 66, 60,220, 56, 4,152, 22, 45,219, 1,108,190,175, 89,177,128,249,207,103, 77,121,246, 59,143,208, 53,254,251, 15,
+186,151, 10, 8,254,254,253,251,147,245,255,111,198,223,191,126,253,250,198,245,131,225, 31, 7,211,255,191,127,217,254,127,249,
+245,227,215,247,111, 12,124, 88, 44, 21,229,249,201,194,194, 9,108, 47,168,168,168,136, 75,152, 51, 48, 51,253,253,123,150,233,
+255,135, 31, 95,129, 85,198,215, 23,207,222,137, 10,191, 17, 22,176,150,148, 93,204,192,128,210,226,227,252,241,231,255,207, 55,
+ 12, 63,216,127, 49,253,254,202,198,242,133,147,149,133,149,141,225, 31, 55, 35, 51,227,151,175,223,222,191,120,120,247,236,209,
+119,143, 30, 1, 93,197,244,159,153,200,120,154, 55,125, 30,132,145,148,137,115,220, 9,249,158, 41, 32,187,168,168,232,209,163,
+ 71,192, 34,146,188,189,151, 83,167, 78,125,249,242,229,154, 53,107,188,237,236, 4,197,196, 72,213, 14,108,251,191, 7,151,140,
+144,131,225,210,195, 8, 28, 87, 9,108,251, 3, 75,127, 80, 66, 97, 99, 83, 83, 83, 91,187,111, 31, 49, 93, 1,202,207, 64, 6,
+150,242,192, 66, 31,114, 97, 8,156, 12, 13, 13, 37, 88,250,171,137,137, 3, 75,127,102, 38,166,172,152,232,239, 63,126,246,206,
+157,203,197,201,249, 3, 8,190,127,103, 98, 97,126,124,254,188,172,161, 33, 46,189,144, 82,254,246,131, 7,200, 92, 50,128,185,
+ 83,196,158,213, 21,174,126,201,255,217, 85,137,212, 2, 63,203, 19,114,155, 35, 86, 17, 92, 0,216,240,127,248,229,239, 65, 87,
+ 81,214,252,153,159,162, 21, 89, 4,197, 8,150,254,123,247,238, 85,144,148, 74,201,202,168, 40, 44,155, 50,127,134,153,145,209,
+140,201, 51, 10,202, 74,150, 90,154, 95,190,124, 89, 23,111, 87, 9,127,209, 15, 52, 25,200,197,175, 30, 88,250,139,138,138, 26,
+ 26, 26, 50,129,123,249,192, 28,199,202,202, 10,108, 24, 73, 72, 72, 0,235, 0,160,108,112,112,240,104,233,159, 86, 14, 29, 54,
+156,213, 89,129, 86, 7, 0, 4, 16, 74, 5,144,122,172,242, 27, 51,199,191,191,255,254, 49, 50,243,254,255,206, 0,108, 6, 51,
+ 48, 51, 72,171,177,254,250,250,127,207,188, 52,151, 36,188,117,192, 63,102,102, 72, 97, 7, 44,107,101,248,165,213, 31,222, 92,
+ 51,125,230,124,166,159, 92,110,142,214, 59,246, 30,253,246,141,129, 75,136, 31, 83, 27, 39,151,250,247,111, 55,129,197, 55,124,
+ 84,134,129,225, 25, 19,179, 67, 92,124,242, 63,246,175, 91,182,206,243,243, 77,226,226,102,248,246, 22,152,136, 37, 48,181,255,
+102, 96,102, 5,151,254,191,255,252,253,249,233,247,183,223,223, 62,112,178,252,254,198,250,147,229, 55,243,111, 70, 96, 65,254,
+233,251,159,175,159,127, 51,136,163,107,188,184,191, 83, 73,130,145,153,153,145,145,137,253,239,223,255,127,190, 61,250,249,247,
+247,211, 23, 31,223,189,255,242,241,243, 95,166, 31, 63,254, 48,188, 96,102,189, 32, 37,247,137,151,131, 19,211, 94,160, 87,255,
+127,254,241,253,243,179,191, 47, 63, 50, 43,203, 0,211,223,223, 63, 63, 63,188,120,112,243,212,241,215, 15, 31,129,139, 45, 22,
+ 38, 96,232, 50, 83,243, 12,119, 72, 3,127,214,172, 89, 33, 33, 33, 6, 6, 6,236,236,236,125,125,125,228, 25, 5,105,254, 91,
+232,232,136,139,139, 3, 75,112, 31,123,123, 41,210,235, 0, 65,112,185,207, 42, 38, 6, 52, 1, 72, 18,236, 7, 0,219,254,172,
+ 63,127,174, 93,187, 22,185, 43, 64,252,112, 16,217, 0, 82,238, 35, 95,201, 2,172, 62, 9, 86, 0, 95,191,125, 19, 21, 18, 74,
+ 12, 9,249,240,241,211,235,119,111, 89, 89, 89, 32, 0, 88,196,176,115,114,125,122,251,230,243,227, 39,188,178, 56,167,230,128,
+165,255,146,181,155,145, 43, 0, 72, 63,192,220, 72,207,203,209,158, 8, 87,127,102, 96,224,229, 21, 54,112,241,227,222,189,105,
+ 46,125, 70,255, 47, 45,156,240,115,199,124,177,217,231,128, 53, 1, 51,159,208,159,247,175,128,165, 63,176, 67,240,245,207,127,
+102, 28,195,168,247,239,220,217,182,105,235,194,217, 11, 39,205,157, 54,163,111,130,144,176, 80, 75, 91,203,162,101, 75,109, 45,
+172,231,205,157, 23, 20, 26,100,107,109, 75, 70,233,191,105,211, 38, 96,191, 86, 82, 82, 18,237, 2,106,180,145, 31, 96,219,223,
+200,200,232,207,159, 63,192,174, 0, 7, 7, 7,176, 2,184,113,227, 6,176,169,193,195,195, 3,236,237,189,120,241, 2,168,102,
+116, 44, 8, 81,128,148,119, 64,234, 0, 56, 0, 8, 32,148, 10, 96,182, 85, 59, 84, 29,211,229,255,251,230, 51, 10, 75, 50,164,
+ 76, 62,205,169,105,250,120,227,191, 89,181,204, 71,150,167,217, 50,205,250,135,165, 74,223,180,239, 93,154,202, 39,255,248,252,
+226, 92, 96, 7,226, 29, 48,225, 50, 48,252,148, 87, 55,226, 96,103,249,254,245, 39,195, 47, 80,197, 0,236,139,189,122,247, 30,
+ 83,239,132,254, 34,208,221,241, 39,230, 50, 49, 65,150, 49,128,134,107,254,125,191,250,227,231,111, 78, 30, 14, 6, 54, 80,197,
+240,249,211, 39, 49,164,251,167, 80, 60,240,239,215,191,127, 44,192, 20,240,243,231,207, 47, 44,204, 44,191,152, 24,158,127,250,
+195,245,231, 47,219,191,255,172,204,223,152, 89,254,124,253,246,229, 23,150, 69, 29,188, 60, 95,255,252, 97,252,249,235, 47, 48,
+123,223,186,243,232,201,243, 55,223,127,253,254,244,229,221,151,207, 31,126,252,253,197, 8, 76,244,223, 62,126,250,118,255,225,
+211,143,111, 63,127,101, 96, 80, 65,211, 14,116, 22, 36, 71,252,249,248,245,201,133,235, 47,175,223,255,244,249,206,231, 15, 31,
+254, 51,176,176, 50, 51,254,103,100,101, 98, 2,245,161, 8, 30, 83, 82, 26, 87,138,103, 44, 8,139,127, 89,160, 81, 6,204, 30,
+192, 26, 23,249,176, 73, 82,155,255,192, 90, 4, 52,198, 45, 42, 74,252, 41, 99,216,139,117,112,185, 15,172, 3,240,116, 2,174,
+ 60,125,202, 0, 62,251, 26,216, 34,131,244, 3, 64,197,205,165, 75, 64,114,221,254,253,248,235,128,226,250,122,200, 72, 23,144,
+ 93,210,208, 0,239, 19,224, 25,249, 65, 6,192,230, 63,218, 56, 50,228,208, 99,248, 88, 16, 86, 32,192,194,242,227,215, 79, 96,
+ 8,223,184,119, 23,104,227,181, 91,183,127,253,250,205,196,192, 8, 12,127,160, 99,128, 45,142,239, 95,191,237, 94,181, 50, 8,
+233, 48, 87, 52, 0, 47,253, 99,130,125,145,197, 79,158,187,164,170, 40,207, 78,216,225,176,177, 11,118, 85, 96,209, 15,236, 7,
+ 0,145,103, 96,242,111, 22, 85, 26,150, 16,239,158,179,201,169,189,202,230, 96,119,138,252,123,102,199,223, 79,160, 73,133, 87,
+217, 86,242, 51,143,255,253,135,189, 41,163,174,170,206,197,197, 61,105,206, 84, 71,123,123,115, 75,139, 93,219,118,222,184,115,
+ 11,216, 49,231, 96,103,183, 54,182,222,186,105,235,155, 87,111, 2, 3, 3,137, 47,250,129,205,246,123,247, 64, 81,118,234,212,
+169,140,140, 12, 60,189,219, 7, 15, 30, 40, 43, 43, 67, 24, 23, 47, 94,148,151,151, 87, 84, 84,124,255,254,253,153, 51,103,148,
+148,148,128,141, 12,160, 8, 80,106,180, 2,192, 3, 0, 2, 8,203, 28, 64, 26,227,197,255, 7,151, 49, 50,179, 48,228,206,205,
+127, 32, 57,169,111, 33,176,176,156, 94,123, 51,181, 77,157,121,207,172, 52, 89,205, 89,170, 89,192, 54, 55, 19, 19,202,224,134,
+ 10,159,204,149, 75,235,192, 76, 96,193,248, 21,124,212,251,111,134,223, 63, 89,254, 1,155, 14,160, 50,125,253,134, 93, 64,210,
+218, 19, 75, 25,177,227,242,127, 15, 67, 29,120, 23, 22, 88,202, 49, 48,176, 50,176,114,252, 97,252,251, 15,124,210, 83,120, 52,
+232, 76,249,135,199,102, 97,234, 5,166,203, 63,255,152,152,254,252, 97,250,245,243, 27,184, 27,248,157,153,153,251,207,247, 79,
+223,129,133, 48, 35,176,103,240,237, 47,195,183, 95,127, 48,253,249,231,215,191, 31,172,204,255,190,253,249,243,239,227,231, 47,
+191,153, 25, 89,127,254,249,253,235,255, 47, 32,193,192,246,143,137,145,129,145,253,223,199,239,127, 95,188,254,246,245, 39,250,
+196, 53, 19, 35,180,195, 2, 44,151, 32,103, 81,253,254,241,253,227,187,119, 76,192, 80, 99,249,207,240,159,133,153,145,129,248,
+150,255,205,135, 55,213,229,213,241,140,252, 32, 15,136,115,114,114,194,107, 2, 96, 62,129,148,254,192,106,128,159,159,255,227,
+199,143, 31,128, 53, 16, 17, 99, 38,144,230, 63,176,155, 12,225,230,228,228, 76,158, 60,153,188, 78, 0,220, 4,200, 64, 16,254,
+209,127, 70, 94, 94,160,131,203,202,202,128,141,232,223,239,223, 3,221, 92,145,147, 67,176, 31,128, 60,214,143,107, 62, 0, 83,
+ 87, 39,161,105,246,179, 96, 0, 97, 99,158,136,245,254,221, 59, 30, 94,222, 55,239,223,239, 63,121,146,133,137,249,231,239,223,
+223,190,127, 7, 54, 48, 33, 85, 17, 48,145,252,250,249, 19,127, 80, 99, 14,251, 0, 69, 32,157, 0, 85, 5,133, 71,247,238,144,
+ 20,194,192, 58,224,235,235,147,219,215,207, 37,163, 31, 64,112,228, 7, 14, 46,172,154,109, 16, 95,200,174,168, 7,202, 32,111,
+158,223,122, 7, 90,105,202,110,233,243,232,239, 31,174, 41, 39,177,106,249,244,233, 19, 59, 39,135,138,162,226,253, 39,143,223,
+190,126, 27, 30, 19,189,109,239,238,137, 29,189,235,183,109, 82, 85, 84,141, 11,142, 61,126,238,232,250,181,107, 3,113, 15,197,
+192, 75,127, 96,209,239,234,234, 10,169,161,159, 61,123, 6, 44,253,241,187,246,237,219,183,182,182,182,192, 60, 14, 44,229,143,
+ 30, 61,170,165,165, 5, 76, 81,178,178,178,192,206, 49, 19, 24, 0, 59, 16,240, 40, 30, 5, 88, 1, 64, 0,177, 96, 41,253,247,
+ 45, 96, 96,103,103, 16,146,251, 38,107, 62,169,101, 6,195,223,175, 12, 47, 62,213, 44, 63,152,225,159,193,176,103,225,163, 23,
+175, 25, 84, 25,254,253,253,131, 86, 1,220,249,244, 73, 77,128,239,207, 79,134, 59, 7,150,168, 56,184,131,199, 72, 24,126,255,
+250,205,202,192,244,229, 7,104, 17,133,135,131, 17,167,176, 52, 86, 71,120,232, 50,110,187,248,159, 21,216,220,151,115,255,245,
+232, 48,164, 19,192,202,198,254,155,225, 7, 15, 39,232,238,192, 77,219,150,127,127,251,216, 66, 89, 0,203,192,211,191,127,108,
+191,190,255,102, 96, 3, 86, 2, 12, 63, 64, 89, 20,216, 43,252, 9, 44,218, 89, 88, 25,126, 48,252,255, 7, 26, 26, 2,138, 96,
+230,128,111, 63,254, 49, 51, 51,254,254,243,251,199,207,127,159, 62,255, 0,185,246,223,255, 95, 63,255, 1,107, 31,102,160,110,
+ 14, 6,198,239,127,255,129,150, 16,125,255,252, 29, 95, 8,130,186, 2,255, 24,254, 51, 50, 48, 49, 1, 75, 7,230,127,255, 25,
+129, 12, 80, 45,248,143, 9, 88, 49, 49,254, 99,198,223,252, 39, 53,194,184, 96,203, 16,145, 75,127, 96,123, 7,216, 5, 6,118,
+131,224, 45,101, 98,154,255, 10, 34, 34, 16, 46,144, 65, 97, 39,128,200,209,255,255,159, 63,215,214,214,254,124,251, 22,114,253,
+163, 10,184, 6, 98,253,249,211,215,215,247,233,171, 87,210, 84, 93, 97, 9, 31,225,129, 79, 0,160, 1, 99, 99, 99,120, 15,224,
+234, 83,140,246,193,207, 95, 31,126,189,251,241,227,135, 0, 63, 63, 7, 48, 41,254,253, 3, 12, 88, 96, 89,243, 11,216, 17,248,
+253,251,223,159,191,248,195,249,246,131, 7,240, 25, 96,228,177, 32,228,153, 97, 82, 1,183,168, 57,176, 29, 69,134, 70,226,231,
+ 0,236,119,191,126,165,176, 6,216, 9, 96, 84,212,147,159,127,254,205,143,127,220, 44,140,191,142,108,184,121,239, 62,174, 4,
+242,253,207,175,179,199, 79, 77,232,233,183,114,176,169,105,106,216,185,125,231,210, 69,139, 45,237,108,100, 21,228, 88,184, 88,
+247, 30,222,187,108,225,226,117, 27,214,110,221,186,213,219,219, 27, 83, 59,228,158, 28,120,209, 15, 1,192,118, 12, 49,254, 2,
+166,121, 96,137, 15, 74,192, 10, 10,192,216, 4,118,215,128,217, 31,216,234,103,103,103, 7, 54,134,128,130,188,188,188, 64, 53,
+ 35,185,124, 7,182,108,182, 44,105, 70, 27,246, 65, 6, 0, 1,132, 50,176, 7, 26,249, 57,188,148,129,147,227,193,167, 95, 12,
+223, 63,178,255,251,166,167,163,196,240,246, 27,195,175, 63, 14,250,106,160,133,153,191,127, 48, 51,130,135,104,254,253,197, 48,
+234,195,173, 15,143, 88,216, 25, 60,252, 10,151, 77, 2, 54, 82,126, 49,124,251,249,247, 59,195,134,253, 23,246,156, 6,221, 23,
+ 47, 35,167, 8, 90, 99,143, 3,120,233, 51,254,254,193,176,105,235, 14, 19,183, 92, 80,243,159,129,149,153,147, 33,204, 39,212,
+203,206, 31, 40,251,228,225,221,255,191,255, 98,111,221, 0,155, 99,160,201,234,191, 63,127,129,166,127,127,254,248,254,237,219,
+183, 47, 95,190,124,254,244, 17, 24,247,159, 62,127,249,241,229,203,247,239, 88,138,240,207, 95, 24,191,255,248, 11, 68, 95,191,
+253,254,252,229,231,251,207, 63, 63,124,250,245,241,243,239, 15, 31, 64,228,187,183,127,222,189,255,243,238,227,159, 55,239,126,
+189,124,131,101, 4,137, 9, 88, 28, 0,179,214, 95, 70, 70, 38, 96,153,255, 31,228,142,255,204,127,255, 65,195,243, 31, 56,187,
+ 16, 51,255,171,105,169,121,116,219,209,157,251,118, 66,234, 3, 96,111, 0,143, 98, 96, 18,103,129,133, 97, 23,120, 21,102, 69,
+ 69, 5,228,148,121,228,101,145,196, 52,255,197,197, 81,102, 69,178,179,179,183, 30, 58,244,140,136,197, 60, 88, 1,176,249,143,
+191, 10, 1, 54,243, 33,140,149, 43, 87,222,121, 1, 90,202,181,229,192, 1,184,224,205,155, 55, 69, 69, 69,105,148, 7, 32,165,
+ 60,242, 21,137, 16, 54,158,241, 31, 80, 69,203,199,251,239,239,223, 79,239,222,191,121,243,230,237,135,247, 95,191,125, 3,162,
+207, 95,190,124,253,248,233,243,135, 15,192, 84,246,235,199, 15, 96, 53,128, 75, 59,114, 41, 15, 47,253, 33,108,228, 21, 65,248,
+193,151,215, 39,247,172, 70,100,221,111,239, 46,208,186,188,120, 30,174, 0, 44,247,129,165,255,207,131,107, 30, 38, 26, 2, 75,
+255,195,174,162,127, 62,190, 54,217,241,138, 5, 71,244, 2, 91, 18,169,249,153,119,110,222, 60,126,224, 48, 63, 47,127,100,120,
+164,128,176,208,185, 83,103,120,216, 56,184,185,185, 37, 21,164,150,175, 88, 94, 81, 93,245,133,184, 50, 29, 2,140,140,136, 58,
+205, 31, 88,190, 3, 11,122, 96, 75, 31,216,234, 55, 51, 51,211,214,214, 22, 17, 17,225,224,224, 0, 22,253,250,250,250, 2, 2,
+ 2,144, 85,161, 35,188,141,143,220,187,197,236,233, 2, 4, 16,162, 7,144,118,107,218,255,215, 15,126,176,114,236,121,197, 5,
+140,107,133, 15,207,153,215,181,108, 79,111,238,214, 82,145, 20,228,200,213,224,100,152,122,254,255,239, 95,143,153,193,227, 6,
+ 88,202, 25, 30, 96,138, 5, 82, 23, 47,109,214, 55,240,173,171, 89,180,113, 93,223,174,253,215, 29, 45,181, 89, 88,216,119, 31,
+ 62,247,159,153,229,215,223,191,248,221,234, 97,168,177,227,236, 13,134,222,142, 16, 95, 47, 31, 31,223,157,251,214, 3, 27,232,
+222,238,145, 76,127,127,179, 50, 99, 47, 78,129, 69,255, 95, 80, 73,251,151, 5,216,210,255,207, 2,108, 2, 0, 27,194,160, 37,
+ 1,192,134, 56, 35,168,127, 0,233, 37, 96,233, 63,126,231,101, 98,126,207,198,206, 4,106, 53,255,253, 15,108,237,255,251, 15,
+236, 61, 0, 59, 1, 12, 76, 28,255, 25,153,129,173,121,198,191, 76,140, 63,255,254,255,240,245, 63,159, 56,214, 1, 25,196, 89,
+228,144,240, 96, 97,254,207, 4,170, 16,152,225,133, 33,168,110,192,221,252, 7,150,254,208, 86,234,130, 61, 64, 4,100, 0, 43,
+ 3, 6, 47,124, 65,244, 15, 60, 20,187,102,205, 26, 72,222, 83, 84, 84,132,120, 16,216, 44, 5,122,156, 96, 5, 0, 44,253, 33,
+205,127, 69,234, 21,184,172,224,129, 35,111,123,156, 19,155, 86,186,186,189,189,189,192,102, 62,176,160, 7,246, 6, 2,192, 39,
+227,171,171,171,195, 5, 31, 62,124, 40,194,206, 46, 1,235,145, 80,119, 14, 0, 8, 32, 87,178, 32, 95,123, 75,240,210,218,247,
+111, 62, 50, 50,252, 1,181, 40, 94,126, 99,227,224, 0,109, 42, 4,247, 0,190,127,249,242,243,235, 87,208,132,211,135, 15, 30,
+184,239,158,133,148,242,144, 81, 32,115, 35,189,147,231, 46,193,165,208,166, 4,112, 54,111, 95,159, 60,121, 96,189,179, 87, 4,
+180, 50,248,120,251,230,165,163,100, 52,252,137, 31,255, 1,245,213,222,125,125,148, 98,250,255,254, 37,177,217,231,190,254,249,
+255, 41, 90,145,127,217,253, 79,137,194,192,210,159, 9,119, 5,159,157,147, 83,219,209, 34, 38, 44,242,251,223,223,219,143,239,
+ 69, 71, 70, 45, 90,178,100,227,134, 77, 81,209, 81, 63,127,252, 60,124,230,216,247,239, 95,210, 18, 18,246, 30, 63,142,185,142,
+ 3, 24, 35,119,238,220,113, 3,119, 16,145,251, 1,111,223,190, 45, 45, 45,133, 79, 12, 96, 5,194,194,194,207,158, 61, 19, 20,
+ 20,156, 49, 99,134,169,169,169,161,161, 33, 27, 27, 27, 48,239,159, 56,113,194,194,194, 2,168, 0, 40, 43,140, 99,238,112,196,
+214, 1,104, 0, 32,128, 16, 21,192, 44,181, 44,135,175, 51,111, 61,121,255,220, 23,220,232, 56, 89,241,127,203,116,169,151,247,
+251,237,131, 24, 62,188, 99,104, 91,240,255,233,141,191,156,220, 31,222,129,186,239,140, 24, 91,171, 14, 30,216,104,239,224, 12,
+100,124,253,247,251,206,135, 71,192, 18, 89,133, 79,209,209, 81, 79, 92, 68,226,237,199, 79,160, 14,194,175, 63,207, 63,124,213,
+196,230, 8, 25, 57,203, 39,143,142,131,211, 44,139, 7,104, 37, 40,203,142,203,191,119,110, 89,243,242,205, 51, 97, 1, 80, 23,
+ 79,128,141, 85, 82, 0,251, 18,210, 95, 12, 44,108,160,150, 24, 51,176,209,205,244, 23,216, 71,249,243,151,149, 5, 82,250, 51,
+128, 23,137,130,182, 8, 96, 3, 1, 17, 21, 27, 22,151,112,177,253,103, 97,133,245, 36,126, 51,252,249,207,240,227, 23,195,223,
+159,192,134, 61, 35, 35, 27, 35,208,220,175, 63, 25,146, 19,186,208,182, 86,195,103,128,255, 49, 1,235, 13,208,248, 15,164, 13,
+ 14,236, 1, 48, 49,131,170, 35,160,236,127,102, 96,183, 0, 95, 39, 0, 94,250,163,177, 65,117, 0,174,225,166,191,127,129, 69,
+ 15,176,248,134, 84, 0,107,192, 0,200, 85, 86, 86, 6,218, 62,113,226, 68, 96,135,224,221, 59,124,187,129, 74,192, 96,199,142,
+ 29, 95, 95,162,156, 88, 0,172, 15,238,223,191,207,128,119, 83, 24,230,206, 47, 96,209, 15,172, 78,128, 65,231, 99,111, 47,141,
+123,254, 0, 88,178, 91,233,233,189,125,240, 0, 88,202,223,130,173, 5, 82,149,148, 44, 42, 42, 58,122,244,168,154,154,154,142,
+180, 52,158,105, 15,228,113,127,226,231, 0,144, 39, 3,202,203, 65,139, 62,239,221,131,182,253,225,219, 2,240, 44, 4,226,145,
+ 22,251,254,252, 5, 48,101,125, 5, 54, 50,223,188, 6, 38,174,255,255,255,253,248,241,227, 63, 24,220,191,118,253,247,175,159,
+120,150, 0,161,244,110, 29,237,129, 8,190, 36,148,152, 33,160, 47,111, 78, 1, 75,127,144, 51,184,185, 55, 34,117, 2, 76,108,
+ 3,105, 90, 82,152,108,127,117,198,147,193,192,216,229, 85,182,149,196,180, 99,192,250, 64,144,141,241,237,187,247, 44,140,140,
+ 44,120,199, 8,227,226,226,224,236,205,155, 55,123,121,123,110,217,180,101,213,170, 85, 13,213,181,187, 14,236,101,102, 97,150,
+150,145, 6, 6, 36, 3, 27,150,133,124, 42, 42, 42,152,213,192,238,221,187, 25, 8,109, 1, 3,182,244,239,221,187,167,165,165,
+ 85, 80, 80,176, 98,197, 10,126,126,254, 27, 55,110, 32,143, 13, 0,101, 21,200, 29,112, 27, 33, 0, 32,128, 80,230, 0, 14, 24,
+166, 51,192, 86, 54,111,121, 37,224, 35,202,248,255,204,182,255,199, 55,129,234,126, 14,142, 31, 92,188,187, 5, 28, 94, 88,186,
+128,199, 34,208, 55, 4,222,188,245,235,200,137, 54, 80,153,200,204, 1, 25,174,184,243,233,121, 93, 78,210,183,111, 63, 63,125,
+ 7,205, 1,252, 98, 98,119,242, 8,193,234,136,218,234,132, 29, 91,193,219,106,254, 66, 6, 91,254,120,232, 50, 70,100,245,113,
+113,177,243,129,231, 0, 88,255,253,144, 22,197, 94,190,176,252,255,243,139, 17, 84, 7, 0,139,138,191,192, 60, 10,204,169,127,
+192,115,182,140, 76,192,238,192, 31, 72, 69,133,163, 14,248,240, 93,224,251,207,183,108, 44, 32, 69, 64, 21,127,128,213,199,239,
+255,191,255,252,255,242,253, 31,168,249,207,192,248,251, 31,116, 48, 7,189, 32, 6,141,238,255, 5,194,255,192, 98, 1, 60,254,
+195,200,128,110, 5, 68, 91, 94,161, 35,174,115, 57,174, 31,191, 78,106,108, 1,211,244,247,239,223,117,117,117,149,148,148, 30,
+ 60,120,176, 10,188, 75, 22, 82, 25, 64, 64, 71, 71, 7,193, 58, 0, 8,176, 78,175, 5,199,199, 51, 16,177, 41, 12,178, 53, 23,
+ 25,248, 58, 56, 16,156, 61,150,128, 53,196,144,123, 3,192,134,191,137,186, 58,219,215,175,248,189, 76, 73,250, 70, 46,229,145,
+119, 81, 48, 16,177, 79,152, 83, 82,226,219,237, 59,127,255,252,249,244,254, 3,184,119, 5,138,226,247, 47, 95,125,122,255, 30,
+232, 42, 60,205,127,180,201,128, 37,107, 55, 35, 47,253, 68,158, 30,192, 14,190, 93, 60,177, 31,178,158,130, 97,227,106,208, 2,
+ 80, 35,251, 8, 33, 49, 3, 90,150, 3,255, 81,234, 0,134,217, 6, 25,117, 47,254,253,211, 95,112,234,148,135,184,246,150,151,
+192,210,159,151,149,216,131, 35,129,145,187,239,192, 62, 39, 87,231, 77,107, 55, 52,119,118,148,127,252,248,255,223,191,149, 43,
+215,138,136,136, 60,250,132, 83, 23, 90, 53,192, 64,104, 11, 24, 16, 88, 90, 90, 2,219,248,231,206,157, 51, 50, 50,114,118,118,
+222,191,127,191,156,156, 28,176,133,100,111,111, 15,140, 32,160, 56, 43, 43,235, 8, 95, 2, 4,217, 7, 0,239, 1,160,113,129,
+ 0, 32,128,112,238, 4, 6,246, 3,230, 94,222,163,243,247,170, 4,235,199, 31,255, 89,110,255, 23, 96,126,253,233,133, 5,116,
+ 27, 33, 19,182, 1, 25, 81, 33, 67,175,132,184,191,255,225, 77,245,255, 95,190,126, 98,102,225,103, 96,226, 42,235, 33,176, 83,
+201,195, 91,103,195,212, 10, 6,166,111,240,130,148,135,135,255,239,239,247, 12,255,191, 62, 60, 54,203, 68, 79, 14,231,224, 50,
+176,145, 13,206,154,127, 24,152,217,254,131,171, 1,112,233, 15,106, 46, 51, 64, 9, 92, 32, 33,173,102,214,228,134, 63,191,223,
+177,128, 23, 57,131,250,248,127,254,255,248,205,240,233, 51,176, 51,240,255,207,127, 38, 22, 86,198,214, 38, 44,139, 91, 82, 82,
+ 64,195,199, 11, 23,220, 97,252, 13,106,254,131,186, 25, 32, 10,220, 74,250,207,204, 8,154,139, 98, 41, 46,113,195, 99,117, 74,
+115,202,131,187, 15,200,136, 81, 96,250,126, 15, 94, 63, 99,108,108,108,102,102,246,250,245,235,187,119,239,130, 22, 38,254,251,
+183,118,237, 90,130,117, 64, 78,124, 60,167,152,152, 15,182,225,154, 28,112, 5,192,137,187, 40,135,100, 72, 52,189,210,226,226,
+ 36,185, 31,216, 27,176, 6,247, 6,196, 56, 57,117,172,172,104,154,250,209,202,119, 96,136,161,205, 6, 19,172, 3,132, 85, 85,
+ 62,191,127,207,194,206,246,243,231,143,191,191,255, 0, 3,153, 87, 80,240,227,187,119,192,210, 31,127,243, 31,190, 17, 12, 50,
+ 1,112,242,220, 37, 96, 5, 0, 31,253,199,181, 47, 76, 77,242,253,155,183,111, 86,173, 94, 14, 23, 9,139, 78,126,247,139,180,
+117,159,152, 99, 62, 24, 34,140, 4,251, 1, 12,219,161, 7, 57,168,108,132,238,189,255,248,251, 47,241,110,112,114,112,186, 40,
+120,209,205,219, 35, 53, 54, 89, 79, 95,119,211,198,205,199, 47,156, 77, 75, 75,123, 68,232,144, 50,120, 53,208, 13, 6, 4,119,
+ 56, 2,107, 11, 96,143, 97,203,150, 45,192, 38, 17,176,223, 0, 89, 11,119,245,234, 85, 96,219, 31, 88,250,195,235,146, 17, 14,
+208, 54, 3, 35, 3,128, 0,194,119, 20,196, 63, 93,151, 75, 12, 46,151, 72,177, 73, 71,199,122,210,164, 69,121,249,145,210,242,
+192, 84,251,147,149,157,227,201,243, 79,246,190,113,196,232, 53, 52, 84, 74, 72, 8, 91, 48,111, 29,195,191,135,192,150,253,159,
+ 31,223,165, 37,249,229,248,254, 16,208,246,247, 31, 11,211,191,223,140, 44,172,255,255, 64,171, 1, 32,241,255, 47,145,203, 90,
+210,114, 65, 67, 10,245,149,153,172, 44,140,144,115,131,254,254,253,251,225, 51,176, 38, 96, 96,102,249, 55,109, 42,190,244, 23,
+159, 0,218, 28, 48,111,238, 77, 6,200,137, 52, 76,192,238, 2,104,204,167,168,196,135,160,189, 31,191,124,196,122,212, 15, 65,
+ 0, 44,131,128,157, 0,160, 35, 63,125,250,196,204,204, 12,100, 72, 72, 72,252,254,253, 27, 57,171, 0,235, 0, 92,103, 66, 64,
+154,234,130,100, 45,247, 20,130, 4, 41,137, 37, 62, 38, 16, 39,113, 88,150,236, 57, 0,180,146, 29,235, 90, 32,130,219,193, 20,
+204, 76,129,228,141,131, 7,127,124,251,254,239,239, 95, 77, 99, 99, 93, 43, 59, 30,105,188, 1,248,159,241,225,253,187,160, 25,
+ 23, 6,134,164, 32,232,148, 14, 80, 4,153,141,117,139,200,173,231,192, 36, 33, 24, 30,157,242,240,241,139, 19,135,182, 0, 69,
+ 86, 45,157,107,110,231,195, 43,110, 67, 76, 64,133,129,246, 97, 16, 62,233,225, 47, 35,246, 77, 8,143, 2, 37,182, 63,251, 65,
+173, 66, 71, 31, 12,206,156, 57,179,247,196, 65, 97, 17, 97,146, 14, 41,129, 84, 3,196,168,228,229,229, 13, 14, 14, 62,126,252,
+ 56,176, 25,116,234,212,169,209,179,128, 48, 71,255,209, 74,127,180,249, 0,128, 0,162,254,165,240,202, 26,166, 91,119,222, 9,
+240,230, 18,147,150,125,247,249,143,189,119, 44,241,122, 45, 77, 53, 44, 77,171,210,211,235, 24, 24, 94, 10,242,178,200, 9,253,
+ 35, 60,106,153, 88, 66,185,155, 27,219,167, 3,201,252,130,156, 95,223,127,255, 3, 47,181,236,159,218, 79,164,222,164,100,208,
+ 73, 65,243,230,220,248,247,159,185,178,194,159, 14,145, 10, 58,242,232,231,207, 95,191,126, 65,138, 69, 72,129, 56, 92,207, 7,
+ 37,120,194, 4,241,128,152, 83, 63,113, 1, 13,123,123,226, 21, 63,191,119,211, 92, 85,134,108,187,222,254, 82,225, 17, 87,113,
+ 9,181, 33, 85, 35,174, 83,222,144, 0,211, 31, 70,246,239, 76,216,231,255,239,126,254,163,198,139,167, 64, 32,103,161,176,137,
+137, 9, 29, 18,137, 37, 24,140, 22,247,184,234, 0, 60,178, 0, 1, 52,122, 41,252,144, 4,163,183,186,143,130, 81, 48, 10, 40,
+ 7, 0, 1, 52,122, 35,216,144, 4,163,165,255, 40, 24, 5,163,128,114, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80,
+ 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64, 52,
+185, 20,126, 84,239,168,222,193,169, 23,114, 26,196,104, 88,141,234, 29, 81,122,241, 0,128, 0, 98, 65,203, 30,196,232,193,154,
+133, 40,209, 59, 10, 72, 5,184, 10,178, 81, 64,106, 40, 17, 25,146,143, 30, 61,122,250,244, 41, 59, 59,187,136,136,136,156,156,
+ 28,221,188, 0, 63,243,117, 48,231,160, 87,175, 94, 61,125,250, 20,191, 26,105,105,105, 49,108,187, 79, 40,209, 59, 10, 40, 7,
+ 0, 1,132,190,236,151,224,206,123, 60, 27,172,208,244, 98, 30, 77, 76,211, 51,135,233, 95,184,224, 87, 80, 80, 80,160,169,169,
+137, 95,187, 52,234, 25, 56,200, 57, 33, 52, 52,212,197,197, 5,143, 94,170,212, 1,238,238,238, 64,114,231,206,157,116,208,251,
+245,235,215,181,107,215, 66, 46,133, 15, 14, 14, 54,196,125,159, 34,166,103, 9, 94, 10, 63, 99,198, 12,172,173, 13,252,161, 68,
+ 76, 24, 2, 75,168,159, 63,127, 2,173,224,224,224,248,241,227, 7,176, 38, 56,125,250,180,190,190,190,138,138, 10, 46, 45,214,
+214,214, 4,253,245,252,249,115,200,181, 39,248, 1,176,244,135, 28,247, 77, 76, 88, 17,179, 23, 36, 44, 44, 12,127,186,130, 0,
+121,121,121, 6,240,121,203, 64,191, 67,226, 14, 79,154, 4,166,219,162,162, 34, 60,150,190,127,255,222,220,220, 28,107, 80, 3,
+245,106,105,105,225,209,251,242,229,203,218,218,218,209,230, 14, 37, 0,207,165,240, 0, 1,196, 50,108, 60, 73,255, 70,241,198,
+ 25, 30,184,164, 2, 50,119, 16,212,190,127,255,126,120,246,248,246,237, 27, 23, 23,215,235,215,175, 9,214, 46,123,246,236, 65,
+102, 35,103, 72, 32,119,245,234,213,196, 7,194,229,203,151, 33,133, 56,154, 57, 36,129,140,140,140,236,236,108, 98,174,126,133,
+220, 4, 25, 23, 23, 7,244,111,111,111,175,130,130,130,160, 32,225,189,208,192,146,119,251,246,237, 16,182,135,135,199,142, 29,
+ 59,176,178,241,244, 56,225, 9, 3,200, 48, 54, 54,158, 53,107, 22,164,160, 36, 38,193,124,252,248,145, 23, 12,128,165, 63, 39,
+ 39, 39,176, 50,248,240,225, 3, 63, 63,255,169, 83,167, 24,192, 27, 86,113,105,212,209,209, 1, 22,151,240,130, 27,185, 21, 15,
+ 44,208,129,228,137, 19, 39,162,162,162,136, 9, 97, 34, 75,127, 8,152, 48, 97, 2,229, 9,155,155,155,251,218,181,107,172,172,
+172,191,126,253, 2, 6,242,237,219,183, 43, 43, 43, 9,234,122,137,116,188,160,173,173,237,225,195,135,225,220, 55,111,222, 16,
+169, 17, 19, 60,128, 29,162, 55, 10, 40, 47,253, 25, 48, 46,133, 7, 8,192,222, 25,219, 48, 8, 3, 81, 52,146,171,204, 16, 15,
+225, 34, 61,131,120, 10,247, 46,211, 51,144,229, 13, 34,121, 28,183,121,242, 33, 11,129, 2, 7,105, 40,242, 43, 64, 50, 58,225,
+227,223, 63, 23,247, 47, 90, 0, 74, 41, 74,133,120,157,131,145,199,243, 53,137,154,119, 84, 46, 17,234, 23,121, 53,142,163, 70,
+199, 45,124,225, 33,238,148, 18, 44,185,152,116,166, 65, 55,133, 23,111,200,163, 64,251,231,156,187, 41,252,238,151, 71,251,203,
+204, 72, 49,133,167, 6,104, 90,129,223, 77,225, 9, 12,210,159,155,194,147, 39,176,243,110,192,236, 14,188,127,107,102, 9,104,
+127,154,140,123, 51,133,175,181, 26, 99,120,213, 70, 1, 16,150,239, 26, 95,110, 79,128,133, 68,171,111, 2, 64, 8, 65, 46,122,
+ 70,173,159,124, 3,194, 31,178,142, 49, 82, 3, 72,140, 97, 24,148,236, 63, 7,236,239,189,159,215, 0,105, 35, 54, 18,233,244,
+230, 58,231,104,163, 41, 87, 50,203, 86, 96,173, 37,193,248, 41,200,207, 63,251, 79,172,210,124,225,215,166,240, 31, 1,216, 59,
+155, 19, 6, 97, 56,138, 11,210, 13,114,235, 16, 30, 29,160,189,101,129,220, 29, 35,251,184, 71,134,201, 49,217, 64,232,207,252,
+105, 16, 81, 19,219, 82, 40,244, 29,130, 40,228,160,201,251,240,144,247, 73, 1, 96,155, 21,239, 84,130,205,134,181, 60,171, 1,
+ 44,187,223,250, 57,158,217,255, 20,157, 9,133,193,218,114,120,250,242, 52,208,122, 96,255,155,185, 20,229, 46,165,240,140, 53,
+ 46,126,133, 91, 2, 83, 49, 3, 99,113, 6, 40, 21,215,255, 90, 20,120, 7,155,165,240,197,208,195,215, 65, 0,134, 97, 32, 7,
+132, 16, 46,207, 86,120, 46, 80,130, 24,227,113,114,130,253,179, 42,139, 0, 72, 14, 72, 77,100,181,121, 11,222,207,181,207, 95,
+ 88,216,216,109,231,156,214, 26, 37, 80, 74,113, 13,251, 35, 6,172,210,182,173,233, 55,154,217,223, 90, 43,155,113,149, 3,246,
+ 48,142,227, 65, 8,240,222, 27, 99,246,158, 78,211,116, 77,224,109, 75, 56,238,186,174,239,123, 49, 28,127,251,191,100,255,102,
+171, 20,254, 33, 0,123,215,110,195, 48, 8, 68,163,140,132,216,129, 79,155, 53,178, 6, 27,100,141,136, 58, 29,107, 32,209,177,
+131, 27, 40,242,146, 83, 40,130, 13, 1, 81,230, 10,203,182,140,125, 6,241,222,221, 67,226, 86, 18, 64, 45, 92,252,184, 50,188,
+138, 3,180,214,163,121, 64,215,195,238,171, 46,215,199,253, 38, 38,126, 16,240,135,121, 85,123, 27, 99, 28,165,132,137,126, 46,
+ 69,225,129,218,136,149, 48, 3, 39, 8,128,140, 26,130, 3,142,250,138,212,255,211,167, 40,124,217, 59,158,138,194,211,205,198,
+ 64, 75, 41,203,122,146, 82,170,228, 4, 13,229,167,142, 66,234,162,240, 69, 11,218,181, 16,194,249,189,151, 56, 78,240, 69,239,
+ 61,109,190, 68, 69,225, 95,181,166,183,205, 90,219,128,242,130,254,200, 54,190,216,104, 72,213,193,195,228,240,104, 42, 48, 97,
+ 41, 37,198,152,115,142,115,142, 81, 35,145, 13,151, 66,136,156,115,183, 57, 16, 31, 71, 99,204,145, 22,180,220, 16,118, 32,161,
+ 4,167,162, 91,224, 57,198,136,208, 31,124, 0,183,255,208,223,181,167, 0,162,102, 5, 64,245, 73, 96, 50,234, 0, 96,115,146,
+164,126, 0, 36,107, 45, 93,186, 20, 77,124,219,182,109, 64, 65, 34, 13, 57,113, 95,203, 66,241, 26,241, 35, 63,240, 6, 38,188,
+169, 8, 76,190,144,194,136,212,210, 31, 94,135,145,212, 60,132, 52,255,209, 46,133, 39,175, 19, 0, 55, 1,207,165,240,240, 38,
+ 63,176, 76, 1, 54,102, 85, 85, 85,129,141,104,118,118,118,126,126,254,150,150, 22,130,253, 0,228,177,126, 92,243, 1,100, 84,
+237,192,130, 24,174, 6,243, 68, 44, 96, 3,159,151,151, 23, 88,234, 29, 59,118, 12,216,248, 5,150, 44,223,145, 46,133, 7,221,
+ 59, 77,232, 82,120,204, 97, 31,120, 91, 30, 24,221,175, 72,188,125, 19, 24,191,144, 21, 65,100,244, 3, 8,142,252,192, 1, 48,
+ 34, 74, 75, 75, 33, 57, 14,104,221,237,219,183, 25, 64,199,244, 26, 2,235, 63, 98,214,225, 80, 82,214, 67, 42, 15, 50, 12, 4,
+198, 35, 48,118, 44, 45, 45,225, 7,207, 1, 93, 11,236,187,140, 22,238, 12, 72,119, 2, 35, 15, 1, 33,167,118,128, 0, 26,236,
+147,192,244,169, 3,128,234, 33,253, 86,120, 71,152,200,210, 31,216,252, 39,219,107,144,230, 63, 90,195,255,197,139, 23,180, 46,
+253,225,205,127, 29, 29, 29, 8, 23,200,160,176, 19,128, 31,192, 71,255,185,185,185,107,107,107,129,165, 63, 68,220,192, 0,116,
+201, 9,176,220,247,245,245, 61,114,228, 8,144,164,162,165,240, 48,129, 79, 0,160, 1, 96,179, 17,222, 3,192, 92, 55, 13, 44,
+ 83,128,117,192,143, 31, 63,128,181, 20,176,174,130, 92,183, 9,191, 20, 30,200,192, 95,250, 67, 42,117,204,177, 32,228,153, 97,
+ 82, 1,217, 26,137,159, 3, 0,214,199,222,222,222,192, 28,196,197,197,229,224,224, 0, 12, 1, 96,148, 1,107,232, 5, 11, 22,
+ 48, 49,209,118,211, 40,176,172,135, 15, 31, 65, 50, 32,241,213, 9,176, 65,243,232,209,163,240,240,112, 6,240,165,211,160,171,
+199, 70, 1, 90, 63, 24,199,189,240, 0, 1,200, 59,131, 28,132, 65, 32,138,238, 61,141,186, 55,158,171, 27,238,194,198,112,136,
+ 90, 57, 66, 87,156,130, 21, 97,107,244,153, 73, 8,193, 90, 1, 99, 98,226, 95,145,118, 51,105, 50,111,102, 24,202,252,250,159,
+192, 29,157, 0, 84,159,188, 39, 88,164,186,181,158,254,162,253,110,123,158, 46,167,105, 35,241,128,106,160,201, 84, 48, 52,142,
+163,236,227,227,126,117,137,225, 45,125,156, 14,250, 75,250,255, 60, 20, 30, 27,228, 85,135,222, 14,133, 7, 34,178,192, 63,231,
+249, 49,220,220, 24,147, 30,126,117, 40,124, 58,243, 83, 68,205,245,102, 59,233, 63,148,199, 66,239,189,244,234, 81,140, 49,132,
+ 0, 95,168, 6,168, 0,174,175,199, 13,229,176, 46,250,246,197,185,254,245, 40,146,155, 93,115,108,244, 67,105,173,225, 62,244,
+119,206, 89,107,161,191, 82,138,216, 60, 12, 67, 77, 0, 56, 44,169, 41, 6,224,134,173,244,151, 77, 72,161, 63, 98,113,108,185,
+187,251, 79, 68, 5,144, 58, 1,185,238, 2,104,144, 78, 2, 83, 82,250, 3,211, 16, 25,221,100,200, 88, 16,176, 43, 64,124,233,
+ 15, 44,238,129,165, 63,116,148, 99,221,250,181,224, 91,252,128,149, 1,131,147, 35, 3, 3,225,101,160,144, 85,137,144,177, 32,
+ 96, 19, 21,114, 9, 42,176, 8, 38, 34,249,130,138, 90,248,189,240,164,150,254,144,230, 63,214,198, 62,121,157, 0, 72,181,145,
+147,147,131, 51,160,130,131,145, 47,133,143,137,137, 97,192,184, 20, 62, 54, 22,231,189, 17, 20,206, 1, 48,144,117, 41,188,176,
+176,240,219,183,111,129,237,253,215,175, 95, 3,123, 0,240, 75,225,129,253, 54, 96,124, 1, 75,127, 96, 53,128, 54,184,143, 12,
+ 32,165, 60,100, 20, 8,237, 38, 50, 60,186,208, 74,127,200, 38, 0,100, 46, 25, 13,127,226,199,127,128,224,246,237,219,192,232,
+ 0,122,208,210,210, 18, 72, 2, 3, 13, 88,158,110,218,180,137,153,153,153,152, 10,128,146, 86, 60,178, 9, 36,233, 50, 6, 3,
+ 32,227,220,185,115, 64, 55,219,216,216, 0,147, 22,176,151,137,188, 96,122,196, 2,200, 42, 32,180, 73, 96,228, 85, 64, 0, 1,
+216,187,130, 20,134, 65, 32,248, 1,159, 32,248, 12,207,130, 63,242,149,130, 79,240,228, 55,188,116,154,129,101, 91, 75,220,228,
+ 80,122,232,158, 36, 36, 16, 54, 58, 51,113, 71,246,119,139,192,223, 68,127,205, 1,151,180,255,199,241,147, 3,108, 19,151, 3,
+ 8, 46,125,100,172,214,186,125,118,237, 11, 79, 71,208,246,253,165, 41,252,170,161,104,164, 59,241,228,173, 39,191, 72, 39, 64,
+ 70,160,191,108, 40,173,129,239, 24, 66, 96,255,119, 16, 0,189, 64,250,162,110, 41,254,206,117,175,231, 0,236, 53, 0, 61, 9,
+145,147,156, 51, 16, 65,239,152,157,231,202,123,223,123,103,231,181, 57, 39, 25, 72,154,194,179, 38,108, 52,243,228, 35, 68,191,
+ 91,118,114, 4,238,113,179, 94, 68,183,237,164,198,160,227,179,148, 2,249,159, 82, 2, 31, 56,231,198, 24, 70, 2, 16, 4,167,
+144,186, 87, 18,184,170,253,185,142,144,177,214, 26, 6,128,254, 24, 35,242,134, 95,153,127, 29,120, 27, 15, 1,196,130,153,223,
+200, 54, 11, 45,117, 34,183, 95,144,155, 69,180, 43,253,129,201,142,194,165,114, 36,105,127,252, 4,231,120, 61, 39, 39, 23, 65,
+237, 88, 7,166,137, 4,192, 2, 5, 88,226,239,221,187, 23,126, 47, 60,124, 49, 40, 49,117, 24,214, 75,225, 33, 59,110, 8,110,
+ 10,195,172,212,115,115,115,241,148,254, 16, 32, 36, 36, 4, 25,226, 7,182,166,145, 27,254, 53, 53, 53,248,147, 28,133,251, 0,
+144, 67, 3,109,171, 4,193,250, 30,216, 21,219,182,109,219,159, 63,127, 62,124,128, 92, 10, 15,114, 9,176, 67, 0,228, 2,217,
+196, 55,228,129,246, 34, 47,253, 68,158, 30,192, 95,250, 51,144, 59,199, 67,121, 29, 80, 81, 81,113,240,224, 65, 96, 52,181,183,
+183, 3, 91, 12,192, 14, 16,100, 75, 4,193, 33, 62, 50, 90,241,200,122, 73, 5,192,154,233,233,211,167,200,251, 0, 46, 94,188,
+ 8,236,186, 1, 91, 21, 68,174, 91, 29, 9, 0,109, 18, 24, 25, 0, 4, 16, 11,254, 66, 28, 87,223,150,214,128,140,210,159,206,
+249,164,165,165, 5,255,254, 70,130,149, 37, 37, 67,186,144, 66, 19,178, 12, 31,200,128,236, 5,131,223, 11,143,167, 92,131, 92,
+236, 14, 44,188,144,231, 0, 32,205,219,178,178, 50,252,165, 45, 86,189,164, 14, 25, 17,217,240,167, 86,151, 20, 57, 28, 48, 47,
+133,199, 95, 7, 0,131,197,219,219, 27,216,146,101, 99, 99,251,249,243, 39,176, 14, 0,134,176,128,128, 0,176,192,194,115, 80,
+ 7,114, 62,130, 79,255, 2,237, 5,170,135,231, 29, 92,185, 12,146, 36,208,182, 13,147, 58,247,139, 57,230, 67,210, 40, 16,164,
+ 14,128,111,254,202,202,202,130, 48,128, 61, 33, 60, 90,158, 61,123,134,188,219,107,197,138, 21, 4, 79,248,193,165,151, 36,112,
+ 1, 12,208, 4,159,128,193,104,185,207,128,116, 39, 48,114,209,143,188, 10, 8, 32,128, 88,168, 88,190, 99,234,165, 79,109, 65,
+255,210, 31, 8, 68,193,128,108,237, 74, 96, 64, 45,199,192,199,127,144,203, 62,172,151,125,146,125,228, 3,133,122,177,246, 6,
+136, 4,100,207, 1,160, 37, 9,172, 93, 46,130,201, 6,216,173,188,123,247,238,254,253,251,191,127,255,254,247,239, 95, 3, 3,
+131,176,176, 48,130,113,119,226,196, 9,120, 55, 2, 46,130,204,198,149, 42,224,141, 3, 72,205, 1,204, 65, 4, 43, 27, 56, 8,
+163,236,254,100,178,115,144,180,180,116, 96, 96, 32,126, 53,205,205,205, 84,215, 59, 10, 72,170, 3, 48, 75,127, 32, 0, 8, 32,
+ 22,106,149,161,163,167, 53, 13, 56, 64,139, 2,226,143,132, 29, 66,158, 26, 16,163,148,193,128,120,245,192,254, 13,145,231,252,
+224,105, 28,144, 81,221, 82,171,134, 38, 21,136,137,137,145, 29,182,148,232, 29, 5,196,215, 1,184,164, 0, 2,104,244, 82,248,
+ 81, 48, 10, 70,193, 40, 24,161, 0, 32,128, 70,111, 4, 27, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96,
+ 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17,
+ 10, 0, 2,136,134,151,194,143, 94,192, 61,170,119,136,234,221,236, 55,133,120,189,190,155,114,168,165,119,163, 47, 9,122,253,
+ 55,163,232,245,177, 1, 93, 47,202,200,200,248,251,247,239,251,247,239,255,250,245,139,133,133,229,201,147, 39,145,252, 10, 59,
+207,156,249,174, 39,107, 97, 97,193,204,204, 12, 89, 68,187,229,200, 83,106,133, 21,196, 94, 56,128,236, 80,185,122,245,170,148,
+148,212,187,119,239,128, 36, 39, 39, 39, 3,108, 67, 31,154,189, 88,245, 62,190,178, 36,221,246,209,178, 51,106, 44, 98,110, 60,
+188,124,184,244,142,166,103,226,245,226, 1, 0, 1, 68,194, 81, 16,248, 55, 37, 82,241, 2,110,137, 19,215,238,188,122,206,201,
+198,161,206,197,127,199, 78,135,110,149,225,144,184,128,123,176,129,155, 55,111,246,247,247,247, 86,129,216, 27, 14,131,206, 0,
+192,163,248,193,147,199, 79,159, 60,185,121,227,198,251,247,239,229,229,229,121,120,121, 61, 92,221,240,155, 15, 57, 34, 9, 2,
+112, 93, 94, 6, 20, 39, 62,166, 32,187,160,177,222, 33,140, 15,132,190, 3, 83,255, 65, 7, 49,173, 22, 34, 65,163,113, 63,131,
+ 82, 60, 56,121, 45, 96, 56, 91, 68,114,248,134,188, 65,216,187, 70, 4,143, 66, 96,233,249,245,235,215, 93,187,118, 1,147,113,
+ 40,171,176,132,172,232,143,175,223, 57,191,253,177, 46, 73,181,243, 13,223, 50,119,198,230,189,123,221,220,220,232,144, 36,254,
+254,253, 11,116,131,190,190,190,154,154,218,185,115,231,126,252,248,161,170,170,138,121, 56, 60, 86,240,231,207,159,139,103,206,
+203, 36, 27,150,153,105,159,216,213,179,246,178,131,170,142, 19,145,122, 71, 1, 25, 0, 32,128,136,170, 0,136, 57,210,135, 42,
+ 23,112,171,158,187, 43,248,246, 11, 35,195,255, 95,127,153,127,191,251,242,228,205,199, 7, 83,206,242, 56,154,139,104,107,224,
+209,117,118,127,186, 6,116,149, 54,243,250, 93,255, 14,159,254,159, 22,193, 0, 20, 41,106, 37,173, 40, 39,233, 2,110, 92, 53,
+ 7,173,175,236, 96,128, 28, 99, 89,207,200,216,132, 69, 10,148, 79,234, 25,195,174,135,210,103, 73, 56,172,244,255, 15, 46,253,
+237,142, 28, 57,130,167, 2,208,211,223,165,165,101,178,122, 53,223,201,227,160,109, 80,183,110,220, 4,146, 41,137,235, 62,126,
+201,249,252, 1, 95, 53,239,234,234, 10,172, 6,128,165,252,190,125,251,176,158,148, 71,252,166,127,204,148,156,145,158, 62,131,
+184,202, 3,249, 26,122, 18,128, 82, 60,226, 80, 54, 50, 42, 0,152,239,240,156, 60, 10, 1,119,239,222, 61,176,106, 85,147, 75,
+152, 65,116, 22,155,184, 32, 3, 11, 19, 3, 3, 19,195,191,255, 12,255, 88,255,253,252,239, 21,159,246,104, 82,199,177, 99,199,
+172,172,172,104, 93,152, 50, 49, 49, 25, 24, 24, 28, 56,112, 0, 88, 7,152,153,153,189,120,241,226,226,197,139,122,122,122,196,
+ 28, 51, 3,244,172,179,147,107,123,223,166,242,132,203, 22, 30,153, 22,230,123, 74, 38, 63, 81, 51,141,195,170, 23, 18,155,248,
+171, 7,160, 44,201,149,253, 48, 2,104, 23, 2, 35,250, 94,176,213,255, 0, 1,196, 66,100,134, 49,136,211,205,180,206, 33,190,
+ 14, 32,227, 2,110,153,187, 47,141, 56, 5,217, 36,249,255, 50,252,231,252,192,245,226,245,235, 23,159, 63, 42,178,243,220,216,
+121, 4, 24,189,162,184,235, 0, 96, 89,127,227, 46,211,255,255, 28,127, 25,217, 3, 92,127, 7,186,125,103, 96,248, 7,107, 55,
+145,152, 91, 73, 44,187,225, 71, 54, 66, 14,162,218,122,131,245,199,239,223,233,137, 38, 4,171, 1,130,117, 42,190,253,159,245,
+160,204, 0,185, 5, 9,171, 20, 49,224,246, 94,190,158, 85,145, 16,118,113,232,114, 53,151, 79,100,148,254,125,125,125,192,220,
+ 94,220, 6,189,248, 9, 79, 14,119,112,248,168,166, 6,108,122,111,182,181,157, 4, 23,140,138, 98, 0,223,225, 54,101,249, 42,
+124,117, 0,164,244,135, 28,236, 21, 30, 30, 14, 57,245,136, 96,129,136,181,237, 15, 57, 48, 3,238,206,140, 12, 98, 75,127, 50,
+129,113, 31, 3,236,162,118, 80, 5, 96,212,203,112,174,152, 70, 86, 1,107,199,233,129,105,138, 78,174, 12,204, 63, 25, 89,153,
+ 24, 89,152, 24,153, 89,255,255,103,252,247,245,207,255,191,127,129, 77,170,212,248,172,172,186,252,187,226,226, 36,109,106, 35,
+ 3, 0,243,130,164,164, 36, 48,156, 15, 30, 60,120,227,198, 13, 96,253,109,105,105,121,242,228, 73,109,109,109,130,122,143,236,
+ 93, 30,100,240,237,236,103,230,168,250, 47, 54,134, 19,115, 10,194,123,202, 63,148,247, 44, 85, 50,140,194, 83,184,195,139, 23,
+ 96, 20,163,137, 80,114, 30,229, 72, 0, 0, 1,196, 66, 76, 33,181,108,199, 82,101, 21,229,244,166, 84, 98,234, 0,242, 46,224,
+ 86,184,241, 76,157,141,155,237,255, 31,206,158,210, 63,223,126,113, 20,183,242,179,113,252, 96,253,254,245,199,119, 78, 6,198,
+231, 7, 79,176,201, 72,242,243,243, 99,213,123,227, 46,195,172, 21,192, 18,255, 27, 24, 49,216,154, 50, 5,186, 49,194,234, 0,
+ 6, 96,111, 96,214, 10,162,194,130,212, 11,184, 33,165, 63,164,232, 7,249,253,200,239,239,191, 64, 23,252, 58,151,239,238,236,
+116, 37,104,206,221,142,187,172,140,183,161,209,192,248,148, 81, 68, 3,198,126, 37,154,136,111,115, 60,176,237,143,124,153, 9,
+138, 84,250,106,176, 20,190,230,255,155,203,146, 53, 83,252,255, 51,252,111, 47,216, 96,238,160,182,108,218,225,222,213, 81, 12,
+171,255,215, 23, 77,147, 82, 39,182, 41,253,229, 97,186, 52, 7,195,183,183, 87,129,141, 47, 94, 49, 61, 72,233, 63,125,250,116,
+172,138,121, 5,174,168,169, 1, 99,228, 24,176,159,112,242, 36, 3,248,206, 62, 16,128,239,240,143, 12,155, 50, 99, 78, 53,211,
+ 63, 89,172,218, 33,165, 63,176,237, 15, 44, 83,240,220, 59, 70,176, 41, 3, 41,253,145,234,131,244, 25, 51,176, 39, 75,166,176,
+247,240,230, 3, 35, 24,255, 11, 69,149,101,132,140,202,128, 40,111,212, 62, 15, 83,248,123,200,128, 13, 16,252,251,151, 80, 80,
+ 80, 0, 17, 7, 50,128, 53, 1,147,106, 50,212, 96,176, 26, 52,189, 44,225,232,246, 34,223,195, 8,146,197,109,239,143, 31, 63,
+ 36,228, 21, 24,254,253, 98, 98,103, 96,100, 97,254,243,249,227,143,123,247, 95, 63,121, 42, 99,229,192,200, 38,192,248,251, 23,
+ 3, 51, 83,103,102,137,235,172,134,162,162, 34,178,203, 11, 92, 71,140,192, 75,100, 96,122,248,254,253,187,144,144, 16,176,125,
+ 0, 12,237,251,247,239, 47, 88,176, 64, 83, 83,243,195,135, 15, 4, 59, 88, 64,189,242, 76, 39, 37,229, 60, 62, 28,188,252,241,
+ 61,251,226, 45,127,182,157, 88,146, 23,202,201,242, 13, 24,107, 81,216,251,187,163, 0, 47,192,140, 44,180, 62, 1, 64, 0,177,
+224, 47,250,129, 65,236, 88,101, 63,235,224,204, 52,134,244, 11,139, 46, 51, 88, 19,182, 18, 82,238,127,251,182, 20, 24,167, 63,
+126,204, 19, 18,218, 67,204, 5,220, 98,207,223,137,137,115,112,212,103,253,125,243,238,207,179, 55, 44,108,172, 92,140,204,220,
+ 64,196,204, 34,196,202,241,254,243,135,231,251,142,241, 7,122, 98,213,139, 86,190, 31, 62,253, 15, 92, 1, 48,244, 85, 51,254,
+103,100, 96,252, 79,108, 87,128,212, 11,184,145, 75,127, 6, 22,230,123,207, 65,185,247,209,203, 31,114,226, 28,170, 9,155, 59,
+ 59,125,241, 27, 2, 44,253,129,229, 62, 51,227,155,191,255, 69,216,197, 24,185, 35,158,253,251,247,238,199,143,213,127,207,148,
+ 81,210, 83, 33, 88,123, 85, 79,241,179, 20,170,153,178, 33,153,135, 73, 14,200,205,202, 85,215, 55, 83, 90, 58,245, 96, 99, 95,
+246,204,153,196,118,150,129, 69, 80,122,225, 21, 72,190,181,177,177, 1, 86, 0,184, 74,127, 80,141,232,240,150,129,225, 18, 3,
+195,149, 15, 47,121, 84,229, 24,102,207,254,178,127, 63,131,170, 42,208,169,160,104, 2, 10,130,186,152,186,215, 47, 93,148,197,
+ 90,250, 3,219,182,255,192,128, 1,124,159, 12,169, 5, 22,156,141, 92,250, 51,128,166, 1,112,198, 14,176, 91, 0, 41,195,177,
+214,178,255, 96,229, 14,176,177, 3, 12,135,205,135, 80, 38,220,166,207,152, 9,233, 95, 40, 40, 40, 0,179,207,196,137, 19, 33,
+226, 64, 6,176, 2,216,185,115, 39,252,220, 74, 6, 12,189,144,238, 8, 80, 87,106,106, 42,150,241,113, 88,167,103,214,236,217,
+ 64,123,183, 28,126,138, 86, 26,178,240,242, 50,176, 50,255,253,246,225,250,182,189, 75, 87,173,153,246, 12,100,209,169, 70, 62,
+ 85, 59,175,159,143, 30, 95,189,120,246,242,253, 91, 31, 95,188,184,114, 5, 24,113, 18,100,148, 38,152,199,174, 97,150,224,207,
+158, 61,171,173,173,237,233,233,249,245,235, 23, 51, 51, 51, 47, 47,239,215,175, 95, 79,157, 58,133, 63, 89, 66,244,126,120,114,
+180,113,254,163,185, 5, 82,239,190,178,177,177, 48,201, 8,114,188,120,243, 43,189,235,143,190,137,177, 28,238, 94, 29,164, 26,
+128, 71, 52, 38, 99, 20,160,149,254,200,181, 2, 64, 0, 49,225,202, 51,144,115,207, 17,189,117,143,104, 98, 44,128,220, 0,243,
+237,219, 50, 72,233,207,113,250,193,183,157, 42, 12,132,110,134, 97, 57,112,150,255,221,231,127,108, 44,191,206, 94,253,121,253,
+222,143, 93,135, 25,190,255,100,251,255,159,139,129,153,133,129,241,231,191, 63,239,126,254,152,182,123, 11, 46,237,125,213,160,
+102, 62, 98,136, 60, 2,214,190, 98,248,127,243,206,255,162, 86, 18,154, 9,144, 11,184, 33,129,128,255,180, 78,160, 44,242,165,
+ 34,145, 19,158,236, 61,251, 30, 88,250, 67,234,128,219, 79,190, 51,184,172,194,111, 2,176,244, 7, 85, 3,159, 47,115,115,223,
+ 97,231,248, 12, 44,253,127,255, 62,203,204,172,244,235,235, 91,218,165,128,187,231,191, 0, 67, 6, 94,250, 63,191,249,223,200,
+151, 57,183,197,213,198, 21,216, 61,255, 15,150, 37, 12,150, 45, 91, 86,220,198,200, 35,170, 11, 12, 89,143,192,204, 35, 71,142,
+224, 81,252,143,233,177,152, 24,180,244,255,252, 22,116, 74,182,190, 62,168,244,143,139,131,150,254,159,223,114, 2,145, 16,215,
+115,172,218, 67, 66, 66, 28, 29, 29,157,156,156,194,195,195,153, 81, 1, 92, 4,191,107,209, 82, 50,177, 53, 28, 82,217, 4, 1,
+152, 92, 70,108, 77, 11,184, 70, 55, 55, 55,180,182, 54,176, 19, 0, 57,182, 15,230, 50,116,189, 27,102,206, 4,150,206, 16,195,
+225,222,132, 15,142,195,185, 88,237, 5,230, 23, 38, 46,246,223, 47, 30,206,172,169, 89,240,245,195,123,123, 11,136,248,220, 37,
+ 11, 26, 74, 82,212,138, 34,155, 46,239, 91,245,254,190,171,159, 31,145, 29, 92, 96,113, 15,204, 5,231,207,159, 71,170, 50,103,
+ 96, 29,229,131, 4,200,229,203,151, 15, 30, 60, 24, 25, 25, 9,236,165,125,249,242, 5,114,128, 54,176, 95,194,195,195, 19, 22,
+ 22,102,109,109,141,171,232, 7,233, 61,190,246,214,206,162,162,202,222,205,245, 82,215,159,178,124,252,194,252,143,145,225,237,
+151, 95,255,133,149, 11,171, 90,125, 2, 98,112, 86,213,192,106, 28,156, 97,103,130, 1, 86,198, 40,192, 85,250, 3, 1, 64, 0,
+177, 96, 45,250,201,232, 24,162,137, 0, 75,127,180,110, 1,158, 11,184, 89,222,126,120,247,159,149,237,237, 59,142, 13,251, 24,
+ 89,152, 24,126,252,250,255,249, 43,227,159, 63,172, 12, 12,127,255,255,251,241,247,207,231, 63,191, 24,254,225, 28,243,133, 76,
+246,246, 85, 99, 73, 93,224,201, 97,146,189, 67,204, 5,220, 40,205,127, 6,134,229, 57,146,112,182, 73,197, 61,214,255,111,126,
+ 51,138, 16,188,194,155,227,203,126,161,166, 37,175,139, 51,222,188,227,148,250,125,245,239, 95, 80,133,241,240,130, 4,237, 18,
+ 65,215,140,226, 20,183,153,240,210, 31, 34,104, 33, 88, 99,165, 29, 98, 41,116, 21, 40, 75, 48,207, 44, 93,186,244,208,161, 67,
+111,223, 58, 11, 11,239,229, 17,209, 1,166, 22, 38, 38, 38, 60,243,108,143, 30, 1, 43,203, 43,144,113, 35,160,135,223,125,101,
+ 48, 51, 3, 79, 66,220,102,152, 58,149,225,243, 39,134,175, 95, 24,190,124,101,224, 22,196, 55, 9,129, 57,226,127,247,238, 93,
+ 32,217,214,214, 6, 36,213,212,212,200, 27,205,128, 71, 55, 30,101,249,249,249,240, 86, 60,114, 81,142,223,112, 69, 69, 69,248,
+232, 63, 28, 64, 58, 1, 64, 41, 68, 39, 0, 21, 36, 75,171,221,186,122,237,169,160, 32, 48, 72,243,242,242, 38, 77,154, 68,188,
+189,182, 63, 5,254,255,251,146,210, 86,173, 27, 18, 50,179,173, 13,126,127,203,204,219, 87,160, 61,227,195,135,119,239,222, 13,
+180, 26,156,193,191, 17, 44,253, 33, 93, 58, 96,224, 0, 91,217, 6, 6, 6,192,154, 0,168, 49, 51, 51,243,241,103, 44, 85,236,
+147, 39, 79,252,253,253,129, 94,219,182,109, 27,228,202, 76, 6,240,146, 30, 6,240, 61, 66,120,230,105,129,226,247,110, 94,104,
+ 40, 75, 18, 86, 93,125,126,117,252,165,199,140,143, 94,178, 48,252,103,250,249,235,247,187,255,194,217,201, 89,228, 45, 1,162,
+228, 94,147, 17, 5, 0, 2, 8,203, 16, 16,176, 26, 71,230,126,120,250,158,152, 18, 19,222, 3, 0, 15, 1,129, 34, 12,216,252,
+103,191,242,244,175, 0,168,209,135,255, 2,238,107, 79, 30,125, 99,231, 84,250,243, 71,134,147,135,139,149,141,241,247,111, 96,
+ 55, 27,216,225,253,252,247,215,183,191,127,126,254, 7,230,254,255,255, 9,197, 40,176, 26,128,212, 1,224, 41, 1,104,185,223,
+ 87,205,220, 91,205, 88,220,250,135,212,112, 33,166,149, 84,190, 26, 20, 50,157,161,130,144, 66, 31, 58,176,243,255, 13,176,222,
+ 98,249,255,126, 81,138, 96, 36,222, 59,233, 88, 95,158,254,203, 0, 26,253,232, 97,225,143,124,249,240, 76,151, 12,183,132,230,
+199,167, 79, 95, 60,120, 70,211, 40,215, 55, 83,250, 10,142,210,111,156,215,184,190,107,173,107,252, 13, 17,183,118,209, 62,190,
+138,112,219, 63,208,238,208,134, 13, 46, 2,199,247,244, 87, 51, 20,182,254,183,179,179,195,191,244, 83, 65, 70, 22,121,210,113,
+203, 22,208,220,239,178,101,192, 78,192,255, 9, 19, 24,155,154,190,128, 42, 6, 6, 6, 85,117,193,226, 66,124, 86, 67, 26,191,
+192, 14,193,202,149, 43,225,237, 98, 15, 15, 15,204, 82,146,248,106,158,160, 26, 96,137, 9, 44,178, 49, 43,128,190,190, 62,228,
+245,169,152,192,197,197, 5,126, 21, 59, 50, 0, 10,246,247,247,227,234, 16, 31,186,246,168,170,169, 36,185,190,172,242,215, 47,
+160,165,152, 94, 3,218,187,103,207, 30,172,101,162,157,150,220,188,185, 83,141,163,162, 26, 27, 27,177,214, 19, 64, 65,160,246,
+217,179,103, 19, 19, 56,192,210, 31, 50,197, 10,172, 38,103,192, 0, 80, 4, 88, 19, 60,198,182,198,252,247,239,223, 91,182,108,
+113,118,118,190,125,251,246,215,175, 95,129, 92, 96, 13,244,235,215, 47,200,181, 57,248, 75,240,159, 63,127,158, 93, 27,101, 23,
+212,180,243,224,221,251,207,153, 63,125,101, 2,118,252,159,126,229,204,171,168, 38,168, 23, 50,181,131,127, 44,104, 20,224,106,
+254, 3, 1, 64, 0, 49,161,101, 9, 32,112, 0,131,139, 48,112,239,244,195,143,223, 63, 10,155, 17,181,246, 25, 82,202,115,113,
+ 69, 3, 75,127,214,135,111,129,165, 54, 91,242, 91, 6, 66, 23,112,179,178, 49,255,253,207,240,228,235,135, 71, 31,223,189,254,
+244,254,227,143, 31,239,127,125,127,253,243,251,243, 31,223,158,254,248,242,238,247,207,247,255,126,255, 66, 29,192, 69,105,251,
+152, 98,159, 18, 72, 9,231,249, 15,236, 25, 51,176, 17,227,114, 50, 46,224,126,244,242,199,222,179,239,225, 69, 63,164,244,103,
+255,247, 16,136, 26,220, 89, 30, 1,155,190,120,193,218,251,255, 68,123,161, 13,231,251, 95,255, 62,185,251,244,230,209,171, 47,
+ 30,124,160,117, 82, 88, 54, 13, 84,193,127,122,245, 31, 88,250, 59, 36,179, 4,213,179, 66, 80,239,170, 40, 70, 6, 70,252,153,
+205,223,230, 96,124,145,139,224,137,189,192, 92,183,241,168, 3, 3,248,184,124,130, 54,170,105,168, 35, 85, 33, 12, 83,166, 48,
+220,185, 3,234, 7, 52, 54,254,135, 3, 65, 65, 65,156,131, 72,224,168,255, 11, 6,192, 38, 63,176,237,127, 11, 12,128, 69, 97,
+ 73, 73, 9,193,112,166, 4, 64,154,234,104,229, 41,176, 79, 0,244, 62,174, 86, 60,188, 5,138,214,252,135, 0,172,130,112,112,
+152,253, 3, 35, 19,207,156,170, 86,158, 45,123,128, 89, 6,126,166,116,186,170, 78,190,177, 21, 23, 23, 23,176,186,173,173,173,
+ 5,122, 28,243, 22,173,185, 79,111, 61,215,214,146,150,150, 6, 6, 23,102,141, 5,233,127, 16,223, 55,130, 47,176, 1, 54,249,
+ 25, 96,155, 39,176, 94, 36, 7,241,172,172,172, 44, 48, 34,128,157, 12, 21, 21, 21, 22, 22, 22, 72, 13,109, 97, 97, 65, 76, 83,
+ 93, 89,195,112,214, 46,129, 75,219,234,109, 45, 53,185, 57,152,184,185,254,114,178,255,244,244, 39,234,110, 3, 96,121, 5,113,
+ 39,158,177,160, 81,128, 7, 0, 4, 16, 19,214, 48, 5,130,124, 48, 0,114,155, 51,154,127,191,250,195,201,201, 65,100,104, 66,
+234,124, 46,247, 59,255,153,153,106,215,125, 99, 32,226, 2,110, 77, 43,171, 63, 60, 92,239,255,255,189,246,245,253,149,143,111,
+175,126,122,115,245,211,187,107, 95,223,221,249,246,254,237,207, 31, 95,254,252,121,246,237, 43,158, 27,248, 2,221, 24,129, 45,
+125, 32,250,207,192,252,159,145, 41, 45,130, 49, 53,130, 45, 57, 92, 84, 89, 89,252, 31, 3, 43, 3, 3, 35, 49,165, 63,169, 23,
+112, 3, 21,131, 6,250, 25, 24,206,116,128,250, 10, 59, 75, 65, 43,148,128, 13,127,230,255, 95,127, 50,201, 3,217,239,222,189,
+ 35,230, 6, 87, 96,224, 0,243,243,178, 47, 95,191,255, 98,138, 95, 49,231, 21, 7, 39,144, 65,187,248, 46, 9, 91,126,252, 93,
+235,178,197,208,166, 62,176,249,111, 33, 88, 3, 97,183,102,111,153,129,123, 18, 24, 88, 40,244,215, 48, 36, 20, 57, 11,156,216,
+227,216,101,207,228,205,112,224,192, 1, 34,147,132,188,188, 60,156,237,228,196, 32, 32, 0,236, 96, 49,152,235,243,114,176, 49,
+ 51, 51, 65, 99,199,196,212, 20,103, 26,101, 98,130,140,248, 3,139,126, 53, 36,208, 4, 6,207,158, 61, 35, 88,196, 32, 15,226,
+195, 65, 70, 6, 81, 45, 68, 96, 75, 31,237, 70, 45, 96, 33,142,191,249,143, 60,247, 0,111,192, 66,216,255,112,183, 99,128,224,
+ 23, 35,227,191,111, 63, 89, 37,228,211, 91, 90, 18,184, 5, 4, 14, 28,135, 14, 13,197, 36, 52,244,204,185,221,183,188, 78,215,
+ 41, 76, 80,113,247,166, 77,152, 13,148,128,140,116,109, 29, 29,200, 4,245, 95, 24,128, 15,160, 33,115,177, 14,248, 0, 11,119,
+200, 28, 47,100,208, 31, 94,214, 3,155,252,144,198, 53,176, 38, 0,178,113,249,148,149,149, 53, 32, 32,224,227,199,143,192,154,
+137,147,147, 83, 84, 84, 84, 64, 64, 0,255, 45,146,112,189,236,236,236,193, 25,147, 22,156, 54,121,240,248,147, 56, 63,179,165,
+ 58,163,158,226,127,110, 62,190,209,210,153,214,205,127, 32, 0, 8, 32, 22,252, 29,100,120,163, 88,198, 94,138,200,182, 3,252,
+ 2,110,182,228,213, 12,196, 93,192,253, 69, 95,229,219,173, 91,223,254,252,252,244,245,219,221,223,191, 89,255,129,134,111, 62,
+254,254,241, 15,156,123,182,189,188,255,245,207,111,188, 99, 50,140, 69,173,136,196, 13, 30, 8,250,247,151,225,231,245, 59,159,
+231,173,252, 68,100,233,207, 64,226, 5,220, 32,247,116,134,177, 58, 79, 3, 50,223,190,133, 78,219,178,253,123,254,139, 73, 50,
+ 91,247,214,243,231,160, 98, 2,127,249,152,177,110, 22,188,106, 92, 13,187,175,118,197,229, 99, 52,221,195,165,234,252,137, 97,
+213,255,163,123,174, 2,217, 86,218,160, 93,181,101, 5,245,199,174,106,247,172,138,170,154,234,141,223,193,192,182,191,144, 16,
+100, 84,235, 0,184,134,115,249,255,127, 53,184, 96,253,191,122, 53,190, 11,114, 67,130,130,119,239,220,197, 0, 94,248,239,232,
+200,248,230, 49,255,215,247, 28,223, 63,177,173, 88,200,152,159,255,255,225,171,207,230,150, 22,122,218, 58,248,231, 0, 32,131,
+254,192,116,197, 0,190, 68, 16, 34,254, 10, 12,136, 25,231, 1,198, 44,176, 34, 65, 46,127,129, 77, 70, 98,118,129, 65, 6,205,
+225, 51, 1,144,222, 0,254,230, 63, 3,210,170, 7,228,245, 60,248,151, 66, 64,234,170, 63,159, 63,179,138, 8, 49,115,241,104,
+ 7,135, 52,185,185, 86, 65,150,114, 26, 26,253,253,254,131, 85, 88, 92,215,194, 65, 65, 70,113,210,245,227, 58, 58, 58,207, 79,
+163,220, 72,154, 1, 74,186,160, 74, 46, 11, 88,118,131, 87,139,254, 65, 42,241,129,141,114,160, 8,124,129,169, 55,106, 89, 0,
+ 44,217,129,126,132,140,243, 0, 67, 12, 50,212,131, 44,139,167,244,135, 56, 27, 88,220, 3,219,251, 55,110,220, 56,119,238, 28,
+ 48,178,184,185,185,191,125,251, 70,228, 96,189,184,184,184,191,191,255,137, 35,167, 38,172,222,205,199,200,166, 46,254,243,206,
+ 27,110, 27,245,223,240, 26, 2,215,128, 62, 80, 28,158, 97, 71,135,128,200, 3, 0, 1,196, 66,204, 56, 41, 48, 40,159, 28,124,
+198, 16, 69, 84,233, 15, 47,209,208,204,193, 95, 7, 72,137,137, 95,254,241,224, 35,211,191, 23, 63,190, 48,252,254,253, 23, 24,
+235, 12, 12,215,191,124,120,250,237, 19,228, 2,110,188, 21,192,127, 96,171,127,214, 10,104, 83,235,198, 93, 6, 13,229, 63,204,
+ 12, 95, 73, 42,253, 25, 72,191,128, 27,188,102, 52, 11,216, 7, 0, 54,246,129,253,223, 78, 87,134,242,221,118, 5, 58,199, 32,
+141, 68,130,205,127,228,142, 17, 50, 27, 82,198,225,111, 52, 49,212, 51,154,204,186,135, 57, 87, 1,221, 9,188, 7,223,229, 80,
+109,217, 91,170,167,250, 30, 95,245,223, 82,232,170,181,139,246,145,221, 87, 79,188,111, 97,100, 96,108,205,222, 12, 44, 90,241,
+216, 11, 44,253,129, 89, 46, 48, 48,112,246,236, 79,144, 44,201, 8, 91,143, 18, 26,138,136,238,205,135, 45, 49,245,102,231,229,
+ 78,157, 52, 25,216,252,255,245, 66,246,241, 7,246,127,160,190, 19,131,228, 87,241,210,180,207,187, 79,168,107, 89,226,171,243,
+ 32, 69, 63,228,150,215, 23, 47, 94, 64,250, 4, 47, 95,190,100, 32,101,174, 15, 50,153,137, 54,122, 62, 3, 36,152,142,103, 61,
+ 40, 60, 70,224, 51, 1,192,222, 0, 49,205,127,228, 66,138,120,197,192, 38,243,139,135, 15, 20,149, 85,255,253,249,201,248,231,
+ 47, 11, 47, 31,175,145, 9,143,161,233,191,175,127,254,126,251,249,255,207, 95,134,191,255,202,167,247,132, 71,133, 99, 54,174,
+255,172, 16,196, 99, 50,154,172,255,102,116, 5,192, 34, 30, 50,226,207,128,116, 15, 48,114, 29,128,223,131,234,234,234,147, 39,
+ 79,126,253,250,181,171,171,235,153, 51,103,128,165, 63, 80, 11,193, 59, 83, 33,122, 45,204,205, 51,146, 51,238, 63,185, 31,155,
+156,113,114,247,194,231,159,223,153,216,187,138,203,168,161, 39,108,108, 25, 1, 94, 64, 97,238,255, 26,221, 8, 70, 12, 0, 8,
+ 32, 22, 34, 51, 15,145,109,127,228, 18,141,164, 11,184,127,218, 27,171, 49, 24, 63,157,185,128,129,147,227,253,255, 63,191,254,
+252,249,247,255,159, 48, 63,255,147,175, 31, 9,222,137,138,182,208, 19, 54, 7,240,151,164,210,159,129,244, 83, 28, 32,251, 6,
+ 76, 76, 64,251,126,133,132,132,158, 63,127, 94,160,243, 28, 94,250, 19, 52, 10,235, 21,181, 68, 1,240,118, 95,228,221,118,104,
+ 82,248,129,176,222,211, 25, 51,103,220,218,195,215,187, 58,242,248, 42, 96,123,144,177, 36,108, 57,168,103,128,183,244,135, 68,
+ 28,184,160,255, 4,206,123, 12,104, 37,219,130,222,189, 64,146, 91, 14,152, 15,177, 76, 18, 2, 27,248, 64, 19, 68,196,118,253,
+253,124,134,145,153,225,219, 15, 78,198,207,127, 88,152, 88,196,149, 53,221,228,188, 88,254,227,116, 54,176, 64, 81, 81, 81,161,
+ 60,125, 66,134,137,129,117, 0,124,121, 12,188, 31, 64,252, 76, 0,164, 24, 34,216,252, 39, 27, 56, 57, 57,101,175,154,213,244,
+249,131,129,189, 13,147,184, 32,200,186,223,255, 65,199, 57, 48,176, 50, 50,179, 48,178, 49,207,158,209,199,231,108,162,172,172,
+ 76,245, 61, 80,144,161,158,233,211,167, 3, 73,125,125,125,146,244, 2,107,232,189,123,247, 50, 51, 51,219,218,218, 2,131, 23,
+109,232, 31,216, 33, 0, 22,244,104,193, 14, 7,192, 30,195,162, 5, 11,217,152,217, 67, 34, 67,128,106,108,188, 82, 80,234,173,
+ 63,127, 32,122, 71, 87,245,208, 98,252, 7, 8, 0, 2,136,133, 90,214, 80,229, 2,110,199,244,132,123,119,239,157,219,190,243,
+235,207, 95,192, 14,172,178,153,145,135, 92, 36,193,146,148,236,169, 30, 72, 9, 78,222, 5,220,112, 19, 32,107, 70,225,237,125,
+ 32,131, 24,247, 64,236, 37,207,217, 97,215, 67,193,190,198,226,206, 48, 66,189, 7, 56, 80,115,249, 52,211, 5,238, 78, 98,207,
+129, 0,151,242,140,241, 69,208,243,185, 32,185, 18, 40, 8, 44,247,185,229, 66, 9,106,127,249,220,237, 37,131,219, 63,166,199,
+252,124, 31, 25,132, 24, 64,199, 63,252, 98, 96, 33, 49,105, 81, 2, 32,117, 0, 25, 26,225, 51, 1, 36, 53,255,241,180, 94,177,
+ 2, 96,201, 46,145,151, 55, 97,215,174,123,205, 27, 66, 89,133, 5,192, 7,186,125,255,246, 39,191,164,146,153, 75,104,219,194,
+153, 23, 69, 24,221, 72, 57,204,231,239,223, 63,196,204,129, 17, 57,212,131,203,119,183,110,221, 2,146, 26, 26, 26,111,223,190,
+101, 97, 97, 1,150,218,194,194,194, 12,176,243,233,216,216,216, 32,157, 54,172,122, 79,157, 58,245,239, 15,163,149,181, 62,176,
+135, 7, 84,249,235,215, 47, 25, 25, 25,136,212,199,143, 31,129, 29, 29,160, 33,236,236,236,120,218,157,144,186, 1,153, 49, 58,
+ 4, 68, 60, 0, 8, 32, 22, 26,153, 75,126,161,172,172,164,148,147, 73, 55,255,147,125, 1, 55,102, 53, 64,134,189,228, 89,135,
+199,181,180, 62, 3, 14,220,192,103, 0, 31,198,131, 44, 24, 74,146, 33, 76,255,100, 63,127,144, 29,168, 20, 79,222,209, 96,192,
+ 86, 63,193, 17,124,172,128, 36, 93,192, 82,143,139,139, 43, 48, 48, 16,114,164,243, 35,216,145,206, 71,247,238,134, 28,233,236,
+108,225,140, 75,239,236,247,237,169,130,149, 40, 66,120, 79, 15,197, 85, 7,144,225, 71, 83, 83, 83,200,146,255,127,255,254, 1,
+ 75,112, 32,227,245,235,215, 64,146,135, 7,180,202, 25, 34,194,202,202,138,213,191, 62, 62, 62, 16, 5, 64,189, 63,126,128,247,
+ 81,130,151,117, 65, 86,133, 65, 68,128, 21, 3,214, 30,192,232, 34, 31, 98, 0,254, 91,223, 1, 2,104,244, 82,248, 81, 48, 10,
+ 70,193, 40, 24,161, 0, 32,128, 70,111, 4, 27, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130,
+ 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,136,101, 52, 8,134, 10, 48,196,113,185, 15, 30,112,126,
+116,130,103, 20,140,130, 81,128, 27, 0, 4, 16, 13, 47,133,167,131, 94, 54,182, 93,156,236, 47, 88,217, 62,252,251, 7, 90,146,
+200,204,204,196,196,200, 12, 34, 65,235,134,153,254, 51,178,128, 40,134, 63,155,183,178,254,255,255, 95, 79, 47, 97, 48,184,153,
+ 18,189, 50,164, 44,123,120,130,186, 12,110,244, 18,237, 81,189,163,122, 71,166, 94, 60, 0, 32,128,134,118, 15,224,208,145, 59,
+102, 38,191, 5, 5, 24,222,189,103, 60,127,145,131,133,137,197,203,253,239,238,253,162,192, 98,159,145,137,137,131,151,193,201,
+236, 3, 3, 3,139,141,229,255, 83,103, 8,248,116,255, 49,208,161,246,172,255,127,155,219, 58,125,124,249,232,242,237,135,127,
+191,253,160,207,205,186, 35, 13, 92,191,121,238,215,143,111,188,188, 82,180,190, 60,153,138, 64, 81, 81, 17,114,148, 63,228, 68,
+101,146,244, 34,159,132, 72,222, 90,210, 81, 48, 10,104, 4, 0, 2, 8,189, 88, 92,184,104, 46,126, 13,241,113,201,184,164, 40,
209, 75, 54, 56,117,134,213,195,245,239,197, 75,156,108,172, 44, 44,204, 44,172,172,255,217,153,127, 51,176,240,178, 48,124, 55,
211,254,195,193,198,254,159,129, 65, 82,156,193,207,235,223,205,123,248, 74,255, 59,215,111,169,104, 41, 75, 73, 11, 60,121,120,
131,149, 83, 68, 75, 67,109,251,198,141,123,246,236,161,117, 29, 64,231, 11,229, 7, 22, 92,186,184, 71, 65,230,167,174,242,255,
-127,255,254,126,252,248,228,198,149, 51, 95,126, 74,154, 24,219, 18,169,253,227,235, 57,204,204,208, 61,107,119, 38, 84, 24, 52,
-253, 34,222,106,228, 82,123,237,218,181, 37, 37,164,237, 53, 1,150,254, 5, 5, 5,192, 14, 37,158,195,156,241, 0, 50, 47,148,
- 31, 25, 0,255, 81,193, 12,224,128,155,133,237, 20,107,248,165,240, 48, 85,255, 97,251, 19, 17,161, 61,194, 47,133,135, 0,228,
-107, 32,209,214,253, 3, 4, 16,253,122, 0, 76, 12,212,223,204,237,229,246,251, 63, 3, 51, 11, 51,171,149, 57,163,152, 40, 19,
- 11, 11, 19, 59, 43,179,134, 26,211,195,199,127,204,140,153,132,133, 56,182,239, 3,157, 41,200,252,255,251,255,255,255, 36,164,
-113,150,254,151,206,156, 81,144,146,185,116,252,196,201, 95,191,223,191,121,207,198,206,171,105,104,173,111,237,182,127, 51,104,
-135, 48,141,234, 0,180, 11,229, 33,103, 49,166,164,164, 12,254,106,224,194,249, 61,236, 44,239, 88,152,126,253,248,241,247,227,
- 87, 78, 27, 59,194, 39,247, 94,187,113,142,151,227,173,147, 53,187,130,188, 50, 31, 31,255,239, 63,127, 94,191,126, 35,254,232,
-241,237,187,247,142, 29,125,103,101,237, 79,140,189,192,210,255,239,157, 86,178,157, 77,246,217, 27,144,219, 93,224,103, 1,225,
-185,209,101,176, 1, 96, 11, 6, 88,219,161, 28,127, 68,195,210,240, 63, 35, 3, 35, 25, 85,220,255, 71,235, 24, 79,166,192, 10,
-113, 6,216,101,107, 8,147, 82,102,124, 53, 11,159,140,181, 90,221,190,125, 59,132,237,225,225,177, 99,199, 14,172,236,209,210,
- 31,147, 11,175, 6, 0, 2, 8,123, 5,112,244,200, 73,107, 27,115,234,186,227, 31,161, 19,249,137,188,161, 9,165, 82, 97, 97,
-126,255,142, 69, 66,140, 85, 66,140,237,203, 23, 86, 14, 86,150,191, 44,236, 70,186,140, 6,122,204, 76,140,172,160, 77,228,172,
-108,172, 76, 63, 25, 57,216,254,124,195, 89,250, 31,217,183, 87, 81, 82,244,202,197, 43,213,205, 13,112,241,214,198, 54, 38,102,
- 70, 35, 99,163,237, 59,246, 18,172, 0,254,253,251, 7, 44,196,239,220,185,195,201,201,169,171,171, 75,240,236, 26, 6,140, 11,
-229,225,183,173,206,153, 51,103,160,234,128,243,231,207, 27, 26, 26,226, 87,115,229,218,185,255, 63, 31,200, 75,254,224,231, 99,
-103, 98,226,250,254,253,207,219,119,223, 15,238,153,192,193,103,100,110,102,135, 71, 35, 7,243,107, 53,197,255,218,218,154,207,
- 95,188, 63,123,254,220,151, 47, 95,249,249,121,149,148,228,153,152, 89,255,254,125,116,254,194, 17, 67, 3,155, 65,155,133,128,
-205,127,248,237, 46,192,126, 0,176, 14, 32,242, 90, 21,140,134, 44,189,123, 0,144,164,187,102,205, 26,242,238,213, 34, 30,192,
- 27,227, 51,103,206, 32,213, 30, 38,249, 96,136,222, 83,237, 60,104,141, 68, 9, 1, 38,105, 33,166,193, 19,158, 67, 23,192, 75,
-124,180,250, 0, 32,128,112,246, 0,128,117, 0,144, 36,181, 26, 56,146,119, 27,171,184,205, 36, 85,226,115, 8,164, 7, 71, 76,
- 53,176,231,128, 24, 43, 11,171,172,212,151,207,159, 89,207, 94,145, 5, 93, 3,201, 8, 58, 12, 78, 91,245,155,186, 42,232,170,
- 0, 54, 86,118, 54,102, 70, 99,189, 95, 66,130,255, 14,157,198,110,136,166,162,248,195,187,175,144, 75,127, 32,168,174,175,106,
-107,238,146,180,212, 19, 20,224,197,239,134,239,223,191, 3, 75,132,135, 15, 31, 66,184,192,166,135,151,151,151,191, 63,129, 38,
- 45,218,141,146,200,160,183,183,183,184,184,152,206,219,220,129,165, 63,252, 74, 13, 60,224,231,215,167,138,210,223, 69,132,185,
-101,164, 37,184,184,185, 30, 62,124,250,247,239, 63,105, 41,222,171,215,143, 95,224,228, 54,208,197,126,241,195,229,203, 71,244,
-212,126,201,201, 41, 94,187,254,240,236,217,235,175,223,124, 6,198,179,160, 32,231,183,111, 95, 12, 13,181, 63,124,248,248,244,
-236,249,139,151, 57,245,117,141, 7, 97,206, 65,187,220,145,224,181,142,200, 35, 27,104, 71, 25, 3,217,240,225, 14, 50,198,145,
-154,155,155,125,125,125, 73, 61,173, 1, 88, 7, 0,237, 93,181,106, 21,174,227,216, 24,192,103, 41,163,245, 12, 32, 87, 66, 2,
-197,209,218, 4,192,130, 30,243,236, 0,248,241, 74, 64,255,166,167,103,144,212,201, 64,214,107, 86,249,229,116, 59, 15,188,232,
- 31, 45,181,169,213,252, 71,142, 50,180,232, 3, 8, 32, 2,161, 12,172, 6, 32, 53, 1,145, 0,107, 65, 79,100,233, 15, 1, 7,
- 15, 30,124, 10, 6,196,156,229,196,252,255, 59, 11,227, 15, 54, 86,214,243, 87, 68,153, 89, 88,120,217,190,241,113,124,231,229,
-255,251,244, 41, 47, 59, 27, 7, 59, 59,123,168,223, 31, 63, 79, 38,105, 41,118, 46, 78,236,119, 83,124,251,240,248,197,187, 47,
-197,117,117,152, 82, 31, 62,190,123,255,250, 5,193,171,196, 86,175, 94, 13, 47,253, 33, 96,219,182,109,215,175, 95,199,223,252,
- 71, 62,255, 25,210,252,255, 8, 3, 64,118,125,125, 61,217, 71,197,145, 93,250, 19, 84, 6,108,254,115,176, 60,231,228,100,229,
- 96,103, 83, 84, 84, 48, 49, 51, 19, 20, 20,100, 97, 97,102, 99, 99, 22, 18,228,120,250,248, 1, 46,141, 44,255,159,242,242,112,
-126,251,254,231,202,149,219,207, 94,124,124,244,228,211,173,123,191,158,191,248,252,250,245,135,219,183,238,169, 40, 43, 75, 75,
-241,189,125,253,104,112,102, 33,200,232, 63,178, 8,176, 55,128,114,183, 59,158,182, 45,120, 57, 26,214, 11,229,201,235, 64, 0,
- 11,101,120,103,145, 72,176,119,239, 94, 96, 18, 37,120, 53, 35,242,229,239,200, 23, 2, 35, 91,135,203,106,136,177,144,187,195,
-200,235, 21,173, 42,228, 70,110,245, 67, 74,127, 96,219, 95, 10,212,252,199, 23, 92, 30, 30, 30,158,158,158,144,113, 30, 8, 3,
-194,246,128,129,209, 58, 0, 63, 0, 8, 32,162,230, 0,200,235, 13,144, 13,110,223, 6,117, 35,128,117,128,180,180, 52,254, 54,
- 41, 11, 11, 11, 43, 51, 43, 43, 43,163,157, 53,195,183,175, 63,239,223,101, 3,118, 8, 88,254,178, 88,152,255, 7,214, 10,204,
-204, 76, 12,255, 25,223,189,103, 56,125,142, 5,116, 19, 8,182,202,238,220,249,187, 95,190, 96,153, 75,236,168,175,103,103,231,
-248,254,253,227,223,127,127,240,187,246,220,185,115,152,130,103,207,158,213,212,212, 36,178,249,143,220,166,219,188,121, 51, 92,
- 13,141, 58, 1,104, 67, 61,240,210,159, 96, 6,126,255,238,149, 8, 47,227,159,191,255,126,253,254,243,250,205, 59, 86, 54,142,
-159, 63,127,255,254,243,247,207,159,127,127,254,254,255,240,254, 13, 46,141,108,172, 95, 57, 56,101,222,190,253,248,233,243,183,
-119,239,191,243, 9,235, 91,233,233,157, 58,186, 67,234,215,159,143,159, 62,170,171, 43,179,179,177,124,253,252,110,112, 54,255,
-129, 37, 20,218,101,138,192, 30, 0,145, 51, 1,192,154, 3,243, 14, 72,248,177,210,184, 0,252,114,133,140, 12, 33,103,103,196,
-233,111,192, 28, 1, 36, 55,109,218,244,230,205, 27, 34,231,165,246,236,217, 3, 41,253, 33,234,215,174, 93,139,171, 20, 70,238,
-255, 97, 94, 8, 12, 17,135, 92, 11,140,213, 4,200, 49,162, 64, 18,210,111,192,234, 65, 92,233, 25,232,188, 16,203, 61, 43, 25,
- 24,194,251,191,154, 86,126,193,170,215, 44, 28,187, 7,145,199,250,113,205, 7,140,150,242,200, 35, 63,104, 61, 0,128, 0,162,
-126, 63, 11,173,189, 79, 82,243, 31,210,254,133, 87, 3,192,204,131,191, 31,192,204,204, 98, 97,246,143,153,137,229,244, 25,142,
-155,183, 57,188,221, 25,124, 60, 25,124, 61, 24, 37,197,217, 56,216,216,129,136,147,131, 93, 90, 18,200,224, 0,178,177,154, 80,
- 91, 93,211,217,222,132,153,109,148, 21,229,249, 5,184, 57,254,253,250,242,237, 55, 45,226,227, 8, 24,192, 11,125, 56, 0,114,
-223,190,125, 11,236,233,211,174,177,143,220,172,131,112, 33, 61,113,130, 99, 11,127,255, 50,124,253,246,251,235,215, 95,159, 62,
-253,124,249,242,253,179,103,111, 62,127,254,249,229,203,111, 96, 13,250,245,235,239,143, 31, 62,226, 28, 56,250,249,231,199,143,
-191,191,127,255,226,229,101,147,149,230,227,226, 6, 53,247,148,148, 21,100,164,248,248,249, 56,254,255,255,251,251,207,191,159,
- 63,191, 14,206,230,127, 81, 81, 17,214,146,157, 96, 39, 0,243, 46, 73, 8, 0, 10,238, 33,238,212,110,240,136, 10, 2, 64, 10,
- 95, 96, 53, 0, 44,211,137,233, 31, 3,219,254,107,214,172,129,151,254, 64, 50, 36, 36, 4, 87,241, 13, 52, 28,243, 74, 72, 72,
-155, 0, 46, 14,116, 15,161,195,180,255,163, 13,228, 34, 15,127,225,210, 35, 34, 34,194, 8,107,231,147,170,119, 20,144, 84,250,
- 51, 96,204, 1, 0, 4, 16, 81, 61, 0,186,181,253, 97, 5,205, 95,200,165,210,132, 29,102,246, 79, 76,148,253,211, 39, 22,118,
-150, 63,236,108,204, 7, 78,178,121, 59,178, 2,219,254,159, 62,177, 30, 61,195,205,199, 1,186, 74,194,195,229,151,191,247,127,
- 38,166,255, 11,214, 18,101, 59, 48,115, 50,115,113,188, 99, 21,225,250,253,228,206,211,255, 78, 14,118,248,213, 3, 91,211,199,
-142, 29, 67, 19, 36,120, 13, 50,228, 82,239, 5, 11, 22, 36, 36, 36, 64, 68,224,247, 74, 2, 69,240, 95,115, 72, 9,128,180,253,
- 33,205, 52,248, 10, 57,204,161, 94,172, 64, 80, 72,244,217,253, 43,192,112,254,245,251,223,143,159, 79, 30, 63,121,251,238,253,
-167,119,239,190,189,125,247, 29,136, 4,132, 20,112,105,124,249,230,255,139,151,111, 52, 53,149, 63,188,127,207,202,194,244,233,
-243,147,175, 31,254,105,169,124, 21, 23, 21,229,226,226, 98,103,231,124,254,226, 51, 35,179,224,224,204, 60, 88,175,113,135,204,
- 4,224,215, 8,233, 31,192,239,146,132,215, 28, 12,164, 92, 41, 19, 22, 22, 6,111, 17, 67,110,173, 0,198, 90,112,112, 48,176,
-250,193,191,217, 7,173,237, 15, 1,200,253, 9,100,128,235, 74, 72,136, 56, 48,181, 64,238, 94,135,136, 63,198,102, 47, 80, 77,
- 86, 86, 38,228,118, 29,112,181,241, 31, 82,164, 3,117, 65,220,143,167,230, 0,234,157,234, 40, 24, 62,225, 27,218, 88, 16, 80,
- 4,162, 55,201,145,117,180, 16,167, 4,164,149,119,192,217,179, 58, 43,128,117, 0,188, 31, 0, 16, 64, 44,180, 40,250,129,173,
-126,200,108, 48, 73,205,127,164,118, 61, 51,242, 24, 31,158,123,196, 68, 68,152,153, 24,153, 69, 69,152, 85,149,255, 63,123,198,
-194,196,204,200,202,194,194,202,194,122,233, 50,183, 16, 55, 43,208, 28,107,243,191,156,156,236,255,254,253,103,248,255,151,200,
-210,159, 71, 92,246,229,151,255, 95,239, 28, 96, 97,100, 46,173,175, 38, 38,139, 62, 6, 3,100, 55,227, 25,255, 97, 0,175,247,
-135, 20,247,144,210, 31,216,222, 7,214, 4, 16,169, 79,159, 62, 1, 75,255, 45, 91,182, 16,115,161, 60,121, 0,114,241, 19, 48,
- 72, 33, 83,148,196,180,253, 33, 64, 95,215,248,250,149,179,255,159,126,250,246,253,247,123,246, 31,255, 25,222,255,248,241, 7,
-216, 27,120,245,230,219,179,231, 95,108, 29,229,113,105,252,254, 75,228,222,253,215, 74,138,114,138,138, 50,111,223,190, 17, 20,
-248,171,170,202, 47, 38,170,196,193,201,249,225,195,151,179,231,110, 60,121,250, 73, 66, 70,123,240,100,152,255,224,219, 46, 33,
- 5, 47,188,252,197,186,150, 31,203,104, 5,210, 10, 70, 96, 39, 0,126,151, 36, 4,244,245,245,237,218,181, 11,151, 94, 72,140,
-164,167, 11,194,172,251,143, 92,100, 67, 42, 0, 96, 43, 30,207,248, 15,210,240,209, 94,146,110, 55,194,117, 37, 36, 68, 28, 82,
-124,227, 42,196, 33, 75,140,166, 77,155, 14,153,225, 48, 48,208,135, 15,220,195, 90,244, 56,111, 26,128,232,101, 10,123, 15,209,
- 27,234,164, 0, 15,152,176,254,107, 12, 12, 12,248, 91,255,192,188, 6, 95,224,228,233,233, 9,143,157,209,145, 31, 34, 1, 64,
- 0,177, 12,146, 86, 63, 4, 68, 68, 68,144,164, 30,216,192,103,102, 6, 33, 77, 53, 38, 67,221,191,236,108, 28,160, 10,128,149,
-213,202,156,129,157,157,129,149,153, 93, 68,132,131,153,249,235,223,191,255,254,253, 35,106, 36,231,219,187, 23, 28, 50, 26,247,
-247, 44, 17,101, 97,138,173,174, 34, 70, 11, 39, 39,103, 85, 85, 21, 73,203, 64, 33,183,207,231,228,228, 64,184,144,246, 62,176,
-232,255,246,237, 91, 82, 82, 18,144, 61,109,218, 52,218,173, 2,130, 92,254, 7,191, 67,149,164, 85, 37, 50,242,234,103, 78,236,
- 20, 19, 1, 54,220, 89,192, 99, 59,127, 63,125,254,245,238,253,119, 89, 69,109, 27, 43,123, 92,186,188,188,130,119,109,159,127,
-226,212, 85, 91,107,125,121,121,249,223,191,126, 24, 26,232,113,243,243, 63,188,247,232,233,179, 15, 71,143, 95,127,255,153, 63,
-208,210,126,240,228,138,204, 12,200, 0, 11, 99, 38,176, 64, 4, 23,232,255,144,202,125, 38, 38, 70, 60, 23,172,131, 46,103,255,
- 15, 47, 0, 25,129, 41, 15,222, 9, 0, 50,128,165,149,135,135, 59,172,146, 97,240,142,174,197, 28,235,192, 85,106, 3,101,241,
-151,254,200, 0,168, 18, 87,123, 31, 79,170,192,188, 18, 18, 46,142,231,178, 48,120,205, 1, 44,127,193,205,127, 70,228,250, 3,
-191,189,200,122, 87, 21,242,128,194,133, 67, 28, 34,181,170,240, 17,164, 50,216,121,241, 55,174, 0, 65, 30,247, 31,157, 3, 32,
- 3, 0, 4, 16,246, 10,192,202,218,140,194,113, 55,242,218,254,240,104, 35, 18,188,123,207, 40, 41,206, 4, 57,248, 97,215, 94,
-208, 64, 63, 59, 59, 7, 59, 27,187,175, 39, 35,144,226,228, 96,124,247,150,249,212, 89,222,191,255,254,202,202, 16, 30, 98, 6,
- 54,255, 63,124,251,254,254,204, 54, 85, 89,214, 43, 79, 73, 24,146, 6,214, 67,102, 96, 64,188, 22,240,133,242,157,144,209, 30,
- 96,111,192,220,220, 28,216, 90,244,247,247, 7,178, 99, 99, 99,105,215,252,135, 15, 4, 65, 90,115,196,140,252,160, 68, 43,184,
-148,191,117,227,218,179,123, 15,129,229,224,223,191,255, 57, 56,133,212, 52,117, 2, 3, 8, 92, 10, 38, 38,173,119,226,212, 14,
- 96,143, 65, 87, 71, 73, 90, 74,228,209,227,151,239, 47,223,189,121,235,209,222,125,151, 30, 62,253,159,146,154, 75,164, 3,238,
-111,249, 76,182,175, 31, 60,120, 64,164,202,127, 43, 5,137,151,245,221,132, 87,239,221,249,240, 78, 0,104,212,232,222, 2,100,
- 5,104,122,177,118, 8,144,203, 74,146,252, 75,106, 22,198,117, 37, 36, 49, 87, 69,194, 11,122, 52,101,196, 52, 47,254, 61, 92,
-187,102, 66, 28,168,251,226, 36, 7, 47,253, 65, 92, 47, 83,240,104,233, 5, 92, 21,192,232, 62, 0, 34,193,172,206, 10,228, 81,
- 32,100, 0, 16, 64, 44, 84, 73, 58, 84, 1,100,180,121,207,156, 99,231, 96, 99,243,245, 2,214, 0,140,102, 38,127, 46, 95,225,
-100, 2, 95, 33,253,225, 3,147,148, 4, 51, 19, 35,219,197,203,108, 28,236, 12,191,126,255,122,248,136,147, 96,233,127,247,214,
-121,115,103, 31, 22, 17,243,187,183, 78,177,188, 88, 83, 86, 90,217,213,221, 78, 35,207, 34, 95, 40,175,163,163,243,254,253,123,
- 32, 27, 72,230,229,229,209,103, 23, 24,169, 69, 63,114, 29, 0, 68, 23, 46,159,125,249,226, 37, 55, 55, 55,158,134, 63, 74, 65,
-160,103, 12, 68, 75,151,204,188,118,243,164,164, 56, 15, 7, 7,235,151, 47,191,158, 62,255,196,200, 34,155,146, 26, 71,164,213,
- 60, 66, 69,100,251, 23,178,156,127, 0,192,185, 98, 6,229, 68,196, 66,210,179, 36,120,129,140,108,152,145, 33, 4,171, 54,200,
- 41, 28,113,149,215, 4,203,113,242,238,146,132,123, 51,212,146, 29,228,224,239,207, 65,104, 20, 80, 15,248,196,212, 66,102,125,
-129,117, 0,178, 32,156, 13, 16, 64,232, 21, 0, 37,199,245,208,226,168, 31,194,169,135,129,241,253,123, 70, 46, 9, 70, 97, 33,
- 70, 19,163,223, 28,108,204,236,108,191,133,133, 56,192,121,128,209,194,228,239,169,115,172,160, 46, 2,222,188, 4, 44,253,181,
-213,249,138,243,155,190,179,201,172,219,243, 84, 89, 13,212,150,231, 57,189,165,184,164,178,183,135,134,117, 0,228, 66,121, 96,
-147, 31,222, 45, 24, 42,215,156,130,246,124,233,146,172, 43, 58, 38,253,200,177,131,175,223,190,254,254,226, 27, 7,135,176,140,
-162, 30,145,245, 7, 3,101, 23,192, 82, 37, 84,255,255,255,199, 64,222,113, 38,247, 22, 64,151, 3,221, 91, 72,235,120, 33,105,
-216,103,144, 0, 55,159,112,130,109,121, 92,157,235,209, 57, 0,226,235, 0,204,210, 31, 8, 0, 2,104,200,223, 7,240,159, 1,
-180,194,135,145, 9, 24,243,255,133, 4,254, 31, 60,194,194, 1,218,254,203,226,231, 5, 76, 12,255, 4,133,255,252,249,203,248,
-239,223, 95,112,238,197, 9,244, 20,190,120, 7,135,126, 97, 81, 21,227,225,142, 10, 20, 90,182,254, 50,164, 14,248,253,119, 29,
-173,221, 79,198,133,242, 67, 26, 16, 95,226, 15,100,151,249,125, 71,154, 96, 5,138,208,106, 33,242,245, 2, 91,253,103,139, 24,
- 70, 1, 14, 16,146, 61,101, 0,235,245, 17, 82, 7,224,146, 2, 8,160,209, 75,225,135, 12, 24,189, 16,102, 20,140,130, 81, 64,
- 93, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 39, 46,141,130, 81, 48, 10, 70,193, 8, 5, 0, 1,
- 52, 90, 1,140,130, 81, 48, 10, 70,193, 8, 5, 0, 1, 52, 90, 1,140,130, 81, 48, 10, 70,193, 8, 5, 0, 1, 52,240,151,194,
-219,155, 73,227, 82,249,245,221, 11, 8,131, 91, 72, 2,194, 56,120,234, 41,178,130,159,162,226,184,244,238,238,135,238,179,117,
- 45,132,174, 49, 96,127,253,146, 72,123, 49, 1,241,246, 98, 2, 52,123, 77, 12,165,112,169,124,115,255, 42,132, 33,162, 8, 61,
- 23,225,204,249,103,212,242,175,199,110,236, 7,208,243, 75, 73,197,194,142, 2,158, 34, 14, 53,127,135,107, 26,181,226, 23, 89,
-239,205,155, 55,145,207, 71, 43, 44, 44, 84, 87, 87,167, 81,186, 26,213, 75, 21,189,151, 47, 95,134, 48,116,117,117, 73,213,139,
-121,197,211,104, 56, 15,136, 94, 60, 0, 32,128,176, 47, 3,253,243,231,207,143, 31, 63, 24,153, 65,151,106,253,253,243,155,141,
-149,133,157,157,157,212,186, 5,104, 8, 3,248,196,102,146,116, 1, 11,125, 96,113, 15, 41,250, 37,100, 21,128,228, 11,220, 7,
-205, 99, 22,130,192,226, 15, 82, 20, 78,221,116, 10, 72,102,251,153, 49, 12,110, 0, 44,244,129,197, 61,164,232,215, 54,177, 6,
-146, 87,207, 28,165,181,127, 55,127,249,178,243,235, 87,119,110,110, 32,201,240,242,229,169,242, 50,160,160, 89,103, 23, 77,125,
-122,224,192,129, 21, 43, 86, 0,211, 21, 92,132,131,131, 35, 34, 34,194,193,193, 97,180, 33, 54,168, 0,176,208, 7, 22,247,144,
-162,159,212, 52, 9, 57,185, 11, 82,244,147,148, 38,145,207, 55, 37,111,125, 39, 25, 87, 10,142, 2,128, 0,194, 82, 58,127,250,
-252, 69, 82,205,212, 94, 87,131,139,157,245,255,255,255,127,255,254,191,114,251,225,253, 75,135, 57,217, 89,137, 60,164, 19, 8,
-120, 56, 30,104,171,222,187,114, 75,233,235, 79, 5,226,139,126, 32,201,201, 47, 12,100, 64,138,126,172,189, 1, 60,237, 95,179,
-232, 10, 32, 3,146,236, 48,101,177,174,119, 66, 54,150,141,141,141, 1,188,191, 28,116,121, 0,248, 80, 82,136,123,152,152, 89,
-241, 55,186,129, 64, 82, 12,212,118,254,245,233,195, 79,112,181,247,229,207, 95,136,123,248,197,100,240,183,247,249,165,148,129,
- 12, 72, 54,195,214, 27, 16,164,174,127,129, 32,231, 37,168,103, 0, 41,253, 33, 69, 63,168,109,190,107, 55,178,172, 15,222,152,
-250,200,253,230, 45,207,235, 15,111,239,136, 9,104,202,188, 81, 33, 38,114,129,109,255,149, 43, 87, 34,151,254, 64, 0,228,114,
-114,114, 74, 74, 74,162,245, 3,134, 55,216,179,103, 15, 73,183, 76,227, 57, 12,145, 22, 69, 63, 36, 77, 2, 25,152,105, 18,214,
- 27, 16,196, 83,254, 2,211, 36,144,129,153, 38, 33,178,184,210, 36, 80,246,208,241, 83,204,204, 44,127,255,254,249,248,249, 75,
- 84,176,127, 79, 79, 15,121,165, 63,157, 67,108,144,131, 45,216,214,142, 35,199, 2, 64, 0,161, 87, 0, 95,191,255,114,246,139,
-146, 21,227,231,226, 0, 93,162,242,247, 31, 3, 11, 51,163, 16,191,134,182,170,220,158,157, 91,255,254,254, 74, 76, 29,240,235,
-215, 47, 77,237,251,250, 26,247,153,153,254, 30, 56, 35,205,198, 74,248, 52, 87, 96, 65, 12, 44,106,249,249, 64,247, 47, 66, 72,
- 52, 89, 96,149,128,171, 43, 0, 44,239,128,201, 46, 62, 60, 8,200,134,144,104,178,192,228, 72,176, 25, 2,244,151,140,140, 12,
-144, 4, 58,254,235,215,175,192,210, 31,114, 98, 51, 81,181, 29, 11,243,188, 9,235,217,249, 25, 94, 62, 96, 56,253,229,233,235,
- 23,119, 22,247, 87, 18,108,248, 3,179,153,140, 20,104,104, 11, 66, 98, 29, 11, 34,207,191,120,206, 1, 0,150,239,192,162,191,
- 57, 39, 27,200,110,134, 21,253, 75,110,221, 66,148,254,132, 14, 17,120,240,255, 48,131,217,211, 8,185,152,159,255, 84,216,255,
-253,191,254,102,239,249,221, 55, 85,254,101,225,247,111,127,127,255,247,239,223,145,143,191,134,176,129,130,192,126, 0,169,167,
-220, 92,191,126,125,226,196,137,180,188,223,156,134,165,255,170, 85,171,222,191,119, 93,189, 58,148, 24,245,144,211,249,233, 83,
-162, 1,203,119, 96,154,188,117,254, 24,176,232, 71, 78,147,251,182,174, 19, 23, 23,135,143, 5,225, 42,127,241,164, 73, 80,233,
- 12, 63, 94, 21, 3, 0,227,241,197,171, 55,231,175, 92,131, 53, 11,126,118, 77,158,149,158, 16, 57, 90,136,211, 1, 0, 4, 16,
-202, 36,240,231,207,159,109,220, 2, 53,228,132,217, 89,153,128,165,255,139, 23, 47, 46, 95, 60,255,235, 15,144,249, 95,152,159,
-203,205,211,231,251,207, 63,196, 24,202,206,250, 74, 89,238, 5, 3, 51,163,150,234, 99,118,150,151, 36,149,254, 40, 45,205, 79,
-159,129,133, 62, 80, 10,179, 67,128,181, 52, 68, 6, 11, 87,174, 3, 22,250, 64, 41,204,198, 8, 26, 0, 54,252,129,229, 62, 31,
- 31,223,189,123,247,128,133, 62,168,218, 35,186,244, 7, 54,252,129,165,127, 96,110,139,103,148,213,150, 43, 79, 95,124,103, 32,
-181,244, 71, 6, 79,158,189, 0,246,181, 69, 5,249,192, 85, 51, 51, 25,254,245, 8,142, 7,181,208, 88, 88, 9,150,254, 64, 80,
- 59,101, 42, 16, 65, 74,127, 96,111,160,212, 13,220,238, 23,101,195, 87, 30,241,111,115, 11,145, 74,148,207, 98,101,226,225,102,
-224, 98, 98, 96,150, 22,183,182, 9,118,190, 39,213,143,127,240, 7,228,194,133, 11, 33,229, 62, 26, 9, 87, 64, 12,248,246,237,
- 27, 65, 17, 26,129,180,180,180,208,208,213, 75,151, 46,165,188,244, 23, 18,218, 67,164,150,153, 96,192,200,200,136,124,101, 35,
-237, 74,255,214,170,194,213,171, 87,207,153,220,131, 92,250, 3, 69,166, 76,153,130, 39, 77, 34,151,254,152,105,210,211, 26,124,
-234, 20, 47, 55, 46,189,189,147,167, 67, 74,255, 87,111,222, 2, 17,176, 7,192,202,202, 50,125,193,114, 98, 46,189, 25, 5,196,
- 0, 96,147, 31, 25, 33, 75, 1, 4, 16,162, 2, 0,150,122,194, 10,122, 10, 18, 2, 63,126,255, 5,214,214, 59,119,238, 88,180,
-112,193,165,139, 23, 75,139, 10,152,153,153,128,125, 1, 62, 46,118, 5, 61, 27, 96,147, 13,191,101,191,127,255,214, 86,125,200,
-199,243,109,222,194, 87, 76,140,255,205,116,111, 2, 69, 8, 58, 17,173,244,135, 20,253,223, 63,190,133, 87, 12, 64, 17, 92,122,
-209, 82, 30, 36,217,157, 90,218, 1, 79,148, 64, 17, 60, 86, 43, 43, 43, 11, 11, 11,127,250,244, 9, 88, 19, 48, 49, 49, 1, 61,
- 8, 44,253, 33, 29, 29,130,167,113,173,221,176,190, 96,194,174,245,147,107,128, 53, 1, 23,183,208,227,191, 79,129,165, 63, 15,
- 56,159, 48,227,213,139, 86,250, 67,138,254,143,207,238,106,200,136,125,254,246,131,157,139,157,225,239, 95, 82,253, 91, 57,123,
-203,213,115,199,117,148,180, 62,254,197, 89, 79, 67, 74,127, 96,171, 31, 88,244, 67, 68,128, 69, 63, 16,221, 75,111,220,117,237,
-146,182,153, 18,195, 91,156,145,117,145,109,139,181,131,168, 40,183,230,247,255,159, 25,126,190, 98,251,249,238,231,223,207, 63,
-254,125,255,199,198, 35,109,107,178,230, 66, 27, 46,141,144,161,127,200,181, 86,240,108, 15,103, 3,165,128, 10,136, 73,199,111,
-222,188, 41, 42, 42, 2,182,253,111,220,184, 1,228, 30, 62,124,184,173,173,173,166,166,134, 62,185, 8, 88,112, 83,165,237, 15,
- 44,253,171,170,136, 58,105, 28, 94,232, 35,223,203, 72, 59, 0, 76,147,144,171,131,207,158, 61, 11, 44,247,129,105, 18, 82,250,
- 51,128,111,109, 36, 47, 77,118, 37,248, 92,185,251, 88, 66, 73,146,225, 43,129,122, 26, 88,244,255,254,253, 7, 92,128,252, 1,
-162,199, 15, 31,144,228,120,228,238,194,104,215,129,120, 0, 16, 64,136, 33,160,159, 63,127, 26,106,104,112,113,178, 2,219,251,
-127,255, 49, 28, 61,124,164,177,185,229,223,127,134,219,119,238, 92,186,120, 65, 71, 71,159,153,153, 81, 93, 73,230,222,185, 63,
-156,120, 15,214,100, 99,121,165,166,240,140,129,133,241,241,243,223, 64, 82, 79,227,225,169,203,175,254, 51, 16,187,228, 6, 62,
-206,131,214, 39, 0, 86, 6,224,181, 64, 79,241,232,133,143,243,160,181, 71,128, 9, 17,180, 54,230, 53,246,190,200,159, 63,127,
-184,184,184,128, 69,191,160,160, 32,176, 57,249,245, 43,232, 32,104, 81, 81,209,183,111,223, 18, 60,163,234,199,123, 6, 51, 78,
-206,210,201,135, 93,245, 25, 30,158,103, 56, 13, 22, 4,114, 39, 21, 58,254,253, 71,212, 21, 52,240,233, 53,103, 99, 13, 22, 94,
-166,157, 7,174, 25,106,200,242,241,176, 31, 60,115, 71, 68, 81,251, 1,234, 42, 32, 92,254,221,116,237, 63,195,115, 6, 63,103,
-198,217, 91,238, 9, 11, 42, 6, 89, 51,226,241, 47,100,204,103,231, 87,232,121,215,255, 27,250, 25,164, 63, 50,166,214,255,111,
-108,102, 96,250,206,120,170,109,138,184, 56,214, 83,185,127,104, 60,148, 23,240,250,244,247,203,207,247,119, 22, 63, 90,118,196,
-239,189, 86,138,163, 91, 46, 15,167,160, 58, 7,139, 32,139,223,199,211,235, 78,155,154,152,226,236,108, 50, 49,193,195, 19,153,
- 77, 60, 16, 17, 17,201,207,207, 63,114,228,200,206,157, 59, 65, 85,215,206,157,154,154,154,129,129,129,244,201, 42, 1, 1,191,
-168, 85,250,203,203,203, 19, 89,168,193,203,125, 72, 39,128,236, 51, 92,137, 4, 78,222, 65,192,126, 48,176, 2, 0,150,251,198,
- 96, 6, 3,248,122, 59, 15,123, 19, 72,154,212,213,213,125,128,119,133, 9, 60, 77, 62,223,208,193,171,205,193,163, 90,176,170,
- 35, 69, 95, 71, 66,221,167, 5,232, 29,172,171, 83,128,109, 59, 14, 14,208, 26, 19, 96,195,255,219,183, 31,100, 59,126,180,220,
-199, 5,240, 28, 6, 7, 16, 64,136, 10,224,223,191,127, 92,236,108,191,254,252,103, 98,100, 0,162,250,166, 22, 96, 53,240,245,
-235,151, 23, 47,158,139,139, 75,252,255,255,239,207, 31, 6, 14, 86, 22,102, 86,124, 67, 4,192,194, 84, 75,249,137,136,224, 39,
-208,144, 31,248,162, 79, 70,198,255, 70,218,183, 79, 94, 18, 39,102, 57, 16,164,153,143, 57, 28,132,167,249,143,220,232,192, 44,
-250, 9, 54,255, 33,237, 74, 49, 49, 49,200, 50, 39, 96,103, 5, 50,247,203,207,207,207,202,202,250,248,241, 99,252,211, 23,243,
-247, 28, 76,241,177,119, 0,179,111,253, 1,141,255, 0, 25, 14,106, 12,124, 45,251, 11, 75,172, 8,186, 25,216,200, 2,146,114,
- 98, 66,239,127,254,100,225, 99,254,241,250, 27,176,104,148,148,151,217,181,239, 52,145,254,141, 47,110,189,127,116, 47,203, 11,
-134, 15,226, 12,192, 74,204, 66, 65,209,201, 30,223, 18, 85,228, 17,255, 37,225, 41,107,127,222,100, 80,249,193,112,146,133,129,
-135,133,193,215, 88,198, 55, 30, 95, 87, 73, 90,232,215,175,119,172,127,126, 3, 75,255,227, 9,252,118,129,254, 26, 98,154, 87,
-118, 29, 48, 12,253,202,250,235,235, 31,141,127,175, 95,226,155,168,135,148,248,144, 57, 0,100, 54, 73, 0, 88,226,115,115,115,
- 95,191,126,157, 11, 12,162,163,163,105, 61,236, 3, 44,181,129, 69,127, 52, 24,208,179,244, 71, 27,243,129, 92,156, 66,135, 50,
-206, 35, 56, 70, 73, 73, 9, 88, 1, 64, 74,127, 96,219, 95, 92, 82,146,164, 52,153,230,107,119,226,217, 43, 94,125,222,167, 59,
-239, 50,112,176, 7,231,198, 9,201,248,224, 45, 52,254, 62,125,254, 18, 88,250, 67,122, 0, 64, 64,106,243, 31,115,176,104,180,
- 50,192, 83, 25, 32,215, 1, 0, 1,132, 50, 7,240, 31,178, 6,230, 63, 3,176,232,103, 2,149,221, 12,235,214,174, 9, 12, 10,
- 17, 17, 21,131,100,218,255,132, 14, 25,103,102,122,165,173, 2,189, 28, 81, 79,135, 11,220,116, 97, 48,210,186, 7, 20, 39,198,
-113,200, 99, 62,104,226,240,173, 0,184, 0,242,152, 15,154, 56,124,105, 60, 86,240,233,211,167,207,159, 63, 3, 59, 64,192, 42,
-240,245,235,215,144,241, 31, 96, 87,224,203,151, 47, 4,135,128,214, 79,174, 57,112,133,225,227, 3,134,223,223, 25, 38,149, 59,
- 66,198,127,206,157,103,184,240,252, 40, 49,235,165, 62, 62,187, 43,196,207, 45, 44,196,173,174,166,121,239,254,235, 91, 79,223,
-202, 9,243,255,124,249,234,207,239, 63,240,173, 0,120,252,107,229,224,111,227, 24,185,126,243,170,253,135, 86, 45,235, 43, 14,
- 46,110,187,244,155,225,245,219, 87,120,252, 11, 31,241, 79,180, 50,143,214,146, 95,181,126,223,165, 75, 15,250, 46,159, 93,225,
- 26,199, 48,247,216,211,167,175,225, 91, 1,176, 12, 17,252, 96,255,251,235,205,175, 95,160,203,223,197,165,101, 53, 52, 53, 63,
-113,130,102, 74,190,255,251,198,244,243, 43,231, 87,230,151,207,177, 87, 0,144, 96,252, 1, 6,240, 97, 31,180, 21, 65, 68, 2,
- 96,188, 44, 89,178, 4, 88, 13, 20, 20, 20, 0,107,110, 72, 87, 96,208, 14,251,144, 93,250, 35, 55,255, 33,115, 15,240, 78, 0,
-173, 11, 8, 96,154, 68, 19,129,167, 73,248, 86, 0, 60,105,210,214, 84,221,197, 90,173,181,169,167,119,194,182,186, 37,251, 50,
-156, 76, 94,108,220,246,241,253, 39, 92, 37, 50, 80, 60,212,207, 3, 50,236, 3,175, 0,128,160,173,190,146,248, 66,124,180,184,
-199, 15,208, 70,255,145, 59, 4, 0, 1,196,132,220, 67,255,248,229, 27, 51, 19, 35,176, 66,254,247,255,255,159,127,160, 73,251,
-139, 23,206, 59, 57,131,110,176,251,251,255, 63, 51, 19,243,231,111,191,254,252,250,137,179, 38,255,251, 87, 81,250,185,168,208,
- 71, 72,101, 98,101,198, 3,185, 92, 21,216, 9, 48,212,188,243,231,239, 95, 98,154,255, 88,167,130,137,109, 14, 99,155,134, 34,
-168, 87, 80, 80, 16, 88,238, 3,123, 0,192,106, 64, 84, 84, 20, 50, 33, 12, 44,158, 62,124,248, 64,176, 2, 72,107, 93, 1, 44,
-247,249, 21, 24,128,213, 64, 94,231,126, 96,233, 31,148,223,254,228,223,139,165,125,101,192,144, 36,166,249,111,108,172, 38,170,
-164, 32, 38, 42,194, 6, 12,121,198,255,175,191,126,127,255,249, 7,145,254,237,237,216, 16,160,169,200,199, 39,204, 37, 42,245,
-251,221,251,243, 91,150,127,120,247,136,200, 52, 49,175, 35,135,161,208,133,229,207, 47,133,175, 12,175,152, 63, 77,122,126,154,
-129,141,143,192,120,215,221, 79,111,152,190, 63, 98,251,102,162,226,168, 21,199,115, 79,240,128,168,232,121, 89,139,123, 31,153,
- 62,255,252,255,253,219,146,127, 28, 60,188,120,218,254, 84, 1, 15, 31, 62, 4,146,192,198,184,136,136, 72, 96, 96, 32,164,149,
- 74, 59,144,158, 46,136, 57,242, 67,252,108, 48,217,165, 63,114, 65, 15,175,132, 32, 55,182,211,212,191,192, 52,121,252,248,113,
-200,184,191,177,177, 49, 3,248, 34,226,149,155,182, 17,159, 38, 55,174,111,112, 47,207,245,242,114, 22, 97,103,254,204,248,127,
-231,173,199,199,175, 60, 37, 88,124,103, 38, 68,222,187,115, 7,216,240,135, 32, 96,233,143,181, 93, 63, 10,200, 43,250,113,141,
-255, 0, 1, 64, 0, 33,134,101,128, 37,224,237,107,151, 20,164,132, 56, 89, 89,254,254,253, 7,190,162,153, 33, 45, 61, 27,216,
- 37,248, 11,222, 13,240,237,199,143,235,183,238,177,177,225, 28, 20,249,243,251,157,161,214,125,120,166,207, 42,188,191,118,137,
- 42,164,207, 96,162,115,247,196, 69, 77, 22,102, 81,130,205,127,180,162, 31, 40,200,128,180, 19, 24,127,243, 31, 45, 57, 2, 5,
- 25,144,118,198,226, 2,127,255,254,149,144,144, 0,246, 0, 94,190,124, 9,100, 3, 75,150,183,111,223, 2, 73,200, 45,213,248,
-245,190,126,113,167,166,101, 63,176, 7,208, 93,108,251,229,207,223,162,206,213, 19,203, 67,139,251,182,176,128,238,160, 33,220,
-212,146, 20, 17, 96,101, 96,253,203,192,248,252,254,213,135,175, 62, 42,139, 10, 93,124,247,236,220,221,167,196, 52,255,131,147,
-138, 88,133, 24,152,152, 25, 22,108,187,191,118, 90,105, 82,199,204, 34, 95,253,108,103,121,130,254, 5, 54,255,123,253,194, 24,
- 62,112, 48, 48,178, 50,244,246,132,156, 62,188,203, 57,147,177, 61,151,241, 68, 25,158,230, 63, 16, 92,124, 33, 98,243,253,227,
- 23, 78,230,111, 28, 28,202,193,172,192, 66,255, 35, 19,235, 31, 6,181,255,127,191,253,126,243,252,232,228,143,209, 81,202, 52,
- 74,199,240,193,104, 77, 48,128, 8,218,130, 1, 77,243, 15,214, 5,251, 68,118, 11,200, 46,253, 25, 80, 71,255,209, 22,140,210,
-116, 38,224,214,249, 99,240,160,206, 74, 10,219, 1, 27, 11,218,174,164, 68,112,239, 2, 48, 77,134,187,152,243,255, 19,252,198,
-192,186,182, 63,119,218,150, 11,165, 30, 54, 9,125,203, 66,218, 22, 19,172,183,224,123,199,208,184,163, 43,250,105, 13, 0, 2,
- 8,209, 3, 0,182,124, 63, 60,191,115,247,241, 91, 22, 86,102, 96, 31,224,247,159,191,231,206,157, 93,180,104,254,175,191,255,
-127,255,253,199,198,194,244,234,253,151,167,215,143,115,226,152, 2, 6, 22,157,154,202, 15,161,205,127,112,191,127,237, 18, 53,
-208, 0, 16,211,127, 32, 98, 98,250,103,161,127,253, 47,238, 78, 0, 90,243, 31,190, 10, 8, 88,244, 19, 44,253,209,154,255,240,
- 21, 8,192,162,144, 96,105, 8,206,207,239,191,124,249,194,202,202, 10,105,254,255,251,247, 15, 66, 18, 83, 1, 44,238,175, 60,
-247,244, 32,143, 4,104,226,151,151,133, 25, 88, 31,240,177,179,126,120,247, 4,216,252,103, 97, 98, 34,216,252,151, 21,226,189,
-118,239,254,159, 95,191,216, 89,216,190,124,249,113,241,254, 51, 96,209, 79,176,244,135,248,215, 63,167,121,233,164,137,223,254,
- 49,200, 42,203, 92,185,122, 2, 88,250, 19,233, 95, 32, 40, 82, 54,217,124,123, 31,195,199, 63, 12, 28, 34,187, 79, 93, 3,150,
-254,192,162, 31,127,233, 15, 4,250,191,124,142,238, 62,197,240,235,243, 23,198,207,239,153,190,124,100,249,253,251,239, 39,246,
- 31,223, 56,158,221, 95, 81,117, 91,193, 64, 13,207, 12, 48, 16,192, 83, 14, 7, 24,160, 9,226, 7,179,193, 96, 0,243, 9,164,
-213, 15, 44,211, 25,192,179,193, 4, 39,132, 41, 41,253,129, 69,252,127,220, 75,230,105,183, 28, 8,152, 38,225,107,126,106,106,
- 11,129,105, 82, 92, 92, 28,178, 46, 8, 34, 78, 48, 77,166, 56,232, 21,244, 76,252,252,242,149, 40,159,216,213,107,143,128,165,
- 63,100, 25, 43,145,117, 30, 28, 32,143,234,140,246, 3, 40, 1, 91,150, 52,111,193,123,143, 8, 64, 0,161, 76,204,242,242,242,
-158, 61,176,225,255,127, 63, 5, 41, 97, 94, 46,118, 45, 29, 3, 45,109,125, 22, 38,134, 47,223,255, 62,122,254,238,212,129,173,
- 60,220, 92,184, 12,250,250,237,155,154,252,243, 31, 63, 57,254, 67,174,205,251,207,192,201,241, 3,152,140,223,125, 96, 7, 10,
-240,114,255,209, 85,123,112,248,140, 33,208, 10,252,205,127,120,171, 31,200,101,253,255,155,225, 15,116,245,216, 95, 22, 46,130,
-205,127,120,171, 31,194,253,248, 10,186,228, 0,207,118, 92,120, 29, 0, 36,129,253, 0, 32,249,238,221, 59, 62, 62, 62,200,248,
- 15, 49,151,178,130, 87,253,183,103,134,218, 51, 76, 58, 60,173,218, 59,164,120,226,178,142,108, 96, 15,128,141,157,131, 96,243,
-255,218,163, 87, 42,178, 34,123,247,156, 96, 0,111,191, 4,146,191,127, 66,251,218,172,184,181, 67,154,255, 45, 73,206,121,245,
- 11,100,149, 24, 73,242, 47,164,249,239,182,126,222,174,232, 72, 70, 25, 11, 6,240,150, 96, 6,240,225, 16, 16, 5,190, 60, 60,
-120,156,173,247,179,236,226,246, 45, 63,212,143, 41,168,234,124,226,100,184,207,240,240,243,131,215,175,219,254,126,121, 47, 83,
- 24, 87,140, 63,160,166, 79,159, 14, 44,238,191,127,255, 14, 47,194,128, 92,160,224,144,200, 72,144, 86,255, 75,240, 54,105, 98,
-102,131,129,237,101,242, 74,127, 6,216,229,239,120, 10, 62, 82,247, 18, 19, 9,128,105,178,181,161,102,221,230,237,238, 54, 70,
-240, 52, 9, 68,198,247,238,121, 4,199, 60,122,251, 77, 78,152, 11,127,243,191, 96,214,230,170,100, 55, 41, 9, 7, 72, 45, 2,
-113, 42,158,190, 20,145,221,130,209,126, 0, 21,235, 3, 52, 17,128, 0, 66, 95,153,195,199,203,115,238,192,134,251, 50,234, 74,
-170,154,124,220,156,255,254, 51,124,255,249,235,222,189,123,175,239, 93,224,229,225,102,194,221,170,229,228,224, 88,181,195, 30,
- 79, 27, 31,168,151,155,155, 64,115, 15,178, 6, 20,216,228,255,247,247, 55,168,244, 7,131,223,140,172,184, 14, 99, 64, 6,144,
-245,103,192, 38, 48,188, 28, 36,178,244,135,215, 1,240,205, 95,192, 58, 0,103, 0,225,168, 3, 22,195, 54, 66,205,110,131,237,
-137,253,253, 5,255, 53,228,192,230,255,169, 55, 31, 46,220, 6, 13,248,192,203,125,130,165, 63, 4, 0,155,255,107,141,184,115,
- 2, 53,200,240, 47,176,249, 95,188,105, 21, 99,107,253,118,113,243, 9, 95,174,192,197, 13, 89, 88,101, 56, 8,159,248, 4,236,
- 7,108,223,244,227,201,251,187,175,223, 62,127,121,139,135,249, 47,159,181,158,173, 99,156, 35, 77, 19,238,128,111,250, 37, 99,
- 13,104,122,186, 32, 25,165, 63,195,128, 78,105, 2,211,164,165,165, 37, 90,154, 4,150,254, 12,160,169, 96, 46,252,122,129,205,
-127,215, 61, 39,163,235, 23,217,217,217,137,163,246, 38,201,174,174, 32,117, 0,193, 0,193,172, 44, 71,235, 12, 60,229, 62,242,
- 76, 0, 64, 0, 97, 41,223,128,237,223,159,239, 30,159, 59, 0, 90, 46, 2,185,112,153,157,157, 29,115,110, 22, 13,176,178,178,
-242, 19,113,228, 3, 30, 0, 25,240, 97, 6, 54,249,255,124, 99, 70, 42,250,137, 57,177, 26, 50,224, 3, 44, 10,145, 75, 67, 98,
-138,126,126, 81,169, 95,184,167,181,241,131,232,230,197,183,111, 92, 37,219,191,167,110, 61,134,100, 51,228,210,159, 96,209, 15,
- 1,113, 70,220,228,249, 23, 20,167,253,101,144,162, 31, 94,250, 19, 89,244,195,129,167, 98, 8, 3,164,114, 35,110,141, 12,176,
-248,134,108,250, 5,182,247,225,187,127,129, 12, 72,243, 31,200, 24,252,135, 58,144,177, 6,148, 22,141,116, 90, 3,172,105,146,
- 96,209, 15, 1,174, 53,179,169, 88,244,147, 84, 29,142,150,245,184, 0,218,141,240, 12, 24,243,192, 0, 1,132,189,129,203,194,
-194,130,107,172,134, 22, 0, 50,202, 15, 41,250, 25, 72, 44,250, 33,163,222,228, 21,133, 12,160,149, 75,255,136,233, 94, 96, 5,
-175,222,125, 36,222, 34,100, 0, 25,229, 39,175,232,167,196,191,144, 81,254,205, 95,190,144, 93,244,143,130,225, 10, 32, 75, 60,
- 31,189,253, 70, 70,209, 15, 41,127,225,163, 61, 67,183,254, 27,174,117, 0, 30, 89,128, 0, 26,189, 19,120, 20,140,130, 81, 48,
- 10, 70, 40, 0, 8,160,209, 27,193, 70,193, 40, 24, 5,163, 96,132, 2,128, 0, 26,173, 0, 70,193, 40, 24, 5,163, 96,132, 2,
-128, 0, 26,173, 0, 70,193, 40, 24, 5,163, 96,132, 2,128, 0, 26,173, 0, 70,193, 40, 24, 5,163, 96,132, 2,128, 0, 26,248,
- 75,225, 71,154,222, 31, 47, 30, 19,175,151, 67, 66,118, 52,156, 71,245,142,234, 29,213, 75,163, 75,225, 1, 2,104, 80,247, 0,
- 72,221, 5,126,239,222,189, 61, 48, 0,100,143, 86,239,120,192,199,143, 31, 31, 61,122,116,252,248,241,115,231,206, 1, 25,228,
- 25, 66,197, 83,222, 70,193, 32, 7, 55,111,222, 36, 73,113, 70, 70, 6,217, 22,145,173,119, 20,144, 10, 0, 2,136,101,208,186,
-140,212, 18, 28,168,190,163,163, 35, 44, 44, 12, 89,187,146,146, 18,241,218,129, 96,245,234,213,161,161,161, 74, 96,128, 95,125,
- 90, 90, 26, 65, 51,129,142,193,186, 26,122,247,238,249,196,232,125,255,158,155, 70, 97,251,234,213,171,159, 63,127, 50, 50, 50,
-114,112,112,252,248,241, 3, 88, 1,156, 62,125, 90, 95, 95, 95, 69, 69,133, 36,115,136, 57, 42, 3, 92,145,103, 18,163,108,230,
-204,233,212,214,155,142, 67, 49,250,209, 99, 4,211, 21, 67, 61, 35, 99, 19, 70,229, 87,207, 24,118, 61,148,129, 93,131,160,243,
-220,221, 65, 71,234,146,119,120, 53,228, 44,232,244,116, 65, 74, 86,214, 3, 75,213,254,254,126,130, 27,238, 82, 83,211,128,222,
-194,140,213,146,146, 98, 98,180,195, 83,197,132, 9, 19,236,237,237,129,229,248,178,101,203, 62,125,250, 68,208, 82,148, 34,137,
-133, 57,194,138, 45, 61, 35,189,107, 71,119,137,107, 9, 68,112,246,236, 89, 88,245,198,196,128,118, 41,115,115, 99,201, 41,144,
-155,157, 18, 18, 18, 70,119, 36, 32, 3,200,190, 48,248,234,127,128, 0,194, 94, 1, 96, 30, 54, 66,163,227, 71,168, 88, 1,192,
- 75,127,160, 59, 33,123, 82,128, 38, 16, 89, 1, 64, 50, 57,164, 56,131,156,123, 85, 94, 94, 78, 88,239,106, 33, 66, 6,227, 12,
-177,175,190, 4,110, 81,103, 32,226,144, 52,242,238,193, 0,182,253,197,196,160, 23, 60,112,114,114, 2, 43,131, 15, 31, 62,240,
-243,243,159, 58, 5,186, 60,153,152, 58, 0, 24,188,144, 80, 2,134, 88,112,112, 48, 48,192, 9,214, 4,155, 54,109,128, 48,252,
-252, 2,112,177,113,233,253,126, 44, 7, 26, 36, 86, 83,224,108,100, 46,144,129, 75,239,142, 29, 40,151,155, 29, 58,116,168,173,
-173, 13, 57,160,150, 44, 89,130, 63, 97,116,118,118,118,176,119,130, 11,226, 80,148, 44, 80,207, 72,106,146,166,127, 38, 66, 46,
-253,129, 94, 6,198,248,210,165, 75,143, 28, 57,226, 21, 85,141, 75,241, 49,140, 43,180,215,175, 6,149,254,255,254,253,155, 53,
-107, 22, 80, 59,159,156, 61,214, 66, 31,222, 29,188,113,227, 6,144, 27, 25, 25, 9,100, 71, 69, 69, 17, 83,109,244,236,134,222,
- 66,252, 98,231,115,160,222,101,249, 92, 64, 35,203, 61,202, 24,192,177,183,124,225,178, 12,123,124,125, 2, 99, 99, 99,226,155,
-122,163,165, 63, 50, 0, 8, 32, 38,172,197, 10, 48,123, 3, 35, 27, 45,195, 19, 57, 32, 67,201,216, 11,178, 94, 72, 99,156,120,
-189, 64, 7,187,128, 1,164, 14, 32, 41, 65, 64, 74,127,160,117,160,235, 41,192,150, 18,233, 11,198,176,247, 16,132, 71, 4, 23,
-224,217, 50, 29,130,240,136, 16, 44,253,255,131, 1,241,163, 49,239,223,191, 7,150,245,192, 10, 32, 41, 41, 41, 58, 58,154,141,
-141, 13, 88, 7, 0,251, 1, 64,239, 51, 51, 51, 19, 60, 94,255,218,181,107, 64,123,215,172, 89, 3, 9, 46,160,165,107,215,174,
- 5, 54,244,128,226,116, 78,202,104,149, 1,141,154, 32,192,210, 31,152, 36,194,111,132,129, 90,250,168,129, 95,241,179, 28,173,
- 79,128, 11, 0,195,167,180,180, 84, 81, 81,145, 12, 55, 0,245, 2,219,254,194,194,123, 41,111,251,195, 75,127,146,180,195, 75,
-255,226,226, 98, 60,218,145,147, 31,176,249,111,103,103, 7,100, 0,235, 0, 96, 63,128, 96,185,129,166, 55,220, 18,212, 42, 93,
-150,207, 9,236, 7,148,185,151,226,215, 11,108,251, 3,237, 2,118,199, 93, 48, 0, 68,106,180,249,143,167,244, 7, 2,128, 0,
- 98,194,214,229,132, 94, 12, 13,105, 71,195,155,123,196, 20,199,144, 60, 67, 73,126, 35,111, 0, 7,107,153, 78,170, 22,120,229,
- 1,108,254, 19, 60,255,118, 96, 1,188,244, 7,146, 79,159, 66, 47,220,120,242,228, 9,254,204, 6,108,251,127,251,246,141,137,
-137, 9,232, 71, 32,251,217,179,103,172,172,172, 44, 96, 0,100, 64,142,234, 68,219,208,143,150, 81, 39, 78,156, 8, 44,250, 67,
- 66, 66,128, 5, 10,208, 16, 96,225, 8,100, 3,165, 38, 77,154, 52,204,114, 11,188,244, 7,178,129,101, 55,188,109, 1, 9,124,
-120, 7,145,200,242, 5,168, 12, 24, 98,192, 68, 69,222,172, 73,101,101, 37, 80, 47,158,168,193, 83,250,247,245,245, 1,163, 12,
- 88,145, 0,139,239,195,135, 15, 51,128, 79,100, 34,190,244,135,104, 7,166,153, 51,103,206, 64,180, 19,180, 17,168, 62, 34, 34,
- 2,194, 5,214, 1, 14, 14, 14, 64,219, 55,110,220, 72,112, 32, 17,216,252,103, 96,100, 88,154, 7, 61,127, 2,216, 15,136,180,
-102, 7,245, 3,240, 2, 60,165,196,104,183, 0,173,244, 79, 43, 71, 47, 21, 1, 2,136, 5,107, 98,133, 95, 12,125, 15,233, 98,
-104,130,105,157, 90,165, 63, 85, 42, 0, 74, 0,176,242, 32,219, 35,116, 3,192,162, 4, 88,244,191,120, 1,189,133, 17,153,141,
- 11,188,126,253, 26,152,147,129, 45,253, 59,119,238, 0,181, 3,243,234,175, 95,191,128,217, 15, 88, 1, 0,201,191,127,255, 2,
-171,135,245,235,215,227,138,232,189,123, 65,237, 80, 96,137,143,172, 0,194,134, 20, 79,120, 82, 8,242, 8, 15, 46, 54,158,198,
- 62,174,177, 32, 60,131, 63,104, 35, 63,144, 54, 41, 73,105,160,131,189,147, 17,181, 66,133,140,251,223, 35,102,120, 16,169, 9,
- 15,169, 35, 33, 37, 29, 48, 12,137,111,147, 66,244,170,170,170, 50, 16, 61,221,130, 12, 50, 51, 51,225,131, 93, 64, 54,176,248,
- 6, 26, 66,124,233,111,111, 13, 58,146, 17,216,246, 47, 41, 41, 1, 54,204, 33,218,125,253, 82,241, 95,236, 7,111,254,195, 1,
-100, 44,104,219,182,109, 26, 26, 26,192, 38, 59,126,189,225,150, 40, 7,115,129,199,130, 24,150, 47, 59,127, 83,226, 38,126,189,
-163,128,140,210, 31, 8, 0, 2, 8,251, 28, 0,176, 75, 5,105,248,195, 47,134, 38,169,244,199,218, 14,197, 51, 60,141, 75, 47,
-178, 56,237, 14,252, 3,250, 20,126,236, 56,178, 27,200, 27,177,253,191, 74,144,108,151,124,241, 33, 60,225, 9,119, 36, 90,137,
- 32, 35, 35,131,172, 0,107,112,189,123,247,142,151,151, 23, 72, 30, 59,118, 12, 88, 13, 0, 75,127, 96,147, 31,114,245, 13,176,
-104,251,253,251,247,207,159, 63,241, 52, 81, 33,189, 34,204, 48, 1,138,172, 89,179, 6, 40,139, 39,184, 40,159, 3, 0,150,245,
-200,197, 61,132, 77,100, 53, 0, 44,146, 72,174, 3,192, 67,252,144,148,143,152, 76, 2, 11, 18, 63,183,132, 92, 71, 50,192, 46,
-118, 39,111, 80, 2,216, 9,128,204, 94, 16,175, 29, 24,149,240,241,119, 27, 27, 27, 96, 9, 78, 82,219, 31,168,253,207,159, 63,
-200,218, 15, 30,253,219,211,153, 65,176,249, 15, 41,241, 49, 65,127,127,191,119,116, 13, 46,189, 72,163,255,168,253, 3, 34,244,
-142, 2,178, 1, 64, 0,177,224, 73,181,144,230, 63,157,219,254,200, 35, 81,244, 89,202,137, 60,218,131,188, 62, 4,127,137,134,
-179, 63, 11, 27,253, 39,163, 38,128,143,254,227,175, 9,162,163,163,185,185,185,121,120,120,128,165, 57, 63, 63,191,160,160, 32,
-176,121, 21, 27, 27, 11,145,229,224,224,112,115,115, 3,250, 2,243,152, 63, 96,137, 15, 44,253,127,252,248, 1,212,197,206,206,
- 14,204,222,255, 65,151,125,254, 5,138, 3, 75,127, 32,131,224, 0, 5,174, 97, 64, 96, 67,149, 14,131,102,184,102,131,137, 1,
-144, 58,128,132,120,108,194,226,217,176,235,161,224,169, 41, 98, 13, 65,110,254,195,171,109, 34, 27, 22,200,205,127,172, 85, 62,
-126,176,108,217, 50,136, 33,192, 58,128,140,161,127, 72,203, 15,216, 53, 44, 44, 44, 60,115,230, 12, 76, 59,129,228, 49,113,226,
- 68,180, 75, 58, 87,172, 88,113,240,224, 65, 96,186,130,180, 72,240,172, 79,159, 48,113, 66,132, 5, 74,243, 63,122,210,183, 21,
-199,126, 3,245, 26, 70, 25,102,216,103, 16,191,182,125, 20, 16,217,252, 7, 2,128, 0, 98,194,211, 46,134, 36, 2,248,100, 0,
-254, 97,184,242,242,114,242,220,135, 75,175, 18,248, 62, 82,226, 91,241,104, 0,178, 34,136,212, 97, 83, 98, 22,119, 14, 6, 48,
-107,214,172,190,190, 62, 56, 23, 82,250,251,129, 1,144, 1,204,114, 88,117, 1, 43, 12, 96, 41,255,254,253,251, 55,111,222, 0,
-201,111, 96,240,229,203,151, 79,159, 62,125,252,248, 17,216, 27, 0,246, 0,240, 92,233, 3, 44,128,128, 45,125,130,149,232,160,
- 2,135,144, 0, 92, 16,232,125, 56, 27,207,184, 54,242,184, 63,114, 91,158,164,102, 1,154, 98, 96,113, 12, 12, 67,178,103, 2,
-128,122,137, 73,210,192, 18, 31,152, 6, 32, 19,191,192, 58, 0,226,119,226, 47, 93,168, 46,183, 7,106,255,183, 82, 0,168, 29,
-216,244,134,104, 63,116,236, 31,172, 57,142,179,249, 15, 31,240, 1,141,219, 44, 95,154,153,153, 9, 52,167,160,160,128,160,213,
-160,230, 63, 3,227, 82, 88,243, 63,106,226, 55,230,136,143,203,143,253, 2,234,237,220,209, 53, 90,136,211,168,244, 7, 2,128,
- 0, 98,193, 85,190,192,135,254,225,147, 1,248, 11, 71, 72, 57, 14,105,203,147, 58, 92,131,166, 23,210, 39, 0, 10,146, 55,236,
- 3, 95, 6, 74, 79, 0,105,248,147, 55,254, 3,105,248, 19, 51,254, 3,207,222, 16, 70, 99, 99,227,252,249,243, 97, 67, 40,126,
- 16, 6,176,249,143,171, 2, 16, 22, 22,126,251,246, 45,176,189,255,250,245,107, 96, 15, 0,216,190,131,244, 0,190,126,253, 10,
-172, 9,128,165, 63,176, 26, 40, 43,195, 57,231, 6,105,230, 99, 93, 34, 12,145,197,227,102,170,204, 1, 16, 41,142, 12, 32,195,
- 38,232, 5, 92,117,117,107,107,171,136,136, 8, 77,147, 4,102,243, 31, 14, 8,206, 4, 96, 54,255, 73,106,251, 3,251,136, 49,
- 49, 49,192,200, 5,122,191,170,170, 10,216,251, 33,254, 66,155,154, 10,251, 3, 7, 14, 48,174, 1,221,207,186,171,134,215,173,
-229, 51, 80,123,107, 39,168, 21,143,191, 11, 2, 89,251, 15,110,245, 47, 59,120,240,240,127,198,255,133, 5,133,234,234,234,196,
- 88, 10,212, 27, 97,197,138,104,245, 51,128,244,138,187, 73,144, 49,243, 49, 10,176,148,231,157, 21,152, 21, 3,100,132, 0, 32,
-128, 88,240,180,253,129,165, 63,242,100, 0,193,174, 43,114, 57, 78, 94, 63, 0,162,151,194,145, 31,136,155,201, 44,199, 7,125,
-130,131, 12, 82,193,175,234, 78, 76, 76, 68, 27,159, 1, 10, 66,242, 33, 38,144,145,145,185,115,231, 14,176,196, 7, 54,249,127,
-255,254, 13, 25,250,255,241,227, 7,100, 45, 41,100, 78, 88, 89, 89, 25, 79,205, 10, 52, 28,210, 9,128,167, 4, 96, 80,163,137,
- 96, 5,180,152, 3, 64, 30, 17,194, 21, 86, 88,197,129, 1, 8,172, 3,194,195,195, 87,174, 92, 73,252, 64, 37, 26,187,163,163,
- 35,237,105,122, 24, 48,165, 97,219, 8,230,238,238,126,255,254,125,180, 93, 8, 16, 0, 20,103,192,187, 41, 44, 52,116,117,104,
-168,179,171,235, 61,204,201,134,183,111,157, 25, 24,222,167,167,227,204,137,240,171, 16, 33,157,140, 93,187,118, 49,144,114,157,
- 25, 19, 19, 35,168, 17, 3, 41,253, 47,253,153,191, 31,116, 17, 38,176,244, 39, 38,107, 64,146, 19,176,213, 15, 36, 11,139, 10,
-213,213,212,137,180,180,180,172, 4,172,151, 1,216,234,135,232,149,112,147, 4,141, 54,141, 22,254,180, 7, 0, 1,196,130,171,
- 59, 15,159,248,133, 47,243, 32,102, 76,156, 42, 99, 65,164,238, 0, 24,129, 0, 62,228, 2, 47,227, 32,187, 55,144, 5,177,142,
-153, 2,235,134,109,219,182,253,249,243,231,195,135, 15,144, 57, 0, 6,240,234, 32, 32, 23,200, 38, 24,119,249,249,249, 19, 39,
- 78,132, 84, 3,200,227,254, 64,113, 90,215,157,192,226,158,152, 66, 31,107,105,136, 89, 49, 0,155,216, 68,150,254,152,165, 48,
-242,132, 48,193, 78, 0,166,224,131, 7, 15, 24,136, 88, 98, 0, 31,128, 69,117,185, 11, 49,254, 5,246,243,128, 69, 63,242,224,
- 59, 49, 0,168,253,223, 74, 65, 96,185, 15,100, 47,216,255,107,197,177, 95, 64,237,135,143,147, 48, 90,117,232,208,161,130,130,
- 2, 34, 91,253,112, 0, 73,132, 43,143,255, 6,234,149,112,151,132,213, 39, 68,233,133,108,247,133, 76,239,163, 69,211,232, 78,
- 96, 6,108,215,129,161,237, 4, 6, 8, 32, 22,172,217, 3,178,169, 10,185,233, 71,112, 8, 8, 61,123,144, 91, 7, 80,110, 8,
-252, 52, 8, 34, 1,176,178,193, 58,132, 77, 76, 37,132, 57,230, 67,252, 40, 16,230,152, 15,145,163, 64,240,153,106,228,188,141,
- 85, 16,107, 51,205,219,219,123,233,210,165,108,108,108, 63,127,254, 4,214, 1,255,254,253, 19, 16, 16,120,255,254, 61, 49,155,
-159,181,180,180,128,230,239,222,189, 27,178,236, 7,178, 39, 96,200,101,176,125,251,246, 1, 3, 97,203,150, 45,100,148,254,240,
-178,242, 94,121, 57,158,174,106,105,105, 41, 3,142,229,115,101,101,101,248,231, 0,210,211, 5,113,233, 5,182,253,137, 41,199,
- 9,246,129,240, 0,247,150,207,112, 54, 73,165,255,180,105,211,200,139,142,158,238, 94, 80,147,159, 2,128,181,178,132,223, 62,
- 61, 10,240, 0,128, 0,194,185, 12,148,160, 8, 77, 1, 61,119, 0, 96,206,245, 17, 93,205,144, 89,240,129,244,114,146,233, 90,
-200,232, 22,164,114, 66, 27,233, 66, 22,196,239,163,232,232,232,187,119,239,238,223,191,255,251,247,239,127,255,254,245,245,245,
- 5, 22,229,196,135,185, 43, 24, 64,218,110, 68, 54,252,169, 53, 7,128,139,141,167, 52, 68, 91,151, 66,204,110, 38, 6,248, 81,
- 63,247, 66,145,131, 5,152, 11,210,158,166, 51,194, 54,130, 65,164,176,246,180,240,132,191,179,179, 51,193, 4, 73,134, 20,220,
-191,192, 24, 9, 12, 12,132,156, 62, 68, 42, 96, 10,127, 15,212,238,231,159, 6,105, 43, 64, 22,125, 34, 31,243, 64, 11, 96, 28,
- 99, 68,182, 94, 96, 3, 31, 87, 61, 7,145, 26, 5,248, 1, 64, 0, 13,198,195,224,200,104,182,208,191, 17, 74,137,141,148,156,
-242, 70, 45,159, 42,131, 1,154,224,175, 95,191,152,193,128,218, 17, 58,125,128,244, 98, 73, 72,144,227,195, 8,131,122,232,193,
- 80,200,189, 67, 96,233, 15,169,104, 7,231, 22, 83, 10,247,202,128,181, 19, 30,122,167,250,114, 76,252,231,252,208,174,178, 28,
- 29, 20, 2, 2,128, 0, 26,189, 20,126, 20,140,130, 81, 48, 10, 70, 40, 0, 8,160,209, 27,193, 70,193, 40, 24, 5,163, 96,132,
- 2,128, 0, 26,173, 0, 70,193, 40, 24, 5,163, 96,132, 2,128, 0, 98, 25, 13,130, 81, 48, 10, 70, 1, 50, 96,196,100,253,135,
- 19,163, 96, 88, 1,128, 0, 26,237, 1,140, 80,128,245,112,240, 81, 48, 10, 24,193,152, 17,116, 6, 52, 35, 6, 24,221,155, 53,
-220, 0, 64, 0, 33, 38,129, 71, 47, 89, 30,213, 59,156,244,198,249,233, 34,154, 57, 76, 76,144,229,170,240, 21,141,255, 97, 0,
+127,255,254,126,252,248,228,198,149, 51, 95,126, 74,154, 24,219, 14,126,151, 3, 75,255,130,130, 2, 96,135, 18,207, 97,206,120,
+ 0,153, 23,202,143, 12,128,255,168, 96, 6,112,192,205,194,118,138, 53,252, 82,120,152,170,255,176,253,137,136,208, 30,225,151,
+194, 67, 0,242, 53,144,104,235,254, 1, 2,136,126, 61, 0, 38, 6,234,111,230,246,114,251,253,159,129,153,133,153,213,202,156,
+ 81, 76,148,137,133,133,137,157,149, 89, 67,141,233,225,227, 63,102,198, 76,194, 66, 28,219,247,129,206, 20,100,254,255,253,255,
+255,127, 18,210, 56, 75,255, 75,103,206, 40, 72,201, 92, 58,126,226,228,175,223,239,223,188,103, 99,231,213, 52,180,214,183,118,
+219,191, 25,180, 67,152, 70,117, 0,218,133,242,144,179, 24, 83, 82, 82, 6,127, 53,112,225,252, 30,118,150,119, 44, 76,191,126,
+252,248,251,241, 43,167,141, 29,225,147,123,175,221, 56,199,203,241,214,201,154, 93, 65, 94,153,143,143,255,247,159, 63,175, 95,
+191, 17,127,244,248,246,221,123,199,142,190,179,178,246, 31,228,205,127, 6,216,113,202,192, 10, 0,207,141, 46,131, 13, 0, 91,
+ 48,107,215,174, 69, 57,254,136,134,165, 33,236, 2, 86, 82,181, 61, 90,199,120, 50, 5, 86,136, 51,192, 46, 91, 67,152,148, 50,
+227,171, 89,248,100,172,213,234,246,237,219, 33,108, 15, 15,143, 29, 59,118, 96,101,143,150,254,152, 92,120, 53, 0, 16, 64,216,
+ 43,128,163, 71, 78, 90,219,152, 83,215, 29,255, 8,221,204, 69,228, 13, 77, 40,149, 10, 11,243,251,119, 44, 18, 98,172, 18, 98,
+108, 95,190,176,114,176,178,252,101, 97, 55,210,101, 52,208, 99,102, 98,100, 5,109, 34,103,101, 99,101,250,201,200,193,246,231,
+ 27,206,210,255,200,190,189,138,146,162, 87, 46, 94,169,110,110,128,139,183, 54,182, 49, 49, 51, 26, 25, 27,109,223,177,151, 96,
+ 5,240,239,223, 63, 96, 33,126,231,206, 29, 78, 78, 78, 93, 93, 93,130,103,215, 48, 96, 92, 40, 15,191,109,117,206,156, 57, 3,
+ 85, 7,156, 63,127,222,208,208, 16,191,154, 43,215,206,253,255,249, 64, 94,242, 7, 63, 31, 59, 19, 19,215,247,239,127,222,190,
+251,126,112,207, 4, 14, 62, 35,115, 51, 59, 60, 26, 57,152, 95,171, 41,254,215,214,214,124,254,226,253,217,243,231,190,124,249,
+202,207,207,171,164, 36,207,196,204,250,247,239,163,243, 23,142, 24, 26,216, 12,230,230, 63,252,118, 23, 96, 63, 0, 88, 7, 16,
+121,173, 10, 70, 67,150,222, 61, 0, 72,210, 93,179,102, 13,121,247,106, 17, 15,224,141,241,153, 51,103,144,106, 15,147,124, 48,
+ 68,239,169,118, 30,180, 70,162,132, 0,147,180, 16,211,224, 9,207,161, 11,224, 37, 62, 90,125, 0, 16, 64, 56,123, 0,192, 58,
+ 0, 72,146, 90, 13, 28,201,187,141, 85,220,102,146, 42,241, 57, 4,210,131, 35,166, 26,216,115, 64,140,149,133, 85, 86,234,203,
+231,207,172,103,175,200,130,174, 76,101,100,102, 99,253,163,173,250, 77, 93,149,153,145,129,137,141,149,157,141,153,209, 88,239,
+151,144,224,191, 67,167,177, 27,162,169, 40,254,240,238, 43,228,210, 31, 8,170,235,171,218,154,187, 36, 45,245, 4, 5,120,241,
+187,225,251,247,239,192, 18,225,225,195,135, 16, 46,176,233,225,229,229,229,239, 79,160, 73,139,118,163, 36, 50,232,237,237, 45,
+ 46, 46,166,243, 54,119, 96,233, 15,191, 82, 3, 15,248,249,245,169,162,244,119, 17, 97,110, 25,105, 9, 46,110,174,135, 15,159,
+254,253,251, 79, 90,138,247,234,245,227, 23, 56,185, 13,116,177, 95,252,112,249,242, 17, 61,181, 95,114,114,138,215,174, 63, 60,
+123,246,250,235, 55,159,129,241, 44, 40,200,249,237,219, 23, 67, 67,237, 15, 31, 62, 62, 61,123,254,226,101, 78,125, 93,227, 65,
+219,252,135, 95,228, 66,240, 90, 71,228,145, 13,180,163,140,129,108,248,112, 7, 25,227, 72,205,205,205,190,190,190,164,158,214,
+ 0,172, 3,128,246,174, 90,181, 10,215,113,108, 12,224,179,148,209,122, 6,144, 43, 33,129,226,104,109, 2, 96, 65,143,121,118,
+ 0,252,120, 37,160,127,211,211, 51, 72,234,100, 32,235, 53,171,252,114,186,157, 7, 94,244,143,150,218,212,106,254, 35, 71, 25,
+ 90,244, 1, 4, 16,129, 80, 6, 86, 3,144,154,128, 72,128,181,160, 39,178,244,135,128,131, 7, 15, 62, 5, 3, 98,206,114, 98,
+254,255,157,133,241, 7, 27, 43,235,249, 43,162,204, 44, 44,188,108,223,248, 56,190,243,242,255,125,250,148,151,157,141,131,157,
+157, 61,212,239,143,159, 39,147,180, 20, 59, 23, 39,246,187, 41,190,125,120,252,226,221,151,226,186, 58, 76,169, 15, 31,223,189,
+127,253,130,145, 80,199,101,245,234,213,240,210, 31, 2,182,109,219,118,253,250,117,252,205,127,228,243,159, 33,205,255,143, 48,
+ 0,100,215,215,215,147,125, 84, 28,217,165, 63, 65,101,192,230, 63, 7,203,115, 78, 78, 86, 14,118, 54, 69, 69, 5, 19, 51, 51,
+ 65, 65, 65, 22, 22,102, 54, 54,102, 33, 65,142,167,143, 31,224,210,200,242,255, 41, 47, 15,231,183,239,127,174, 92,185,253,236,
+197,199, 71, 79, 62,221,186,247,235,249,139,207,175, 95,127,184,125,235,158,138,178,178,180, 20,223,219,215,143, 6,103, 22,130,
+140,254, 35,139, 0,123, 3, 40,119,187,227,105,219,130,151,163, 97,189, 80,158,188, 14, 4,176, 80,134,119, 22,137, 4,123,247,
+238, 5, 38, 81,130, 87, 51, 34, 95,254,142,124, 33, 48,178,117,184,172,134, 24, 11,185, 59,140,188, 94,209,170, 66,110,228, 86,
+ 63,164,244, 7,182,253,165, 64,205,127,124,193,229,225,225,225,233,233, 9, 25,231,129, 48, 32,108, 15, 24, 24,173, 3,240, 3,
+128, 0, 34,106, 14,128,188,222, 0,217,224,246,109, 80, 55, 2, 88, 7, 72, 75, 75,227,111,147,178,176,176,176, 50,179,178,178,
+ 50,218, 89, 51,124,251,250,243,254, 93, 54, 96,135,128,229, 47,139,133,249,127, 96,173,192,204,204,196,240,159,241,221,123,134,
+211,231, 88, 64, 55,129, 96,171,236,206,157,191,251,229,203, 47, 76,241,142,250,122,118,118,142,239,223, 63,254,253, 71,224, 62,
+225,115,231,206, 97, 10,158, 61,123, 86, 83, 83,147,200,230, 63,114,155,110,243,230,205,112, 53, 52,234, 4,160, 13,245,192, 75,
+127,130, 25,248,253,187, 87, 34,188,140,127,254,254,251,245,251,207,235, 55,239, 88,217, 56,126,254,252,253,251,207,223, 63,127,
+254,253,249,251,255,195,251, 55,184, 52,178,177,126,229,224,148,121,251,246,227,167,207,223,222,189,255,206, 39,172,111,165,167,
+119,234,232, 14,169, 95,127, 62,126,250,168,174,174,204,206,198,242,245,243,187,193,217,252, 7,150, 80,104,151, 41, 2,123, 0,
+ 68,206, 4, 0,107, 14,204, 59, 32,225,199, 74,227, 2,240,203, 21, 50, 50,132,156,157, 17,167,191, 1,115, 4,144,220,180,105,
+211,155, 55,111,136,156,151,218,179,103, 15,164,244,135,168, 95,187,118, 45,174, 82, 24,185,255,135,121, 33, 48, 68, 28,114, 45,
+ 48, 86, 19, 32,199,136, 2, 73, 72,191, 1,171, 7,113,165,103,160,243, 66, 44,247,172,100, 96, 8,239,255,106, 90,249, 5,171,
+ 94,179,112,236, 30, 68, 30,235,199, 53, 31, 48, 90,202, 35,143,252,160,245, 0, 0, 2,136,250,253, 44,180,246, 62, 73,205,127,
+ 72,251, 23, 94, 13, 0, 51, 15,254,126, 0, 51, 51,139,133,217, 63,102, 38,150,211,103, 56,110,222,230,240,118,103,240,241,100,
+240,245, 96,148, 20,103,227, 96, 99, 7, 34, 78, 14,118,105, 73, 32,131, 3,200,198,106, 66,109,117, 77,103,123, 19,102,182, 81,
+ 86,148,231, 23,224,230,248,247,235,203,183,223,180,136,143, 35, 96, 0, 47,244,225, 0,200,125,251,246, 45,176,167, 79,187,198,
+ 62,114,179, 14,194,133,244,196, 9,142, 45,252,253,203,240,245,219,239,175, 95,127,125,250,244,243,229,203,247,207,158,189,249,
+252,249,231,151, 47,191,129, 53,232,215,175,191, 63,126,248,136,115,224,232,231,159, 31, 63,254,254,254,253,139,151,151, 77, 86,
+154,143,139, 27,212,220, 83, 82, 86,144,145,226,227,231,227,248,255,255,239,239, 63,255,126,254,252, 58, 56,155,255, 69, 69, 69,
+ 88, 75,118,130,157, 0,204,187, 36, 33, 0, 40,184,135,184, 83,187,193, 35, 42, 8, 0, 41,124,129,213, 0,176, 76, 39,166,127,
+ 12,108,251,175, 89,179, 6, 94,250, 3,201,144,144, 16, 92,197, 55,208,112,204, 43, 33, 33,109, 2,184, 56,208, 61,132, 14,211,
+254,143, 54,144,139, 60,252,133, 75,143,136,136, 8, 35,172,157, 79,170,222, 81, 64, 82,233,207,128, 49, 7, 0, 16, 64, 68,245,
+ 0,232,214,246,135, 21, 52,127, 33,151, 74, 19,118,152,217, 63, 49, 81,246, 79,159, 88,216, 89,254,176,179, 49, 31, 56,201,230,
+237,200, 10,108,251,127,250,196,122,244, 12, 55, 31, 7,232, 42, 9, 15,151, 95,254,222,255,153,152,254, 47, 88, 75,148,237,192,
+204,201,204,197,241,142, 85,132,235,247,147, 59, 79,255, 59, 57,216,225, 87, 15,108, 77, 31, 59,118, 12, 77,144,224, 53,200,144,
+ 75,189, 23, 44, 88,144,144,144, 0, 17,129,223, 43, 9, 20,193,127,205, 33, 37, 0,210,246,135, 52,211,224, 43,228, 48,135,122,
+177, 2, 65, 33,209,103,247,175, 0,195,249,215,239,127, 63,126, 62,121,252,228,237,187,247,159,222,189,251,246,246,221,119, 32,
+ 18, 16, 82,192,165,241,229,155,255, 47, 94,190,209,212, 84,254,240,254, 61, 43, 11,211,167,207, 79,190,126,248,167,165,242, 85,
+ 92, 84,148,139,139,139,157,157,243,249,139,207,140,204,130,131, 51,243, 96,189,198, 29, 50, 19,128, 95, 35,164,127, 0,191, 75,
+ 18, 94,115, 48,144,114,165, 76, 88, 88, 24,188, 69, 12,185,181, 2, 24,107,193,193,193,192,234, 7,255,102, 31,180,182, 63, 4,
+ 32,247, 39,144, 1,174, 43, 33, 33,226,192,212, 2,185,123, 29, 34,254, 24,155,189, 64, 53, 89, 89,153,144,219,117,192,213,198,
+127, 72,145, 14,212, 5,113, 63,158,154, 3,168,119,170,163, 96,248,132,111,104, 99, 65, 64, 17,136,222, 36, 71,214,209, 66,156,
+ 18,144, 86,222, 1,103,207,234,172, 0,214, 1,240,126, 0, 64, 0,177,208,162,232, 7,182,250, 33,179,193, 36, 53,255,145,218,
+245,204,200, 99,124,120,238, 17, 19, 17, 97,102, 98,100, 22, 21, 97, 86, 85,254,255,236, 25, 11, 19, 51, 35, 43, 11, 11, 43, 11,
+235,165,203,220, 66,220,172, 64,115,172,205,255,114,114,178,255,251,247,159,225,255, 95, 98,172, 6,102, 27, 30,113,217,151, 95,
+254,127,189,115,128,133,145,185,180,190,154,152, 44,250, 24, 12,144,221,140,103,252,135, 1,188,222, 31, 82,220, 67, 74,127, 96,
+123, 31, 88, 19, 64,164, 62,125,250, 4, 44,253,183,108,217, 66,204,133,242,228, 1,200,197, 79,192, 32,133, 76, 81, 18,211,246,
+135, 0,125, 93,227,235, 87,206,254,127,250,233,219,247,223,239,217,127,252,103,120,255,227,199, 31, 96,111,224,213,155,111,207,
+158,127,177,117,148,199,165,241,251, 47,145,123,247, 95, 43, 41,202, 41, 42,202,188,125,251, 70, 80,224,175,170, 42,191,152,168,
+ 18, 7, 39,231,135, 15, 95,206,158,187,241,228,233, 39, 9, 25,237,193,147, 97,254,131,111,187,132, 20,188,240,242, 23,235, 90,
+126, 44,163, 21, 72, 43, 24,129,157, 0,248, 93,146, 16,208,215,215,183,107,215, 46, 92,122, 33, 49,146,158, 46, 8,179,238, 63,
+114,145, 13,169, 0,128,173,120, 60,227, 63, 72,195, 71,123, 73,186,221, 8,215,149,144, 16,113, 72,241,141,171, 16,135, 44, 49,
+154, 54,109, 58,100,134,195,192, 64, 31, 62,112, 15,107,209,227,188,105, 0,162,151, 41,236, 61, 68,111,168,147, 2, 60, 96,194,
+250,175, 49, 48, 48,224,111,253, 3,243, 26,124,129,147,167,167, 39, 60,118, 70, 71,126,136, 4, 0, 1,196, 50, 72, 90,253, 16,
+ 16, 17, 17, 65,146,122, 96, 3,159,153, 25,132, 52,213,152, 12,117,255,178,179,113,128, 42, 0, 86, 86, 43,115, 6,118,118, 6,
+ 86,102,118, 17, 17, 14,102,230,175,127,255,254,251,247,143,168,145,156,111,239, 94,112,200,104,220,223,179, 68,148,133, 41,182,
+186,138, 24, 45,156,156,156, 85, 85, 85, 36, 45, 3,133,220, 62,159,147,147, 3,225, 66,218,251,192,162,255,219,183,111, 73, 73,
+ 73, 64,246,180,105,211,104,183, 10, 8,114,249, 31,252, 14, 85,146, 86,149,200,200,171,159, 57,177, 83, 76, 4,216,112,103, 1,
+143,237,252,253,244,249,215,187,247,223,101, 21,181,109,172,236,113,233,242,242, 10,222,181,125,254,137, 83, 87,109,173,245,229,
+229,229,127,255,250, 97,104,160,199,205,207,255,240,222,163,167,207, 62, 28, 61,126,253,253,103,254, 64, 75,251,193,147, 43, 50,
+ 51, 32, 3, 44,140,153,192, 2, 17, 92,160,255, 67, 42,247,153,152, 24,241, 92,176, 14,186,156,253, 63,188, 0,100, 4,166, 60,
+120, 39, 0,200, 0,150, 86, 30, 30,238,176, 74,134,193, 59,186, 22,115,172, 3, 87,169, 13,148,197, 95,250, 35, 3,160, 74, 92,
+237,125, 60,169, 2,243, 74, 72,184, 56,158,203,194,224, 53, 7,176,252, 5, 55,255, 25,145,235, 15,252,246, 34,235, 93, 85,200,
+ 3, 10, 23, 14,113,136,212,170,194, 71,144,202, 96,231,197,223,184, 2, 4,121,220,127,116, 14,128, 12, 0, 16, 64,216, 43, 0,
+ 43,107, 51, 10,199,221,200,107,251,195,163,141, 72,240,238, 61,163,164, 56, 19,228,224,135, 93,123, 65, 3,253,236,236, 28,236,
+108,236,190,158,140, 64,138,147,131,241,221, 91,230, 83,103,121,255,254,251, 43, 43, 67,120,136, 25,216,252,255,240,237,251,251,
+ 51,219, 84,101, 89,175, 60, 37, 97, 72, 26, 88, 15,153,129, 1,241, 90,192, 23,202,119, 66, 70,123,128,189, 1,115,115,115, 96,
+107,209,223,223, 31,200,142,141,141,165, 93,243, 31, 62, 16, 4,105,205, 17, 51,242,131, 18,173,224, 82,254,214,141,107,207,238,
+ 61, 4,150,131,127,255,254,231,224, 20, 82,211,212, 9, 12, 32,112, 41,152,152,180,222,137, 83, 59,128, 61, 6, 93, 29, 37,105,
+ 41,145, 71,143, 95,190,191,124,247,230,173, 71,123,247, 93,122,248,244,127, 74,106,238,160,202, 21,255, 86, 10, 18, 47,235,187,
+ 9,175,222,187,243,225,157, 0,208,168,209,189, 5,200, 10,208,244, 98,237, 16, 32,151,149, 36,249,130,212, 44,140,235, 74, 72,
+ 98,174,138,132, 23,244,104,202,136,105, 94,252,123,184,118,205,132, 56, 80,247,197, 73, 14, 94,250,131,184, 94,166,224,209,210,
+ 11,184, 42,128,209,125, 0, 68,130, 89,157, 21,200,163, 64,200, 0, 32,128, 88,168,146,116,168, 2,200,104,243,158, 57,199,206,
+193,198,230,235, 5,172, 1, 24,205, 76,254, 92,190,194,201, 4,190, 66,250,195, 7, 38, 41, 9,102, 38, 70,182,139,151,217, 56,
+216, 25,126,253,254,245,240, 17, 39,193,210,255,238,173,243,230,206, 62, 44, 34,230,119,111,157, 98,121,177,166,172,180,178,171,
+187,157, 70,158, 69,190, 80, 94, 71, 71,231,253,251,247, 64, 54,144,204,203,203,163,207, 46, 48, 82,139,126,228, 58, 0,136, 46,
+ 92, 62,251,242,197, 75,110,110,110, 60, 13,127,148,130, 64,207, 24,136,150, 46,153,121,237,230, 73, 73,113, 30, 14, 14,214, 47,
+ 95,126, 61,125,254,137,145, 69, 54, 37, 53,110, 56,103,190,115,197, 12,202,137,136,133,164,103,139,104, 87,130,131, 71,105,132,
+ 96,213, 6, 57,133, 35,174,242,154, 96, 57, 78,222, 93,146,112,111,134, 90,178,131, 28,252,253, 57, 8,141, 2,234, 1,159,152,
+ 90,200,172, 47,176, 14, 64, 22,132,179, 1, 2, 8,189, 2,160,228,184, 30, 90, 28,245, 67, 56,245, 48, 48,190,127,207,200, 37,
+193, 40, 44,196,104, 98,244,155,131,141,153,157,237,183,176, 16, 7, 56, 15, 48, 90,152,252, 61,117,142, 21,212, 69,192,155,151,
+128,165,191,182, 58, 95,113,126,211,119, 54,153,117,123,158, 42,171,129,218,242, 60,167,183, 20,151, 84,246,246,208,176, 14,128,
+ 92, 40, 15,108,242,195,187, 5, 67,229,154, 83,208,158, 47, 93,146,117, 69,199,164, 31, 57,118,240,245,219,215,223, 95,124,227,
+224, 16,150, 81,212, 35,178,254, 24, 12,224,255,255,127, 12,228, 29,103,114,111, 1,116, 57,208,189,133,180,118, 36, 73,195, 62,
+131, 4,184,249,132, 19,108,203,227,234, 92,143,206, 1, 16, 95, 7, 96,150,254, 64, 0, 16, 64, 67,254, 62,128,255, 12,160, 21,
+ 62,140, 76,192,152,255, 47, 36,240,255,224, 17, 22, 14,208,246, 95, 22, 63, 47, 96, 98,248, 39, 40,252,231,207, 95,198,127,255,
+254,130,115, 47, 78,160,167,240,197, 59, 56,244, 11,139,170, 24, 15,119, 84,160,208,178,245,151, 33,117,192,239,191,235,104,237,
+126, 50, 46,148, 31,210, 96, 72,148,248,179,222,119,164, 9, 86,160, 8,173, 22, 34, 95, 47,176,213, 79, 74,195,127,164,129,144,
+236, 41,116, 27, 51, 24,177,117, 0, 46, 41,128, 0, 26,189, 20,126,200,128,209, 11, 97, 70,193, 40, 24, 5,212, 5, 0, 1, 52,
+122, 35,216,144, 1,163,165,249, 40, 24, 5,163,128,186, 0, 32,128, 70, 79, 92, 26, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,
+180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,180, 2, 24, 5,163, 96, 20,140,130, 17, 10, 0, 2,104,224, 47,133,183,
+ 55,147,198,165,242,235,187, 23, 16, 6,183,144, 4,132,113,240,212, 83,100, 5, 63, 69,197,113,233,221,221, 15,221,103,235, 90,
+ 8, 93, 99,192,254,250, 37,145,246, 98, 2,226,237,197, 4,104,246,154, 24, 74,225, 82,249,230,254, 85, 8, 67, 68, 17,122, 46,
+194,153,243,207,168,229, 95,143,221,216, 15,160,231,151,146,138,133, 29, 5, 60, 69, 28,106,254, 14,215, 52,106,197, 47,178,222,
+155, 55,111, 34,159,143, 86, 88, 88,168,174,174, 78,163,116, 53,170,151, 42,122, 47, 95,190, 12, 97,232,234,234,146,170, 23,243,
+138,167,209,112, 30, 16,189,120, 0, 64, 0, 97,159, 4,254,243,231,207,143, 31, 63, 24,153, 65,151,106,253,253,243,155,141,149,
+133,157,157,157,212,186, 5,104, 8, 3,248,196,102,146,116, 1, 11,125, 96,113, 15, 41,250, 37,100, 21,128,228, 11,220, 7,205,
+ 99, 22,130,192,226, 15, 82, 20, 78,221,116, 10, 72,102,251,153, 49, 12,110, 0, 44,244,129,197, 61,164,232,215, 54,177, 6,146,
+ 87,207, 28,165,181,127, 55,127,249,178,243,235, 87,119,110,110, 32,201,240,242,229,169,242, 50,160,160, 89,103, 23, 77,125,122,
+224,192,129, 21, 43, 86, 0,211, 21, 92,132,131,131, 35, 34, 34,194,193,193, 97,180, 33, 54,168, 0,176,208, 7, 22,247,144,162,
+159,212, 52, 9, 57,185, 11, 82,244,147,148, 38,145,207, 55, 37,111,125, 39, 25, 87, 10,142, 2,128, 0,194, 82, 58,127,250,252,
+ 69, 82,205,212, 94, 87,131,139,157,245,255,255,255,127,255,254,191,114,251,225,253, 75,135, 57,217, 89,137, 60,164, 19, 8,120,
+ 56, 30,104,171,222,187,114, 75,233,235, 79, 5,226,139,126, 32,201,201, 47, 12,100, 64,138,126,172,189, 1, 60,237, 95,179,232,
+ 10, 32, 3,146,236, 48,101,177, 46,120, 69, 54,150,141,141,141, 1,188,191, 28,116,121, 0,248, 80, 82,136,123,152,152, 89,241,
+ 55,186,129, 64, 82, 12,212,118,254,245,233,195, 79,112,181,247,229,207, 95,136,123,248,197,100,240,183,247,249,165,148,129, 12,
+ 72, 54,195,214, 27, 16,164,174,127,129, 32,231, 37,168,103, 0, 41,253, 33, 69, 63,168,109,190,107, 55,178,172, 15,222,152,250,
+200,253,230, 45,207,235, 15,111,239,136, 9,104,202,188, 81, 33, 38,114,129,109,255,149, 43, 87, 34,151,254, 64, 0,228,114,114,
+114, 74, 74, 74,162,245, 3,134, 55,216,179,103, 15, 73,183, 76,227, 57, 12,145, 22, 69, 63, 36, 77, 2, 25,152,105, 18,214, 27,
+ 16,196, 83,254, 2,211, 36,144,129,153, 38, 33,178,184,210, 36, 80,246,208,241, 83,204,204, 44,127,255,254,249,248,249, 75, 84,
+176,127, 79, 79, 15,121,165, 63,157, 67,108,144,131, 45,216,214,142, 35,199, 2, 64, 0,161, 87, 0, 95,191,255,114,246,139,146,
+ 21,227,231,226, 0, 93,162,242,247, 31, 3, 11, 51,163, 16,191,134,182,170,220,158,157, 91,255,254,254, 74, 76, 29,240,235,215,
+ 47, 77,237,251,250, 26,247,153,153,254, 30, 56, 35,205,198, 74,248, 52, 87, 96, 65, 12, 44,106,249,249, 64,247, 47, 66, 72, 52,
+ 89, 96,149,128,171, 43, 0, 44,239,128,201, 46, 62, 60, 8,200,134,144,104,178,192,228, 72,176, 25, 2,244,151,140,140, 12,144,
+ 4, 58,254,235,215,175,192,210, 31,114, 98, 51, 81,181, 29, 11,243,188, 9,235,217,249, 25, 94, 62, 96, 56,253,229,233,235, 23,
+119, 22,247, 87, 18,108,248, 3,179,153,140, 20,104,104, 11, 66, 98, 29, 11, 34,207,191,120,206, 1, 0,150,239,192,162,191, 57,
+ 39, 27,200,110,134, 21,253, 75,110,221, 66,148,254,132, 14, 17,120,240,255, 48,131,217,211, 8,185,152,159,255, 84,216,255,253,
+191,254,102,239,249,221, 55, 85,254,101,225,247,111,127,127,255,247,239,223,145,143,191,134,176,129,130,192,126, 0,169,167,220,
+ 92,191,126,125,226,196,137,180,188,223,156,134,165,255,170, 85,171,222,191,119, 93,189, 58,148, 24,245,144,211,249,233, 83,162,
+ 1,203,119, 96,154,188,117,254, 24,176,232, 71, 78,147,251,182,174, 19, 23, 23,135,143, 5,225, 42,127,241,164, 73, 80,233, 12,
+ 63, 94, 21, 3, 0,227,241,197,171, 55,231,175, 92,131, 53, 11,126,118, 77,158,149,158, 16, 57, 90,136,211, 1, 0, 4, 16,202,
+ 36,240,231,207,159,109,220, 2, 53,228,132,217, 89,153,128,165,255,139, 23, 47, 46, 95, 60,255,235, 15,144,249, 95,152,159,203,
+205,211,231,251,207, 63,196, 24,202,206,250, 74, 89,238, 5, 3, 51,163,150,234, 99,118,150,151, 36,149,254, 40, 45,205, 79,159,
+129,133, 62, 80, 10,179, 67,128,181, 52, 68, 6, 11, 87,174, 3, 22,250, 64, 41,204,198, 8, 26, 0, 54,252,129,229, 62, 31, 31,
+223,189,123,247,128,133, 62,168,218, 35,186,244, 7, 54,252,129,165,127, 96,110,139,103,148,213,150, 43, 79, 95,124,103, 32,181,
+244, 71, 6, 79,158,189, 0,246,181, 69, 5,249,192, 85, 51, 51, 25,254,245, 8,142, 7,181,208, 88, 88, 9,150,254, 64, 80, 59,
+101, 42, 16, 65, 74,127, 96,111,160,212, 13,220,238, 23,101,195, 87, 30,241,111,115, 11,145, 74,148,207, 98,101,226,225,102,224,
+ 98, 98, 96,150, 22,183,182, 9,118,190, 39,213,143,127,240, 7,228,194,133, 11, 33,229, 62, 26, 9, 87, 64, 12,248,246,237, 27,
+ 65, 17, 26,129,180,180,180,208,208,213, 75,151, 46,165,188,244, 23, 18,218, 67,164,150,153, 96,192,200,200,136,124,101, 35,237,
+ 74,255,214,170,194,213,171, 87,207,153,220,131, 92,250, 3, 69,166, 76,153,130, 39, 77, 34,151,254,152,105,210,211, 26,124,234,
+ 20, 47, 55, 46,189,189,147,167, 67, 74,255, 87,111,222, 2, 17,176, 7,192,202,202, 50,125,193,114, 98, 46,189, 25, 5,196, 0,
+ 96,147, 31, 25, 33, 75, 1, 4, 16,162, 2, 0,150,122,194, 10,122, 10, 18, 2, 63,126,255, 5,214,214, 59,119,238, 88,180,112,
+193,165,139, 23, 75,139, 10,152,153,153,128,125, 1, 62, 46,118, 5, 61, 27, 96,147, 13,191,101,191,127,255,214, 86,125,200,199,
+243,109,222,194, 87, 76,140,255,205,116,111, 2, 69, 8, 58, 17,173,244,135, 20,253,223, 63,190,133, 87, 12, 64, 17, 92,122,209,
+ 82, 30, 36,217,157, 90,218, 1, 79,148, 64, 17, 60, 86, 43, 43, 43, 11, 11, 11,127,250,244, 9, 88, 19, 48, 49, 49, 1, 61, 8,
+ 44,253, 33, 29, 29,130,167,113,173,221,176,190, 96,194,174,245,147,107,128, 53, 1, 23,183,208,227,191, 79,129,165, 63, 15, 56,
+159, 48,227,213,139, 86,250, 67,138,254,143,207,238,106,200,136,125,254,246,131,157,139,157,225,239, 95, 82,253, 91, 57,123,203,
+213,115,199,117,148,180, 62,254,197, 89, 79, 67, 74,127, 96,171, 31, 88,244, 67, 68,128, 69, 63, 16,221, 75,111,220,117,237,146,
+182,153, 18,195, 91,156,145,117,145,109,139,181,131,168, 40,183,230,247,255,159, 25,126,190, 98,251,249,238,231,223,207, 63,254,
+125,255,199,198, 35,109,107,178,230, 66, 27, 46,141,144,161,127,200,181, 86,240,108, 15,103, 3,165,128, 10,136, 73,199,111,222,
+188, 41, 42, 42, 2,182,253,111,220,184, 1,228, 30, 62,124,184,173,173,173,166,166,134, 62,185, 8, 88,112, 83,165,237, 15, 44,
+253,171,170,136, 58,105, 28, 94,232, 35,223,203, 72, 59, 0, 76,147,144,171,131,207,158, 61, 11, 44,247,129,105, 18, 82,250, 51,
+128,111,109, 36, 47, 77,118, 37,248, 92,185,251, 88, 66, 73,146,225, 43,129,122, 26, 88,244,255,254,253, 7, 92,128,252, 1,162,
+199, 15, 31,144,228,120,228,238,194,104,215,129,120, 0, 16, 64,136, 33,160,159, 63,127, 26,106,104,112,113,178, 2,219,251,127,
+255, 49, 28, 61,124,164,177,185,229,223,127,134,219,119,238, 92,186,120, 65, 71, 71,159,153,153, 81, 93, 73,230,222,185, 63,156,
+120, 15,214,100, 99,121,165,166,240,140,129,133,241,241,243,223, 64, 82, 79,227,225,169,203,175,254, 51, 16,187,228, 6, 62,206,
+131,214, 39, 0, 86, 6,224,181, 64, 79,241,232,133,143,243,160,181, 71,128, 9, 17,180, 54,230, 53,246,190,200,159, 63,127,184,
+184,184,128, 69,191,160,160, 32,176, 57,249,245, 43,232, 32,104, 81, 81,209,183,111,223, 18, 60,163,234,199,123, 6, 51, 78,206,
+210,201,135, 93,245, 25, 30,158,103, 56, 13, 22, 4,114, 39, 21, 58,254,253, 71,212, 21, 52,240,233, 53,103, 99, 13, 22, 94,166,
+157, 7,174, 25,106,200,242,241,176, 31, 60,115, 71, 68, 81,251, 1,234, 42, 32, 92,254,221,116,237, 63,195,115, 6, 63,103,198,
+217, 91,238, 9, 11, 42, 6, 89, 51,226,241, 47,100,204,103,231, 87,232,121,215,255, 27,250, 25,164, 63, 50,166,214,255,111,108,
+102, 96,250,206,120,170,109,138,184, 56,214, 83,185,127,104, 60,148, 23,240,250,244,247,203,207,247,119, 22, 63, 90,118,196,239,
+189, 86,138,163, 91, 46, 15,167,160, 58, 7,139, 32,139,223,199,211,235, 78,155,154,152,226,236,108, 50, 49,193,195, 19,153, 77,
+ 60, 16, 17, 17,201,207,207, 63,114,228,200,206,157, 59, 65, 85,215,206,157,154,154,154,129,129,129,244,201, 42, 1, 1,191,168,
+ 85,250,203,203,203, 19, 89,168,193,203,125, 72, 39,128,236, 51, 92,137, 4, 78,222, 65,192,126, 48,176, 2, 0,150,251,198, 96,
+ 6, 3,248,122, 59, 15,123, 19, 72,154,212,213,213,125,128,119,133, 9, 60, 77, 62,223,208,193,171,205,193,163, 90,176,170, 35,
+ 69, 95, 71, 66,221,167, 5,232, 29,172,171, 83,128,109, 59, 14, 14,208, 26, 19, 96,195,255,219,183, 31,100, 59,126,180,220,199,
+ 5,240, 28, 6, 7, 16, 64,136, 10,224,223,191,127, 92,236,108,191,254,252,103, 98,100, 0,162,250,166, 22, 96, 53,240,245,235,
+151, 23, 47,158,139,139, 75,252,255,255,239,207, 31, 6, 14, 86, 22,102, 86,124, 67, 4,192,194, 84, 75,249,137,136,224, 39,208,
+144, 31,248,162, 79, 70,198,255, 70,218,183, 79, 94, 18, 39,102, 57, 16,164,153,143, 57, 28,132,167,249,143,220,232,192, 44,250,
+ 9, 54,255, 33,237, 74, 49, 49, 49,200, 50, 39, 96,103, 5, 50,247,203,207,207,207,202,202,250,248,241, 99,252,211, 23,243,247,
+ 28, 76,241,177,119, 0,179,111,253, 1,141,255, 0, 25, 14,106, 12,124, 45,251, 11, 75,172, 8,186, 25,216,200, 2,146,114, 98,
+ 66,239,127,254,100,225, 99,254,241,250, 27,176,104,148,148,151,217,181,239, 52,145,254,141, 47,110,189,127,116, 47,203, 11,134,
+ 15,226, 12,192, 74,204, 66, 65,209,201, 30,223, 18, 85,228, 17,255, 37,225, 41,107,127,222,100, 80,249,193,112,146,133,129,135,
+133,193,215, 88,198, 55, 30, 95, 87, 73, 90,232,215,175,119,172,127,126, 3, 75,255,227, 9,252,118,129,254, 26, 98,154, 87,118,
+ 29, 48, 12,253,202,250,235,235, 31,141,127,175, 95,226,155,168,135,148,248,144, 57, 0,100, 54, 73, 0, 88,226,115,115,115, 95,
+191,126,157, 11, 12,162,163,163,105, 61,236, 3, 44,181,129, 69,127, 52, 24,208,179,244, 71, 27,243,129, 92,156, 66,135, 50,206,
+ 35, 56, 70, 73, 73, 9, 88, 1, 64, 74,127, 96,219, 95, 92, 82,146,164, 52,153,230,107,119,226,217, 43, 94,125,222,167, 59,239,
+ 50,112,176, 7,231,198, 9,201,248,224, 45, 52,254, 62,125,254, 18, 88,250, 67,122, 0, 64, 64,106,243, 31,115,176,104,180, 50,
+192, 83, 25, 32,215, 1, 0, 1,132, 50, 7,240, 31,178, 6,230, 63, 3,176,232,103, 2,149,221, 12,235,214,174, 9, 12, 10, 17,
+ 17, 21,131,100,218,255,132, 14, 25,103,102,122,165,173, 2,189, 28, 81, 79,135, 11,220,116, 97, 48,210,186, 7, 20, 39,198,113,
+200, 99, 62,104,226,240,173, 0,184, 0,242,152, 15,154, 56,124,105, 60, 86,240,233,211,167,207,159, 63, 3, 59, 64,192, 42,240,
+245,235,215,144,241, 31, 96, 87,224,203,151, 47, 4,135,128,214, 79,174, 57,112,133,225,227, 3,134,223,223, 25, 38,149, 59, 66,
+198,127,206,157,103,184,240,252, 40, 49,235,165, 62, 62,187, 43,196,207, 45, 44,196,173,174,166,121,239,254,235, 91, 79,223,202,
+ 9,243,255,124,249,234,207,239, 63,240,173, 0,120,252,107,229,224,111,227, 24,185,126,243,170,253,135, 86, 45,235, 43, 14, 46,
+110,187,244,155,225,245,219, 87,120,252, 11, 31,241, 79,180, 50,143,214,146, 95,181,126,223,165, 75, 15,250, 46,159, 93,225, 26,
+199, 48,247,216,211,167,175,225, 91, 1,176, 12, 17,252, 96,255,251,235,205,175, 95,160,203,223,197,165,101, 53, 52, 53, 63,113,
+130,102, 74,190,255,251,198,244,243, 43,231, 87,230,151,207,177, 87, 0,144, 96,252, 1, 6,240, 97, 31,180, 21, 65, 68, 2, 96,
+188, 44, 89,178, 4, 88, 13, 20, 20, 20, 0,107,110, 72, 87, 96,208, 14,251,144, 93,250, 35, 55,255, 33,115, 15,240, 78, 0,173,
+ 11, 8, 96,154, 68, 19,129,167, 73,248, 86, 0, 60,105,210,214, 84,221,197, 90,173,181,169,167,119,194,182,186, 37,251, 50,156,
+ 76, 94,108,220,246,241,253, 39, 92, 37, 50, 80, 60,212,207, 3, 50,236, 3,175, 0,128,160,173,190,146,248, 66,124,180,184,199,
+ 15,208, 70,255,145, 59, 4, 0, 1,196,132,220, 67,255,248,229, 27, 51, 19, 35,176, 66,254,247,255,255,159,127,160, 73,251,139,
+ 23,206, 59, 57,131,110,176,251,251,255, 63, 51, 19,243,231,111,191,254,252,250,137,179, 38,255,251, 87, 81,250,185,168,208, 71,
+ 72,101, 98,101,198, 3,185, 92, 21,216, 9, 48,212,188,243,231,239, 95, 98,154,255, 88,167,130,137,109, 14, 99,155,134, 34,168,
+ 87, 80, 80, 16, 88,238, 3,123, 0,192,106, 64, 84, 84, 20, 50, 33, 12, 44,158, 62,124,248, 64,176, 2, 72,107, 93, 1, 44,247,
+249, 21, 24,128,213, 64, 94,231,126, 96,233, 31,148,223,254,228,223,139,165,125,101,192,144, 36,166,249,111,108,172, 38,170,164,
+ 32, 38, 42,194, 6, 12,121,198,255,175,191,126,127,255,249, 7,145,254,237,237,216, 16,160,169,200,199, 39,204, 37, 42,245,251,
+221,251,243, 91,150,127,120,247,136,200, 52, 49,175, 35,135,161,208,133,229,207, 47,133,175, 12,175,152, 63, 77,122,126,154,129,
+141,143,192,120,215,221, 79,111,152,190, 63, 98,251,102,162,226,168, 21,199,115, 79,240,128,168,232,121, 89,139,123, 31,153, 62,
+255,252,255,253,219,146,127, 28, 60,188,120,218,254, 84, 1, 15, 31, 62, 4,146,192,198,184,136,136, 72, 96, 96, 32,164,149, 74,
+ 59,144,158, 46,136, 57,242, 67,252,108, 48,217,165, 63,114, 65, 15,175,132, 32, 55,182,211,212,191,192, 52,121,252,248,113,200,
+184,191,177,177, 49, 3,248, 34,226,149,155,182, 17,159, 38, 55,174,111,112, 47,207,245,242,114, 22, 97,103,254,204,248,127,231,
+173,199,199,175, 60, 37, 88,124,103, 38, 68,222,187,115, 7,216,240,135, 32, 96,233,143,181, 93, 63, 10,200, 43,250,113,141,255,
+ 0, 1, 64, 0, 33,134,101,128, 37,224,237,107,151, 20,164,132, 56, 89, 89,254,254,253, 7,190,162,153, 33, 45, 61, 27,216, 37,
+248, 11,222, 13,240,237,199,143,235,183,238,177,177,225, 28, 20,249,243,251,157,161,214,125,120,166,207, 42,188,191,118,137, 42,
+164,207, 96,162,115,247,196, 69, 77, 22,102, 81,130,205,127,180,162, 31, 40,200,128,180, 19, 24,127,243, 31, 45, 57, 2, 5, 25,
+144,118,198,226, 2,127,255,254,149,144,144, 0,246, 0, 94,190,124, 9,100, 3, 75,150,183,111,223, 2, 73,200, 45,213,248,245,
+190,126,113,167,166,101, 63,176, 7,208, 93,108,251,229,207,223,162,206,213, 19,203, 67,139,251,182,176,128,238,160, 33,220,212,
+146, 20, 17, 96,101, 96,253,203,192,248,252,254,213,135,175, 62, 42,139, 10, 93,124,247,236,220,221,167,196, 52,255,131,147,138,
+ 88,133, 24,152,152, 25, 22,108,187,191,118, 90,105, 82,199,204, 34, 95,253,108,103,121,130,254, 5, 54,255,123,253,194, 24, 62,
+112, 48, 48,178, 50,244,246,132,156, 62,188,203, 57,147,177, 61,151,241, 68, 25,158,230, 63, 16, 92,124, 33, 98,243,253,227, 23,
+ 78,230,111, 28, 28,202,193,172,192, 66,255, 35, 19,235, 31, 6,181,255,127,191,253,126,243,252,232,228,143,209, 81,202, 52, 74,
+199,240,193,104, 77, 48,128, 8,218,130, 1, 77,243, 15,214, 5,251, 68,118, 11,200, 46,253, 25, 80, 71,255,209, 22,140,210,116,
+ 38,224,214,249, 99,240,160,206, 74, 10,219, 1, 27, 11,218,174,164, 68,112,239, 2, 48, 77,134,187,152,243,255, 19,252,198,192,
+186,182, 63,119,218,150, 11,165, 30, 54, 9,125,203, 66,218, 22, 19,172,183,224,123,199,208,184,163, 43,250,105, 13, 0, 2, 8,
+209, 3, 0,182,124, 63, 60,191,115,247,241, 91, 22, 86,102, 96, 31,224,247,159,191,231,206,157, 93,180,104,254,175,191,255,127,
+255,253,199,198,194,244,234,253,151,167,215,143,115,226,152, 2, 6, 22,157,154,202, 15,161,205,127,112,191,127,237, 18, 53,208,
+ 0, 16,211,127, 32, 98, 98,250,103,161,127,253, 47,238, 78, 0, 90,243, 31,190, 10, 8, 88,244, 19, 44,253,209,154,255,240, 21,
+ 8,192,162,144, 96,105, 8,206,207,239,191,124,249,194,202,202, 10,105,254,255,251,247, 15, 66, 18, 83, 1, 44,238,175, 60,247,
+244, 32,143, 4,104,226,151,151,133, 25, 88, 31,240,177,179,126,120,247, 4,216,252,103, 97, 98, 34,216,252,151, 21,226,189,118,
+239,254,159, 95,191,216, 89,216,190,124,249,113,241,254, 51, 96,209, 79,176,244,135,248,215, 63,167,121,233,164,137,223,254, 49,
+200, 42,203, 92,185,122, 2, 88,250, 19,233, 95, 32, 40, 82, 54,217,124,123, 31,195,199, 63, 12, 28, 34,187, 79, 93, 3,150,254,
+192,162, 31,127,233, 15, 4,250,191,124,142,238, 62,197,240,235,243, 23,198,207,239,153,190,124,100,249,253,251,239, 39,246, 31,
+223, 56,158,221, 95, 81,117, 91,193, 64, 13,207, 12, 48, 16,192, 83, 14, 7, 24,160, 9,226, 7,179,193, 96, 0,243, 9,164,213,
+ 15, 44,211, 25,192,179,193, 4, 39,132, 41, 41,253,129, 69,252,127,220, 75,230,105,183, 28, 8,152, 38,225,107,126,106,106, 11,
+129,105, 82, 92, 92, 28,178, 46, 8, 34, 78, 48, 77,166, 56,232, 21,244, 76,252,252,242,149, 40,159,216,213,107,143,128,165, 63,
+100, 25, 43,145,117, 30, 28, 32,143,234,140,246, 3, 40, 1, 91,150, 52,111,193,123,143, 8, 64, 0,161, 76,204,242,242,242,158,
+ 61,176,225,255,127, 63, 5, 41, 97, 94, 46,118, 45, 29, 3, 45,109,125, 22, 38,134, 47,223,255, 62,122,254,238,212,129,173, 60,
+220, 92,184, 12,250,250,237,155,154,252,243, 31, 63, 57,254, 67,174,205,251,207,192,201,241, 3,152,140,223,125, 96, 7, 10,240,
+114,255,209, 85,123,112,248,140, 33,208, 10,252,205,127,120,171, 31,200,101,253,255,155,225, 15,116,245,216, 95, 22, 46,130,205,
+127,120,171, 31,194,253,248, 10,186,228, 0,207,118, 92,120, 29, 0, 36,129,253, 0, 32,249,238,221, 59, 62, 62, 62,200,248, 15,
+ 49,151,178,130, 87,253,183,103,134,218, 51, 76, 58, 60,173,218, 59,164,120,226,178,142,108, 96, 15,128,141,157,131, 96,243,255,
+218,163, 87, 42,178, 34,123,247,156, 96, 0,111,191, 4,146,191,127, 66,251,218,172,184,181, 67,154,255, 45, 73,206,121,245, 11,
+100,149, 24, 73,242, 47,164,249,239,182,126,222,174,232, 72, 70, 25, 11, 6,240,150, 96, 6,240,225, 16, 16, 5,190, 60, 60,120,
+156,173,247,179,236,226,246, 45, 63,212,143, 41,168,234,124,226,100,184,207,240,240,243,131,215,175,219,254,126,121, 47, 83, 24,
+ 87,140, 63,160,166, 79,159, 14, 44,238,191,127,255, 14, 47,194,128, 92,160,224,144,200, 72,144, 86,255, 75,240, 54,105, 98,102,
+131,129,237,101,242, 74,127, 6,216,229,239,120, 10, 62, 82,247, 18, 19, 9,128,105,178,181,161,102,221,230,237,238, 54, 70,240,
+ 52, 9, 68,198,247,238,121, 4,199, 60,122,251, 77, 78,152, 11,127,243,191, 96,214,230,170,100, 55, 41, 9, 7, 72, 45, 2,113,
+ 42,158,190, 20,145,221,130,209,126, 0, 21,235, 3, 52, 17,128, 0, 66, 95,153,195,199,203,115,238,192,134,251, 50,234, 74,170,
+154,124,220,156,255,254, 51,124,255,249,235,222,189,123,175,239, 93,224,229,225,102,194,221,170,229,228,224, 88,181,195, 30, 79,
+ 27, 31,168,151,155,155, 64,115, 15,178, 6, 20,216,228,255,247,247, 55,168,244, 7,131,223,140,172,184, 14, 99, 64, 6,144,245,
+103,192, 38, 48,188, 28, 36,178,244,135,215, 1,240,205, 95,192, 58, 0,103, 0,225,168, 3, 22,195, 54, 66,205,110,131,237,137,
+253,253, 69, 17,175, 46, 96,243,255,212,155, 15, 23,110,131, 6,124,224,229, 62,193,210, 31, 2,128,205,255,181, 70,220, 57,129,
+ 26,100,248, 23,216,252, 47,222,180,138,177,181,126,187,184,249,132, 47, 87,224,226,134, 44,172, 50, 28,132, 79,124, 2,246, 3,
+182,111,250,241,228,253,221,215,111,159,191,188,197,195,252,151,207, 90,207,214, 49,206,145,166, 9,119,192, 55,253,146,177, 6,
+ 52, 61, 93,144,140,210,159, 97, 64,167, 52,129,105,210,210,210, 18, 45, 77, 2, 75,127, 6,208, 84, 48, 23,126,189,192,230,191,
+235,158,147,209,245,139,236,236,236,196, 81,123,147,100, 87, 87,144, 58,128, 96,128, 96, 86,150,163,117, 6,158,114, 31,121, 38,
+ 0, 32,128,176,148,111,192,246,239,207,119,143,207, 29, 0, 45, 23,129, 92,184,204,206,206,142, 57, 55,139, 6, 88, 89, 89,249,
+137, 56,242, 1, 15,128, 12,248, 48, 3,155,252,127,190, 49, 35, 21,253,196,156, 88, 13, 25,240, 1, 22,133,200,165, 33, 49, 69,
+ 63,191,168,212, 47,220,211,218,248, 65,116,243,226,219, 55,174,146,237,223, 83,183, 30, 67,178, 25,114,233, 79,176,232,135,128,
+ 56, 35,110,242,252, 11,138,211,254, 50, 72,209, 15, 47,253,137, 44,250,225,192, 83, 49,132, 1, 82,185, 17,183, 70, 6, 88,124,
+ 67, 54,253, 2,219,251,240,221,191, 64, 6,164,249, 15,100, 12,254, 67, 29,200, 88, 3, 74,139, 70, 58,173, 1,214, 52, 73,176,
+232,135, 0,215,154,217, 84, 44,250, 73,170, 14, 71,203,122, 92, 0,237, 70,120, 6,140,121, 96,128, 0,194,222,192,101, 97, 97,
+193, 53, 86, 67, 11, 0, 25,229,135, 20,253, 12, 36, 22,253,144, 81,111,242,138, 66, 6,208,202,165,127,196,116, 47,176,130, 87,
+239, 62, 18,111, 17, 50,128,140,242,147, 87,244, 83,226, 95,200, 40,255,230, 47, 95,200, 46,250, 71,193,112, 5,144, 37,158,143,
+222,126, 35,163,232,135,148,191,240,209,158,161, 91,255, 13,215, 58, 0,143, 44, 64, 0,141, 94, 10, 63, 10, 70,193, 40, 24, 5,
+ 35, 20, 0, 4,208,232,141, 96,163, 96, 20,140,130, 81, 48, 66, 1, 64, 0,141, 86, 0,163, 96, 20,140,130, 81, 48, 66, 1, 64,
+ 0,141, 86, 0,163, 96, 20,140,130, 81, 48, 66, 1, 64, 0,141, 86, 0,163, 96, 20,140,130, 81, 48, 66, 1, 64, 0, 13,252,165,
+240, 35, 77,239,143, 23,143,137,215,203, 33, 33, 59, 26,206,163,122, 71,245,142,234,165,209,165,240, 0, 1, 52,168,123, 0,164,
+238, 2,191,119,239,222, 30, 24, 0,178, 71,171,119, 60,224,227,199,143,143, 30, 61, 58,126,252,248,185,115,231,128, 12,242, 12,
+161,226, 41,111,163, 96,144,131,155, 55,111,146,164, 56, 35, 35,131,108,139,200,214, 59, 10, 72, 5, 0, 1,196, 50,104, 93, 70,
+106, 9, 14, 84,223,209,209, 17, 22, 22,134,172, 93, 73, 73,137,120,237, 64,176,122,245,234,208,208, 80, 37, 48,192,175, 62, 45,
+ 45,141,160,153, 64,199, 96, 93, 13,189,123,247,124, 98,244,190,127,207, 77,163,176,125,245,234,213,207,159, 63, 25, 25, 25, 57,
+ 56, 56,126,252,248, 1,172, 0, 78,159, 62,173,175,175,175,162,162, 66,146, 57,196, 28,149, 1,174,200, 51,137, 81, 54,115,230,
+116,106,235, 77,199,161, 24,253,232, 49,130,233,138,161,158,145,177, 9,163,242,171,103, 12,187, 30,202,192,174, 65,208,121,238,
+238,160, 35,117,201, 59,188, 26,114, 22,116,122,186, 32, 37, 43,235,129,165,106,127,127, 63,193, 13,119,169,169,105, 64,111, 97,
+198,106, 73, 73, 49, 49,218,225,169, 98,194,132, 9,246,246,246,192,114,124,217,178,101,159, 62,125, 34,104, 41, 74,145,196,194,
+ 28, 97,197,150,158,145,222,181,163,187,196,181, 4, 34, 56,123,246, 44,172,122, 99, 98, 64,187,148,185,185,177,228, 20,200,205,
+ 78, 9, 9, 9,163, 59, 18,144, 1,100, 95, 24,124,245, 63, 64, 0, 97,175, 0, 48, 15, 27,161,209,241, 35, 84,172, 0,224,165,
+ 63,208,157,144, 61, 41, 64, 19,136,172, 0, 32,153, 28, 82,156, 65,206,189, 42, 47, 47, 39,172,119,181, 16, 33,131,113,134,216,
+ 87, 95, 2,183,168, 51, 16,113, 72, 26,121,247, 96, 0,219,254, 98, 98,208, 11, 30, 56, 57, 57,129,149,193,135, 15, 31,248,249,
+249, 79,157, 2, 93,158, 76, 76, 29, 0, 12, 94, 72, 40, 1, 67, 44, 56, 56, 24, 24,224, 4,107,130, 77,155, 54, 64, 24,126,126,
+ 1,184,216,184,244,126, 63,150, 3, 13, 18,171, 41,112, 54, 50, 23,200,192,165,119,199, 14,148,203,205, 14, 29, 58,212,214,214,
+134, 28, 80, 75,150, 44,193,159, 48, 58, 59, 59, 59,216, 59,193, 5,113, 40, 74, 22,168,103, 36, 53, 73,211, 63, 19, 33,151,254,
+ 64, 47, 3, 99,124,233,210,165, 71,142, 28,241,138,170,198,165,248, 24,198, 21,218,235, 87,131, 74,255,127,255,254,205,154, 53,
+ 11,168,157, 79,206, 30,107,161, 15,239, 14,222,184,113, 3,200,141,140,140, 4,178,163,162,162,136,169, 54,122,118, 67,111, 33,
+126,177,243, 57, 80,239,178,124, 46,160,145,229, 30,101, 12,224,216, 91,190,112, 89,134, 61,190, 62,129,177,177, 49,241, 77,189,
+209,210, 31, 25, 0, 4, 16, 19,214, 98, 5,152,189,129,145,141,150,225,137, 28,144,161,100,236, 5, 89, 47,164, 49, 78,188, 94,
+160,131, 93,192, 0, 82, 7,144,148, 32, 32,165, 63,208, 58,208,245, 20, 96, 75,137,244, 5, 99,216,123, 8,194, 35,130, 11,240,
+108,153, 14, 65,120, 68, 8,150,254,255,193,128,248,209,152,247,239,223, 3,203,122, 96, 5,144,148,148, 20, 29, 29,205,198,198,
+ 6,172, 3,128,253, 0,160,247,153,153,153, 9, 30,175,127,237,218, 53,160,189,107,214,172,129, 4, 23,208,210,181,107,215, 2,
+ 27,122, 64,113, 58, 39,101,180,202,128, 70, 77, 16, 96,233, 15, 76, 18,225, 55,194, 64, 45,125,212,192,175,248, 89,142,214, 39,
+192, 5,128,225, 83, 90, 90,170,168,168, 72,134, 27,128,122,129,109,127, 97,225,189,148,183,253,225,165, 63, 73,218,225,165,127,
+113,113, 49, 30,237,200,201, 15,216,252,183,179,179, 3, 50,128,117, 0,176, 31, 64,176,220, 64,211, 27,110, 9,106,149, 46,203,
+231, 4,246, 3,202,220, 75,241,235, 5,182,253,129,118, 1,187,227, 46, 24, 0, 34, 53,218,252,199, 83,250, 3, 1, 64, 0, 49,
+ 97,235,114, 66, 47,134,134,180,163,225,205, 61, 98,138, 99, 72,158,161, 36,191,145, 55,128,131,181, 76, 39, 85, 11,188,242, 0,
+ 54,255, 9,158,127, 59,176, 0, 94,250, 3,201,167, 79,161, 23,110, 60,121,242, 4,127,102, 3,182,253,191,125,251,198,196,196,
+ 4,244, 35,144,253,236,217, 51, 86, 86, 86, 22, 48, 0, 50, 32, 71,117,162,109,232, 71,203,168, 19, 39, 78, 4, 22,253, 33, 33,
+ 33,192, 2, 5,104, 8,176,112, 4,178,129, 82,147, 38, 77, 26,102,185, 5, 94,250, 3,217,192,178, 27,222,182,128, 4, 62,188,
+131, 72,100,249, 2, 84, 6, 12, 49, 96,162, 34,111,214,164,178,178, 18,168, 23, 79,212,224, 41,253,251,250,250,128, 81, 6,172,
+ 72,128,197,247,225,195,135, 25,192, 39, 50, 17, 95,250, 67,180, 3,211,204,153, 51,103, 32,218, 9,218, 8, 84, 31, 17, 17, 1,
+225, 2,235, 0, 7, 7, 7,160,237, 27, 55,110, 36, 56,144, 8,108,254, 51, 48, 50, 44,205,131,158, 63, 1,236, 7, 68, 90,179,
+131,250, 1,120, 1,158, 82, 98,180, 91,128, 86,250,167,149,163,151,138, 0, 1,196,130, 53,177,194, 47,134,190,135,116, 49, 52,
+193,180, 78,173,210,159, 42, 21, 0, 37, 0, 88,121,144,237, 17,186, 1, 96, 81, 2, 44,250, 95,188,128,222,194,136,204,198, 5,
+ 94,191,126, 13,204,201,192,150,254,157, 59,119,128,218,129,121,245,215,175, 95,192,236, 7,172, 0,128,228,223,191,127,129,213,
+195,250,245,235,113, 69,244,222,189,160,118, 40,176,196, 71, 86, 0, 97, 67,138, 39, 60, 41, 4,121,132, 7, 23, 27, 79, 99, 31,
+215, 88, 16,158,193, 31,180,145, 31, 72,155,148,164, 52,208,193,222,201,136, 90,161, 66,198,253,239, 17, 51, 60,136,212,132,135,
+212,145,144,146, 14, 24,134,196,183, 73, 33,122, 85, 85, 85, 25,136,158,110, 65, 6,153,153,153,240,193, 46, 32, 27, 88,124, 3,
+ 13, 33,190,244,183,183, 6, 29,201, 8,108,251,151,148,148, 0, 27,230, 16,237,190,126,169,248, 47,246,131, 55,255,225, 0, 50,
+ 22,180,109,219, 54, 13, 13, 13, 96,147, 29,191,222,112, 75,148,131,185,192, 99, 65, 12,203,151,157,191, 41,113, 19,191,222, 81,
+ 64, 70,233, 15, 4, 0, 1,132,125, 14, 0,216,165,130, 52,252,225, 23, 67,147, 84,250, 99,109,135,226, 25,158,198,165, 23, 89,
+156,118, 7,254, 1,125, 10, 63,118, 28,217, 13,228,141,216,254, 95, 37, 72,182, 75,190,248, 16,158,240,132, 59, 18,173, 68,144,
+145,145, 65, 86,128, 53,184,222,189,123,199,203,203, 11, 36,143, 29, 59, 6,172, 6,128,165, 63,176,201, 15,185,250, 6, 88,180,
+253,254,253,251,231,207,159,120,154,168,144, 94, 17,102,152, 0, 69,214,172, 89, 3,148,197, 19, 92,148,207, 1, 0,203,122,228,
+226, 30,194, 38,178, 26, 0, 22, 73, 36,215, 1,224, 33,126, 72,202, 71, 76, 38,129, 5,137,159, 91, 66,174, 35, 25, 96, 23,187,
+147, 55, 40, 1,236, 4, 64,102, 47,136,215, 14,140, 74,248,248,187,141,141, 13,176, 4, 39,169,237, 15,212,254,231,207, 31,100,
+237, 7,143,254,237,233,204, 32,216,252,135,148,248,152,160,191,191,223, 59,186, 6,151, 94,164,209,127,212,254, 1, 17,122, 71,
+ 1,217, 0, 32,128, 88,240,164, 90, 72,243,159,206,109,127,228,145, 40,250, 44,229, 68, 30,237, 65, 94, 31,130,191, 68,195,217,
+159,133,141,254,147, 81, 19,192, 71,255,241,215, 4,209,209,209,220,220,220, 60, 60, 60,192,210,156,159,159, 95, 80, 80, 16,216,
+188,138,141,141,133,200,114,112,112,184,185,185, 1,125,129,121,204, 31,176,196, 7,150,254, 63,126,252, 0,234, 98,103,103, 7,
+102,239,255,160,203, 62,255, 2,197,129,165, 63,144, 65,112,128, 2,215, 48, 32,176,161, 74,135, 65, 51, 92,179,193,196, 0, 72,
+ 29, 64, 66, 60, 54, 97,241,108,216,245, 80,240,212, 20,177,134, 32, 55,255,225,213, 54,145, 13, 11,228,230, 63,214, 42, 31, 63,
+ 88,182,108, 25,196, 16, 96, 29, 64,198,208, 63,164,229, 7,236, 26, 22, 22, 22,158, 57,115, 6,166,157, 64,242,152, 56,113, 34,
+218, 37,157, 43, 86,172, 56,120,240, 32, 48, 93, 65, 90, 36,120,214,167, 79,152, 56, 33,194, 2,165,249, 31, 61,233,219,138, 99,
+191,129,122, 13,163, 12, 51,236, 51,136, 95,219, 62, 10,136,108,254, 3, 1, 64, 0, 49,225,105, 23, 67, 18, 1,124, 50, 0,255,
+ 48, 92,121,121, 57,121,238,195,165, 87, 9,124, 31, 41,241,173,120, 52, 0, 89, 17, 68,234,176, 41, 49,139, 59, 7, 3,152, 53,
+107, 86, 95, 95, 31,156, 11, 41,253,253,192, 0,200, 0,102, 57,172,186,128, 21, 6,176,148,127,255,254,253,155, 55,111,128,228,
+ 55, 48,248,242,229,203,167, 79,159, 62,126,252, 8,236, 13, 0,123, 0,120,174,244, 1, 22, 64,192,150, 62,193, 74,116, 80,129,
+ 67, 72, 0, 46, 8,244, 62,156,141,103, 92, 27,121,220, 31,185, 45, 79, 82,179, 0, 77, 49,176, 56, 6,134, 33,217, 51, 1, 64,
+189,196, 36,105, 96,137, 15, 76, 3,144,137, 95, 96, 29, 0,241, 59,241,151, 46, 84,151,219, 3,181,255, 91, 41, 0,212, 14,108,
+122, 67,180, 31, 58,246, 15,214, 28,199,217,252,135, 15,248,128,198,109,150, 47,205,204,204, 4,154, 83, 80, 80, 64,208,106, 80,
+243,159,129,113, 41,172,249, 31, 53,241, 27,115,196,199,229,199,126, 1,245,118,238,232, 26, 45,196,105, 84,250, 3, 1, 64, 0,
+177,224, 42, 95,224, 67,255,240,201, 0,252,133, 35,164, 28,135,180,229, 73, 29,174, 65,211, 11,233, 19, 0, 5,201, 27,246,129,
+ 47, 3,165, 39,128, 52,252,201, 27,255,129, 52,252,137, 25,255,129,103,111, 8,163,177,177,113,254,252,249,176, 33, 20, 63, 8,
+ 3,216,252,199, 85, 1, 8, 11, 11,191,125,251, 22,216,222,127,253,250, 53,176, 7, 0,108,223, 65,122, 0, 95,191,126, 5,214,
+ 4,192,210, 31, 88, 13,148,149,225,156,115,131, 52,243,177, 46, 17,134,200,226,113, 51, 85,230, 0,136, 20, 71, 6,144, 97, 19,
+244, 2,174,186,186,181,181, 85, 68, 68,132,166, 73, 2,179,249, 15, 7, 4,103, 2, 48,155,255, 36,181,253,129,125,196,152,152,
+ 24, 96,228, 2,189, 95, 85, 85, 5,236,253, 16,127,161, 77, 77,133,253,129, 3, 7, 24,215,128,238,103,221, 85,195,235,214,242,
+ 25,168,189,181, 19,212,138,199,223, 5,129,172,253, 7,183,250,151, 29, 60,120,248, 63,227,255,194,130, 66,117,117,117, 98, 44,
+ 5,234,141,176, 98, 69,180,250, 25, 64,122,197,221, 36,200,152,249, 24, 5, 88,202,243,206, 10,204,138, 1, 50, 66, 0, 16, 64,
+ 44,120,218,254,192,210, 31,121, 50,128, 96,215, 21,185, 28, 39,175, 31, 0,209, 75,225,200, 15,196,205,100,150,227,131, 62,193,
+ 65, 6,169,224, 87,117, 39, 38, 38,162,141,207, 0, 5, 33,249, 16, 19,200,200,200,220,185,115, 7, 88,226, 3,155,252,191,127,
+255,134, 12,253,255,248,241, 3,178,150, 20, 50, 39,172,172,172,140,167,102, 5, 26, 14,233, 4,192, 83, 2, 48,168,209, 68,176,
+ 2, 90,204, 1, 32,143, 8,225, 10, 43,172,226,192, 0, 4,214, 1,225,225,225, 43, 87,174, 36,126,160, 18,141,221,209,209,145,
+246, 52, 61, 12,152,210,176,109, 4,115,119,119,191,127,255, 62,218, 46, 4, 8, 0,138, 51,224,221, 20, 22, 26,186, 58, 52,212,
+217,213,245, 30,230,100,195,219,183,206, 12, 12,239,211,211,113,230, 68,248, 85,136,144, 78,198,174, 93,187, 24, 72,185,206,140,
+137,137, 17,212,136,129,148,254,151,254,204,223, 15,186, 8, 19, 88,250, 19,147, 53, 32,201, 9,216,234, 7,146,133, 69,133,234,
+106,234, 68, 90, 90, 90, 86, 2,214,203, 0,108,245, 67,244, 74,184, 73,130, 70,155, 70, 11,127,218, 3,128, 0, 98,193,213,157,
+135, 79,252,194,151,121, 16, 51, 38, 78,149,177, 32, 82,119, 0,140, 64, 0, 31,114,129,151,113,144,221, 27,200,130, 88,199, 76,
+129,117,195,182,109,219,254,252,249,243,225,195, 7,200, 28, 0, 3,120,117, 16,144, 11,100, 19,140,187,252,252,252,137, 19, 39,
+ 66,170, 1,228,113,127,160, 56,173,235, 78, 96,113, 79, 76,161,143,181, 52,196,172, 24,128, 77,108, 34, 75,127,204, 82, 24,121,
+ 66,152, 96, 39, 0, 83,240,193,131, 7, 12, 68, 44, 49,128, 15,192,162,186,220,133, 24,255, 2,251,121,192,162, 31,121,240,157,
+ 24, 0,212,254,111,165, 32,176,220, 7,178, 23,236,255,181,226,216, 47,160,246,195,199, 73, 24,173, 58,116,232, 80, 65, 65, 1,
+145,173,126, 56,128, 36,194,149,199,127, 3,245, 74,184, 75,194,234, 19,162,244, 66,182,251, 66,166,247,209,162,105,116, 39, 48,
+ 3,182,235,192,208,118, 2, 3, 4, 16, 11,214,236, 1,217, 84,133,220,244, 35, 56, 4,132,158, 61,200,173, 3, 40, 55, 4,126,
+ 26, 4,145, 0, 88,217, 96, 29,194, 38,166, 18,194, 28,243, 33,126, 20, 8,115,204,135,200, 81, 32,248, 76, 53,114,222,198, 42,
+136,181,153,230,237,237,189,116,233, 82, 54, 54,182,159, 63,127, 2,235,128,127,255,254, 9, 8, 8,188,127,255,158,152,205,207,
+ 90, 90, 90, 64,243,119,239,222, 13, 89,246, 3,217, 19, 48,228, 50,216,190,125,251,128,129,176,101,203, 22, 50, 74,127,120, 89,
+121,175,188, 28, 79, 87,181,180,180,148, 1,199,242,185,178,178, 50,252,115, 0,233,233,130,184,244, 2,219,254,196,148,227, 4,
+251, 64,120,128,123,203,103, 56,155,164,210,127,218,180,105,228, 69, 71, 79,119, 47,168,201, 79, 1,192, 90, 89,194,111,159, 30,
+ 5,120, 0, 64, 0,225, 92, 6, 74, 80,132,166,128,158, 59, 0, 48,231,250,136,174,102,200, 44,248, 64,122, 57,201,116, 45,100,
+116, 11, 82, 57,161,141,116, 33, 11,226,247, 81,116,116,244,221,187,119,247,239,223,255,253,251,247,191,127,255,250,250,250, 2,
+139,114,226,195,220, 21, 12, 32,109, 55, 34, 27,254,212,154, 3,192,197,198, 83, 26,162,173, 75, 33,102, 55, 19, 3,252,168,159,
+123,161,200,193, 2,204, 5,105, 79,211, 25, 97, 27,193, 32, 82, 88,123, 90,120,194,223,217,217,153, 96,130, 36, 67, 10,238, 95,
+ 96,140, 4, 6, 6, 66, 78, 31, 34, 21, 48,133,191, 7,106,247,243, 79,131,180, 21, 32,139, 62,145,143,121,160, 5, 48,142, 49,
+ 34, 91, 47,176,129,143,171,158,131, 72,141, 2,252, 0, 32,128, 6,227, 97,112,100, 52, 91,232,223, 8,165,196, 70, 74, 78,121,
+163,150, 79,149,193, 0, 77,240,215,175, 95,204, 96, 64,237, 8,157, 62, 64,122,177, 36, 36,200,241, 97,132, 65, 61,244, 96, 40,
+228,222, 33,176,244,135, 84,180,131,115,139, 41,133,123,101,192,218, 9, 15,189, 83,125, 57, 38,254,115,126,104, 87, 89,142, 14,
+ 10, 1, 1, 64, 0,141, 94, 10, 63, 10, 70,193, 40, 24, 5, 35, 20, 0, 4,208,232,141, 96,163, 96, 20,140,130, 81, 48, 66, 1,
+ 64, 0,141, 86, 0,163, 96, 20,140,130, 81, 48, 66, 1, 64, 0,177,140, 6,193, 40, 24, 5,163, 0, 25, 48, 98,178,254,195,137,
+ 81, 48,172, 0, 64, 0,141,246, 0, 70, 40,192,122, 56,248, 40, 24, 5,140, 96,204, 8, 58, 3,154, 17, 3,140,238,205, 26,110,
+ 0, 32,128, 70, 47,133, 31,161,122,125,109,103, 14,111,255,198,249,233, 34,154, 57, 76, 76,144,229,170,240, 21,141,255, 97, 0,
162, 96,209,166,203,200,122, 63, 60,216,207,193,193, 1, 81, 15, 57, 64, 27, 89, 47,228,212,188,127,255,254, 1,217,191,127,255,
-230,149,181, 27, 1,225,204,200,204,194,254,255,223,159,127,255,254,108, 57,242, 4,121, 81, 40, 46,189,192, 32,122,249,242,165,
-132,132, 4, 25,246, 82,162,119, 52, 47, 48,144,178, 82, 11, 32,128,134,252, 16, 80,117, 53,226, 10,187,214, 86, 51,250,233, 61,
- 5,186, 84,175,213,172, 21,206, 32,213,229,184,246,169,226, 18, 39,213,156,225,214, 87,253,245,149,229,237,125,213, 31,151,164,
-255, 60,190,245, 95,241, 9,175,214, 55, 62,121, 54,110, 94, 92,234,143, 28, 57, 98, 99, 99, 3, 41,250, 33,133, 56,164, 17, 11,
- 47,196,255,193,192,195,135, 15,209,244,158, 59,119,206,216,216,152,147,147,147,133,133, 5,168, 17,174, 29, 82,238,255,133,129,
-159, 63,127,158, 61,123,214, 65,214,110,240,135, 30,208,229,111,223,190, 61,126,252,184,128,128, 0,218,198, 8,194,141, 68, 70,
- 38,118, 14, 33, 1, 65,245,175, 95,158,126,249,252, 24,212, 13, 96,252,207,240, 31,223,136, 16, 48,148,214,172, 89,115,235,214,
- 45, 32, 27, 24,140,197,197,197,196, 91, 7,209,123,239,238, 29, 96,152,179,177,179, 23, 20, 20,210,116, 23,194, 8, 7, 0, 1,
- 52,136, 42, 0, 92, 39, 77, 50,224, 61,104, 12, 82,112, 35, 23,229,196, 3, 74,244, 14, 39, 64,225,222, 81, 58,148, 94,159, 31,
- 94,255,120,104,213,183,111, 63, 21,204,153, 56,101, 24, 85, 31, 93, 50,101,184,248,254, 39,207, 5,174,184, 55,140,210, 88, 53,
- 93,187,118, 13, 88,130, 0, 11, 59, 22, 24,128, 84, 6,144,134,255,159, 63,127,128, 37, 56,176,253, 14, 44,253,247,237,219,199,
- 44,108,130,172,247,219,183,111,231,207,159,183,176,176, 96, 99, 99,131, 95,154, 6,212, 14, 44,155,254,128, 1, 80,227,247,239,
-223,129,106,190,124,249, 50,152, 99,182,170,170, 10, 57, 19,125,254,252,217,192,192,128, 12,189,139,151,157,229,228, 20, 3, 22,
-200,160, 10,128,145,225, 63,100,183, 0,238, 98,249,217,179,103,192,144,137,138,138, 82, 82, 82,130,156, 75, 33, 36, 36,100, 98,
- 98,130, 85,113,130, 59,202,206,184,203, 55,110, 28,224,229, 42,234,111, 50, 52,210,121,254,228,213,174,109, 7, 20,116, 12, 63,
-125,250, 56, 90, 88,147, 13,208,198,123,145,151,254, 3, 4, 16, 11,214,178, 0, 82, 10,224, 98,211,168,244,207,202,194,126, 79,
-250,251,247,239,151, 47, 95,142,167, 14,128,148,224,164, 54,225, 41,212, 11,111,251,147,209,252, 71,187,121, 6,151, 2, 26,133,
- 54,164,199, 0, 39, 33,130,239,222,129,118,205, 8, 9,237, 25,132,201,247,215,227,107,236,199, 22,255,252,246, 47, 72,133, 89,
- 93,244,207, 63,161,255,172, 66,204,159,223,178,113,126,254,174,121,113,202, 89,181,140,111, 92,242,216,218,173,140,215,175, 95,
- 7,150,224, 78, 78, 78,144,114, 28, 8,128,133, 56,228,234, 27, 96, 33, 14,108,191, 63,126,252,120,255,254,253,192,154, 0,109,
-231, 27, 80, 25, 80,205,197,139, 23,129,245, 7,176, 1,203,206,206, 14,209, 11,169, 0,128, 26,129,165,219,229,203,151,127,252,
-248, 65,112,211,220,131, 7, 15,128,182, 0, 75, 94,160, 27,196,197,197, 85, 85, 85, 33,131, 75,196, 0, 74,244, 2,157, 90, 83,
- 83, 3, 63, 12, 21, 88,154, 3,107, 68, 49, 49, 49, 97, 97, 97, 34, 75,255,121, 73, 73, 94,134,134, 64,182, 68,110, 46, 39,151,
-248,151, 79,143, 62,125,188,251,255,255, 95,208,129,113,255, 8,220, 65, 13, 44,238, 69, 68, 68, 22, 45, 90, 20, 31, 31,191,105,
-211, 38, 32,247,208,161, 67,191,126,253, 98, 96,144,195,170,254,109,123, 17,156,205,243,235,183,212,159, 31, 5,165,245,253, 61,
-141,221, 61,211,164,153,254, 78,235,233,115,138,136,194,165,119, 20,144, 84,250, 51, 32, 29, 5, 10, 4, 0, 1,132,189, 7,128,
-124, 4, 10, 46, 54,213, 1,253,207,112,166,194, 0, 20,172, 14, 32, 9,192,235,212,249,129,139, 48,101, 19,215,199,209,180, 25,
- 14, 49, 28,153, 36,120,109,247, 0,130, 31, 31,222,168,221,223,250,138,249,175, 10, 63,131,188,220,127,102, 61, 54, 22, 37, 37,
-182,159, 63,126, 30,125,252,243, 35, 11,243, 63,214, 31,123, 22, 51,121,229,255, 99, 65, 31, 11,130, 95,126, 41, 40, 40,232,232,
-232, 8, 44, 58,129,197, 40,176, 33, 15,105,248, 3,203,110, 96, 43,245,224,193,131, 76, 96,128, 85, 47, 80,229,213,171, 87,109,
-108,108,248,248,248,128,218,129, 34,192,210, 31, 88,138,125,250,244,233,244,233,211,192,106, 0,104, 26,100, 38, 0, 23,184,116,
-233,210,177, 99,199,238,223,191, 15,212, 2,180, 93, 66, 66, 2,216, 10,182,178,178,226,230, 38,188, 21,156,108,189, 64, 39, 65,
-110,254, 65, 22,132,156, 11, 13,108, 69, 17, 83,133, 48, 49,179, 33,115, 95, 76,158, 44, 17, 32,211,221, 61,241,247,239,175,224,
-192, 97,252, 7, 44,253,255,131,186, 0,255,113,143,191,157, 60,121,178,162,162, 2, 24,104, 65, 65, 65,178,178,178,192,138,118,
-219,182,109,230,238,132, 54,253, 50, 50, 46,185,243,124,237,237,167,155, 54, 46,100,102,102, 44,202,141,213,151, 16,153, 85, 80,
- 63,155, 24,189,163, 0, 71,233,143,220,228, 71,171, 15, 0, 2,136,132, 85, 64,180, 62,238, 81, 9, 55,160, 69, 19,158, 66,189,
- 12,100,141,251, 83,189, 45, 15,191,204,146,248, 66, 28,171, 74, 96,219,159,200,230, 63,176, 16, 4, 22,127,152, 92,100, 65, 76,
- 0, 87, 3,191,101, 16,147,139, 21,188,187,122,238,217,211, 79, 98,188, 44, 74,188,255, 89, 68,254,177, 88,122,112,235, 47,230,
- 52,234,101,231,231,100,251,242,253,219,183,191,114,204,223,222, 95, 58,134,165, 20, 99, 98,130, 92,118,127,251,246,109, 96,107,
- 29, 88,136, 11,131, 1,176,101, 42, 32, 32,240,241,227, 71, 96,155, 20, 88, 60, 65, 70,249,209,244, 66,196,129,197, 46,176, 14,
-184,117,235, 22, 23, 23, 23, 80, 23,176,249, 44, 42, 42,202,195,195, 3, 20, 1, 86, 33,144,161, 33,204,202, 3,185,253,190,123,
-247,238,187,119,239, 42, 42, 42,186,187,187,155,153,153,125,251,246,109,223,190,125,192,142, 5,176,250, 33,216,246,223,189,103,
-239,189,231, 31,121, 85, 44,212,220,147,165,205,252,222,255,100, 2,138, 16,212, 11, 44,253,129, 21, 6,176,242, 0, 22,193,122,
-122,122,240, 97, 28, 8,131, 96,233, 15, 44,250,185,121,164,132,132,117,150,174,184,148, 52,111,222,182,243,231,129, 8,216, 3,
- 96, 0, 77,119,127,133,170, 97, 4, 34,124,235,129,128, 5, 61,176,213,159,147,147,195,203,203, 11, 12,186,181,107,215, 2, 29,
-243,230,205, 27, 53, 53, 53,130,169,107,226,249,219, 61, 39,174,204,238,169,100, 97,254,206,244,247,115,215,132,121, 43, 15,157,
-125,198,196, 66,234, 9,163,163,128, 72, 0, 16, 64, 44,196, 23,244,131,121, 42,102,196, 86, 3,144,161, 27,146, 70,111, 48,187,
- 23,240,126, 0,193,158,199,231,207,159,129,205, 82, 96,179,218,212,212, 20,141,123,234,212, 41,136, 32, 86, 0,145, 5,146,192,
-150, 41,176, 25, 11, 44, 26, 32,130,200, 92,172,128,239,199,219,109,143,126, 72,191,103, 54,228, 99, 20,125,205,160,194,194,207,
-196, 40,252,255,199,203,175, 47, 25,175, 62,250,247,226,235, 15, 96, 25,204,240,239, 22,131,145, 59,174, 10,128,157,157, 29, 88,
- 10, 75, 75, 75,187,186,186, 2, 75,118, 96, 17,249,246,237, 91, 96,145, 4,148, 2, 22,241,144,227,143,254, 97,232,133,104, 7,
- 42, 0, 38,123, 96,199, 87, 69, 69,133,159,159,255,203,151, 47,231,207,159, 7,214, 10, 64, 51,127,130, 1,158, 86, 17,176,122,
-123,242,228,137,190,190,190,131,131,131,140,140,204,215,175, 95,129,245, 7,176,155,123,252,248,113,130,131, 57, 64,189, 47,223,
-125, 20, 82,179, 80,178, 13, 23,144, 81,251,249,245,195,163,147, 91,111,239, 93, 72, 80, 47,100,246, 2,216,185, 17, 23, 23, 7,
- 22,184,192,154, 0, 82,244, 67,198,130,128,108,172, 55,228, 64,171, 61, 22, 14, 1, 65,117, 1, 33,117, 38, 38, 86, 96,113, 63,
-119,254,254,164, 68, 71,136,222,212,212, 84,160,227, 33,122,193, 94, 6, 23, 5,216,166, 1,128, 1,187,121,243,230,172,172, 44,
- 73, 73,208, 1,159,123,247,238, 5, 86,102,156, 96,224,237,237,125,236,218,119, 60,190, 94,118,243,113,239,233, 27,115, 58,202,
-101,212,229,191,126,121,191,113,251,233, 75,151,111, 10,252,255,199,246,226,165,119, 78,244,209,171,223, 71,203,107, 82, 1,218,
- 73, 63,152, 29, 2,128, 0, 98,193, 44, 11,224,135,220,226, 98, 15, 42, 64,118,193, 77,161, 94,178,199,127, 40,111,245, 19, 35,
-133,167, 40, 39,123,213, 16, 48, 39, 3,139,251,247,239,223, 99,229, 18, 9,128,181, 5,176,252, 5, 22,250, 10, 10, 10,152, 92,
- 76,240,250,205,227, 99,207,191,123,115,113, 29,126,252, 79,202,136, 93,241,231,217,247,215,178,214,119, 93,250,247,224,227,151,
- 95,255,159,126,254,203,201,194,244,231,227, 11,126,108,237, 24,120, 29, 0, 44, 49, 31, 62,124,120,227,198, 13,109,109,109,160,
-131, 79,156, 56, 1, 25,217,199, 53,136, 15,212, 11,233, 4, 64,244, 2,235,128,199,143, 31,235,234,234, 2,139,111, 96,253, 1,
- 20, 1,138, 67, 86, 7,225,233, 1, 60,122,244, 8,104,190,177,177, 49,176,244, 7, 42, 6,118, 65,204,205,205,129, 86, 3,197,
-129, 53, 7,254, 80, 2,170,249,199,196, 38,109,224, 2, 44,253,153,152, 89, 57,249, 68,229,204,189, 31,158,216,132, 95, 47,208,
-157, 31, 62,124,120,250,244,169,156,156,156,181,181, 53,208, 82,200,200, 79,124,124, 60, 68, 1,176, 14,195, 99, 41, 7,135,176,
-176,168,254,175,159, 31,223,188, 61,255,243,231,251,223,191, 65,243,219, 16,189, 47, 95,188,128,235, 5,181,254,113,212,122,207,
-159, 63, 95,186,116,105,116,116, 52, 48,172, 24,192,215,209, 0,123, 3,149,149,149,192,218, 8,166, 4,231,242,196, 91,159,190,
-149, 31,188,208, 81,146,110,235,227,242,245,203,155, 85,235, 14,206,156,187,118,123, 81,130,210,171, 39,157,159, 94, 8, 9, 9,
-227,209, 59, 10,136, 28, 11,194,172, 18, 0, 2,136, 5,235, 80, 12, 65,246, 32, 7,148,175,209, 36, 6,180,152,182,208,255, 6,
- 49,228,178, 27,173, 50,160,198, 97,144, 56,193,205,155, 55, 97,243,120, 88,184, 36, 1, 96, 17,188,123,247,110,200, 37, 30,200,
- 92,172,221,252,139,239,190,127,252,245,239,226,235, 63,207, 62,252, 17, 63,193,162,183,234,206,195, 7, 87,111,158,252,245,135,
-133,249,215, 63,134, 31,191,254,191,255,255, 79, 84,240, 63,214, 66, 28,190, 0, 20,178,140,231,229,203,151,242,242,242,192,122,
- 11, 50,236, 3, 36, 17, 27,156, 8, 1,248,166, 1, 8, 57, 56,111,142, 3, 86, 78,144, 91, 80, 20, 21, 21,145, 43,182, 51,103,
-206, 0, 73, 96,240, 66, 46,221,195,117,237, 15, 48,180,128,228,247,111, 47,191,124,126,252,247,239, 15,100,189,155,192, 85, 53,
-176, 27, 4,210,251, 31,251,216, 63, 48, 30, 39, 79,158, 12,108,230,219,216,216, 0,185, 71,143, 30,221,176, 97, 67,118,118, 54,
- 82,233,143, 19, 60,255,246, 51,118,219,137,130, 48,239,144,216,224,111, 63, 62,173,223,116, 96,194,180,101,139,220, 76,129,165,
-255,104,217, 77,245,154, 0,185, 14, 0, 8, 32,106,238, 4, 70, 30,137,198,197, 30, 78, 96, 48,148, 2,144,177,123,226,199,127,
-240,204, 25,224,143, 35, 96,241,225,234,234, 42, 40, 40,136,149, 75, 18, 0,234, 2,234,133, 23,247,104, 92, 52,240,253, 47,223,
-111, 70,134, 51,111,126,190,250,251,119,239,189, 31,171, 86,255,216,247, 68,244, 14, 27,255,147,143,191, 31,127,254,247,245, 15,
-195,183, 63,255,217,133, 37,112, 21,217,144,149,254,127,255,254,253,243,231,143,176,176, 48, 15, 15, 15,176, 14,248,253,251, 55,
- 68, 4,109, 59, 24,178, 94,200, 74,127,160,154,239,223,191, 3,185,178,178,178,192,150,181,164,164, 36,176,218, 0,182,193,129,
- 53, 31,196,100, 60,227,162,192,102, 56,176,175,112,246,236,217, 39, 79,158, 64,174,225, 60,121,242,228,151, 47, 95,128,226,192,
-206, 7,254, 32, 2,170, 97,250,247,235,233,249, 61, 31,158,220,250,247,247,247,247, 79,175, 31,157,220,250,235,235,123,252,122,
-225,142,249,246,237, 27,124,118, 26,216, 9,184,122,245, 42,176, 28,135, 92,218,254,241, 35,206,245,148, 64,191,254,249,253,133,
-147, 91,130,131, 83, 8,178, 35, 24, 89,239,236,217,179, 33,122,255,161, 6, 24,176, 3,183,104,209, 34, 96,235,161,169,169,201,
-207,207,207,199,199, 7,210, 21,216,188,121,115,105,105, 41,176,203,133,199,155, 64,189,139, 23, 47,142,200,202,113, 90,115,176,
- 36, 46, 40,175, 44,243,199,175, 47,247,239, 62,158, 57,115,213, 6, 95, 43, 7, 89, 49,226, 19, 21,176,178, 25, 45,220,241,143,
- 5,193,203,125,228,121, 96,128, 0,162,254, 81, 16,152,183,167, 98,178,169,220,222,199, 88,200,143,220,228,199,223,252,199,212,
-123, 10, 40, 84, 93,141,201, 38,102, 8,136,120,189,212,234, 13,192, 23,243, 16,223,252,127,247,206, 5, 62,115, 64, 82, 7, 66,
- 65, 65,193,215,215, 23,216, 12,196,202, 37, 18, 0,213, 3,117,193, 7,124,208,184, 88,212,171,170,168,114, 51,243, 50, 50,252,
-254,255,255,250,251, 95, 75,239,252, 92,126,236,217,233,187,239,158,125,103,120,251,227,239,221, 47,255,159,255,252, 47,171,172,
-130,181, 52,132,172,218, 4, 22,214,192, 66, 28, 88,118,235,232,232,128,171, 76, 33, 51, 51, 51, 72, 33, 14, 41,199, 49, 11,113,
- 72,225, 14,172, 39,128, 10,128,213,188,178,178,242,135, 15, 31, 30, 63,126,252,238,221, 59,160, 83,129,189, 10,160, 56,208, 4,
-136, 50, 92, 46, 55, 53, 53,149,145,145, 1, 22,160, 59,118,236,216, 2, 6,135, 15, 31, 6, 54,204, 45, 45, 45,241,204,121,192,
-245,138, 11,241,191,189,119,225,230,238,249, 87,183, 78,191,190,117,230,195,227, 27,216,153,254,225,215, 11,172,156,128,205,109,
- 62, 62,190,139, 23, 47, 2,107, 29,228,106, 0,210,150, 95,186,116, 41,158, 18,249,215,207,143, 31, 63,220, 97,101,229, 22, 16,
-210,224,230,145, 6, 50, 32,125, 2, 32,120,118,114,234,254, 69,121,174, 26, 95,192, 21, 0, 3,116, 27, 24, 56,216,182,110,221,
-202,201,201, 9, 52, 22, 24, 50, 22, 22, 22,240,174, 64, 76, 76, 12,176, 35,130,223,155,219,182,109,229,227,227,177,179, 55, 55,
- 48,210, 11,204, 74,250,198,248,231,245,171,119, 25,185,205,157, 38, 42, 70, 98, 36,180, 45,128,165,127, 87, 87,215,104, 29, 64,
- 76, 53,128, 38, 2, 16, 64,116,218, 8, 54, 32,141,101,242,198,232,205, 90, 91,145,203,110, 32,151,234,122,225,109,237,196,245,
-113,120, 20,208,122, 79, 22,220, 22,228,157, 1,248,181, 0, 75, 31,103,103,103, 96, 25,138,201, 5,150,170,248, 66, 6, 44, 11,
- 36, 13, 13, 13,129,229, 20, 92, 16,153,139, 21, 72,171,105,233, 94, 61, 43,255,254,227,155,191,255, 62,253,248,195, 14, 44,173,
-127,254,145,227, 97,121,255,231,207,211,175,160, 21, 68,222,170,226,220, 10, 90, 95,176,141,135,192, 87,124,234,234,234,234,235,
-235, 3, 11, 38,200,194, 77,160,179,129, 69,213,250,245,235, 33, 27, 2,128, 34,140, 24,122, 33,187,189,128,233, 86, 77, 77, 13,
- 88,127,188,126,253, 26,178,132, 20,104, 26, 80,228,213,171, 87, 16,189, 64, 17, 60,245, 37,176,103, 3, 89,202, 9, 44,145,225,
- 75, 57,129, 46, 33,184, 26, 7,164,215,197, 25,164,247,238,201,103,231,119, 67,245, 90, 59, 17,212, 11, 44,253,141,140,140,142,
- 30, 61, 10,212, 43, 45, 45, 13, 52,135,155,155,187,170,170,106,210,164, 73,192,174, 15,208,246,190,190, 62, 92,119,196, 3,171,
-188,143,239,239, 0,139,117,126, 33, 53, 9, 41,203,239,223,223,124,249,244,176,187,103, 82, 99, 67,149,148, 12,195,242,124, 46,
-198,176,247,142,113, 12,144, 26, 19,190, 17,248,214,173, 91,192, 52, 96, 99, 99, 3, 52, 31, 88,229, 0,229,166, 76,153, 18, 30,
- 30, 14,169,110,241,131,155, 55,111,133, 4,251, 71, 68,248,233,232,170,191,253,252,241,203,199, 55,105,121,205,205,129,206,206,
-255,190,145, 84,250, 79,152, 48, 1, 24, 41,192, 90, 39, 55, 55, 55, 32, 32, 96,180,160, 71, 30,240,193, 90,238,195, 1, 64, 0,
-177,208,167,160, 39,184,130, 40, 36, 36,132,188,157,192,184, 0,242, 70, 45,242,234, 0, 82, 75,127,226,245,226, 95,117, 67,235,
-163, 29,224,227, 69,112, 91,144,247, 4, 16, 4,192,114, 16,121,181, 15,156,139,103, 9, 16, 92, 22, 77, 13,126, 45, 16, 32,165,
-168,252,195,204,246,207,169,109, 15, 62, 50,240, 48,178,202,243, 48, 61,253,203,200,204,206,114,232,213,223, 31,255, 24, 68,217,
-153,149, 77,236,190, 8, 42, 96, 43,206, 64, 77,120, 96,139, 27,216, 14, 5,150,137,159, 62,125, 2,150,221,144, 10, 0,216,126,
- 7, 86, 90,192, 50,107,243,230,205,144,225, 32,180,108, 0, 20,129,108, 27,214,212,212,132,140,222, 0,245, 66,210, 54,164,223,
- 0, 20, 7,246, 6,190,124,249,130, 63, 97,235,233,233, 1, 75,100,242, 54,115,145,167, 23,232,108, 41, 41, 41,119,119,119, 96,
-173,115,227,198,141, 71,143, 30, 1,107, 59, 1, 1, 1, 96, 85, 52,103,206, 28, 92,123,113,145, 70,129,190,125,120,127,243,199,
-143,119, 2,130,106, 60,188,178,188,124,114, 95, 63, 63,237,232,156, 27, 25,225, 2,172, 0, 96, 1,251, 31,185, 6,240,242,242,
-218,182,109, 27,176,195, 1, 12, 16, 63, 63,191,133, 11, 23, 2,235,117, 13, 13, 13, 98,252,232,237,237,181,126,253,230, 79, 31,
-222, 62,121,246, 60, 63, 59,174,180,162, 45,208,201,202,230,231, 39, 6, 86, 98,203, 37, 96,233,223,208,208, 0,233,134, 2, 59,
-106,192,126, 64, 89, 89,217,104, 29,128,191, 62, 64, 6, 0, 1, 68,205, 10,128,194, 21, 68,100,148,242, 16,240,230,205,220,234,
- 83, 27,177, 14,248, 16,156,254, 5,234, 61, 85,189, 17,173,193,142, 60,140,131,167, 28,127, 51,247,205,169,141,213,228,233, 29,
- 40, 48, 20, 79, 13, 82,176,114,188,244,243,207,235,125,123, 89,255,124,191,244,249,255,158,207,127,216, 24, 25,133,255,255,119,
-148, 20,176,119,115, 22, 50,118,192,209,158, 5,245, 0,128, 77, 96, 96,121, 4,108,194, 3, 11,122, 96, 49, 10, 41,196, 33,141,
-119, 81, 81, 81,107,107,235,157, 59,119, 98, 14,227, 0, 69,128, 85, 5,176,185, 13, 84, 15,108,213, 66,186, 17, 12,176,121, 5,
- 32, 23,168, 0,216,171, 56,113,226, 4,193,105,112, 5, 48, 32,211,227,100,233, 5,214, 1,192, 18, 31,232, 60, 96, 15, 0,216,
-233, 1,246, 93,128,130, 79,159, 62,245,244,244, 4, 54,255, 9,106,255,251,247,231,215, 47, 79,127,253,250,200,249,233, 1,159,
-128, 50, 23,143, 20, 16,237,218,251,146,209, 89, 28,214,152, 3,147, 48,245, 86, 86, 86,192,128, 5,150,254,192,154, 64, 88, 88,
- 56, 46, 46,238,192,129, 3, 68, 58,213,210,210,138,157,157,157,239,218,217,236,236,100, 25, 53,213,174,130,228, 5,211, 22, 78,
- 97,254, 65,124,233, 95, 94, 94, 14,244,236,179,103,207, 56, 57, 57,129,145, 2,236,238,180,182,182, 86, 87, 87,143,214, 1,240,
- 49, 31, 96,161,143,231, 40, 8,128, 0,162,114, 15, 96, 64, 86, 16, 97, 45,212,136,108,254, 99,234, 69,110,191, 67,198,115,112,
-149,227,148,232,197, 83, 22,147, 90, 70, 15,251,147,224,128, 37,154,129,179,187,176,148,204,235,235, 87,152, 31,222, 83,249,253,
-156, 87, 88,220, 74, 87, 67,219, 88,231,187, 4,206,253, 65,192,146, 26,216,246, 7, 54,243, 33,131,245,192,174, 0,144, 1, 57,
-206, 1, 62, 58, 36, 43, 43, 11,172, 3, 48, 11, 44, 96,105, 98, 96, 96, 0,172, 3,128,229, 59, 68, 37,124, 81, 13,252, 36, 56,
-160, 81,134,134,134,103,207,158, 29,156,129, 6,116,188, 24, 24,168,171,171, 3,253, 11,172,198,128,222, 7,134, 70, 53, 81,243,
- 82,255,127,255,250,252,251,215,151,239,223, 95,179,179, 11,178,178,241, 50, 49,177, 44, 89,186, 53, 38,218, 27, 90, 11,162,170,
-134,116, 44,122,123,123,129, 21, 45,144,161,166,166, 70,252,181,210, 70, 70,198,204,166,166, 73, 13, 16,189,255,213,212,212,213,
- 2, 2,240,143, 10, 34,131,206,206,206,209, 82,158,152, 58, 0,107,233, 15, 4, 0, 1, 52,108, 47,132, 33,123,233, 39,114,145,
- 77,106, 19,158, 18,189,163, 0, 63,144,213,212, 6, 34, 32, 3,126,246, 38,254,125, 65,161,161,161,130,130,130,144,165, 62,192,
- 18, 16, 50,164, 3,233, 1, 64, 38,126, 33, 7,130, 42, 43, 43, 3, 5,143, 92,249,138,172,119,194,132, 9,171, 87,175,134, 40,
- 0,157, 20,132,227, 56,104, 96,203,151,224,160,202, 32,169, 65,121,192,128,196,230, 2,164, 26,248, 12, 44,253,129,102, 0,131,
- 13,162, 23,215,152, 23,228,200, 79, 72, 80,147,228, 60, 96, 48, 23, 22, 22,146,161,119,180,153, 79,124, 29,128, 75, 10, 32,128,
- 70, 47,133, 31, 5,163, 96, 20, 96,148, 11, 12, 12,232,135, 61,252, 31,189, 17,108, 24, 2,128, 0, 26,189, 18,114, 20,140,130,
- 81,128,209,248,103, 24,189, 1,114, 68, 0,128, 0, 26,189, 18,114, 20,140,130, 81, 48, 10, 70, 40, 0, 8,160,209, 10, 96, 20,
-140,130, 81, 48, 10, 70, 40, 0, 8,160,209, 10, 96, 20,140,130, 81, 48, 10, 70, 40, 0, 8, 32,196, 28,192,232, 37,203,163,122,
- 71,245,226,210,155,158,158,238, 31,144,190,113, 3,150, 35, 55, 70,195,106,192,245,182,194, 86,220,225, 90,228, 58,122, 41, 60,
- 46, 0, 16, 64, 44,104,169, 28, 83, 5,145,235,198, 6,149, 94, 34,181, 15,148,155, 7, 15, 32,251,204, 9,234, 30, 68,138, 7,
- 64,174, 28, 56,120,240, 32,144,109,111,111,143,255,242, 0,218,133, 18,176,244,247,242, 52,130, 28,163, 55,236, 55, 94, 12, 45,
- 0, 44,253,125,125,149,225,236,234,234,234,209, 48, 33, 30, 0, 4, 16,250, 42,160,255,171, 80,206, 96, 98, 12, 35,225,180,119,
-180,140, 65,210, 9,160,148,232, 69,115, 51, 73,206, 30, 40, 55, 67,192,187,215,119, 94,191,126,254,242,205,151,143, 31,127,243,
-243,179,138,139,240,136,138, 74, 10,137, 18,117,188,218,185,227,211,238,221,189,117,247,193,143,199,207,255,203, 74, 50, 42, 43,
-112, 40, 41,171, 25, 89,102,209,191,218,128,156, 45, 74,163, 98,241,242,229,203, 6, 6, 59,102,204,248,118,224, 0, 67,125,253,
-174,199,143, 31, 75, 72, 72,112,112,112,136,138,138, 42, 41, 41,145, 81, 25, 28, 62,124, 88, 92, 92, 92, 94, 94,158,224,145,156,
-200, 0, 88,250,167,165,165, 49, 48,204,218, 56,122,224,216,224, 3,191,126,149,239,220,153,230,238, 62,203,215,183, 19,210, 27,
- 24,173, 6,144, 1,158,141, 96, 0, 1, 52, 76,150,129,194, 75,124, 70, 70,134,127, 43, 5, 7,191,131,127,255,250,250,248,209,
-229, 95,191,126,171, 40, 10, 56,216,200, 9,240,179,191,255,240,227,233,243, 47,183,239, 61,255,240,241,141,172,156, 46, 43, 27,
-206,171, 95,223,191,185,117,236,224,108,102,134, 79,225,222, 12,214,198, 12,202,242, 12,119, 30,252, 63,114,230,251,182,253, 23,
-183,174, 45,181,178, 79, 21, 20, 81, 35,210, 25,100,183,253,145, 53, 66, 14,146,163, 81, 29,240,238,221,187,188,188,111,162,162,
- 12,161,161, 12, 29, 29,160, 11,185,254,252,249, 3,172, 0,196,196,196,128, 21, 0,176, 79, 32, 37, 37, 69,208,144, 23, 47, 94,
-188,122,245,234,229,203,151,174,174,174, 75,150, 44, 97, 0,239,245,141,138,138,194,127,128, 29, 50,216,182,253, 28,176,244, 7,
-147,163, 96,112, 53,255,129,100,112,240,218,157, 59, 65,100, 90,218, 93, 72,111, 96,180, 43,128, 89,244,195, 69,144,235, 0,128,
- 0, 26, 38, 21, 0,176, 19, 0,169, 3,134, 68,233, 15, 4, 79, 30, 93, 22, 23,225, 48, 53, 84, 4,223,175,196,248,239,223,127,
- 62, 30,118,110,101, 54, 5, 89,254,107, 55,223, 0,101, 21, 85, 44,112,233, 5,150,254,182,198,159, 10, 18, 25,152,153, 65, 21,
-222,239, 63, 12,220, 92, 12,154, 42, 12, 22, 6, 12, 91,246,127, 2,202,122, 7,119,211,116, 8, 8,235,165,146, 52,186,242, 65,
- 72, 72,104,203, 22, 78, 89,217,239,192, 30,192,251,247, 44, 42, 96,240,229,203,151,123,247,238, 29, 56,112,224,211,167, 79,192,
-114, 28,127, 63,224,250,245,235,231,206,157, 99,101,101, 69, 22,252,254,253,251,220,185,115,129,134, 68, 68, 68, 16,227,140,141,
- 27,128, 94, 78, 7,147, 36, 0,248, 61,201,144, 99,239,208,184,120, 98,132, 1,233,196, 64, 60, 92,156,237,161,255,255, 69,222,
-190, 85,122,240, 64,248,233,211, 39, 98, 98,143,148,148, 62,138,137,253, 39,250, 68, 94,160, 59,137, 57,167, 15,143, 22,252, 92,
-106,233,133, 15,254,164,165,237, 4, 50, 32, 36, 68, 10,200, 24,173, 3,176,182,250, 33, 71, 3,193, 69, 0, 2,104, 88,173, 2,
- 98, 28, 34,238,124,247,250,206,239,223,191,205,140, 36,225, 34, 76, 76,140,108,108,204,156, 28, 44,172,172, 76,202,138,130,192,
-158, 1, 80, 13,174,145, 31, 96,219,191, 48,137,225,199, 79,134,251,143, 25,222,127,100,248,240,137, 97,217, 38,134,220, 6,134,
-170, 30, 6, 43, 35, 6,166,255,159,128,106,134, 77,156,234,234,234,110,220,168, 41, 38,198, 16, 21,197, 34, 33, 97, 10, 44,175,
-125,125,125,125,124,124,220,221,221,197,197,197,129, 37,251,202,149, 43,239,222,189,139,235,162,196, 75,151, 46, 93,184,112, 1,
-173,244,135,131,253,251,247, 95,189,122, 21, 79, 89,124,232,208, 33,120,105, 11, 41,253, 33,108,160, 56, 49, 21,222, 41, 24,192,
-202, 37,178,126,197,207,197, 90,250, 43,221,184, 97,187,103,143,236,173, 59,108,159, 62, 73,222,186,161,179,101,179,232,197,139,
- 12, 68,223,233, 13,116, 33,176,216, 5,246,153,136,143, 38,136, 22, 60, 92,252,122,145,139,123, 60, 92, 92, 0, 82,238, 67,200,
- 95,190, 42, 12,163, 0,169,232,199,127,214, 3, 64, 0, 13,150, 30, 0, 85,218,143,255,169, 97, 47,121, 67, 25,240,155,182,136,
- 25, 99,121,253,230,185,186,178, 16,164,220, 71,147,226, 96,103,249,240,241,167,154,178,208,173,123,207,177, 78, 6,220,187,123,
- 43, 28,116, 36, 23,195,142, 67, 12, 83, 23, 51,184,217, 50,120, 57, 48,220,184,195,112,254,234,127, 78, 14, 70, 67,109, 6,119,
-123,134,117, 59,111, 25, 89,210,106, 8, 8,107, 16,209,238,198, 55, 96,235, 30,216,222, 7, 50,128, 45,125,107,107,107,184,160,
-160,160,160,166, 38,139,159, 31,176, 15,116,230,214,173,111, 12, 12,192, 64, 97,199, 28,249,185,124,249, 50,174,210, 31, 94, 7,
-224,186, 35, 37, 58, 58,122, 41, 24, 0, 25,112,255, 2,139,126,160, 8, 68,150, 62,121, 1, 63, 23, 19,240,189,124,169,120,242,
-228, 47, 38, 38, 86, 70,134, 63,255,254,255,251,253,247,223,159, 63,162,135, 15,125, 20, 17,249, 41, 67,236, 74, 18, 96,177,123,
-229,202, 21, 67, 67, 67, 3, 3, 3,226,181, 32,119,110,208,184, 68,118, 35, 72, 45,253, 49,139,251,157, 72,253,128, 81, 64, 16,
- 0, 4, 16,122, 5,128, 57,125, 74,100,161,134,171, 48, 37, 70, 47, 45,198,142,137, 92,166,130,117, 2,153, 72,189,104,202,136,
-159,139,126,249,250,139,163,181, 28,176, 65,118,248,248,227,111,223,127, 3, 69,140,244, 37, 68,133, 57, 31, 63,253,124,231,254,
-123, 22, 22, 38, 85, 37,193,163, 39,191,170,107, 98,209,123,247,193, 15,107, 99,134,159,191, 25,182, 31,100,216,127,252,191,148,
- 56,163,146, 28,131,179, 13,131,134, 50, 35, 11, 51,232, 28,117, 11, 3,134,238,153, 63,240, 15,248, 16,100,224,105, 53,192, 71,
-252,209,198, 37,104,183, 54,230,209,163, 71, 12,224,243,241,145, 5, 31, 60,120,160,165,245,170,170, 10, 20,240,109,109,183, 30,
- 60,208,102, 96, 67, 63, 25, 20,168, 6,127,233, 15, 81,131, 75,202, 14, 12, 32, 37, 62,164,208,135, 87, 12,240, 11,141,169, 14,
- 40,108,254, 3,129,192,245, 27,191,126,255,102, 98, 98,250,207,204, 12,186, 20, 1,114,160,221,223,127,236,151, 46, 17, 95, 1,
- 48,128,239,149, 60,122,244, 40,176,171, 42, 45, 45, 77,204, 68, 11,133,117, 0,121,109,127, 96,113,239, 62,203, 61,120, 45, 67,
-218, 78, 16, 3,200,133,212, 10,108,155,239,140, 22,238,104, 0,235,189,240, 0, 1, 68,120, 21, 16,241,235,130, 48, 91,133, 68,
-182, 19,177,214, 19,196, 87, 60, 88, 93,142,231,242,116, 92,197, 52,124, 2,153, 72,189, 88,149, 65, 76, 3, 54,236,255,173,194,
- 57, 27, 1, 94,243, 3,106,174, 62,126,246,233,251,119,208,181, 86, 42, 74,130,192, 10,224,226,213, 87, 55,111,191,227,224, 96,
- 86, 86, 20,120,255, 17,251, 65,243,143,159,255, 87,150, 7,153,239, 97,199, 96,160,197,200,206,198,240,231, 15,168, 31, 32,192,
-203,112,239, 17,131,187, 29,131,188, 12, 72, 13, 77, 83, 18,188,220, 39,114, 72,122,160, 0,214, 65, 12, 82,157, 10, 41,235,225,
- 21, 0, 77, 75,127, 56,192,117,117, 59,158, 43,221,225,128,245,238,157,159,191,127, 49, 50,179,252,253,255, 31,152, 78,254,252,
-253,247, 27,216, 17,248,251,151,241,246, 77, 6, 6, 47, 82, 93, 2,236, 7, 0, 59, 82,220,220,220,252,252,252,196,215, 1, 68,
- 14,254, 80, 88,250, 87, 87, 87,183,182,182, 2, 75,127,120,101, 0, 36,129,213, 0,176,244,223,188,249, 46,100, 2, 0, 50, 75,
-172,103, 23, 63, 90,250, 99,150,254, 64, 0, 16, 64,131,101, 8, 8,107, 97, 74,100, 65, 76,210, 90, 85,236, 38, 80,105,237, 16,
-208, 37,196, 24,197,207,207,250,254,195, 15, 17, 33,174, 80, 63, 13, 96,254,100,103,103,102, 6,182,215,254,255,247,113, 83,246,
-118, 85, 6,154,240,246,253,119,160, 26,172,122,101, 37, 25,239, 62,252,175,161,204,224,100, 9, 26,242,186,113,135, 65, 79,131,
- 65,144,143,193,211,129,225,223, 63, 6, 96, 39,224,214,125,144, 26,252,129, 76,144, 65,252, 70, 18, 74,198,205,136, 1,192,246,
- 43,176, 5,122,247,238, 93, 96, 75,220,214,214,150,135,135, 7,114, 98,176,130,130,194,169, 83, 98,141,141, 79, 25, 25, 25, 95,
-189, 82, 83, 83, 83,184,246, 12,139, 94, 52,145, 85,171, 86,161, 52, 26,254,255, 15, 15, 15, 39,190, 14,160, 91,233, 79, 70,221,
- 0, 7,239,100,164,217,110,220,252,207,202,192,246, 15, 52,239,251,251,239,159, 95,255,255,126,251,243,231,187,138, 6, 25,142,
-209,209,209, 1,134, 63,145,165, 63, 3,248,154, 79, 96,147, 31, 94,124,163,113,113, 1, 72, 47, 1,174, 12,141, 75, 16, 0,155,
-255,144,162, 31, 72, 34,183,253, 33,179,196,192,202, 96,180,244,199, 90,250, 3, 1, 64, 0, 13,135, 85, 64, 4,123, 30, 4,193,
-255,255, 12, 76,225,239, 41,175, 3, 32,139,145,152,194,222,227,105,254, 3,129,184, 8,207,227,167,159,129, 21, 64,223,244,211,
-118, 86,178, 70,122,226,140,172,140,144,229, 64,144,149, 26, 64, 89,160, 26,172,122,149, 21, 56,142,158,253, 14,172, 0, 68,140,
- 25, 42, 50, 25,242, 19, 24,248,121, 65, 35, 63,141,147, 24, 26,242, 65, 10,142,158, 5,169, 33,105,160,140,242,197,160,180, 91,
- 6,250,230,205, 27,200, 61,136, 91,183,110,125,244,232,145,135,135,135,162,162,226,231,207,159,223,191,127,127,253,250,159, 3,
- 7,128,133,133,137,163,163,163,140,140,204,181,103,175,209,244, 2,219,173,248,111,236,250,243,231,207, 96, 75,204,240,210, 31,
- 79, 53,128,191, 14,248,164,165,205,126,233,210,191,255,255,185,153, 88,152,153, 25,255, 0, 75,255,223,191, 63,255,250,245, 91,
- 95,159, 36,151,112,113,113,145, 52, 7, 0, 47,238,113,113,105, 81, 7, 0,155,249,105,224, 54, 62,114,233, 15,111,254,143, 2,
-252,165, 63, 16, 0, 4,208,232,113,208,176,214, 34,149,214,143, 66,235, 0,188,213,137,168,168,228,157,251,207,244,181,197, 42,
-242, 45, 22, 44,191,204,201,193, 98,160, 35, 6,191, 78,249,223,191,255,119,238,191, 23, 23,195, 62,234,170,164,172,182,117,223,
-197,132, 96,134,255,247, 24, 44,130, 24,148,100, 25,150,110,132,201,229, 51,252,253,203,176,117, 31, 72, 13,237, 2, 10,107,255,
-140,118,203, 64,111,220,184,161,169,121,127,254,124, 32,243,111, 83,211,165,117,235,190,169,171,171, 3, 43,128,123,247,238,189,
-124,249,210,200,200, 8,216,132,199,181, 12, 84, 73, 73,233,244,233,211,120,238, 24, 33,242,122, 94,248, 16, 16,144,164,117, 15,
- 0, 88,178, 67,138,126, 92, 67, 64,184,164, 16,181,154,140,204, 91, 91,187,191,251, 15,252, 98, 99,229,249,207,242,227,223,191,
-143,191,126,125,118,114,254, 47, 39, 71,116,135,152, 17, 88,254, 18, 63,244, 15,215, 2, 47,238,209,184, 36,213, 1,184,214,206,
-226, 1,104,165, 63,124,228,103,116, 54, 24,127,233, 15, 4, 0, 1, 52, 90, 1, 80, 19, 64, 39, 0, 8,141, 2, 9,137,170,124,
-248,248,230,228,217,103,230,198, 82,158, 46, 74, 59,246,222,219,186, 11,148,106,107,138,173,128,165, 63, 80,156,157,157, 13,215,
-126, 96, 35,203,172,173,107, 75,251,231,129, 86,130,206,104, 1,173,254,116,177, 6,173, 4,237,175, 5,149,254,253,243, 24,254,
- 50,240, 17,191, 31,152,212, 54, 59,174, 30, 3,237, 86, 1,125,253,250,213,208,240, 7,164, 36, 49, 49,249,191, 99,199,189, 91,
-183,110, 65, 54,130, 57, 56, 56,216,219,219,227,217, 4,160,172,172,124,249,242,101, 92,157, 0, 96,243,223,216,216,152, 24, 55,
- 64, 22,131, 66, 22, 5, 1,217,196,215, 1,104, 27,205,136,220,119, 6,175, 3,112,201, 18,208,207,196,244,203,220,252,141,148,
-212,151, 75,151,120, 30, 61,250,161,168,248, 85, 91,251,175,172, 44, 3,209,151,109,145, 87,118, 35,107, 65,227,226,247, 56,178,
- 44,154,189,164, 58, 3, 2,144,203,125, 72,111,128,212, 33,205, 97, 6,240,172,233, 0, 8,160,209, 10, 0,203,234, 29, 58, 24,
- 37, 43,167,251,248,209,229,181, 91,110,170, 40, 10,122,187, 41, 11, 10,112,188,255,240,227,252,229,151,192,182, 63,176,244, 7,
-202,226,209,107,101,159,122,248,224,236, 99,103, 63,121, 59, 49,204,110, 7,237, 4,190,251,144, 97,238, 42, 80,219, 31, 88,250,
- 3,101, 41, 47,208,201, 40,253,105, 52, 7, 32, 33, 33,241,224,129,200,153, 51,160,225,157, 91,183,248, 76, 77,181,132,133,133,
-225, 59,129, 9, 30, 5, 97, 97, 97,113,240,224, 65, 70,140, 61, 80,192,210, 95, 69, 69, 5, 88, 67, 16, 83,250, 35,143,254, 67,
-186, 2, 68,214, 1,100, 23,103,184, 74,121,194,165, 63,172, 14,248, 39, 47,255, 13,136,200, 10,115, 50,138, 93,252, 62,197,111,
- 32, 37,122,241,151,254,160, 69,162, 35,126, 2,128, 1,219,126, 96,120,149, 0, 16, 64,132,151,129, 18, 63,197, 74,204, 50, 80,
-226,245, 18,175,157, 18,123,177,250,142, 60,123, 73,154,139,102,101,227, 86, 82,177,120,247,250,206,189, 7,207,143,159,121, 2,
- 63, 11, 72, 92, 76,138,224, 89, 64,130, 34,106,222,193,221,231,142, 79, 91,185,245, 86,219, 84,186,158, 5, 68,231,210, 31, 8,
-212,213,213, 47, 94,244, 74, 76, 60, 3,238, 1,152,132,133,233,115,113,113,145, 84,127,132,135,135,223,188,121,243,204,153, 51,
-204,160,185,118, 38, 96,209,207,198,198, 6,108,251, 3, 77, 38,181,244, 39,163, 14, 24, 5,180, 6,160,181, 64,105,173,238,179,
-220,177,238, 9, 24,157, 12,192, 15, 0, 2,136,133,146, 1, 1,154,234, 37,210,192, 65,229,102, 82, 1,176,172, 7, 34,117,178,
-244, 2,203,122, 34,119,123, 81,203, 23,116,219,195,129, 12,128,197,189, 37, 24, 80, 88,139, 16, 83,220, 99, 2,204,178, 30,200,
-134,108, 11, 24,173, 0, 6, 85, 29,192,240, 16,139,184, 73,181,201, 8, 15, 25,130, 87,190, 3, 4,208,232,165,240,163, 96, 20,
-140,130, 81, 48, 66, 1, 64, 0,141,222, 8, 54, 10, 70,193, 40, 24, 5, 35, 20, 0, 4,208,104, 5, 48, 10, 70,193, 40, 24, 5,
- 35, 20, 0, 4,208,104, 5, 48, 10, 70,193, 40, 24, 5, 35, 20, 0, 4,208,104, 5, 48, 10, 70,193, 40, 24, 5, 35, 20, 0, 4,
-208,232,165,240,212,209,139,231, 88, 52,154,234,189, 7, 6,171, 87,175, 38, 67,239,253,251,247,239,222,189, 75,158,222,209,180,
- 49,170,119, 84,239, 80,209,139, 7, 0, 4, 16,206,141, 96, 68,158,130, 73,117,189, 84, 7,105,161, 31, 25,216,216,102, 45,229,
-196,163, 6, 88,134,226,217,123,137,223,205,112,189,189,189,189,197,197,197, 36,221,150, 14,215,123,101, 42,159, 78,246, 39, 50,
-110, 90,215, 19,158,242,255,205, 95, 32, 99,214,172, 89,224, 75,107, 73, 0,102,234, 43,254,124,250,196,201,201, 9,172, 3, 66,
- 67, 67,105, 23, 5, 68,238,171,192,234,223,129,210,139,203, 52,250, 36, 96, 70, 70, 70, 38, 48,128,108, 97,251,245,235, 23, 51,
-248,108,231,255,255,255, 51,140,130, 81, 64, 61, 0, 16, 64, 44,184,210, 58,214,164,198, 72,232, 86, 57, 72, 38, 33, 79, 47, 49,
- 45, 98,178,193,238,221,187, 25, 56, 52,241,148,194,229,229,229, 98, 98, 98,104, 82,192, 2, 29,191,177, 16,189,144,162,255,196,
-137, 19,144,106,128, 36,189,255,174,213, 49,105, 53, 45,218, 7, 58,174, 0,200,134, 72, 1, 69, 8,250,136,239, 83,209,191,255,
- 12, 43,118,128, 52,122,218,179,106,171, 92, 5,214, 1,160, 10,143,136,106, 64, 88,238,212,235,219, 47, 14, 95,147,255,250,147,
-219,211,253,131,180, 4,227,153, 51,199, 62,125,250,225,228,228, 68,163,116, 70,211, 70, 3, 30,189, 4, 75, 76,226,147, 37,169,
- 0, 24,191, 93, 93, 93,165,165,165,196,236, 55, 70, 6,192,178,158, 5, 12, 32, 59,215,128,137, 4,104,200,223,191,127,255,128,
- 1,144, 65, 35, 7,111,221,186, 21,127,224,120,121, 17, 62, 77,122,219,182,109, 36,169, 31, 5,116, 3,144,253,192,104,235,254,
- 1, 2,136,133,164,210,223,216,216,248,236,217,179, 4, 51, 33,214, 76,133, 71, 47,154, 57,192,178, 24, 50,172, 65,246, 1,147,
-105,190,179, 24, 56,213,102,173,114, 0, 53,141, 87,243,131, 74,127, 66, 37, 56,230,217,241,192, 18, 28,255,169, 44,112,189, 64,
- 54,176, 5,109, 1, 6, 36,233,133,148,248, 16,178, 3,182, 91, 27, 88,250,151, 5,115,116,173,253,129,199,131,252,223,139,117,
-212,152,191,126,255, 95, 20,203,113,226,234,159,239, 95,255,127,251,197,224,104,112,245,234,173,191, 4,187, 2,247, 30,247,159,
- 59,205,205,203,199, 40, 33, 41, 46, 42,174,242,240,238, 47, 5,173,223,172, 28,175,246,172,127,179,126,253,250,192,192,192,209,
-172, 66, 21, 0,140, 95, 95, 95, 95, 96, 29,128,150,134,141,140,140, 26, 27, 27,129, 82,216, 91,100, 44, 44,108, 48,240,248,241,
- 99, 85, 85, 85, 96, 53,192,203,203,123,231,206, 29, 30, 30,158,211,167, 79, 31, 63,126, 60, 59, 59, 27,103,202, 7, 71, 61, 60,
-255,194,115, 34, 68, 4,200,133,180, 18,176,130, 77,155, 54, 97,106,129,139, 0,185,196, 20,232, 27, 55,110, 36, 73, 61, 85,192,
-139, 23, 47, 36, 36, 36, 70,147, 28,158,114, 31, 23, 0, 8, 32, 22,146, 74,127,252, 54,225, 57,168, 4,255, 17,231,104,165,127,
- 71, 71, 71, 69, 69, 5, 92,132,248, 58, 32,205,120, 22,131,176,218,172, 93, 14,240, 86,191,171,171, 43,144, 1, 33, 49,199,197,
-144, 75,112,172,165, 63,102,159, 0,211, 83,240,150, 62,176,198, 66, 14, 10, 98,244, 98,109,233, 3, 75,127,252,222, 20,249, 94,
-164, 42,207,204,201,206, 40, 47,197,252,230,253,191,223,127,152,223,126,248,255,241,203,255, 59, 79,254, 49, 48, 49,136,112, 93,
- 2,250, 75, 73, 73, 9,171,222,127,255, 87,107, 42, 43, 29,127,241, 82, 81, 78, 84, 71, 79,137,153, 93, 72, 94,241,253,251,239,
- 63, 94,189,248,251,228,229, 15, 46, 22,160, 86,125, 92,122,105, 55, 34, 68,124, 20,147,167, 23,179, 69, 66,235,177, 20, 96, 56,
- 2, 45,213,210,210,218,188,121, 51,114,116, 0, 51, 17,158,210, 31, 8, 88, 89, 89, 57, 56, 56,222,188,121,163,166,166,102,104,
-104, 8,172, 15, 38, 77,154, 4,108,245,235,234,234,174, 91,183, 14, 88, 1, 92,186,116, 9, 88, 37,224,234, 7,248,251,251, 67,
-252,139, 43, 23,227, 41,148,129,101, 55, 36,100,176, 54,224,128,226, 47, 95,190, 36,166, 2, 32, 73, 61,164,248,222,191,127, 63,
- 86, 41, 71, 71, 71, 98, 74,118,160,118, 41, 41, 41,117,117,245,209,106,128, 84, 0, 16, 64, 44,152,185, 11, 87,251,157, 62, 14,
- 2,230, 22, 96,233, 79,100,133,129,115,180,135, 33, 13, 72,174,158,101,198,192,246, 29,207,232, 63, 90, 9,142, 86,153,225, 47,
-193, 33, 0, 94,121,156, 56,113, 2,185,249, 79,140,222,101,165, 60,152,185, 52,186,231, 43,126, 93,255,254,253, 99,231, 98,100,
- 98, 98,224,226,100,248,240,233,223,207,255,255,185, 57, 25,127,252, 99,248,254,243,191,140, 40,211,191, 63, 12,183, 31,255,221,
-179,103, 15,214, 78,192,167,143, 39, 4, 4,184,217,216,254,167, 38,152,255,253,251,255,197,171, 95,143,158,126, 96, 96,125,204,
- 41,248,243,249,171, 7, 76,108, 31,175, 93,251,240,244,229, 30, 82,231, 18, 40, 28, 17, 66,190, 89,140, 24,128,124,226, 30,230,
-253,157,184,192,187,119, 46,112,182,144,208, 30, 92, 69, 36,193,250, 6, 89, 4, 79,221, 3, 76, 90, 62, 62, 62,144,114,255,234,
-213,171, 16, 6,164,237, 15, 20,199, 99, 35, 59, 59,251,215,175, 95, 53, 53, 53,129,101, 31, 48, 33, 37, 39, 39, 3, 5,127,255,
-254,189, 96,193, 2, 96, 7,250,220,185,115, 43, 87,174,252,254,253, 59,230, 93, 55, 16,224,237,237, 77,118,164,204,157, 59, 23,
-127, 37, 74, 76,139, 30,110, 8,145,234, 25,192,231, 53, 1,139,239,103,207,208, 47,244, 1, 10, 18, 95,160, 63, 3,131,209,106,
- 0, 19,192,199,124,176,118, 5, 0, 2,136,133,152, 86, 60, 37,197, 49,169, 0,185, 29, 77, 84,171,127, 86, 58,131, 36,195, 44,
- 95, 80, 86,156,117, 54, 13, 62,218, 3,110,245,127, 68,238, 7,224, 47,193, 95,189,122, 5, 47,181,137, 44,193,241, 3, 72,189,
- 2, 44, 47,112, 29,182,129,167, 0,130,140,255, 96,234, 5,106,121,115,173, 72, 18, 60,248, 3, 17,249,254,247,255,143, 95, 12,
-191,193,220,223,127,254,255,103, 2, 49, 46, 95, 58, 11,172, 71, 25, 24,216,208,140,253,248,241, 42, 43,187,160,136,144,192,135,
-119,223, 62,124,252,112,226,204,139,167, 47,255,179,113,127,147, 86,249,242,253,219, 27, 85,189,223, 10,154, 63, 87,206, 62,123,
-231,206, 29, 6, 6,142,209,156, 67, 97,243, 31, 8,128,205,127, 96,113,191,101,203, 22,109,109,237,208,208, 80,130,165, 63,164,
- 2,120,253,250, 53, 23, 23,151,157,157, 93, 79, 79, 15,176, 67, 0, 76, 6, 11, 23, 46, 4,150,254,192, 70,198,222,189,123, 47,
- 95,190, 44, 34, 34,130,231, 42, 27, 96,253,141,107, 8,104,246,236,217,120,172,166,202, 16, 16,208, 16, 50,134,128,128,165, 54,
-102, 5, 64,198,241, 77,163,213, 0,169, 0, 32,128, 6,215,113,208,152,247,138, 16, 57, 56, 0,106,239, 87,220,103, 96,102, 75,
-115, 83, 96, 16, 80,152, 5,190,248, 15,255,232, 63, 85, 6, 49, 32, 19,191,240,182, 63, 50,128,204, 10, 96,118, 47,136,108,177,
- 46, 45,225,198,236, 13,240,126, 42,126,240,235,255,139, 55,192,214, 31, 19, 15, 23,168,171, 14, 44,244,127,252,100, 0,214, 1,
- 64,242,215,111,134, 31,223, 25,126,253,132,181, 64, 81, 43, 15,158, 63, 69, 79, 31,201,201, 42,242,252,103,101,121,243,253,251,
-254,131,143,175,221,121,250,238,221, 23,109,227,191, 95,127,252,249,241,243,239,247,111,255, 94, 60, 98,248,254,149,161,187,187,
-123,244,132, 40,172, 61, 21, 34, 19, 36,164,249,175,165,165, 5,108,248, 3, 43, 3, 96, 5, 0,233, 4, 16, 44,253, 33, 67, 64,
- 6, 6, 6, 28, 28, 28,192, 66, 63, 41, 41,169,189,189, 29, 88,146,158, 60,121,242,224,193,131,151, 46, 93,250,248,241,163,170,
-170,234,167, 79,159,240,220,114, 19, 16, 16,128,217,182,128,244,120,240,247, 15, 6,106, 8, 8,107, 39,128,164,230,255,104, 53,
- 64, 54, 0, 8,160, 65, 81, 1, 64,134,254, 33,221,100,228, 58, 0,158,217, 32,131,245,196,143, 20, 67,202,125, 96,195, 31, 60,
- 10,196, 54,107, 41,245,221, 12, 89,249,227,226,226,178,103,207, 30, 92, 93, 25, 92,189, 25,172,133, 59, 49, 99, 65,241,149, 95,
-165,196,153,162,124,217,128,197, 61, 63, 47, 35, 19, 35,184,225,207,240,255,199, 55,134,175,191,254, 3,187, 5, 95,127,252,255,
-247, 31,251,205, 31,241,249, 95,117,245,239, 73,104,188,219,189,253,213,187,119, 63, 12, 44, 63,233, 9,125, 97, 96,253,249,227,
-219,191, 87, 79,255,127,253,202,248,231, 15,163,144, 8, 35, 3,227,191,209, 92, 65, 21, 0, 73,207,200, 19, 42,192,154, 0,185,
-104,198, 58, 19, 0, 44,217,203,202,202, 88, 88, 88, 22, 45, 90, 52,127,254,252,196,196,196,142,142, 14, 96,137,252,224,193,131,
-239,223,191, 3,179, 9,176,237,159,145,145,129,103,241, 18,217, 83,175, 3, 53, 4,132,181, 19, 64,222,233,173,163,128, 84, 0,
- 16, 64,131,165, 7,128, 60,108,141, 89,208,227, 42,100,145,193,172,179,105,176,162,255,246,234, 73,247,193,171,128, 16,245, 1,
-158, 81, 32, 74, 70,120,128, 14,131, 55,255, 33,189, 1, 56, 27,216, 3,128,236,177,194,156,124, 38, 88,250, 67, 86, 1, 97,234,
-253,243,151,225,235,183,255, 63,127,129,166,124,129, 36, 11, 59, 84, 16, 88, 1,124,255,253,255,237,187,255,175,223,255, 63,119,
-237,207,191,127,160,161,188,171, 79, 81,204,252,243,135,225,217,227, 95,143,239,190, 63,114,252, 61,176,145,119,237,198, 63,159,
-168, 63,108, 44,255, 95,191,100, 56,178,139,225,211,167,255,255,255, 49,216, 56, 49,114,112, 48,120,122,250,227, 95,105,184, 97,
- 65,122, 64, 2, 69, 43,116, 41,185, 65,140,164,123, 23,224, 64, 72,104, 15,221, 18, 51, 90, 2, 6,114,141,140,140,206,157, 59,
-183,121,243,102,100,113, 92, 83,193,192,182,133,128,128, 0,164, 17, 61,111,222, 60, 96, 63, 0, 88, 19, 64,106, 14,160,212,135,
- 15, 31,128, 61,128,111,223,240,221,245,146,154,154,138, 60,116, 3,105,254,227, 31,255, 25,216, 33, 32,180, 78, 0, 37,205,127,
-136,246,209,182, 63,145, 0, 32,128, 6, 75, 5,112,246,236, 89, 92,107, 87,128,226, 4,214,143,178,115,175, 86, 56,196,240,231,
- 44,131, 34,119, 90,171,226,172, 3,192,142,246, 44, 88,101,224, 74,252, 40, 16,242, 74, 80,204, 85,161,152, 57, 28, 88,138, 65,
- 74,127,228, 25, 96, 72,219, 31,194,197,218, 3,128,235, 37,175,100,185,125,251,246,163, 43,147,254,137,254, 99, 98, 97, 96,101,
- 2,229,180,223,255,254, 3, 11,247,207,159,255,255,250,205,240,231, 55,168, 62, 40, 44, 2,117,167,174, 62,125,130,169,247,225,
-173,137,218,218,255, 14, 31,252,203,200,196,240,250, 5, 35, 7, 39,195,193, 29, 12,191,190, 3, 75, 8, 6, 61, 35,214,103,143,
-254,217,219,123, 3,243, 45,158,157,132,192,210,191, 43,155,161,108, 42,249,117, 0, 37, 23, 8,147,167, 23,215,176, 6,125, 0,
-100,229,143,143,143, 15, 36,234, 33,221, 89, 96, 51, 31,171,226,127,255,254,157, 63,127,222,214,214, 22, 46, 2,172, 3, 32,101,
-241,239,223,191,255,254,253, 11,140, 68, 81, 81, 81, 92,147,192,240, 81, 32, 50,218,239, 3, 56, 4,132,214, 9, 32,187,249, 63,
- 90,244,147, 10, 0, 2,136,180, 10, 0, 88, 16,211, 98, 39, 36,164,177, 12,204, 21, 64,134,139,139, 11, 90,219, 31, 82,140, 18,
-191, 85, 21,190, 10, 8,194, 37,166,237,143, 60, 3, 12, 1, 16, 46,100, 49, 40,126,189,240,210, 31,109, 62,128, 24,189,184, 0,
-176,249,143, 75,175,170,170,234,252, 57,191,157, 45, 88,129, 5,192,239, 95,255,216,217, 64,121,245,243,215,255, 63,127,255, 7,
- 22,253,103,175,252,253,251,239, 63,174,117,156, 64,189,139, 23,254,177,119, 96, 14,140,102,254,242,249,255,231,143, 12, 95, 63,
- 51, 42,170,254,255,251,155,145,133,137,227,195,187,127,207,158,252, 42, 41,244,193,223,246,159,144,207,160, 38,199, 48,185,136,
- 33,183,143,162, 58,128,236, 62, 1,121,122, 41, 95,247, 73, 94,202, 7,150,254, 13, 13, 13,200,141,253,174,174, 46, 32, 23,215,
-238,176, 95,191,126, 1,139,176, 31, 63,126, 48, 51, 51, 67,238, 62, 91,187,118,109,112,112,240,247,239,223,129,130, 63,127,254,
-228,225,225, 1, 86, 3,248,189, 67,222, 90,160,129, 29, 2,130,119, 2, 32,140,209,162,159, 62, 0, 32,128, 72,168, 0, 40, 44,
-253,241,104, 7, 22,250,144, 82, 30, 50,110, 14, 95,114,138,220,240, 71,171, 24, 80, 0, 51, 35, 3, 27, 19, 3, 39, 51, 3, 15,
- 11,195,207,207,171,219, 89, 25, 56, 79,165,133, 40, 50,112, 10,205, 90, 76, 84,195, 31,235,154, 31, 72, 9,142,127, 81, 60,114,
-233,143, 60, 31, 64,140, 94,252,165, 63, 30,189,109,157, 51,138,242, 51, 56, 56,128,173, 69, 6, 93,117,102,104, 88, 93,254,251,
-251,239,255,191,255,152, 75, 74, 74,240, 24,222,212, 50,163,164, 36, 3,216, 99,248,245,251,255,223, 63, 12,192, 46,132,131, 55,
-195,231, 15,140, 55, 46, 2, 11, 24, 38, 63,223, 32,252,165,127, 67, 50,131, 10,248, 72, 18,101,105, 6, 10,251, 1, 35, 1, 96,
-238,249, 2,173,236, 2, 3, 92, 90,128, 21, 0,176,172, 7,109,199,208,215,255,243,231, 15, 43, 43, 43,176, 77, 13,108,196, 0,
- 75,255,111,223,190, 1,155,255,130,130,130,120,150,129,194, 1,124, 64,149,152,193,159,193, 48, 4, 4,239, 4,144, 17,206, 68,
-110, 23, 24, 5,152, 0, 32,128,136,173, 0,104,212,246,199,218,181,199, 28,240, 33,219,106,130,163,255,148,148,254, 12,168, 51,
-189,240, 58,140, 1,188,154,150,160, 94, 92, 51, 1,196,232,237,155, 56, 3, 24, 92, 76, 76, 12, 71,206,130, 70,252, 33,179,190,
-224,161,255, 18,130,122,123,122,102,100,100,130, 55,124, 48,129,180,156, 58,196,240,245,203,191,255,255, 24,252,252,188,221,221,
-221,241,148,254,229, 49, 12, 2, 60, 12,207,222, 48,112,178, 51,252,251,207,192,205,193,208,154,206, 80, 61,115,152,215, 1,184,
-186, 23,196,164, 73,180,210, 63, 35, 35, 3, 82,244,111,222,188, 25, 88, 74, 98,173, 6,128, 21, 0, 19, 19, 19,176, 61,251,249,
-243,231, 51,103,206, 24, 26, 26, 2,171,129,143, 31, 63, 94,188,120, 81, 81, 81, 81, 88, 88, 24, 88,250, 3, 69, 8,118,104, 32,
- 59,194, 72,234, 16, 12,248, 16, 16,121,109,127,178,117,141, 2, 32, 0, 8, 32,244, 10, 0,215,146,127, 34, 87,191, 81,210,131,
- 6, 42,192, 60,148,141, 96,105, 56, 43,109, 38,104,180,231, 22, 3, 8, 33,192, 71, 48,186, 79,182,155,137, 41,133,225, 62, 2,
-150, 17,144,253, 4,192,106,131,212,171,140,129,122,151,150,112, 67,234, 3, 82,111,232,133, 7, 23,100,214,151,248, 14,199,140,
-233, 8,189, 95, 62,129, 10, 8, 63, 63, 63,194, 97,181,132,250,197, 40,173,245, 14,224,208, 63, 3,234, 52, 47, 48,192,129,101,
+230,149,181, 27, 1,233,138,145,153,133,253,255,191, 63,255,254,253,217,114,228, 9,242,162, 80, 92,122,129, 65,244,242,229, 75,
+ 9, 9, 9, 50,236,165, 68,239,104,222,103, 32,101,165, 22, 64, 0, 13,249, 33,160,234,106,196, 21,118,173,173,102,244,211,123,
+ 10,116,169, 94,171, 89, 43,156, 65,170,203,113,237, 83,197, 37, 78,170, 57,195,173,175,250,235, 43,203,219,251,170, 63, 46, 73,
+255,121,124,235,191,226, 19, 94,173,111,124,242,108,220,188,184,212, 31, 57,114,196,198,198, 6, 82,244, 67, 10,113, 72, 35, 22,
+ 94,136,255,131,129,135, 15, 31,162,233, 61,119,238,156,177,177, 49, 39, 39, 39, 11, 11, 11, 80, 35, 92, 59,164,220,255, 11, 3,
+ 63,127,254, 60,123,246,172,131,172,221,224, 15, 61,160,203,223,190,125,123,252,248,113, 1, 1, 1,180,141, 17,132,251, 4,140,
+ 76,236, 28, 66, 2,130,234, 95,191, 60,253,242,249, 49,168, 27,192,248,159,225, 63,190, 17, 33, 96, 40,173, 89,179,230,214,173,
+ 91, 64, 54, 48, 24,139,139,139,137,183, 14,162,247,222,221, 59,192, 48,103, 99,103, 47, 40, 40,164,233, 46,132, 17, 14, 0, 2,
+104, 16, 85, 0,184, 78,154,100,192,123,208, 24,164,224, 70, 46,202,137, 7,148,232, 29, 78,128,194,189,163,116, 40,189, 62, 63,
+188,254,241,208,170,111,223,126, 42,152, 51,113,202, 48,170, 62,186,100,202,112,241,253, 79,158, 11, 92,113,111, 24,165,177,106,
+186,118,237, 26,176, 4, 1, 22,118, 44, 48, 0,169, 12, 32, 13,255, 63,127,254, 0, 75,112, 96,251, 29, 88,250,239,219,183,143,
+ 89,216, 4, 89,239,183,111,223,206,159, 63,111, 97, 97,193,198,198, 6,191, 52, 13,168, 29, 88, 54,253, 1, 3,160,198,239,223,
+191, 3,213,124,249,242,101, 48,199,108, 85, 85, 21,114, 38,250,252,249,179,129,129, 1, 25,122, 23, 47, 59,203,201, 41, 6, 44,
+144, 65, 21, 0, 35,195,127,200,110, 1,220,197,242,179,103,207,128, 33, 19, 21, 21,165,164,164, 4, 57,151, 66, 72, 72,200,196,
+196, 4,171,226, 4,119,148,157,113,151,111,220, 56,192,203, 85,212,223,100,104,164,243,252,201,171, 93,219, 14, 40,232, 24,126,
+250,244,113,180,176, 38, 27,160,141,247, 34, 47,253, 7, 8, 32, 22,172,101, 1,164, 20,192,197,166, 81,233,159,149,133,253,158,
+244,247,239,223, 47, 95,190, 28, 79, 29, 0, 41,193, 73,109,194, 83,168, 23,222,246, 39,163,249,143,118,243, 12, 46, 5, 52, 10,
+109, 72,143, 1, 78, 66, 4,223,189, 3,237,154, 17, 18,218, 51, 8,147,239,175,199,215,216,143, 45,254,249,237, 95,144, 10,179,
+186,232,159,127, 66,255, 89,133,152, 63,191,101,227,252,252, 93,243,226,148,179,106, 25,223,184,228,177,181, 91, 25,175, 95,191,
+ 14, 44,193,157,156,156, 32,229, 56, 16, 0, 11,113,200,213, 55,192, 66, 28,216,126,127,252,248,241,254,253,251,129, 53, 1,218,
+206, 55,160, 50,160,154,139, 23, 47, 2,235, 15, 96, 3,150,157,157, 29,162, 23, 82, 1, 0, 53, 2, 75,183,203,151, 47,255,248,
+241,131,224,166,185, 7, 15, 30, 0,109, 1,150,188, 64, 55,136,139,139,171,170,170, 66, 6,151,136, 1,148,232, 5, 58,181,166,
+166, 6,126, 24, 42,176, 52, 7,214,136, 98, 98, 98,194,194,194, 68,150,254,243,146,146,188, 12, 13,129,108,137,220, 92, 78, 46,
+241, 47,159, 30,125,250,120,247,255,255,191,160, 3,227,254, 17,184,131, 26, 88,220,139,136,136, 44, 90,180, 40, 62, 62,126,211,
+166, 77, 64,238,161, 67,135,126,253,250,197,192, 32,135, 85,253,219,246, 34, 56,155,231,215,111,169, 63, 63, 10, 74,235,251,123,
+ 26,187,123,166, 73, 51,253,157,214,211,231, 20, 17,133, 75,239, 40, 32,169,244,103, 64, 58, 10, 20, 8, 0, 2, 8,123, 15, 0,
+249, 8, 20, 92,108,170, 3,250,159,225, 76,133, 1, 40, 88, 29, 64, 18,128,215,169,243, 3, 23, 97,202, 38,174,143,163,105, 51,
+ 28, 98, 56, 50, 73,240,218,238, 1, 4, 63, 62,188, 81,187,191,245, 21,243, 95, 21,126, 6,121,185,255,204,122,108, 44, 74, 74,
+108, 63,127,252, 60,250,248,231, 71, 22,230,127,172, 63,246, 44,102,242,202,255,199,130, 62, 22, 4,191,252, 82, 80, 80,208,209,
+209, 17, 88,116, 2,139, 81, 96, 67, 30,210,240, 7,150,221,192, 86,234,193,131, 7,153,192, 0,171, 94,160,202,171, 87,175,218,
+216,216,240,241,241, 1,181, 3, 69,128,165, 63,176, 20,251,244,233,211,233,211,167,129,213, 0,208, 52,200, 76, 0, 46,112,233,
+210,165, 99,199,142,221,191,127, 31,168, 5,104,187,132,132, 4,176, 21,108,101,101,197,205, 77,120, 43, 56,217,122,129, 78,130,
+220,252,131, 44, 8, 57, 23, 26,216,138, 34,166, 10, 97, 98,102, 67,230,190,152, 60, 89, 34, 64,166,187,123,226,239,223, 95,193,
+129,195,248, 15, 88,250,255, 7,117, 1,254,227, 30,127, 59,121,242,100, 69, 69, 5, 48,208,130,130,130,100,101,101,129, 21,237,
+182,109,219,204,221, 9,109,250,101,100, 92,114,231,249,218,219, 79, 55,109, 92,200,204,204, 88,148, 27,171, 47, 33, 50,171,160,
+126, 54, 49,122, 71, 1,142,210, 31,185,201,143, 86, 31, 0, 4, 16, 9,171,128,104,125,220,163, 18,110, 64,139, 38, 60,133,122,
+ 25,200, 26,247,167,122, 91, 30,126,153, 37,241,133, 56, 86,149,192,182, 63,145,205,127, 96, 33, 8, 44,254, 48,185,200,130,152,
+ 0,174, 6,126,203, 32, 38, 23, 43,120,119,245,220,179,167,159,196,120, 89,148,120,255,179,136,252, 99,177,244,224,214, 95,204,
+105,212,203,206,207,201,246,229,251,183,111,127,229,152,191,189,191,116, 12, 75, 41,198,196, 4,185,236,254,246,237,219,192,214,
+ 58,176, 16, 23, 6, 3, 96,203, 84, 64, 64,224,227,199,143,192, 54, 41,176,120,130,140,242,163,233,133,136, 3,139, 93, 96, 29,
+112,235,214, 45, 46, 46, 46,160, 46, 96,243, 89, 84, 84,148,135,135, 7, 40, 2,172, 66, 32, 67, 67,152,149, 7,114,251,125,247,
+238,221,119,239,222, 85, 84, 84,116,119,119, 55, 51, 51,251,246,237,219,190,125,251,128, 29, 11, 96,245, 67,176,237,191,123,207,
+222,123,207, 63,242,170, 88,168,185, 39, 75,155,249,189,255,201, 4, 20, 33,168, 23, 88,250, 3, 43, 12, 96,229, 1, 44,130,245,
+244,244,224,195, 56, 16, 6,193,210, 31, 88,244,115,243, 72, 9, 9,235, 44, 93,113, 41,105,222,188,109,231,207, 3, 17,176, 7,
+192, 0,154,238,254, 10, 85,195, 8, 68,248,214, 3, 1, 11,122, 96,171, 63, 39, 39,135,151,151, 23, 24,116,107,215,174, 5, 58,
+230,205,155, 55,106,106,106, 4, 83,215,196,243,183,123, 78, 92,153,221, 83,201,194,252,157,233,239,231,174, 9,243, 86, 30, 58,
+251,140,137,133,212, 19, 70, 71, 1,145, 0, 32,128, 88,136, 47,232, 7,243, 84,204,136,173, 6, 32, 67, 55, 36,141,222, 96,118,
+ 47,224,253, 0,130, 61,143,207,159, 63, 3,155,165,192,102,181,169,169, 41, 26,247,212,169, 83, 16, 65,172, 0, 34, 11, 36,129,
+ 45, 83, 96, 51, 22, 88, 52, 64, 4,145,185, 88, 1,223,143,183,219, 30,253,144,126,207,108,200,199, 40,250,154, 65,133,133,159,
+137, 81,248,255,143,151, 95, 95, 50, 94,125,244,239,197,215, 31,192, 50,152,225,223, 45, 6, 35,119, 92, 21, 0, 59, 59, 59,176,
+ 20,150,150,150,118,117,117, 5,150,236,192, 34,242,237,219,183,192, 34, 9, 40, 5, 44,226, 33,199, 31,253,195,208, 11,209, 14,
+ 84, 0, 76,246,192,142,175,138,138, 10, 63, 63,255,151, 47, 95,206,159, 63, 15,172, 21,128,102,254, 4, 3, 60,173, 34, 96,245,
+246,228,201, 19,125,125,125, 7, 7, 7, 25, 25,153,175, 95,191, 2,235, 15, 96, 55,247,248,241,227, 4, 7,115,128,122, 95,190,
+251, 40,164,102,161,100, 27, 46, 32,163,246,243,235,135, 71, 39,183,222,222,187,144,160, 94,200,236, 5,176,115, 35, 46, 46, 14,
+ 44,112,129, 53, 1,164,232,135,140, 5, 1,217, 88,111,200,129, 86,123, 44, 28, 2,130,234, 2, 66,234, 76, 76,172,192,226,126,
+238,252,253, 73,137,142, 16,189,169,169,169, 64,199, 67,244,130,189, 12, 46, 10,176, 77, 3, 0, 3,118,243,230,205, 89, 89, 89,
+146,146,160, 3, 62,247,238,221, 11,172,204, 56,193,192,219,219,251,216,181,239,120,124,189,236,230,227,222,211, 55,230,116,148,
+203,168,203,127,253,242,126,227,246,211,151, 46,223, 20,248,255,143,237,197, 75,239,156,232,163, 87,191,143,150,215,164, 2,180,
+147,126, 48, 59, 4, 0, 1,196,130, 89, 22,192, 15,185,197,197, 30, 84,128,236,130,155, 66,189,100,143,255, 80,222,234, 39, 70,
+ 10, 79, 81, 78,246,170, 33, 96, 78, 6, 22,247,239,223,191,199,202, 37, 18, 0,107, 11, 96,249, 11, 44,244, 21, 20, 20, 48,185,
+152,224,245,155,199,199,158,127,247,230,226, 58,252,248,159,148, 17,187,226,207,179,239,175,101,173,239,186,244,239,193,199, 47,
+191,254, 63,253,252,151,147,133,233,207,199, 23,252,216,218, 49,240, 58, 0, 88, 98, 62,124,248,240,198,141, 27,218,218,218, 64,
+ 7,159, 56,113, 2, 50,178,143,107, 16, 31,168, 23,210, 9,128,232, 5,214, 1,143, 31, 63,214,213,213, 5, 22,223,192,250, 3,
+ 40, 2, 20,135,172, 14,194,211, 3,120,244,232, 17,208,124, 99, 99, 99, 96,233, 15, 84, 12,236,130,152,155,155, 3,173, 6,138,
+ 3,107, 14,252,161, 4, 84,243,143,137, 77,218,192, 5, 88,250, 51, 49,179,114,242,137,202,153,123, 63, 60,177, 9,191, 94,160,
+ 59, 63,124,248,240,244,233, 83, 57, 57, 57,107,107,107,160,165,144,145,159,248,248,120,136, 2, 96, 29,134,199, 82, 14, 14, 97,
+ 97, 81,253, 95, 63, 63,190,121,123,254,231,207,247,191,127,131,230,183, 33,122, 95,190,120, 1,215, 11,106,253,227,168,245,158,
+ 63,127,190,116,233,210,232,232,104, 96, 88, 49,128,175,163, 1,246, 6, 42, 43, 43,129,181, 17, 76, 9,206,229,137,183, 62,125,
+ 43, 63,120,161,163, 36,221,214,199,229,235,151, 55,171,214, 29,156, 57,119,237,246,162, 4,165, 87, 79, 58, 63,189, 16, 18, 18,
+198,163,119, 20, 16, 57, 22,132, 89, 37, 0, 4, 16, 11,214,161, 24,130,236, 65, 14, 40, 95,163, 73, 12,104, 49,109,161,255, 13,
+ 98,200,101, 55, 90,101, 64,141,195, 32,113,130,155, 55,111,194,230,241,176,112, 73, 2,192, 34,120,247,238,221,144, 75, 60,144,
+185, 88,187,249, 23,223,125,255,248,235,223,197,215,127,158,125,248, 35,126,130, 69,111,213,157,135, 15,174,222, 60,249,235, 15,
+ 11,243,175,127, 12, 63,126,253,127,255,255,159,168,224,127,172,133, 56,124, 1, 40,100, 25,207,203,151, 47,229,229,229,129,245,
+ 22,100,216, 7, 72, 34, 54, 56, 17, 2,240, 77, 3, 16,114,112,222, 28, 7,172,156, 32,183,160, 40, 42, 42, 34, 87,108,103,206,
+156, 1,146,192,224,133, 92,186,135,235,218, 31, 96,104, 1,201,239,223, 94,126,249,252,248,239,223, 31,200,122, 55,129,171,106,
+ 96, 55, 8,164,247, 63,246,177,127, 96, 60, 78,158, 60, 25,216,204,183,177,177, 1,114,143, 30, 61,186, 97,195,134,236,236,108,
+164,210, 31, 39,120,254,237,103,236,182, 19, 5, 97,222, 33,177,193,223,126,124, 90,191,233,192,132,105,203, 22,185,153, 2, 75,
+255,209,178,155,234, 53, 1,114, 29, 0, 16, 64,212,220, 9,140, 60, 18,141,139, 61,156,192, 96, 40, 5, 32, 99,247,196,143,255,
+224,153, 51,192, 31, 71,192,226,195,213,213, 85, 80, 80, 16, 43,151, 36, 0,212, 5,212, 11, 47,238,209,184,104,224,251, 95,190,
+223,140, 12,103,222,252,124,245,247,239,222,123, 63, 86,173,254,177,239,137,232, 29, 54,254, 39, 31,127, 63,254,252,239,235, 31,
+134,111,127,254,179, 11, 75,224, 42,178, 33, 43,253,255,254,253,251,231,207, 31, 97, 97, 97, 30, 30, 30, 96, 29,240,251,247,111,
+136, 8,218,118, 48,100,189,144,149,254, 64, 53,223,191,127, 7,114,101,101,101,129, 45,107, 73, 73, 73, 96,181, 1,108,131, 3,
+107, 62,136,201,120,198, 69,129,205,112, 96, 95,225,236,217,179, 79,158, 60,129, 92,195,121,242,228,201, 47, 95,190, 0,197,129,
+157, 15,252, 65, 4, 84,195,244,239,215,211,243,123, 62, 60,185,245,239,239,239,239,159, 94, 63, 58,185,245,215,215,247,248,245,
+194, 29,243,237,219, 55,248,236, 52,176, 19,112,245,234, 85, 96, 57, 14,185,180,253,227, 71,156,235, 41,129,126,253,243,251, 11,
+ 39,183, 4, 7,167, 16,100, 71, 48,178,222,217,179,103, 67,244,254, 67, 13, 48, 96, 7,110,209,162, 69,192,214, 67, 83, 83,147,
+159,159,159,143,143, 15,164, 43,176,121,243,230,210,210, 82, 96,151, 11,143, 55,129,122, 23, 47, 94, 28,145,149,227,180,230, 96,
+ 73, 92, 80, 94, 89,230,143, 95, 95,238,223,125, 60,115,230,170, 13,190, 86, 14,178, 98,196, 39, 42, 96,101, 51, 90,184,227, 31,
+ 11,130,151,251,200,243,192, 0, 1, 68,253,163, 32, 48,111, 79,197,100, 83,185,189,143,177,144, 31,185,201,143,191,249,143,169,
+247, 20, 80,168,186, 26,147, 77,204, 16, 16,241,122,169,213, 27,128, 47,230, 33,190,249,255,238,157, 11,124,230,128,164, 14,132,
+130,130,130,175,175, 47,176, 25,136,149, 75, 36, 0,170, 7,234,130, 15,248,160,113,177,168, 87, 85, 81,229,102,230,101,100,248,
+253,255,255,245,247,191,150,222,249,185,252,216,179,211,119,223, 61,251,206,240,246,199,223,187, 95,254, 63,255,249, 95, 86, 89,
+ 5,107,105, 8, 89,181, 9, 44,172,129,133, 56,176,236,214,209,209, 1, 87,153, 66,102,102,102,144, 66, 28, 82,142, 99, 22,226,
+144,194, 29, 88, 79, 0, 21, 0,171,121,101,101,229, 15, 31, 62, 60,126,252,248,221,187,119, 64,167, 2,123, 21, 64,113,160, 9,
+ 16,101,184, 92,110,106,106, 42, 35, 35, 3, 44, 64,119,236,216,177, 5, 12, 14, 31, 62, 12,108,152, 91, 90, 90,226,153,243,128,
+235, 21, 23,226,127,123,239,194,205,221,243,175,110,157,126,125,235,204,135,199, 55,176, 51,253,195,175, 23, 88, 57, 1,155,219,
+124,124,124, 23, 47, 94, 4,214, 58,200,213, 0,164, 45,191,116,233, 82, 60, 37,242,175,159, 31, 63,126,184,195,202,202, 45, 32,
+164,193,205, 35, 13,100, 64,250, 4, 64,240,236,228,212,253,139,242, 92, 53,190,128, 43, 0, 6,232, 54, 48,112,176,109,221,186,
+149,147,147, 19,104, 44, 48,100, 44, 44, 44,224, 93,129,152,152, 24, 96, 71, 4,191, 55,183,109,219,202,199,199, 99,103,111,110,
+ 96,164, 23,152,149,244,141,241,207,235, 87,239, 50,114,155, 59, 77, 84,140,196, 72,104, 91, 0, 75,255,174,174,174,209, 58,128,
+152,106, 0, 77, 4, 32,128,232,180, 17,108, 64, 26,203,228,141,209,155,181,182, 34,151,221, 64, 46,213,245,194,219,218,137,235,
+227,240, 40,160,245,158, 44,184, 45,200, 59, 3,240,107, 1,150, 62,206,206,206,192, 50, 20,147, 11, 44, 85,241,133, 12, 88, 22,
+ 72, 26, 26, 26, 2,203, 41,184, 32, 50, 23, 43,144, 86,211,210,189,122, 86,254,253,199, 55,127,255,125,250,241,135, 29, 88, 90,
+255,252, 35,199,195,242,254,207,159,167, 95, 65, 43,136,188, 85,197,185, 21,180,190, 96, 27, 15,129,175,248,212,213,213,213,215,
+215, 7, 22, 76,144,133,155, 64,103, 3,139,170,245,235,215, 67, 54, 4, 0, 69, 24, 49,244, 66,118,123, 1,211,173,154,154, 26,
+176,254,120,253,250, 53,100, 9, 41,208, 52,160,200,171, 87,175, 32,122,129, 34,120,234, 75, 96,207, 6,178,148, 19, 88, 34,195,
+151,114, 2, 93, 66,112, 53, 14, 72,175,139, 51, 72,239,221,147,207,206,239,134,234,181,118, 34,168, 23, 88,250, 27, 25, 25, 29,
+ 61,122, 20,168, 87, 90, 90, 26,104, 14, 55, 55,119, 85, 85,213,164, 73,147,128, 93, 31,160,237,125,125,125,184,238,136, 7, 86,
+121, 31,223,223, 1, 22,235,252, 66,106, 18, 82,150,223,191,191,249,242,233, 97,119,207,164,198,134, 42, 41, 25,134,229,249, 92,
+140, 97,239, 29,227, 24, 32, 53, 38,124, 35,240,173, 91,183,128,105,192,198,198, 6,104, 62,176,202, 1,202, 77,153, 50, 37, 60,
+ 60, 28, 82,221,226, 7, 55,111,222, 10, 9,246,143,136,240,211,209, 85,127,251,249,227,151,143,111,210,242,154,155, 3,157,157,
+255,125, 35,169,244,159, 48, 97, 2, 48, 82,128,181, 78,110,110,110, 64, 64,192,104, 65,143, 60,224,131,181,220,135, 3,128, 0,
+ 98,161, 79, 65, 79,112, 5, 81, 72, 72, 8,121, 59,129,113, 1,228,141, 90,228,213, 1,164,150,254,196,235,197,191,234,134,214,
+ 71, 59,192,199,139,224,182, 32,239, 9, 32, 8,128,229, 32,242,106, 31, 56, 23,207, 18, 32,184, 44,154, 26,252, 90, 32, 64, 74,
+ 81,249,135,153,237,159, 83,219, 30,124,100,224, 97,100,149,231, 97,122,250,151,145,153,157,229,208,171,191, 63,254, 49,136,178,
+ 51, 43,155,216,125, 17, 84,192, 86,156,129,154,240,192, 22, 55,176, 29, 10, 44, 19, 63,125,250, 4, 44,187, 33, 21, 0,176,253,
+ 14,172,180,128,101,214,230,205,155, 33,195, 65,104,217, 0, 40, 2,217, 54,172,169,169, 9, 25,189, 1,234,133,164,109, 72,191,
+ 1, 40, 14,236, 13,124,249,242, 5,127,194,214,211,211, 3,150,200,228,109,230, 34, 79, 47,208,217, 82, 82, 82,238,238,238,192,
+ 90,231,198,141, 27,143, 30, 61, 2,214,118, 2, 2, 2,192,170,104,206,156, 57,184,246,226, 34,141, 2,125,251,240,254,230,143,
+ 31,239, 4, 4,213,120,120,101,121,249,228,190,126,126,218,209, 57, 55, 50,194, 5, 88, 1,192, 2,246, 63,114, 13,224,229,229,
+181,109,219, 54, 96,135, 3, 24, 32,126,126,126, 11, 23, 46, 4,214,235, 26, 26, 26,196,248,209,219,219,107,253,250,205,159, 62,
+188,125,242,236,121,126,118, 92,105, 69, 91,160,147,149,205,207, 79, 12,172,196,150, 75,192,210,191,161,161, 1,210, 13, 5,118,
+212,128,253,128,178,178,178,209, 58, 0,127,125,128, 12, 0, 2,136,154, 21, 0,133, 43,136,200, 40,229, 33,224,205,155,185,213,
+167, 54, 98, 29,240, 33, 56,253, 11,212,123,170,122, 35, 90,131, 29,121, 24, 7, 79, 57,254,102,238,155, 83, 27,171,201,211, 59,
+ 80, 96, 40,158, 26,164, 96,229,120,233,231,159,215,251,246,178,254,249,126,233,243,255, 61,159,255,176, 49, 50, 10,255,255,239,
+ 40, 41, 96,239,230, 44,100,236,128,163, 61, 11,234, 1, 0,155,192,192,242, 8,216,132, 7, 22,244,192, 98, 20, 82,136, 67, 26,
+239,162,162,162,214,214,214, 59,119,238,196, 28,198, 1,138, 0,171, 10, 96,115, 27,168, 30,216,170,133,116, 35, 24, 96,243, 10,
+ 64, 46, 80, 1,176, 87,113,226,196, 9,130,211,224, 10, 96, 64,166,199,201,210, 11,172, 3,128, 37, 62,208,121,192, 30, 0,176,
+211, 3,236,187, 0, 5,159, 62,125,234,233,233, 9,108,254, 19,212,254,247,239,207,175, 95,158,254,250,245,145,243,211, 3, 62,
+ 1,101, 46, 30, 41, 32,218,181,247, 37,163,179, 56,172, 49, 7, 38, 97,234,173,172,172,128, 1, 11, 44,253,129, 53,129,176,176,
+112, 92, 92,220,129, 3, 7,136,116,170,165,165, 21, 59, 59, 59,223,181,179,217,217,201, 50,106,170, 93, 5,201, 11,166, 45,156,
+194,252,131,248,210,191,188,188, 28,232,217,103,207,158,113,114,114, 2, 35, 5,216,221,105,109,109,173,174,174, 30,173, 3,224,
+ 99, 62,192, 66, 31,207, 81, 16, 0, 1, 68,229, 30,192,128,172, 32,194, 90,168, 17,217,252,199,212,139,220,126,135,140,231,224,
+ 42,199, 41,209,139,167, 44, 38,181,140, 30,246, 39,193, 1, 75, 52, 3,103,119, 97, 41,153,215,215,175, 48, 63,188,167,242,251,
+ 57,175,176,184,149,174,134,182,177,206,119, 9,156,251,131,128, 37, 53,176,237, 15,108,230, 67, 6,235,129, 93, 1, 32, 3,114,
+156, 3,124,116, 72, 86, 86, 22, 88, 7, 96, 22, 88,192,210,196,192,192, 0, 88, 7, 0,203,119,136, 74,248,162, 26,248, 73,112,
+ 64,163, 12, 13, 13,207,158, 61, 59, 56, 3, 13,232,120, 49, 48, 80, 87, 87, 7,250, 23, 88,141, 1,189, 15, 12,141,106,162,230,
+165,254,255,254,245,249,247,175, 47,223,191,191,102,103, 23,100,101,227,101, 98, 98, 89,178,116,107, 76,180, 55,180, 22, 68, 85,
+ 13,233, 88,244,246,246, 2, 43, 90, 32, 67, 77, 77,141,248,107,165,141,140,140,153, 77, 77,147, 26, 32,122,255,171,169,169,171,
+ 5, 4,224, 31, 21, 68, 6,157,157,157,163,165, 60, 49,117, 0,214,210, 31, 8, 0, 2,104,216, 94, 8, 67,246,210, 79,228, 34,
+155,212, 38, 60, 37,122, 71, 1,126, 32,171,169, 13, 68, 64, 6,252,236, 77,252,251,130, 66, 67, 67, 5, 5, 5, 33, 75,125,128,
+ 37, 32,100, 72, 7,210, 3,128, 76,252, 66, 14, 4, 85, 86, 86, 6, 10, 30,185,242, 21, 89,239,132, 9, 19, 86,175, 94, 13, 81,
+ 0, 58, 41, 8,199,113,208,192,150, 47,193, 65,149, 65, 82,131,242,128, 1,137,205, 5, 72, 53,240, 25, 88,250, 3,205, 0, 6,
+ 27, 68, 47,174, 49, 47,200,145,159,144,160, 38,201,121,192, 96, 46, 44, 44, 36, 67,239,104, 51,159,248, 58, 0,151, 20, 64, 0,
+141, 94, 10, 63, 10, 70,193, 40,192, 40, 23, 24, 24,208, 15,123,248, 63,122, 35,216, 48, 4, 0, 1, 52,122, 37,228, 40, 24, 5,
+163, 0,163,241,207, 48,122, 3,228,136, 0, 0, 1, 52,122, 37,228, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40,
+ 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163,151,194,143,234, 29,213, 75,
+ 88,111,122,122,186,127, 64,250,198, 13, 88,142,220, 24, 13,171, 1,215,219, 10, 91,113,135,107,145,235,232,165,240,184, 0, 64,
+ 0,177,160,165,114, 76, 21, 68,174, 27, 27, 84,122,137,212, 62, 80,110, 30, 60,128,236, 51, 39,168,123, 16, 41, 30, 0,185,114,
+224,224,193,131, 64,182,189,189, 61,254,203, 3,104, 23, 74,192,210,223,203,211, 8,114,140,222,176,223,120, 49,180, 0,176,244,
+247,245, 85,134,179,171,171,171, 71,195,132,120, 0, 16, 64,232,171,128,254,175, 66, 57,131,137, 49,140,132,211,222,209, 50, 6,
+ 73, 39,128, 82,162, 23,205,205, 36, 57,123,160,220, 12, 1,239, 94,223,121,253,250,249,203, 55, 95, 62,126,252,205,207,207, 42,
+ 46,194, 35, 42, 42, 41, 36, 74,212,241,106,231,142, 79,187,119,247,214,221, 7, 63, 30, 63,255, 47, 43,201,168,172,192,161,164,
+172,102,100,153, 69,255,106, 3,114,182, 40,141,138,197,203,151, 47, 27, 24,236,152, 49,227,219,129, 3, 12,245,245,187, 30, 63,
+126, 44, 33, 33,193,193,193, 33, 42, 42,170,164,164, 68, 70,101,112,248,240, 97,113,113,113,121,121,121,130, 71,114, 34, 3, 96,
+233,159,150,150,198,192, 48,107,227,232,129, 99,131, 15,252,250, 85,190,115,103,154,187,251, 44, 95,223, 78, 72,111, 96,180, 26,
+ 64, 6,120, 54,130, 1, 4,208, 48, 89, 6, 10, 47,241, 25, 25, 25,254,173, 20, 28,252, 14,254,253,235,235,227, 71,151,127,253,
+250,173,162, 40,224, 96, 35, 39,192,207,254,254,195,143,167,207,191,220,190,247,252,195,199, 55,178,114,186,172,108, 56,175,126,
+125,255,230,214,177,131,179,153, 25, 62,133,123, 51, 88, 27, 51, 40,203, 51,220,121,240,255,200,153,239,219,246, 95,220,186,182,
+212,202, 62, 85, 80, 68,141, 72,103,144,221,246, 71,214, 8, 57, 72,142, 70,117,192,187,119,239,242,242,190,137,138, 50,132,134,
+ 50,116,116,128, 46,228,250,243,231, 15,176, 2, 16, 19, 19, 3, 86, 0,192, 62,129,148,148, 20, 65, 67, 94,188,120,241,234,213,
+171,151, 47, 95,186,186,186, 46, 89,178,132, 1,188,215, 55, 42, 42, 10,255, 1,118,200, 96,219,246,115,192,210, 31, 76,142,130,
+193,213,252, 7,146,193,193,107,119,238, 4,145,105,105,119, 33,189,129,209,174, 0,102,209, 15, 23, 65,174, 3, 0, 2,104,152,
+ 84, 0,192, 78, 0,164, 14, 24, 18,165, 63, 16, 60,121,116, 89, 92,132,195,212, 80, 17,124,191, 18,227,191,127,255,249,120,216,
+185,149,217, 20,100,249,175,221,124, 3,148, 85, 84,177,192,165, 23, 88,250,219, 26,127, 42, 72,100, 96,102, 6, 85,120,191,255,
+ 48,112,115, 49,104,170, 48, 88, 24, 48,108,217,255, 9, 40,235, 29,220, 77,211, 33, 32,172,151, 74,210,232,202, 7, 33, 33,161,
+ 45, 91, 56,101,101,191, 3,123, 0,239,223,179,168,128,193,151, 47, 95,238,221,187,119,224,192,129, 79,159, 62, 1,203,113,252,
+253,128,235,215,175,159, 59,119,142,149,149, 21, 89,240,251,247,239,115,231,206, 5, 26, 18, 17, 17, 65,140, 51, 54,110, 0,122,
+ 57, 29, 76,146, 0,224,247, 36, 67,142,189, 67,227,226,137, 17, 6,164, 19, 3,241,112,113,182,135,254,255, 23,121,251, 86,233,
+193, 3,225,167, 79,159,136,137, 61, 82, 82,250, 40, 38,246,159,232, 19,121,129,238, 36,230,156, 62, 60, 90,240,115,169,165, 23,
+ 62,248,147,150,182, 19,200,128,144, 16, 41, 32, 99,180, 14,192,218,234,135, 28, 13, 4, 23, 1, 8,160, 97,181, 10,136,113,136,
+184,243,221,235, 59,191,127,255, 54, 51,146,132,139, 48, 49, 49,178,177, 49,115,114,176,176,178, 50, 41, 43, 10, 2,123, 6, 64,
+ 53,184, 70,126,128,109,255,194, 36,134, 31, 63, 25,238, 63,102,120,255,145,225,195, 39,134,101,155, 24,114, 27, 24,170,122, 24,
+172,140, 24,152,254,127, 2,170, 25, 54,113,170,171,171,187,113,163,166,152, 24, 67, 84, 20,139,132,132, 41,176,188,246,245,245,
+245,241,241,113,119,119, 23, 23, 23, 7,150,236, 43, 87,174,188,123,247, 46,174,139, 18, 47, 93,186,116,225,194, 5,180,210, 31,
+ 14,246,239,223,127,245,234, 85, 60,101,241,161, 67,135,224,165, 45,164,244,135,176,129,226,196, 84,120,167, 96, 0, 43,151,200,
+250, 21, 63, 23,107,233,175,116,227,134,237,158, 61,178,183,238,176,125,250, 36,121,235,134,206,150,205,162, 23, 47, 50, 16,125,
+167, 55,208,133,192, 98, 23,216,103, 34, 62,154, 32, 90,240,112,241,235, 69, 46,238,241,112,113, 1, 72,185, 15, 33,127,249,170,
+ 48,140, 2,164,162, 31,255, 89, 15, 0, 1, 52, 88,122, 0, 84,105, 63,254,167,134,189,228, 13,101,192,111,218, 34,102,140,229,
+245,155,231,234,202, 66,144,114, 31, 77,138,131,157,229,195,199,159,106,202, 66,183,238, 61,199, 58, 25,112,239,238,173,112,208,
+145, 92, 12, 59, 14, 49, 76, 93,204,224,102,203,224,229,192,112,227, 14,195,249,171,255, 57, 57, 24, 13,181, 25,220,237, 25,214,
+237,188,101,100, 73,171, 33, 32,172, 65, 68,187, 27,223,128,173,123, 96,123, 31,200, 0,182,244,173,173,173,225,130,130,130,130,
+154,154, 44,126,126,192, 62,208,153, 91,183,190, 49, 48, 0, 3,133, 29,115,228,231,242,229,203,184, 74,127,120, 29,128,235,142,
+148,232,232,232,165, 96, 0,100,192,253, 11, 44,250,129, 34, 16, 89,250,228, 5,252, 92, 76,192,247,242,165,226,201,147,191,152,
+152, 88, 25, 25,254,252,251,255,239,247,223,127,127,254,136, 30, 62,244, 81, 68,228,167, 12,177, 43, 73,128,197,238,149, 43, 87,
+ 12, 13, 13, 13, 12, 12,136,215,130,220,185, 65,227, 18,217,141, 32,181,244,199, 44,238,119, 34,245, 3, 70, 1, 65, 0, 16, 64,
+232, 21, 0,230,244, 41,145,133, 26,174,194,148, 24,189,180, 24, 59, 38,114,153, 10,214, 9,100, 34,245,162, 41, 35,126, 46,250,
+229,235, 47,142,214,114,192, 6,217,225,227,143,191,125,255, 13, 20, 49,210,151, 16, 21,230,124,252,244,243,157,251,239, 89, 88,
+152, 84,149, 4,143,158,252,170,174,137, 69,239,221, 7, 63,172,141, 25,126,254,102,216,126,144, 97,255,241,255, 82,226,140, 74,
+114, 12,206, 54, 12, 26,202,140, 44,204,160,115,212, 45, 12, 24,186,103,254,192, 63,224, 67,144,129,167,213, 0, 31,241, 71, 27,
+151,160,221,218,152, 71,143, 30, 49,128,207,199, 71, 22,124,240,224,129,150,214,171,170, 42, 80,192,183,181,221,122,240, 64,155,
+129, 13,253,100, 80,160, 26,252,165, 63, 68, 13, 46, 41, 59, 48,128,148,248,144, 66, 31, 94, 49,192, 47, 52,166, 58,160,176,249,
+ 15, 4, 2,215,111,252,250,253,155,137,137,233, 63, 51, 51,232, 82, 4,200,129,118,127,255,177, 95,186, 68,124, 5,192, 0,190,
+ 87,242,232,209,163,192,174,170,180,180, 52, 49, 19, 45, 20,214, 1,228,181,253,129,197,189,251, 44,247,224,181, 12,105, 59, 65,
+ 12, 32, 23, 82, 43,176,109,190, 51, 90,184,163, 1,172,247,194, 3, 4, 16,225, 85, 64,196,175, 11,194,108, 21, 18,217, 78,196,
+ 90, 79, 16, 95,241, 96,117, 57,158,203,211,113, 21,211,240, 9,100, 34,245, 98, 85, 6, 49, 13,216,176,255,183, 10,231,108, 4,
+120,205, 15,168,185,250,248,217,167,239,223, 65,215, 90,169, 40, 9, 2, 43,128,139, 87, 95,221,188,253,142,131,131, 89, 89, 81,
+224,253, 71,236, 7,205, 63,126,254, 95, 89, 30,100,190,135, 29,131,129, 22, 35, 59, 27,195,159, 63,160,126,128, 0, 47,195,189,
+ 71, 12,238,118, 12,242, 50, 32, 53, 52, 77, 73,240,114,159,200, 33,233,129, 2, 88, 7, 49, 72,117, 42,164,172,135, 87, 0, 52,
+ 45,253,225, 0,215,213,237,120,174,116,135, 3,214,187,119,126,254,254,197,200,204,242,247,255,127, 96, 58,249,243,247,223,111,
+ 96, 71,224,239, 95,198,219, 55, 25, 24,188, 72,117, 9,176, 31, 0,236, 72,113,115,115,243,243,243, 19, 95, 7, 16, 57,248, 67,
+ 97,233, 95, 93, 93,221,218,218, 10, 44,253,225,149, 1,144, 4, 86, 3,192,210,127,243,230,187,144, 9, 0,200, 44,177,158, 93,
+252,104,233,143, 89,250, 3, 1, 64, 0, 13,150, 33, 32,172,133, 41,145, 5, 49, 73,107, 85,177,155, 64,165,181, 67, 64,151, 16,
+ 99, 20, 63, 63,235,251, 15, 63, 68,132,184, 66,253, 52,128,249,147,157,157,153, 25,216, 94,251,255,223,199, 77,217,219, 85, 25,
+104,194,219,247,223,129,106,176,234,149,149,100,188,251,240,191,134, 50,131,147, 37,104,200,235,198, 29, 6, 61, 13, 6, 65, 62,
+ 6, 79, 7,134,127,255, 24,128,157,128, 91,247, 65,106,240, 7, 50, 65, 6,241, 27, 73, 40, 25, 55, 35, 6, 0,219,175,192, 22,
+232,221,187,119,129, 45,113, 91, 91, 91, 30, 30, 30,200,137,193, 10, 10, 10,167, 78,137, 53, 54, 62,101,100,100,124,245, 74, 77,
+ 77, 77,225,218, 51, 44,122,209, 68, 86,173, 90,133,210,104,248,255, 63, 60, 60,156,248, 58,128,110,165, 63, 25,117, 3, 28,188,
+147,145,102,187,113,243, 63, 43, 3,219, 63,208,188,239,239,191,127,126,253,255,251,237,207,159,239, 42, 26,100, 56, 70, 71, 71,
+ 7, 24,254, 68,150,254, 12,224,107, 62,129, 77,126,120,241,141,198,197, 5, 32,189, 4,184, 50, 52, 46, 65, 0,108,254, 67,138,
+126, 32,137,220,246,135,204, 18, 3, 43,131,209,210, 31,107,233, 15, 4, 0, 1, 52, 28, 86, 1, 17,236,121, 16, 4,255,255, 51,
+ 48,133,191,167,188, 14,128, 44, 70, 98, 10,123,143,167,249, 15, 4,226, 34, 60,143,159,126, 6, 86, 0,125,211, 79,219, 89,201,
+ 26,233,137, 51,178, 50, 66,150, 3, 65, 86,106, 0,101,129,106,176,234, 85, 86,224, 56,122,246, 59,176, 2, 16, 49,102,168,200,
+100,200, 79, 96,224,231, 5,141,252, 52, 78, 98,104,200, 7, 41, 56,122, 22,164,134,164,129, 50,202, 23,131,210,110, 25,232,155,
+ 55,111, 32,247, 32,110,221,186,245,209,163, 71, 30, 30, 30,138,138,138,159, 63,127,126,255,254,253,245,235,127, 14, 28, 0, 22,
+ 22, 38,142,142,142, 50, 50, 50,215,158,189, 70,211, 11,108,183,226,191,177,235,207,159, 63,131, 45, 49,195, 75,127, 60,213, 0,
+254, 58,224,147,150, 54,251,165, 75,255,254,255,231,102, 98, 97,102,102,252, 3, 44,253,127,255,254,252,235,215,111,125,125,146,
+ 92,194,197,197, 69,210, 28, 0,188,184,199,197,165, 69, 29, 0,108,230,167,129,219,248,200,165, 63,188,249, 63, 10,240,151,254,
+ 64, 0, 16, 64,163,199, 65,195, 90,139, 84, 90, 63, 10,173, 3,240, 86, 39,162,162,146,119,238, 63,211,215, 22,171,200,183, 88,
+176,252, 50, 39, 7,139,129,142, 24,252, 58,229,127,255,254,223,185,255, 94, 92, 12,251,168,171,146,178,218,214,125, 23, 19,130,
+ 25,254,223, 99,176, 8, 98, 80,146,101, 88,186, 17, 38,151,207,240,247, 47,195,214,125, 32, 53,180, 11, 40,172,253, 51,218, 45,
+ 3,189,113,227,134,166,230,253,249,243,129,204,191, 77, 77,151,214,173,251,166,174,174, 14,172, 0,238,221,187,247,242,229, 75,
+ 35, 35, 35, 96, 19, 30,215, 50, 80, 37, 37,165,211,167, 79,227,185, 99,132,200,235,121,225, 67, 64, 64,146,214, 61, 0, 96,201,
+ 14, 41,250,113, 13, 1,225,146, 66,212,106, 50, 50,111,109,237,254,238, 63,240,139,141,149,231, 63,203,143,127,255, 62,254,250,
+245,217,201,249,191,156, 28,209, 29, 98, 70, 96,249, 75,252,208, 63, 92, 11,188,184, 71,227,146, 84, 7,224, 90, 59,139, 7,160,
+149,254,240,145,159,209,217, 96,252,165, 63, 16, 0, 4,208,104, 5, 64, 77, 0,157, 0, 32, 52, 10, 36, 36,170,242,225,227,155,
+147,103,159,153, 27, 75,121,186, 40,237,216,123,111,235, 46, 80,170,173, 41,182, 2,150,254, 64,113,118,118, 54, 92,251,129,141,
+ 44,179,182,174, 45,237,159, 7, 90, 9, 58,163, 5,180,250,211,197, 26,180, 18,180,191, 22, 84,250,247,207, 99,248,203,192, 71,
+252,126, 96, 82,219,236,184,122, 12,180, 91, 5,244,245,235, 87, 67,195, 31,144,146,196,196,228,255,142, 29,247,110,221,186, 5,
+217, 8,230,224,224, 96,111,111,143,103, 19,128,178,178,242,229,203,151,113,117, 2,128,205,127, 99, 99, 99, 98,220, 0, 89, 12,
+ 10, 89, 20, 4,100, 19, 95, 7,160,109, 52, 35,114,223, 25,188, 14,192, 37, 75, 64, 63, 19,211, 47,115,243, 55, 82, 82, 95, 46,
+ 93,226,121,244,232,135,162,226, 87,109,237,191,178,178, 12, 68, 95,182, 69, 94,217,141,172, 5,141,139,223,227,200,178,104,246,
+146,234, 12, 8, 64, 46,247, 33,189, 1, 82,135, 52,135, 25,192,179,166, 3, 32,128, 70, 43, 0, 44,171,119,232, 96,148,172,156,
+238,227, 71,151,215,110,185,169,162, 40,232,237,166, 44, 40,192,241,254,195,143,243,151, 95, 2,219,254,192,210, 31, 40,139, 71,
+175,149,125,234,225,131,179,143,157,253,228,237,196, 48,187, 29,180, 19,248,238, 67,134,185,171, 64,109,127, 96,233, 15,148,165,
+188, 64, 39,163,244,167,209, 28,128,132,132,196,131, 7, 34,103,206,128,134,119,110,221,226, 51, 53,213, 18, 22, 22,134,239, 4,
+ 38,120, 20,132,133,133,197,193,131, 7, 25, 49,246, 64, 1, 75,127, 21, 21, 21, 96, 13, 65, 76,233,143, 60,250, 15,233, 10, 16,
+ 89, 7,144, 93,156,225, 42,229, 9,151,254,176, 58,224,159,188,252, 55, 32, 34, 43,204,201, 40,118,241,251, 20,191,129,148,232,
+197, 95,250,131, 22,137,142,248, 9, 0, 6,108,251,129,225, 85, 2, 64, 0, 17, 94, 6, 74,252, 20, 43, 49,203, 64,137,215, 75,
+188,118, 74,236,197,234, 59,242,236, 37,105, 46,154,149,141, 91, 73,197,226,221,235, 59,247, 30, 60, 63,126,230, 9,252, 44, 32,
+113, 49, 41,130,103, 1, 9,138,168,121, 7,119,159, 59, 62,109,229,214, 91,109, 83,233,122, 22, 16,157, 75,127, 32, 80, 87, 87,
+191,120,209, 43, 49,241, 12,184, 7, 96, 18, 22,166,207,197,197, 69, 82,253, 17, 30, 30,126,243,230,205, 51,103,206, 48,131,230,
+218,153,128, 69, 63, 27, 27, 27,176,237, 15, 52,153,212,210,159,140, 58, 96, 20,208, 26,128,214, 2,165,181,186,207,114,199,186,
+ 39, 96,116, 50, 0, 63, 0, 8, 32, 22, 74, 6, 4,104,170,151, 72, 3, 7,149,155, 73, 5,192,178, 30,136,212,201,210, 11, 44,
+235,137,220,237, 69, 45, 95,208,109, 15, 7, 50, 0, 22,247,150, 96, 64, 97, 45, 66, 76,113,143, 9, 48,203,122, 32, 27,178, 45,
+ 96,180, 2, 24, 84,117, 0,195, 67, 44,226, 38,213, 38, 35, 60,100, 8, 94,249, 14, 16, 64,163,151,194,143,130, 81, 48, 10, 70,
+193, 8, 5, 0, 1, 52,122, 35,216, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0,
+ 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163,151,
+194, 83, 71, 47,158, 99,209,104,170,247, 30, 24,172, 94,189,154, 12,189,247,239,223,191,123,247, 46,121,122, 71,211,198,168,222,
+ 81,189, 67, 69, 47, 30, 0, 16, 64, 56, 55,130, 17,121, 10, 38,213,245, 82, 29,164,133,126,100, 96, 99,155,181,148, 19,143, 26,
+ 96, 25,138,103,239, 37,126, 55,195,245,246,246,246, 22, 23, 23,147,116, 91, 58, 92,239,149,169,124, 58,217,159,200,184,105, 93,
+ 79,120,202,255, 55,127,129,140, 89,179,102,129, 47,173, 37, 1,152,169,175,248,243,233, 19, 39, 39, 39,176, 14, 8, 13, 13,165,
+ 93, 20, 16,185,175, 2,171,127, 7, 74, 47, 46,211,232,147,128, 25, 25, 25,153,192, 0,178,133,237,215,175, 95,204,224,179,157,
+255,255,255,207, 48, 10, 70, 1,245, 0, 64, 0,177,224, 74,235, 88,147, 26, 35,161, 91,229, 32,153,132, 60,189,196,180,136,201,
+ 6,187,119,239,102,224,208,196, 83, 10,151,151,151,139,137,137,161, 73, 1, 11,116,252,198, 66,244, 66,138,254, 19, 39, 78, 64,
+170, 1,146,244,254,187, 86,199,164,213,180,104, 31,232,184, 2, 32, 27, 34, 5, 20, 33,232, 35,190, 79, 69,255,254, 51,172,216,
+ 1,210,232,105,207,170,173,114, 21, 88, 7,128, 42, 60, 34,170, 1, 97,185, 83,175,111,191, 56,124, 77,254,235, 79,110, 79,247,
+ 15,210, 18,140,103,206, 28,251,244,233,135,147,147, 19,141,210, 25, 77, 27, 13,120,244, 18, 44, 49,137, 79,150,164, 2, 96,252,
+118,117,117,149,150,150, 18,179,223, 24, 25, 0,203,122, 22, 48,128,236, 92, 3, 38, 18,160, 33,127,255,254,253, 3, 6, 64, 6,
+141, 28,188,117,235, 86,252,129,227,229, 69,248, 52,233,109,219,182,145,164,126, 20,208, 13, 64,246, 3,163,173,251, 7, 8, 32,
+ 22,146, 74,127, 99, 99,227,179,103,207, 18,204,132, 88, 51, 21, 30,189,104,230, 0,203, 98,200,176, 6,217, 7, 76,166,249,206,
+ 98,224, 84,155,181,202, 1,212, 52, 94,205, 15, 42,253, 9,149,224,152,103,199, 3, 75,112,252,167,178,192,245, 2,217,192, 22,
+180, 5, 24,144,164, 23, 82,226, 67,200, 14,216,110,109, 96,233, 95, 22,204,209,181,246, 7, 30, 15,242,127, 47,214, 81, 99,254,
+250,253,127, 81, 44,199,137,171,127,190,127,253,255,237, 23,131,163,193,213,171,183,254, 18,236, 10,220,123,220,127,238, 52, 55,
+ 47, 31,163,132,164,184,168,184,202,195,187,191, 20,180,126,179,114,188,218,179,254,205,250,245,235, 3, 3, 3, 71,179, 10, 85,
+ 0, 48,126,125,125,125,129,117, 0, 90, 26, 54, 50, 50,106,108,108, 4, 74, 97,111,145,177,176,176,193,192,227,199,143, 85, 85,
+ 85,129,213, 0, 47, 47,239,157, 59,119,120,120,120, 78,159, 62,125,252,248,241,236,236,108,156, 41, 31, 28,245,240,252, 11,207,
+137, 16, 17, 32, 23,210, 74,192, 10, 54,109,218,132,169, 5, 46, 2,228, 18, 83,160,111,220,184,145, 36,245, 84, 1, 47, 94,188,
+144,144,144, 24, 77,114,120,202,125, 92, 0, 32,128, 88, 72, 42,253,241,219,132,231,160, 18,252, 71,156,163,149,254, 29, 29, 29,
+ 21, 21, 21,112, 17,226,235,128, 52,227, 89, 12,194,106,179,118, 57,192, 91,253,174,174,174, 64, 6,132,196, 28, 23, 67, 46,193,
+177,150,254,152,125, 2, 76, 79,193, 91,250,192, 26, 11, 57, 40,136,209,139,181,165, 15, 44,253,241,123, 83,228,123,145,170, 60,
+ 51, 39, 59,163,188, 20,243,155,247,255,126,255, 97,126,251,225,255,199, 47,255,239, 60,249,199,192,196, 32,194,117, 9,232, 47,
+ 37, 37, 37,172,122,255,253, 95,173,169,172,116,252,197, 75, 69, 57, 81, 29, 61, 37,102,118, 33,121,197,247,239,191,255,120,245,
+226,239,147,151, 63,184, 88,128, 90,245,113,233,165,221,136, 16,241, 81, 76,158, 94,204, 22, 9,173,199, 82,128,225, 8,180, 84,
+ 75, 75,107,243,230,205,200,209, 1,204, 68,120, 74,127, 32, 96,101,101,229,224,224,120,243,230,141,154,154,154,161,161, 33,176,
+ 62,152, 52,105, 18,176,213,175,171,171,187,110,221, 58, 96, 5,112,233,210, 37, 96,149,128,171, 31,224,239,239, 15,241, 47,174,
+ 92,140,167, 80, 6,150,221,144,144,193,218,128, 3,138,191,124,249,146,152, 10,128, 36,245,144,226,123,255,254,253, 88,165, 28,
+ 29, 29,137, 41,217,129,218,165,164,164,212,213,213, 71,171, 1, 82, 1, 64, 0,177, 96,230, 46, 92,237,119,250, 56, 8,152, 91,
+128,165, 63,145, 21, 6,206,209, 30,134, 52, 32,185,122,150, 25, 3,219,119, 60,163,255,104, 37, 56, 90,101,134,191, 4,135, 0,
+120,229,113,226,196, 9,228,230, 63, 49,122,151,149,242, 96,230,210,232,158,175,248,117,253,251,247,143,157,139,145,137,137,129,
+139,147,225,195,167,127, 63,255,255,231,230,100,252,241,143,225,251,207,255, 50,162, 76,255,254, 48,220,126,252,119,207,158, 61,
+ 88, 59, 1,159, 62,158, 16, 16,224,102, 99,251,159,154, 96,254,247,239,255, 23,175,126, 61,122,250,129,129,245, 49,167,224,207,
+231,175, 30, 48,177,125,188,118,237,195,211,151,123, 72,157, 75,160,112, 68, 8,249,102, 49, 98, 0,242,137,123,152,247,119,226,
+ 2,239,222,185,192,217, 66, 66,123,112, 21,145, 4,235, 27,100, 17, 60,117, 15, 48,105,249,248,248, 64,202,253,171, 87,175, 66,
+ 24,144,182, 63, 80, 28,143,141,236,236,236, 95,191,126,213,212,212, 4,150,125,192,132,148,156,156, 12, 20,252,253,251,247,130,
+ 5, 11,128, 29,232,115,231,206,173, 92,185,242,251,247,239,152,119,221, 64,128,183,183, 55,217,145, 50,119,238, 92,252,149, 40,
+ 49, 45,122,184, 33, 68,170,103, 0,159,215, 4, 44,190,159, 61, 67,191,208, 7, 40, 72,124,129,254, 12, 12, 70,171, 1, 76, 0,
+ 31,243,193,218, 21, 0, 8, 32, 22, 98, 90,241,148, 20,199,164, 2,228,118, 52, 81,173,254, 89,233, 12,146, 12,179,124, 65, 89,
+113,214,217, 52,248,104, 15,184,213,255, 17,185, 31,128,191, 4,127,245,234, 21,188,212, 38,178, 4,199, 15, 32,245, 10,176,188,
+192,117,216, 6,158, 2, 8, 50,254,131,169, 23,168,229,205,181, 34, 73,240,224, 15, 68,228,251,223,255, 63,126, 49,252, 6,115,
+127,255,249,255,159, 9,196,184,124,233, 44,176, 30,101, 96, 96, 67, 51,246,227,199,171,172,236,130, 34, 66, 2, 31,222,125,251,
+240,241,195,137, 51, 47,158,190,252,207,198,253, 77, 90,229,203,247,111,111, 84,245,126, 43,104,254, 92, 57,251,236,157, 59,119,
+ 24, 24, 56, 70,115, 14,133,205,127, 32, 0, 54,255,129,197,253,150, 45, 91,180,181,181, 67, 67, 67, 9,150,254,144, 10,224,245,
+235,215, 92, 92, 92,118,118,118, 61, 61, 61,192, 14, 1, 48, 25, 44, 92,184, 16, 88,250, 3, 27, 25,123,247,238,189,124,249,178,
+136,136, 8,158,171,108,128,245, 55,174, 33,160,217,179,103,227,177,154, 42, 67, 64, 64, 67,200, 24, 2, 2,150,218,152, 21, 0,
+ 25,199, 55,141, 86, 3,164, 2,128, 0, 26, 92,199, 65, 99,222, 43, 66,228,224, 0,168,189, 95,113,159,129,153, 45,205, 77,129,
+ 65, 64, 97, 22,248,226, 63,252,163,255, 84, 25,196,128, 76,252,194,219,254,200, 0, 50, 43,128,217,189, 32,178,197,186,180,132,
+ 27,179, 55,192,251,169,248,193,175,255, 47,222, 0, 91,127, 76, 60, 92,160,174, 58,176,208,255,241,147, 1, 88, 7, 0,201, 95,
+191, 25,126,124,103,248,245, 19,214, 2, 69,173, 60,120,254, 20, 61,125, 36, 39,171,200,243,159,149,229,205,247,239,251, 15, 62,
+190,118,231,233,187,119, 95,180,141,255,126,253,241,231,199,207,191,223,191,253,123,241,136,225,251, 87,134,238,238,238,209, 19,
+162,176,246, 84,136, 76,144,144,230,191,150,150, 22,176,225, 15,172, 12,128, 21, 0,164, 19, 64,176,244,135, 12, 1, 25, 24, 24,
+112,112,112, 0, 11,253,164,164,164,246,246,118, 96, 73,122,242,228,201,131, 7, 15, 94,186,116,233,227,199,143,170,170,170,159,
+ 62,125,194,115,203, 77, 64, 64, 0,102,219, 2,210,227,193,223, 63, 24,168, 33, 32,172,157, 0,146,154,255,163,213, 0,217, 0,
+ 32,128, 6, 69, 5, 0, 25,250,135,116,147,145,235, 0,120,102,131, 12,214, 19, 63, 82, 12, 41,247,129, 13,127,240, 40, 16,219,
+172,165,212,119, 51,100,229,143,139,139,203,158, 61,123,112,117,101,112,245,102,176, 22,238,196,140, 5,197, 87,126,149, 18,103,
+138,242,101, 3, 22,247,252,188,140, 76,140,224,134, 63,195,255, 31,223, 24,190,254,250, 15,236, 22,124,253,241,255,223,127,236,
+ 55,127,196,231,127,213,213,191, 39,161,241,110,247,246, 87,239,222,253, 48,176,252,164, 39,244,133,129,245,231,143,111,255, 94,
+ 61,253,255,245, 43,227,159, 63,140, 66, 34,140, 12,140,255, 70,115, 5, 85, 0, 36, 61, 35, 79,168, 0,107, 2,228,162, 25,235,
+ 76, 0,176,100, 47, 43, 43, 99, 97, 97, 89,180,104,209,252,249,243, 19, 19, 19, 59, 58, 58,128, 37,242,131, 7, 15,190,127,255,
+ 14,204, 38,192,182,127, 70, 70, 6,158,197, 75,100, 79,189, 14,212, 16, 16,214, 78, 0,121,167,183,142, 2, 82, 1, 64, 0, 13,
+150, 30, 0,242,176, 53,102, 65,143,171,144, 69, 6,179,206,166,193,138,254,219,171, 39,221, 7,175, 2, 66,212, 7,120, 70,129,
+ 40, 25,225, 1, 58, 12,222,252,135,244, 6,224,108, 96, 15, 0,178,199, 10,115,242,153, 96,233, 15, 89, 5,132,169,247,207, 95,
+134,175,223,254,255,252, 5,154,242, 5,146, 44,236, 80, 65, 96, 5,240,253,247,255,183,239,254,191,126,255,255,220,181, 63,255,
+254,129,134,242,174, 62, 69, 49,243,207, 31,134,103,143,127, 61,190,251,254,200,241,247,192, 70,222,181, 27,255,124,162,254,176,
+177,252,127,253,146,225,200, 46,134, 79,159,254,255,255,199, 96,227,196,200,193,193,224,233,233, 79,204, 74,195, 13, 11,210, 3,
+ 18,200, 92,167, 75,201, 13, 98, 36,221,187, 0, 7, 66, 66,123,232,150,152,209, 18, 48,144,107,100,100,116,238,220,185,205,155,
+ 55, 35,139,227,154, 10, 6,182, 45, 4, 4, 4, 32,141,232,121,243,230, 1,251, 1,192,154, 0, 82,115, 0,165, 62,124,248, 0,
+236, 1,124,251,134,239,174,151,212,212, 84,228,161, 27, 72,243, 31,255,248,207,192, 14, 1,161,117, 2, 40,105,254, 67,180,143,
+182,253,137, 4, 0, 1, 52, 88, 42,128,179,103,207,226, 90,187, 2, 20, 39,176,126,148,157,123,181,194, 33,134, 63,103, 25, 20,
+185,211, 90, 21,103, 29, 0,118,180,103,193, 42, 3, 87,226, 71,129,144, 87,130, 98,174, 10,197,204,225,192, 82, 12, 82,250, 35,
+207, 0, 67,218,254, 16, 46,214, 30, 0, 92, 47,121, 37,203,237,219,183, 31, 93,153,244, 79,244, 31, 19, 11, 3, 43, 19, 40,167,
+253,254,247, 31, 88,184,127,254,252,255,215,111,134, 63,191, 65,245, 65, 97, 17,168, 59,117,245,233, 19, 76,189, 15,111, 77,212,
+214,254,119,248,224, 95, 70, 38,134,215, 47, 24, 57, 56, 25, 14,238, 96,248,245, 29, 88, 66, 48,232, 25,177, 62,123,244,207,222,
+222, 27,152,111, 9,238, 36, 4,150,254, 93,217, 12,101, 83,201,169, 3, 40,185, 64,152, 60,189,184,134, 53,232, 3, 32, 43,127,
+124,124,124, 32, 81, 15,233,206, 2,155,249, 88, 21,255,251,247,239,252,249,243,182,182,182,112, 17, 96, 29, 0, 41,139,127,255,
+254,253,247,239, 95, 96, 36,138,138,138,226,154, 4,134,143, 2,145,209,126, 31,192, 33, 32,180, 78, 0,217,205,255,209,162,159,
+ 84, 0, 16, 64,164, 85, 0,192,130,152, 22, 59, 33, 33,141,101, 96,174, 0, 50, 92, 92, 92,208,218,254,144, 98,148,248,173,170,
+240, 85, 64, 16, 46, 49,109,127,228, 25, 96, 8,128,112, 33,139, 65,241,235,133,151,254,104,243, 1,196,232,197, 5,128,205,127,
+ 92,122, 85, 85, 85,231,207,249,237,108,193, 10, 44, 0,126,255,250,199,206, 6,202,171,159,191,254,255,249,251, 63,176,232, 63,
+123,229,239,223,127,255,113,173,227, 4,234, 93,188,240,143,189, 3,115, 96, 52,243,151,207,255, 63,127,100,248,250,153, 81, 81,
+245,255,223,223,140, 44, 76, 28, 31,222,253,123,246,228, 87, 73, 33,225,113,106, 96,233, 63, 33,159, 65, 77,142, 97,114, 17, 67,
+110, 31,153,117, 0,217,125, 2,242,244, 82,190,238,147,188,148, 15, 44,253, 27, 26, 26,144, 27,251, 93, 93, 93, 64, 46,174,221,
+ 97,191,126,253, 2, 22, 97, 63,126,252, 96,102,102,134,220,125,182,118,237,218,224,224,224,239,223,191, 3, 5,127,254,252,201,
+195,195, 3,172, 6,240,123,135,188,181, 64, 3, 59, 4, 4,239, 4, 64, 24,163, 69, 63,125, 0, 64, 0,145, 80, 1, 80, 88,250,
+227,209, 14, 44,244, 33,165, 60,100,220, 28,190,228, 20,185,225,143, 86, 49,160, 0,102, 70, 6, 54, 38, 6, 78,102, 6, 30, 22,
+134,159,159, 87,183,179, 50,112,158, 74, 11, 81,100,224, 20,154,181,152,168,134, 63,214, 53, 63,144, 18, 28,255,162,120,228,210,
+ 31,121, 62,128, 24,189,248, 75,127, 60,122,219, 58,103, 20,229,103,112,112, 0, 91,139, 12,186,234,204,208,176,186,252,247,247,
+223,255,127,255, 49,151,148,148,224, 49,188,169,101, 70, 73, 73, 6,176,199,240,235,247,255,191,127, 24,128, 93, 8, 7,111,134,
+207, 31, 24,111, 92, 4, 22, 48, 76,126,190, 65,196,148,254, 13,201, 12, 42,224,131, 73,148,165, 25,200,238, 7,140, 4,128,185,
+231, 11,180,178, 11, 12,112,105, 1, 86, 0,192,178, 30,180, 29, 67, 95,255,207,159, 63,172,172,172,192, 54, 53,176, 17, 3, 44,
+253,191,125,251, 6,108,254, 11, 10, 10,226, 89, 6, 10, 7,240, 1, 85, 98, 6,127, 6,195, 16, 16,188, 19, 64, 70, 56, 19,185,
+ 93, 96, 20, 96, 2,128, 0, 34,182, 2,160, 81,219, 31,107,215, 30,115,192,135,108,171, 9,142,254, 83, 82,250, 51,160,206,244,
+194,235, 48, 6,240,106, 90,130,122,113,205, 4, 16,163,183,111,226, 12, 96,112, 49, 49, 49, 28, 57, 11, 26,241,135,204,250,130,
+135,254, 75, 8,234,237,233,153,145,145, 9,222,240,193, 4,210,114,234, 16,195,215, 47,255,254,255, 99,240,243,243,118,119,119,
+ 39, 88,250,151,199, 48, 8,240, 48, 60,123,195,192,201,206,240,239, 63, 3, 55, 7, 67,107, 58, 67,245,204, 97, 91, 7,224,234,
+ 94, 16,147, 38,209, 74,255,140,140, 12, 72,209,191,121,243,102, 96, 41,137,181, 26, 0, 86, 0, 76, 76, 76,192,246,236,231,207,
+159,207,156, 57, 99,104,104, 8,172, 6, 62,126,252,120,241,226, 69, 69, 69, 69, 97, 97, 97, 96,233, 15, 20, 33,216,161,129,236,
+ 8, 35,169, 67, 48,224, 67, 64,228,181,253,201,214, 53, 10,128, 0, 32,128,208, 43, 0, 92, 75,254,137, 92,253, 70, 73, 15, 26,
+168, 0,243, 80, 54,130,165,225,172,180,153,160,209,158, 91, 12, 32,132, 0, 31,193,232, 62,217,110, 38,166, 20,134,251, 8, 88,
+ 70, 64,246, 19, 0,171, 13, 82,175, 50, 6,234, 93, 90,194, 13,169, 15, 72,189,161, 23, 30, 92,144, 89, 95,226, 59, 28, 51,166,
+ 35,244,126,249, 4, 42, 32,252,252,252,136,212,219,185,132,154,197, 40,173,245, 14,224,208, 63, 3,234, 52, 47, 48,192,129,101,
226,150, 45, 91, 48,165,208, 42, 0,160, 50, 96, 3, 31,200,144,147,147,251,240,225, 67,109,109, 45,176, 2,144,150,150,254,242,
229, 11, 80, 16, 50, 19, 64,208,106, 50, 70,129, 94,188,120, 65,185,151,169, 98,200, 40,160, 27, 0, 8,160, 65,113, 41, 60, 28,
- 0,139, 48, 50,204, 33,123,133, 15, 21,251, 52, 4,143,126, 35,163, 43, 64, 76,112, 97,101,147,170,151,152,210,159,146,102,254,
+ 0,139, 48, 50,204, 33,123,133, 15, 21,251, 52, 4,143,126, 35,163, 43, 64, 76,112, 97,101,147,170,151,248,210,159,188,102,254,
64,165, 43,170,196, 47,121,134,192,143,243,132,159,232,169,169,169, 57,111,222,188,127, 96,128,167,253, 14,105,221, 3,213, 0,
11,122,200, 97,112,224, 10,254, 31, 29, 14,131, 27, 5,195, 27, 96,221,220, 3, 16, 64,163,151,194,143,130, 81, 48, 10, 70,193,
8, 5, 0, 1, 52,122, 35,216, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 21,192, 40, 24, 5,163, 96, 20,140, 80, 0, 16,
@@ -1449,7 +1437,7 @@ char datatoc_blenderbuttons[]= {
123,223,254,127, 99, 96,100, 96,251,199, 42, 39, 42, 47, 42, 44, 74, 80,215,177, 99,199,144,185, 86, 86, 86,163, 13,213, 81, 64,
35, 0, 16, 64,212, 60, 12,142,200, 75, 84,174, 62,253,128, 41,136, 86,230, 34,111, 71,196, 95, 28, 19,185, 75, 8, 79,229, 1,
49, 1, 82,162, 97, 46,208,134,200, 98, 93, 44,139,108,181,180,162, 44,144,124,249,227,199,159,239,224,243,248, 63,124, 98, 0,
-159, 95,132,239, 4, 11, 48, 64,190,144,178,175,175,143,152, 11,208,153, 24, 65, 27,113, 33, 36, 16, 96,101, 76,159, 65,147,202,
+159, 95,132,239, 4, 11, 48, 64,190,144,178,175,175,143,152, 11,208,153, 24, 65, 91,112, 33, 36, 16, 96,101, 76,159, 65,147,202,
18, 57,172, 32, 69, 63,241, 97, 69,118,253, 13, 41,253,193, 5, 55,168, 14, 32,222, 40, 72,133,129, 81, 1,144,230,140, 95,191,
202,119,238, 76,115,119,159,229,235,219, 9,233, 13, 16, 89, 13, 28,185,122, 68,222, 80, 54, 57, 56, 65,144, 75,240,223,159,191,
63,254,255,220,113,114,215,190,131,123,173,148,172, 57, 56, 56,240,148,254,153,153,153,200, 34,211,167, 79, 31,173, 3, 70, 1,
@@ -1547,5 +1535,5 @@ char datatoc_blenderbuttons[]= {
225,100, 23,103,148, 55,123,233, 48,122,142,117,248, 7,118,226, 6,253,194,138, 18,143,147,218, 78,167,238,112, 16,168,148,127,
136, 69,220,164,218,132,160, 94, 46, 46, 46, 29, 85, 93, 74,156, 29, 28, 28, 60, 90,132,141, 2,202,235, 0, 92, 82, 0, 1, 52,
122, 41,252, 40, 24, 5,163, 96, 20,140, 80, 0, 16, 64,163, 55,130,141,130, 81, 48, 10, 70,193, 8, 5, 0, 1, 52, 90, 1,140,
-130, 81, 48, 10, 70,193, 8, 5, 0, 1, 6, 0,178,212, 98,212,112,143,196, 46, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
+130, 81, 48, 10, 70,193, 8, 5, 0, 1, 6, 0,179, 52, 4, 9, 62,158, 98,201, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130,
};
diff --git a/source/blender/src/butspace.c b/source/blender/src/butspace.c
index 43813f7f907..a068ec8c71e 100644
--- a/source/blender/src/butspace.c
+++ b/source/blender/src/butspace.c
@@ -221,6 +221,23 @@ void test_grouppoin_but(char *name, ID **idpp)
*idpp= NULL;
}
+void test_texpoin_but(char *name, ID **idpp)
+{
+ ID *id;
+
+ if( *idpp ) (*idpp)->us--;
+
+ id= G.main->tex.first;
+ while(id) {
+ if( strcmp(name, id->name+2)==0 ) {
+ *idpp= id;
+ id_us_plus(id);
+ return;
+ }
+ id= id->next;
+ }
+ *idpp= NULL;
+}
/* --------------------------------- */
@@ -372,11 +389,12 @@ void redraw_test_buttons(Object *new)
addqueue(sa->win, REDRAW, 1);
buts->re_align= 1;
- if(new) {
- BIF_preview_changed(buts);
+ if(new && buts->mainb==CONTEXT_SHADING) {
+ /* does node previews too... */
+ BIF_preview_changed(ID_TE);
}
}
- // always to context switch
+ // always do context switch
if(new) butspace_context_switch(buts, new);
}
diff --git a/source/blender/src/buttons_shading.c b/source/blender/src/buttons_shading.c
index 963744696ac..51f9b2531c6 100644
--- a/source/blender/src/buttons_shading.c
+++ b/source/blender/src/buttons_shading.c
@@ -49,6 +49,7 @@
#include "DNA_lamp_types.h"
#include "DNA_material_types.h"
#include "DNA_object_types.h"
+#include "DNA_node_types.h"
#include "DNA_packedFile_types.h"
#include "DNA_radio_types.h"
#include "DNA_screen_types.h"
@@ -64,6 +65,7 @@
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
+#include "BKE_node.h"
#include "BKE_material.h"
#include "BKE_utildefines.h"
#include "BKE_texture.h"
@@ -77,6 +79,7 @@
#include "BSE_filesel.h"
#include "BSE_headerbuttons.h"
+#include "BSE_node.h"
#include "BIF_gl.h"
#include "BIF_graphics.h"
@@ -107,9 +110,8 @@
/* ---------function prototypes ------------- */
void load_tex_image(char *);
void load_plugin_tex(char *);
-int vergcband(const void *, const void *);
+
void save_env(char *);
-void drawcolorband(ColorBand *, float , float , float , float );
static MTex emptytex;
static int packdummy = 0;
@@ -213,7 +215,7 @@ void load_tex_image(char *str) /* called from fileselect */
BIF_undo_push("Load image");
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
}
@@ -230,20 +232,9 @@ void load_plugin_tex(char *str) /* called from fileselect */
tex->plugin= add_plugin_tex(str);
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
-int vergcband(const void *a1, const void *a2)
-{
- const CBData *x1=a1, *x2=a2;
-
- if( x1->pos > x2->pos ) return 1;
- else if( x1->pos < x2->pos) return -1;
- return 0;
-}
-
-
-
void save_env(char *name)
{
Tex *tex;
@@ -264,276 +255,18 @@ void save_env(char *name)
}
-void drawcolorband(ColorBand *coba, float x1, float y1, float sizex, float sizey)
-{
- CBData *cbd;
- float dx, v3[2], v1[2], v2[2];
- int a;
-
- if(coba==NULL) return;
-
- /* first background, to show tranparency */
- dx= sizex/12.0;
- v1[0]= x1;
- for(a=0; a<12; a++) {
- if(a & 1) glColor3f(0.3, 0.3, 0.3); else glColor3f(0.8, 0.8, 0.8);
- glRectf(v1[0], y1, v1[0]+dx, y1+0.5*sizey);
- if(a & 1) glColor3f(0.8, 0.8, 0.8); else glColor3f(0.3, 0.3, 0.3);
- glRectf(v1[0], y1+0.5*sizey, v1[0]+dx, y1+sizey);
- v1[0]+= dx;
- }
-
- glShadeModel(GL_SMOOTH);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glEnable(GL_BLEND);
-
- cbd= coba->data;
-
- v1[0]= v2[0]= x1;
- v1[1]= y1;
- v2[1]= y1+sizey;
-
- glBegin(GL_QUAD_STRIP);
-
- glColor4fv( &cbd->r );
- glVertex2fv(v1); glVertex2fv(v2);
-
- for(a=0; a<coba->tot; a++, cbd++) {
-
- v1[0]=v2[0]= x1+ cbd->pos*sizex;
-
- glColor4fv( &cbd->r );
- glVertex2fv(v1); glVertex2fv(v2);
- }
-
- v1[0]=v2[0]= x1+ sizex;
- glVertex2fv(v1); glVertex2fv(v2);
-
- glEnd();
- glShadeModel(GL_FLAT);
- glDisable(GL_BLEND);
-
- /* outline */
- v1[0]= x1; v1[1]= y1;
-
- cpack(0x0);
- glBegin(GL_LINE_LOOP);
- glVertex2fv(v1);
- v1[0]+= sizex;
- glVertex2fv(v1);
- v1[1]+= sizey;
- glVertex2fv(v1);
- v1[0]-= sizex;
- glVertex2fv(v1);
- glEnd();
-
-
- /* help lines */
-
- v1[0]= v2[0]=v3[0]= x1;
- v1[1]= y1;
- v2[1]= y1+0.5*sizey;
- v3[1]= y1+sizey;
-
- cbd= coba->data;
- glBegin(GL_LINES);
- for(a=0; a<coba->tot; a++, cbd++) {
- v1[0]=v2[0]=v3[0]= x1+ cbd->pos*sizex;
-
- glColor3ub(0, 0, 0);
- glVertex2fv(v1);
- glVertex2fv(v2);
-
- if(a==coba->cur) {
- glVertex2f(v1[0]-1, v1[1]);
- glVertex2f(v2[0]-1, v2[1]);
- glVertex2f(v1[0]+1, v1[1]);
- glVertex2f(v2[0]+1, v2[1]);
- }
-
- glColor3ub(255, 255, 255);
- glVertex2fv(v2);
- glVertex2fv(v3);
-
- if(a==coba->cur) {
- if(cbd->pos>0.01) {
- glVertex2f(v2[0]-1, v2[1]);
- glVertex2f(v3[0]-1, v3[1]);
- }
- if(cbd->pos<0.99) {
- glVertex2f(v2[0]+1, v2[1]);
- glVertex2f(v3[0]+1, v3[1]);
- }
- }
- }
- glEnd();
-
-
- glFlush();
-}
-
-static void drawcolorband_cb(void)
+static int vergcband(const void *a1, const void *a2)
{
- ID *id, *idfrom;
-
- buttons_active_id(&id, &idfrom); /* base material, not the matlayer! */
- if( GS(id->name)==ID_TE) {
- Tex *tex= (Tex *)id;
- drawcolorband(tex->coba, 10,145,300,30);
- }
- else if( GS(id->name)==ID_MA) {
- Material *ma= (Material *)id;
- ma= get_active_matlayer(ma);
- if(ma) {
- if(ma->ramp_show==0)
- drawcolorband(ma->ramp_col, 10,110,300,30);
- else
- drawcolorband(ma->ramp_spec, 10,110,300,30);
- }
- }
-}
-
-static void do_colorbandbuts(ColorBand *coba, unsigned short event)
-{
- int a;
-
- if(coba==NULL) return;
-
- switch(event) {
- case B_ADDCOLORBAND:
-
- if(coba->tot < MAXCOLORBAND-1) coba->tot++;
- coba->cur= coba->tot-1;
-
- do_colorbandbuts(coba, B_CALCCBAND);
- BIF_undo_push("Add colorband");
-
- break;
-
- case B_DELCOLORBAND:
- if(coba->tot<2) return;
-
- for(a=coba->cur; a<coba->tot; a++) {
- coba->data[a]= coba->data[a+1];
- }
- if(coba->cur) coba->cur--;
- coba->tot--;
-
- BIF_undo_push("Delete colorband");
- allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
- break;
-
- case B_CALCCBAND:
- case B_CALCCBAND2:
- if(coba->tot<2) return;
-
- for(a=0; a<coba->tot; a++) coba->data[a].cur= a;
- qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
- for(a=0; a<coba->tot; a++) {
- if(coba->data[a].cur==coba->cur) {
- if(coba->cur!=a) addqueue(curarea->win, REDRAW, 0); /* button cur */
- coba->cur= a;
- break;
- }
- }
- if(event==B_CALCCBAND2) return;
-
- allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
-
- break;
-
- case B_DOCOLORBAND:
-
- break;
- }
-}
-
-/* callback for label button... the size of the button (300) still hardcoded! */
-static void do_colorband_cb(void *namev, void *arg2_unused)
-{
- ColorBand *coba= namev;
- CBData *cbd;
- uiBlock *block;
- float dx;
- int a;
- short mval[2], mvalo[2];
-
- /* weak; find panel where colorband is */
- block= uiFindOpenPanelBlockName(&curarea->uiblocks, "Colors");
- if(block==NULL) block= uiFindOpenPanelBlockName(&curarea->uiblocks, "Ramps");
+ const CBData *x1=a1, *x2=a2;
- if(coba && block) {
- int mindist= 12, xco;
- uiGetMouse(mywinget(), mvalo);
-
- if(G.qual & LR_CTRLKEY) {
- /* insert new key on mouse location */
- if(coba->tot < MAXCOLORBAND-1) {
- float pos= ((float)(mvalo[0] - 12))/300.0f;
- float col[4];
-
- do_colorband(coba, pos, col);
-
- coba->tot++;
- coba->cur= coba->tot-1;
-
- coba->data[coba->cur].r= col[0];
- coba->data[coba->cur].g= col[1];
- coba->data[coba->cur].b= col[2];
- coba->data[coba->cur].a= col[3];
- coba->data[coba->cur].pos= pos;
-
- do_colorbandbuts(coba, B_CALCCBAND);
- BIF_undo_push("Add colorband");
- }
- }
- else {
-
- /* first, activate new key when mouse is close */
- for(a=0, cbd= coba->data; a<coba->tot; a++, cbd++) {
- xco= 12 + (cbd->pos*300.0);
- xco= ABS(xco-mvalo[0]);
- if(a==coba->cur) xco+= 5; // selected one disadvantage
- if(xco<mindist) {
- coba->cur= a;
- mindist= xco;
- }
- }
-
- cbd= coba->data + coba->cur;
-
- while(get_mbut() & L_MOUSE) {
- uiGetMouse(mywinget(), mval);
- if(mval[0]!=mvalo[0]) {
- dx= mval[0]-mvalo[0];
- dx/= 300.0;
- cbd->pos+= dx;
- CLAMP(cbd->pos, 0.0, 1.0);
-
- glDrawBuffer(GL_FRONT);
- drawcolorband_cb();
- glDrawBuffer(GL_BACK);
-
- do_colorbandbuts(coba, B_CALCCBAND2);
- cbd= coba->data + coba->cur; /* because qsort */
-
- mvalo[0]= mval[0];
- }
- BIF_wait_for_statechange();
- }
- }
- allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
- shade_buttons_change_3d();
- }
+ if( x1->pos > x2->pos ) return 1;
+ else if( x1->pos < x2->pos) return -1;
+ return 0;
}
void do_texbuts(unsigned short event)
{
Tex *tex;
- Material *ma;
ImBuf *ibuf;
ScrArea *sa;
ID *id;
@@ -545,21 +278,21 @@ void do_texbuts(unsigned short event)
switch(event) {
case B_TEXCHANNEL:
scrarea_queue_headredraw(curarea);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
allqueue(REDRAWBUTSSHADING, 0);
break;
case B_TEXTYPE:
if(tex==0) return;
tex->stype= 0;
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
break;
case B_DEFTEXVAR:
if(tex==0) return;
default_tex(tex);
BIF_undo_push("Default texture vars");
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
break;
case B_LOADTEXIMA:
if(tex==0) return;
@@ -600,13 +333,9 @@ void do_texbuts(unsigned short event)
load_tex_image(str);
}
break;
- case B_TEXPRV:
- allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
- break;
case B_TEXREDR_PRV:
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
shade_buttons_change_3d();
break;
case B_TEXIMABROWSE:
@@ -625,7 +354,7 @@ void do_texbuts(unsigned short event)
BIF_undo_push("Browse image");
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
}
}
@@ -647,7 +376,7 @@ void do_texbuts(unsigned short event)
IMB_freeImBuf(ibuf);
tex->ima->ibuf= 0;
tex->ima->ok= 1;
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
}
}
@@ -676,7 +405,7 @@ void do_texbuts(unsigned short event)
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWIMAGE, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
allqueue(REDRAWBUTSSHADING, 0); // redraw buttons
@@ -686,7 +415,7 @@ void do_texbuts(unsigned short event)
tex->ima->id.us--;
tex->ima= NULL;
allqueue(REDRAWBUTSSHADING, 0); // redraw buttons
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
break;
case B_TEXSETFRAMES:
@@ -741,49 +470,29 @@ void do_texbuts(unsigned short event)
tex->stype= 0;
tex->plugin= add_plugin_tex(str);
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
break;
case B_COLORBAND:
if(tex==0) return;
- if(tex->coba==0) tex->coba= add_colorband();
+ if(tex->coba==0) tex->coba= add_colorband(0);
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed(); // also ramps, so we do this
- break;
-
- case B_ADDCOLORBAND:
- case B_DELCOLORBAND:
- case B_CALCCBAND:
- case B_CALCCBAND2:
- case B_DOCOLORBAND:
- /* these events can be called from material subcontext too */
- id= G.buts->lockpoin;
- if(id) {
- if( GS(id->name)==ID_TE) {
- tex= (Tex *)id;
- do_colorbandbuts(tex->coba, event);
- }
- else {
- ma= get_active_matlayer((Material *)id);
- if(ma->ramp_show==0) do_colorbandbuts(ma->ramp_col, event);
- else do_colorbandbuts(ma->ramp_spec, event);
- }
- }
+ BIF_preview_changed(ID_TE); // also ramps, so we do this
break;
-
+
case B_ENV_DELETE:
if(tex->env) {
RE_free_envmap(tex->env);
tex->env= 0;
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
break;
case B_ENV_FREE:
if(tex->env) {
RE_free_envmapdata(tex->env);
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
break;
case B_ENV_FREE_ALL:
@@ -797,7 +506,7 @@ void do_texbuts(unsigned short event)
tex= tex->id.next;
}
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
break;
case B_ENV_SAVE:
if(tex->env && tex->env->ok) {
@@ -809,7 +518,7 @@ void do_texbuts(unsigned short event)
break;
case B_ENV_OB:
if(tex->env && tex->env->object) {
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
if ELEM(tex->env->object->type, OB_CAMERA, OB_LAMP) {
error("Camera or Lamp not allowed");
tex->env->object= NULL;
@@ -822,7 +531,7 @@ void do_texbuts(unsigned short event)
PluginTex *pit= tex->plugin;
if(pit && pit->callback) {
pit->callback(event - B_PLUGBUT);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
allqueue(REDRAWBUTSSHADING, 0);
}
}
@@ -1353,39 +1062,113 @@ static void texture_panel_image(Tex *tex)
}
-static void draw_colorband_buts(uiBlock *block, ColorBand *coba, int offs, int redraw)
+static void colorband_pos_cb(void *coba_v, void *unused_v)
+{
+ ColorBand *coba= coba_v;
+ int a;
+
+ if(coba->tot<2) return;
+
+ for(a=0; a<coba->tot; a++) coba->data[a].cur= a;
+ qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
+ for(a=0; a<coba->tot; a++) {
+ if(coba->data[a].cur==coba->cur) {
+ if(coba->cur!=a) addqueue(curarea->win, REDRAW, 0); /* button cur */
+ coba->cur= a;
+ break;
+ }
+ }
+}
+
+static void colorband_add_cb(void *coba_v, void *unused_v)
+{
+ ColorBand *coba= coba_v;
+
+ if(coba->tot < MAXCOLORBAND-1) coba->tot++;
+ coba->cur= coba->tot-1;
+
+ colorband_pos_cb(coba, NULL);
+ BIF_undo_push("Add colorband");
+
+}
+
+static void colorband_del_cb(void *coba_v, void *unused_v)
+{
+ ColorBand *coba= coba_v;
+ int a;
+
+ if(coba->tot<2) return;
+
+ for(a=coba->cur; a<coba->tot; a++) {
+ coba->data[a]= coba->data[a+1];
+ }
+ if(coba->cur) coba->cur--;
+ coba->tot--;
+
+ BIF_undo_push("Delete colorband");
+ BIF_preview_changed(ID_TE);
+}
+
+
+/* offset aligns from bottom, standard width 300, height 115 */
+static void draw_colorband_buts(uiBlock *block, ColorBand *coba, int xoffs, int yoffs, int redraw)
{
CBData *cbd;
uiBut *bt;
-
+
if(coba==NULL) return;
- uiDefBut(block, BUT, B_ADDCOLORBAND, "Add", 90,180+offs,37,20, 0, 0, 0, 0, 0, "Adds a new colour position to the colorband");
- uiDefButS(block, NUM, B_REDR, "Cur:", 127,180+offs,81,20, &coba->cur, 0.0, (float)(coba->tot-1), 0, 0, "Displays the active colour from the colorband");
- uiDefBut(block, BUT, B_DELCOLORBAND, "Del", 209,180+offs,37,20, 0, 0, 0, 0, 0, "Deletes the active position");
- uiDefButS(block, ROW, redraw, "E", 246,180+offs,16,20, &coba->ipotype, 5.0, 1.0, 0, 0, "Sets interpolation type 'Ease' (quadratic) ");
- uiDefButS(block, ROW, B_TEXREDR_PRV, "C", 262,180+offs,16,20, &coba->ipotype, 5.0, 3.0, 0, 0, "Sets interpolation type Cardinal");
- uiDefButS(block, ROW, B_TEXREDR_PRV, "L", 278,180+offs,16,20, &coba->ipotype, 5.0, 0.0, 0, 0, "Sets interpolation type Linear");
- uiDefButS(block, ROW, B_TEXREDR_PRV, "S", 294,180+offs,16,20, &coba->ipotype, 5.0, 2.0, 0, 0, "Sets interpolation type B-Spline");
-
- bt=uiDefBut(block, LABEL, B_DOCOLORBAND, "", 10,150+offs,300,30, 0, 0, 0, 0, 0, "Colorband"); /* only for event! */
- uiButSetFunc(bt, do_colorband_cb, coba, NULL);
+ bt= uiDefBut(block, BUT, redraw, "Add", 80+xoffs,95+yoffs,37,20, 0, 0, 0, 0, 0, "Adds a new colour position to the colorband");
+ uiButSetFunc(bt, colorband_add_cb, coba, NULL);
+ uiDefButS(block, NUM, redraw, "Cur:", 117+xoffs,95+yoffs,81,20, &coba->cur, 0.0, (float)(coba->tot-1), 0, 0, "Displays the active colour from the colorband");
+ bt= uiDefBut(block, BUT, redraw, "Del", 199+xoffs,95+yoffs,37,20, 0, 0, 0, 0, 0, "Deletes the active position");
+ uiButSetFunc(bt, colorband_del_cb, coba, NULL);
+ uiDefButS(block, ROW, redraw, "E", 236+xoffs,95+yoffs,16,20, &coba->ipotype, 5.0, 1.0, 0, 0, "Sets interpolation type 'Ease' (quadratic) ");
+ uiDefButS(block, ROW, redraw, "C", 252+xoffs,95+yoffs,16,20, &coba->ipotype, 5.0, 3.0, 0, 0, "Sets interpolation type Cardinal");
+ uiDefButS(block, ROW, redraw, "L", 268+xoffs,95+yoffs,16,20, &coba->ipotype, 5.0, 0.0, 0, 0, "Sets interpolation type Linear");
+ uiDefButS(block, ROW, redraw, "S", 284+xoffs,95+yoffs,16,20, &coba->ipotype, 5.0, 2.0, 0, 0, "Sets interpolation type B-Spline");
- uiBlockSetDrawExtraFunc(block, drawcolorband_cb);
+ uiDefBut(block, BUT_COLORBAND, redraw, "", xoffs,65+yoffs,300,30, coba, 0, 0, 0, 0, "");
+
cbd= coba->data + coba->cur;
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_CALCCBAND, "Pos", 10,125+offs,110,20, &cbd->pos, 0.0, 1.0, 10, 0, "Sets the position of the active colour");
- uiDefButF(block, COL, B_TEXREDR_PRV, "", 10,105+offs,110,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "");
- uiDefButF(block, NUMSLI, B_TEXREDR_PRV, "A ", 10,85+offs,110,20, &cbd->a, 0.0, 1.0, 0, 0, "Sets the alpha value for this position");
+ bt= uiDefButF(block, NUM, redraw, "Pos", xoffs,40+yoffs,110,20, &cbd->pos, 0.0, 1.0, 10, 0, "Sets the position of the active colour");
+ uiButSetFunc(bt, colorband_pos_cb, coba, NULL);
+ uiDefButF(block, COL, redraw, "", xoffs,20+yoffs,110,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "");
+ uiDefButF(block, NUMSLI, redraw, "A ", xoffs,yoffs,110,20, &cbd->a, 0.0, 1.0, 10, 0, "Sets the alpha value for this position");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI, B_TEXREDR_PRV, "R ", 125,125+offs,185,20, &cbd->r, 0.0, 1.0, B_BANDCOL, 0, "Sets the red value for the active colour");
- uiDefButF(block, NUMSLI, B_TEXREDR_PRV, "G ", 125,105+offs,185,20, &cbd->g, 0.0, 1.0, B_BANDCOL, 0, "Sets the green value for the active colour");
- uiDefButF(block, NUMSLI, B_TEXREDR_PRV, "B ", 125,85+offs,185,20, &cbd->b, 0.0, 1.0, B_BANDCOL, 0, "Sets the blue value for the active colour");
+ uiDefButF(block, NUMSLI, redraw, "R ", 115+xoffs,40+yoffs,185,20, &cbd->r, 0.0, 1.0, B_BANDCOL, 0, "Sets the red value for the active colour");
+ uiDefButF(block, NUMSLI, redraw, "G ", 115+xoffs,20+yoffs,185,20, &cbd->g, 0.0, 1.0, B_BANDCOL, 0, "Sets the green value for the active colour");
+ uiDefButF(block, NUMSLI, redraw, "B ", 115+xoffs,yoffs,185,20, &cbd->b, 0.0, 1.0, B_BANDCOL, 0, "Sets the blue value for the active colour");
uiBlockEndAlign(block);
}
+void draw_colorband_buts_small(uiBlock *block, ColorBand *coba, rctf *butr, int event)
+{
+ CBData *cbd;
+ uiBut *bt;
+ float unit= (butr->xmax-butr->xmin)/12.0f;
+ float xs= butr->xmin;
+
+ cbd= coba->data + coba->cur;
+
+ uiBlockBeginAlign(block);
+ uiDefButF(block, COL, event, "", xs,butr->ymin+20.0f,2.0f*unit,20, &(cbd->r), 0, 0, 0, B_BANDCOL, "");
+ uiDefButF(block, NUM, event, "A:", xs+2.0f*unit,butr->ymin+20.0f,4.0f*unit,20, &(cbd->a), 0.0f, 1.0f, 10, 2, "");
+ bt= uiDefBut(block, BUT, event, "Del", xs+6.0f*unit,butr->ymin+20.0f,2.0f*unit,20, NULL, 0, 0, 0, 0, "Deletes the active position");
+ uiButSetFunc(bt, colorband_del_cb, coba, NULL);
+ uiDefButS(block, ROW, event, "E", xs+8.0f*unit,butr->ymin+20.0f,unit,20, &coba->ipotype, 5.0, 1.0, 0, 0, "Sets interpolation type 'Ease' (quadratic) ");
+ uiDefButS(block, ROW, event, "C", xs+9.0f*unit,butr->ymin+20.0f,unit,20, &coba->ipotype, 5.0, 3.0, 0, 0, "Sets interpolation type Cardinal");
+ uiDefButS(block, ROW, event, "L", xs+10.0f*unit,butr->ymin+20.0f,unit,20, &coba->ipotype, 5.0, 0.0, 0, 0, "Sets interpolation type Linear");
+ uiDefButS(block, ROW, event, "S", xs+11.0f*unit,butr->ymin+20.0f,unit,20, &coba->ipotype, 5.0, 2.0, 0, 0, "Sets interpolation type B-Spline");
+
+ uiDefBut(block, BUT_COLORBAND, event, "", xs,butr->ymin,butr->xmax-butr->xmin,20.0f, coba, 0, 0, 0, 0, "");
+ uiBlockEndAlign(block);
+
+}
+
static void texture_panel_colors(Tex *tex)
{
uiBlock *block;
@@ -1400,7 +1183,7 @@ static void texture_panel_colors(Tex *tex)
uiDefButBitS(block, TOG, TEX_COLORBAND, B_COLORBAND, "Colorband",10,180,80,20, &tex->flag, 0, 0, 0, 0, "Toggles colorband operations");
if(tex->flag & TEX_COLORBAND) {
- draw_colorband_buts(block, tex->coba, 0, B_TEXREDR_PRV);
+ draw_colorband_buts(block, tex->coba, 10, 85, B_TEXREDR_PRV);
}
/* RGB-BRICON */
@@ -1752,7 +1535,7 @@ void do_worldbuts(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWOOPS, 0);
BIF_undo_push("Unlink world texture");
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
}
break;
case B_WMTEXCOPY:
@@ -1780,7 +1563,7 @@ void do_worldbuts(unsigned short event)
id_us_plus((ID *)mtexcopybuf.tex);
BIF_undo_push("Paste mapping settings");
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
scrarea_queue_winredraw(curarea);
}
break;
@@ -1807,35 +1590,35 @@ static void world_panel_mapto(World *wrld)
/* TEXTURE OUTPUT */
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, MTEX_STENCIL, B_MATPRV, "Stencil", 10,125,45,19, &(mtex->texflag), 0, 0, 0, 0, "Sets the texture mapping to stencil mode");
- uiDefButBitS(block, TOG, MTEX_NEGATIVE, B_MATPRV, "Neg", 55,125,30,19, &(mtex->texflag), 0, 0, 0, 0, "Inverts the values of the texture to reverse its effect");
- uiDefButBitS(block, TOG, MTEX_RGBTOINT, B_MATPRV, "No RGB", 85,125,60,19, &(mtex->texflag), 0, 0, 0, 0, "Converts texture RGB values to intensity (gray) values");
+ uiDefButBitS(block, TOG, MTEX_STENCIL, B_WORLDPRV, "Stencil", 10,125,45,19, &(mtex->texflag), 0, 0, 0, 0, "Sets the texture mapping to stencil mode");
+ uiDefButBitS(block, TOG, MTEX_NEGATIVE, B_WORLDPRV, "Neg", 55,125,30,19, &(mtex->texflag), 0, 0, 0, 0, "Inverts the values of the texture to reverse its effect");
+ uiDefButBitS(block, TOG, MTEX_RGBTOINT, B_WORLDPRV, "No RGB", 85,125,60,19, &(mtex->texflag), 0, 0, 0, 0, "Converts texture RGB values to intensity (gray) values");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
- uiDefButF(block, NUMSLI, B_MATPRV, "R ", 10,80,135,19, &(mtex->r), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
- uiDefButF(block, NUMSLI, B_MATPRV, "G ", 10,60,135,19, &(mtex->g), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
- uiDefButF(block, NUMSLI, B_MATPRV, "B ", 10,40,135,19, &(mtex->b), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, COL, B_WORLDPRV, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "R ", 10,80,135,19, &(mtex->r), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "G ", 10,60,135,19, &(mtex->g), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "B ", 10,40,135,19, &(mtex->b), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
uiBlockEndAlign(block);
- uiDefButF(block, NUMSLI, B_MATPRV, "DVar ", 10,10,135,19, &(mtex->def_var), 0.0, 1.0, 0, 0, "The default value for textures to mix with values (not RGB)");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "DVar ", 10,10,135,19, &(mtex->def_var), 0.0, 1.0, 0, 0, "The default value for textures to mix with values (not RGB)");
/* MAP TO */
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, WOMAP_BLEND, B_MATPRV, "Blend", 10,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour progression of the background");
- uiDefButBitS(block, TOG, WOMAP_HORIZ, B_MATPRV, "Hori", 85,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the horizon");
- uiDefButBitS(block, TOG, WOMAP_ZENUP, B_MATPRV, "ZenUp", 160,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the zenith above");
- uiDefButBitS(block, TOG, WOMAP_ZENDOWN, B_MATPRV, "ZenDo", 235,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the zenith below");
+ uiDefButBitS(block, TOG, WOMAP_BLEND, B_WORLDPRV, "Blend", 10,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour progression of the background");
+ uiDefButBitS(block, TOG, WOMAP_HORIZ, B_WORLDPRV, "Hori", 85,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the horizon");
+ uiDefButBitS(block, TOG, WOMAP_ZENUP, B_WORLDPRV, "ZenUp", 160,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the zenith above");
+ uiDefButBitS(block, TOG, WOMAP_ZENDOWN, B_WORLDPRV, "ZenDo", 235,180,75,19, &(mtex->mapto), 0, 0, 0, 0, "Causes the texture to affect the colour of the zenith below");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButS(block, MENU, B_MATPRV, mapto_blendtype_pup(),155,125,155,19, &(mtex->blendtype), 0, 0, 0, 0, "Texture blending mode");
+ uiDefButS(block, MENU, B_WORLDPRV, mapto_blendtype_pup(),155,125,155,19, &(mtex->blendtype), 0, 0, 0, 0, "Texture blending mode");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI, B_MATPRV, "Col ", 155,100,155,19, &(mtex->colfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects colour values");
- uiDefButF(block, NUMSLI, B_MATPRV, "Nor ", 155,80,155,19, &(mtex->norfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects normal values");
- uiDefButF(block, NUMSLI, B_MATPRV, "Var ", 155,60,155,19, &(mtex->varfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects other values");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "Col ", 155,100,155,19, &(mtex->colfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects colour values");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "Nor ", 155,80,155,19, &(mtex->norfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects normal values");
+ uiDefButF(block, NUMSLI, B_WORLDPRV, "Var ", 155,60,155,19, &(mtex->varfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects other values");
}
@@ -1902,24 +1685,24 @@ static void world_panel_texture(World *wrld)
/* TEXCO */
uiBlockBeginAlign(block);
- uiDefButS(block, ROW, B_MATPRV, "View", 100,110,100,20, &(mtex->texco), 4.0, (float)TEXCO_VIEW, 0, 0, "Uses view vector for the texture coordinates");
- uiDefButS(block, ROW, B_MATPRV, "Global", 200,110,100,20, &(mtex->texco), 4.0, (float)TEXCO_GLOB, 0, 0, "Uses global coordinates for the texture coordinates (interior mist)");
+ uiDefButS(block, ROW, B_WORLDPRV, "View", 100,110,100,20, &(mtex->texco), 4.0, (float)TEXCO_VIEW, 0, 0, "Uses view vector for the texture coordinates");
+ uiDefButS(block, ROW, B_WORLDPRV, "Global", 200,110,100,20, &(mtex->texco), 4.0, (float)TEXCO_GLOB, 0, 0, "Uses global coordinates for the texture coordinates (interior mist)");
- uiDefButS(block, ROW, B_MATPRV, "AngMap", 100,90,70,20, &(mtex->texco), 4.0, (float)TEXCO_ANGMAP, 0, 0, "Uses 360 degree angular coordinates, e.g. for spherical light probes");
- uiDefButS(block, ROW, B_MATPRV, "Sphere", 170,90,65,20, &(mtex->texco), 4.0, (float)TEXCO_H_SPHEREMAP, 0, 0, "For 360 degree panorama sky, spherical mapped, only top half");
- uiDefButS(block, ROW, B_MATPRV, "Tube", 235,90,65,20, &(mtex->texco), 4.0, (float)TEXCO_H_TUBEMAP, 0, 0, "For 360 degree panorama sky, cylindrical mapped, only top half");
+ uiDefButS(block, ROW, B_WORLDPRV, "AngMap", 100,90,70,20, &(mtex->texco), 4.0, (float)TEXCO_ANGMAP, 0, 0, "Uses 360 degree angular coordinates, e.g. for spherical light probes");
+ uiDefButS(block, ROW, B_WORLDPRV, "Sphere", 170,90,65,20, &(mtex->texco), 4.0, (float)TEXCO_H_SPHEREMAP, 0, 0, "For 360 degree panorama sky, spherical mapped, only top half");
+ uiDefButS(block, ROW, B_WORLDPRV, "Tube", 235,90,65,20, &(mtex->texco), 4.0, (float)TEXCO_H_TUBEMAP, 0, 0, "For 360 degree panorama sky, cylindrical mapped, only top half");
- uiDefButS(block, ROW, B_MATPRV, "Object", 100,70,70,20, &(mtex->texco), 4.0, (float)TEXCO_OBJECT, 0, 0, "Uses linked object's coordinates for texture coordinates");
- uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_MATPRV, "", 170,70,130,20, &(mtex->object), "");
+ uiDefButS(block, ROW, B_WORLDPRV, "Object", 100,70,70,20, &(mtex->texco), 4.0, (float)TEXCO_OBJECT, 0, 0, "Uses linked object's coordinates for texture coordinates");
+ uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_WORLDPRV, "", 170,70,130,20, &(mtex->object), "");
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_MATPRV, "dX", 100,40,100,19, mtex->ofs, -20.0, 20.0, 10, 0, "Fine tunes texture mapping X coordinate");
- uiDefButF(block, NUM, B_MATPRV, "dY", 100,20,100,19, mtex->ofs+1, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Y coordinate");
- uiDefButF(block, NUM, B_MATPRV, "dZ", 100, 0,100,19, mtex->ofs+2, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Z coordinate");
+ uiDefButF(block, NUM, B_WORLDPRV, "dX", 100,40,100,19, mtex->ofs, -20.0, 20.0, 10, 0, "Fine tunes texture mapping X coordinate");
+ uiDefButF(block, NUM, B_WORLDPRV, "dY", 100,20,100,19, mtex->ofs+1, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Y coordinate");
+ uiDefButF(block, NUM, B_WORLDPRV, "dZ", 100, 0,100,19, mtex->ofs+2, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Z coordinate");
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_MATPRV, "sizeX", 200,40,100,19, mtex->size, -10.0, 10.0, 10, 0, "Sets scaling for the texture's X size");
- uiDefButF(block, NUM, B_MATPRV, "sizeY", 200,20,100,19, mtex->size+1, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Y size");
- uiDefButF(block, NUM, B_MATPRV, "sizeZ", 200, 0,100,19, mtex->size+2, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Z size");
+ uiDefButF(block, NUM, B_WORLDPRV, "sizeX", 200,40,100,19, mtex->size, -10.0, 10.0, 10, 0, "Sets scaling for the texture's X size");
+ uiDefButF(block, NUM, B_WORLDPRV, "sizeY", 200,20,100,19, mtex->size+1, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Y size");
+ uiDefButF(block, NUM, B_WORLDPRV, "sizeZ", 200, 0,100,19, mtex->size+2, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Z size");
}
@@ -2037,28 +1820,28 @@ static void world_panel_world(World *wrld)
uiSetButLock(wrld->id.lib!=0, "Can't edit library data");
uiBlockSetCol(block, TH_AUTO);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 10,150,145,19, &wrld->horr, 0, 0, 0, B_COLHOR, "");
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 160,150,145,19, &wrld->zenr, 0, 0, 0, B_COLZEN, "");
+ uiDefButF(block, COL, B_WORLDPRV, "", 10,150,145,19, &wrld->horr, 0, 0, 0, B_COLHOR, "");
+ uiDefButF(block, COL, B_WORLDPRV, "", 160,150,145,19, &wrld->zenr, 0, 0, 0, B_COLZEN, "");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI,B_MATPRV,"HoR ", 10,130,145,19, &(wrld->horr), 0.0, 1.0, B_COLHOR,0, "Sets the amount of red colour at the horizon");
- uiDefButF(block, NUMSLI,B_MATPRV,"HoG ", 10,110,145,19, &(wrld->horg), 0.0, 1.0, B_COLHOR,0, "Sets the amount of green colour at the horizon");
- uiDefButF(block, NUMSLI,B_MATPRV,"HoB ", 10,90,145,19, &(wrld->horb), 0.0, 1.0, B_COLHOR,0, "Sets the amount of blue colour at the horizon");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"HoR ", 10,130,145,19, &(wrld->horr), 0.0, 1.0, B_COLHOR,0, "Sets the amount of red colour at the horizon");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"HoG ", 10,110,145,19, &(wrld->horg), 0.0, 1.0, B_COLHOR,0, "Sets the amount of green colour at the horizon");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"HoB ", 10,90,145,19, &(wrld->horb), 0.0, 1.0, B_COLHOR,0, "Sets the amount of blue colour at the horizon");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI,B_MATPRV,"ZeR ", 160,130,145,19, &(wrld->zenr), 0.0, 1.0, B_COLZEN,0, "Sets the amount of red colour at the zenith");
- uiDefButF(block, NUMSLI,B_MATPRV,"ZeG ", 160,110,145,19, &(wrld->zeng), 0.0, 1.0, B_COLZEN,0, "Sets the amount of green colour at the zenith");
- uiDefButF(block, NUMSLI,B_MATPRV,"ZeB ", 160,90,145,19, &(wrld->zenb), 0.0, 1.0, B_COLZEN,0, "Sets the amount of blue colour at the zenith");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"ZeR ", 160,130,145,19, &(wrld->zenr), 0.0, 1.0, B_COLZEN,0, "Sets the amount of red colour at the zenith");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"ZeG ", 160,110,145,19, &(wrld->zeng), 0.0, 1.0, B_COLZEN,0, "Sets the amount of green colour at the zenith");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"ZeB ", 160,90,145,19, &(wrld->zenb), 0.0, 1.0, B_COLZEN,0, "Sets the amount of blue colour at the zenith");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI,B_MATPRV,"AmbR ", 10,50,145,19, &(wrld->ambr), 0.0, 1.0 ,0,0, "Sets the amount of red ambient colour");
- uiDefButF(block, NUMSLI,B_MATPRV,"AmbG ", 10,30,145,19, &(wrld->ambg), 0.0, 1.0 ,0,0, "Sets the amount of green ambient colour");
- uiDefButF(block, NUMSLI,B_MATPRV,"AmbB ", 10,10,145,19, &(wrld->ambb), 0.0, 1.0 ,0,0, "Sets the amount of blue ambient colour");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"AmbR ", 10,50,145,19, &(wrld->ambr), 0.0, 1.0 ,0,0, "Sets the amount of red ambient colour");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"AmbG ", 10,30,145,19, &(wrld->ambg), 0.0, 1.0 ,0,0, "Sets the amount of green ambient colour");
+ uiDefButF(block, NUMSLI,B_WORLDPRV,"AmbB ", 10,10,145,19, &(wrld->ambb), 0.0, 1.0 ,0,0, "Sets the amount of blue ambient colour");
uiBlockBeginAlign(block);
uiBlockSetCol(block, TH_BUT_SETTING1);
- uiDefButF(block, NUMSLI,B_MATPRV, "Exp ", 160,30,145,19, &(wrld->exp), 0.0, 1.0, 0, 2, "Sets amount of exponential color correction for light");
- uiDefButF(block, NUMSLI,B_MATPRV, "Range ", 160,10,145,19, &(wrld->range), 0.2, 5.0, 0, 2, "Sets the color amount that will be mapped on color 1.0");
+ uiDefButF(block, NUMSLI,B_WORLDPRV, "Exp ", 160,30,145,19, &(wrld->exp), 0.0, 1.0, 0, 2, "Sets amount of exponential color correction for light");
+ uiDefButF(block, NUMSLI,B_WORLDPRV, "Range ", 160,10,145,19, &(wrld->range), 0.2, 5.0, 0, 2, "Sets the color amount that will be mapped on color 1.0");
}
@@ -2081,9 +1864,9 @@ static void world_panel_preview(World *wrld)
uiDefBut(block, LABEL, 0, " ", 20,20,10,10, 0, 0, 0, 0, 0, "");
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, WO_SKYREAL, B_MATPRV,"Real", 200,175,80,25, &wrld->skytype, 0, 0, 0, 0, "Renders background with a real horizon");
- uiDefButBitS(block, TOG, WO_SKYBLEND, B_MATPRV,"Blend",200,150,80,25, &wrld->skytype, 0, 0, 0, 0, "Renders background with natural progression from horizon to zenith");
- uiDefButBitS(block, TOG,WO_SKYPAPER, B_MATPRV,"Paper",200,125,80,25, &wrld->skytype, 0, 0, 0, 0, "Flattens blend or texture coordinates");
+ uiDefButBitS(block, TOG, WO_SKYREAL, B_WORLDPRV,"Real", 200,175,80,25, &wrld->skytype, 0, 0, 0, 0, "Renders background with a real horizon");
+ uiDefButBitS(block, TOG, WO_SKYBLEND, B_WORLDPRV,"Blend",200,150,80,25, &wrld->skytype, 0, 0, 0, 0, "Renders background with natural progression from horizon to zenith");
+ uiDefButBitS(block, TOG,WO_SKYPAPER, B_WORLDPRV,"Paper",200,125,80,25, &wrld->skytype, 0, 0, 0, 0, "Flattens blend or texture coordinates");
uiBlockEndAlign(block);
}
@@ -2099,7 +1882,7 @@ void do_lampbuts(unsigned short event)
switch(event) {
case B_LAMPREDRAW:
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWBUTSSHADING, 0);
break;
@@ -2113,7 +1896,7 @@ void do_lampbuts(unsigned short event)
BIF_undo_push("Unlink world texture");
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
}
break;
case B_SBUFF:
@@ -2162,7 +1945,7 @@ void do_lampbuts(unsigned short event)
id_us_plus((ID *)mtexcopybuf.tex);
BIF_undo_push("Paste mapping settings");
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
scrarea_queue_winredraw(curarea);
}
break;
@@ -2193,27 +1976,27 @@ static void lamp_panel_mapto(Object *ob, Lamp *la)
/* TEXTURE OUTPUT */
uiBlockBeginAlign(block);
- uiDefButBitS(block, TOG, MTEX_STENCIL, B_MATPRV, "Stencil", 10,125,45,19, &(mtex->texflag), 0, 0, 0, 0, "Sets the texture mapping to stencil mode");
- uiDefButBitS(block, TOG, MTEX_NEGATIVE, B_MATPRV, "Neg", 55,125,30,19, &(mtex->texflag), 0, 0, 0, 0, "Inverts the values of the texture to reverse its effect");
- uiDefButBitS(block, TOG, MTEX_RGBTOINT, B_MATPRV, "No RGB", 85,125,60,19, &(mtex->texflag), 0, 0, 0, 0, "Converts texture RGB values to intensity (gray) values");
+ uiDefButBitS(block, TOG, MTEX_STENCIL, B_LAMPPRV, "Stencil", 10,125,45,19, &(mtex->texflag), 0, 0, 0, 0, "Sets the texture mapping to stencil mode");
+ uiDefButBitS(block, TOG, MTEX_NEGATIVE, B_LAMPPRV, "Neg", 55,125,30,19, &(mtex->texflag), 0, 0, 0, 0, "Inverts the values of the texture to reverse its effect");
+ uiDefButBitS(block, TOG, MTEX_RGBTOINT, B_LAMPPRV, "No RGB", 85,125,60,19, &(mtex->texflag), 0, 0, 0, 0, "Converts texture RGB values to intensity (gray) values");
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
- uiDefButF(block, NUMSLI, B_MATPRV, "R ", 10,80,135,19, &(mtex->r), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
- uiDefButF(block, NUMSLI, B_MATPRV, "G ", 10,60,135,19, &(mtex->g), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
- uiDefButF(block, NUMSLI, B_MATPRV, "B ", 10,40,135,19, &(mtex->b), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, COL, B_LAMPPRV, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
+ uiDefButF(block, NUMSLI, B_LAMPPRV, "R ", 10,80,135,19, &(mtex->r), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, NUMSLI, B_LAMPPRV, "G ", 10,60,135,19, &(mtex->g), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
+ uiDefButF(block, NUMSLI, B_LAMPPRV, "B ", 10,40,135,19, &(mtex->b), 0.0, 1.0, B_MTEXCOL, 0, "The default color for textures that don't return RGB");
uiBlockEndAlign(block);
- uiDefButF(block, NUMSLI, B_MATPRV, "DVar ", 10,10,135,19, &(mtex->def_var), 0.0, 1.0, 0, 0, "The default value the textures uses to mix with");
+ uiDefButF(block, NUMSLI, B_LAMPPRV, "DVar ", 10,10,135,19, &(mtex->def_var), 0.0, 1.0, 0, 0, "The default value the textures uses to mix with");
/* MAP TO */
- uiDefButBitS(block, TOG, MAP_COL, B_MATPRV, "Col", 10,180,135,19, &(mtex->mapto), 0, 0, 0, 0, "Lets the texture affect the basic colour of the lamp");
+ uiDefButBitS(block, TOG, MAP_COL, B_LAMPPRV, "Col", 10,180,135,19, &(mtex->mapto), 0, 0, 0, 0, "Lets the texture affect the basic colour of the lamp");
uiBlockBeginAlign(block);
- uiDefButS(block, MENU, B_MATPRV, mapto_blendtype_pup(),155,125,155,19, &(mtex->blendtype), 0, 0, 0, 0, "Texture blending mode");
+ uiDefButS(block, MENU, B_LAMPPRV, mapto_blendtype_pup(),155,125,155,19, &(mtex->blendtype), 0, 0, 0, 0, "Texture blending mode");
uiBlockEndAlign(block);
- uiDefButF(block, NUMSLI, B_MATPRV, "Col ", 155,100,155,19, &(mtex->colfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects colour values");
+ uiDefButF(block, NUMSLI, B_LAMPPRV, "Col ", 155,100,155,19, &(mtex->colfac), 0.0, 1.0, 0, 0, "Sets the amount the texture affects colour values");
}
@@ -2282,19 +2065,19 @@ static void lamp_panel_texture(Object *ob, Lamp *la)
/* TEXCO */
uiBlockSetCol(block, TH_AUTO);
uiBlockBeginAlign(block);
- uiDefButS(block, ROW, B_MATPRV, "Glob", 100,110,60,20, &(mtex->texco), 4.0, (float)TEXCO_GLOB, 0, 0, "Uses global coordinates for the texture coordinates");
- uiDefButS(block, ROW, B_MATPRV, "View", 160,110,70,20, &(mtex->texco), 4.0, (float)TEXCO_VIEW, 0, 0, "Uses view coordinates for the texture coordinates");
- uiDefButS(block, ROW, B_MATPRV, "Object", 230,110,70,20, &(mtex->texco), 4.0, (float)TEXCO_OBJECT, 0, 0, "Uses linked object's coordinates for texture coordinates");
- uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_MATPRV, "", 100,90,200,20, &(mtex->object), "");
+ uiDefButS(block, ROW, B_LAMPPRV, "Glob", 100,110,60,20, &(mtex->texco), 4.0, (float)TEXCO_GLOB, 0, 0, "Uses global coordinates for the texture coordinates");
+ uiDefButS(block, ROW, B_LAMPPRV, "View", 160,110,70,20, &(mtex->texco), 4.0, (float)TEXCO_VIEW, 0, 0, "Uses view coordinates for the texture coordinates");
+ uiDefButS(block, ROW, B_LAMPPRV, "Object", 230,110,70,20, &(mtex->texco), 4.0, (float)TEXCO_OBJECT, 0, 0, "Uses linked object's coordinates for texture coordinates");
+ uiDefIDPoinBut(block, test_obpoin_but, ID_OB, B_LAMPPRV, "", 100,90,200,20, &(mtex->object), "");
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_MATPRV, "dX", 100,50,100,18, mtex->ofs, -20.0, 20.0, 10, 0, "Fine tunes texture mapping X coordinate");
- uiDefButF(block, NUM, B_MATPRV, "dY", 100,30,100,18, mtex->ofs+1, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Y coordinate");
- uiDefButF(block, NUM, B_MATPRV, "dZ", 100,10,100,18, mtex->ofs+2, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Z coordinate");
+ uiDefButF(block, NUM, B_LAMPPRV, "dX", 100,50,100,18, mtex->ofs, -20.0, 20.0, 10, 0, "Fine tunes texture mapping X coordinate");
+ uiDefButF(block, NUM, B_LAMPPRV, "dY", 100,30,100,18, mtex->ofs+1, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Y coordinate");
+ uiDefButF(block, NUM, B_LAMPPRV, "dZ", 100,10,100,18, mtex->ofs+2, -20.0, 20.0, 10, 0, "Fine tunes texture mapping Z coordinate");
uiBlockBeginAlign(block);
- uiDefButF(block, NUM, B_MATPRV, "sizeX", 200,50,100,18, mtex->size, -10.0, 10.0, 10, 0, "Sets scaling for the texture's X size");
- uiDefButF(block, NUM, B_MATPRV, "sizeY", 200,30,100,18, mtex->size+1, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Y size");
- uiDefButF(block, NUM, B_MATPRV, "sizeZ", 200,10,100,18, mtex->size+2, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Z size");
+ uiDefButF(block, NUM, B_LAMPPRV, "sizeX", 200,50,100,18, mtex->size, -10.0, 10.0, 10, 0, "Sets scaling for the texture's X size");
+ uiDefButF(block, NUM, B_LAMPPRV, "sizeY", 200,30,100,18, mtex->size+1, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Y size");
+ uiDefButF(block, NUM, B_LAMPPRV, "sizeZ", 200,10,100,18, mtex->size+2, -10.0, 10.0, 10, 0, "Sets scaling for the texture's Z size");
uiBlockEndAlign(block);
}
@@ -2497,33 +2280,33 @@ static void lamp_panel_lamp(Object *ob, Lamp *la)
}
else if ELEM(la->type, LA_LOCAL, LA_SPOT) {
uiBlockSetCol(block, TH_BUT_SETTING1);
- uiDefButBitS(block, TOG, LA_QUAD, B_MATPRV,"Quad", 10,150,100,19,&la->mode, 0, 0, 0, 0, "Uses inverse quadratic proportion for light attenuation");
+ uiDefButBitS(block, TOG, LA_QUAD, B_LAMPPRV,"Quad", 10,150,100,19,&la->mode, 0, 0, 0, 0, "Uses inverse quadratic proportion for light attenuation");
uiDefButBitS(block, TOG, LA_SPHERE, REDRAWVIEW3D,"Sphere", 10,130,100,19,&la->mode, 0, 0, 0, 0, "Sets light intensity to zero for objects beyond the distance value");
}
uiBlockBeginAlign(block);
uiBlockSetCol(block, TH_BUT_SETTING1);
uiDefButBitS(block, TOG, LA_LAYER, 0,"Layer", 10,70,100,19,&la->mode, 0, 0, 0, 0, "Illuminates objects in the same layer as the lamp only");
- uiDefButBitS(block, TOG, LA_NEG, B_MATPRV,"Negative", 10,50,100,19,&la->mode, 0, 0, 0, 0, "Sets lamp to cast negative light");
+ uiDefButBitS(block, TOG, LA_NEG, B_LAMPPRV,"Negative", 10,50,100,19,&la->mode, 0, 0, 0, 0, "Sets lamp to cast negative light");
uiDefButBitS(block, TOG, LA_NO_DIFF, 0,"No Diffuse", 10,30,100,19,&la->mode, 0, 0, 0, 0, "Disables diffuse shading of material illuminated by this lamp");
uiDefButBitS(block, TOG, LA_NO_SPEC, 0,"No Specular", 10,10,100,19,&la->mode, 0, 0, 0, 0, "Disables specular shading of material illuminated by this lamp");
uiBlockEndAlign(block);
uiBlockSetCol(block, TH_AUTO);
- uiDefButF(block, NUMSLI,B_MATPRV,"Energy ", 120,150,180,20, &(la->energy), 0.0, 10.0, 0, 0, "Sets the intensity of the light");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"Energy ", 120,150,180,20, &(la->energy), 0.0, 10.0, 0, 0, "Sets the intensity of the light");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI,B_MATPRV,"R ", 120,120,180,20,&la->r, 0.0, 1.0, B_COLLAMP, 0, "Sets the red component of the light");
- uiDefButF(block, NUMSLI,B_MATPRV,"G ", 120,100,180,20,&la->g, 0.0, 1.0, B_COLLAMP, 0, "Sets the green component of the light");
- uiDefButF(block, NUMSLI,B_MATPRV,"B ", 120,80,180,20,&la->b, 0.0, 1.0, B_COLLAMP, 0, "Sets the blue component of the light");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"R ", 120,120,180,20,&la->r, 0.0, 1.0, B_COLLAMP, 0, "Sets the red component of the light");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"G ", 120,100,180,20,&la->g, 0.0, 1.0, B_COLLAMP, 0, "Sets the green component of the light");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"B ", 120,80,180,20,&la->b, 0.0, 1.0, B_COLLAMP, 0, "Sets the blue component of the light");
uiBlockEndAlign(block);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 120,52,180,24, &la->r, 0, 0, 0, B_COLLAMP, "");
+ uiDefButF(block, COL, B_LAMPPRV, "", 120,52,180,24, &la->r, 0, 0, 0, B_COLLAMP, "");
uiBlockBeginAlign(block);
if ELEM(la->type, LA_LOCAL, LA_SPOT) {
- uiDefButF(block, NUMSLI,B_MATPRV,"Quad1 ", 120,30,180,19,&la->att1, 0.0, 1.0, 0, 0, "Set the linear distance attenuatation for a quad lamp");
- uiDefButF(block, NUMSLI,B_MATPRV,"Quad2 ", 120,10,180,19,&la->att2, 0.0, 1.0, 0, 0, "Set the quadratic distance attenuatation for a quad lamp");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"Quad1 ", 120,30,180,19,&la->att1, 0.0, 1.0, 0, 0, "Set the linear distance attenuatation for a quad lamp");
+ uiDefButF(block, NUMSLI,B_LAMPPRV,"Quad2 ", 120,10,180,19,&la->att2, 0.0, 1.0, 0, 0, "Set the quadratic distance attenuatation for a quad lamp");
}
else if(la->type==LA_AREA) {
if(la->k==0.0) la->k= 1.0;
@@ -2626,7 +2409,7 @@ void do_matbuts(unsigned short event)
break;
}
}
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
allqueue(REDRAWBUTSSHADING, 0);
shade_buttons_change_3d();
break;
@@ -2636,7 +2419,7 @@ void do_matbuts(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
break;
case B_MATFROM:
scrarea_queue_headredraw(curarea);
@@ -2645,15 +2428,21 @@ void do_matbuts(unsigned short event)
// BIF_previewdraw(); push/pop!
break;
case B_MATPRV:
- /* this event also used by lamp, tex and sky */
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
allqueue(REDRAWBUTSSHADING, 0);
shade_buttons_change_3d();
break;
- case B_MATPRV_DRAW:
- BIF_preview_changed(G.buts);
+ case B_TEXPRV:
+ BIF_preview_changed(ID_TE);
+ allqueue(REDRAWBUTSSHADING, 0);
+ break;
+ case B_LAMPPRV:
+ BIF_preview_changed(ID_LA);
+ allqueue(REDRAWBUTSSHADING, 0);
+ break;
+ case B_WORLDPRV:
+ BIF_preview_changed(ID_WO);
allqueue(REDRAWBUTSSHADING, 0);
- shade_buttons_change_3d();
break;
case B_MATHALO:
/* when halo is disabled, clear star flag, this is the same as MA_FACETEXTURE <blush> */
@@ -2661,7 +2450,7 @@ void do_matbuts(unsigned short event)
if((ma->mode & MA_HALO)==0) {
ma->mode &= ~(MA_STAR|MA_HALO_XALPHA|MA_ZINV);
}
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
allqueue(REDRAWBUTSSHADING, 0);
shade_buttons_change_3d();
break;
@@ -2674,7 +2463,7 @@ void do_matbuts(unsigned short event)
BIF_undo_push("Unlink material texture");
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
break;
case B_MTEXCOPY:
@@ -2700,7 +2489,7 @@ void do_matbuts(unsigned short event)
id_us_plus((ID *)mtexcopybuf.tex);
BIF_undo_push("Paste mapping settings");
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
scrarea_queue_winredraw(curarea);
}
break;
@@ -2714,25 +2503,25 @@ void do_matbuts(unsigned short event)
if(ma) {
ma->mode &= ~MA_RAYTRANSP;
allqueue(REDRAWBUTSSHADING, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
break;
case B_MATRAYTRANSP:
if(ma) {
ma->mode &= ~MA_ZTRA;
allqueue(REDRAWBUTSSHADING, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
break;
case B_MATCOLORBAND:
if(ma) {
if(ma->mode & MA_RAMP_COL)
- if(ma->ramp_col==NULL) ma->ramp_col= add_colorband();
+ if(ma->ramp_col==NULL) ma->ramp_col= add_colorband(0);
if(ma->mode & MA_RAMP_SPEC)
- if(ma->ramp_spec==NULL) ma->ramp_spec= add_colorband();
+ if(ma->ramp_spec==NULL) ma->ramp_spec= add_colorband(0);
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_MA);
shade_buttons_change_3d();
}
break;
@@ -2756,13 +2545,29 @@ void do_matbuts(unsigned short event)
ml->mat->id.us++;
}
allqueue(REDRAWBUTSSHADING, 0);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_MA);
break;
}
}
}
break;
+ case B_MAT_USENODES:
+ ma= G.buts->lockpoin; /* use base material instead */
+ if(ma) {
+ if(ma->use_nodes && ma->nodetree==NULL) {
+ node_shader_default(ma);
+ }
+ BIF_preview_changed(ID_MA);
+ allqueue(REDRAWNODE, 0);
+ allqueue(REDRAWBUTSSHADING, 0);
+ }
+ break;
+ case B_NODE_EXEC:
+ BIF_preview_changed(ID_MA);
+ allqueue(REDRAWNODE, 0);
+ allqueue(REDRAWBUTSSHADING, 0);
+ break;
}
}
@@ -2791,7 +2596,7 @@ static void material_panel_map_to(Material *ma)
uiBlockEndAlign(block);
uiBlockBeginAlign(block);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
+ uiDefButF(block, COL, B_MATPRV, "", 10,100,135,19, &(mtex->r), 0, 0, 0, B_MTEXCOL, "");
if(ma->colormodel==MA_HSV) {
uiBlockSetCol(block, TH_BUT_SETTING1);
@@ -2877,7 +2682,7 @@ static void material_panel_map_input(Object *ob, Material *ma)
uiDefButS(block, ROW, B_MATPRV, "Refl", 864,160,44,18, &(mtex->texco), 4.0, (float)TEXCO_REFL, 0, 0, "Uses reflection vector as texture coordinates");
uiDefButS(block, ROW, B_MATPRV, "Stress", 630,140,70,18, &(mtex->texco), 4.0, (float)TEXCO_STRESS, 0, 0, "Uses the difference of edge lengths compared to original coordinates of the mesh");
- uiDefButS(block, ROW, B_MATPRV, "Tangent", 700,140,70,18, &(mtex->texco), 4.0, (float)TEXCO_TANGENT, 0, 0, "Uses te optional tangent vector as texture coordinates");
+ uiDefButS(block, ROW, B_MATPRV, "Tangent", 700,140,70,18, &(mtex->texco), 4.0, (float)TEXCO_TANGENT, 0, 0, "Uses the optional tangent vector as texture coordinates");
/* COORDS */
uiBlockBeginAlign(block);
@@ -2933,7 +2738,7 @@ static void material_panel_texture(Material *ma)
if(mtex && mtex->tex) splitIDname(mtex->tex->id.name+2, str, &loos);
else strcpy(str, "");
str[10]= 0;
- uiDefButC(block, ROW, B_MATPRV_DRAW, str, 10, 180-18*a, 70, 20, &(ma->texact), 3.0, (float)a, 0, 0, "");
+ uiDefButC(block, ROW, B_MATPRV, str, 10, 180-18*a, 70, 20, &(ma->texact), 3.0, (float)a, 0, 0, "");
}
uiBlockEndAlign(block);
@@ -2944,8 +2749,8 @@ static void material_panel_texture(Material *ma)
mtex= ma->mtex[a];
if(mtex && mtex->tex) {
if(ma->septex & (1<<a))
- uiDefButBitS(block, TOG, 1<<a, B_MATPRV_DRAW, " ", -20, 180-18*a, 28, 20, &ma->septex, 0.0, 0.0, 0, 0, "Click to disable or enable this texture channel");
- else uiDefIconButBitS(block, TOG, 1<<a, B_MATPRV_DRAW, ICON_CHECKBOX_HLT, -20, 180-18*a, 28, 20, &ma->septex, 0.0, 0.0, 0, 0, "Click to disable or enable this texture channel");
+ uiDefButBitS(block, TOG, 1<<a, B_MATPRV, " ", -20, 180-18*a, 28, 20, &ma->septex, 0.0, 0.0, 0, 0, "Click to disable or enable this texture channel");
+ else uiDefIconButBitS(block, TOG, 1<<a, B_MATPRV, ICON_CHECKBOX_HLT, -20, 180-18*a, 28, 20, &ma->septex, 0.0, 0.0, 0, 0, "Click to disable or enable this texture channel");
}
}
@@ -3077,7 +2882,7 @@ static void material_panel_tramir_yafray(Material *ma)
/* absorption color */
uiDefBut(block, LABEL, 0, "Absorption Color", 10, 98, 150, 18, 0, 0.0, 0.0, 0, 0, "");
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 10, 38, 30, 58, &ma->YF_ar, 0, 0, 0, B_MATCOL, "transmit absorption color, white is no absorption");
+ uiDefButF(block, COL, B_MATPRV, "", 10, 38, 30, 58, &ma->YF_ar, 0, 0, 0, B_MATCOL, "transmit absorption color, white is no absorption");
uiDefButF(block, NUMSLI, B_MATPRV, "aR ", 40, 78, 120, 18, &ma->YF_ar, 1e-7f, 1.0, B_MATCOL, 0, "");
uiDefButF(block, NUMSLI, B_MATPRV, "aG ", 40, 58, 120, 18, &ma->YF_ag, 1e-7f, 1.0, B_MATCOL, 0, "");
uiDefButF(block, NUMSLI, B_MATPRV, "aB ", 40, 38, 120, 18, &ma->YF_ab, 1e-7f, 1.0, B_MATCOL, 0, "");
@@ -3123,7 +2928,7 @@ static void material_panel_shading(Material *ma)
uiBlockSetCol(block, TH_BUT_SETTING1);
uiBlockBeginAlign(block);
- uiDefButBitI(block, TOG, MA_HALO_FLARE, B_MATPRV_DRAW, "Flare",245,142,65,28, &(ma->mode), 0, 0, 0, 0, "Renders halo as a lensflare");
+ uiDefButBitI(block, TOG, MA_HALO_FLARE, B_MATPRV, "Flare",245,142,65,28, &(ma->mode), 0, 0, 0, 0, "Renders halo as a lensflare");
uiDefButBitI(block, TOG, MA_HALO_RINGS, B_MATPRV, "Rings", 245,123,65, 18, &(ma->mode), 0, 0, 0, 0, "Renders rings over halo");
uiDefButBitI(block, TOG, MA_HALO_LINES, B_MATPRV, "Lines", 245,104,65, 18, &(ma->mode), 0, 0, 0, 0, "Renders star shaped lines over halo");
uiDefButBitI(block, TOG, MA_STAR, B_MATPRV, "Star", 245,85,65, 18, &(ma->mode), 0, 0, 0, 0, "Renders halo as a star");
@@ -3138,7 +2943,7 @@ static void material_panel_shading(Material *ma)
char *str2= "Specular Shader%t|CookTorr %x0|Phong %x1|Blinn %x2|Toon %x3|WardIso %x4";
/* diff shader buttons */
- uiDefButS(block, MENU, B_MATPRV_DRAW, str1, 9, 180,78,19, &(ma->diff_shader), 0.0, 0.0, 0, 0, "Creates a diffuse shader");
+ uiDefButS(block, MENU, B_MATPRV, str1, 9, 180,78,19, &(ma->diff_shader), 0.0, 0.0, 0, 0, "Creates a diffuse shader");
uiBlockBeginAlign(block);
uiDefButF(block, NUMSLI, B_MATPRV, "Ref ", 90,180,150,19, &(ma->ref), 0.0, 1.0, 0, 0, "Sets the amount of reflection");
@@ -3157,7 +2962,7 @@ static void material_panel_shading(Material *ma)
uiBlockEndAlign(block);
/* spec shader buttons */
- uiDefButS(block, MENU, B_MATPRV_DRAW, str2, 9,120,77,19, &(ma->spec_shader), 0.0, 0.0, 0, 0, "Creates a specular shader");
+ uiDefButS(block, MENU, B_MATPRV, str2, 9,120,77,19, &(ma->spec_shader), 0.0, 0.0, 0, 0, "Creates a specular shader");
uiBlockBeginAlign(block);
uiDefButF(block, NUMSLI, B_MATPRV, "Spec ", 90,120,150,19, &(ma->spec), 0.0, 2.0, 0, 0, "Sets the degree of specularity");
@@ -3302,13 +3107,13 @@ static void material_panel_layers(Material *ma)
if(ml->flag & ML_ACTIVE) break;
if(ml==NULL)
- but=uiDefIconBut(block, BUT, B_MATPRV_DRAW, ICON_MATERIAL, 10, 180, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate base Material");
- else but=uiDefBut(block, BUT, B_MATPRV_DRAW, " ", 10, 180, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate base Material");
+ but=uiDefIconBut(block, BUT, B_MATPRV, ICON_MATERIAL, 10, 180, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate base Material");
+ else but=uiDefBut(block, BUT, B_MATPRV, " ", 10, 180, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate base Material");
uiButSetFunc(but, matlayer_active, ma, NULL);
/* Enable/disable for current material */
if(ma->ml_flag & ML_RENDER)
- uiDefIconButBitS(block, TOG, ML_RENDER, B_MATPRV_DRAW, ICON_CHECKBOX_HLT, 30, 180, 20, 20, &ma->ml_flag, 0.0, 0.0, 0, 0, "Enable or disable base Material");
+ uiDefIconButBitS(block, TOG, ML_RENDER, B_MATPRV, ICON_CHECKBOX_HLT, 30, 180, 20, 20, &ma->ml_flag, 0.0, 0.0, 0, 0, "Enable or disable base Material");
else uiDefButBitS(block, TOG, ML_RENDER, B_MATPRV, " ", 30, 180, 20, 20, &ma->ml_flag, 0.0, 0.0, 0, 0, "Enable or disable base Material");
uiBlockEndAlign(block);
@@ -3328,13 +3133,13 @@ static void material_panel_layers(Material *ma)
/* Active button */
uiBlockBeginAlign(block);
if(ml->flag & ML_ACTIVE)
- but=uiDefIconBut(block, BUT, B_MATPRV_DRAW, ICON_MATERIAL, 10, yco, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate this layer");
- else but=uiDefBut(block, BUT, B_MATPRV_DRAW, " ", 10, yco, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate this layer");
+ but=uiDefIconBut(block, BUT, B_MATPRV, ICON_MATERIAL, 10, yco, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate this layer");
+ else but=uiDefBut(block, BUT, B_MATPRV, " ", 10, yco, 20, 20, NULL, 0.0, 0.0, 0, 0, "Activate this layer");
uiButSetFunc(but, matlayer_active, ma, ml);
/* enable/disable button */
if(ml->flag & ML_RENDER)
- uiDefIconButBitS(block, TOG, ML_RENDER, B_MATPRV_DRAW, ICON_CHECKBOX_HLT, 30, yco, 20, 20, &ml->flag, 0.0, 0.0, 0, 0, "Enable or disable this layer");
+ uiDefIconButBitS(block, TOG, ML_RENDER, B_MATPRV, ICON_CHECKBOX_HLT, 30, yco, 20, 20, &ml->flag, 0.0, 0.0, 0, 0, "Enable or disable this layer");
else uiDefButBitS(block, TOG, ML_RENDER, B_MATPRV, " ", 30, yco, 20, 20, &ml->flag, 0.0, 0.0, 0, 0, "Enable or disable this layer");
uiBlockBeginAlign(block);
@@ -3369,13 +3174,13 @@ static void material_panel_layers(Material *ma)
uiButSetFunc(but, matlayer_add, ma, ml);
/* move up/down/delete */
- but = uiDefIconBut(block, BUT, B_MATPRV_DRAW, VICON_MOVE_UP, 250, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Move layer up");
+ but = uiDefIconBut(block, BUT, B_MATPRV, VICON_MOVE_UP, 250, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Move layer up");
uiButSetFunc(but, matlayer_moveUp, ma, ml);
- but = uiDefIconBut(block, BUT, B_MATPRV_DRAW, VICON_MOVE_DOWN, 270, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Move layer down");
+ but = uiDefIconBut(block, BUT, B_MATPRV, VICON_MOVE_DOWN, 270, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Move layer down");
uiButSetFunc(but, matlayer_moveDown, ma, ml);
- but = uiDefIconBut(block, BUT, B_MATPRV_DRAW, VICON_X, 290, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete material layer");
+ but = uiDefIconBut(block, BUT, B_MATPRV, VICON_X, 290, yco, 20, 20, NULL, 0.0, 0.0, 0.0, 0.0, "Delete material layer");
uiButSetFunc(but, matlayer_del, ma, ml);
/* blend slider and operation */
@@ -3401,6 +3206,36 @@ static void material_panel_layers(Material *ma)
}
+static void material_panel_nodes(Material *ma)
+{
+ Material *nodema;
+ bNode *node;
+ uiBlock *block;
+ char str[64];
+
+ block= uiNewBlock(&curarea->uiblocks, "material_panel_nodes", UI_EMBOSS, UI_HELV, curarea->win);
+ uiNewPanelTabbed("Preview", "Material");
+ if(uiNewPanel(curarea, block, "Nodes", "Material", 0, 0, 318, 204)==0) return;
+
+ uiDefButC(block, TOG, B_MAT_USENODES, "Use Nodes", 10,180,150,20, &ma->use_nodes, 0.0f, 0.0f, 0, 0, "");
+ nodema= get_active_matlayer(ma);
+ if(nodema) {
+ sprintf(str, "Active: %s", nodema->id.name+2);
+ uiDefBut(block, LABEL, B_NOP, str, 160,180,150,20, NULL, 0.0f, 0.0f, 0, 0, "");
+ }
+ node= nodeGetActive(ma->nodetree);
+ if(node==NULL) return;
+
+ if(node->typeinfo->butfunc) {
+ rctf rct;
+ rct.xmin= 10.0f;
+ rct.xmax= rct.xmin+node->typeinfo->width;
+ rct.ymax= 155.0;
+ rct.ymin= rct.ymax - (float)node->typeinfo->butfunc(NULL, node, NULL);
+ node->typeinfo->butfunc(block, node, &rct);
+ }
+}
+
static void material_panel_ramps(Material *ma)
{
@@ -3436,7 +3271,7 @@ static void material_panel_ramps(Material *ma)
methodc= &ma->rampblend_spec;
facp= &ma->rampfac_spec;
}
- draw_colorband_buts(block, coba, -35, B_MATPRV); // aligns with previous button
+ draw_colorband_buts(block, coba, 10, 50, B_MATPRV); // aligns with previous button
uiDefBut(block, LABEL, 0, "Input",10,30,90,20, NULL, 0, 0, 0, 0, "");
uiDefBut(block, LABEL, 0, "Method",100,30,90,20, NULL, 0, 0, 0, 0, "");
@@ -3554,9 +3389,9 @@ static void material_panel_material(Object *ob, Material *ma)
}
uiBlockSetCol(block, TH_AUTO);
uiBlockBeginAlign(block);
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 8,97,72,20, &(ma->r), 0, 0, 0, B_MATCOL, "");
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 8,77,72,20, &(ma->specr), 0, 0, 0, B_SPECCOL, "");
- uiDefButF(block, COL, B_MATPRV_DRAW, "", 8,57,72,20, &(ma->mirr), 0, 0, 0, B_MIRCOL, "");
+ uiDefButF(block, COL, B_MATPRV, "", 8,97,72,20, &(ma->r), 0, 0, 0, B_MATCOL, "");
+ uiDefButF(block, COL, B_MATPRV, "", 8,77,72,20, &(ma->specr), 0, 0, 0, B_SPECCOL, "");
+ uiDefButF(block, COL, B_MATPRV, "", 8,57,72,20, &(ma->mirr), 0, 0, 0, B_MIRCOL, "");
uiBlockBeginAlign(block);
if(ma->mode & MA_HALO) {
@@ -3609,6 +3444,8 @@ static void material_panel_preview(Material *ma)
if(uiNewPanel(curarea, block, "Preview", "Material", 0, 0, 318, 204)==0) return;
if(ma) {
+ G.buts->lockpoin= ma; /* BIF_previewdraw callback will read it */
+
uiBlockSetDrawExtraFunc(block, BIF_previewdraw);
// label to force a boundbox for buttons not to be centered
@@ -3646,6 +3483,7 @@ void material_panels()
if(ma) {
material_panel_layers(ma);
+ material_panel_nodes(ma);
ma= get_active_matlayer(ma);
if(ma) {
@@ -3827,7 +3665,7 @@ void clever_numbuts_buts()
la->r = (rgb[0]/255.0 >= 0.0 && rgb[0]/255.0 <= 1.0 ? rgb[0]/255.0 : 0.0) ;
la->g = (rgb[1]/255.0 >= 0.0 && rgb[1]/255.0 <= 1.0 ? rgb[1]/255.0 : 0.0) ;
la->b = (rgb[2]/255.0 >= 0.0 && rgb[2]/255.0 <= 1.0 ? rgb[2]/255.0 : 0.0) ;
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
break;
case TAB_SHADING_WORLD:
@@ -3847,7 +3685,7 @@ void clever_numbuts_buts()
wo->zenr = (rgb[0]/255.0 >= 0.0 && rgb[0]/255.0 <= 1.0 ? rgb[0]/255.0 : 0.0) ;
wo->zeng = (rgb[1]/255.0 >= 0.0 && rgb[1]/255.0 <= 1.0 ? rgb[1]/255.0 : 0.0) ;
wo->zenb = (rgb[2]/255.0 >= 0.0 && rgb[2]/255.0 <= 1.0 ? rgb[2]/255.0 : 0.0) ;
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
}
break;
@@ -3880,7 +3718,7 @@ void clever_numbuts_buts()
ma->mirg = (rgb[1]/255.0 >= 0.0 && rgb[1]/255.0 <= 1.0 ? rgb[1]/255.0 : 0.0) ;
ma->mirb = (rgb[2]/255.0 >= 0.0 && rgb[2]/255.0 <= 1.0 ? rgb[2]/255.0 : 0.0) ;
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
break;
}
diff --git a/source/blender/src/drawimage.c b/source/blender/src/drawimage.c
index 8364424674b..d9a85da601e 100644
--- a/source/blender/src/drawimage.c
+++ b/source/blender/src/drawimage.c
@@ -1034,7 +1034,7 @@ void drawimagespace(ScrArea *sa, void *spacedata)
glPixelZoom((float)sima->zoom, (float)sima->zoom);
if(sima->flag & SI_EDITTILE) {
- glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, ibuf->rect);
+ glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, GL_UNSIGNED_BYTE, ibuf->rect);
glPixelZoom(1.0, 1.0);
@@ -1079,14 +1079,14 @@ void drawimagespace(ScrArea *sa, void *spacedata)
/* rect= ibuf->rect; */
for(sy= 0; sy+dy<=ibuf->y; sy+= dy) {
for(sx= 0; sx+dx<=ibuf->x; sx+= dx) {
- glaDrawPixelsSafe(x1+sx*sima->zoom, y1+sy*sima->zoom, dx, dy, rect);
+ glaDrawPixelsSafe(x1+sx*sima->zoom, y1+sy*sima->zoom, dx, dy, GL_UNSIGNED_BYTE, rect);
}
}
MEM_freeN(rect);
}
else
- glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, ibuf->rect);
+ glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, GL_UNSIGNED_BYTE, ibuf->rect);
if(Gip.current == IMAGEPAINT_CLONE) {
int w, h;
@@ -1103,7 +1103,7 @@ void drawimagespace(ScrArea *sa, void *spacedata)
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glaDrawPixelsSafe(x1 + offx, y1 + offy, w, h, clonerect);
+ glaDrawPixelsSafe(x1 + offx, y1 + offy, w, h, GL_UNSIGNED_BYTE, clonerect);
glDisable(GL_BLEND);
MEM_freeN(clonerect);
diff --git a/source/blender/src/drawnode.c b/source/blender/src/drawnode.c
index 1c933ed6743..1ca7c1f82c8 100644
--- a/source/blender/src/drawnode.c
+++ b/source/blender/src/drawnode.c
@@ -42,6 +42,7 @@
#include "DNA_scene_types.h"
#include "DNA_space_types.h"
#include "DNA_screen_types.h"
+#include "DNA_texture_types.h"
#include "DNA_userdef_types.h"
#include "BKE_global.h"
@@ -51,7 +52,9 @@
#include "BKE_utildefines.h"
#include "BIF_gl.h"
+#include "BIF_glutil.h"
#include "BIF_interface.h"
+#include "BIF_interface_icons.h"
#include "BIF_language.h"
#include "BIF_mywindow.h"
#include "BIF_resources.h"
@@ -64,147 +67,324 @@
#include "BMF_Api.h"
#include "blendef.h"
+#include "butspace.h"
#include "interface.h" /* urm... for rasterpos_safe, roundbox */
+#include "mydevice.h"
#include "MEM_guardedalloc.h"
-/* ************** Draw callbacks *********** */
+static void snode_drawstring(SpaceNode *snode, char *str, int okwidth)
+{
+ char drawstr[NODE_MAXSTR];
+ int width;
+
+ if(str[0]==0) return;
+
+ BLI_strncpy(drawstr, str, NODE_MAXSTR);
+ width= snode->aspect*BIF_GetStringWidth(snode->curfont, drawstr, 0);
+ if(width > okwidth) {
+ int len= strlen(drawstr)-1;
+
+ while(width > okwidth && len>=0) {
+ drawstr[len]= 0;
+
+ width= snode->aspect*BIF_GetStringWidth(snode->curfont, drawstr, 0);
+ len--;
+ }
+ if(len==0) return;
+ }
+ BIF_DrawString(snode->curfont, drawstr, 0);
+
+}
+
+/* ************** Socket callbacks *********** */
+
+/* NOTE: this is a block-menu, needs 0 events, otherwise the menu closes */
+static uiBlock *socket_value_menu(void *sock_v)
+{
+ bNodeSocket *sock= sock_v;
+ uiBlock *block;
+ char name[NODE_MAXSTR];
+
+ /* don't add new block to a listbase if caller is LABEL button */
+ block= uiNewBlock(NULL, "socket menu", UI_EMBOSS, UI_HELV, curarea->win);
+
+ /* use this for a fake extra empy space around the buttons */
+ uiDefBut(block, LABEL, 0, "", -4, -4, 188, 28, NULL, 0, 0, 0, 0, "");
+
+ BLI_strncpy(name, sock->name, NODE_MAXSTR-1);
+ strcat(name, " ");
+ uiDefButF(block, NUMSLI, 0, name, 0,0,180,20, sock->ns.vec, 0.0, 1.0, 10, 0, "");
+
+ uiBlockSetDirection(block, UI_TOP);
+
+ return block;
+}
+/* NOTE: this is a block-menu, needs 0 events, otherwise the menu closes */
+static uiBlock *socket_vector_menu(void *sock_v)
+{
+ bNodeSocket *sock= sock_v;
+ uiBlock *block;
+
+ /* don't add new block to a listbase if caller is LABEL button */
+ block= uiNewBlock(NULL, "socket menu", UI_EMBOSS, UI_HELV, curarea->win);
+
+ /* use this for a fake extra empy space around the buttons */
+ uiDefBut(block, LABEL, 0, "", -4, -4, 188, 68, NULL, 0, 0, 0, 0, "");
+
+ uiBlockBeginAlign(block);
+ uiDefButF(block, NUMSLI, 0, "X ", 0,40,180,20, sock->ns.vec, -1.0, 1.0, 10, 0, "");
+ uiDefButF(block, NUMSLI, 0, "Y ", 0,20,180,20, sock->ns.vec+1, -1.0, 1.0, 10, 0, "");
+ uiDefButF(block, NUMSLI, 0, "Z ", 0,0,180,20, sock->ns.vec+2, -1.0, 1.0, 10, 0, "");
+
+ uiBlockSetDirection(block, UI_TOP);
+
+ return block;
+}
-static void node_shader_draw_value(SpaceNode *snode, bNode *node)
+static uiBlock *socket_color_menu(void *sock_v)
{
+ bNodeSocket *sock= sock_v;
+ uiBlock *block;
+
+ /* don't add new block to a listbase if caller is LABEL button */
+ block= uiNewBlock(NULL, "socket menu", UI_EMBOSS, UI_HELV, curarea->win);
+
+ /* use this for a fake extra empy space around the buttons */
+ uiDefBut(block, LABEL, 0, "", -4, -4, 188, 68, NULL, 0, 0, 0, 0, "");
+
+ uiBlockBeginAlign(block);
+ uiDefButF(block, NUMSLI, 0, "R ", 0,40,180,20, sock->ns.vec, 0.0, 1.0, 10, 0, "");
+ uiDefButF(block, NUMSLI, 0, "G ", 0,20,180,20, sock->ns.vec+1, 0.0, 1.0, 10, 0, "");
+ uiDefButF(block, NUMSLI, 0, "B ", 0,0,180,20, sock->ns.vec+2, 0.0, 1.0, 10, 0, "");
+
+ uiBlockSetDirection(block, UI_TOP);
- if(snode->block) {
+ return block;
+}
+
+static void node_ID_title_cb(void *node_v, void *unused_v)
+{
+ bNode *node= node_v;
+
+ if(node->id)
+ BLI_strncpy(node->name, node->id->name+2, 21);
+}
+
+/* ****************** BUTTON CALLBACKS FOR SHADER NODES ***************** */
+
+static int node_shader_buts_material(uiBlock *block, bNode *node, rctf *butr)
+{
+ if(block) {
uiBut *bt;
+ float dx= (butr->xmax-butr->xmin)/3.0f;
- bt= uiDefButF(snode->block, NUM, B_NODE_EXEC, "",
- node->prv.xmin, node->prv.ymin, node->prv.xmax-node->prv.xmin, node->prv.ymax-node->prv.ymin,
- node->ns.vec, 0.0f, 1.0f, 100, 2, "");
+ uiBlockBeginAlign(block);
+ bt= uiDefIDPoinBut(block, test_matpoin_but, ID_MA, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin+19.0f, butr->xmax-butr->xmin, 19.0f,
+ &node->id, "");
+ uiButSetFunc(bt, node_ID_title_cb, node, NULL);
- }
+ uiDefButBitS(block, TOG, SH_NODE_MAT_DIFF, B_NODE_EXEC, "Diff",
+ butr->xmin, butr->ymin, dx, 19.0f,
+ &node->custom1, 0, 0, 0, 0, "Material Node outputs Diffuse");
+ uiDefButBitS(block, TOG, SH_NODE_MAT_SPEC, B_NODE_EXEC, "Spec",
+ butr->xmin+dx, butr->ymin, dx, 19.0f,
+ &node->custom1, 0, 0, 0, 0, "Material Node outputs Specular");
+ uiDefButBitS(block, TOG, SH_NODE_MAT_NEG, B_NODE_EXEC, "Neg Normal",
+ butr->xmin+2.0f*dx, butr->ymin, dx, 19.0f,
+ &node->custom1, 0, 0, 0, 0, "Material Node uses inverted Normal");
+ uiBlockEndAlign(block);
+
+ }
+ return 38;
}
-static void node_shader_draw_rgb(SpaceNode *snode, bNode *node)
+static int node_shader_buts_texture(uiBlock *block, bNode *node, rctf *butr)
{
-
- if(snode->block) {
+ if(block) {
+ uiBut *bt;
- /* enforce square box drawing */
- uiBlockSetEmboss(snode->block, UI_EMBOSSP);
+ bt= uiDefIDPoinBut(block, test_texpoin_but, ID_TE, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin, butr->xmax-butr->xmin, 19.0f,
+ &node->id, "");
+ uiButSetFunc(bt, node_ID_title_cb, node, NULL);
- uiDefButF(snode->block, HSVCUBE, B_NODE_EXEC, "",
- node->prv.xmin, node->prv.ymin, node->prv.xmax-node->prv.xmin, 10.0f,
- node->ns.vec, 0.0f, 1.0f, 3, 0, "");
- uiDefButF(snode->block, HSVCUBE, B_NODE_EXEC, "",
- node->prv.xmin, node->prv.ymin+14.0f, node->prv.xmax-node->prv.xmin, node->prv.ymax-node->prv.ymin-14.0f,
- node->ns.vec, 0.0f, 1.0f, 2, 0, "");
+ }
+ return 19;
+}
+
+static int node_shader_buts_value(uiBlock *block, bNode *node, rctf *butr)
+{
+ if(block) {
+ bNodeSocket *sock= node->outputs.first; /* first socket stores value */
- uiDefButF(snode->block, COL, B_NOP, "",
- node->prv.xmin, node->prv.ymax+10.0f, node->prv.xmax-node->prv.xmin, 15.0f,
- node->ns.vec, 0.0, 0.0, -1, 0, "");
- /* the -1 above prevents col button to popup a color picker */
+ uiDefButF(block, NUM, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20.0f,
+ sock->ns.vec, 0.0f, 1.0f, 10, 2, "");
- uiBlockSetEmboss(snode->block, UI_EMBOSS);
}
+ return 20;
}
-static void node_shader_draw_show_rgb(SpaceNode *snode, bNode *node)
+static int node_shader_buts_rgb(uiBlock *block, bNode *node, rctf *butr)
{
-
- if(snode->block) {
-
+ if(block) {
+ bNodeSocket *sock= node->outputs.first; /* first socket stores value */
+
/* enforce square box drawing */
- uiBlockSetEmboss(snode->block, UI_EMBOSSP);
+ uiBlockSetEmboss(block, UI_EMBOSSP);
+
+ uiDefButF(block, HSVCUBE, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin, butr->xmax-butr->xmin, 12.0f,
+ sock->ns.vec, 0.0f, 1.0f, 3, 0, "");
+ uiDefButF(block, HSVCUBE, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin+15.0f, butr->xmax-butr->xmin, butr->ymax-butr->ymin -15.0f -15.0f,
+ sock->ns.vec, 0.0f, 1.0f, 2, 0, "");
+ uiDefButF(block, COL, B_NOP, "",
+ butr->xmin, butr->ymax-12.0f, butr->xmax-butr->xmin, 12.0f,
+ sock->ns.vec, 0.0, 0.0, -1, 0, "");
+ /* the -1 above prevents col button to popup a color picker */
+
+ uiBlockSetEmboss(block, UI_EMBOSS);
+ }
+ return 30 + (int)(node->width-NODE_DY);
+}
+
+static void node_but_title_cb(void *node_v, void *but_v)
+{
+ bNode *node= node_v;
+ uiBut *bt= but_v;
+ BLI_strncpy(node->name, bt->drawstr, NODE_MAXSTR);
+}
+
+static int node_shader_buts_mix_rgb(uiBlock *block, bNode *node, rctf *butr)
+{
+ if(block) {
+ uiBut *bt;
+ bNodeSocket *sock= node->inputs.first; /* first socket stores "fac" */
- uiDefButF(snode->block, COL, B_NOP, "",
- node->prv.xmin, node->prv.ymin-NODE_DY, node->prv.xmax-node->prv.xmin, NODE_DY,
- node->ns.vec, 0.0f, 0.0f, -1, 0, "");
- /* the -1 above prevents col button to popup a color picker */
- uiBlockSetEmboss(snode->block, UI_EMBOSS);
+ uiBlockBeginAlign(block);
+ /* blend type */
+ bt=uiDefButS(block, MENU, B_NODE_EXEC, "Mix %x0|Add %x1|Subtract %x3|Multiply %x2|Screen %x4|Divide %x5|Difference %x6|Darken %x7|Lighten %x8",
+ butr->xmin, butr->ymin+20.0f, butr->xmax-butr->xmin, 20.0f,
+ &node->custom1, 0, 0, 0, 0, "");
+ uiButSetFunc(bt, node_but_title_cb, node, bt);
+ /* value */
+ uiDefButF(block, NUM, B_NODE_EXEC, "",
+ butr->xmin, butr->ymin, butr->xmax-butr->xmin, 20.0f,
+ sock->ns.vec, 0.0f, 1.0f, 10, 2, "");
+ uiBlockEndAlign(block);
}
+ return 40;
}
+static int node_shader_buts_valtorgb(uiBlock *block, bNode *node, rctf *butr)
+{
+ if(block && (node->flag & NODE_OPTIONS)) {
+ if(node->storage) {
+ draw_colorband_buts_small(block, node->storage, butr, B_NODE_EXEC);
+ }
+ }
+ return 40;
+}
-/* exported to editnode.c */
-void node_shader_set_drawfunc(bNode *node)
+/* only once called */
+static void node_shader_set_butfunc(bNodeType *ntype)
{
- switch(node->type) {
- case SH_NODE_TEST:
- node->drawfunc= NULL;
+ switch(ntype->type) {
+ case SH_NODE_MATERIAL:
+ ntype->butfunc= node_shader_buts_material;
+ break;
+ case SH_NODE_TEXTURE:
+ ntype->butfunc= node_shader_buts_texture;
break;
case SH_NODE_VALUE:
- node->drawfunc= node_shader_draw_value;
+ ntype->butfunc= node_shader_buts_value;
break;
case SH_NODE_RGB:
- node->drawfunc= node_shader_draw_rgb;
- break;
- case SH_NODE_SHOW_RGB:
- node->drawfunc= node_shader_draw_show_rgb;
+ ntype->butfunc= node_shader_buts_rgb;
break;
case SH_NODE_MIX_RGB:
- node->drawfunc= NULL;
+ ntype->butfunc= node_shader_buts_mix_rgb;
+ break;
+ case SH_NODE_VALTORGB:
+ ntype->butfunc= node_shader_buts_valtorgb;
break;
+ default:
+ ntype->butfunc= NULL;
}
}
-/* ******* init draw callbacks for all tree types ************* */
+/* ******* init draw callbacks for all tree types, only called in usiblender.c, once ************* */
-static void ntree_init_callbacks(bNodeTree *ntree)
+void init_node_butfuncs(void)
{
- bNode *node;
+ bNodeType **typedefs;
- for(node= ntree->nodes.first; node; node= node->next) {
- if(ntree->type==NTREE_SHADER)
- node_shader_set_drawfunc(node);
+ /* shader nodes */
+ typedefs= node_all_shaders; /* BKE_node.h */
+ while( *typedefs) {
+ node_shader_set_butfunc(*typedefs);
+ typedefs++;
}
- ntree->init |= NTREE_DRAW_SET;
-}
+}
/* ************** Generic drawing ************** */
static void draw_nodespace_grid(SpaceNode *snode)
{
-// float fac, step= 20.0f;
-
+ float start, step= 25.0f;
+
/* window is 'pixel size', like buttons */
- BIF_ThemeColorShade(TH_BACK, 10);
+ BIF_ThemeColorShade(TH_BACK, -10);
- glRectf(0.0f, 0.0f, curarea->winx, curarea->winy);
-}
-
+ start= snode->v2d.cur.xmin -fmod(snode->v2d.cur.xmin, step);
+
+ glBegin(GL_LINES);
+ for(; start<snode->v2d.cur.xmax; start+=step) {
+ glVertex2f(start, snode->v2d.cur.ymin);
+ glVertex2f(start, snode->v2d.cur.ymax);
+ }
-/* get from assigned ID */
-static void get_nodetree(SpaceNode *snode)
-{
- /* note: once proper coded, remove free from freespacelist() */
- if(snode->nodetree==NULL) {
- snode->nodetree= MEM_callocN(sizeof(bNodeTree), "new node tree");
- }
+ start= snode->v2d.cur.ymin -fmod(snode->v2d.cur.ymin, step);
+ for(; start<snode->v2d.cur.ymax; start+=step) {
+ glVertex2f(snode->v2d.cur.xmin, start);
+ glVertex2f(snode->v2d.cur.xmax, start);
+ }
+ glEnd();
}
-static void nodeshadow(rctf *rct, int select)
+
+static void nodeshadow(rctf *rct, float radius, int select)
{
- int a;
+ float rad;
+ float a;
char alpha= 2;
- uiSetRoundBox(15);
glEnable(GL_BLEND);
- if(select) a= 10; else a=7;
- for(; a>0; a-=1) {
+ if(radius > (rct->ymax-rct->ymin-10.0f)/2.0f)
+ rad= (rct->ymax-rct->ymin-10.0f)/2.0f;
+ else
+ rad= radius;
+
+ if(select) a= 10.0f; else a= 7.0f;
+ for(; a>0.0f; a-=1.0f) {
/* alpha ranges from 2 to 20 or so */
glColor4ub(0, 0, 0, alpha);
alpha+= 2;
- gl_round_box(GL_POLYGON, rct->xmin - a, rct->ymin - a, rct->xmax + a, rct->ymax-10.0f + a, 8.0f+a);
+ gl_round_box(GL_POLYGON, rct->xmin - a, rct->ymin - a, rct->xmax + a, rct->ymax-10.0f + a, rad+a);
}
/* outline emphasis */
glEnable( GL_LINE_SMOOTH );
glColor4ub(0, 0, 0, 100);
- gl_round_box(GL_LINE_LOOP, rct->xmin-0.5f, rct->ymin-0.5f, rct->xmax+0.5f, rct->ymax+0.5f, 8.0f);
+ gl_round_box(GL_LINE_LOOP, rct->xmin-0.5f, rct->ymin-0.5f, rct->xmax+0.5f, rct->ymax+0.5f, radius);
glDisable( GL_LINE_SMOOTH );
glDisable(GL_BLEND);
@@ -230,7 +410,9 @@ static void socket_circle_draw(float x, float y, float size, int type, int selec
int a;
if(select==0) {
- if(type==SOCK_VALUE)
+ if(type==-1)
+ glColor3ub(0, 0, 0);
+ else if(type==SOCK_VALUE)
glColor3ub(160, 160, 160);
else if(type==SOCK_VECTOR)
glColor3ub(100, 100, 200);
@@ -266,54 +448,288 @@ static void socket_circle_draw(float x, float y, float size, int type, int selec
glDisable(GL_BLEND);
}
-static int node_basis_draw(SpaceNode *snode, bNode *node)
+/* not a callback */
+static void node_draw_preview(bNodePreview *preview, rctf *prv)
+{
+ float scale= (prv->xmax-prv->xmin)/((float)preview->xsize);
+
+ glPixelZoom(scale, scale);
+ glEnable(GL_BLEND);
+
+ glaDrawPixelsTex(prv->xmin, prv->ymin, preview->xsize, preview->ysize, GL_FLOAT, preview->rect);
+
+ glDisable(GL_BLEND);
+ glPixelZoom(1.0f, 1.0f);
+
+}
+
+/* based on settings in node, sets drawing rect info */
+static void node_update(bNode *node)
+{
+ bNodeSocket *nsock;
+ float dy= node->locy;
+
+ if(node->flag & NODE_HIDDEN) {
+ float rad, drad;
+
+ node->totr.xmin= node->locx;
+ node->totr.xmax= node->locx + 3*HIDDEN_RAD;
+ node->totr.ymax= node->locy;
+ node->totr.ymin= node->locy - 2*HIDDEN_RAD;
+
+ /* output connectors */
+ rad=drad= M_PI/(1.0f + (float)BLI_countlist(&node->outputs));
+
+ for(nsock= node->outputs.first; nsock; nsock= nsock->next, rad+= drad) {
+ nsock->locx= node->totr.xmax - HIDDEN_RAD + sin(rad)*HIDDEN_RAD;
+ nsock->locy= node->totr.ymin + HIDDEN_RAD + cos(rad)*HIDDEN_RAD;
+ }
+
+ /* input connectors */
+ rad=drad= - M_PI/(1.0f + (float)BLI_countlist(&node->inputs));
+
+ for(nsock= node->inputs.first; nsock; nsock= nsock->next, rad+= drad) {
+ nsock->locx= node->totr.xmin + HIDDEN_RAD + sin(rad)*HIDDEN_RAD;
+ nsock->locy= node->totr.ymin + HIDDEN_RAD + cos(rad)*HIDDEN_RAD;
+ }
+ }
+ else {
+ /* header */
+ dy-= NODE_DY;
+
+ /* output connectors */
+ for(nsock= node->outputs.first; nsock; nsock= nsock->next) {
+ nsock->locx= node->locx + node->width;
+ nsock->locy= dy - NODE_DYS;
+ dy-= NODE_DY;
+ }
+
+ node->prvr.xmin= node->butr.xmin= node->locx + NODE_DYS;
+ node->prvr.xmax= node->butr.xmax= node->locx + node->width- NODE_DYS;
+
+ /* preview rect? */
+ if(node->flag & NODE_PREVIEW) {
+ dy-= NODE_DYS/2;
+ node->prvr.ymax= dy;
+ node->prvr.ymin= dy-(node->width-NODE_DY);
+ dy= node->prvr.ymin - NODE_DYS/2;
+ }
+
+ /* buttons rect? */
+ if((node->flag & NODE_OPTIONS) && node->typeinfo->butfunc) {
+ dy-= NODE_DYS/2;
+ node->butr.ymax= dy;
+ node->butr.ymin= dy - (float)node->typeinfo->butfunc(NULL, node, NULL);
+ dy= node->butr.ymin - NODE_DYS/2;
+ }
+
+ /* input connectors */
+ for(nsock= node->inputs.first; nsock; nsock= nsock->next) {
+ nsock->locx= node->locx;
+ nsock->locy= dy - NODE_DYS;
+ dy-= NODE_DY;
+ }
+
+ node->totr.xmin= node->locx;
+ node->totr.xmax= node->locx + node->width;
+ node->totr.ymax= node->locy;
+ node->totr.ymin= dy;
+ }
+}
+
+static void node_scaling_widget(int color_id, float aspect, float xmin, float ymin, float xmax, float ymax)
+{
+ float dx;
+ float dy;
+
+ dx= 0.5f*(xmax-xmin);
+ dy= 0.5f*(ymax-ymin);
+
+ BIF_ThemeColorShade(color_id, +30);
+ fdrawline(xmin, ymin, xmax, ymax);
+ fdrawline(xmin+dx, ymin, xmax, ymax-dy);
+
+ BIF_ThemeColorShade(color_id, -10);
+ fdrawline(xmin, ymin+aspect, xmax, ymax+aspect);
+ fdrawline(xmin+dx, ymin+aspect, xmax, ymax-dy+aspect);
+}
+
+static int node_get_colorid(bNode *node)
+{
+ if(node->typeinfo->nclass==NODE_CLASS_INPUT)
+ return TH_NODE_IN_OUT;
+ if(node->typeinfo->nclass==NODE_CLASS_OUTPUT) {
+ if(node->flag & NODE_DO_OUTPUT)
+ return TH_NODE_IN_OUT;
+ else
+ return TH_NODE;
+ }
+ if(node->typeinfo->nclass==NODE_CLASS_GENERATOR)
+ return TH_NODE_GENERATOR;
+ if(node->typeinfo->nclass==NODE_CLASS_OPERATOR)
+ return TH_NODE_OPERATOR;
+ return TH_NODE;
+}
+
+static void node_basis_draw(SpaceNode *snode, bNode *node)
{
bNodeSocket *sock;
- rctf *rct= &node->tot;
- float slen;
- int trans= (U.transopts & USER_TR_BUTTONS);
+ rctf *rct= &node->totr;
+ float slen, iconofs;
+ int ofs, color_id= node_get_colorid(node);
- nodeshadow(rct, node->flag & SELECT);
+ uiSetRoundBox(15-4);
+ nodeshadow(rct, BASIS_RAD, node->flag & SELECT);
- BIF_ThemeColorShade(TH_HEADER, 0);
+ /* header */
+ BIF_ThemeColorShade(color_id, 0);
uiSetRoundBox(3);
- uiRoundBox(rct->xmin, rct->ymax-NODE_DY, rct->xmax, rct->ymax, 8);
+ uiRoundBox(rct->xmin, rct->ymax-NODE_DY, rct->xmax, rct->ymax, BASIS_RAD);
- BIF_ThemeColorShade(TH_HEADER, 20);
- uiSetRoundBox(12);
- uiRoundBox(rct->xmin, rct->ymin, rct->xmax, rct->ymax-NODE_DY, 8);
+ /* open/close entirely? */
+// ui_draw_tria_icon(rct->xmin+6.0f, rct->ymax-NODE_DY+5.0f, snode->aspect, 'h');
- ui_rasterpos_safe(rct->xmin+4.0f, rct->ymax-NODE_DY+5.0f, snode->aspect);
+ /* show/hide icons */
+ iconofs= rct->xmax;
+ if(node->typeinfo->flag & NODE_PREVIEW) {
+ int icon_id;
+
+ if(node->flag & (NODE_ACTIVE_ID|NODE_DO_OUTPUT))
+ icon_id= ICON_MATERIAL;
+ else
+ icon_id= ICON_MATERIAL_DEHLT;
+ iconofs-= 18.0f;
+ glEnable(GL_BLEND);
+ BIF_icon_set_aspect(icon_id, snode->aspect);
+ BIF_icon_draw_blended(iconofs, rct->ymax-NODE_DY+2, icon_id, 0, -50);
+ glDisable(GL_BLEND);
+ }
+ if(node->typeinfo->flag & NODE_OPTIONS) {
+ iconofs-= 18.0f;
+ glEnable(GL_BLEND);
+ BIF_icon_set_aspect(ICON_BUTS, snode->aspect);
+ BIF_icon_draw_blended(iconofs, rct->ymax-NODE_DY+2, ICON_BUTS, 0, -50);
+ glDisable(GL_BLEND);
+ }
+
+ /* title */
if(node->flag & SELECT)
BIF_ThemeColor(TH_TEXT_HI);
else
BIF_ThemeColor(TH_TEXT);
- BIF_DrawString(snode->curfont, node->name, trans);
+ ui_rasterpos_safe(rct->xmin+6.0f, rct->ymax-NODE_DY+5.0f, snode->aspect);
+ snode_drawstring(snode, node->name, (int)(iconofs - rct->xmin-6.0f));
+
+ /* body */
+ BIF_ThemeColorShade(color_id, 20);
+ uiSetRoundBox(8);
+ uiRoundBox(rct->xmin, rct->ymin, rct->xmax, rct->ymax-NODE_DY, BASIS_RAD);
+ /* scaling indicator */
+ node_scaling_widget(color_id, snode->aspect, rct->xmax-BASIS_RAD*snode->aspect, rct->ymin, rct->xmax, rct->ymin+BASIS_RAD*snode->aspect);
+
+ /* outline active emphasis */
+ if(node->flag & NODE_ACTIVE) {
+ glEnable(GL_BLEND);
+ glColor4ub(200, 200, 200, 140);
+ uiSetRoundBox(15-4);
+ gl_round_box(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, BASIS_RAD);
+ glDisable(GL_BLEND);
+ }
+
+ /* socket inputs, label buttons */
for(sock= node->inputs.first; sock; sock= sock->next) {
- socket_circle_draw(sock->locx, sock->locy, NODE_SOCK, sock->type, sock->flag & SELECT);
+ socket_circle_draw(sock->locx, sock->locy, NODE_SOCKSIZE, sock->type, sock->flag & SELECT);
- BIF_ThemeColor(TH_TEXT);
- ui_rasterpos_safe(sock->locx+8.0f, sock->locy-5.0f, snode->aspect);
- BIF_DrawString(snode->curfont, sock->name, trans);
+ if(sock->type==SOCK_VALUE) {
+ uiBut *bt= uiDefBut(snode->block, LABEL, B_NODE_EXEC, sock->name, sock->locx+5.0f, sock->locy-10.0f, node->width-NODE_DY, NODE_DY, sock, 0, 0, 0, 0, "");
+ bt->block_func= socket_value_menu;
+ }
+ else if(sock->type==SOCK_VECTOR) {
+ uiBut *bt= uiDefBut(snode->block, LABEL, B_NODE_EXEC, sock->name, sock->locx+5.0f, sock->locy-10.0f, node->width-NODE_DY, NODE_DY, sock, 0, 0, 0, 0, "");
+ bt->block_func= socket_vector_menu;
+ }
+ else if(sock->type==SOCK_RGBA) {
+ uiBut *bt= uiDefBut(snode->block, LABEL, B_NODE_EXEC, sock->name, sock->locx+5.0f, sock->locy-10.0f, node->width-NODE_DY, NODE_DY, sock, 0, 0, 0, 0, "");
+ bt->block_func= socket_color_menu;
+ }
+ else {
+ BIF_ThemeColor(TH_TEXT);
+ ui_rasterpos_safe(sock->locx+8.0f, sock->locy-5.0f, snode->aspect);
+ BIF_DrawString(snode->curfont, sock->name, 0);
+ }
}
+ /* socket outputs */
for(sock= node->outputs.first; sock; sock= sock->next) {
- socket_circle_draw(sock->locx, sock->locy, NODE_SOCK, sock->type, sock->flag & SELECT);
+ socket_circle_draw(sock->locx, sock->locy, NODE_SOCKSIZE, sock->type, sock->flag & SELECT);
BIF_ThemeColor(TH_TEXT);
- slen= snode->aspect*BIF_GetStringWidth(snode->curfont, sock->name, trans);
+ ofs= 0;
+ slen= snode->aspect*BIF_GetStringWidth(snode->curfont, sock->name, 0);
+ while(slen > node->width) {
+ ofs++;
+ slen= snode->aspect*BIF_GetStringWidth(snode->curfont, sock->name+ofs, 0);
+ }
ui_rasterpos_safe(sock->locx-8.0f-slen, sock->locy-5.0f, snode->aspect);
- BIF_DrawString(snode->curfont, sock->name, trans);
+ BIF_DrawString(snode->curfont, sock->name+ofs, 0);
}
- return 0;
+ /* preview */
+ if(node->flag & NODE_PREVIEW)
+ if(node->preview)
+ node_draw_preview(node->preview, &node->prvr);
+
+ /* buttons */
+ if(node->flag & NODE_OPTIONS)
+ if(node->typeinfo->butfunc)
+ node->typeinfo->butfunc(snode->block, node, &node->butr);
+
}
+void node_hidden_draw(SpaceNode *snode, bNode *node)
+{
+ bNodeSocket *sock;
+ rctf *rct= &node->totr;
+ int color_id= node_get_colorid(node);
+
+ /* shadow */
+ uiSetRoundBox(15);
+ nodeshadow(rct, HIDDEN_RAD, node->flag & SELECT);
-static void node_draw_link(SpaceNode *snode, bNodeLink *link)
+ /* body */
+ BIF_ThemeColorShade(color_id, 20);
+ uiRoundBox(rct->xmin, rct->ymin, rct->xmax, rct->ymax, HIDDEN_RAD);
+
+ /* outline active emphasis */
+ if(node->flag & NODE_ACTIVE) {
+ glEnable(GL_BLEND);
+ glColor4ub(200, 200, 200, 140);
+ gl_round_box(GL_LINE_LOOP, rct->xmin, rct->ymin, rct->xmax, rct->ymax, HIDDEN_RAD);
+ glDisable(GL_BLEND);
+ }
+
+ /* icon */
+ if(node->id) {
+ glEnable(GL_BLEND);
+ BIF_icon_set_aspect(node->id->icon_id, snode->aspect);
+ BIF_icon_draw(rct->xmin+HIDDEN_RAD, -1.0f+rct->ymin+HIDDEN_RAD/2, node->id->icon_id);
+ glDisable(GL_BLEND);
+ }
+
+ /* sockets */
+ for(sock= node->inputs.first; sock; sock= sock->next) {
+ socket_circle_draw(sock->locx, sock->locy, NODE_SOCKSIZE, sock->type, sock->flag & SELECT);
+ }
+
+ for(sock= node->outputs.first; sock; sock= sock->next) {
+ socket_circle_draw(sock->locx, sock->locy, NODE_SOCKSIZE, sock->type, sock->flag & SELECT);
+ }
+}
+
+void node_draw_link(SpaceNode *snode, bNodeLink *link)
{
float vec[4][3];
float dist, spline_step, mx=0.0f, my=0.0f;
@@ -358,7 +774,7 @@ static void node_draw_link(SpaceNode *snode, bNodeLink *link)
vec[3][1]= my;
}
- dist= 0.5*VecLenf(vec[0], vec[3]);
+ dist= 0.5f*ABS(vec[0][0] - vec[3][0]);
/* check direction later, for top sockets */
vec[1][0]= vec[0][0]+dist;
@@ -414,15 +830,17 @@ void drawnodespace(ScrArea *sa, void *spacedata)
draw_nodespace_grid(snode);
/* nodes */
- get_nodetree(snode); /* editor context */
+
+ snode_set_context(snode);
if(snode->nodetree) {
bNode *node;
bNodeLink *link;
- if((snode->nodetree->init & NTREE_DRAW_SET)==0)
- ntree_init_callbacks(snode->nodetree);
-
+ /* for now, we set drawing coordinates on each redraw */
+ for(node= snode->nodetree->nodes.first; node; node= node->next)
+ node_update(node);
+
/* node lines */
glEnable(GL_BLEND);
glEnable( GL_LINE_SMOOTH );
@@ -437,8 +855,10 @@ void drawnodespace(ScrArea *sa, void *spacedata)
for(node= snode->nodetree->nodes.first; node; node= node->next) {
if(!(node->flag & SELECT)) {
- node_basis_draw(snode, node);
- if(node->drawfunc) node->drawfunc(snode, node);
+ if(node->flag & NODE_HIDDEN)
+ node_hidden_draw(snode, node);
+ else
+ node_basis_draw(snode, node);
}
}
uiDrawBlock(snode->block);
@@ -449,8 +869,10 @@ void drawnodespace(ScrArea *sa, void *spacedata)
for(node= snode->nodetree->nodes.first; node; node= node->next) {
if(node->flag & SELECT) {
- node_basis_draw(snode, node);
- if(node->drawfunc) node->drawfunc(snode, node);
+ if(node->flag & NODE_HIDDEN)
+ node_hidden_draw(snode, node);
+ else
+ node_basis_draw(snode, node);
}
}
@@ -465,4 +887,10 @@ void drawnodespace(ScrArea *sa, void *spacedata)
draw_area_emboss(sa);
curarea->win_swap= WIN_BACK_OK;
+
+ /* in the end, this is a delayed previewrender test, to allow buttons to be first */
+ if(snode->flag & SNODE_DO_PREVIEW) {
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
+ snode->flag &= ~SNODE_DO_PREVIEW;
+ }
}
diff --git a/source/blender/src/drawseq.c b/source/blender/src/drawseq.c
index c215a256b4e..ea39e172d7e 100644
--- a/source/blender/src/drawseq.c
+++ b/source/blender/src/drawseq.c
@@ -503,7 +503,7 @@ static void draw_image_seq(ScrArea *sa)
glaDefine2DArea(&curarea->winrct);
glPixelZoom(zoom, zoom);
- glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, ibuf->rect);
+ glaDrawPixelsSafe(x1, y1, ibuf->x, ibuf->y, GL_UNSIGNED_BYTE, ibuf->rect);
glPixelZoom(1.0, 1.0);
diff --git a/source/blender/src/drawview.c b/source/blender/src/drawview.c
index 03c8d62b25d..74e68ba5cb1 100644
--- a/source/blender/src/drawview.c
+++ b/source/blender/src/drawview.c
@@ -435,7 +435,7 @@ static void draw_bgpic(void)
glaDefine2DArea(&curarea->winrct);
glPixelZoom(zoomx, zoomy);
- glaDrawPixelsSafe(x1, y1, ima->ibuf->x, ima->ibuf->y, bgpic->rect);
+ glaDrawPixelsSafe(x1, y1, ima->ibuf->x, ima->ibuf->y, GL_UNSIGNED_BYTE, bgpic->rect);
glPixelZoom(1.0, 1.0);
glMatrixMode(GL_PROJECTION);
diff --git a/source/blender/src/edit.c b/source/blender/src/edit.c
index 58edc4a817b..3d0bee6f080 100644
--- a/source/blender/src/edit.c
+++ b/source/blender/src/edit.c
@@ -129,12 +129,12 @@ void circle_selectCB(select_CBfunc func);
/* local protos ---------------*/
void snap_curs_to_firstsel(void);
-
-int get_border(rcti *rect, short col)
+/* flag==2 only border, flag==3 cross+border */
+int get_border(rcti *rect, short flag)
{
float dvec[4], fac1, fac2;
int retval=1;
- unsigned short event;
+ unsigned short event= 0;
short mval[2], mvalo[4], val, x1, y1;
char str[64];
@@ -153,56 +153,59 @@ int get_border(rcti *rect, short col)
persp(PERSP_WIN);
initgrabz(0.0, 0.0, 0.0);
- getmouseco_areawin(mvalo);
-
- /* draws the selection initial cross */
- sdrawXORline4(0, 0, mvalo[1], curarea->winx, mvalo[1]);
- sdrawXORline4(1, mvalo[0], 0, mvalo[0], curarea->winy);
- glFlush();
-
- while(TRUE) {
-
- /* selection loop while mouse pressed */
- getmouseco_areawin(mval);
+ if(flag & 1) {
+ getmouseco_areawin(mvalo);
- if(mvalo[0]!=mval[0] || mvalo[1]!=mval[1]) {
+ /* draws the selection initial cross */
+ sdrawXORline4(0, 0, mvalo[1], curarea->winx, mvalo[1]);
+ sdrawXORline4(1, mvalo[0], 0, mvalo[0], curarea->winy);
+ glFlush();
+
+ while(TRUE) {
+
+ /* selection loop while mouse pressed */
+ getmouseco_areawin(mval);
+
+ if(mvalo[0]!=mval[0] || mvalo[1]!=mval[1]) {
- /* aiming cross */
- sdrawXORline4(0, 0, mval[1], curarea->winx, mval[1]);
- sdrawXORline4(1, mval[0], 0, mval[0], curarea->winy);
- glFlush();
+ /* aiming cross */
+ sdrawXORline4(0, 0, mval[1], curarea->winx, mval[1]);
+ sdrawXORline4(1, mval[0], 0, mval[0], curarea->winy);
+ glFlush();
- mvalo[0]= mval[0];
- mvalo[1]= mval[1];
- }
- event= extern_qread(&val);
+ mvalo[0]= mval[0];
+ mvalo[1]= mval[1];
+ }
+ event= extern_qread(&val);
- if(event && val) {
+ if(event && val) {
- /* for when a renderwindow is open, and a mouse cursor activates it */
- persp(PERSP_VIEW);
- mywinset(curarea->win);
- persp(PERSP_WIN);
-
- if(event==ESCKEY) {
- retval= 0;
- break;
- }
- else if(event==BKEY) {
- /* b has been pressed twice: proceed with circle select */
- retval= 0;
- break;
+ /* for when a renderwindow is open, and a mouse cursor activates it */
+ persp(PERSP_VIEW);
+ mywinset(curarea->win);
+ persp(PERSP_WIN);
+
+ if(event==ESCKEY) {
+ retval= 0;
+ break;
+ }
+ else if(event==BKEY) {
+ /* b has been pressed twice: proceed with circle select */
+ retval= 0;
+ break;
+ }
+ else if(event==LEFTMOUSE) break;
+ else if(event==MIDDLEMOUSE) break;
+ else if(event==RIGHTMOUSE) break;
}
- else if(event==LEFTMOUSE) break;
- else if(event==MIDDLEMOUSE) break;
- else if(event==RIGHTMOUSE) break;
- }
- else PIL_sleep_ms(10);
-
- } /* end while (TRUE) */
+ else PIL_sleep_ms(10);
+
+ } /* end while (TRUE) */
- /* erase XORed lines */
- sdrawXORline4(-1, 0, 0, 0, 0);
+ /* erase XORed lines */
+ sdrawXORline4(-1, 0, 0, 0, 0);
+ }
+ else getmouseco_areawin(mval);
if(retval) {
/* box select */
diff --git a/source/blender/src/editnode.c b/source/blender/src/editnode.c
index 8416a9d1304..89a0ee35fbe 100644
--- a/source/blender/src/editnode.c
+++ b/source/blender/src/editnode.c
@@ -43,19 +43,20 @@
#include "DNA_screen_types.h"
#include "DNA_scene_types.h"
-
#include "BKE_global.h"
#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_node.h"
#include "BKE_material.h"
+#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BIF_editview.h"
#include "BIF_gl.h"
+#include "BIF_graphics.h"
#include "BIF_interface.h"
-
#include "BIF_mywindow.h"
+#include "BIF_previewrender.h"
#include "BIF_resources.h"
#include "BIF_space.h"
#include "BIF_screen.h"
@@ -72,58 +73,148 @@
#include "BDR_editobject.h"
#include "blendef.h"
+#include "butspace.h"
#include "PIL_time.h"
#include "mydevice.h"
+/* currently called from BIF_preview_changed */
+void snode_tag_dirty(SpaceNode *snode)
+{
+ bNode *node;
+
+ if(snode->treetype==NTREE_SHADER) {
+ if(snode->nodetree) {
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(node->type==SH_NODE_OUTPUT)
+ node->lasty= 0;
+ }
+ snode->flag |= SNODE_DO_PREVIEW; /* this adds an afterqueue on a redraw, to allow button previews to work first */
+ }
+ }
+ allqueue(REDRAWNODE, 1);
+}
+
+static void shader_node_previewrender(ScrArea *sa, SpaceNode *snode)
+{
+ bNode *node;
+
+ if(snode->id==NULL) return;
+ if( ((Material *)snode->id )->use_nodes==0 ) return;
-/* ************************** Node generic ************** */
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(node->type==SH_NODE_OUTPUT) {
+ if(node->flag & NODE_DO_OUTPUT) {
+ if(node->lasty<PREVIEW_RENDERSIZE-2) {
+ RenderInfo ri;
+ int test= node->lasty;
+
+ ri.cury = node->lasty;
+ ri.rect = NULL;
+ ri.pr_rectx = PREVIEW_RENDERSIZE;
+ ri.pr_recty = PREVIEW_RENDERSIZE;
+
+ BIF_previewrender(snode->id, &ri, NULL, PR_DO_RENDER); /* sends redraw event */
+ if(ri.rect) MEM_freeN(ri.rect);
+
+ if(node->lasty<PREVIEW_RENDERSIZE-2)
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
+// if(test!=node->lasty)
+// printf("node rendered y %d to %d\n", test, node->lasty);
-/* based on settings in tree and node,
- - it fills it with appropriate callbacks
- - sets drawing rect info */
-void node_update(bNodeTree *ntree, bNode *node)
+ break;
+ }
+ }
+ }
+ }
+}
+
+
+static void snode_handle_recalc(SpaceNode *snode)
{
- bNodeSocket *nsock;
- float dy= node->locy;
+ if(snode->treetype==NTREE_SHADER) {
+ BIF_preview_changed(ID_MA); /* signals buttons windows and node editors */
+ }
+ else
+ allqueue(REDRAWNODE, 1);
+}
+
+/* assumes nothing being done in ntree yet, sets the default in/out node */
+/* called from shading buttons or header */
+void node_shader_default(Material *ma)
+{
+ bNode *in, *out;
+ bNodeSocket *fromsock, *tosock;
- /* input connectors */
- for(nsock= node->inputs.last; nsock; nsock= nsock->prev) {
- nsock->locx= node->locx;
- nsock->locy= dy + NODE_DYS;
- dy+= NODE_DY;
+ /* but lets check it anyway */
+ if(ma->nodetree) {
+ printf("error in shader initialize\n");
+ return;
}
- /* spacer */
- dy+= NODE_DYS;
+ ma->nodetree= ntreeAddTree(NTREE_SHADER);
- /* preview rect? */
- node->prv.xmin= node->locx + NODE_DYS;
- node->prv.xmax= node->locx + node->width- NODE_DYS;
- node->prv.ymin= dy;
- node->prv.ymax= dy+=node->prv_h;
+ in= nodeAddNodeType(ma->nodetree, SH_NODE_INPUT);
+ in->locx= 10.0f; in->locy= 200.0f;
+ out= nodeAddNodeType(ma->nodetree, SH_NODE_OUTPUT);
+ out->locx= 200.0f; out->locy= 200.0f;
- /* spacer */
- dy+= NODE_DYS;
+ /* only a link from color to color */
+ fromsock= in->outputs.first;
+ tosock= out->inputs.first;
+ nodeAddLink(ma->nodetree, in, fromsock, out, tosock);
- /* output connectors */
- for(nsock= node->outputs.last; nsock; nsock= nsock->prev) {
- nsock->locx= node->locx + node->width;
- nsock->locy= dy + NODE_DYS;
- dy+= NODE_DY;
- }
+ ntreeSolveOrder(ma->nodetree); /* needed for pointers */
+}
+
+/* even called for each redraw now, so keep it fast :) */
+void snode_set_context(SpaceNode *snode)
+{
+ Object *ob= OBACT;
- /* header */
- dy+= NODE_DY;
+ snode->nodetree= NULL;
+ snode->id= snode->from= NULL;
+
+ if(snode->treetype==NTREE_SHADER) {
+ /* need active object, or we allow pinning... */
+ if(ob) {
+ Material *ma= give_current_material(ob, ob->actcol);
+ if(ma) {
+ snode->from= &ob->id;
+ snode->id= &ma->id;
+ snode->nodetree= ma->nodetree;
+ }
+ }
+ }
+}
+
+/* ************************** Node generic ************** */
- node->tot.xmin= node->locx;
- node->tot.xmax= node->locx + node->width;
- node->tot.ymin= node->locy;
- node->tot.ymax= dy;
+static void snode_home(ScrArea *sa, SpaceNode *snode)
+{
+ bNode *node;
+ int first= 1;
+
+ snode->v2d.cur.xmin= snode->v2d.cur.ymin= 0.0f;
+ snode->v2d.cur.xmax= sa->winx;
+ snode->v2d.cur.xmax= sa->winy;
+
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(first) {
+ first= 0;
+ snode->v2d.cur= node->totr;
+ }
+ else {
+ BLI_union_rctf(&snode->v2d.cur, &node->totr);
+ }
+ }
+ snode->v2d.tot= snode->v2d.cur;
+ test_view2d(G.v2d, sa->winx, sa->winy);
+
}
/* checks mouse position, and returns found node/socket */
/* type is SOCK_IN and/or SOCK_OUT */
-static int find_indicated_socket(SpaceNode *snode, bNode **nodep, bNodeSocket **sockp, int type, int in_out)
+static int find_indicated_socket(SpaceNode *snode, bNode **nodep, bNodeSocket **sockp, int in_out)
{
bNode *node;
bNodeSocket *sock;
@@ -133,32 +224,28 @@ static int find_indicated_socket(SpaceNode *snode, bNode **nodep, bNodeSocket **
getmouseco_areawin(mval);
areamouseco_to_ipoco(G.v2d, mval, &rect.xmin, &rect.ymin);
- rect.xmin -= NODE_SOCK+3;
- rect.ymin -= NODE_SOCK+3;
- rect.xmax = rect.xmin + 2*NODE_SOCK+6;
- rect.ymax = rect.ymin + 2*NODE_SOCK+6;
+ rect.xmin -= NODE_SOCKSIZE+3;
+ rect.ymin -= NODE_SOCKSIZE+3;
+ rect.xmax = rect.xmin + 2*NODE_SOCKSIZE+6;
+ rect.ymax = rect.ymin + 2*NODE_SOCKSIZE+6;
/* check if we click in a socket */
for(node= snode->nodetree->nodes.first; node; node= node->next) {
if(in_out & SOCK_IN) {
for(sock= node->inputs.first; sock; sock= sock->next) {
- if(type==-1 || type==sock->type) {
- if(BLI_in_rctf(&rect, sock->locx, sock->locy)) {
- *nodep= node;
- *sockp= sock;
- return 1;
- }
+ if(BLI_in_rctf(&rect, sock->locx, sock->locy)) {
+ *nodep= node;
+ *sockp= sock;
+ return 1;
}
}
}
if(in_out & SOCK_OUT) {
for(sock= node->outputs.first; sock; sock= sock->next) {
- if(type==-1 || type==sock->type) {
- if(BLI_in_rctf(&rect, sock->locx, sock->locy)) {
- *nodep= node;
- *sockp= sock;
- return 1;
- }
+ if(BLI_in_rctf(&rect, sock->locx, sock->locy)) {
+ *nodep= node;
+ *sockp= sock;
+ return 1;
}
}
}
@@ -169,13 +256,12 @@ static int find_indicated_socket(SpaceNode *snode, bNode **nodep, bNodeSocket **
/* ********************* transform ****************** */
/* releases on event, only intern (for extern see below) */
-static void transform_nodes(SpaceNode *snode, char *undostr)
+static void transform_nodes(SpaceNode *snode, char mode, char *undostr)
{
bNode *node;
float mxstart, mystart, mx, my, *oldlocs, *ol;
int cont=1, tot=0, cancel=0, firsttime=1;
short mval[2], mvalo[2];
- char str[64];
/* count total */
for(node= snode->nodetree->nodes.first; node; node= node->next)
@@ -199,6 +285,8 @@ static void transform_nodes(SpaceNode *snode, char *undostr)
getmouseco_areawin(mval);
if(mval[0]!=mvalo[0] || mval[1]!=mvalo[1] || firsttime) {
+// char str[64];
+
firsttime= 0;
areamouseco_to_ipoco(G.v2d, mval, &mx, &my);
@@ -209,13 +297,12 @@ static void transform_nodes(SpaceNode *snode, char *undostr)
if(node->flag & SELECT) {
node->locx= ol[0] + mx-mxstart;
node->locy= ol[1] + my-mystart;
- node_update(snode->nodetree, node);
ol+= 2;
}
}
- sprintf(str, "X: %.1f Y: %.1f", mx-mxstart, my-mystart);
- headerprint(str);
+// sprintf(str, "X: %.1f Y: %.1f", mx-mxstart, my-mystart);
+// headerprint(str);
force_draw(0);
}
else
@@ -252,7 +339,6 @@ static void transform_nodes(SpaceNode *snode, char *undostr)
node->locx= ol[0];
node->locy= ol[1];
ol+= 2;
- node_update(snode->nodetree, node);
}
}
@@ -267,9 +353,73 @@ static void transform_nodes(SpaceNode *snode, char *undostr)
/* external call, also for callback */
void node_transform_ext(int mode, int unused)
{
- transform_nodes(curarea->spacedata.first, "Translate node");
+ transform_nodes(curarea->spacedata.first, 'g', "Translate node");
}
+
+/* releases on event, only 1 node */
+static void scale_node(SpaceNode *snode, bNode *node)
+{
+ float mxstart, mystart, mx, my, oldwidth;
+ int cont=1, cancel=0;
+ short mval[2], mvalo[2];
+
+ /* store old */
+ oldwidth= node->width;
+
+ getmouseco_areawin(mvalo);
+ areamouseco_to_ipoco(G.v2d, mvalo, &mxstart, &mystart);
+
+ while(cont) {
+
+ getmouseco_areawin(mval);
+ if(mval[0]!=mvalo[0] || mval[1]!=mvalo[1]) {
+
+ areamouseco_to_ipoco(G.v2d, mval, &mx, &my);
+ mvalo[0]= mval[0];
+ mvalo[1]= mval[1];
+
+ node->width= oldwidth + mx-mxstart;
+ CLAMP(node->width, node->typeinfo->minwidth, node->typeinfo->maxwidth);
+
+ force_draw(0);
+ }
+ else
+ PIL_sleep_ms(10);
+
+ while (qtest()) {
+ short val;
+ unsigned short event= extern_qread(&val);
+
+ switch (event) {
+ case LEFTMOUSE:
+ case SPACEKEY:
+ case RETKEY:
+ cont=0;
+ break;
+ case ESCKEY:
+ case RIGHTMOUSE:
+ if(val) {
+ cancel=1;
+ cont=0;
+ }
+ break;
+ }
+ }
+
+ }
+
+ if(cancel) {
+ node->width= oldwidth;
+ }
+ else
+ BIF_undo_push("Scale Node");
+
+ allqueue(REDRAWNODE, 1);
+}
+
+
+
/* ********************** select ******************** */
/* no undo here! */
@@ -296,8 +446,37 @@ void node_deselectall(SpaceNode *snode, int swap)
allqueue(REDRAWNODE, 0);
}
+/* two active flags, ID nodes have special flag for buttons display */
+static void node_set_active(SpaceNode *snode, bNode *node)
+{
+ bNode *tnode;
+
+ /* make sure only one node is active, and only one per ID type */
+ for(tnode= snode->nodetree->nodes.first; tnode; tnode= tnode->next) {
+ tnode->flag &= ~NODE_ACTIVE;
+
+ /* activate input/output will de-active all node-id types */
+ if(node->typeinfo->nclass==NODE_CLASS_INPUT || node->typeinfo->nclass==NODE_CLASS_OUTPUT)
+ tnode->flag &= ~NODE_ACTIVE_ID;
+
+ if(node->id && tnode->id) {
+ if(GS(node->id->name) == GS(tnode->id->name))
+ tnode->flag &= ~NODE_ACTIVE_ID;
+ }
+ }
+
+ node->flag |= NODE_ACTIVE;
+ if(node->id)
+ node->flag |= NODE_ACTIVE_ID;
+
+ /* tree specific activate calls */
+ if(snode->treetype==NTREE_SHADER) {
+ allqueue(REDRAWBUTSSHADING, 1);
+ }
+}
-static void node_mouse_select(SpaceNode *snode)
+/* return 0: nothing done */
+static int node_mouse_select(SpaceNode *snode, unsigned short event)
{
bNode *node;
float mx, my;
@@ -306,37 +485,77 @@ static void node_mouse_select(SpaceNode *snode)
getmouseco_areawin(mval);
areamouseco_to_ipoco(G.v2d, mval, &mx, &my);
- if((G.qual & LR_SHIFTKEY)==0)
- node_deselectall(snode, 0);
-
+ /* first check for the headers or scaling widget */
for(node= snode->nodetree->nodes.first; node; node= node->next) {
- if(BLI_in_rctf(&node->tot, mx, my)) {
- if(G.qual & LR_SHIFTKEY) {
- if(node->flag & SELECT)
- node->flag &= ~SELECT;
- else
- node->flag |= SELECT;
+ if((node->flag & NODE_HIDDEN)==0) {
+ rctf totr= node->totr;
+ totr.ymin= totr.ymax-20.0f;
+ totr.xmin= totr.xmax-18.0f;
+
+ if(node->typeinfo->flag & NODE_PREVIEW) {
+ if(BLI_in_rctf(&totr, mx, my)) {
+ node->flag ^= NODE_PREVIEW;
+ allqueue(REDRAWNODE, 0);
+ return 1;
+ }
+ totr.xmin-=18.0f;
+ }
+ if(node->typeinfo->flag & NODE_OPTIONS) {
+ if(BLI_in_rctf(&totr, mx, my)) {
+ node->flag ^= NODE_OPTIONS;
+ allqueue(REDRAWNODE, 0);
+ return 1;
+ }
}
- else
- node->flag |= SELECT;
- break;
+ totr= node->totr;
+ totr.xmin= totr.xmax-10.0f;
+ totr.ymax= totr.ymin+10.0f;
+ if(BLI_in_rctf(&totr, mx, my)) {
+ scale_node(snode, node);
+ return 1;
+ }
}
}
- /* not so nice (no event), but function below delays redraw otherwise */
- force_draw(0);
-
- std_rmouse_transform(node_transform_ext); /* does undo push for select */
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(BLI_in_rctf(&node->totr, mx, my))
+ break;
+ }
+ if(node) {
+ if((G.qual & LR_SHIFTKEY)==0)
+ node_deselectall(snode, 0);
+
+ if(G.qual & LR_SHIFTKEY) {
+ if(node->flag & SELECT)
+ node->flag &= ~SELECT;
+ else
+ node->flag |= SELECT;
+ }
+ else
+ node->flag |= SELECT;
+
+ node_set_active(snode, node);
+
+ /* not so nice (no event), but function below delays redraw otherwise */
+ force_draw(0);
+
+ std_rmouse_transform(node_transform_ext); /* does undo push for select */
+
+ return 1;
+ }
+ return 0;
}
-static int node_socket_hilights(SpaceNode *snode, int type, int in_out)
+static int node_socket_hilights(SpaceNode *snode, int in_out)
{
bNode *node;
bNodeSocket *sock, *tsock, *socksel= NULL;
float mx, my;
short mval[2], redraw= 0;
+ if(snode->nodetree==NULL) return 0;
+
getmouseco_areawin(mval);
areamouseco_to_ipoco(G.v2d, mval, &mx, &my);
@@ -358,7 +577,7 @@ static int node_socket_hilights(SpaceNode *snode, int type, int in_out)
}
}
- if(find_indicated_socket(snode, &node, &tsock, type, in_out)) {
+ if(find_indicated_socket(snode, &node, &tsock, in_out)) {
tsock->flag |= SELECT;
if(redraw==1 && tsock==socksel) redraw= 0;
else redraw= 1;
@@ -384,7 +603,7 @@ void node_border_select(SpaceNode *snode)
areamouseco_to_ipoco(G.v2d, mval, &rectf.xmax, &rectf.ymax);
for(node= snode->nodetree->nodes.first; node; node= node->next) {
- if(BLI_isect_rctf(&rectf, &node->tot, NULL)) {
+ if(BLI_isect_rctf(&rectf, &node->totr, NULL)) {
if(val==LEFTMOUSE)
node->flag |= SELECT;
else
@@ -398,14 +617,14 @@ void node_border_select(SpaceNode *snode)
/* ****************** Add *********************** */
-/* can be called from menus too */
-void node_add_shader_node(SpaceNode *snode, int type, float locx, float locy)
+/* can be called from menus too, but they should do own undopush and redraws */
+bNode *node_add_shadernode(SpaceNode *snode, int type, float locx, float locy)
{
bNode *node= NULL;
node_deselectall(snode, 0);
- node= node_shader_add(snode->nodetree, type);
+ node= nodeAddNodeType(snode->nodetree, type);
/* generics */
if(node) {
@@ -413,12 +632,15 @@ void node_add_shader_node(SpaceNode *snode, int type, float locx, float locy)
node->locy= locy;
node->flag |= SELECT;
- node_shader_set_execfunc(node);
- node_shader_set_drawfunc(node);
- /* update calculates all coords for usage */
- node_update(snode->nodetree, node);
+ /* custom storage, will become handlerized.. */
+ if(node->type==SH_NODE_VALTORGB)
+ node->storage= add_colorband(1);
+ else if(node->type==SH_NODE_MATERIAL)
+ node->custom1= SH_NODE_MAT_DIFF|SH_NODE_MAT_SPEC;
+
+ node_set_active(snode, node);
}
-
+ return node;
}
/* hotkey context */
@@ -427,66 +649,63 @@ static void node_add_menu(SpaceNode *snode)
float locx, locy;
short event, mval[2];
- /* shader menu */
- event= pupmenu("Add Node%t|Testnode%x0|Value %x2|Color %x1|Mix Color %x3|Show Color %x4");
- if(event<0) return;
+ /* shader menu, still hardcoded defines... solve */
+ event= pupmenu("Add Node%t|Input%x0|Output%x1|Material%x100|Texture%x106|Value %x102|Color %x101|Mix Color %x103|ColorRamp %x104|Color to BW %x105");
+ if(event<1) return;
getmouseco_areawin(mval);
areamouseco_to_ipoco(G.v2d, mval, &locx, &locy);
- node_add_shader_node(snode, event, locx, locy);
+ node_add_shadernode(snode, event, locx, locy+40.0f);
+
+ snode_handle_recalc(snode);
- allqueue(REDRAWNODE, 0);
BIF_undo_push("Add Node");
}
void node_adduplicate(SpaceNode *snode)
{
- bNode *node, *nnode;
- bNodeLink *link, *nlink;
- bNodeSocket *sock;
- int a;
- /* backwards, we add to list end */
- for(node= snode->nodetree->nodes.last; node; node= node->prev) {
- node->new= NULL;
- if(node->flag & SELECT) {
- nnode= nodeCopyNode(snode->nodetree, node);
- node->flag &= ~SELECT;
- nnode->flag |= SELECT;
- node->new= nnode;
- }
- }
+ ntreeCopyTree(snode->nodetree, 1); /* 1 == internally selected nodes */
+ ntreeSolveOrder(snode->nodetree);
+ snode_handle_recalc(snode);
+
+ transform_nodes(snode, 'g', "Duplicate");
+}
+
+static void node_insert_convertor(SpaceNode *snode, bNodeLink *link)
+{
+ bNode *newnode= NULL;
- /* check for copying links */
- for(link= snode->nodetree->links.first; link; link= link->next) {
- if(link->fromnode->new && link->tonode->new) {
- nlink= nodeAddLink(snode->nodetree, link->fromnode->new, NULL, link->tonode->new, NULL);
- /* sockets were copied in order */
- for(a=0, sock= link->fromnode->outputs.first; sock; sock= sock->next, a++) {
- if(sock==link->fromsock)
- break;
- }
- nlink->fromsock= BLI_findlink(&link->fromnode->new->outputs, a);
+ if(snode->nodetree->type==NTREE_SHADER) {
+ if(link->fromsock->type==SOCK_RGBA && link->tosock->type==SOCK_VALUE) {
+ newnode= node_add_shadernode(snode, SH_NODE_RGBTOBW, 0.0f, 0.0f);
+ }
+ else if(link->fromsock->type==SOCK_VALUE && link->tosock->type==SOCK_RGBA) {
+ newnode= node_add_shadernode(snode, SH_NODE_VALTORGB, 0.0f, 0.0f);
+ }
+
+ if(newnode) {
+ /* dangerous assumption to use first in/out socks, but thats fine for now */
+ newnode->flag |= NODE_HIDDEN;
+ newnode->locx= 0.5f*(link->fromsock->locx + link->tosock->locx);
+ newnode->locy= 0.5f*(link->fromsock->locy + link->tosock->locy) + HIDDEN_RAD;
- for(a=0, sock= link->tonode->inputs.first; sock; sock= sock->next, a++) {
- if(sock==link->tosock)
- break;
- }
- nlink->tosock= BLI_findlink(&link->tonode->new->inputs, a);
+ nodeAddLink(snode->nodetree, newnode, newnode->outputs.first, link->tonode, link->tosock);
+ link->tonode= newnode;
+ link->tosock= newnode->inputs.first;
}
}
-
- transform_nodes(snode, "Duplicate");
}
+
/* loop that adds a nodelink, called by function below */
-/* type = starting socket */
-static int node_draw_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock, int in_out)
+/* in_out = starting socket */
+static int node_add_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock, int in_out)
{
bNode *tnode;
bNodeSocket *tsock;
bNodeLink *link= NULL;
- short mval[2], mvalo[2];
+ short mval[2], mvalo[2], firsttime=1; /* firsttime reconnects a link broken by caller */
/* we make a temporal link */
if(in_out==SOCK_OUT)
@@ -498,21 +717,20 @@ static int node_draw_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock,
while (get_mbut() & L_MOUSE) {
getmouseco_areawin(mval);
- if(mval[0]!=mvalo[0] || mval[1]!=mvalo[1]) {
-
+ if(mval[0]!=mvalo[0] || mval[1]!=mvalo[1] || firsttime) {
+ firsttime= 0;
+
mvalo[0]= mval[0];
mvalo[1]= mval[1];
if(in_out==SOCK_OUT) {
- if(find_indicated_socket(snode, &tnode, &tsock, sock->type, SOCK_IN)) {
+ if(find_indicated_socket(snode, &tnode, &tsock, SOCK_IN)) {
if(nodeFindLink(snode->nodetree, sock, tsock)==NULL) {
- if(nodeCountSocketLinks(snode->nodetree, tsock) < tsock->limit) {
if(tnode!=node && link->tonode!=tnode && link->tosock!= tsock) {
link->tonode= tnode;
link->tosock= tsock;
- nodeSolveOrder(snode->nodetree); /* for interactive red line warning */
+ ntreeSolveOrder(snode->nodetree); /* for interactive red line warning */
}
- }
}
}
else {
@@ -521,13 +739,13 @@ static int node_draw_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock,
}
}
else {
- if(find_indicated_socket(snode, &tnode, &tsock, sock->type, SOCK_OUT)) {
+ if(find_indicated_socket(snode, &tnode, &tsock, SOCK_OUT)) {
if(nodeFindLink(snode->nodetree, sock, tsock)==NULL) {
if(nodeCountSocketLinks(snode->nodetree, tsock) < tsock->limit) {
if(tnode!=node && link->fromnode!=tnode && link->fromsock!= tsock) {
link->fromnode= tnode;
link->fromsock= tsock;
- nodeSolveOrder(snode->nodetree); /* for interactive red line warning */
+ ntreeSolveOrder(snode->nodetree); /* for interactive red line warning */
}
}
}
@@ -538,7 +756,7 @@ static int node_draw_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock,
}
}
/* hilight target sockets only */
- node_socket_hilights(snode, sock->type, in_out==SOCK_OUT?SOCK_IN:SOCK_OUT);
+ node_socket_hilights(snode, in_out==SOCK_OUT?SOCK_IN:SOCK_OUT);
force_draw(0);
}
@@ -546,27 +764,60 @@ static int node_draw_link_drag(SpaceNode *snode, bNode *node, bNodeSocket *sock,
}
if(link->tonode==NULL || link->fromnode==NULL) {
- BLI_remlink(&snode->nodetree->links, link);
- MEM_freeN(link);
+ nodeRemLink(snode->nodetree, link);
+ }
+ else {
+ bNodeLink *tlink;
+ /* we might need to remove a link */
+ if(in_out==SOCK_OUT) {
+ if(nodeCountSocketLinks(snode->nodetree, link->tosock) > tsock->limit) {
+
+ for(tlink= snode->nodetree->links.first; tlink; tlink= tlink->next) {
+ if(link!=tlink && tlink->tosock==link->tosock)
+ break;
+ }
+ if(tlink) {
+ /* is there a free input socket with same type? */
+ for(tsock= tlink->tonode->inputs.first; tsock; tsock= tsock->next) {
+ if(tsock->type==sock->type)
+ if(nodeCountSocketLinks(snode->nodetree, tsock) < tsock->limit)
+ break;
+ }
+ if(tsock)
+ tlink->tosock= tsock;
+ else {
+ nodeRemLink(snode->nodetree, tlink);
+ }
+ }
+ }
+ }
+
+ /* and last trick: insert a convertor when types dont match */
+ if(link->tosock->type!=link->fromsock->type) {
+ node_insert_convertor(snode, link);
+ ntreeSolveOrder(snode->nodetree); /* so nice do it twice! well, the sort-order can only handle 1 added link at a time */
+ }
}
- nodeSolveOrder(snode->nodetree);
- nodeExecTree(snode->nodetree);
+ ntreeSolveOrder(snode->nodetree);
+ snode_handle_recalc(snode);
allqueue(REDRAWNODE, 0);
-
+ BIF_undo_push("Add link");
+
return 1;
}
-static int node_draw_link(SpaceNode *snode)
+/* return 1 when socket clicked */
+static int node_add_link(SpaceNode *snode)
{
bNode *node;
bNodeLink *link;
bNodeSocket *sock;
/* output indicated? */
- if(find_indicated_socket(snode, &node, &sock, -1, SOCK_OUT)) {
+ if(find_indicated_socket(snode, &node, &sock, SOCK_OUT)) {
if(nodeCountSocketLinks(snode->nodetree, sock)<sock->limit)
- return node_draw_link_drag(snode, node, sock, SOCK_OUT);
+ return node_add_link_drag(snode, node, sock, SOCK_OUT);
else {
/* find if we break a link */
for(link= snode->nodetree->links.first; link; link= link->next) {
@@ -576,16 +827,15 @@ static int node_draw_link(SpaceNode *snode)
if(link) {
node= link->tonode;
sock= link->tosock;
- BLI_remlink(&snode->nodetree->links, link);
- MEM_freeN(link);
- return node_draw_link_drag(snode, node, sock, SOCK_IN);
+ nodeRemLink(snode->nodetree, link);
+ return node_add_link_drag(snode, node, sock, SOCK_IN);
}
}
}
/* or an input? */
- else if(find_indicated_socket(snode, &node, &sock, -1, SOCK_IN)) {
+ else if(find_indicated_socket(snode, &node, &sock, SOCK_IN)) {
if(nodeCountSocketLinks(snode->nodetree, sock)<sock->limit)
- return node_draw_link_drag(snode, node, sock, SOCK_IN);
+ return node_add_link_drag(snode, node, sock, SOCK_IN);
else {
/* find if we break a link */
for(link= snode->nodetree->links.first; link; link= link->next) {
@@ -595,9 +845,8 @@ static int node_draw_link(SpaceNode *snode)
if(link) {
node= link->fromnode;
sock= link->fromsock;
- BLI_remlink(&snode->nodetree->links, link);
- MEM_freeN(link);
- return node_draw_link_drag(snode, node, sock, SOCK_OUT);
+ nodeRemLink(snode->nodetree, link);
+ return node_add_link_drag(snode, node, sock, SOCK_OUT);
}
}
}
@@ -615,10 +864,147 @@ static void node_delete(SpaceNode *snode)
nodeFreeNode(snode->nodetree, node);
}
+ snode_handle_recalc(snode);
BIF_undo_push("Delete nodes");
+ allqueue(REDRAWNODE, 1);
+}
+
+static void node_hide(SpaceNode *snode)
+{
+ bNode *node;
+ int nothidden=0, ishidden=0;
+
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(node->flag & SELECT) {
+ if(node->flag & NODE_HIDDEN)
+ ishidden++;
+ else
+ nothidden++;
+ }
+ }
+ for(node= snode->nodetree->nodes.first; node; node= node->next) {
+ if(node->flag & SELECT) {
+ if( (ishidden && nothidden) || ishidden==0)
+ node->flag |= NODE_HIDDEN;
+ else
+ node->flag &= ~NODE_HIDDEN;
+ }
+ }
+ BIF_undo_push("Hide nodes");
+ allqueue(REDRAWNODE, 1);
+}
+
+
+static void node_border_link_delete(SpaceNode *snode)
+{
+ rcti rect;
+ short val, mval[2];
+
+ setcursor_space(SPACE_NODE, CURSOR_VPAINT);
+
+ if ( (val = get_border(&rect, 2)) ) {
+ if(rect.xmin<rect.xmax && rect.ymin<rect.ymax) {
+ //#define NODE_MAXPICKBUF 256
+ bNodeLink *link, *next;
+ GLuint buffer[256];
+ rctf rectf;
+ int code=0, hits;
+
+ mval[0]= rect.xmin;
+ mval[1]= rect.ymin;
+ areamouseco_to_ipoco(&snode->v2d, mval, &rectf.xmin, &rectf.ymin);
+ mval[0]= rect.xmax;
+ mval[1]= rect.ymax;
+ areamouseco_to_ipoco(&snode->v2d, mval, &rectf.xmax, &rectf.ymax);
+
+ myortho2(rectf.xmin, rectf.xmax, rectf.ymin, rectf.ymax);
+
+ glSelectBuffer(256, buffer);
+ glRenderMode(GL_SELECT);
+ glInitNames();
+ glPushName(-1);
+
+ /* draw links */
+ for(link= snode->nodetree->links.first; link; link= link->next) {
+ glLoadName(code++);
+ node_draw_link(snode, link);
+ }
+
+ hits= glRenderMode(GL_RENDER);
+ glPopName();
+ if(hits>0) {
+ int a;
+ for(a=0; a<hits; a++) {
+ bNodeLink *link= BLI_findlink(&snode->nodetree->links, buffer[ (4 * a) + 3]);
+ if(link)
+ link->tonode= NULL; /* first tag for delete, otherwise indices are wrong */
+ }
+ for(link= snode->nodetree->links.first; link; link= next) {
+ next= link->next;
+ if(link->tonode==NULL) {
+ nodeRemLink(snode->nodetree, link);
+ }
+ }
+ ntreeSolveOrder(snode->nodetree);
+ snode_handle_recalc(snode);
+ }
+ allqueue(REDRAWNODE, 0);
+ BIF_undo_push("Erase links");
+ }
+ }
+
+ setcursor_space(SPACE_NODE, CURSOR_STD);
+
+}
+/* ********************** */
+
+static void convert_nodes(SpaceNode *snode)
+{
+ bNode *node, *bnode, *prevnode;
+ bNodeSocket *fromsock, *tosock;
+ Material *mat= (Material *)snode->id;
+ MaterialLayer *ml;
+ float locx= 200;
+
+ if(GS(mat->id.name)!=ID_MA) return;
+
+ prevnode= snode->nodetree->nodes.first;
+
+ for(ml= mat->layers.first; ml; ml= ml->next) {
+ if(ml->mat) {
+ node= nodeAddNodeType(snode->nodetree, SH_NODE_MATERIAL);
+ node->id= (ID *)ml->mat;
+ node->locx= locx; locx+= 100;
+ node->locy= 300;
+
+ bnode= nodeAddNodeType(snode->nodetree, SH_NODE_MIX_RGB);
+ bnode->custom1= ml->blendmethod;
+ bnode->locx= locx; locx+= 100;
+ bnode->locy= 200;
+
+ fromsock= bnode->inputs.first;
+ fromsock->ns.vec[0]= ml->blendfac;
+
+ if(prevnode) {
+ fromsock= prevnode->outputs.first;
+ tosock= bnode->inputs.last;
+ nodeAddLink(snode->nodetree, prevnode, fromsock, bnode, tosock);
+ }
+
+ fromsock= node->outputs.first;
+ tosock= bnode->inputs.first; tosock= tosock->next;
+ nodeAddLink(snode->nodetree, node, fromsock, bnode, tosock);
+
+ prevnode= bnode;
+
+ }
+ }
+
+ ntreeSolveOrder(snode->nodetree);
allqueue(REDRAWNODE, 0);
}
+
/* ******************** main event loop ****************** */
void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
@@ -629,19 +1015,21 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
short val= evt->val, doredraw=0;
if(sa->win==0) return;
-
+ if(snode->nodetree==NULL) return;
+
if(val) {
if( uiDoBlocks(&sa->uiblocks, event)!=UI_NOTHING ) event= 0;
switch(event) {
case LEFTMOUSE:
- if(node_draw_link(snode)==0)
- node_mouse_select(snode);
+ if(node_add_link(snode)==0)
+ if(node_mouse_select(snode, event)==0)
+ node_border_link_delete(snode);
break;
case RIGHTMOUSE:
- node_mouse_select(snode);
+ node_mouse_select(snode, event);
break;
case MIDDLEMOUSE:
@@ -651,16 +1039,19 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
break;
case MOUSEY:
- doredraw= node_socket_hilights(snode, -1, SOCK_IN|SOCK_OUT);
+ doredraw= node_socket_hilights(snode, SOCK_IN|SOCK_OUT);
break;
case UI_BUT_EVENT:
if(val==B_NODE_EXEC) {
- nodeExecTree(snode->nodetree);
- doredraw= 1;
+ snode_handle_recalc(snode); /* sets redraw events too */
}
break;
+ case RENDERPREVIEW:
+ shader_node_previewrender(sa, snode);
+ break;
+
case PADPLUSKEY:
dx= (float)(0.1154*(G.v2d->cur.xmax-G.v2d->cur.xmin));
G.v2d->cur.xmin+= dx;
@@ -676,6 +1067,7 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
doredraw= 1;
break;
case HOMEKEY:
+ snode_home(sa, snode);
doredraw= 1;
break;
@@ -692,19 +1084,22 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
node_border_select(snode);
break;
case CKEY: /* sort again, showing cyclics */
- nodeSolveOrder(snode->nodetree);
+ if(G.qual==LR_ALTKEY)
+ convert_nodes(snode); /* temporal for layers */
+ ntreeSolveOrder(snode->nodetree);
doredraw= 1;
break;
case DKEY:
if(G.qual==LR_SHIFTKEY)
node_adduplicate(snode);
break;
- case EKEY:
- nodeExecTree(snode->nodetree);
- break;
case GKEY:
- transform_nodes(snode, "Translate Node");
+ transform_nodes(snode, 'g', "Translate Node");
+ break;
+ case HKEY:
+ node_hide(snode);
break;
+
case DELKEY:
case XKEY:
if( okee("Erase selected")==0 ) break;
@@ -715,6 +1110,8 @@ void winqreadnodespace(ScrArea *sa, void *spacedata, BWinEvent *evt)
if(doredraw)
scrarea_queue_winredraw(sa);
+ if(doredraw==2)
+ scrarea_queue_headredraw(sa);
}
diff --git a/source/blender/src/editview.c b/source/blender/src/editview.c
index 73fff83f98d..ea640897963 100644
--- a/source/blender/src/editview.c
+++ b/source/blender/src/editview.c
@@ -1039,8 +1039,10 @@ void set_active_base(Base *base)
/* signal to ipo */
allqueue(REDRAWIPO, base->object->ipowin);
+
allqueue(REDRAWACTION, 0);
allqueue(REDRAWNLA, 0);
+ allqueue(REDRAWNODE, 0);
/* signal to action */
select_actionchannel_by_name(base->object->action, "Object", 1);
@@ -1957,7 +1959,7 @@ void set_render_border(void)
if(G.vd->persp!=2) return;
- val= get_border(&rect, 2);
+ val= get_border(&rect, 3);
if(val) {
rcti vb;
diff --git a/source/blender/src/glutil.c b/source/blender/src/glutil.c
index 16571fbec95..ae7cf300844 100644
--- a/source/blender/src/glutil.c
+++ b/source/blender/src/glutil.c
@@ -220,9 +220,9 @@ static int get_cached_work_texture(int *w_r, int *h_r)
glBindTexture(GL_TEXTURE_2D, texid);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
tbuf= MEM_callocN(tex_w*tex_h*4, "tbuf");
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, tex_w, tex_h, 0, GL_RGBA, GL_UNSIGNED_BYTE, tbuf);
@@ -236,9 +236,10 @@ static int get_cached_work_texture(int *w_r, int *h_r)
return texid;
}
-void glaDrawPixelsTex(float x, float y, int img_w, int img_h, void *rect)
+void glaDrawPixelsTex(float x, float y, int img_w, int img_h, int format, void *rect)
{
unsigned char *uc_rect= (unsigned char*) rect;
+ float *f_rect= (float *)rect;
float xzoom= glaGetOneFloat(GL_ZOOM_X), yzoom= glaGetOneFloat(GL_ZOOM_Y);
int ltexid= glaGetOneInteger(GL_TEXTURE_2D);
int lrowlength= glaGetOneInteger(GL_UNPACK_ROW_LENGTH);
@@ -256,9 +257,12 @@ void glaDrawPixelsTex(float x, float y, int img_w, int img_h, void *rect)
int subpart_h= (subpart_y==nsubparts_y-1)?(img_h-subpart_y*tex_h):tex_h;
float rast_x= x+subpart_x*tex_w*xzoom;
float rast_y= y+subpart_y*tex_h*yzoom;
-
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, subpart_w, subpart_h, GL_RGBA, GL_UNSIGNED_BYTE, &uc_rect[(subpart_y*tex_w)*img_w*4 + (subpart_x*tex_w)*4]);
-
+
+ if(format==GL_FLOAT)
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, subpart_w, subpart_h, GL_RGBA, GL_FLOAT, &f_rect[(subpart_y*tex_w)*img_w*4 + (subpart_x*tex_w)*4]);
+ else
+ glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, subpart_w, subpart_h, GL_RGBA, GL_UNSIGNED_BYTE, &uc_rect[(subpart_y*tex_w)*img_w*4 + (subpart_x*tex_w)*4]);
+
glColor3ub(255, 255, 255);
glEnable(GL_TEXTURE_2D);
glBegin(GL_QUADS);
@@ -282,10 +286,8 @@ void glaDrawPixelsTex(float x, float y, int img_w, int img_h, void *rect)
glPixelStorei(GL_UNPACK_ROW_LENGTH, lrowlength);
}
-void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, void *rect)
+void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, int format, void *rect)
{
- unsigned char *uc_rect= (unsigned char*) rect;
-
float xzoom= glaGetOneFloat(GL_ZOOM_X);
float yzoom= glaGetOneFloat(GL_ZOOM_Y);
@@ -337,7 +339,15 @@ void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, void *rect)
}
glPixelStorei(GL_UNPACK_ROW_LENGTH, img_w);
- glDrawPixels(draw_w, draw_h, GL_RGBA, GL_UNSIGNED_BYTE, uc_rect + (off_y*img_w + off_x)*4);
+ if(format==GL_FLOAT) {
+ float *f_rect= (float *)rect;
+ glDrawPixels(draw_w, draw_h, GL_RGBA, GL_FLOAT, f_rect + (off_y*img_w + off_x)*4);
+ }
+ else {
+ unsigned char *uc_rect= (unsigned char *) rect;
+ glDrawPixels(draw_w, draw_h, GL_RGBA, GL_UNSIGNED_BYTE, uc_rect + (off_y*img_w + off_x)*4);
+ }
+
glPixelStorei(GL_UNPACK_ROW_LENGTH, old_row_length);
}
}
diff --git a/source/blender/src/header_buttonswin.c b/source/blender/src/header_buttonswin.c
index 02c79f43b8f..e6869256402 100644
--- a/source/blender/src/header_buttonswin.c
+++ b/source/blender/src/header_buttonswin.c
@@ -137,7 +137,7 @@ void do_buts_buttons(short event)
scrarea_queue_winredraw(curarea);
break;
case B_BUTSPREVIEW:
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_TE);
G.buts->oldkeypress = 0;
scrarea_queue_headredraw(curarea);
scrarea_queue_winredraw(curarea);
@@ -203,7 +203,7 @@ void do_buts_buttons(short event)
for(ml= ma->layers.first; ml; ml= ml->next)
if(ml->mat) ml->mat->id.us++;
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
BIF_undo_push("Paste material settings");
scrarea_queue_winredraw(curarea);
}
diff --git a/source/blender/src/header_info.c b/source/blender/src/header_info.c
index b4e8a19d94d..78490172d2c 100644
--- a/source/blender/src/header_info.c
+++ b/source/blender/src/header_info.c
@@ -471,7 +471,7 @@ void do_info_buttons(unsigned short event)
set_scene(sce);
}
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_TE);
break;
case B_INFODELSCE:
diff --git a/source/blender/src/header_ipo.c b/source/blender/src/header_ipo.c
index 1bfef7a6567..edd7602a3ea 100644
--- a/source/blender/src/header_ipo.c
+++ b/source/blender/src/header_ipo.c
@@ -886,7 +886,7 @@ void do_ipo_buttons(short event)
scrarea_queue_winredraw(curarea);
break;
case B_IPOBORDER:
- val= get_border(&rect, 2);
+ val= get_border(&rect, 3);
if(val) {
mval[0]= rect.xmin;
mval[1]= rect.ymin;
diff --git a/source/blender/src/header_node.c b/source/blender/src/header_node.c
index ca5cacedac6..2d60825730b 100644
--- a/source/blender/src/header_node.c
+++ b/source/blender/src/header_node.c
@@ -33,6 +33,9 @@
#include <stdio.h>
#include "DNA_ID.h"
+#include "DNA_material_types.h"
+#include "DNA_node_types.h"
+#include "DNA_object_types.h"
#include "DNA_screen_types.h"
#include "DNA_scene_types.h"
#include "DNA_space_types.h"
@@ -41,6 +44,7 @@
#include "BIF_gl.h"
#include "BIF_interface.h"
+#include "BIF_previewrender.h"
#include "BIF_resources.h"
#include "BIF_screen.h"
#include "BIF_space.h"
@@ -49,8 +53,10 @@
#include "BKE_global.h"
#include "BKE_main.h"
+#include "BKE_material.h"
#include "BSE_headerbuttons.h"
+#include "BSE_node.h"
#include "blendef.h"
#include "butspace.h"
@@ -58,17 +64,29 @@
void do_node_buttons(ScrArea *sa, unsigned short event)
{
-// SpaceNode *snode= sa->spacedata.first;
+ SpaceNode *snode= sa->spacedata.first;
+ Material *ma;
switch(event) {
- ;
+ case B_NODE_USEMAT:
+ ma= (Material *)snode->id;
+ if(ma) {
+ if(ma->use_nodes && ma->nodetree==NULL) {
+ node_shader_default(ma);
+ snode_set_context(snode);
+ }
+ BIF_preview_changed(ID_MA);
+ allqueue(REDRAWNODE, 0);
+ allqueue(REDRAWBUTSSHADING, 0);
+ }
+ break;
}
}
void node_buttons(ScrArea *sa)
{
-// SpaceNode *snode= sa->spacedata.first;
+ SpaceNode *snode= sa->spacedata.first;
uiBlock *block;
short xco;
char name[256];
@@ -106,7 +124,6 @@ void node_buttons(ScrArea *sa)
&(sa->flag), 0, 0, 0, 0,
"Hide pulldown menus");
}
- uiBlockSetEmboss(block, UI_EMBOSS);
xco+=XIC;
if((sa->flag & HEADER_NO_PULLDOWN)==0) {
@@ -119,6 +136,25 @@ void node_buttons(ScrArea *sa)
// xco+= xmax;
}
+ uiBlockSetEmboss(block, UI_EMBOSS);
+
+ /* find and set the context */
+ snode_set_context(snode);
+
+ if(snode->treetype==NTREE_SHADER) {
+ if(snode->from) {
+ /* 0, NULL -> pin */
+ xco= std_libbuttons(block, xco, 0, 0, NULL, B_MATBROWSE, snode->id, snode->from, &(snode->menunr),
+ B_MATALONE, B_MATLOCAL, B_MATDELETE, B_AUTOMATNAME, B_KEEPDATA);
+
+ if(snode->id) {
+ Material *ma= (Material *)snode->id;
+ uiDefButC(block, TOG, B_NODE_USEMAT, "Use Nodes", xco+5,0,70,19, &ma->use_nodes, 0.0f, 0.0f, 0, 0, "");
+ xco+=80;
+ }
+ }
+ }
+
/* always as last */
sa->headbutlen= xco+2*XIC;
diff --git a/source/blender/src/headerbuttons.c b/source/blender/src/headerbuttons.c
index c2551bd265a..38b0e604a01 100644
--- a/source/blender/src/headerbuttons.c
+++ b/source/blender/src/headerbuttons.c
@@ -782,7 +782,8 @@ void do_global_buttons(unsigned short event)
BIF_undo_push("Browse Material");
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
- BIF_preview_changed(G.buts);
+ allqueue(REDRAWNODE, 0);
+ BIF_preview_changed(ID_MA);
}
}
@@ -799,7 +800,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
}
break;
@@ -819,7 +820,7 @@ void do_global_buttons(unsigned short event)
ma->mtex[ ma->texact ]= NULL;
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
}
}
@@ -833,7 +834,7 @@ void do_global_buttons(unsigned short event)
wrld->mtex[ wrld->texact ]= NULL;
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
}
}
}
@@ -847,7 +848,7 @@ void do_global_buttons(unsigned short event)
la->mtex[ la->texact ]= NULL;
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
}
}
}
@@ -913,7 +914,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_MA);
}
}
break;
@@ -1101,7 +1102,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
}
break;
case B_WORLDDELETE:
@@ -1169,7 +1170,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_WO);
}
}
break;
@@ -1209,7 +1210,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
}
break;
@@ -1266,7 +1267,7 @@ void do_global_buttons(unsigned short event)
allqueue(REDRAWBUTSSHADING, 0);
allqueue(REDRAWIPO, 0);
allqueue(REDRAWOOPS, 0);
- BIF_preview_changed(G.buts);
+ BIF_preview_changed(ID_LA);
}
}
break;
diff --git a/source/blender/src/interface.c b/source/blender/src/interface.c
index 26784712b0c..351deab0e4b 100644
--- a/source/blender/src/interface.c
+++ b/source/blender/src/interface.c
@@ -69,11 +69,13 @@
#include "DNA_userdef_types.h"
#include "DNA_vec_types.h"
#include "DNA_object_types.h"
+#include "DNA_texture_types.h"
#include "DNA_vfont_types.h"
#include "BKE_blender.h"
#include "BKE_global.h"
#include "BKE_library.h"
+#include "BKE_texture.h"
#include "BKE_utildefines.h"
#include "BIF_gl.h"
@@ -908,6 +910,9 @@ void uiDrawBlock(uiBlock *block)
uiBut *but;
short testmouse=0, mouse[2];
+ /* we set this only once */
+ glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
+
/* handle pending stuff */
if(block->autofill) ui_autofill(block);
if(block->minx==0.0 && block->maxx==0.0) uiBoundsBlock(block, 0);
@@ -2453,7 +2458,7 @@ static int ui_do_but_NUMSLI(uiBut *but)
}
/* event denotes if we make first item active or not */
-static int ui_do_but_BLOCK(uiBut *but, int event)
+static uiBlock *ui_do_but_BLOCK(uiBut *but, int event)
{
uiBlock *block;
uiBut *bt;
@@ -2494,7 +2499,7 @@ static int ui_do_but_BLOCK(uiBut *but, int event)
but->flag &= ~UI_SELECT;
uibut_do_func(but);
- return 0;
+ return block;
}
static int ui_do_but_BUTM(uiBut *but)
@@ -2510,9 +2515,25 @@ static int ui_do_but_BUTM(uiBut *but)
static int ui_do_but_LABEL(uiBut *but)
{
-
- uibut_do_func(but);
- return but->retval;
+ /* new label type, for nodes, ctrl+clock on text gives options */
+ if(but->block_func) {
+ if(G.qual & LR_CTRLKEY) {
+ ListBase listb={NULL, NULL};
+ uiBlock *block= ui_do_but_BLOCK(but, 0);
+
+ BLI_addtail(&listb, block);
+ block->parent= NULL; /* we abused ui_do_but_BLOCK */
+ uiDoBlocks(&listb, 0);
+
+ uibut_do_func(but);
+ return but->retval;
+ }
+ return 0;
+ }
+ else {
+ uibut_do_func(but);
+ return but->retval;
+ }
}
static uiBut *ui_get_valid_link_button(uiBlock *block, uiBut *but, short *mval)
@@ -3147,6 +3168,104 @@ static int ui_do_but_CHARTAB(uiBut *but)
#endif
+static int vergcband(const void *a1, const void *a2)
+{
+ const CBData *x1=a1, *x2=a2;
+
+ if( x1->pos > x2->pos ) return 1;
+ else if( x1->pos < x2->pos) return -1;
+ return 0;
+}
+
+
+static void do_colorband_evt(ColorBand *coba)
+{
+ int a;
+
+ if(coba==NULL) return;
+
+ if(coba->tot<2) return;
+
+ for(a=0; a<coba->tot; a++) coba->data[a].cur= a;
+ qsort(coba->data, coba->tot, sizeof(CBData), vergcband);
+ for(a=0; a<coba->tot; a++) {
+ if(coba->data[a].cur==coba->cur) {
+ if(coba->cur!=a) addqueue(curarea->win, REDRAW, 0); /* button cur */
+ coba->cur= a;
+ break;
+ }
+ }
+}
+
+
+static int ui_do_but_COLORBAND(uiBut *but)
+{
+ ColorBand *coba= (ColorBand *)but->poin;
+ CBData *cbd;
+ float dx, width= but->x2-but->x1;
+ int a;
+ int mindist= 12, xco;
+ short mval[2], mvalo[2];
+
+ uiGetMouse(mywinget(), mvalo);
+
+ if(G.qual & LR_CTRLKEY) {
+ /* insert new key on mouse location */
+ if(coba->tot < MAXCOLORBAND-1) {
+ float pos= ((float)(mvalo[0] - but->x1))/width;
+ float col[4];
+
+ do_colorband(coba, pos, col); /* executes it */
+
+ coba->tot++;
+ coba->cur= coba->tot-1;
+
+ coba->data[coba->cur].r= col[0];
+ coba->data[coba->cur].g= col[1];
+ coba->data[coba->cur].b= col[2];
+ coba->data[coba->cur].a= col[3];
+ coba->data[coba->cur].pos= pos;
+
+ do_colorband_evt(coba);
+ }
+ }
+ else {
+
+ /* first, activate new key when mouse is close */
+ for(a=0, cbd= coba->data; a<coba->tot; a++, cbd++) {
+ xco= but->x1 + (cbd->pos*width);
+ xco= ABS(xco-mvalo[0]);
+ if(a==coba->cur) xco+= 5; // selected one disadvantage
+ if(xco<mindist) {
+ coba->cur= a;
+ mindist= xco;
+ }
+ }
+
+ cbd= coba->data + coba->cur;
+
+ while(get_mbut() & L_MOUSE) {
+ uiGetMouse(mywinget(), mval);
+ if(mval[0]!=mvalo[0]) {
+ dx= mval[0]-mvalo[0];
+ dx/= width;
+ cbd->pos+= dx;
+ CLAMP(cbd->pos, 0.0, 1.0);
+
+ ui_draw_but(but);
+ ui_block_flush_back(but->block);
+
+ do_colorband_evt(coba);
+ cbd= coba->data + coba->cur; /* because qsort */
+
+ mvalo[0]= mval[0];
+ }
+ BIF_wait_for_statechange();
+ }
+ }
+
+ return but->retval;
+}
/* ************************************************ */
@@ -3320,7 +3439,8 @@ static int ui_do_button(uiBlock *block, uiBut *but, uiEvent *uevent)
case BLOCK:
case PULLDOWN:
if(uevent->val) {
- retval= ui_do_but_BLOCK(but, uevent->event);
+ ui_do_but_BLOCK(but, uevent->event);
+ retval= 0;
if(block->auto_open==0) block->auto_open= 1;
}
break;
@@ -3341,6 +3461,9 @@ static int ui_do_button(uiBlock *block, uiBut *but, uiEvent *uevent)
case HSVCUBE:
retval= ui_do_but_HSVCUBE(but);
break;
+ case BUT_COLORBAND:
+ retval= ui_do_but_COLORBAND(but);
+ break;
#ifdef INTERNATIONAL
case CHARTAB:
@@ -4869,36 +4992,31 @@ void ui_check_but(uiBut *but)
/* calc but->ofs, to draw the string shorter if too long */
but->ofs= 0;
while(but->strwidth > (int)okwidth ) {
- but->ofs++;
- if(but->drawstr[but->ofs])
+ if ELEM(but->type, NUM, TEX) { // only these cut off left
+ but->ofs++;
but->strwidth= but->aspect*BIF_GetStringWidth(but->font, but->drawstr+but->ofs, transopts);
- else but->strwidth= 0;
-
- /* textbut exception */
- if(but->pos != -1) {
- pos= but->pos+strlen(but->str);
- if(pos-1 < but->ofs) {
- pos= but->ofs-pos+1;
- but->ofs -= pos;
- if(but->ofs<0) {
- but->ofs= 0;
- pos--;
+
+ /* textbut exception */
+ if(but->pos != -1) {
+ pos= but->pos+strlen(but->str);
+ if(pos-1 < but->ofs) {
+ pos= but->ofs-pos+1;
+ but->ofs -= pos;
+ if(but->ofs<0) {
+ but->ofs= 0;
+ pos--;
+ }
+ but->drawstr[ strlen(but->drawstr)-pos ]= 0;
}
- but->drawstr[ strlen(but->drawstr)-pos ]= 0;
}
}
-
- if(but->strwidth < 10) break;
- }
-
- /* fix for buttons that better not have text cut off to the right */
- if(but->ofs) {
- if ELEM(but->type, NUM, TEX); // only these cut off left
else {
- but->drawstr[ strlen(but->drawstr)-but->ofs ]= 0;
- but->ofs= 0;
+ but->drawstr[ strlen(but->drawstr)-1 ]= 0;
+ but->strwidth= but->aspect*BIF_GetStringWidth(but->font, but->drawstr, transopts);
}
+
+ if(but->strwidth < 10) break;
}
}
}
diff --git a/source/blender/src/interface_draw.c b/source/blender/src/interface_draw.c
index 44da2c488c5..a0a0afcb728 100644
--- a/source/blender/src/interface_draw.c
+++ b/source/blender/src/interface_draw.c
@@ -55,17 +55,19 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
+#include "DNA_packedFile_types.h"
#include "DNA_screen_types.h"
#include "DNA_space_types.h"
+#include "DNA_texture_types.h"
#include "DNA_userdef_types.h"
#include "DNA_vec_types.h"
#include "DNA_vfont_types.h"
-#include "DNA_packedFile_types.h"
#include "BKE_blender.h"
-#include "BKE_utildefines.h"
#include "BKE_font.h"
#include "BKE_global.h"
+#include "BKE_utildefines.h"
+
#include "datatoc.h" /* std font */
#include "BIF_gl.h"
@@ -151,15 +153,24 @@ void uiEmboss(float x1, float y1, float x2, float y2, int sel)
/* ************** GENERIC ICON DRAW, NO THEME HERE ************* */
+/* icons have been standardized... and this call draws in untransformed coordinates */
+#define ICON_HEIGHT 16.0f
+
static void ui_draw_icon(uiBut *but, BIFIconID icon)
{
- // void BIF_icon_pos(float xs, float ys);
+ float xs=0, ys=0, aspect, height;
int blend= 0;
- float xs=0, ys=0;
- // this icon doesn't need draw...
+ /* this icon doesn't need draw... */
if(icon==ICON_BLANK1) return;
-
+
+ /* we need aspect from block, for menus... these buttons are scaled in uiPositionBlock() */
+ aspect= but->block->aspect;
+ if(aspect != but->aspect)
+ height= ICON_HEIGHT/aspect;
+ else
+ height= ICON_HEIGHT;
+
if(but->flag & UI_ICON_LEFT) {
if (but->type==BUTM) {
xs= but->x1+1.0;
@@ -170,22 +181,21 @@ static void ui_draw_icon(uiBut *but, BIFIconID icon)
else {
xs= but->x1+6.0;
}
- ys= (but->y1+but->y2- BIF_icon_get_height(icon))/2.0;
+ ys= (but->y1+but->y2- height)/2.0;
}
if(but->flag & UI_ICON_RIGHT) {
xs= but->x2-17.0;
- ys= (but->y1+but->y2- BIF_icon_get_height(icon))/2.0;
+ ys= (but->y1+but->y2- height)/2.0;
}
if (!((but->flag & UI_ICON_RIGHT) || (but->flag & UI_ICON_LEFT))) {
- xs= (but->x1+but->x2- BIF_icon_get_width(icon))/2.0;
- ys= (but->y1+but->y2- BIF_icon_get_height(icon))/2.0;
+ xs= (but->x1+but->x2- height)/2.0;
+ ys= (but->y1+but->y2- height)/2.0;
}
- if(but->aspect>1.1) glPixelZoom(1.0/but->aspect, 1.0/but->aspect);
- else if(but->aspect<0.9) glPixelZoom(1.0/but->aspect, 1.0/but->aspect);
+ /* aspect for the icon has to be stored */
+ BIF_icon_set_aspect(icon, aspect);
glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
/* calculate blend color */
if ELEM4(but->type, ICONTOG, TOG, ROW, TOGN) {
@@ -193,12 +203,10 @@ static void ui_draw_icon(uiBut *but, BIFIconID icon)
else if(but->flag & UI_ACTIVE);
else blend= -60;
}
- BIF_icon_draw_blended(xs, ys, icon, but->themecol, blend);
+ BIF_icon_draw_blended((int)(xs+0.5f), (int)(ys+0.5f), icon, but->themecol, blend);
- glBlendFunc(GL_ONE, GL_ZERO);
glDisable(GL_BLEND);
- glPixelZoom(1.0, 1.0);
}
@@ -406,7 +414,6 @@ static void ui_default_iconrow_arrows(float x1, float y1, float x2, float y2)
{
glEnable( GL_POLYGON_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
@@ -430,7 +437,6 @@ static void ui_default_menu_arrows(float x1, float y1, float x2, float y2)
{
glEnable( GL_POLYGON_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
@@ -456,7 +462,6 @@ static void ui_default_num_arrows(float x1, float y1, float x2, float y2)
glEnable( GL_POLYGON_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glShadeModel(GL_FLAT);
glBegin(GL_TRIANGLES);
@@ -486,7 +491,6 @@ static void ui_tog3_invert(float x1, float y1, float x2, float y2, int seltype)
short alpha = 30;
if (seltype == 0) {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glColor4ub(0, 0, 0, alpha);
@@ -497,7 +501,6 @@ static void ui_tog3_invert(float x1, float y1, float x2, float y2, int seltype)
glDisable(GL_BLEND);
} else {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glColor4ub(255, 255, 255, alpha);
@@ -521,7 +524,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
if (!((align == UI_BUT_ALIGN_DOWN) ||
(align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT)) ||
(align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT)))) {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
MM_WHITE_OP;
fdrawline(x1, y1-1, x2, y1-1);
@@ -547,7 +549,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
case UI_BUT_ALIGN_LEFT:
/* RIGHT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -564,7 +565,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
case UI_BUT_ALIGN_RIGHT:
/* LEFT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -590,7 +590,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT:
/* LEFT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -607,7 +606,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_LEFT:
/* RIGHT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -628,7 +626,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
}
}
else {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
@@ -663,7 +660,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
case ICONROW:
case ICONTEXTROW:
/* DARKENED AREA */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glColor4ub(0, 0, 0, 30);
@@ -679,7 +675,6 @@ static void ui_default_button(int type, int colorid, float asp, float x1, float
break;
case MENU:
/* DARKENED AREA */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glColor4ub(0, 0, 0, 30);
@@ -708,7 +703,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
if (!((align == UI_BUT_ALIGN_DOWN) ||
(align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_RIGHT)) ||
(align == (UI_BUT_ALIGN_DOWN|UI_BUT_ALIGN_LEFT)))) {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
MM_WHITE_OP;
fdrawline(x1, y1-1, x2, y1-1);
@@ -734,7 +728,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
case UI_BUT_ALIGN_LEFT:
/* RIGHT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -751,7 +744,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
case UI_BUT_ALIGN_RIGHT:
/* LEFT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -777,7 +769,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_RIGHT:
/* LEFT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -794,7 +785,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
case UI_BUT_ALIGN_TOP|UI_BUT_ALIGN_LEFT:
/* RIGHT OUTER SUNKEN EFFECT */
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
glBegin(GL_LINES);
@@ -816,7 +806,6 @@ static void ui_default_flat(int type, int colorid, float asp, float x1, float y1
}
else {
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
@@ -1079,7 +1068,6 @@ static void round_button(float x1, float y1, float x2, float y2, float asp,
/* fake AA */
uiSetRoundBox(round);
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
BIF_GetThemeColor3ubv(colorid, col);
@@ -1318,7 +1306,6 @@ static void ui_draw_slider(int colorid, float fac, float aspect, float x1, float
static void ui_shadowbox(float minx, float miny, float maxx, float maxy, float shadsize, unsigned char alpha)
{
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glShadeModel(GL_SMOOTH);
@@ -1399,7 +1386,6 @@ static void ui_draw_pulldown_item(int type, int colorid, float asp, float x1, fl
BIF_GetThemeColor4ubv(TH_MENU_BACK, col);
if(col[3]!=255) {
glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
}
if((flag & UI_ACTIVE) && type!=LABEL) {
@@ -1427,7 +1413,6 @@ static void ui_draw_pulldown_round(int type, int colorid, float asp, float x1, f
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
gl_round_box(GL_LINE_LOOP, x1, y1+3, x2, y2-3, 7.0);
glDisable( GL_LINE_SMOOTH );
glDisable( GL_BLEND );
@@ -1873,9 +1858,120 @@ static void ui_draw_but_CHARTAB(uiBut *but)
#endif // INTERNATIONAL
+static void ui_draw_but_COLORBAND(uiBut *but)
+{
+ ColorBand *coba= (ColorBand *)but->poin;
+ CBData *cbd;
+ float x1, y1, sizex, sizey;
+ float dx, v3[2], v1[2], v2[2];
+ int a;
+
+ if(coba==NULL) return;
+
+ x1= but->x1;
+ y1= but->y1;
+ sizex= but->x2-x1;
+ sizey= but->y2-y1;
+
+ /* first background, to show tranparency */
+ dx= sizex/12.0;
+ v1[0]= x1;
+ for(a=0; a<12; a++) {
+ if(a & 1) glColor3f(0.3, 0.3, 0.3); else glColor3f(0.8, 0.8, 0.8);
+ glRectf(v1[0], y1, v1[0]+dx, y1+0.5*sizey);
+ if(a & 1) glColor3f(0.8, 0.8, 0.8); else glColor3f(0.3, 0.3, 0.3);
+ glRectf(v1[0], y1+0.5*sizey, v1[0]+dx, y1+sizey);
+ v1[0]+= dx;
+ }
+
+ glShadeModel(GL_SMOOTH);
+ glEnable(GL_BLEND);
+
+ cbd= coba->data;
+
+ v1[0]= v2[0]= x1;
+ v1[1]= y1;
+ v2[1]= y1+sizey;
+
+ glBegin(GL_QUAD_STRIP);
+
+ glColor4fv( &cbd->r );
+ glVertex2fv(v1); glVertex2fv(v2);
+
+ for(a=0; a<coba->tot; a++, cbd++) {
+
+ v1[0]=v2[0]= x1+ cbd->pos*sizex;
+
+ glColor4fv( &cbd->r );
+ glVertex2fv(v1); glVertex2fv(v2);
+ }
+
+ v1[0]=v2[0]= x1+ sizex;
+ glVertex2fv(v1); glVertex2fv(v2);
+
+ glEnd();
+ glShadeModel(GL_FLAT);
+ glDisable(GL_BLEND);
+
+ /* outline */
+ v1[0]= x1; v1[1]= y1;
+
+ cpack(0x0);
+ glBegin(GL_LINE_LOOP);
+ glVertex2fv(v1);
+ v1[0]+= sizex;
+ glVertex2fv(v1);
+ v1[1]+= sizey;
+ glVertex2fv(v1);
+ v1[0]-= sizex;
+ glVertex2fv(v1);
+ glEnd();
+
+
+ /* help lines */
+ v1[0]= v2[0]=v3[0]= x1;
+ v1[1]= y1;
+ v2[1]= y1+0.5*sizey;
+ v3[1]= y1+sizey;
+
+ cbd= coba->data;
+ glBegin(GL_LINES);
+ for(a=0; a<coba->tot; a++, cbd++) {
+ v1[0]=v2[0]=v3[0]= x1+ cbd->pos*sizex;
+
+ glColor3ub(0, 0, 0);
+ glVertex2fv(v1);
+ glVertex2fv(v2);
+
+ if(a==coba->cur) {
+ glVertex2f(v1[0]-1, v1[1]);
+ glVertex2f(v2[0]-1, v2[1]);
+ glVertex2f(v1[0]+1, v1[1]);
+ glVertex2f(v2[0]+1, v2[1]);
+ }
+
+ glColor3ub(255, 255, 255);
+ glVertex2fv(v2);
+ glVertex2fv(v3);
+
+ if(a==coba->cur) {
+ if(cbd->pos>0.01) {
+ glVertex2f(v2[0]-1, v2[1]);
+ glVertex2f(v3[0]-1, v3[1]);
+ }
+ if(cbd->pos<0.99) {
+ glVertex2f(v2[0]+1, v2[1]);
+ glVertex2f(v3[0]+1, v3[1]);
+ }
+ }
+ }
+ glEnd();
+}
+
+
+
static void ui_draw_roundbox(uiBut *but)
{
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
BIF_ThemeColorShadeAlpha(TH_PANEL, but->a2, but->a2);
@@ -1988,7 +2084,12 @@ void ui_draw_but(uiBut *but)
case ROUNDBOX:
ui_draw_roundbox(but);
-
+ break;
+
+ case BUT_COLORBAND:
+ ui_draw_but_COLORBAND(but);
+ break;
+
default:
but->embossfunc(but->type, but->themecol, but->aspect, but->x1, but->y1, but->x2, but->y2, but->flag);
ui_draw_text_icon(but);
diff --git a/source/blender/src/interface_icons.c b/source/blender/src/interface_icons.c
index 84ed6f8f29e..686c70295c8 100644
--- a/source/blender/src/interface_icons.c
+++ b/source/blender/src/interface_icons.c
@@ -470,13 +470,18 @@ static void clear_transp_rect(unsigned char *transp, unsigned char *rect, int w,
static void prepare_internal_icons(ImBuf* bbuf)
{
int x, y;
-
+ int rowstride= bbuf->x*4;
+ char *back= (char *)bbuf->rect;
+ unsigned char transp[4];
+
+ /* this sets blueish outside of icon to zero alpha */
+ QUATCOPY(transp, back);
+ clear_transp_rect(transp, back, bbuf->x, bbuf->y, rowstride);
+
/* hack! */
for (y=0; y<12; y++) {
for (x=0; x<21; x++) {
- int rowstride= bbuf->x*4;
unsigned char *start= ((unsigned char*) bbuf->rect) + (y*21 + 3)*rowstride + (x*20 + 3)*4;
- unsigned char transp[4];
/* this sets backdrop of icon to zero alpha */
transp[0]= start[0];
transp[1]= start[1];
@@ -485,10 +490,6 @@ static void prepare_internal_icons(ImBuf* bbuf)
clear_transp_rect(transp, start, 20, 21, rowstride);
clear_transp_rect_soft(transp, start, 20, 21, rowstride);
- /* this sets outside of icon to zero alpha */
- start= ((unsigned char*) bbuf->rect) + (y*21)*rowstride + (x*20)*4;
- QUATCOPY(transp, start);
- clear_transp_rect(transp, start, 20, 21, rowstride);
}
}
}
@@ -503,13 +504,7 @@ static void init_internal_icons()
for (y=0; y<12; y++) {
for (x=0; x<21; x++) {
- if (x==11 && y==6) {
- def_internal_icon(bbuf, ICON_BEVELBUT_HLT, (x*20 + 3 + 4), (y*21 + 3 + 2), 7, 13);
- } else if (x==12 && y==6) {
- def_internal_icon(bbuf, ICON_BEVELBUT_DEHLT, (x*20 + 3 + 4), (y*21 + 3 + 2), 7, 13);
- } else {
- def_internal_icon(bbuf, BIFICONID_FIRST + y*21 + x, x*20+3, y*21+3, 15, 16);
- }
+ def_internal_icon(bbuf, BIFICONID_FIRST + y*21 + x, x*20+3, y*21+3, 16, 16);
}
}
@@ -617,6 +612,51 @@ void BIF_icons_init(int first_dyn_id)
init_internal_icons();
}
+/* create single icon from jpg, png etc. */
+static void icon_from_image(Image* img, RenderInfo* ri, unsigned int w, unsigned int h)
+{
+ struct ImBuf *ima;
+ float scaledx, scaledy;
+ int pr_size = w*h*sizeof(unsigned int);
+ short ex, ey, dx, dy;
+
+ if (!img)
+ return;
+
+ if (!ri->rect) {
+ ri->rect= MEM_callocN(sizeof(int)*ri->pr_rectx*ri->pr_recty, "butsrect");
+ memset(ri->rect, 0xFF, w*h*sizeof(unsigned int));
+ }
+
+ if(img->ibuf==NULL) {
+ load_image(img, IB_rect, G.sce, G.scene->r.cfra);
+ }
+ ima = IMB_dupImBuf(img->ibuf);
+
+ if (!ima)
+ return;
+
+ if (ima->x > ima->y) {
+ scaledx = (float)w;
+ scaledy = ( (float)ima->y/(float)ima->x )*(float)w;
+ }
+ else {
+ scaledx = ( (float)ima->x/(float)ima->y )*(float)h;
+ scaledy = (float)h;
+ }
+
+ ex = (short)scaledx;
+ ey = (short)scaledy;
+
+ dx = (w - ex) / 2;
+ dy = (h - ey) / 2;
+
+ IMB_scaleImBuf(ima, ex, ey);
+ memcpy(ri->rect, ima->rect, pr_size);
+ IMB_freeImBuf(ima);
+}
+
+
/* only called when icon has changed */
/* only call with valid pointer from BIF_icon_draw */
static void icon_set_image(ID* id, DrawInfo* di)
@@ -636,16 +676,9 @@ static void icon_set_image(ID* id, DrawInfo* di)
/* no drawing (see last parameter doDraw, just calculate preview image
- hopefully small enough to be fast */
if (GS(id->name) == ID_IM)
- BIF_calcpreview_image((struct Image*)id, &ri, ri.pr_rectx, ri.pr_recty);
+ icon_from_image((struct Image*)id, &ri, ri.pr_rectx, ri.pr_recty);
else {
- BIF_previewrender(id, &ri, NULL, 0);
-
- /* need to correct alpha */
- /*
- for( it = 0; it < ri.pr_rectx*ri.pr_recty; ++it) {
- ri.rect[it] |= 0xFF000000;
- }
- */
+ BIF_previewrender(id, &ri, NULL, PR_ICON_RENDER);
}
/* and copy the image into the icon */
@@ -657,13 +690,11 @@ static void icon_set_image(ID* id, DrawInfo* di)
}
-void BIF_icon_draw( int x, int y, int icon_id)
+void BIF_icon_draw(float x, float y, int icon_id)
{
Icon* icon = 0;
DrawInfo* di = 0;
- ImBuf *ima;
-
icon = BKE_icon_get(icon_id);
if (!icon) {
@@ -694,24 +725,28 @@ void BIF_icon_draw( int x, int y, int icon_id)
if (!di->rect) return; /* something has gone wrong! */
- /* di->rect contains image in 'rendersize' */
-
- /* first allocate imbuf for scaling and copy preview into it */
- ima = IMB_allocImBuf(di->rw, di->rh, 32, IB_rect, 0);
- memcpy(ima->rect, di->rect,di->rw*di->rh*sizeof(unsigned int));
-
- /* scale it */
- IMB_scaleImBuf(ima, di->w, di->h);
-
glRasterPos2f(x, y);
- glDrawPixels(di->w, di->h, GL_RGBA, GL_UNSIGNED_BYTE, ima->rect);
-
- IMB_freeImBuf(ima);
+
+ /* di->rect contains image in 'rendersize', we only scale if needed */
+ if(di->rw!=di->w && di->rh!=di->h) {
+ ImBuf *ima;
+ /* first allocate imbuf for scaling and copy preview into it */
+ ima = IMB_allocImBuf(di->rw, di->rh, 32, IB_rect, 0);
+ memcpy(ima->rect, di->rect, di->rw*di->rh*sizeof(unsigned int));
+
+ /* scale it */
+ IMB_scaleImBuf(ima, di->w, di->h);
+ glDrawPixels(di->w, di->h, GL_RGBA, GL_UNSIGNED_BYTE, ima->rect);
+
+ IMB_freeImBuf(ima);
+ }
+ else
+ glDrawPixels(di->w, di->h, GL_RGBA, GL_UNSIGNED_BYTE, di->rect);
}
}
-void BIF_icon_draw_blended(int x, int y, int icon_id, int colorid, int shade)
+void BIF_icon_draw_blended(float x, float y, int icon_id, int colorid, int shade)
{
if(shade < 0) {
@@ -724,7 +759,8 @@ void BIF_icon_draw_blended(int x, int y, int icon_id, int colorid, int shade)
glPixelTransferf(GL_ALPHA_SCALE, 1.0);
}
-void BIF_icon_set_aspect(int icon_id, float aspect) {
+void BIF_icon_set_aspect(int icon_id, float aspect)
+{
Icon* icon = 0;
DrawInfo* di = 0;
@@ -746,8 +782,8 @@ void BIF_icon_set_aspect(int icon_id, float aspect) {
}
di->aspect = aspect;
/* scale width and height according to aspect */
- di->w = 16.0 / di->aspect;
- di->h = 16.0 / di->aspect;
+ di->w = (int)(16.0f/di->aspect + 0.5f);
+ di->h = (int)(16.0f/di->aspect + 0.5f);
}
diff --git a/source/blender/src/interface_panel.c b/source/blender/src/interface_panel.c
index 74cb87a5bbf..09a50faeff9 100644
--- a/source/blender/src/interface_panel.c
+++ b/source/blender/src/interface_panel.c
@@ -344,7 +344,6 @@ void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad,
color[3]= 0.5;
glColor4fv(color);
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
}
/* solid part */
@@ -357,7 +356,6 @@ void uiRoundBoxEmboss(float minx, float miny, float maxx, float maxy, float rad,
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
/* top shade */
gl_round_box_topshade(minx+1, miny+1, maxx-1, maxy-1, rad);
@@ -387,13 +385,11 @@ void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad)
color[3]= 0.5;
glColor4fv(color);
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
}
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
@@ -413,7 +409,6 @@ void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad)
color[3]= 0.5;
glColor4fv(color);
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
}
/* solid part */
@@ -422,7 +417,6 @@ void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad)
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad);
@@ -764,7 +758,6 @@ static void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3,
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glBegin(GL_LINE_LOOP);
glVertex2f(x1, y1);
@@ -778,7 +771,7 @@ static void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3,
}
/* triangle 'icon' for panel header */
-static void ui_draw_tria_icon(float x, float y, float aspect, char dir)
+void ui_draw_tria_icon(float x, float y, float aspect, char dir)
{
BIF_ThemeColor(TH_TEXT_HI);
@@ -790,13 +783,12 @@ static void ui_draw_tria_icon(float x, float y, float aspect, char dir)
}
}
-static void ui_draw_anti_x(float x1, float y1, float x2, float y2)
+void ui_draw_anti_x(float x1, float y1, float x2, float y2)
{
/* set antialias line */
glEnable( GL_LINE_SMOOTH );
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glLineWidth(2.0);
@@ -1039,7 +1031,6 @@ void ui_draw_panel(uiBlock *block)
uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
// blend now for panels in 3d window, test...
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable(GL_BLEND);
BIF_ThemeColor4(TH_PANEL);
@@ -1070,7 +1061,6 @@ void ui_draw_panel(uiBlock *block)
uiSetRoundBox(3);
uiRoundBox(block->minx, block->maxy, block->maxx, block->maxy+PNL_HEADER, 8);
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable(GL_BLEND);
BIF_ThemeColor4(TH_PANEL);
glRectf(block->minx, block->miny, block->maxx, block->maxy);
@@ -1100,7 +1090,6 @@ void ui_draw_panel(uiBlock *block)
/* and a soft shadow-line for now */
/*
glEnable( GL_BLEND );
- glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glColor4ub(0, 0, 0, 50);
fdrawline(block->maxx, block->miny, block->maxx, block->maxy+PNL_HEADER/2);
fdrawline(block->minx, block->miny, block->maxx, block->miny);
diff --git a/source/blender/src/outliner.c b/source/blender/src/outliner.c
index 2eb71014e0f..1f6c94cf5b0 100644
--- a/source/blender/src/outliner.c
+++ b/source/blender/src/outliner.c
@@ -1033,8 +1033,9 @@ static int tree_element_active_material(SpaceOops *soops, TreeElement *te, int s
}
if(set) {
extern_set_butspace(F5KEY); // force shading buttons
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_MA);
allqueue(REDRAWBUTSSHADING, 1);
+ allqueue(REDRAWNODE, 0);
allqueue(REDRAWOOPS, 0);
allqueue(REDRAWIPO, 0);
}
@@ -1128,7 +1129,7 @@ static int tree_element_active_lamp(SpaceOops *soops, TreeElement *te, int set)
if(set) {
extern_set_butspace(F5KEY);
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_LA);
allqueue(REDRAWBUTSSHADING, 1);
allqueue(REDRAWOOPS, 0);
allqueue(REDRAWIPO, 0);
diff --git a/source/blender/src/previewrender.c b/source/blender/src/previewrender.c
index 650f4c87a58..5d58d19bad2 100644
--- a/source/blender/src/previewrender.c
+++ b/source/blender/src/previewrender.c
@@ -47,7 +47,6 @@
#endif
#include "MEM_guardedalloc.h"
#include "BLI_arithb.h"
-#include "BKE_utildefines.h"
#include "MTC_matrixops.h"
@@ -60,6 +59,7 @@
#include "DNA_camera_types.h"
#include "DNA_image_types.h"
#include "DNA_material_types.h"
+#include "DNA_node_types.h"
#include "DNA_object_types.h"
#include "DNA_lamp_types.h"
#include "DNA_space_types.h"
@@ -71,13 +71,16 @@
#include "BKE_icons.h"
#include "BKE_texture.h"
#include "BKE_material.h"
+#include "BKE_node.h"
#include "BKE_world.h"
#include "BKE_texture.h"
+#include "BKE_utildefines.h"
#include "IMB_imbuf.h"
#include "IMB_imbuf_types.h"
#include "BSE_headerbuttons.h"
+#include "BSE_node.h"
#include "BIF_gl.h"
#include "BIF_screen.h"
@@ -101,8 +104,6 @@
#define PR_XMAX 200
#define PR_YMAX 195
-#define PREVIEW_RENDERSIZE 141;
-
#define PR_FACY (PR_YMAX-PR_YMIN-4)/(PR_RECTY)
static rctf prerect;
@@ -111,7 +112,7 @@ static float pr_facx, pr_facy;
/* implementation */
-static short snijpunt(float *v1, float *v2, float *v3, float *rtlabda, float *ray1, float *ray2)
+static short intersect(float *v1, float *v2, float *v3, float *rtlabda, float *ray1, float *ray2)
{
float x0,x1,x2,t00,t01,t02,t10,t11,t12,t20,t21,t22;
float m0,m1,m2,deeldet,det1,det2,det3;
@@ -192,13 +193,13 @@ static int ray_previewrender(int x, int y, float *vec, float *vn, short pr_rec
minlabda= 1.0f;
for(a=0; a<totface; a++) {
- if(snijpunt( rcubev[rcubi[a][0]], rcubev[rcubi[a][1]], rcubev[rcubi[a][2]], &labda, ray1, ray2)) {
+ if(intersect( rcubev[rcubi[a][0]], rcubev[rcubi[a][1]], rcubev[rcubi[a][2]], &labda, ray1, ray2)) {
if( labda < minlabda) {
minlabda= labda;
hitface= a;
}
}
- if(snijpunt( rcubev[rcubi[a][0]], rcubev[rcubi[a][2]], rcubev[rcubi[a][3]], &labda, ray1, ray2)) {
+ if(intersect( rcubev[rcubi[a][0]], rcubev[rcubi[a][2]], rcubev[rcubi[a][3]], &labda, ray1, ray2)) {
if( labda < minlabda) {
minlabda= labda;
hitface= a;
@@ -219,14 +220,13 @@ static int ray_previewrender(int x, int y, float *vec, float *vn, short pr_rec
return 0;
}
-
static unsigned int previewback(int type, int x, int y)
{
unsigned int col;
char* pcol;
/* checkerboard, for later
- x+= PR_RECTX/2;
+ x+= PR_RECTX/2;
y+= PR_RECTX/2;
if( ((x/24) + (y/24)) & 1) return 0x40404040;
else return 0xa0a0a0a0;
@@ -246,7 +246,22 @@ static unsigned int previewback(int type, int x, int y)
return col;
}
-void BIF_set_previewrect(int win, int xmin, int ymin, int xmax, int ymax, short pr_rectx, short pr_recty)
+static float previewbackf(int type, int x, int y)
+{
+ float col;
+
+ if(type & MA_DARK) {
+ if(abs(x)>abs(y)) col= 0.0f;
+ else col= 0.25f;
+ }
+ else {
+ if(abs(x)>abs(y)) col= 0.25f;
+ else col= 0.625f;
+ }
+ return col;
+}
+
+void set_previewrect(int win, int xmin, int ymin, int xmax, int ymax, short pr_rectx, short pr_recty)
{
float pr_sizex, pr_sizey;
@@ -279,7 +294,7 @@ void BIF_set_previewrect(int win, int xmin, int ymin, int xmax, int ymax, short
}
-void BIF_end_previewrect(void)
+static void end_previewrect(void)
{
glMatrixMode(GL_PROJECTION);
glPopMatrix();
@@ -301,11 +316,11 @@ static void display_pr_scanline(unsigned int *rect, int recty, short pr_rectx)
if( (recty & 3)==3) {
if(recty == 3) {
- glaDrawPixelsSafe(prerect.xmin, prerect.ymin, pr_rectx, 4, rect);
+ glaDrawPixelsSafe(prerect.xmin, prerect.ymin, pr_rectx, 4, GL_UNSIGNED_BYTE, rect);
}
else {
rect+= (recty-4)*pr_rectx;
- glaDrawPixelsSafe(prerect.xmin, prerect.ymin + (((float)recty-4.0)*pr_facy), pr_rectx, 5, rect);
+ glaDrawPixelsSafe(prerect.xmin, prerect.ymin + (((float)recty-4.0)*pr_facy), pr_rectx, 5, GL_UNSIGNED_BYTE, rect);
}
}
}
@@ -342,47 +357,43 @@ static void draw_tex_crop(Tex *tex)
}
-void BIF_all_preview_changed(void)
+void BIF_preview_changed(short id_code)
{
ScrArea *sa;
- SpaceButs *sbuts;
- sa= G.curscreen->areabase.first;
- while(sa) {
+ for(sa= G.curscreen->areabase.first; sa; sa= sa->next) {
if(sa->spacetype==SPACE_BUTS) {
- sbuts= sa->spacedata.first;
- if (sbuts->ri) sbuts->ri->cury= 0;
- addafterqueue(sa->win, RENDERPREVIEW, 1);
- }
- sa= sa->next;
- }
-}
-
-/* signal all previews in current screen of current type */
-void BIF_preview_changed(SpaceButs *sbuts)
-{
-
- /* can be called when no buttonswindow visible */
- if(sbuts) {
- ScrArea *sa;
- short mainb= sbuts->mainb;
- short tab= sbuts->tab[mainb];
-
- sa= G.curscreen->areabase.first;
- while(sa) {
- if(sa->spacetype==SPACE_BUTS) {
- sbuts= sa->spacedata.first;
- if(sbuts->mainb==mainb && sbuts->tab[mainb]==tab) {
+ SpaceButs *sbuts= sa->spacedata.first;
+ if(sbuts->mainb==CONTEXT_SHADING) {
+ int tab= sbuts->tab[CONTEXT_SHADING];
+ if(tab==TAB_SHADING_MAT && (id_code==ID_MA || id_code==ID_TE)) {
+ if (sbuts->ri) sbuts->ri->cury= 0;
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
+ }
+ else if(tab==TAB_SHADING_TEX && (id_code==ID_TE)) {
+ if (sbuts->ri) sbuts->ri->cury= 0;
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
+ }
+ else if(tab==TAB_SHADING_LAMP && (id_code==ID_LA || id_code==ID_TE)) {
if (sbuts->ri) sbuts->ri->cury= 0;
- addafterqueue(sbuts->area->win, RENDERPREVIEW, 1);
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
}
+ else if(tab==TAB_SHADING_WORLD && (id_code==ID_WO || id_code==ID_TE)) {
+ if (sbuts->ri) sbuts->ri->cury= 0;
+ addafterqueue(sa->win, RENDERPREVIEW, 1);
+ }
+ }
+ }
+ else if(sa->spacetype==SPACE_NODE) {
+ SpaceNode *snode= sa->spacedata.first;
+ if(snode->treetype==NTREE_SHADER && (id_code==ID_MA || id_code==ID_TE)) {
+ snode_tag_dirty(snode);
}
- sa= sa->next;
}
}
}
-void BIF_previewdraw_render(struct RenderInfo* ri, ScrArea* area)
+static void previewdraw_render(struct RenderInfo* ri, ScrArea* area)
{
int y;
@@ -395,28 +406,6 @@ void BIF_previewdraw_render(struct RenderInfo* ri, ScrArea* area)
}
}
-/* is panel callback, supposed to be called with correct panel offset matrix */
-void BIF_previewdraw(void)
-{
- SpaceButs *sbuts= curarea->spacedata.first;
-
- if (!sbuts->ri) {
- sbuts->ri= MEM_callocN(sizeof(RenderInfo), "butsrenderinfo");
- sbuts->ri->cury = 0;
- sbuts->ri->rect = 0;
- sbuts->ri->pr_rectx = PREVIEW_RENDERSIZE;
- sbuts->ri->pr_recty = PREVIEW_RENDERSIZE;
- }
-
- if (sbuts->ri->rect==0) BIF_preview_changed(sbuts);
- else {
- BIF_set_previewrect(sbuts->area->win, PR_XMIN, PR_YMIN, PR_XMAX, PR_YMAX, sbuts->ri->pr_rectx, sbuts->ri->pr_recty);
- BIF_previewdraw_render(sbuts->ri, sbuts->area);
- BIF_end_previewrect();
- }
- if(sbuts->ri->cury==0) BIF_preview_changed(sbuts);
-
-}
static void sky_preview_pixel(float lens, int x, int y, char *rect, short pr_rectx, short pr_recty)
{
@@ -479,16 +468,16 @@ static void sky_preview_pixel(float lens, int x, int y, char *rect, short pr_rec
the preview, because this only works for the
current selected lamp.
*/
- static LampRen* create_preview_render_lamp(Lamp* la)
- {
+static LampRen* create_preview_render_lamp(Lamp* la)
+{
LampRen *lar;
int c;
-
+
lar= (LampRen *)MEM_callocN(sizeof(LampRen),"lampren");
-
+
MTC_Mat3One(lar->mat);
MTC_Mat3One(lar->imat);
-
+
lar->type= la->type;
lar->mode= la->mode;
lar->energy= la->energy;
@@ -500,25 +489,25 @@ static void sky_preview_pixel(float lens, int x, int y, char *rect, short pr_rec
lar->dist= la->dist;
lar->ld1= la->att1;
lar->ld2= la->att2;
-
+
/* exceptions: */
lar->spottexfac= 1.0;
lar->spotsi= cos( M_PI/3.0 );
lar->spotbl= (1.0-lar->spotsi)*la->spotblend;
MTC_Mat3One(lar->imat);
-
+
if(lar->type==LA_SPOT) {
if(lar->mode & LA_ONLYSHADOW) {
if((lar->mode & (LA_SHAD|LA_SHAD_RAY))==0) lar->mode -= LA_ONLYSHADOW;
}
}
memcpy(lar->mtex, la->mtex, MAX_MTEX*sizeof(void *));
-
+
for(c=0; c<MAX_MTEX; c++) {
if(la->mtex[c] && la->mtex[c]->tex) {
lar->mode |= LA_TEXTURE;
-
+
if(R.flag & R_RENDERING) {
if(R.osa) {
if(la->mtex[c]->tex->type==TEX_IMAGE) lar->mode |= LA_OSATEX;
@@ -526,7 +515,7 @@ static void sky_preview_pixel(float lens, int x, int y, char *rect, short pr_rec
}
}
}
-
+
return lar;
}
@@ -670,13 +659,13 @@ static void halo_preview_pixel(HaloRen *har, int startx, int endx, int y, char *
if(dist<har->radsq) {
RE_shadehalo(har, front, colf, 0, dist, xn, yn, har->flarec);
RE_addalphaAddfac(rect, front, har->add);
- rect[3] = 0xFF;
+ rect[3] = 0xFF; /* makes icon display all pixels */
}
rect+= 4;
}
}
-static void previewflare(RenderInfo *ri, HaloRen *har, short pr_rectx, short pr_recty, int doDraw)
+static void previewflare(RenderInfo *ri, HaloRen *har, short pr_rectx, short pr_recty, int pr_method)
{
float ycor;
unsigned int *rectot;
@@ -707,8 +696,8 @@ static void previewflare(RenderInfo *ri, HaloRen *har, short pr_rectx, short pr_
// not sure why, either waitcursor or renderflare screws up (disabled then)
//areawinset(curarea->win);
- /* draw can just be this way, all settings are OK */
- if (doDraw) {
+ /* draw can just be called this way, all settings are OK */
+ if (pr_method==PR_DRAW_RENDER) {
for (y=0; y<pr_recty; y++) {
display_pr_scanline(ri->rect, y, pr_rectx);
}
@@ -851,7 +840,7 @@ static void refraction_prv(int *x, int *y, float *n, float index)
*y= (int)(len*(index*view[1] + fac*n[1]));
}
-static void shade_lamp_loop_preview(ShadeInput *shi, ShadeResult *shr, int pr_lamp)
+static void shade_lamp_loop_preview(ShadeInput *shi, ShadeResult *shr)
{
extern float fresnel_fac(float *view, float *vn, float ior, float fac);
Material *mat= shi->mat;
@@ -889,9 +878,19 @@ static void shade_lamp_loop_preview(ShadeInput *shi, ShadeResult *shr, int pr_la
}
else {
+ if(mat->texco & TEXCO_REFL) {
+ inp= -2.0*(shi->vn[0]*shi->view[0]+shi->vn[1]*shi->view[1]+shi->vn[2]*shi->view[2]);
+ shi->ref[0]= (shi->view[0]+inp*shi->vn[0]);
+ shi->ref[1]= (shi->view[1]+inp*shi->vn[1]);
+ shi->ref[2]= (shi->view[2]+inp*shi->vn[2]);
+ /* normals in render are pointing different... rhm */
+ if(shi->pr_type==MA_SPHERE)
+ shi->ref[1]= -shi->ref[1];
+ }
+
for(a=0; a<2; a++) {
- if((pr_lamp & (1<<a))==0) continue;
+ if((mat->pr_lamp & (1<<a))==0) continue;
if(a==0) la= pr1_lamp;
else la= pr2_lamp;
@@ -1000,6 +999,8 @@ static void shade_lamp_loop_preview(ShadeInput *shi, ShadeResult *shr, int pr_la
shi->refcol[3]= shi->refcol[0]*0.8f*div;
}
}
+ else
+ shi->refcol[0]= 0.0f;
shr->diff[0]+= shi->ambr;
shr->diff[1]+= shi->ambg;
@@ -1025,14 +1026,13 @@ static void shade_lamp_loop_preview(ShadeInput *shi, ShadeResult *shr, int pr_la
}
}
-static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char *rect, int smooth, short pr_rectx, short pr_recty)
+static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char *rect, short pr_rectx, short pr_recty)
{
Material *mat;
MaterialLayer *ml;
ShadeResult shr;
- float v1, inp;
- float eul[3], tmat[3][3], imat[3][3], col[3];
- char tracol;
+ float v1;
+ float eul[3], tmat[3][3], imat[3][3], col[4];
mat= shi->mat;
@@ -1042,8 +1042,8 @@ static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char
shi->view[2]= 1.0f;
Normalise(shi->view);
- shi->xs= (float)x;
- shi->ys= (float)y;
+ shi->xs= x + pr_rectx/2;
+ shi->ys= y + pr_recty/2;
shi->refcol[0]= shi->refcol[1]= shi->refcol[2]= shi->refcol[3]= 0.0f;
VECCOPY(shi->co, vec);
@@ -1092,22 +1092,10 @@ static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char
shi->orn[1]= shi->vn[1];
shi->orn[2]= shi->vn[2];
}
- if(mat->texco & TEXCO_REFL) {
-
- inp= -2.0*(shi->vn[0]*shi->view[0]+shi->vn[1]*shi->view[1]+shi->vn[2]*shi->view[2]);
- shi->ref[0]= (shi->view[0]+inp*shi->vn[0]);
- shi->ref[1]= (shi->view[1]+inp*shi->vn[1]);
- shi->ref[2]= (shi->view[2]+inp*shi->vn[2]);
- }
/* Clear displase vec for preview */
shi->displace[0]= shi->displace[1]= shi->displace[2]= 0.0;
- if(mat->texco & TEXCO_REFL) {
- /* normals in render are pointing different... rhm */
- if(smooth) shi->ref[1]= -shi->ref[1];
- }
-
if(mat->pr_type==MA_CUBE) {
/* rotate normal back for normals texture */
SWAP(float, shi->vn[0], shi->vn[1]);
@@ -1127,24 +1115,29 @@ static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char
/* ------ main shading loop with material layers */
VECCOPY(shi->vno, shi->vn);
if(mat->ml_flag & ML_RENDER)
- shade_lamp_loop_preview(shi, &shr, mat->pr_lamp);
+ shade_lamp_loop_preview(shi, &shr);
else {
memset(&shr, 0, sizeof(ShadeResult));
shr.alpha= 1.0f;
}
- for(ml= mat->layers.first; ml; ml= ml->next) {
- if(ml->mat && (ml->flag & ML_RENDER)) {
- ShadeResult shrlay;
-
- shi->mat= ml->mat;
- shi->layerfac= ml->blendfac;
- VECCOPY(shi->vn, shi->vno);
- if(ml->flag & ML_NEG_NORMAL)
- VecMulf(shi->vn, -1.0);
-
- shade_lamp_loop_preview(shi, &shrlay, mat->pr_lamp);
- matlayer_blend(ml, shi->layerfac, &shr, &shrlay);
+ if(mat->nodetree && mat->use_nodes) {
+ ntreeShaderExecTree(mat->nodetree, shi, &shr);
+ }
+ else {
+ for(ml= mat->layers.first; ml; ml= ml->next) {
+ if(ml->mat && (ml->flag & ML_RENDER)) {
+ ShadeResult shrlay;
+
+ shi->mat= ml->mat;
+ shi->layerfac= ml->blendfac;
+ VECCOPY(shi->vn, shi->vno);
+ if(ml->flag & ML_NEG_NORMAL)
+ VecMulf(shi->vn, -1.0);
+
+ shade_lamp_loop_preview(shi, &shrlay);
+ matlayer_blend(ml, shi->layerfac, &shr, &shrlay);
+ }
}
}
@@ -1160,34 +1153,40 @@ static void shade_preview_pixel(ShadeInput *shi, float *vec, int x, int y, char
if(shr.diff[2]<0.0f) shr.diff[2]= 0.0f;
VECADD(col, shr.diff, shr.spec);
- if(col[0]<=0.0f) rect[0]= 0; else if(col[0]>=1.0f) rect[0]= 255; else rect[0]= (char)(255.0*col[0]);
- if(col[1]<=0.0f) rect[1]= 0; else if(col[1]>=1.0f) rect[1]= 255; else rect[1]= (char)(255.0*col[1]);
- if(col[2]<=0.0f) rect[2]= 0; else if(col[2]>=1.0f) rect[2]= 255; else rect[2]= (char)(255.0*col[2]);
+ col[3]= shr.alpha;
- if(shr.alpha!=1.0f) {
+ /* handle backdrop now */
+
+ if(col[3]!=1.0f) {
+ float back, backm;
+
+ /* distorts x and y */
if(mat->mode & MA_RAYTRANSP) {
refraction_prv(&x, &y, shi->vn, shi->ang);
}
- tracol= previewback(mat->pr_back, x, y) & 255;
-
- tracol= (1.0f-shr.alpha)*tracol;
+ back= previewbackf(mat->pr_back, x, y);
+ backm= (1.0f-shr.alpha)*back;
if((mat->mode & MA_RAYTRANSP) && mat->filter!=0.0) {
float fr= 1.0f+ mat->filter*(shr.diff[0]-1.0f);
- rect[0]= fr*tracol+ (rect[0]*shr.alpha) ;
- fr= 1.0f+ mat->filter*(shr.diff[0]-1.0f);
- rect[1]= fr*tracol+ (rect[1]*shr.alpha) ;
- fr= 1.0f+ mat->filter*(shr.diff[0]-1.0f);
- rect[2]= fr*tracol+ (rect[2]*shr.alpha) ;
+ col[0]= fr*backm+ (col[3]*col[0]);
+ fr= 1.0f+ mat->filter*(shr.diff[1]-1.0f);
+ col[1]= fr*backm+ (col[3]*col[1]);
+ fr= 1.0f+ mat->filter*(shr.diff[2]-1.0f);
+ col[2]= fr*backm+ (col[3]*col[2]);
}
else {
- rect[0]= tracol+ (rect[0]*shr.alpha) ;
- rect[1]= tracol+ (rect[1]*shr.alpha) ;
- rect[2]= tracol+ (rect[2]*shr.alpha) ;
+ col[0]= backm + (col[3]*col[0]);
+ col[1]= backm + (col[3]*col[1]);
+ col[2]= backm + (col[3]*col[2]);
}
}
- rect[3] = 0xFF;
+
+ if(col[0]<=0.0f) rect[0]= 0; else if(col[0]>=1.0f) rect[0]= 255; else rect[0]= (char)(255.0f*col[0]);
+ if(col[1]<=0.0f) rect[1]= 0; else if(col[1]>=1.0f) rect[1]= 255; else rect[1]= (char)(255.0f*col[1]);
+ if(col[2]<=0.0f) rect[2]= 0; else if(col[2]>=1.0f) rect[2]= 255; else rect[2]= (char)(255.0f*col[2]);
+ if(col[3]<=0.0f) rect[3]= 0; else if(col[3]>=1.0f) rect[3]= 255; else rect[3]= (char)(255.0f*col[3]);
}
static void preview_init_render_textures(MTex **mtex)
@@ -1210,65 +1209,8 @@ static void preview_init_render_textures(MTex **mtex)
}
-void BIF_previewrender_buts(SpaceButs *sbuts)
-{
- uiBlock *block;
- struct ID* id = 0;
- struct ID* idfrom = 0;
- struct ID* idshow = 0;
- Object *ob;
-
- if (!sbuts->ri) return;
-
- /* we safely assume curarea has panel "preview" */
- /* quick hack for now, later on preview should become uiBlock itself */
-
- block= uiFindOpenPanelBlockName(&curarea->uiblocks, "Preview");
- if(block==NULL) return;
-
- ob= ((G.scene->basact)? (G.scene->basact)->object: 0);
-
- /* we cant trust this global lockpoin.. for example with headerless window */
- buttons_active_id(&id, &idfrom);
- G.buts->lockpoin= id;
-
- if(sbuts->mainb==CONTEXT_SHADING) {
- int tab= sbuts->tab[CONTEXT_SHADING];
-
- if(tab==TAB_SHADING_MAT)
- idshow = sbuts->lockpoin;
- else if(tab==TAB_SHADING_TEX)
- idshow = sbuts->lockpoin;
- else if(tab==TAB_SHADING_LAMP) {
- if(ob && ob->type==OB_LAMP) idshow= ob->data;
- }
- else if(tab==TAB_SHADING_WORLD)
- idshow = sbuts->lockpoin;
- }
- else if(sbuts->mainb==CONTEXT_OBJECT) {
- if(ob && ob->type==OB_LAMP) idshow = ob->data;
- }
-
- if (idshow) {
- BKE_icon_changed(BKE_icon_getid(idshow));
- uiPanelPush(block);
- BIF_set_previewrect(sbuts->area->win, PR_XMIN, PR_YMIN, PR_XMAX, PR_YMAX, sbuts->ri->pr_rectx, sbuts->ri->pr_recty); // uses UImat
- BIF_previewrender(idshow, sbuts->ri, sbuts->area, 1);
- uiPanelPop(block);
- BIF_end_previewrect();
- }
- else {
- /* no active block to draw. But we do draw black if possible */
- if(sbuts->ri->rect) {
- memset(sbuts->ri->rect, 0, sizeof(int)*sbuts->ri->pr_rectx*sbuts->ri->pr_recty);
- sbuts->ri->cury= sbuts->ri->pr_recty;
- addqueue(curarea->win, REDRAW, 1);
- }
- return;
- }
-}
-
-void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *area, int doDraw)
+/* main previewrender loop */
+void BIF_previewrender(struct ID *id, struct RenderInfo *ri, struct ScrArea *area, int pr_method)
{
static double lasttime= 0;
Material *mat= NULL;
@@ -1303,9 +1245,9 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
}
har.flarec= 0; /* below is a test for postrender flare */
-
- if(doDraw && qtest()) {
+ /* no event escape for icon render */
+ if(pr_method!=PR_ICON_RENDER && qtest()) {
addafterqueue(curarea->win, RENDERPREVIEW, 1);
return;
}
@@ -1331,11 +1273,33 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
mat->texco |= ml->mat->texco;
}
}
-
+ if(mat->nodetree && mat->use_nodes) {
+ bNode *node;
+ for(node=mat->nodetree->nodes.first; node; node= node->next) {
+ if(node->id && GS(node->id->name)==ID_MA) {
+ Material *ma= (Material *)node->id;
+ init_render_material(ma);
+ preview_init_render_textures(ma->mtex);
+ mat->texco |= ma->texco;
+ }
+ }
+ /* signal to node editor to store previews or not */
+ if(pr_method==PR_ICON_RENDER) {
+ ntreeBeginExecTree(mat->nodetree, 0, 0);
+ shi.do_preview= 0;
+ }
+ else {
+ ntreeBeginExecTree(mat->nodetree, ri->pr_rectx, ri->pr_recty);
+ shi.do_preview= 1;
+ }
+ }
shi.vlr= NULL;
shi.mat= mat;
-
+ shi.pr_type= mat->pr_type;
+
if(mat->mode & MA_HALO) init_previewhalo(&har, mat, ri->pr_rectx, ri->pr_recty);
+
+ set_node_shader_lamp_loop(shade_lamp_loop_preview);
}
else if(tex) {
@@ -1384,39 +1348,18 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
preview_init_render_textures(wrld->mtex);
}
- if (doDraw) {
- /* BIF_set_previewrect(area->win, PR_XMIN, PR_YMIN, PR_XMAX, PR_YMAX, ri->pr_rectx, ri->pr_recty); // uses UImat */
- }
-
if(ri->rect==NULL) {
ri->rect= MEM_callocN(sizeof(int)*ri->pr_rectx*ri->pr_recty, "butsrect");
-
- /* built in emboss */
- if (doDraw) {
- rect= ri->rect;
- for(y=0; y<ri->pr_recty; y++, rect++) *rect= 0xFFFFFFFF;
-
- rect= ri->rect + ri->pr_rectx-1;
- for(y=0; y<ri->pr_recty; y++, rect+=ri->pr_rectx) *rect= 0xFFFFFFFF;
- }
}
starty= -ri->pr_recty/2;
endy= starty+ri->pr_recty;
starty+= ri->cury;
- if (doDraw) {
- /* offset +1 for emboss */
- startx= -ri->pr_rectx/2 +1;
- endx= startx+ri->pr_rectx -2;
- }
- else {
- /* offset +1 for emboss */
- startx= -ri->pr_rectx/2;
- endx= startx+ri->pr_rectx-1;
- }
+ startx= -ri->pr_rectx/2;
+ endx= startx+ri->pr_rectx;
- radsq= (ri->pr_rectx/2-1)*(ri->pr_recty/2-1); /* -1 to make sure sphere fits into preview rect completely */
+ radsq= (ri->pr_rectx/2)*(ri->pr_recty/2);
if(mat) {
if(mat->pr_type==MA_SPHERE) {
@@ -1429,24 +1372,23 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
}
}
- /* here it starts! */
- if (doDraw) glDrawBuffer(GL_FRONT);
+ if (pr_method==PR_DRAW_RENDER)
+ glDrawBuffer(GL_FRONT);
+ /* here it starts! */
for(y=starty; y<endy; y++) {
- rect= ri->rect + 1 + ri->pr_rectx*ri->cury;
+ rect= ri->rect + ri->pr_rectx*ri->cury;
- if(y== -ri->pr_recty/2 || y==endy-1); /* emboss */
- else if(mat) {
+ if(mat) {
if(mat->mode & MA_HALO) {
for(x=startx; x<endx; x++, rect++) {
rect[0]= previewback(mat->pr_back, x, y);
- rect[0] |= 0xFF000000;
}
if(har.flarec) {
- if(y==endy-2) previewflare(ri, &har, ri->pr_rectx, ri->pr_recty, doDraw);
+ if(y==endy-2) previewflare(ri, &har, ri->pr_rectx, ri->pr_recty, pr_method);
}
else {
halo_preview_pixel(&har, startx, endx, y, (char *) (rect-ri->pr_rectx), ri->pr_rectx);
@@ -1476,19 +1418,25 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
Normalise(shi.tang);
}
- shade_preview_pixel(&shi, vec, x, y, (char *)rect, 1, ri->pr_rectx, ri->pr_recty);
+ shade_preview_pixel(&shi, vec, x, y, (char *)rect, ri->pr_rectx, ri->pr_recty);
}
else {
rect[0]= previewback(mat->pr_back, x, y);
+
+ if(pr_method!=PR_ICON_RENDER && mat->nodetree && mat->use_nodes)
+ ntreeClearPixelTree(mat->nodetree, x+ri->pr_rectx/2, y+ri->pr_recty/2);
}
}
else if(mat->pr_type==MA_CUBE) {
if( ray_previewrender(x, y, vec, shi.vn, ri->pr_rectx, ri->pr_recty) ) {
- shade_preview_pixel(&shi, vec, x, y, (char *)rect, 0, ri->pr_rectx, ri->pr_recty);
+ shade_preview_pixel(&shi, vec, x, y, (char *)rect, ri->pr_rectx, ri->pr_recty);
}
else {
rect[0]= previewback(mat->pr_back, x, y);
+
+ if(pr_method!=PR_ICON_RENDER && mat->nodetree && mat->use_nodes)
+ ntreeClearPixelTree(mat->nodetree, x+ri->pr_rectx/2, y+ri->pr_recty/2);
}
}
else {
@@ -1499,7 +1447,7 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
shi.vn[0]= shi.vn[1]= 0.0f;
shi.vn[2]= 1.0f;
- shade_preview_pixel(&shi, vec, x, y, (char *)rect, 0, ri->pr_rectx, ri->pr_recty);
+ shade_preview_pixel(&shi, vec, x, y, (char *)rect, ri->pr_rectx, ri->pr_recty);
}
}
}
@@ -1520,7 +1468,7 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
}
}
- if (doDraw) {
+ if (pr_method!=PR_ICON_RENDER) {
if(y<endy-2) {
if(qtest()) {
addafterqueue(curarea->win, RENDERPREVIEW, 1);
@@ -1538,15 +1486,13 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
ri->cury++;
}
- if (doDraw) {
- /* BIF_end_previewrect(); */
-
+ if (pr_method==PR_DRAW_RENDER) {
if(ri->cury>=ri->pr_recty && tex)
- draw_tex_crop((Tex*)id);
+ draw_tex_crop((Tex*)id);
glDrawBuffer(GL_BACK);
/* draw again for clean swapbufers */
- BIF_previewdraw_render(ri, area);
+ previewdraw_render(ri, area);
}
if(lar) {
@@ -1556,59 +1502,99 @@ void BIF_previewrender(struct ID* id, struct RenderInfo *ri, struct ScrArea *are
R.lights.first= R.lights.last= NULL;
*/
}
+
+ if(mat && mat->nodetree && mat->use_nodes) {
+ ntreeEndExecTree(mat->nodetree);
+ if(ri->cury>=ri->pr_recty)
+ allqueue(REDRAWNODE, 0);
+ }
}
-/* create single icon from jpg, png etc. */
-void BIF_calcpreview_image(Image* img, RenderInfo* ri, unsigned int w, unsigned int h)
+void BIF_previewrender_buts(SpaceButs *sbuts)
{
- struct ImBuf *ima;
- struct ImBuf *imb;
- short ex, ey, dx, dy;
- float scaledx, scaledy;
- int pr_size = w*h*sizeof(unsigned int);
-
- if (!img)
- return;
-
- if (!ri->rect) {
- ri->rect= MEM_callocN(sizeof(int)*ri->pr_rectx*ri->pr_recty, "butsrect");
- memset(ri->rect, 0xFF, w*h*sizeof(unsigned int));
+ uiBlock *block;
+ struct ID* id = 0;
+ struct ID* idfrom = 0;
+ struct ID* idshow = 0;
+ Object *ob;
+
+ if (!sbuts->ri) return;
+
+ /* we safely assume curarea has panel "preview" */
+ /* quick hack for now, later on preview should become uiBlock itself */
+
+ block= uiFindOpenPanelBlockName(&curarea->uiblocks, "Preview");
+ if(block==NULL) return;
+
+ ob= ((G.scene->basact)? (G.scene->basact)->object: 0);
+
+ /* we cant trust this global lockpoin.. for example with headerless window */
+ buttons_active_id(&id, &idfrom);
+ G.buts->lockpoin= id;
+
+ if(sbuts->mainb==CONTEXT_SHADING) {
+ int tab= sbuts->tab[CONTEXT_SHADING];
+
+ if(tab==TAB_SHADING_MAT)
+ idshow = sbuts->lockpoin;
+ else if(tab==TAB_SHADING_TEX)
+ idshow = sbuts->lockpoin;
+ else if(tab==TAB_SHADING_LAMP) {
+ if(ob && ob->type==OB_LAMP) idshow= ob->data;
+ }
+ else if(tab==TAB_SHADING_WORLD)
+ idshow = sbuts->lockpoin;
}
-
- if(img->ibuf==0) {
- load_image(img, IB_rect, G.sce, G.scene->r.cfra);
+ else if(sbuts->mainb==CONTEXT_OBJECT) {
+ if(ob && ob->type==OB_LAMP) idshow = ob->data;
}
- ima = IMB_dupImBuf(img->ibuf);
-
- if (!ima)
+
+ if (idshow) {
+ BKE_icon_changed(BKE_icon_getid(idshow));
+ uiPanelPush(block);
+ set_previewrect(sbuts->area->win, PR_XMIN, PR_YMIN, PR_XMAX, PR_YMAX, sbuts->ri->pr_rectx, sbuts->ri->pr_recty); // uses UImat
+ BIF_previewrender(idshow, sbuts->ri, sbuts->area, PR_DRAW_RENDER);
+ uiPanelPop(block);
+ end_previewrect();
+ }
+ else {
+ /* no active block to draw. But we do draw black if possible */
+ if(sbuts->ri->rect) {
+ memset(sbuts->ri->rect, 0, sizeof(int)*sbuts->ri->pr_rectx*sbuts->ri->pr_recty);
+ sbuts->ri->cury= sbuts->ri->pr_recty;
+ addqueue(curarea->win, REDRAW, 1);
+ }
return;
+ }
+}
- if (ima->x > ima->y) {
- scaledx = (float)w;
- scaledy = ( (float)ima->y/(float)ima->x )*(float)w;
+/* is panel callback, supposed to be called with correct panel offset matrix */
+void BIF_previewdraw(void)
+{
+ SpaceButs *sbuts= curarea->spacedata.first;
+ short id_code= 0;
+
+ if(sbuts->lockpoin) {
+ ID *id= sbuts->lockpoin;
+ id_code= GS(id->name);
}
- else {
- scaledx = ( (float)ima->x/(float)ima->y )*(float)h;
- scaledy = (float)h;
+
+ if (!sbuts->ri) {
+ sbuts->ri= MEM_callocN(sizeof(RenderInfo), "butsrenderinfo");
+ sbuts->ri->cury = 0;
+ sbuts->ri->rect = NULL;
+ sbuts->ri->pr_rectx = PREVIEW_RENDERSIZE;
+ sbuts->ri->pr_recty = PREVIEW_RENDERSIZE;
}
-
- ex = (short)scaledx;
- ey = (short)scaledy;
- dx = (w - ex) / 2;
- dy = (h - ey) / 2;
+ if (sbuts->ri->rect==NULL) BIF_preview_changed(id_code);
+ else {
+ set_previewrect(sbuts->area->win, PR_XMIN, PR_YMIN, PR_XMAX, PR_YMAX, sbuts->ri->pr_rectx, sbuts->ri->pr_recty);
+ previewdraw_render(sbuts->ri, sbuts->area);
+ end_previewrect();
+ }
+ if(sbuts->ri->cury==0) BIF_preview_changed(id_code);
- IMB_scaleImBuf(ima, ex, ey);
-
- imb = IMB_allocImBuf(w, h, 32, IB_rect, 0);
-
- IMB_rectop(imb, 0, 0, 0, 0, 0, w, h, IMB_rectfill, 0x00000000);
-
- IMB_rectop(imb, ima, dx, dy, 0, 0, ex, ey, IMB_rectcpy, 0);
-
- IMB_freeImBuf(ima);
+}
- memcpy(ri->rect, imb->rect,pr_size);
- IMB_freeImBuf(imb);
-}
diff --git a/source/blender/src/renderwin.c b/source/blender/src/renderwin.c
index 637c018587d..ae6ffee5df5 100644
--- a/source/blender/src/renderwin.c
+++ b/source/blender/src/renderwin.c
@@ -329,16 +329,16 @@ static void renderwin_draw(RenderWin *rw, int just_clear)
char *rect= (char *)R.rectot;
glColorMask(1, 0, 0, 0);
- glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, rect+3);
+ glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, GL_UNSIGNED_BYTE, rect+3);
glColorMask(0, 1, 0, 0);
- glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, rect+2);
+ glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, GL_UNSIGNED_BYTE, rect+2);
glColorMask(0, 0, 1, 0);
- glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, rect+1);
+ glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, GL_UNSIGNED_BYTE, rect+1);
glColorMask(1, 1, 1, 1);
}
else {
- glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, R.rectot);
+ glaDrawPixelsSafe(disprect[0][0], disprect[0][1], R.rectx, R.recty, GL_UNSIGNED_BYTE, R.rectot);
}
glPixelZoom(1.0, 1.0);
}
@@ -743,7 +743,7 @@ static void renderwin_progress(RenderWin *rw, int start_y, int nlines, int rect_
glDrawBuffer(GL_FRONT);
glPixelZoom(rw->zoom, rw->zoom);
- glaDrawPixelsSafe(disprect[0][0], disprect[0][1] + start_y*rw->zoom, rect_w, nlines, &rect[start_y*rect_w*4]);
+ glaDrawPixelsSafe(disprect[0][0], disprect[0][1] + start_y*rw->zoom, rect_w, nlines, GL_UNSIGNED_BYTE, &rect[start_y*rect_w*4]);
glPixelZoom(1.0, 1.0);
glFlush();
glDrawBuffer(GL_BACK);
@@ -830,7 +830,7 @@ static void renderview_progress_display_cb(int y1, int y2, int w, int h, unsigne
sy= vb.ymin + facy*y1;
glPixelZoom(facx, facy);
- glaDrawPixelsSafe(sx, sy, w, nlines, rect+w*y1);
+ glaDrawPixelsSafe(sx, sy, w, nlines, GL_UNSIGNED_BYTE, rect+w*y1);
glPixelZoom(1.0, 1.0);
glFlush();
@@ -1090,7 +1090,7 @@ static void do_render(View3D *ogl_render_view3d, int anim, int force_dispwin)
/* after an envmap creation... */
if(R.flag & R_REDRAW_PRV) {
- BIF_all_preview_changed();
+ BIF_preview_changed(ID_TE);
}
allqueue(REDRAWBUTSSCENE, 0); // visualize fbuf for example
}
diff --git a/source/blender/src/resources.c b/source/blender/src/resources.c
index c206f12d01f..6049c34b31e 100644
--- a/source/blender/src/resources.c
+++ b/source/blender/src/resources.c
@@ -185,6 +185,9 @@ char *BIF_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
case SPACE_TIME:
ts= &btheme->ttime;
break;
+ case SPACE_NODE:
+ ts= &btheme->tnode;
+ break;
default:
ts= &btheme->tv3d;
break;
@@ -272,6 +275,17 @@ char *BIF_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid)
case TH_SYNTAX_N:
cp= ts->syntaxn; break;
+ case TH_NODE:
+ cp= ts->syntaxl; break;
+ case TH_NODE_IN_OUT:
+ cp= ts->syntaxn; break;
+ case TH_NODE_OPERATOR:
+ cp= ts->syntaxb; break;
+ case TH_NODE_GENERATOR:
+ cp= ts->syntaxv; break;
+ case TH_NODE_FREE:
+ cp= ts->syntaxc; break;
+
}
}
@@ -463,6 +477,15 @@ void BIF_InitTheme(void)
/* space time */
btheme->ttime= btheme->tsnd; // same as sound space
+
+ /* space node, re-uses syntax color storage */
+ btheme->tnode= btheme->tv3d;
+ SETCOL(btheme->tnode.syntaxl, 120, 120, 120, 255); /* TH_NODE */
+ SETCOL(btheme->tnode.syntaxn, 110, 110, 120, 255); /* in-out */
+ SETCOL(btheme->tnode.syntaxb, 140, 140, 140, 255); /* operator */
+ SETCOL(btheme->tnode.syntaxv, 120, 120, 120, 255); /* generator */
+ SETCOL(btheme->tnode.syntaxc, 120, 120, 120, 255); /* free */
+
}
char *BIF_ThemeColorsPup(int spacetype)
@@ -590,6 +613,14 @@ char *BIF_ThemeColorsPup(int spacetype)
else if(spacetype==SPACE_TIME) {
sprintf(str, "Grid %%x%d|", TH_GRID); strcat(cp, str);
}
+ else if(spacetype==SPACE_NODE) {
+ strcat(cp,"%l|");
+ sprintf(str, "Default Node %%x%d|", TH_NODE); strcat(cp, str);
+ sprintf(str, "In/Out Node %%x%d|", TH_NODE_IN_OUT); strcat(cp, str);
+ sprintf(str, "Operator Node %%x%d|", TH_NODE_OPERATOR); strcat(cp, str);
+ sprintf(str, "Generator Node %%x%d|", TH_NODE_GENERATOR); strcat(cp, str);
+// sprintf(str, " %%x%d|", TH_NODE_FREE); strcat(cp, str);
+ }
}
return cp;
}
diff --git a/source/blender/src/space.c b/source/blender/src/space.c
index 159d3e0e7ff..f94a459bfad 100644
--- a/source/blender/src/space.c
+++ b/source/blender/src/space.c
@@ -3362,11 +3362,12 @@ void extern_set_butspace(int fkey)
sbuts->mainb= CONTEXT_SHADING;
sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_MAT;
}
-
+ BIF_preview_changed(ID_TE);
}
else if(fkey==F6KEY) {
sbuts->mainb= CONTEXT_SHADING;
sbuts->tab[CONTEXT_SHADING]= TAB_SHADING_TEX;
+ BIF_preview_changed(ID_TE);
}
else if(fkey==F7KEY) {
/* if it's already in object context, cycle between tabs with the same key */
@@ -3403,7 +3404,6 @@ void extern_set_butspace(int fkey)
scrarea_queue_headredraw(sa);
scrarea_queue_winredraw(sa);
- BIF_preview_changed(sbuts);
}
/* ******************** SPACE: SEQUENCE ********************** */
@@ -4639,9 +4639,7 @@ void freespacelist(ListBase *lb)
free_soundspace((SpaceSound *)sl);
}
else if(sl->spacetype==SPACE_NODE) {
- SpaceNode *snode= (SpaceNode *)sl;
- if(snode->nodetree)
- nodeFreeTree(snode->nodetree);
+/* SpaceNode *snode= (SpaceNode *)sl; */
}
}
diff --git a/source/blender/src/usiblender.c b/source/blender/src/usiblender.c
index a6f51f92c2d..52d853cd984 100644
--- a/source/blender/src/usiblender.c
+++ b/source/blender/src/usiblender.c
@@ -96,10 +96,11 @@
#include "BIF_cursors.h"
#include "BSE_drawview.h"
-#include "BSE_headerbuttons.h"
+#include "BSE_edit.h"
#include "BSE_editipo.h"
#include "BSE_filesel.h"
-#include "BSE_edit.h"
+#include "BSE_headerbuttons.h"
+#include "BSE_node.h"
#include "BLO_readfile.h"
#include "BLO_writefile.h"
@@ -265,10 +266,23 @@ static void init_userdef_file(void)
255);
}
}
-
if(U.obcenter_dia==0) U.obcenter_dia= 6;
}
-
+ if (G.main->versionfile <= 240) {
+ bTheme *btheme;
+ for(btheme= U.themes.first; btheme; btheme= btheme->next) {
+ /* Node editor theme, check for alpha==0 is safe, then color was never set */
+ if(btheme->tnode.syntaxn[3]==0) {
+ /* re-uses syntax color storage */
+ btheme->tnode= btheme->tv3d;
+ SETCOL(btheme->tnode.syntaxl, 120, 120, 120, 255); /* TH_NODE */
+ SETCOL(btheme->tnode.syntaxn, 110, 110, 120, 255); /* in-out */
+ SETCOL(btheme->tnode.syntaxb, 140, 140, 140, 255); /* operator */
+ SETCOL(btheme->tnode.syntaxv, 120, 120, 120, 255); /* generator */
+ SETCOL(btheme->tnode.syntaxc, 120, 120, 120, 255); /* free */
+ }
+ }
+ }
if (U.undosteps==0) U.undosteps=32;
@@ -660,6 +674,7 @@ void BIF_init(void)
initbuttons();
InitCursorData();
sound_init_listener();
+ init_node_butfuncs();
BIF_read_homefile();
init_gl_stuff(); /* drawview.c, after homefile */