]> Pileus Git - ~andy/gtk/blobdiff - gdk/gdkrgb.c
Bug 556527 - The current page property is not passed to GtkPrintUnixDialog
[~andy/gtk] / gdk / gdkrgb.c
index 0e6c0a2eafcfb14b5ffd13f8c34e29ad57c58cb7..347ff59e0bc16ec8f2a48cf34c6cd814a0b40852 100644 (file)
@@ -2,16 +2,16 @@
  * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
  *
  * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
+ * modify it under the terms of the GNU Lesser General Public
  * License as published by the Free Software Foundation; either
  * version 2 of the License, or (at your option) any later version.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the GNU
- * Library General Public License for more details.
+ * Lesser General Public License for more details.
  *
- * You should have received a copy of the GNU Library General Public
+ * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the
  * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  * Boston, MA 02111-1307, USA.
    Raph Levien <raph@acm.org>
    */
 
-#include <math.h>
-#include <stdio.h>
-
-#define ENABLE_GRAYSCALE
-
-#ifdef GDK_RGB_STANDALONE
+/*
+ * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
+ * file for a list of people on the GTK+ Team.  See the ChangeLog
+ * files for a list of changes.  These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
+ */
 
-/* Compiling as a standalone module (i.e. with Gtk 1.0) */
-/* gtk/gtk.h is already included in gdkrgbstub.c */
 #include "config.h"
-#include <gdk/gdkprivate.h>
-
-#else
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
 
-/* Compiling as a part of Gtk 1.1 or later */
-#include "../config.h"
-#include "gdk.h"
-#include "gdkprivate.h"
+#define ENABLE_GRAYSCALE
 
-#endif
+#include "gdkinternals.h"      /* _gdk_windowing_get_bits_for_depth() */
 
 #include "gdkrgb.h"
+#include "gdkscreen.h"
+#include "gdkalias.h"
+#include <glib/gprintf.h>
 
-typedef struct _GdkRgbInfo   GdkRgbInfo;
+typedef struct _GdkRgbInfo     GdkRgbInfo;
+typedef struct _GdkRgbCmapInfo GdkRgbCmapInfo;
 
-typedef void (*GdkRgbConvFunc) (GdkImage *image,
+typedef void (*GdkRgbConvFunc) (GdkRgbInfo *image_info, GdkImage *image,
                                gint x0, gint y0,
                                gint width, gint height,
-                               guchar *buf, int rowstride,
+                               const guchar *buf, int rowstride,
                                gint x_align, gint y_align,
                                GdkRgbCmap *cmap);
 
-/* Some of these fields should go, as they're not being used at all.
-   Globals should generally migrate into here - it's very likely that
-   we'll want to run more than one GdkRgbInfo context at the same time
-   (i.e. some but not all windows have privately installed
-   colormaps). */
+#define STAGE_ROWSTRIDE (GDK_SCRATCH_IMAGE_WIDTH * 3)
 
+/* Some of these fields should go, as they're not being used at all. (?)
+ */
 struct _GdkRgbInfo
 {
   GdkVisual *visual;
   GdkColormap *cmap;
 
-  gulong *color_pixels;
-  gulong *gray_pixels;
-  gulong *reserved_pixels;
-
   guint nred_shades;
   guint ngreen_shades;
   guint nblue_shades;
@@ -87,6 +80,9 @@ struct _GdkRgbInfo
 
   gboolean dith_default;
 
+  gboolean bitmap; /* set true if in 1 bit per pixel mode */
+  GdkGC *own_gc;
+
   /* Convert functions */
   GdkRgbConvFunc conv;
   GdkRgbConvFunc conv_d;
@@ -99,28 +95,38 @@ struct _GdkRgbInfo
 
   GdkRgbConvFunc conv_indexed;
   GdkRgbConvFunc conv_indexed_d;
+
+  guchar *colorcube;
+  guchar *colorcube_d;
+
+  /* We need to track LUT's for pairs of GdkRgbInfo / GdkRgbCmap, so we
+   * keep a list of pointers to GdkRgbCmapInfo on both structures so we
+   * can remove as necessary when freeing a GdkRgbInfo or GdkRgbCmap
+   */
+  GSList *cmap_info_list;
 };
 
-static gboolean gdk_rgb_install_cmap = FALSE;
-static gint gdk_rgb_min_colors = 5 * 5 * 5;
-static gboolean gdk_rgb_verbose = FALSE;
+struct _GdkRgbCmapInfo
+{
+  GdkRgbInfo *image_info;
+  GdkRgbCmap *cmap;
+
+  guchar lut[256];             /* For 8-bit modes */
+};
 
-#define IMAGE_WIDTH 256
-#define STAGE_ROWSTRIDE (IMAGE_WIDTH * 3)
-#define IMAGE_HEIGHT 64
-#define N_IMAGES 6
+static GdkRgbCmapInfo *gdk_rgb_cmap_get_info (GdkRgbCmap *cmap, GdkRgbInfo *image_info);
 
-static GdkRgbInfo *image_info = NULL;
-static GdkImage *static_image[N_IMAGES];
-static gint static_image_idx;
+static const char gdk_rgb_key[] = "gdk-rgb-info";
+static GQuark gdk_rgb_quark = 0;
 
-static guchar *colorcube;
-static guchar *colorcube_d;
+static gboolean gdk_rgb_install_cmap = FALSE;
+static gint gdk_rgb_min_colors = 5 * 5 * 5;
+static gboolean gdk_rgb_verbose = FALSE;
 
 static gint
 gdk_rgb_cmap_fail (const char *msg, GdkColormap *cmap, gulong *pixels)
 {
-  gulong free_pixels[256];
+  GdkColor free_colors[256];
   gint n_free;
   gint i;
 
@@ -130,19 +136,20 @@ gdk_rgb_cmap_fail (const char *msg, GdkColormap *cmap, gulong *pixels)
   n_free = 0;
   for (i = 0; i < 256; i++)
     if (pixels[i] < 256)
-      free_pixels[n_free++] = pixels[i];
+      free_colors[n_free++].pixel = pixels[i];
   if (n_free)
-    gdk_colors_free (cmap, free_pixels, n_free, 0);
+    gdk_colormap_free_colors (cmap, free_colors, n_free);
   return 0;
 }
 
 static void
-gdk_rgb_make_colorcube (gulong *pixels, gint nr, gint ng, gint nb)
+gdk_rgb_make_colorcube (GdkRgbInfo *image_info, gulong *pixels,
+                       gint nr, gint ng, gint nb)
 {
   guchar rt[16], gt[16], bt[16];
   gint i;
 
-  colorcube = g_new (guchar, 4096);
+  image_info->colorcube = g_new (guchar, 4096);
   for (i = 0; i < 16; i++)
     {
       rt[i] = ng * nb * ((i * 17 * (nr - 1) + 128) >> 8);
@@ -152,34 +159,36 @@ gdk_rgb_make_colorcube (gulong *pixels, gint nr, gint ng, gint nb)
 
   for (i = 0; i < 4096; i++)
     {
-      colorcube[i] = pixels[rt[i >> 8] + gt[(i >> 4) & 0x0f] + bt[i & 0x0f]];
+      image_info->colorcube[i] = pixels[rt[i >> 8] + gt[(i >> 4) & 0x0f] + bt[i & 0x0f]];
 #ifdef VERBOSE
-      g_print ("%03x %02x %x %x %x\n", i, colorcube[i], rt[i >> 8], gt[(i >> 4) & 0x0f], bt[i & 0x0f]);
+      g_print ("%03x %02x %x %x %x\n", i, image_info->colorcube[i], rt[i >> 8], gt[(i >> 4) & 0x0f], bt[i & 0x0f]);
 #endif
     }
 }
 
 /* this is the colorcube suitable for dithering */
 static void
-gdk_rgb_make_colorcube_d (gulong *pixels, gint nr, gint ng, gint nb)
+gdk_rgb_make_colorcube_d (GdkRgbInfo *image_info, gulong *pixels,
+                         gint nr, gint ng, gint nb)
 {
   gint r, g, b;
   gint i;
 
-  colorcube_d = g_new (guchar, 512);
+  image_info->colorcube_d = g_new (guchar, 512);
   for (i = 0; i < 512; i++)
     {
       r = MIN (nr - 1, i >> 6);
       g = MIN (ng - 1, (i >> 3) & 7);
       b = MIN (nb - 1, i & 7);
-      colorcube_d[i] = pixels[(r * ng + g) * nb + b];
+      image_info->colorcube_d[i] = pixels[(r * ng + g) * nb + b];
     }
 }
 
 /* Try installing a color cube of the specified size.
    Make the colorcube and return TRUE on success */
-static gint
-gdk_rgb_try_colormap (gint nr, gint ng, gint nb)
+static gboolean
+gdk_rgb_try_colormap (GdkRgbInfo *image_info, gboolean force,
+                     gint nr, gint ng, gint nb)
 {
   gint r, g, b;
   gint ri, gi, bi;
@@ -187,20 +196,22 @@ gdk_rgb_try_colormap (gint nr, gint ng, gint nb)
   GdkColormap *cmap;
   GdkColor color;
   gulong pixels[256];
-  gulong junk[256];
   gint i;
   gint d2;
   gint colors_needed;
   gint idx;
   gint best[256];
+  GdkScreen *screen;
 
-  if (nr * ng * nb < gdk_rgb_min_colors)
+  if (!force && nr * ng * nb < gdk_rgb_min_colors)
     return FALSE;
 
-  if (image_info->cmap_alloced)
+  screen = gdk_visual_get_screen (image_info->visual);
+
+  if (image_info->cmap)
     cmap = image_info->cmap;
   else
-    cmap = gdk_colormap_get_system ();
+    cmap = gdk_screen_get_system_colormap (screen);
 
   colors_needed = nr * ng * nb;
   for (i = 0; i < 256; i++)
@@ -210,51 +221,40 @@ gdk_rgb_try_colormap (gint nr, gint ng, gint nb)
     }
 
 #ifndef GAMMA
-  if (!gdk_rgb_install_cmap)
-  /* find color cube colors that are already present */
-  for (i = 0; i < MIN (256, cmap->size); i++)
-    {
-      r = cmap->colors[i].red >> 8;
-      g = cmap->colors[i].green >> 8;
-      b = cmap->colors[i].blue >> 8;
-      ri = (r * (nr - 1) + 128) >> 8;
-      gi = (g * (ng - 1) + 128) >> 8;
-      bi = (b * (nb - 1) + 128) >> 8;
-      r0 = ri * 255 / (nr - 1);
-      g0 = gi * 255 / (ng - 1);
-      b0 = bi * 255 / (nb - 1);
-      idx = ((ri * nr) + gi) * nb + bi;
-      d2 = (r - r0) * (r - r0) + (g - g0) * (g - g0) + (b - b0) * (b - b0);
-      if (d2 < best[idx]) {
-       if (pixels[idx] < 256)
-         gdk_colors_free (cmap, pixels + idx, 1, 0);
-       else
-         colors_needed--;
-       color = cmap->colors[i];
-       if (!gdk_color_alloc (cmap, &color))
-         return gdk_rgb_cmap_fail ("error allocating system color\n",
-                                   cmap, pixels);
-       pixels[idx] = color.pixel; /* which is almost certainly i */
-       best[idx] = d2;
+  if (cmap == gdk_screen_get_system_colormap (screen))
+    /* find color cube colors that are already present */
+    for (i = 0; i < MIN (256, cmap->size); i++)
+      {
+       r = cmap->colors[i].red >> 8;
+       g = cmap->colors[i].green >> 8;
+       b = cmap->colors[i].blue >> 8;
+       ri = (r * (nr - 1) + 128) >> 8;
+       gi = (g * (ng - 1) + 128) >> 8;
+       bi = (b * (nb - 1) + 128) >> 8;
+       r0 = ri * 255 / (nr - 1);
+       g0 = gi * 255 / (ng - 1);
+       b0 = bi * 255 / (nb - 1);
+       idx = ((ri * nr) + gi) * nb + bi;
+       d2 = (r - r0) * (r - r0) + (g - g0) * (g - g0) + (b - b0) * (b - b0);
+       if (d2 < best[idx])
+         {
+           if (pixels[idx] < 256)
+             {
+               color.pixel = pixels[idx];
+               gdk_colormap_free_colors (cmap, &color, 1);
+             }
+           else
+             colors_needed--;
+           color = cmap->colors[i];
+           if (!gdk_colormap_alloc_color (cmap, &color, FALSE, FALSE))
+             return gdk_rgb_cmap_fail ("error allocating system color\n",
+                                       cmap, pixels);
+           pixels[idx] = color.pixel; /* which is almost certainly i */
+           best[idx] = d2;
+         }
       }
-    }
 #endif
 
-  if (colors_needed)
-    {
-      if (!gdk_colors_alloc (cmap, 0, NULL, 0, junk, colors_needed))
-       {
-         char tmp_str[80];
-         
-         sprintf (tmp_str,
-                  "%d %d %d colormap failed (in gdk_colors_alloc)\n",
-                  nr, ng, nb);
-         return gdk_rgb_cmap_fail (tmp_str, cmap, pixels);
-       }
-
-      gdk_colors_free (cmap, junk, colors_needed, 0);
-    }
-
   for (r = 0, i = 0; r < nr; r++)
     for (g = 0; g < ng; g++)
       for (b = 0; b < nb; b++, i++)
@@ -271,12 +271,11 @@ gdk_rgb_try_colormap (gint nr, gint ng, gint nb)
              color.blue = 65535 * pow (color.blue / 65535.0, 0.5);
 #endif
 
-             /* This should be a raw XAllocColor call */
-             if (!gdk_color_alloc (cmap, &color))
+             if (!gdk_colormap_alloc_color (cmap, &color, FALSE, force))
                {
                  char tmp_str[80];
 
-                 sprintf (tmp_str, "%d %d %d colormap failed\n",
+                 g_snprintf (tmp_str, 80, "%d %d %d colormap failed\n",
                           nr, ng, nb);
                  return gdk_rgb_cmap_fail (tmp_str,
                                            cmap, pixels);
@@ -291,16 +290,16 @@ gdk_rgb_try_colormap (gint nr, gint ng, gint nb)
   image_info->nred_shades = nr;
   image_info->ngreen_shades = ng;
   image_info->nblue_shades = nb;
-  gdk_rgb_make_colorcube (pixels, nr, ng, nb);
-  gdk_rgb_make_colorcube_d (pixels, nr, ng, nb);
+  gdk_rgb_make_colorcube (image_info, pixels, nr, ng, nb);
+  gdk_rgb_make_colorcube_d (image_info, pixels, nr, ng, nb);
   return TRUE;
 }
 
 /* Return TRUE on success. */
 static gboolean
-gdk_rgb_do_colormaps (void)
+gdk_rgb_do_colormaps (GdkRgbInfo *image_info, gboolean force)
 {
-  const gint sizes[][3] = {
+  static const gint sizes[][3] = {
     /*    { 6, 7, 6 }, */
     { 6, 6, 6 }, 
     { 6, 6, 5 }, 
@@ -312,37 +311,38 @@ gdk_rgb_do_colormaps (void)
     { 3, 3, 3 }, 
     { 2, 2, 2 }
   };
-  const gint n_sizes = sizeof(sizes) / (3 * sizeof(gint));
+  static const gint n_sizes = G_N_ELEMENTS (sizes);
   gint i;
 
+  /* Try the possible sizes. If the force parameter is set to TRUE
+   * and all larger sizes fail, force the larger size to succeed -
+   * this will involve allowing closest matches when allocating the
+   * colors
+   */
   for (i = 0; i < n_sizes; i++)
-    if (gdk_rgb_try_colormap (sizes[i][0], sizes[i][1], sizes[i][2]))
+    if (gdk_rgb_try_colormap (image_info,
+                             (i == n_sizes - 1 ) && force,
+                             sizes[i][0], sizes[i][1], sizes[i][2]))
       return TRUE;
   return FALSE;
 }
 
 /* Make a 2 x 2 x 2 colorcube */
 static void
-gdk_rgb_colorcube_222 (void)
+gdk_rgb_colorcube_222 (GdkRgbInfo *image_info)
 {
   int i;
   GdkColor color;
-  GdkColormap *cmap;
 
-  if (image_info->cmap_alloced)
-    cmap = image_info->cmap;
-  else
-    cmap = gdk_colormap_get_system ();
-
-  colorcube_d = g_new (guchar, 512);
+  image_info->colorcube_d = g_new (guchar, 512);
 
   for (i = 0; i < 8; i++)
     {
       color.red = ((i & 4) >> 2) * 65535;
       color.green = ((i & 2) >> 1) * 65535;
       color.blue = (i & 1) * 65535;
-      gdk_color_alloc (cmap, &color);
-      colorcube_d[((i & 4) << 4) | ((i & 2) << 2) | (i & 1)] = color.pixel;
+      gdk_colormap_alloc_color (image_info->cmap, &color, FALSE, TRUE);
+      image_info->colorcube_d[((i & 4) << 4) | ((i & 2) << 2) | (i & 1)] = color.pixel;
     }
 }
 
@@ -383,16 +383,6 @@ static guint32
 gdk_rgb_score_visual (GdkVisual *visual)
 {
   guint32 quality, speed, sys, pseudo;
-  gchar* visual_names[] =
-  {
-    "static gray",
-    "grayscale",
-    "static color",
-    "pseudo color",
-    "true color",
-    "direct color",
-  };
-
 
   quality = 0;
   speed = 1;
@@ -439,14 +429,13 @@ gdk_rgb_score_visual (GdkVisual *visual)
   if (quality == 0)
     return 0;
 
-  sys = (visual == gdk_visual_get_system ());
+  sys = (visual == gdk_screen_get_system_visual (gdk_visual_get_screen (visual)));
 
   pseudo = (visual->type == GDK_VISUAL_PSEUDO_COLOR || visual->type == GDK_VISUAL_TRUE_COLOR);
 
   if (gdk_rgb_verbose)
-    g_print ("Visual 0x%x, type = %s, depth = %d, %x:%x:%x%s; score=%x\n",
-            (gint)(((GdkVisualPrivate *)visual)->xvisual->visualid),
-            visual_names[visual->type],
+    g_print ("Visual type = %d, depth = %d, %x:%x:%x%s; score=%x\n",
+            visual->type,
             visual->depth,
             visual->red_mask,
             visual->green_mask,
@@ -457,41 +446,45 @@ gdk_rgb_score_visual (GdkVisual *visual)
   return (quality << 12) | (speed << 8) | (sys << 4) | pseudo;
 }
 
-static void
-gdk_rgb_choose_visual (void)
+static GdkVisual *
+gdk_rgb_choose_visual (GdkScreen *screen)
 {
-  GList *visuals;
+  GList *visuals, *tmp_list;
   guint32 score, best_score;
   GdkVisual *visual, *best_visual;
 
-  visuals = gdk_list_visuals ();
+  visuals = gdk_screen_list_visuals (screen);
+  tmp_list = visuals;
 
-  best_visual = visuals->data;
+  best_visual = tmp_list->data;
   best_score = gdk_rgb_score_visual (best_visual);
-  visuals = visuals->next;
-  while (visuals)
+  tmp_list = tmp_list->next;
+  while (tmp_list)
     {
-      visual = visuals->data;
+      visual = tmp_list->data;
       score = gdk_rgb_score_visual (visual);
       if (score > best_score)
        {
          best_score = score;
          best_visual = visual;
        }
-      visuals = visuals->next;
+      tmp_list = tmp_list->next;
     }
 
-  image_info->visual = best_visual;
+  g_list_free (visuals);
+
+  return best_visual;
 }
 
-static void gdk_rgb_select_conv (GdkImage *image);
+static void gdk_rgb_select_conv (GdkRgbInfo *image_info);
 
 static void
-gdk_rgb_set_gray_cmap (GdkColormap *cmap)
+gdk_rgb_set_gray_cmap (GdkRgbInfo  *image_info,
+                      GdkColormap *cmap)
 {
   gint i;
   GdkColor color;
-  gint status;
+  gboolean status;
   gulong pixels[256];
   gint r, g, b, gray;
 
@@ -501,7 +494,7 @@ gdk_rgb_set_gray_cmap (GdkColormap *cmap)
       color.red = i * 257;
       color.green = i * 257;
       color.blue = i * 257;
-      status = gdk_color_alloc (cmap, &color);
+      status = gdk_colormap_alloc_color (cmap, &color, FALSE, TRUE);
       pixels[i] = color.pixel;
 #ifdef VERBOSE
       g_print ("allocating pixel %d, %x %x %x, result %d\n",
@@ -512,7 +505,7 @@ gdk_rgb_set_gray_cmap (GdkColormap *cmap)
   /* Now, we make fake colorcubes - we ultimately just use the pseudocolor
      methods. */
 
-  colorcube = g_new (guchar, 4096);
+  image_info->colorcube = g_new (guchar, 4096);
 
   for (i = 0; i < 4096; i++)
     {
@@ -523,129 +516,237 @@ gdk_rgb_set_gray_cmap (GdkColormap *cmap)
       b = (i << 4 & 0xf0);
       b = b | b >> 4;
       gray = (g + ((r + b) >> 1)) >> 1;
-      colorcube[i] = pixels[gray];
+      image_info->colorcube[i] = pixels[gray];
     }
 }
 
-void
-gdk_rgb_init (void)
+static void
+gdk_rgb_free_info (GdkRgbInfo *image_info)
 {
-  gint i;
-  gint byte_order[1] = { 1 };
-
-  /* check endian sanity */
-#ifdef WORDS_BIGENDIAN
-  if (((char *)byte_order)[0] == 1)
-    g_error ("gdk_rgb_init: WORDS_BIGENDIAN is defined, but this is a little endian machine.\n\n");
-#else
-  if (((char *)byte_order)[0] != 1)
-    g_error ("gdk_rgb_init: WORDS_BIGENDIAN is not defined, but this is a little endian machine.\n\n");
-#endif
-
-  if (image_info == NULL)
-    {
-      image_info = g_new0 (GdkRgbInfo, 1);
-
-      image_info->visual = NULL;
-      image_info->cmap = NULL;
-
-      image_info->color_pixels = NULL;
-      image_info->gray_pixels = NULL;
-      image_info->reserved_pixels = NULL;
-
-      image_info->nred_shades = 6;
-      image_info->ngreen_shades = 6;
-      image_info->nblue_shades = 4;
-      image_info->ngray_shades = 24;
-      image_info->nreserved = 0;
+  GSList *tmp_list;
+  
+  g_free (image_info->stage_buf);
+  
+  if (image_info->gray_cmap)
+    gdk_rgb_cmap_free (image_info->gray_cmap);
 
-      image_info->bpp = 0;
-      image_info->cmap_alloced = FALSE;
-      image_info->gamma = 1.0;
+  if (image_info->own_gc)
+    g_object_unref (image_info->own_gc);
 
-      image_info->stage_buf = NULL;
+  g_free (image_info->colorcube);
+  
+  g_free (image_info->colorcube_d);
 
-      gdk_rgb_choose_visual ();
+  tmp_list = image_info->cmap_info_list;
+  while (tmp_list)
+    {
+      GdkRgbCmapInfo *cmap_info = tmp_list->data;
+      cmap_info->cmap->info_list = g_slist_remove (cmap_info->cmap->info_list, cmap_info);
+      g_free (cmap_info);
+    }
+  g_slist_free (image_info->cmap_info_list);
+  
+  g_free (image_info);
+}
 
-      if (image_info->visual->depth == 4)
+/* Create a GdkRgbInfo for the given visual/colormap pair. If colormap
+ * is NULL, it will be determined and stored in image_info->cmap. 
+ * In this case, image_info->cmap will have an extra refcount which
+ * is owned by the caller. 
+ */
+static GdkRgbInfo *
+gdk_rgb_create_info (GdkVisual *visual, GdkColormap *colormap)
+{
+  GdkRgbInfo *image_info;
+  GdkScreen *screen = gdk_visual_get_screen (visual);
+
+  image_info = g_new0 (GdkRgbInfo, 1);
+
+  image_info->visual = visual;
+  image_info->cmap = NULL;
+
+  image_info->nred_shades = 6;
+  image_info->ngreen_shades = 6;
+  image_info->nblue_shades = 4;
+  image_info->ngray_shades = 24;
+  image_info->nreserved = 0;
+
+  image_info->bpp = 0;
+  image_info->cmap_alloced = FALSE;
+  image_info->gamma = 1.0;
+
+  image_info->stage_buf = NULL;
+
+  image_info->own_gc = NULL;
+
+  image_info->cmap = colormap;
+
+  /* We used to use the 2x2x2 color cube for pseudo-color with depths
+   * 5, 6, 7 as well but now only use it for depths (3 and) 4 in
+   * pseudo-color. The reason for this is that on Win32 we let the
+   * user restrict the color allocation for PSEUDO_COLOR visuals
+   * (i.e., 256-color mode) and we probably want to do the full
+   * gdk_rgb_do_colormaps() if we are doing that. (Though the color
+   * sharing code won't really be right.)
+   *
+   * (The actual usefulness of this user-requested restriction remains
+   * to be seen, but the code is there in gdkvisual-win32.c. The
+   * thought is that it might occasionally be useful to restrict the
+   * palette size in a GTK application in order to reduce color
+   * flashing.)
+   */
+  if ((image_info->visual->type == GDK_VISUAL_PSEUDO_COLOR &&
+       image_info->visual->depth <= 4 &&
+       image_info->visual->depth >= 3) ||
+      (image_info->visual->type == GDK_VISUAL_STATIC_COLOR &&
+       image_info->visual->depth < 8 &&
+       image_info->visual->depth >= 3))
+    {
+      if (!image_info->cmap)
+       image_info->cmap = g_object_ref (gdk_screen_get_system_colormap (screen));
+      
+      gdk_rgb_colorcube_222 (image_info);
+    }
+  else if (image_info->visual->type == GDK_VISUAL_PSEUDO_COLOR
+    || image_info->visual->type == GDK_VISUAL_STATIC_COLOR)
+    {
+      if (!image_info->cmap &&
+         (gdk_rgb_install_cmap || image_info->visual != gdk_screen_get_system_visual (screen)))
        {
-         gdk_rgb_colorcube_222 ();
+         image_info->cmap = gdk_colormap_new (image_info->visual, FALSE);
+         image_info->cmap_alloced = TRUE;
        }
-      else if (image_info->visual->type == GDK_VISUAL_PSEUDO_COLOR)
+      if (!gdk_rgb_do_colormaps (image_info, image_info->cmap != NULL))
        {
-         if (gdk_rgb_install_cmap ||
-             image_info->visual != gdk_visual_get_system ())
-           {
-             image_info->cmap = gdk_colormap_new (image_info->visual, FALSE);
-             image_info->cmap_alloced = TRUE;
-           }
-         if (!gdk_rgb_do_colormaps ())
-           {
-             image_info->cmap = gdk_colormap_new (image_info->visual, FALSE);
-             image_info->cmap_alloced = TRUE;
-             gdk_rgb_do_colormaps ();
-           }
-         if (gdk_rgb_verbose)
-           g_print ("color cube: %d x %d x %d\n",
-                    image_info->nred_shades,
-                    image_info->ngreen_shades,
-                    image_info->nblue_shades);
-
-         if (!image_info->cmap_alloced)
-             image_info->cmap = gdk_colormap_get_system ();
+         image_info->cmap = gdk_colormap_new (image_info->visual, FALSE);
+         image_info->cmap_alloced = TRUE;
+         gdk_rgb_do_colormaps (image_info, TRUE);
        }
+      if (gdk_rgb_verbose)
+       g_print ("color cube: %d x %d x %d\n",
+                image_info->nred_shades,
+                image_info->ngreen_shades,
+                image_info->nblue_shades);
+
+      if (!image_info->cmap)
+       image_info->cmap = g_object_ref (gdk_screen_get_system_colormap (screen));
+    }
 #ifdef ENABLE_GRAYSCALE
-      else if (image_info->visual->type == GDK_VISUAL_GRAYSCALE)
+  else if (image_info->visual->type == GDK_VISUAL_GRAYSCALE)
+    {
+      if (!image_info->cmap)
        {
          image_info->cmap = gdk_colormap_new (image_info->visual, FALSE);
-         gdk_rgb_set_gray_cmap (image_info->cmap);
          image_info->cmap_alloced = TRUE;
-       }
+       }
+      
+      gdk_rgb_set_gray_cmap (image_info, image_info->cmap);
+    }
 #endif
-      else
+  else
+    {
+      if (!image_info->cmap)
        {
          /* Always install colormap in direct color. */
          if (image_info->visual->type != GDK_VISUAL_DIRECT_COLOR &&
-             image_info->visual == gdk_visual_get_system ())
-           image_info->cmap = gdk_colormap_get_system ();
+             image_info->visual == gdk_screen_get_system_visual (screen))
+           image_info->cmap = g_object_ref (gdk_screen_get_system_colormap (screen));
          else
            {
              image_info->cmap = gdk_colormap_new (image_info->visual, FALSE);
              image_info->cmap_alloced = TRUE;
            }
        }
+    }
 
-      for (i = 0; i < N_IMAGES; i++)
-       static_image[i] = gdk_image_new (GDK_IMAGE_FASTEST,
-                                        image_info->visual,
-                                        IMAGE_WIDTH, IMAGE_HEIGHT);
+  image_info->bitmap = (image_info->visual->depth == 1);
 
-      image_info->bpp = static_image[0]->bpp;
+  image_info->bpp = (_gdk_windowing_get_bits_for_depth (gdk_screen_get_display (screen), image_info->visual->depth) + 7) / 8;
+  gdk_rgb_select_conv (image_info);
 
-      gdk_rgb_select_conv (static_image[0]);
+  if (!gdk_rgb_quark)
+    gdk_rgb_quark = g_quark_from_static_string (gdk_rgb_key);
 
-    }
+  g_object_set_qdata_full (G_OBJECT (image_info->cmap), gdk_rgb_quark,
+                          image_info, (GDestroyNotify)gdk_rgb_free_info);
+  return image_info;
 }
 
-/* convert an rgb value into an X pixel code */
-gulong
-gdk_rgb_xpixel_from_rgb (guint32 rgb)
+void
+gdk_rgb_init (void)
+{
+  static const gint byte_order[1] = { 1 };
+
+  /* check endian sanity */
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+  if (((char *)byte_order)[0] == 1)
+    g_error ("gdk_rgb_init: compiled for big endian, but this is a little endian machine.\n\n");
+#else
+  if (((char *)byte_order)[0] != 1)
+    g_error ("gdk_rgb_init: compiled for little endian, but this is a big endian machine.\n\n");
+#endif
+}
+
+static GdkRgbInfo *
+gdk_rgb_get_info_from_colormap (GdkColormap *cmap)
+{
+  GdkRgbInfo *image_info;
+
+  if (!gdk_rgb_quark)
+    gdk_rgb_quark = g_quark_from_static_string (gdk_rgb_key);
+
+  image_info = g_object_get_qdata (G_OBJECT (cmap), gdk_rgb_quark);
+  if (!image_info)
+    image_info = gdk_rgb_create_info (gdk_colormap_get_visual (cmap), cmap);
+
+  return image_info;
+}
+
+static guint32
+gdk_rgb_alpha_mask (GdkRgbInfo *image_info)
+{
+  guint padding;
+  
+  /* Shifting by >= width-of-type isn't defined in C */
+  if (image_info->visual->depth >= 32)
+    padding = 0;
+  else
+    padding = ((~(guint32)0)) << image_info->visual->depth;
+         
+  return ~(image_info->visual->red_mask |
+          image_info->visual->green_mask |
+          image_info->visual->blue_mask |
+          padding);
+}
+
+static gulong
+gdk_rgb_xpixel_from_rgb_internal (GdkColormap *colormap,
+                                 guint16 r, guint16 g, guint16 b)
 {
-  gulong pixel;
+  gulong pixel = 0;
 
-  if (image_info->visual->type == GDK_VISUAL_PSEUDO_COLOR)
-    pixel = colorcube[((rgb & 0xf00000) >> 12) |
-                    ((rgb & 0xf000) >> 8) |
-                    ((rgb & 0xf0) >> 4)];
-  else if (image_info->visual->depth == 4 &&
+  GdkRgbInfo *image_info = gdk_rgb_get_info_from_colormap (colormap);
+
+  if (image_info->bitmap)
+    {
+      return (r + (g << 1) + b) > 131070;
+    }
+  else if (image_info->visual->type == GDK_VISUAL_PSEUDO_COLOR)
+    pixel = image_info->colorcube[((r & 0xf000) >> 4) |
+                                 ((g & 0xf000) >> 8) |
+                                 ((b & 0xf000) >> 12)];
+  else if (image_info->visual->depth < 8 &&
           image_info->visual->type == GDK_VISUAL_STATIC_COLOR)
     {
-      pixel = colorcube_d[((rgb & 0x800000) >> 17) |
-                        ((rgb & 0x8000) >> 12) |
-                        ((rgb & 0x80) >> 7)];
+      pixel = image_info->colorcube_d[((r & 0x8000) >> 9) |
+                                     ((g & 0x8000) >> 12) |
+                                     ((b & 0x8000) >> 15)];
     }
-  else
+  else if (image_info->visual->type == GDK_VISUAL_TRUE_COLOR ||
+          image_info->visual->type == GDK_VISUAL_DIRECT_COLOR)
     {
+      guint32 unused;
+
 #ifdef VERBOSE
       g_print ("shift, prec: r %d %d g %d %d b %d %d\n",
               image_info->visual->red_shift,
@@ -655,21 +756,41 @@ gdk_rgb_xpixel_from_rgb (guint32 rgb)
               image_info->visual->blue_shift,
               image_info->visual->blue_prec);
 #endif
-
-      pixel = (((((rgb & 0xff0000) >> 16) >>
-                (8 - image_info->visual->red_prec)) <<
-               image_info->visual->red_shift) +
-              ((((rgb & 0xff00) >> 8)  >>
-                (8 - image_info->visual->green_prec)) <<
-               image_info->visual->green_shift) +
-              (((rgb & 0xff) >>
-                (8 - image_info->visual->blue_prec)) <<
-               image_info->visual->blue_shift));
+      /* If bits not used for color are used for something other than padding,
+       * it's likely alpha, so we set them to 1s.
+       */
+      unused = ~ (image_info->visual->red_mask | 
+                 image_info->visual->green_mask | 
+                 image_info->visual->blue_mask |
+                 (((~(guint32)0)) << image_info->visual->depth));
+
+      pixel = (unused + ((r >> (16 - image_info->visual->red_prec)) << image_info->visual->red_shift) +
+              ((g >> (16 - image_info->visual->green_prec)) << image_info->visual->green_shift) +
+              ((b >> (16 - image_info->visual->blue_prec)) << image_info->visual->blue_shift));
+      pixel |= gdk_rgb_alpha_mask (image_info);
+    }
+  else if (image_info->visual->type == GDK_VISUAL_STATIC_GRAY ||
+          image_info->visual->type == GDK_VISUAL_GRAYSCALE)
+    {
+      int gray = r + g * 2 + b;
+      return gray >> (18 - image_info->visual->depth);
     }
 
   return pixel;
 }
 
+/* convert an rgb value into an X pixel code */
+gulong
+gdk_rgb_xpixel_from_rgb (guint32 rgb)
+{
+  guint32 r = rgb & 0xff0000;
+  guint32 g = rgb & 0xff00;
+  guint32 b = rgb & 0xff;
+
+  return gdk_rgb_xpixel_from_rgb_internal (gdk_screen_get_rgb_colormap (gdk_screen_get_default ()),
+                                          (r >> 8) + (r >> 16), g + (g >> 8), b + (b << 8));
+}
+
 void
 gdk_rgb_gc_set_foreground (GdkGC *gc, guint32 rgb)
 {
@@ -688,22 +809,51 @@ gdk_rgb_gc_set_background (GdkGC *gc, guint32 rgb)
   gdk_gc_set_background (gc, &color);
 }
 
-#ifndef WORDS_BIGENDIAN
+/**
+ * gdk_rgb_find_color:
+ * @colormap: a #GdkColormap
+ * @color: a #GdkColor
+ *
+ * @colormap should be the colormap for the graphics context and
+ * drawable you're using to draw. If you're drawing to a #GtkWidget,
+ * call gtk_widget_get_colormap().
+ *
+ * @color should have its %red, %green, and %blue fields initialized;
+ * gdk_rgb_find_color() will fill in the %pixel field with the best
+ * matching pixel from a color cube. The color is then ready to be
+ * used for drawing, e.g. you can call gdk_gc_set_foreground() which
+ * expects %pixel to be initialized.
+ *
+ * In many cases, you can avoid this whole issue by calling
+ * gdk_gc_set_rgb_fg_color() or gdk_gc_set_rgb_bg_color(), which
+ * do not expect %pixel to be initialized in advance. If you use those
+ * functions, there's no need for gdk_rgb_find_color().
+ * 
+ **/
+void
+gdk_rgb_find_color (GdkColormap *colormap, GdkColor *color)
+{
+  color->pixel = gdk_rgb_xpixel_from_rgb_internal (colormap,
+                                                  color->red, color->green, color->blue);
+}
+
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
 #define HAIRY_CONVERT_8
 #endif
 
 #ifdef HAIRY_CONVERT_8
 static void
-gdk_rgb_convert_8 (GdkImage *image,
+gdk_rgb_convert_8 (GdkRgbInfo *image_info, GdkImage *image,
                   gint x0, gint y0, gint width, gint height,
-                  guchar *buf, int rowstride,
+                  const guchar *buf, int rowstride,
                   gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   gint bpl;
   guchar *obuf, *obptr;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   gint r, g, b;
+  guchar *colorcube = image_info->colorcube;
 
   bptr = buf;
   bpl = image->bpl;
@@ -712,7 +862,7 @@ gdk_rgb_convert_8 (GdkImage *image,
     {
       bp2 = bptr;
       obptr = obuf;
-      if (((unsigned long)obuf | (unsigned long) bp2) & 3)
+      if (((guintptr)obuf | (guintptr) bp2) & 3)
        {
          for (x = 0; x < width; x++)
            {
@@ -769,16 +919,17 @@ gdk_rgb_convert_8 (GdkImage *image,
 }
 #else
 static void
-gdk_rgb_convert_8 (GdkImage *image,
+gdk_rgb_convert_8 (GdkRgbInfo *image_info, GdkImage *image,
                   gint x0, gint y0, gint width, gint height,
-                  guchar *buf, int rowstride,
+                  const guchar *buf, int rowstride,
                   gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   gint bpl;
   guchar *obuf, *obptr;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   gint r, g, b;
+  guchar *colorcube = image_info->colorcube;
 
   bptr = buf;
   bpl = image->bpl;
@@ -803,6 +954,16 @@ gdk_rgb_convert_8 (GdkImage *image,
 }
 #endif
 
+\f
+
+/* Dither matrices
+ * ---------------
+ *
+ * The original matrices are called "DM" below.  The preprocessed matrices for
+ * 5-6-5 RGB displays are called "DM_565".  These preprocessed tables can be
+ * generated with the gdk_rgb_preprocess_dm_565() function below.
+ */
+
 #if 1
 
 /* This dither table was generated by Raph Levien using patented
@@ -812,7 +973,7 @@ gdk_rgb_convert_8 (GdkImage *image,
 #define DM_WIDTH 128
 #define DM_WIDTH_SHIFT 7
 #define DM_HEIGHT 128
-static guchar DM[128][128] =
+static const guchar DM[128][128] =
 {
   { 0, 41, 23, 5, 17, 39, 7, 15, 62, 23, 40, 51, 31, 47, 9, 32, 52, 27, 57, 25, 6, 61, 27, 52, 37, 7, 40, 63, 18, 36, 10, 42, 25, 62, 45, 34, 20, 42, 37, 14, 35, 29, 50, 10, 61, 2, 40, 8, 37, 12, 58, 22, 5, 41, 10, 39, 0, 60, 11, 46, 2, 55, 38, 17, 36, 59, 13, 54, 37, 56, 8, 29, 16, 13, 63, 22, 41, 55, 7, 20, 49, 14, 23, 55, 37, 23, 19, 36, 15, 49, 23, 63, 30, 14, 38, 27, 53, 13, 22, 41, 19, 31, 7, 19, 50, 30, 49, 16, 3, 32, 56, 40, 29, 34, 8, 48, 19, 45, 4, 51, 12, 46, 35, 49, 16, 42, 12, 62 },
   { 30, 57, 36, 54, 47, 34, 52, 27, 43, 4, 28, 7, 17, 36, 62, 13, 44, 7, 18, 48, 33, 21, 44, 14, 30, 47, 12, 33, 5, 55, 31, 58, 13, 30, 4, 17, 52, 10, 60, 26, 46, 0, 39, 27, 42, 22, 47, 25, 60, 32, 9, 38, 48, 17, 59, 30, 49, 18, 34, 25, 51, 19, 5, 48, 21, 8, 28, 46, 1, 32, 41, 19, 54, 47, 37, 18, 28, 11, 44, 30, 39, 56, 2, 33, 8, 42, 61, 28, 58, 8, 46, 9, 41, 4, 58, 7, 21, 48, 59, 10, 52, 14, 42, 57, 12, 25, 7, 53, 42, 24, 11, 50, 17, 59, 42, 2, 36, 60, 32, 17, 63, 29, 21, 7, 59, 32, 24, 39 },
@@ -944,11 +1105,143 @@ static guchar DM[128][128] =
   { 51, 14, 61, 29, 59, 20, 55, 31, 0, 49, 11, 60, 3, 26, 22, 56, 0, 40, 12, 43, 41, 8, 36, 0, 17, 57, 24, 2, 46, 26, 61, 18, 0, 38, 12, 59, 6, 49, 3, 57, 19, 63, 5, 33, 18, 54, 28, 56, 0, 43, 26, 46, 63, 27, 56, 22, 27, 54, 38, 28, 63, 24, 10, 45, 0, 31, 42, 21, 12, 25, 44, 49, 59, 6, 26, 50, 3, 34, 27, 59, 0, 35, 62, 16, 4, 58, 47, 0, 43, 24, 37, 2, 54, 20, 46, 31, 0, 56, 34, 5, 55, 45, 60, 37, 0, 40, 10, 38, 63, 46, 15, 20, 0, 53, 21, 62, 30, 11, 24, 27, 40, 0, 57, 26, 3, 45, 27, 35 },
 };
 
+static const guint32 DM_565[128 * 128] =
+{
+  3072, 5243909, 2099202, 3072, 2099202, 4195332, 3072, 1051649, 7340039, 2099202, 5243909, 6291462, 3147779, 5243909, 1051649, 4195332, 6291462, 3147779, 7340039, 3147779, 3072, 7340039, 3147779, 6291462, 4195332, 3072, 5243909, 7340039, 2099202, 4195332, 1051649, 5243909, 3147779, 7340039, 5243909, 4195332, 2099202, 5243909, 4195332, 1051649, 4195332, 3147779, 6291462, 1051649, 7340039, 3072, 5243909, 1051649, 4195332, 1051649, 7340039, 2099202, 3072, 5243909, 1051649, 4195332, 3072, 7340039, 1051649, 5243909, 3072, 6291462, 4195332, 2099202, 4195332, 7340039, 1051649, 6291462, 4195332, 7340039, 1051649, 3147779, 2099202, 1051649, 7340039, 2099202, 5243909, 6291462, 3072, 2099202, 6291462, 1051649, 2099202, 6291462, 4195332, 2099202, 2099202, 4195332, 1051649, 6291462, 2099202, 7340039, 3147779, 1051649, 4195332, 3147779, 6291462, 1051649, 2099202, 5243909, 2099202, 3147779, 3072, 2099202, 6291462, 3147779, 6291462, 2099202, 3072, 4195332, 7340039, 5243909, 3147779, 4195332, 1051649, 6291462, 2099202, 5243909, 3072, 6291462, 1051649, 5243909, 4195332, 6291462, 2099202, 5243909, 1051649, 7340039,
+  3147779, 7340039, 4195332, 6291462, 5243909, 4195332, 6291462, 3147779, 5243909, 3072, 3147779, 3072, 2099202, 4195332, 7340039, 1051649, 5243909, 3072, 2099202, 6291462, 4195332, 2099202, 5243909, 1051649, 3147779, 5243909, 1051649, 4195332, 3072, 6291462, 3147779, 7340039, 1051649, 3147779, 3072, 2099202, 6291462, 1051649, 7340039, 3147779, 5243909, 3072, 4195332, 3147779, 5243909, 2099202, 5243909, 3147779, 7340039, 4195332, 1051649, 4195332, 6291462, 2099202, 7340039, 3147779, 6291462, 2099202, 4195332, 3147779, 6291462, 2099202, 3072, 6291462, 2099202, 1051649, 3147779, 5243909, 3072, 4195332, 5243909, 2099202, 6291462, 5243909, 4195332, 2099202, 3147779, 1051649, 5243909, 3147779, 4195332, 7340039, 3072, 4195332, 1051649, 5243909, 7340039, 3147779, 7340039, 1051649, 5243909, 1051649, 5243909, 3072, 7340039, 3072, 2099202, 6291462, 7340039, 1051649, 6291462, 1051649, 5243909, 7340039, 1051649, 3147779, 3072, 6291462, 5243909, 3147779, 1051649, 6291462, 2099202, 7340039, 5243909, 3072, 4195332, 7340039, 4195332, 2099202, 7340039, 3147779, 2099202, 3072, 7340039, 4195332, 3147779, 4195332,
+  2099202, 1051649, 2099202, 4195332, 3072, 3147779, 1051649, 7340039, 2099202, 5243909, 7340039, 4195332, 6291462, 2099202, 3072, 5243909, 2099202, 4195332, 7340039, 3072, 6291462, 1051649, 7340039, 3072, 7340039, 2099202, 6291462, 3147779, 5243909, 2099202, 3072, 6291462, 1051649, 6291462, 5243909, 6291462, 3147779, 4195332, 3072, 6291462, 2099202, 7340039, 1051649, 6291462, 3072, 4195332, 1051649, 6291462, 2099202, 3147779, 6291462, 1051649, 3147779, 6291462, 3072, 4195332, 1051649, 5243909, 3072, 6291462, 1051649, 4195332, 7340039, 3147779, 7340039, 4195332, 6291462, 1051649, 7340039, 2099202, 3072, 7340039, 3072, 3147779, 3072, 6291462, 7340039, 4195332, 1051649, 7340039, 3072, 3147779, 5243909, 3147779, 6291462, 1051649, 3072, 5243909, 3072, 4195332, 4195332, 6291462, 3147779, 6291462, 4195332, 5243909, 7340039, 3072, 3147779, 4195332, 2099202, 7340039, 3072, 4195332, 5243909, 7340039, 4195332, 2099202, 7340039, 3072, 6291462, 3147779, 3072, 4195332, 2099202, 6291462, 3147779, 1051649, 5243909, 6291462, 1051649, 3072, 7340039, 4195332, 2099202, 6291462, 3072, 5243909,
+  6291462, 6291462, 5243909, 1051649, 5243909, 7340039, 3147779, 4195332, 1051649, 4195332, 2099202, 3072, 3147779, 5243909, 3147779, 7340039, 3072, 6291462, 1051649, 4195332, 3147779, 2099202, 4195332, 4195332, 2099202, 5243909, 3072, 6291462, 1051649, 7340039, 3147779, 4195332, 2099202, 4195332, 2099202, 2099202, 3072, 5243909, 4195332, 2099202, 1051649, 5243909, 3147779, 3147779, 7340039, 2099202, 7340039, 3072, 5243909, 3072, 5243909, 7340039, 3072, 3147779, 5243909, 2099202, 7340039, 3147779, 7340039, 2099202, 4195332, 5243909, 1051649, 5243909, 3072, 4195332, 3072, 4195332, 1051649, 5243909, 6291462, 4195332, 2099202, 6291462, 5243909, 1051649, 2099202, 3072, 6291462, 2099202, 6291462, 5243909, 1051649, 7340039, 2099202, 6291462, 3147779, 6291462, 2099202, 7340039, 1051649, 3072, 7340039, 2099202, 1051649, 2099202, 4195332, 4195332, 2099202, 5243909, 3072, 6291462, 3147779, 4195332, 2099202, 3072, 6291462, 1051649, 3147779, 5243909, 4195332, 2099202, 7340039, 1051649, 5243909, 1051649, 6291462, 2099202, 3072, 4195332, 3147779, 5243909, 3147779, 3072, 6291462, 1051649, 7340039, 3072,
+  2099202, 3147779, 3072, 7340039, 2099202, 1051649, 6291462, 3072, 5243909, 6291462, 1051649, 7340039, 1051649, 6291462, 1051649, 4195332, 2099202, 3147779, 5243909, 1051649, 6291462, 3147779, 5243909, 3072, 6291462, 1051649, 7340039, 1051649, 4195332, 1051649, 6291462, 1051649, 7340039, 3072, 7340039, 5243909, 7340039, 1051649, 6291462, 3147779, 7340039, 4195332, 1051649, 6291462, 3072, 5243909, 3147779, 4195332, 6291462, 2099202, 4195332, 1051649, 6291462, 4195332, 1051649, 6291462, 3072, 2099202, 1051649, 5243909, 3072, 7340039, 1051649, 2099202, 6291462, 2099202, 6291462, 3147779, 7340039, 2099202, 3147779, 1051649, 5243909, 1051649, 3147779, 7340039, 5243909, 4195332, 3147779, 4195332, 1051649, 3147779, 2099202, 4195332, 3072, 5243909, 4195332, 1051649, 6291462, 4195332, 2099202, 5243909, 3147779, 5243909, 3147779, 6291462, 3072, 5243909, 6291462, 1051649, 7340039, 3147779, 1051649, 6291462, 2099202, 5243909, 4195332, 2099202, 4195332, 3072, 6291462, 1051649, 5243909, 4195332, 3072, 7340039, 3147779, 5243909, 7340039, 2099202, 1051649, 7340039, 4195332, 5243909, 1051649, 4195332, 3147779, 4195332,
+  6291462, 4195332, 7340039, 3147779, 4195332, 5243909, 2099202, 7340039, 3072, 4195332, 5243909, 3147779, 5243909, 4195332, 3072, 6291462, 6291462, 1051649, 7340039, 2099202, 5243909, 3072, 7340039, 3147779, 2099202, 5243909, 4195332, 3147779, 7340039, 5243909, 2099202, 4195332, 4195332, 3147779, 5243909, 1051649, 3147779, 2099202, 3072, 5243909, 1051649, 6291462, 3072, 4195332, 2099202, 6291462, 1051649, 2099202, 3072, 7340039, 2099202, 3147779, 6291462, 2099202, 7340039, 3147779, 5243909, 4195332, 7340039, 1051649, 6291462, 4195332, 3147779, 5243909, 2099202, 7340039, 3147779, 1051649, 5243909, 3072, 4195332, 7340039, 1051649, 7340039, 3147779, 3072, 6291462, 1051649, 7340039, 3072, 5243909, 7340039, 3072, 7340039, 3147779, 2099202, 3072, 7340039, 3147779, 1051649, 7340039, 2099202, 5243909, 3072, 7340039, 4195332, 3147779, 1051649, 3147779, 4195332, 1051649, 5243909, 6291462, 3072, 6291462, 1051649, 7340039, 3072, 7340039, 1051649, 3147779, 7340039, 2099202, 6291462, 4195332, 2099202, 4195332, 1051649, 3147779, 6291462, 5243909, 2099202, 3072, 3147779, 7340039, 2099202, 6291462, 1051649,
+  3147779, 3072, 3147779, 1051649, 6291462, 3072, 4195332, 3147779, 2099202, 6291462, 2099202, 7340039, 3072, 7340039, 3147779, 2099202, 3072, 4195332, 3147779, 3072, 6291462, 4195332, 1051649, 6291462, 3147779, 6291462, 2099202, 5243909, 3072, 3147779, 7340039, 3072, 6291462, 1051649, 3147779, 3072, 6291462, 5243909, 7340039, 3147779, 4195332, 1051649, 7340039, 2099202, 5243909, 1051649, 7340039, 4195332, 5243909, 3147779, 5243909, 5243909, 3072, 4195332, 1051649, 5243909, 2099202, 3072, 5243909, 3147779, 3147779, 2099202, 7340039, 3072, 4195332, 3072, 5243909, 4195332, 3147779, 6291462, 2099202, 3147779, 6291462, 3072, 4195332, 7340039, 2099202, 4195332, 2099202, 6291462, 1051649, 5243909, 3147779, 4195332, 1051649, 6291462, 5243909, 3147779, 2099202, 5243909, 4195332, 3072, 6291462, 2099202, 1051649, 1051649, 6291462, 7340039, 3072, 7340039, 5243909, 2099202, 1051649, 3147779, 7340039, 3147779, 3147779, 5243909, 3147779, 6291462, 4195332, 2099202, 5243909, 3072, 3147779, 6291462, 3072, 7340039, 3072, 4195332, 3072, 7340039, 6291462, 5243909, 1051649, 5243909, 3072, 5243909,
+  2099202, 7340039, 5243909, 3072, 7340039, 3147779, 7340039, 1051649, 6291462, 1051649, 4195332, 1051649, 3147779, 5243909, 2099202, 5243909, 7340039, 3147779, 6291462, 4195332, 1051649, 7340039, 2099202, 4195332, 3072, 5243909, 3072, 7340039, 4195332, 2099202, 5243909, 1051649, 5243909, 2099202, 7340039, 5243909, 2099202, 1051649, 4195332, 2099202, 6291462, 4195332, 2099202, 7340039, 3147779, 6291462, 3147779, 3072, 2099202, 6291462, 3072, 7340039, 2099202, 7340039, 3147779, 3072, 7340039, 4195332, 2099202, 7340039, 3072, 6291462, 3072, 5243909, 3147779, 7340039, 1051649, 6291462, 1051649, 7340039, 3072, 2099202, 4195332, 2099202, 5243909, 1051649, 5243909, 3072, 5243909, 3147779, 4195332, 2099202, 6291462, 2099202, 6291462, 5243909, 1051649, 7340039, 3072, 6291462, 1051649, 6291462, 3147779, 4195332, 7340039, 2099202, 5243909, 2099202, 4195332, 3147779, 3072, 6291462, 4195332, 4195332, 3072, 5243909, 1051649, 5243909, 1051649, 2099202, 3072, 6291462, 1051649, 4195332, 7340039, 1051649, 5243909, 2099202, 6291462, 3147779, 5243909, 2099202, 3147779, 1051649, 7340039, 2099202, 4195332, 7340039,
+  6291462, 4195332, 1051649, 5243909, 3147779, 2099202, 5243909, 3072, 4195332, 7340039, 3147779, 5243909, 6291462, 3072, 7340039, 1051649, 5243909, 2099202, 3072, 7340039, 2099202, 1051649, 5243909, 1051649, 7340039, 4195332, 1051649, 3147779, 3072, 6291462, 2099202, 7340039, 4195332, 6291462, 3072, 4195332, 6291462, 3147779, 7340039, 3072, 5243909, 3072, 5243909, 3072, 5243909, 3072, 6291462, 4195332, 7340039, 1051649, 4195332, 1051649, 5243909, 1051649, 4195332, 6291462, 3147779, 6291462, 1051649, 5243909, 2099202, 4195332, 7340039, 1051649, 2099202, 6291462, 4195332, 3072, 5243909, 3147779, 5243909, 6291462, 3072, 6291462, 1051649, 7340039, 3147779, 6291462, 1051649, 7340039, 3072, 6291462, 3072, 7340039, 3072, 4195332, 2099202, 4195332, 5243909, 3147779, 3147779, 7340039, 3072, 1051649, 5243909, 4195332, 3072, 6291462, 1051649, 7340039, 2099202, 5243909, 1051649, 7340039, 2099202, 7340039, 3072, 6291462, 3147779, 7340039, 5243909, 3147779, 6291462, 2099202, 5243909, 3147779, 7340039, 4195332, 2099202, 5243909, 1051649, 4195332, 3072, 6291462, 4195332, 6291462, 2099202, 1051649,
+  3072, 2099202, 5243909, 2099202, 6291462, 1051649, 4195332, 6291462, 2099202, 5243909, 3072, 2099202, 3147779, 4195332, 4195332, 2099202, 3147779, 7340039, 1051649, 4195332, 5243909, 3147779, 7340039, 5243909, 3147779, 2099202, 7340039, 6291462, 5243909, 3147779, 3072, 4195332, 3072, 3147779, 2099202, 7340039, 3072, 1051649, 5243909, 3147779, 6291462, 2099202, 3147779, 6291462, 1051649, 4195332, 2099202, 1051649, 5243909, 3147779, 2099202, 6291462, 3147779, 5243909, 6291462, 1051649, 4195332, 3072, 6291462, 3147779, 6291462, 1051649, 4195332, 3147779, 5243909, 1051649, 2099202, 3147779, 7340039, 1051649, 4195332, 6291462, 2099202, 4195332, 3147779, 3072, 5243909, 2099202, 4195332, 2099202, 3147779, 5243909, 3147779, 4195332, 2099202, 6291462, 3147779, 3072, 7340039, 1051649, 5243909, 2099202, 3147779, 6291462, 2099202, 7340039, 3147779, 4195332, 5243909, 2099202, 6291462, 3147779, 3147779, 1051649, 5243909, 2099202, 4195332, 2099202, 4195332, 3072, 4195332, 1051649, 1051649, 7340039, 3072, 2099202, 1051649, 3072, 7340039, 1051649, 6291462, 3147779, 5243909, 3147779, 1051649, 3072, 3147779, 6291462,
+  5243909, 3147779, 7340039, 3072, 4195332, 7340039, 3147779, 1051649, 7340039, 1051649, 6291462, 7340039, 1051649, 6291462, 1051649, 6291462, 3072, 5243909, 3147779, 6291462, 3072, 4195332, 2099202, 3072, 6291462, 4195332, 3072, 2099202, 1051649, 7340039, 6291462, 1051649, 6291462, 6291462, 5243909, 3147779, 4195332, 7340039, 1051649, 4195332, 1051649, 7340039, 4195332, 1051649, 7340039, 3147779, 7340039, 5243909, 1051649, 6291462, 5243909, 3072, 4195332, 2099202, 3072, 2099202, 7340039, 3147779, 1051649, 5243909, 3072, 6291462, 5243909, 3072, 6291462, 4195332, 6291462, 7340039, 3072, 5243909, 2099202, 3072, 7340039, 3147779, 6291462, 4195332, 7340039, 1051649, 7340039, 3147779, 5243909, 1051649, 7340039, 3072, 5243909, 1051649, 7340039, 5243909, 3147779, 4195332, 3072, 7340039, 5243909, 1051649, 4195332, 3072, 6291462, 1051649, 7340039, 3072, 4195332, 1051649, 5243909, 6291462, 3072, 6291462, 3147779, 3072, 7340039, 6291462, 3147779, 7340039, 5243909, 3147779, 4195332, 5243909, 6291462, 3147779, 5243909, 4195332, 2099202, 7340039, 3072, 7340039, 5243909, 4195332, 7340039, 2099202,
+  3072, 6291462, 1051649, 6291462, 2099202, 5243909, 3072, 5243909, 3147779, 2099202, 5243909, 4195332, 3072, 5243909, 2099202, 3147779, 7340039, 1051649, 4195332, 2099202, 5243909, 6291462, 3147779, 7340039, 1051649, 6291462, 3147779, 5243909, 4195332, 2099202, 2099202, 4195332, 3147779, 1051649, 2099202, 3072, 6291462, 2099202, 4195332, 2099202, 6291462, 3072, 3147779, 5243909, 2099202, 4195332, 3072, 3147779, 4195332, 3072, 7340039, 1051649, 7340039, 4195332, 7340039, 3147779, 5243909, 2099202, 4195332, 7340039, 3147779, 2099202, 1051649, 7340039, 2099202, 3072, 2099202, 2099202, 4195332, 1051649, 7340039, 3147779, 5243909, 1051649, 1051649, 5243909, 2099202, 4195332, 3072, 6291462, 3072, 4195332, 1051649, 6291462, 3147779, 4195332, 2099202, 3072, 6291462, 1051649, 6291462, 4195332, 3147779, 3072, 7340039, 5243909, 1051649, 4195332, 2099202, 6291462, 2099202, 7340039, 3072, 4195332, 4195332, 1051649, 7340039, 5243909, 2099202, 1051649, 5243909, 3072, 4195332, 3072, 6291462, 1051649, 2099202, 6291462, 1051649, 5243909, 3072, 4195332, 2099202, 4195332, 3072, 3147779, 1051649, 4195332,
+  6291462, 4195332, 3147779, 1051649, 6291462, 1051649, 4195332, 6291462, 3072, 7340039, 3072, 2099202, 6291462, 4195332, 7340039, 1051649, 5243909, 3147779, 7340039, 1051649, 6291462, 3072, 3147779, 4195332, 2099202, 5243909, 3072, 7340039, 3072, 4195332, 7340039, 3072, 5243909, 7340039, 4195332, 5243909, 3147779, 5243909, 3072, 7340039, 2099202, 5243909, 6291462, 3072, 4195332, 7340039, 6291462, 2099202, 7340039, 2099202, 5243909, 3147779, 4195332, 3072, 2099202, 5243909, 3072, 6291462, 2099202, 3072, 5243909, 4195332, 6291462, 3147779, 4195332, 7340039, 5243909, 3147779, 6291462, 4195332, 3072, 6291462, 3147779, 5243909, 7340039, 3072, 6291462, 2099202, 5243909, 3147779, 7340039, 2099202, 6291462, 2099202, 7340039, 1051649, 4195332, 7340039, 2099202, 4195332, 2099202, 3072, 6291462, 5243909, 3147779, 2099202, 3147779, 6291462, 3072, 3147779, 5243909, 2099202, 4195332, 7340039, 2099202, 5243909, 3147779, 1051649, 6291462, 4195332, 2099202, 6291462, 3147779, 7340039, 3147779, 7340039, 4195332, 3072, 7340039, 2099202, 6291462, 7340039, 1051649, 6291462, 2099202, 7340039, 5243909, 2099202,
+  2099202, 3072, 7340039, 5243909, 3147779, 7340039, 3072, 2099202, 5243909, 3147779, 4195332, 7340039, 1051649, 3147779, 3072, 6291462, 1051649, 6291462, 3072, 4195332, 2099202, 7340039, 1051649, 5243909, 1051649, 6291462, 2099202, 3147779, 6291462, 3147779, 1051649, 6291462, 2099202, 3072, 6291462, 1051649, 7340039, 1051649, 6291462, 3147779, 4195332, 3072, 3147779, 7340039, 1051649, 2099202, 1051649, 5243909, 3147779, 3072, 4195332, 1051649, 6291462, 6291462, 1051649, 7340039, 1051649, 4195332, 7340039, 4195332, 1051649, 7340039, 3072, 3147779, 2099202, 3072, 5243909, 1051649, 1051649, 5243909, 2099202, 4195332, 1051649, 2099202, 3147779, 4195332, 1051649, 6291462, 3147779, 1051649, 2099202, 5243909, 3072, 4195332, 3072, 5243909, 3147779, 1051649, 6291462, 3072, 7340039, 5243909, 2099202, 4195332, 3072, 7340039, 5243909, 1051649, 4195332, 7340039, 3072, 6291462, 3147779, 3072, 2099202, 6291462, 3072, 7340039, 4195332, 3072, 7340039, 1051649, 2099202, 1051649, 1051649, 4195332, 3147779, 5243909, 4195332, 3072, 3147779, 1051649, 5243909, 3147779, 6291462, 1051649, 3147779, 7340039,
+  6291462, 4195332, 2099202, 4195332, 3072, 5243909, 6291462, 4195332, 6291462, 1051649, 3147779, 6291462, 3147779, 7340039, 4195332, 2099202, 5243909, 2099202, 4195332, 7340039, 2099202, 5243909, 3147779, 3072, 7340039, 4195332, 3147779, 5243909, 1051649, 2099202, 6291462, 4195332, 5243909, 1051649, 3147779, 4195332, 1051649, 3147779, 5243909, 3072, 5243909, 6291462, 2099202, 5243909, 3147779, 5243909, 6291462, 1051649, 7340039, 6291462, 2099202, 7340039, 3072, 3147779, 5243909, 2099202, 4195332, 3147779, 1051649, 6291462, 2099202, 5243909, 1051649, 6291462, 6291462, 4195332, 7340039, 3147779, 7340039, 3147779, 7340039, 3072, 5243909, 7340039, 4195332, 7340039, 2099202, 5243909, 3072, 7340039, 6291462, 1051649, 7340039, 4195332, 6291462, 2099202, 6291462, 3147779, 4195332, 5243909, 1051649, 3147779, 6291462, 1051649, 6291462, 4195332, 2099202, 7340039, 3147779, 1051649, 5243909, 4195332, 2099202, 6291462, 4195332, 3147779, 5243909, 1051649, 3147779, 6291462, 3147779, 4195332, 5243909, 6291462, 7340039, 3072, 6291462, 1051649, 7340039, 2099202, 6291462, 6291462, 3072, 4195332, 1051649, 5243909, 3147779, 3072,
+  5243909, 1051649, 7340039, 3147779, 2099202, 3147779, 2099202, 1051649, 4195332, 3072, 5243909, 1051649, 3072, 5243909, 1051649, 5243909, 3072, 6291462, 3147779, 3072, 4195332, 1051649, 6291462, 4195332, 2099202, 1051649, 6291462, 3072, 5243909, 7340039, 1051649, 3147779, 3072, 7340039, 2099202, 5243909, 3147779, 6291462, 2099202, 7340039, 2099202, 1051649, 7340039, 3072, 6291462, 3072, 4195332, 3147779, 3072, 2099202, 4195332, 5243909, 2099202, 6291462, 3147779, 3072, 6291462, 7340039, 3147779, 4195332, 3072, 7340039, 3147779, 5243909, 3072, 2099202, 1051649, 4195332, 3072, 6291462, 1051649, 5243909, 2099202, 1051649, 3072, 3147779, 6291462, 2099202, 4195332, 4195332, 3072, 5243909, 3147779, 1051649, 1051649, 5243909, 3072, 5243909, 3072, 3147779, 7340039, 3072, 3147779, 7340039, 2099202, 1051649, 3072, 5243909, 2099202, 6291462, 3147779, 3072, 7340039, 1051649, 5243909, 3072, 3147779, 7340039, 3072, 5243909, 2099202, 7340039, 3072, 4195332, 2099202, 3147779, 5243909, 2099202, 3147779, 5243909, 1051649, 3147779, 7340039, 2099202, 6291462, 1051649, 7340039, 3147779,
+  2099202, 6291462, 1051649, 5243909, 7340039, 3072, 7340039, 6291462, 2099202, 7340039, 2099202, 4195332, 7340039, 2099202, 6291462, 3147779, 4195332, 7340039, 1051649, 6291462, 7340039, 5243909, 3147779, 3072, 6291462, 3147779, 7340039, 2099202, 4195332, 3072, 4195332, 7340039, 6291462, 4195332, 5243909, 3072, 7340039, 3072, 4195332, 1051649, 5243909, 4195332, 2099202, 4195332, 3147779, 1051649, 7340039, 3147779, 5243909, 4195332, 1051649, 6291462, 3072, 4195332, 1051649, 7340039, 2099202, 3072, 5243909, 2099202, 5243909, 1051649, 4195332, 2099202, 7340039, 5243909, 3147779, 6291462, 5243909, 1051649, 4195332, 3147779, 7340039, 4195332, 6291462, 3072, 5243909, 1051649, 3147779, 6291462, 3147779, 2099202, 7340039, 5243909, 3147779, 4195332, 7340039, 2099202, 7340039, 2099202, 2099202, 6291462, 4195332, 1051649, 5243909, 7340039, 3147779, 4195332, 6291462, 3072, 4195332, 7340039, 1051649, 6291462, 2099202, 7340039, 1051649, 4195332, 6291462, 3147779, 1051649, 5243909, 1051649, 3147779, 3072, 7340039, 1051649, 6291462, 3072, 7340039, 4195332, 4195332, 2099202, 5243909, 3072, 4195332, 3072, 5243909,
+  3072, 7340039, 2099202, 4195332, 1051649, 5243909, 1051649, 4195332, 3072, 3147779, 6291462, 3147779, 3072, 4195332, 1051649, 7340039, 2099202, 3072, 4195332, 3147779, 2099202, 3072, 6291462, 4195332, 5243909, 1051649, 4195332, 2099202, 7340039, 5243909, 3147779, 1051649, 2099202, 1051649, 7340039, 3147779, 2099202, 6291462, 4195332, 7340039, 3072, 7340039, 1051649, 5243909, 7340039, 5243909, 1051649, 2099202, 6291462, 3072, 7340039, 1051649, 7340039, 3147779, 5243909, 2099202, 4195332, 6291462, 1051649, 7340039, 3147779, 3147779, 6291462, 3072, 4195332, 1051649, 7340039, 3072, 2099202, 7340039, 3072, 6291462, 3072, 2099202, 5243909, 3147779, 7340039, 4195332, 7340039, 1051649, 4195332, 6291462, 2099202, 3072, 7340039, 1051649, 4195332, 3147779, 1051649, 6291462, 5243909, 1051649, 5243909, 2099202, 3147779, 6291462, 3072, 4195332, 1051649, 7340039, 2099202, 5243909, 3147779, 1051649, 5243909, 3147779, 6291462, 2099202, 1051649, 4195332, 6291462, 2099202, 4195332, 6291462, 5243909, 2099202, 4195332, 3147779, 6291462, 2099202, 3072, 5243909, 3072, 6291462, 4195332, 7340039, 3147779, 4195332,
+  5243909, 3147779, 3072, 4195332, 6291462, 3147779, 4195332, 7340039, 3147779, 5243909, 1051649, 5243909, 6291462, 3147779, 6291462, 3072, 5243909, 4195332, 7340039, 1051649, 3147779, 7340039, 2099202, 5243909, 1051649, 7340039, 3072, 5243909, 3072, 2099202, 5243909, 3072, 7340039, 4195332, 1051649, 6291462, 4195332, 3072, 1051649, 3147779, 2099202, 6291462, 3147779, 2099202, 3072, 3147779, 6291462, 5243909, 3147779, 2099202, 5243909, 3147779, 3147779, 5243909, 1051649, 6291462, 4195332, 3072, 5243909, 2099202, 3072, 5243909, 1051649, 6291462, 3147779, 5243909, 2099202, 4195332, 5243909, 3147779, 5243909, 2099202, 3147779, 7340039, 1051649, 6291462, 3072, 1051649, 5243909, 3072, 7340039, 3072, 5243909, 3147779, 6291462, 3072, 6291462, 2099202, 5243909, 4195332, 3072, 3147779, 6291462, 3072, 7340039, 1051649, 5243909, 2099202, 5243909, 3147779, 5243909, 3072, 4195332, 6291462, 3072, 6291462, 3072, 4195332, 5243909, 2099202, 3072, 7340039, 5243909, 3072, 2099202, 7340039, 3072, 5243909, 1051649, 4195332, 6291462, 2099202, 7340039, 1051649, 3147779, 2099202, 6291462, 1051649,
+  7340039, 3147779, 6291462, 2099202, 3072, 7340039, 2099202, 3072, 6291462, 1051649, 6291462, 2099202, 4195332, 1051649, 2099202, 6291462, 3147779, 2099202, 3072, 5243909, 5243909, 3147779, 1051649, 7340039, 2099202, 3147779, 6291462, 4195332, 3147779, 6291462, 3147779, 6291462, 2099202, 3147779, 5243909, 3072, 3147779, 7340039, 5243909, 6291462, 5243909, 3072, 4195332, 7340039, 6291462, 2099202, 4195332, 3072, 6291462, 4195332, 6291462, 1051649, 6291462, 3072, 7340039, 3072, 3147779, 7340039, 3147779, 4195332, 6291462, 3147779, 7340039, 2099202, 6291462, 3072, 4195332, 7340039, 1051649, 6291462, 3072, 7340039, 1051649, 5243909, 4195332, 2099202, 4195332, 6291462, 2099202, 6291462, 3147779, 2099202, 7340039, 4195332, 1051649, 4195332, 5243909, 3072, 7340039, 1051649, 6291462, 7340039, 2099202, 5243909, 3147779, 4195332, 2099202, 7340039, 3072, 6291462, 1051649, 3147779, 7340039, 2099202, 3147779, 5243909, 2099202, 7340039, 3147779, 6291462, 3147779, 4195332, 1051649, 7340039, 1051649, 4195332, 6291462, 3147779, 7340039, 3147779, 1051649, 5243909, 3147779, 4195332, 6291462, 1051649, 5243909, 2099202,
+  1051649, 5243909, 1051649, 6291462, 3147779, 5243909, 1051649, 5243909, 3147779, 3072, 4195332, 7340039, 3072, 7340039, 5243909, 3072, 7340039, 3147779, 6291462, 2099202, 1051649, 6291462, 4195332, 4195332, 3072, 5243909, 1051649, 1051649, 7340039, 3072, 1051649, 4195332, 7340039, 1051649, 2099202, 6291462, 2099202, 1051649, 3147779, 3072, 1051649, 6291462, 2099202, 1051649, 4195332, 1051649, 5243909, 7340039, 1051649, 2099202, 3072, 7340039, 4195332, 2099202, 3147779, 4195332, 5243909, 1051649, 3072, 7340039, 1051649, 4195332, 3072, 4195332, 2099202, 7340039, 3147779, 1051649, 2099202, 6291462, 4195332, 2099202, 5243909, 3147779, 3072, 7340039, 3147779, 1051649, 3147779, 5243909, 1051649, 4195332, 3072, 6291462, 2099202, 7340039, 2099202, 4195332, 1051649, 5243909, 3147779, 3072, 4195332, 1051649, 7340039, 3072, 6291462, 4195332, 3147779, 2099202, 7340039, 6291462, 1051649, 4195332, 7340039, 2099202, 4195332, 3072, 5243909, 3072, 7340039, 1051649, 4195332, 3147779, 5243909, 2099202, 3072, 2099202, 3072, 6291462, 3147779, 7340039, 2099202, 3072, 7340039, 3147779, 3072, 6291462,
+  4195332, 3072, 4195332, 1051649, 3147779, 4195332, 6291462, 2099202, 7340039, 5243909, 3147779, 1051649, 3147779, 5243909, 2099202, 4195332, 1051649, 5243909, 1051649, 4195332, 6291462, 3072, 2099202, 6291462, 2099202, 3147779, 6291462, 4195332, 2099202, 5243909, 6291462, 3147779, 3072, 5243909, 5243909, 4195332, 7340039, 4195332, 6291462, 4195332, 7340039, 3147779, 4195332, 5243909, 3147779, 7340039, 3072, 3147779, 4195332, 7340039, 2099202, 5243909, 1051649, 5243909, 7340039, 1051649, 6291462, 3147779, 5243909, 2099202, 1051649, 6291462, 5243909, 1051649, 3147779, 6291462, 3072, 5243909, 4195332, 3072, 3147779, 6291462, 1051649, 6291462, 2099202, 5243909, 3072, 7340039, 5243909, 3072, 7340039, 3147779, 5243909, 1051649, 4195332, 3072, 6291462, 3147779, 7340039, 2099202, 4195332, 6291462, 3147779, 5243909, 2099202, 4195332, 1051649, 1051649, 5243909, 4195332, 3072, 4195332, 3147779, 5243909, 3072, 6291462, 1051649, 7340039, 3147779, 2099202, 5243909, 2099202, 5243909, 6291462, 3072, 7340039, 5243909, 7340039, 4195332, 5243909, 1051649, 3072, 6291462, 4195332, 1051649, 7340039, 5243909, 2099202,
+  7340039, 5243909, 4195332, 7340039, 6291462, 3072, 1051649, 4195332, 1051649, 5243909, 2099202, 6291462, 4195332, 1051649, 7340039, 3147779, 6291462, 3147779, 7340039, 3072, 3147779, 5243909, 7340039, 1051649, 5243909, 7340039, 3072, 7340039, 3147779, 1051649, 4195332, 6291462, 2099202, 7340039, 2099202, 3072, 3147779, 3072, 2099202, 5243909, 1051649, 5243909, 3072, 7340039, 3072, 3147779, 6291462, 1051649, 6291462, 1051649, 3147779, 4195332, 6291462, 3072, 2099202, 4195332, 2099202, 6291462, 3072, 5243909, 7340039, 2099202, 3147779, 7340039, 5243909, 1051649, 3147779, 6291462, 2099202, 7340039, 1051649, 3147779, 4195332, 1051649, 7340039, 1051649, 5243909, 2099202, 2099202, 5243909, 4195332, 1051649, 3147779, 7340039, 5243909, 3147779, 6291462, 3072, 3147779, 7340039, 3072, 1051649, 6291462, 3072, 7340039, 3147779, 6291462, 3147779, 7340039, 1051649, 7340039, 3072, 6291462, 1051649, 5243909, 2099202, 3147779, 5243909, 1051649, 7340039, 1051649, 6291462, 3072, 2099202, 4195332, 4195332, 1051649, 1051649, 3147779, 2099202, 5243909, 4195332, 2099202, 5243909, 3147779, 1051649, 4195332, 2099202,
+  3072, 3147779, 2099202, 3072, 2099202, 6291462, 5243909, 7340039, 2099202, 3072, 7340039, 1051649, 6291462, 2099202, 4195332, 3072, 2099202, 3072, 5243909, 2099202, 6291462, 1051649, 3147779, 4195332, 3072, 2099202, 5243909, 1051649, 5243909, 7340039, 2099202, 3072, 5243909, 1051649, 4195332, 6291462, 3147779, 5243909, 7340039, 2099202, 6291462, 3147779, 2099202, 5243909, 2099202, 5243909, 4195332, 3072, 5243909, 3147779, 7340039, 3072, 2099202, 5243909, 7340039, 3072, 5243909, 1051649, 6291462, 4195332, 3072, 4195332, 5243909, 3072, 2099202, 6291462, 4195332, 3072, 5243909, 4195332, 5243909, 7340039, 3072, 6291462, 4195332, 3147779, 6291462, 4195332, 6291462, 1051649, 6291462, 2099202, 6291462, 3072, 2099202, 3147779, 1051649, 4195332, 6291462, 2099202, 5243909, 3147779, 5243909, 2099202, 4195332, 3072, 2099202, 5243909, 1051649, 4195332, 2099202, 6291462, 2099202, 4195332, 3072, 7340039, 4195332, 3072, 6291462, 4195332, 6291462, 4195332, 3147779, 7340039, 1051649, 6291462, 3147779, 6291462, 7340039, 3072, 7340039, 3147779, 6291462, 3072, 7340039, 3072, 5243909, 7340039,
+  1051649, 6291462, 5243909, 5243909, 7340039, 3147779, 3072, 2099202, 4195332, 6291462, 4195332, 3147779, 5243909, 3072, 5243909, 7340039, 5243909, 6291462, 4195332, 7340039, 3147779, 3072, 5243909, 5243909, 7340039, 4195332, 2099202, 6291462, 3147779, 3072, 4195332, 7340039, 3147779, 6291462, 2099202, 1051649, 5243909, 1051649, 3072, 4195332, 3072, 6291462, 1051649, 7340039, 3147779, 1051649, 6291462, 2099202, 7340039, 1051649, 2099202, 4195332, 6291462, 1051649, 3147779, 4195332, 7340039, 3147779, 2099202, 7340039, 1051649, 7340039, 1051649, 6291462, 3147779, 7340039, 1051649, 7340039, 3147779, 1051649, 5243909, 2099202, 2099202, 4195332, 6291462, 3072, 3147779, 3072, 3147779, 3072, 3147779, 5243909, 4195332, 2099202, 6291462, 7340039, 5243909, 3072, 4195332, 1051649, 3147779, 7340039, 1051649, 6291462, 2099202, 6291462, 5243909, 3072, 6291462, 5243909, 3072, 3147779, 5243909, 7340039, 3147779, 2099202, 6291462, 2099202, 3147779, 1051649, 2099202, 3072, 7340039, 3147779, 5243909, 2099202, 3072, 4195332, 2099202, 4195332, 3147779, 1051649, 5243909, 2099202, 4195332, 6291462, 2099202, 2099202,
+  6291462, 4195332, 3072, 3147779, 1051649, 4195332, 7340039, 5243909, 3147779, 3072, 7340039, 3072, 3147779, 6291462, 2099202, 1051649, 1051649, 4195332, 2099202, 1051649, 4195332, 7340039, 2099202, 1051649, 1051649, 3147779, 6291462, 3072, 5243909, 6291462, 2099202, 1051649, 4195332, 3072, 6291462, 7340039, 3147779, 6291462, 4195332, 7340039, 3147779, 2099202, 6291462, 3072, 4195332, 7340039, 3147779, 3072, 4195332, 6291462, 5243909, 3072, 7340039, 4195332, 6291462, 1051649, 2099202, 6291462, 3072, 3147779, 5243909, 3147779, 4195332, 2099202, 3072, 4195332, 2099202, 5243909, 1051649, 7340039, 3072, 4195332, 7340039, 1051649, 1051649, 7340039, 2099202, 6291462, 7340039, 4195332, 7340039, 1051649, 3072, 7340039, 1051649, 4195332, 2099202, 7340039, 5243909, 3147779, 6291462, 1051649, 4195332, 3072, 7340039, 3147779, 1051649, 4195332, 3147779, 2099202, 7340039, 5243909, 1051649, 1051649, 6291462, 4195332, 3072, 5243909, 7340039, 3147779, 5243909, 4195332, 1051649, 5243909, 3072, 6291462, 3147779, 5243909, 1051649, 6291462, 1051649, 7340039, 3147779, 5243909, 4195332, 3072, 6291462, 3147779,
+  1051649, 4195332, 1051649, 7340039, 6291462, 4195332, 3072, 2099202, 6291462, 1051649, 5243909, 2099202, 5243909, 2099202, 4195332, 7340039, 3147779, 7340039, 3072, 5243909, 6291462, 3072, 4195332, 6291462, 6291462, 3072, 7340039, 4195332, 2099202, 1051649, 7340039, 3147779, 7340039, 2099202, 4195332, 3072, 5243909, 2099202, 3147779, 1051649, 5243909, 4195332, 3147779, 6291462, 2099202, 1051649, 5243909, 7340039, 3147779, 3072, 2099202, 5243909, 2099202, 3147779, 3072, 5243909, 2099202, 4195332, 5243909, 1051649, 6291462, 1051649, 6291462, 3147779, 7340039, 4195332, 6291462, 3072, 4195332, 3147779, 6291462, 2099202, 3147779, 5243909, 2099202, 4195332, 5243909, 2099202, 1051649, 4195332, 2099202, 6291462, 5243909, 3147779, 5243909, 3072, 5243909, 2099202, 1051649, 6291462, 3072, 5243909, 3147779, 5243909, 2099202, 5243909, 7340039, 2099202, 6291462, 1051649, 3147779, 3072, 7340039, 4195332, 5243909, 2099202, 7340039, 4195332, 1051649, 6291462, 3072, 6291462, 3147779, 2099202, 7340039, 2099202, 6291462, 1051649, 7340039, 3072, 4195332, 5243909, 2099202, 3072, 7340039, 3147779, 1051649, 5243909,
+  7340039, 3147779, 5243909, 3147779, 1051649, 2099202, 6291462, 1051649, 7340039, 3147779, 4195332, 7340039, 3072, 6291462, 3147779, 3072, 6291462, 2099202, 4195332, 1051649, 3147779, 3147779, 5243909, 2099202, 3147779, 4195332, 1051649, 3147779, 7340039, 5243909, 1051649, 4195332, 3072, 5243909, 1051649, 4195332, 7340039, 3072, 6291462, 7340039, 3072, 7340039, 1051649, 4195332, 7340039, 2099202, 4195332, 1051649, 6291462, 3147779, 7340039, 1051649, 6291462, 6291462, 4195332, 3147779, 7340039, 3072, 7340039, 3147779, 2099202, 7340039, 4195332, 3072, 5243909, 1051649, 2099202, 5243909, 3072, 7340039, 1051649, 5243909, 3072, 6291462, 4195332, 3072, 7340039, 3147779, 5243909, 6291462, 3072, 4195332, 2099202, 1051649, 7340039, 2099202, 4195332, 7340039, 3072, 3147779, 4195332, 2099202, 7340039, 1051649, 4195332, 3072, 6291462, 3072, 7340039, 4195332, 6291462, 2099202, 4195332, 2099202, 3072, 6291462, 1051649, 5243909, 3072, 2099202, 5243909, 1051649, 7340039, 4195332, 1051649, 5243909, 3072, 4195332, 3147779, 3147779, 7340039, 3072, 4195332, 6291462, 2099202, 5243909, 7340039, 2099202,
+  3072, 6291462, 3072, 4195332, 5243909, 7340039, 2099202, 5243909, 4195332, 1051649, 6291462, 1051649, 4195332, 1051649, 2099202, 5243909, 2099202, 5243909, 3147779, 7340039, 6291462, 1051649, 7340039, 3072, 6291462, 2099202, 5243909, 6291462, 3072, 3147779, 5243909, 2099202, 6291462, 3147779, 7340039, 1051649, 6291462, 2099202, 4195332, 3147779, 2099202, 5243909, 1051649, 5243909, 3072, 5243909, 4195332, 3072, 5243909, 2099202, 4195332, 3147779, 2099202, 3072, 1051649, 6291462, 3147779, 4195332, 2099202, 5243909, 3072, 5243909, 1051649, 7340039, 2099202, 6291462, 3147779, 2099202, 6291462, 3147779, 3147779, 4195332, 7340039, 1051649, 6291462, 3147779, 1051649, 6291462, 3072, 2099202, 4195332, 7340039, 3072, 6291462, 3147779, 5243909, 1051649, 4195332, 6291462, 2099202, 7340039, 4195332, 3072, 7340039, 6291462, 2099202, 4195332, 3147779, 1051649, 4195332, 3072, 3147779, 6291462, 1051649, 6291462, 3147779, 3147779, 7340039, 4195332, 5243909, 1051649, 6291462, 4195332, 3072, 5243909, 3147779, 7340039, 2099202, 6291462, 1051649, 5243909, 2099202, 6291462, 1051649, 4195332, 3072, 3147779, 4195332,
+  5243909, 2099202, 7340039, 2099202, 1051649, 4195332, 3147779, 3072, 3147779, 7340039, 3072, 5243909, 3147779, 7340039, 6291462, 3072, 7340039, 4195332, 3072, 2099202, 4195332, 2099202, 4195332, 5243909, 7340039, 3072, 4195332, 2099202, 5243909, 2099202, 7340039, 3072, 3147779, 5243909, 3072, 4195332, 3147779, 5243909, 1051649, 5243909, 1051649, 3147779, 6291462, 2099202, 6291462, 3147779, 3147779, 6291462, 1051649, 7340039, 3072, 6291462, 3147779, 7340039, 5243909, 3072, 6291462, 1051649, 4195332, 1051649, 6291462, 4195332, 2099202, 3147779, 5243909, 3072, 7340039, 5243909, 1051649, 6291462, 3072, 6291462, 3072, 4195332, 2099202, 5243909, 7340039, 4195332, 2099202, 7340039, 1051649, 2099202, 5243909, 4195332, 3072, 2099202, 7340039, 3072, 5243909, 1051649, 1051649, 3147779, 5243909, 1051649, 3147779, 5243909, 1051649, 6291462, 5243909, 2099202, 5243909, 7340039, 1051649, 5243909, 4195332, 1051649, 5243909, 3072, 2099202, 7340039, 2099202, 3147779, 3072, 6291462, 3147779, 6291462, 1051649, 5243909, 3072, 6291462, 2099202, 7340039, 1051649, 3147779, 6291462, 3147779, 7340039, 2099202,
+  1051649, 4195332, 3147779, 6291462, 4195332, 3072, 7340039, 5243909, 2099202, 6291462, 2099202, 5243909, 1051649, 4195332, 1051649, 5243909, 3147779, 1051649, 7340039, 6291462, 3072, 7340039, 3072, 1051649, 3147779, 3147779, 6291462, 1051649, 7340039, 4195332, 4195332, 2099202, 6291462, 1051649, 7340039, 4195332, 3072, 7340039, 2099202, 4195332, 7340039, 5243909, 3072, 4195332, 1051649, 7340039, 3072, 7340039, 4195332, 2099202, 5243909, 1051649, 4195332, 3072, 4195332, 3147779, 1051649, 7340039, 2099202, 7340039, 3147779, 3072, 6291462, 1051649, 6291462, 2099202, 4195332, 3072, 4195332, 2099202, 5243909, 2099202, 5243909, 3147779, 7340039, 3072, 3147779, 1051649, 4195332, 5243909, 3147779, 6291462, 3147779, 1051649, 7340039, 5243909, 3147779, 6291462, 3147779, 6291462, 5243909, 2099202, 6291462, 2099202, 4195332, 3072, 7340039, 3147779, 1051649, 7340039, 3072, 3147779, 4195332, 3072, 3147779, 7340039, 2099202, 6291462, 3147779, 3072, 7340039, 4195332, 3147779, 7340039, 1051649, 2099202, 4195332, 2099202, 7340039, 1051649, 4195332, 3072, 4195332, 6291462, 1051649, 5243909, 3072, 6291462,
+  5243909, 1051649, 6291462, 3072, 3147779, 7340039, 1051649, 4195332, 1051649, 3147779, 6291462, 2099202, 7340039, 3072, 3147779, 6291462, 3072, 6291462, 3147779, 2099202, 3147779, 4195332, 6291462, 5243909, 3072, 7340039, 1051649, 4195332, 3072, 6291462, 1051649, 5243909, 3072, 5243909, 2099202, 3147779, 6291462, 2099202, 6291462, 3072, 2099202, 3147779, 7340039, 4195332, 1051649, 5243909, 2099202, 4195332, 3072, 6291462, 1051649, 7340039, 2099202, 5243909, 2099202, 7340039, 5243909, 3147779, 4195332, 3072, 6291462, 1051649, 4195332, 5243909, 3072, 6291462, 3147779, 7340039, 1051649, 7340039, 2099202, 7340039, 1051649, 2099202, 5243909, 1051649, 6291462, 6291462, 3072, 5243909, 3072, 7340039, 3072, 6291462, 3147779, 6291462, 1051649, 2099202, 4195332, 3072, 4195332, 7340039, 3072, 5243909, 7340039, 3147779, 3072, 5243909, 3147779, 2099202, 6291462, 4195332, 7340039, 2099202, 6291462, 3072, 5243909, 1051649, 6291462, 4195332, 2099202, 5243909, 3072, 5243909, 4195332, 7340039, 3072, 6291462, 3147779, 3147779, 7340039, 5243909, 3147779, 3072, 7340039, 1051649, 4195332, 3147779,
+  3072, 7340039, 2099202, 5243909, 5243909, 2099202, 6291462, 2099202, 7340039, 4195332, 3072, 5243909, 3147779, 4195332, 6291462, 2099202, 5243909, 4195332, 1051649, 5243909, 6291462, 1051649, 2099202, 4195332, 4195332, 2099202, 6291462, 3147779, 6291462, 3147779, 2099202, 7340039, 3147779, 4195332, 1051649, 6291462, 3072, 4195332, 3147779, 5243909, 6291462, 3072, 2099202, 6291462, 3147779, 7340039, 1051649, 5243909, 3147779, 5243909, 4195332, 3147779, 7340039, 3072, 6291462, 2099202, 3072, 6291462, 2099202, 5243909, 4195332, 3147779, 7340039, 2099202, 7340039, 2099202, 5243909, 1051649, 4195332, 5243909, 3072, 3147779, 4195332, 7340039, 3072, 3147779, 4195332, 2099202, 7340039, 3147779, 1051649, 5243909, 2099202, 4195332, 1051649, 3072, 4195332, 7340039, 2099202, 7340039, 3147779, 1051649, 6291462, 3147779, 1051649, 7340039, 5243909, 2099202, 4195332, 7340039, 4195332, 3072, 2099202, 5243909, 1051649, 4195332, 7340039, 3147779, 3072, 6291462, 3147779, 1051649, 7340039, 2099202, 3072, 5243909, 4195332, 1051649, 5243909, 3072, 3147779, 2099202, 5243909, 4195332, 2099202, 6291462, 2099202, 7340039,
+  5243909, 3147779, 1051649, 7340039, 3072, 4195332, 3072, 5243909, 3072, 5243909, 1051649, 7340039, 3072, 5243909, 1051649, 2099202, 7340039, 1051649, 7340039, 3147779, 3072, 5243909, 7340039, 3072, 7340039, 1051649, 5243909, 2099202, 1051649, 5243909, 1051649, 3072, 6291462, 2099202, 7340039, 3147779, 6291462, 1051649, 7340039, 1051649, 1051649, 7340039, 5243909, 3072, 2099202, 4195332, 6291462, 1051649, 6291462, 3072, 2099202, 6291462, 1051649, 4195332, 1051649, 4195332, 7340039, 1051649, 2099202, 7340039, 1051649, 5243909, 3072, 3147779, 4195332, 1051649, 3147779, 6291462, 2099202, 4195332, 3147779, 6291462, 3072, 3147779, 6291462, 5243909, 3072, 4195332, 1051649, 6291462, 4195332, 6291462, 1051649, 3147779, 5243909, 7340039, 3147779, 3072, 5243909, 1051649, 4195332, 6291462, 2099202, 4195332, 3072, 2099202, 4195332, 1051649, 6291462, 3072, 1051649, 5243909, 6291462, 3147779, 7340039, 3147779, 2099202, 6291462, 4195332, 2099202, 7340039, 3147779, 4195332, 6291462, 4195332, 2099202, 3147779, 6291462, 3072, 6291462, 4195332, 7340039, 1051649, 6291462, 3072, 5243909, 2099202, 4195332,
+  3147779, 3072, 6291462, 1051649, 3147779, 5243909, 6291462, 3147779, 7340039, 3147779, 6291462, 2099202, 4195332, 2099202, 7340039, 3147779, 3072, 5243909, 3147779, 6291462, 2099202, 4195332, 1051649, 3147779, 5243909, 4195332, 3072, 6291462, 3147779, 7340039, 4195332, 6291462, 3147779, 5243909, 3072, 5243909, 1051649, 4195332, 2099202, 4195332, 5243909, 3147779, 1051649, 6291462, 6291462, 3072, 2099202, 5243909, 3147779, 7340039, 4195332, 3072, 7340039, 3147779, 2099202, 5243909, 3147779, 5243909, 6291462, 3072, 3147779, 5243909, 6291462, 1051649, 5243909, 3147779, 7340039, 3072, 6291462, 2099202, 7340039, 1051649, 5243909, 2099202, 1051649, 7340039, 2099202, 7340039, 2099202, 5243909, 3072, 3147779, 7340039, 6291462, 3072, 2099202, 5243909, 6291462, 2099202, 4195332, 5243909, 3072, 3147779, 7340039, 5243909, 6291462, 1051649, 7340039, 2099202, 5243909, 7340039, 3147779, 3072, 6291462, 3072, 5243909, 1051649, 5243909, 3072, 6291462, 1051649, 6291462, 1051649, 3072, 6291462, 1051649, 7340039, 4195332, 2099202, 5243909, 1051649, 3072, 5243909, 2099202, 6291462, 3147779, 7340039, 1051649,
+  5243909, 7340039, 3147779, 4195332, 6291462, 2099202, 1051649, 4195332, 2099202, 5243909, 3072, 4195332, 6291462, 6291462, 1051649, 4195332, 6291462, 2099202, 1051649, 3072, 7340039, 3147779, 5243909, 7340039, 2099202, 2099202, 6291462, 1051649, 5243909, 3072, 3147779, 1051649, 6291462, 2099202, 2099202, 7340039, 3147779, 3072, 5243909, 6291462, 3072, 7340039, 4195332, 2099202, 4195332, 3147779, 7340039, 2099202, 6291462, 1051649, 3147779, 5243909, 1051649, 5243909, 6291462, 3072, 7340039, 3072, 4195332, 6291462, 4195332, 2099202, 2099202, 7340039, 3072, 6291462, 1051649, 4195332, 5243909, 3072, 5243909, 1051649, 4195332, 6291462, 4195332, 2099202, 3147779, 5243909, 3072, 3147779, 7340039, 2099202, 4195332, 2099202, 6291462, 4195332, 1051649, 1051649, 7340039, 3072, 6291462, 2099202, 6291462, 1051649, 2099202, 3072, 6291462, 4195332, 3147779, 1051649, 4195332, 2099202, 4195332, 2099202, 4195332, 2099202, 7340039, 1051649, 3147779, 5243909, 4195332, 2099202, 5243909, 5243909, 3147779, 5243909, 2099202, 3072, 7340039, 3147779, 6291462, 4195332, 3147779, 7340039, 1051649, 4195332, 3072, 6291462,
+  2099202, 4195332, 1051649, 7340039, 3072, 6291462, 3147779, 7340039, 3072, 3147779, 7340039, 1051649, 3072, 3147779, 5243909, 3072, 4195332, 6291462, 7340039, 4195332, 5243909, 1051649, 4195332, 3072, 3147779, 7340039, 4195332, 7340039, 2099202, 7340039, 4195332, 5243909, 3072, 7340039, 4195332, 3072, 5243909, 7340039, 3147779, 2099202, 5243909, 3147779, 1051649, 6291462, 3072, 4195332, 3072, 5243909, 3072, 4195332, 6291462, 2099202, 7340039, 2099202, 1051649, 5243909, 3147779, 2099202, 5243909, 1051649, 3072, 7340039, 1051649, 4195332, 4195332, 2099202, 7340039, 3147779, 1051649, 6291462, 3147779, 7340039, 3147779, 3072, 7340039, 1051649, 6291462, 4195332, 1051649, 6291462, 1051649, 5243909, 3072, 5243909, 1051649, 3147779, 7340039, 5243909, 3147779, 4195332, 2099202, 5243909, 1051649, 7340039, 4195332, 5243909, 3147779, 3072, 5243909, 6291462, 3072, 7340039, 1051649, 6291462, 7340039, 1051649, 3147779, 7340039, 4195332, 2099202, 3072, 7340039, 3147779, 2099202, 7340039, 1051649, 5243909, 3147779, 5243909, 1051649, 2099202, 6291462, 2099202, 3072, 4195332, 3147779, 7340039, 2099202,
+  1051649, 5243909, 3147779, 2099202, 5243909, 4195332, 3072, 6291462, 2099202, 5243909, 1051649, 5243909, 3147779, 7340039, 2099202, 7340039, 3147779, 1051649, 3072, 3147779, 6291462, 1051649, 2099202, 6291462, 5243909, 3072, 3147779, 3072, 5243909, 1051649, 6291462, 1051649, 4195332, 3147779, 2099202, 6291462, 1051649, 4195332, 3072, 7340039, 1051649, 2099202, 5243909, 3147779, 7340039, 1051649, 6291462, 3147779, 7340039, 1051649, 2099202, 3072, 4195332, 6291462, 3147779, 4195332, 3072, 7340039, 1051649, 3147779, 6291462, 5243909, 3147779, 6291462, 1051649, 6291462, 3072, 4195332, 7340039, 4195332, 1051649, 4195332, 6291462, 2099202, 5243909, 3147779, 3072, 4195332, 7340039, 3147779, 6291462, 4195332, 7340039, 2099202, 4195332, 6291462, 3072, 2099202, 6291462, 3072, 7340039, 3147779, 5243909, 2099202, 4195332, 1051649, 6291462, 2099202, 7340039, 2099202, 5243909, 4195332, 3147779, 5243909, 3072, 4195332, 6291462, 3072, 1051649, 5243909, 7340039, 3147779, 3072, 6291462, 3072, 4195332, 6291462, 2099202, 7340039, 4195332, 7340039, 3072, 5243909, 7340039, 1051649, 6291462, 3072, 5243909,
+  4195332, 3072, 6291462, 2099202, 7340039, 1051649, 2099202, 6291462, 3147779, 1051649, 7340039, 3147779, 6291462, 1051649, 5243909, 1051649, 6291462, 5243909, 5243909, 2099202, 3072, 4195332, 7340039, 1051649, 6291462, 2099202, 6291462, 4195332, 3147779, 3072, 3147779, 5243909, 2099202, 7340039, 1051649, 3147779, 6291462, 2099202, 6291462, 3147779, 4195332, 7340039, 4195332, 1051649, 5243909, 3147779, 5243909, 1051649, 4195332, 5243909, 7340039, 3147779, 5243909, 3072, 7340039, 2099202, 6291462, 3147779, 6291462, 4195332, 3147779, 3072, 7340039, 2099202, 5243909, 3147779, 2099202, 5243909, 3072, 2099202, 6291462, 3072, 1051649, 6291462, 2099202, 7340039, 5243909, 2099202, 3072, 5243909, 1051649, 3072, 3147779, 6291462, 1051649, 3147779, 5243909, 3147779, 5243909, 3147779, 1051649, 6291462, 3072, 5243909, 3072, 7340039, 3147779, 5243909, 1051649, 3147779, 1051649, 3072, 6291462, 2099202, 3147779, 5243909, 2099202, 4195332, 6291462, 4195332, 1051649, 5243909, 6291462, 1051649, 7340039, 2099202, 3072, 4195332, 3072, 1051649, 5243909, 3147779, 1051649, 4195332, 5243909, 2099202, 3147779, 6291462,
+  7340039, 4195332, 1051649, 4195332, 3072, 5243909, 4195332, 1051649, 7340039, 4195332, 4195332, 3072, 4195332, 2099202, 6291462, 3072, 3147779, 2099202, 4195332, 7340039, 4195332, 6291462, 3072, 3147779, 4195332, 3072, 5243909, 1051649, 2099202, 6291462, 7340039, 3072, 6291462, 3072, 4195332, 6291462, 3072, 5243909, 1051649, 5243909, 3072, 5243909, 2099202, 6291462, 3072, 7340039, 2099202, 7340039, 2099202, 3072, 4195332, 2099202, 6291462, 1051649, 4195332, 1051649, 5243909, 2099202, 3072, 7340039, 2099202, 5243909, 1051649, 4195332, 3072, 7340039, 1051649, 6291462, 3147779, 7340039, 2099202, 5243909, 7340039, 3147779, 3072, 4195332, 1051649, 6291462, 7340039, 3147779, 5243909, 4195332, 5243909, 1051649, 7340039, 2099202, 7340039, 3072, 4195332, 1051649, 7340039, 4195332, 2099202, 6291462, 4195332, 2099202, 3072, 7340039, 2099202, 6291462, 4195332, 7340039, 3147779, 6291462, 3072, 1051649, 7340039, 3147779, 3072, 7340039, 2099202, 1051649, 4195332, 3147779, 4195332, 6291462, 3147779, 6291462, 2099202, 6291462, 3147779, 4195332, 1051649, 7340039, 3072, 4195332, 7340039, 1051649,
+  2099202, 3147779, 5243909, 6291462, 3147779, 7340039, 1051649, 6291462, 3072, 2099202, 1051649, 5243909, 7340039, 4195332, 2099202, 4195332, 7340039, 3072, 6291462, 1051649, 2099202, 3147779, 7340039, 5243909, 2099202, 7340039, 3147779, 7340039, 5243909, 1051649, 4195332, 2099202, 4195332, 5243909, 2099202, 7340039, 3147779, 4195332, 1051649, 6291462, 3147779, 3072, 7340039, 2099202, 4195332, 3072, 5243909, 1051649, 6291462, 3147779, 6291462, 1051649, 4195332, 3147779, 6291462, 7340039, 2099202, 6291462, 5243909, 1051649, 4195332, 7340039, 2099202, 6291462, 3147779, 4195332, 5243909, 2099202, 4195332, 3072, 5243909, 3147779, 3072, 4195332, 3147779, 6291462, 2099202, 4195332, 2099202, 3072, 7340039, 1051649, 2099202, 6291462, 3147779, 3072, 4195332, 1051649, 7340039, 5243909, 2099202, 1051649, 7340039, 1051649, 7340039, 3147779, 6291462, 4195332, 4195332, 3072, 6291462, 3072, 5243909, 1051649, 7340039, 4195332, 1051649, 6291462, 3147779, 2099202, 6291462, 3147779, 5243909, 3072, 5243909, 1051649, 3072, 7340039, 3147779, 6291462, 3072, 7340039, 5243909, 2099202, 6291462, 3147779, 1051649, 5243909,
+  3072, 7340039, 2099202, 3072, 3147779, 2099202, 4195332, 3147779, 6291462, 5243909, 6291462, 3147779, 2099202, 3072, 7340039, 3147779, 1051649, 5243909, 3147779, 5243909, 6291462, 2099202, 1051649, 5243909, 1051649, 4195332, 1051649, 4195332, 2099202, 7340039, 3147779, 7340039, 1051649, 3147779, 5243909, 1051649, 2099202, 7340039, 3147779, 2099202, 7340039, 4195332, 1051649, 5243909, 6291462, 3147779, 4195332, 4195332, 3072, 3147779, 7340039, 2099202, 7340039, 3072, 2099202, 4195332, 1051649, 4195332, 3072, 6291462, 3147779, 3072, 3147779, 5243909, 1051649, 7340039, 3072, 3147779, 6291462, 2099202, 1051649, 5243909, 7340039, 2099202, 5243909, 3072, 6291462, 3072, 5243909, 3147779, 2099202, 7340039, 5243909, 3072, 4195332, 6291462, 3147779, 6291462, 2099202, 3072, 6291462, 4195332, 3147779, 3147779, 3072, 5243909, 1051649, 1051649, 5243909, 2099202, 3147779, 5243909, 2099202, 3147779, 5243909, 2099202, 5243909, 3072, 4195332, 5243909, 3072, 7340039, 1051649, 6291462, 2099202, 7340039, 2099202, 5243909, 1051649, 1051649, 5243909, 2099202, 1051649, 4195332, 3072, 5243909, 3147779, 6291462,
+  4195332, 1051649, 6291462, 4195332, 5243909, 6291462, 3072, 5243909, 2099202, 1051649, 4195332, 3072, 6291462, 5243909, 1051649, 4195332, 7340039, 2099202, 4195332, 3072, 4195332, 3072, 7340039, 3147779, 6291462, 2099202, 6291462, 3072, 6291462, 4195332, 3072, 5243909, 6291462, 3072, 5243909, 3147779, 5243909, 3072, 6291462, 5243909, 1051649, 6291462, 3147779, 2099202, 3072, 7340039, 1051649, 3147779, 6291462, 4195332, 3072, 5243909, 3147779, 5243909, 1051649, 7340039, 3147779, 6291462, 3147779, 4195332, 1051649, 7340039, 5243909, 3072, 4195332, 1051649, 5243909, 7340039, 3072, 4195332, 6291462, 3147779, 1051649, 3147779, 7340039, 2099202, 5243909, 7340039, 1051649, 6291462, 4195332, 3072, 4195332, 1051649, 7340039, 2099202, 3072, 3147779, 5243909, 4195332, 3147779, 1051649, 6291462, 5243909, 2099202, 7340039, 3147779, 6291462, 2099202, 7340039, 4195332, 3072, 7340039, 6291462, 3072, 7340039, 2099202, 3147779, 7340039, 1051649, 6291462, 2099202, 4195332, 2099202, 5243909, 1051649, 4195332, 3147779, 7340039, 5243909, 3147779, 3147779, 6291462, 2099202, 6291462, 1051649, 7340039, 2099202,
+  3147779, 7340039, 2099202, 7340039, 3072, 2099202, 4195332, 1051649, 7340039, 3072, 7340039, 5243909, 1051649, 3147779, 6291462, 3072, 4195332, 6291462, 1051649, 7340039, 2099202, 5243909, 4195332, 3147779, 3072, 6291462, 3147779, 5243909, 1051649, 2099202, 5243909, 1051649, 2099202, 6291462, 1051649, 7340039, 2099202, 4195332, 1051649, 4195332, 2099202, 3072, 5243909, 7340039, 3147779, 5243909, 2099202, 6291462, 2099202, 5243909, 2099202, 6291462, 1051649, 4195332, 5243909, 3072, 5243909, 2099202, 3072, 6291462, 2099202, 5243909, 2099202, 7340039, 3147779, 6291462, 1051649, 4195332, 5243909, 1051649, 6291462, 3072, 7340039, 4195332, 1051649, 4195332, 1051649, 3147779, 4195332, 2099202, 3147779, 7340039, 3147779, 6291462, 2099202, 5243909, 7340039, 1051649, 6291462, 3072, 7340039, 6291462, 3072, 1051649, 5243909, 3072, 4195332, 3072, 5243909, 1051649, 6291462, 3147779, 4195332, 1051649, 4195332, 1051649, 6291462, 5243909, 3072, 4195332, 3147779, 5243909, 3072, 4195332, 7340039, 3147779, 5243909, 3072, 4195332, 1051649, 7340039, 5243909, 3072, 7340039, 3147779, 5243909, 3072, 4195332,
+  3072, 5243909, 1051649, 3147779, 4195332, 7340039, 3147779, 5243909, 2099202, 6291462, 3147779, 2099202, 7340039, 2099202, 2099202, 5243909, 3147779, 3072, 5243909, 2099202, 6291462, 1051649, 1051649, 6291462, 5243909, 1051649, 7340039, 3072, 4195332, 7340039, 2099202, 7340039, 3147779, 6291462, 4195332, 3072, 6291462, 2099202, 7340039, 3072, 7340039, 4195332, 2099202, 4195332, 1051649, 3147779, 6291462, 3072, 4195332, 7340039, 3072, 3147779, 7340039, 3072, 3147779, 6291462, 1051649, 7340039, 5243909, 2099202, 7340039, 3072, 4195332, 2099202, 6291462, 3072, 7340039, 2099202, 2099202, 7340039, 2099202, 3147779, 5243909, 1051649, 6291462, 5243909, 3147779, 6291462, 3072, 6291462, 5243909, 3072, 4195332, 1051649, 4195332, 3072, 4195332, 7340039, 2099202, 5243909, 2099202, 4195332, 3147779, 7340039, 3147779, 6291462, 2099202, 7340039, 4195332, 3147779, 1051649, 3072, 6291462, 2099202, 7340039, 5243909, 3147779, 1051649, 3147779, 7340039, 1051649, 7340039, 6291462, 2099202, 3072, 6291462, 1051649, 6291462, 2099202, 6291462, 3072, 2099202, 4195332, 1051649, 4195332, 7340039, 2099202, 6291462,
+  6291462, 3147779, 5243909, 6291462, 1051649, 6291462, 1051649, 7340039, 4195332, 3072, 4195332, 5243909, 3072, 4195332, 6291462, 1051649, 7340039, 3147779, 7340039, 3072, 3147779, 7340039, 6291462, 1051649, 3147779, 4195332, 2099202, 5243909, 3147779, 4195332, 1051649, 4195332, 3072, 2099202, 3147779, 7340039, 1051649, 4195332, 3147779, 5243909, 2099202, 6291462, 3072, 7340039, 1051649, 7340039, 3072, 5243909, 1051649, 4195332, 1051649, 6291462, 5243909, 2099202, 7340039, 4195332, 3147779, 4195332, 1051649, 6291462, 3147779, 1051649, 6291462, 1051649, 3147779, 5243909, 2099202, 4195332, 6291462, 1051649, 4195332, 7340039, 3072, 4195332, 2099202, 3072, 7340039, 1051649, 5243909, 2099202, 1051649, 5243909, 6291462, 2099202, 7340039, 3147779, 5243909, 3072, 4195332, 3147779, 1051649, 7340039, 5243909, 3072, 4195332, 1051649, 4195332, 2099202, 3072, 6291462, 5243909, 7340039, 2099202, 4195332, 2099202, 3072, 3147779, 7340039, 5243909, 2099202, 5243909, 3147779, 1051649, 7340039, 4195332, 3147779, 2099202, 4195332, 3147779, 4195332, 2099202, 6291462, 5243909, 2099202, 6291462, 3072, 4195332, 1051649,
+  1051649, 4195332, 3072, 2099202, 5243909, 3072, 3147779, 3072, 4195332, 7340039, 3147779, 1051649, 7340039, 3147779, 5243909, 2099202, 5243909, 1051649, 4195332, 5243909, 4195332, 3072, 2099202, 7340039, 5243909, 3072, 6291462, 1051649, 7340039, 3072, 6291462, 3147779, 5243909, 3147779, 5243909, 3072, 5243909, 6291462, 3072, 6291462, 1051649, 3147779, 5243909, 3147779, 6291462, 2099202, 5243909, 4195332, 7340039, 2099202, 5243909, 3147779, 1051649, 5243909, 3072, 2099202, 6291462, 3072, 7340039, 3072, 4195332, 5243909, 3147779, 5243909, 1051649, 6291462, 3072, 6291462, 3072, 5243909, 3072, 3147779, 6291462, 2099202, 7340039, 4195332, 2099202, 7340039, 4195332, 2099202, 7340039, 3147779, 1051649, 6291462, 1051649, 5243909, 1051649, 6291462, 2099202, 6291462, 4195332, 1051649, 2099202, 6291462, 2099202, 7340039, 5243909, 3147779, 5243909, 2099202, 4195332, 1051649, 5243909, 3072, 6291462, 4195332, 6291462, 3072, 2099202, 6291462, 3072, 4195332, 4195332, 1051649, 5243909, 3072, 7340039, 1051649, 7340039, 3072, 7340039, 3147779, 3072, 7340039, 1051649, 5243909, 2099202, 7340039,
+  1051649, 5243909, 7340039, 2099202, 6291462, 3147779, 6291462, 5243909, 2099202, 5243909, 3072, 6291462, 3147779, 3072, 1051649, 6291462, 3072, 6291462, 3147779, 1051649, 7340039, 2099202, 4195332, 3072, 2099202, 7340039, 4195332, 3147779, 1051649, 6291462, 2099202, 7340039, 3072, 7340039, 1051649, 6291462, 3147779, 2099202, 4195332, 3147779, 6291462, 1051649, 1051649, 4195332, 1051649, 3147779, 7340039, 2099202, 3072, 6291462, 1051649, 7340039, 2099202, 7340039, 3147779, 5243909, 2099202, 5243909, 3147779, 2099202, 7340039, 3072, 4195332, 7340039, 3072, 4195332, 3147779, 4195332, 2099202, 7340039, 5243909, 1051649, 6291462, 3147779, 1051649, 5243909, 3147779, 3072, 3147779, 6291462, 3072, 6291462, 5243909, 3147779, 4195332, 3072, 7340039, 3147779, 6291462, 3072, 3147779, 6291462, 4195332, 3072, 5243909, 1051649, 3072, 7340039, 1051649, 7340039, 3072, 6291462, 3147779, 4195332, 7340039, 1051649, 2099202, 6291462, 4195332, 4195332, 2099202, 6291462, 3072, 7340039, 3147779, 6291462, 4195332, 5243909, 2099202, 4195332, 5243909, 1051649, 3147779, 4195332, 6291462, 3147779, 3147779, 5243909,
+  7340039, 3147779, 3072, 4195332, 1051649, 4195332, 2099202, 1051649, 6291462, 1051649, 4195332, 2099202, 4195332, 7340039, 5243909, 4195332, 3147779, 2099202, 7340039, 3147779, 2099202, 5243909, 6291462, 3147779, 5243909, 1051649, 3072, 6291462, 5243909, 2099202, 4195332, 1051649, 5243909, 2099202, 4195332, 4195332, 1051649, 7340039, 3072, 7340039, 4195332, 5243909, 7340039, 3072, 6291462, 5243909, 1051649, 3147779, 6291462, 2099202, 4195332, 3072, 4195332, 1051649, 4195332, 3072, 7340039, 1051649, 4195332, 6291462, 1051649, 5243909, 1051649, 2099202, 4195332, 7340039, 2099202, 7340039, 3147779, 1051649, 4195332, 4195332, 3072, 5243909, 1051649, 6291462, 5243909, 6291462, 5243909, 1051649, 4195332, 2099202, 3072, 2099202, 7340039, 4195332, 2099202, 3072, 5243909, 2099202, 7340039, 1051649, 3147779, 7340039, 3147779, 6291462, 3147779, 6291462, 4195332, 3147779, 6291462, 2099202, 7340039, 1051649, 2099202, 5243909, 3147779, 1051649, 7340039, 1051649, 5243909, 2099202, 4195332, 5243909, 3072, 2099202, 3072, 2099202, 6291462, 1051649, 3072, 6291462, 7340039, 3072, 2099202, 6291462, 3072, 3147779,
+  3072, 5243909, 2099202, 6291462, 7340039, 3072, 7340039, 5243909, 3147779, 6291462, 2099202, 7340039, 5243909, 1051649, 2099202, 3072, 7340039, 4195332, 3072, 6291462, 3072, 5243909, 1051649, 7340039, 3147779, 6291462, 5243909, 2099202, 3072, 5243909, 3072, 7340039, 4195332, 6291462, 3072, 7340039, 2099202, 4195332, 5243909, 2099202, 3072, 2099202, 6291462, 4195332, 2099202, 3072, 6291462, 4195332, 1051649, 5243909, 3147779, 6291462, 3147779, 7340039, 2099202, 6291462, 3147779, 5243909, 3072, 4195332, 3147779, 7340039, 3147779, 6291462, 3147779, 1051649, 6291462, 3072, 5243909, 3147779, 6291462, 2099202, 7340039, 3147779, 7340039, 3072, 3147779, 2099202, 1051649, 7340039, 3147779, 7340039, 4195332, 5243909, 1051649, 3147779, 6291462, 3147779, 4195332, 5243909, 2099202, 5243909, 3072, 6291462, 1051649, 5243909, 1051649, 2099202, 3072, 5243909, 1051649, 5243909, 3072, 3147779, 6291462, 3072, 7340039, 5243909, 3072, 6291462, 3147779, 7340039, 1051649, 6291462, 3147779, 7340039, 5243909, 6291462, 3147779, 5243909, 7340039, 2099202, 4195332, 3147779, 5243909, 1051649, 7340039, 4195332,
+  2099202, 6291462, 3147779, 1051649, 3147779, 2099202, 5243909, 2099202, 3072, 7340039, 1051649, 3147779, 3072, 6291462, 4195332, 6291462, 3147779, 1051649, 5243909, 2099202, 7340039, 1051649, 4195332, 3072, 4195332, 1051649, 3147779, 7340039, 4195332, 3147779, 6291462, 2099202, 3147779, 1051649, 3147779, 5243909, 3072, 6291462, 1051649, 7340039, 3147779, 5243909, 3072, 3147779, 7340039, 5243909, 2099202, 3147779, 7340039, 3072, 5243909, 1051649, 6291462, 1051649, 5243909, 3072, 2099202, 4195332, 7340039, 1051649, 6291462, 3072, 5243909, 1051649, 5243909, 4195332, 2099202, 4195332, 1051649, 7340039, 3072, 2099202, 5243909, 3072, 2099202, 4195332, 1051649, 7340039, 6291462, 1051649, 4195332, 2099202, 1051649, 6291462, 3072, 7340039, 1051649, 7340039, 1051649, 3072, 7340039, 3147779, 4195332, 2099202, 7340039, 3147779, 7340039, 4195332, 2099202, 7340039, 3147779, 4195332, 6291462, 1051649, 5243909, 3147779, 2099202, 4195332, 3147779, 4195332, 3072, 5243909, 1051649, 3147779, 2099202, 4195332, 1051649, 3147779, 3072, 2099202, 3147779, 5243909, 1051649, 7340039, 2099202, 5243909, 1051649, 4195332,
+  6291462, 3072, 7340039, 4195332, 6291462, 4195332, 3072, 7340039, 4195332, 4195332, 1051649, 6291462, 3147779, 7340039, 2099202, 1051649, 6291462, 5243909, 3147779, 4195332, 3147779, 6291462, 3147779, 6291462, 2099202, 7340039, 4195332, 3072, 7340039, 1051649, 5243909, 3072, 6291462, 7340039, 4195332, 2099202, 7340039, 3147779, 5243909, 6291462, 1051649, 2099202, 6291462, 4195332, 1051649, 3147779, 7340039, 3072, 4195332, 5243909, 2099202, 6291462, 3072, 3147779, 4195332, 7340039, 6291462, 1051649, 4195332, 2099202, 5243909, 2099202, 6291462, 3072, 7340039, 3072, 6291462, 2099202, 5243909, 4195332, 6291462, 3147779, 6291462, 4195332, 6291462, 5243909, 3072, 3147779, 4195332, 5243909, 3072, 6291462, 4195332, 5243909, 3147779, 4195332, 5243909, 2099202, 4195332, 6291462, 2099202, 5243909, 1051649, 6291462, 2099202, 3072, 5243909, 2099202, 6291462, 3147779, 1051649, 5243909, 2099202, 7340039, 1051649, 6291462, 4195332, 1051649, 6291462, 1051649, 7340039, 2099202, 7340039, 5243909, 6291462, 3072, 6291462, 7340039, 4195332, 7340039, 3072, 4195332, 1051649, 6291462, 3072, 4195332, 7340039, 2099202,
+  4195332, 5243909, 1051649, 5243909, 3072, 3147779, 5243909, 1051649, 6291462, 2099202, 5243909, 2099202, 5243909, 3072, 4195332, 5243909, 2099202, 3072, 7340039, 1051649, 6291462, 3072, 5243909, 1051649, 2099202, 5243909, 1051649, 5243909, 2099202, 4195332, 3147779, 7340039, 2099202, 3072, 3147779, 5243909, 1051649, 4195332, 2099202, 3072, 4195332, 7340039, 4195332, 1051649, 5243909, 3072, 4195332, 6291462, 2099202, 7340039, 1051649, 4195332, 5243909, 7340039, 2099202, 3072, 5243909, 3147779, 6291462, 1051649, 7340039, 4195332, 3147779, 3147779, 2099202, 5243909, 3147779, 7340039, 3072, 3147779, 1051649, 5243909, 3072, 2099202, 1051649, 6291462, 2099202, 7340039, 3072, 3147779, 7340039, 3072, 3147779, 2099202, 6291462, 3072, 1051649, 7340039, 3072, 3147779, 1051649, 7340039, 3072, 5243909, 3147779, 5243909, 3072, 7340039, 3072, 4195332, 7340039, 3072, 4195332, 3147779, 4195332, 3072, 3147779, 7340039, 3072, 5243909, 3147779, 3072, 4195332, 3072, 3147779, 7340039, 2099202, 1051649, 4195332, 1051649, 6291462, 3147779, 6291462, 3147779, 2099202, 6291462, 1051649, 3147779,
+  3072, 3147779, 2099202, 7340039, 2099202, 6291462, 3072, 4195332, 1051649, 7340039, 3072, 3147779, 7340039, 3147779, 7340039, 3072, 3147779, 5243909, 2099202, 4195332, 2099202, 3147779, 7340039, 4195332, 6291462, 3072, 7340039, 3147779, 3072, 6291462, 1051649, 1051649, 5243909, 4195332, 1051649, 6291462, 6291462, 3072, 7340039, 3147779, 5243909, 1051649, 3072, 7340039, 3147779, 6291462, 3147779, 1051649, 5243909, 3147779, 6291462, 2099202, 1051649, 3147779, 4195332, 6291462, 2099202, 1051649, 6291462, 3072, 3147779, 3072, 6291462, 7340039, 1051649, 6291462, 1051649, 2099202, 6291462, 1051649, 7340039, 4195332, 5243909, 7340039, 4195332, 3072, 5243909, 2099202, 6291462, 4195332, 2099202, 5243909, 7340039, 3072, 4195332, 7340039, 5243909, 3147779, 4195332, 6291462, 2099202, 4195332, 4195332, 1051649, 7340039, 2099202, 4195332, 5243909, 3147779, 1051649, 6291462, 2099202, 5243909, 3072, 6291462, 2099202, 5243909, 2099202, 4195332, 2099202, 6291462, 2099202, 6291462, 3147779, 5243909, 1051649, 4195332, 5243909, 6291462, 5243909, 3072, 4195332, 1051649, 5243909, 7340039, 3072, 5243909, 6291462,
+  7340039, 5243909, 4195332, 1051649, 5243909, 3147779, 7340039, 3147779, 5243909, 3147779, 4195332, 6291462, 1051649, 4195332, 1051649, 5243909, 6291462, 1051649, 7340039, 3072, 6291462, 5243909, 3072, 2099202, 3147779, 4195332, 2099202, 6291462, 3147779, 4195332, 7340039, 5243909, 2099202, 7340039, 4195332, 2099202, 2099202, 4195332, 1051649, 6291462, 3147779, 5243909, 2099202, 5243909, 2099202, 1051649, 5243909, 7340039, 3072, 4195332, 3072, 7340039, 3147779, 6291462, 3072, 3147779, 7340039, 4195332, 5243909, 2099202, 7340039, 4195332, 1051649, 3147779, 4195332, 2099202, 4195332, 5243909, 3147779, 5243909, 2099202, 3072, 3147779, 1051649, 3147779, 7340039, 3147779, 5243909, 1051649, 5243909, 1051649, 6291462, 2099202, 5243909, 2099202, 3147779, 1051649, 5243909, 1051649, 6291462, 3072, 7340039, 3147779, 6291462, 3147779, 3072, 6291462, 2099202, 6291462, 1051649, 4195332, 5243909, 2099202, 7340039, 1051649, 7340039, 3147779, 3072, 7340039, 5243909, 1051649, 5243909, 1051649, 7340039, 2099202, 6291462, 3072, 3147779, 1051649, 2099202, 7340039, 5243909, 3072, 3147779, 1051649, 5243909, 3147779, 2099202,
+  3072, 6291462, 1051649, 6291462, 4195332, 2099202, 1051649, 6291462, 3072, 6291462, 2099202, 3072, 5243909, 6291462, 2099202, 7340039, 3072, 3147779, 4195332, 5243909, 1051649, 3147779, 5243909, 7340039, 1051649, 6291462, 4195332, 3072, 7340039, 1051649, 3147779, 3072, 3147779, 1051649, 6291462, 3072, 5243909, 3147779, 5243909, 2099202, 3072, 7340039, 1051649, 6291462, 4195332, 6291462, 2099202, 1051649, 4195332, 7340039, 2099202, 5243909, 3072, 5243909, 2099202, 5243909, 3072, 6291462, 1051649, 3147779, 5243909, 2099202, 6291462, 3072, 7340039, 3147779, 7340039, 3072, 7340039, 3072, 4195332, 7340039, 6291462, 6291462, 1051649, 4195332, 3072, 2099202, 3147779, 7340039, 3072, 4195332, 1051649, 4195332, 3072, 6291462, 6291462, 3072, 7340039, 1051649, 3147779, 5243909, 2099202, 1051649, 4195332, 7340039, 1051649, 7340039, 3072, 3147779, 7340039, 3072, 6291462, 3147779, 4195332, 1051649, 5243909, 6291462, 3147779, 1051649, 7340039, 4195332, 4195332, 3072, 4195332, 3147779, 7340039, 4195332, 7340039, 3072, 3147779, 2099202, 6291462, 4195332, 7340039, 3147779, 1051649, 5243909,
+  2099202, 3147779, 7340039, 2099202, 3072, 6291462, 4195332, 3147779, 5243909, 1051649, 4195332, 7340039, 2099202, 4195332, 3072, 3147779, 4195332, 7340039, 1051649, 2099202, 6291462, 2099202, 3072, 5243909, 3147779, 1051649, 6291462, 5243909, 2099202, 5243909, 6291462, 3147779, 6291462, 5243909, 3147779, 7340039, 3072, 7340039, 1051649, 6291462, 3147779, 4195332, 3147779, 7340039, 3072, 3147779, 5243909, 3147779, 6291462, 2099202, 5243909, 1051649, 4195332, 1051649, 7340039, 3147779, 1051649, 2099202, 7340039, 4195332, 3072, 7340039, 1051649, 4195332, 5243909, 3072, 5243909, 1051649, 3147779, 5243909, 2099202, 1051649, 3072, 4195332, 2099202, 5243909, 7340039, 6291462, 4195332, 3147779, 6291462, 2099202, 7340039, 3147779, 7340039, 1051649, 3147779, 4195332, 2099202, 6291462, 4195332, 3072, 5243909, 6291462, 3072, 4195332, 2099202, 4195332, 3147779, 5243909, 2099202, 4195332, 3147779, 1051649, 6291462, 5243909, 2099202, 4195332, 3072, 6291462, 3147779, 3072, 7340039, 2099202, 6291462, 1051649, 2099202, 3072, 5243909, 3147779, 7340039, 5243909, 1051649, 6291462, 2099202, 3072, 4195332, 7340039,
+  6291462, 3072, 4195332, 3147779, 5243909, 1051649, 7340039, 3072, 7340039, 5243909, 3147779, 3072, 5243909, 1051649, 6291462, 5243909, 1051649, 3147779, 6291462, 5243909, 4195332, 7340039, 4195332, 2099202, 4195332, 7340039, 3072, 2099202, 4195332, 3072, 4195332, 1051649, 5243909, 3072, 2099202, 5243909, 2099202, 3147779, 4195332, 2099202, 7340039, 3072, 5243909, 2099202, 4195332, 7340039, 3072, 4195332, 1051649, 3072, 6291462, 3147779, 7340039, 4195332, 1051649, 6291462, 5243909, 4195332, 2099202, 6291462, 1051649, 4195332, 5243909, 2099202, 6291462, 1051649, 4195332, 6291462, 2099202, 4195332, 6291462, 7340039, 4195332, 3147779, 7340039, 3072, 3147779, 1051649, 3072, 6291462, 1051649, 5243909, 3072, 6291462, 2099202, 5243909, 6291462, 2099202, 5243909, 3072, 3147779, 7340039, 2099202, 4195332, 6291462, 2099202, 5243909, 1051649, 6291462, 1051649, 7340039, 5243909, 3072, 7340039, 3147779, 3072, 7340039, 1051649, 5243909, 4195332, 2099202, 5243909, 1051649, 5243909, 2099202, 5243909, 4195332, 6291462, 4195332, 1051649, 2099202, 4195332, 2099202, 3072, 5243909, 6291462, 4195332, 1051649,
+  4195332, 1051649, 5243909, 1051649, 7340039, 4195332, 2099202, 3147779, 2099202, 4195332, 2099202, 7340039, 3147779, 5243909, 2099202, 7340039, 2099202, 6291462, 3072, 2099202, 3072, 3147779, 1051649, 7340039, 3072, 5243909, 3147779, 7340039, 1051649, 6291462, 2099202, 7340039, 1051649, 7340039, 4195332, 7340039, 1051649, 6291462, 3072, 5243909, 4195332, 1051649, 6291462, 3072, 3147779, 1051649, 6291462, 2099202, 7340039, 5243909, 3147779, 3072, 3147779, 6291462, 2099202, 4195332, 3072, 7340039, 3072, 3147779, 3147779, 1051649, 7340039, 3072, 3147779, 7340039, 3147779, 2099202, 6291462, 3072, 3147779, 1051649, 2099202, 5243909, 1051649, 5243909, 2099202, 4195332, 5243909, 2099202, 7340039, 3147779, 5243909, 1051649, 4195332, 3072, 3147779, 5243909, 3072, 7340039, 4195332, 1051649, 5243909, 1051649, 3147779, 7340039, 3072, 6291462, 2099202, 4195332, 3072, 3147779, 5243909, 4195332, 2099202, 5243909, 3147779, 6291462, 2099202, 1051649, 6291462, 3147779, 7340039, 3072, 6291462, 3072, 7340039, 2099202, 1051649, 5243909, 6291462, 3072, 7340039, 4195332, 3147779, 1051649, 7340039, 3147779,
+  7340039, 6291462, 3147779, 7340039, 2099202, 3072, 5243909, 6291462, 3072, 6291462, 1051649, 6291462, 3072, 2099202, 4195332, 3072, 4195332, 1051649, 7340039, 4195332, 7340039, 6291462, 5243909, 1051649, 6291462, 2099202, 6291462, 1051649, 5243909, 4195332, 3072, 3147779, 6291462, 2099202, 4195332, 3072, 4195332, 4195332, 2099202, 6291462, 1051649, 4195332, 3147779, 6291462, 7340039, 4195332, 2099202, 6291462, 3072, 6291462, 1051649, 7340039, 4195332, 3072, 5243909, 7340039, 1051649, 3147779, 5243909, 6291462, 5243909, 4195332, 2099202, 6291462, 1051649, 5243909, 3072, 7340039, 1051649, 5243909, 6291462, 5243909, 6291462, 1051649, 7340039, 3147779, 6291462, 3072, 7340039, 2099202, 4195332, 1051649, 6291462, 3147779, 7340039, 5243909, 1051649, 7340039, 2099202, 5243909, 2099202, 6291462, 3072, 7340039, 4195332, 3147779, 5243909, 3147779, 1051649, 7340039, 6291462, 2099202, 7340039, 1051649, 7340039, 4195332, 1051649, 3072, 4195332, 7340039, 5243909, 3072, 3147779, 2099202, 4195332, 5243909, 1051649, 3147779, 7340039, 3072, 3147779, 6291462, 4195332, 3072, 7340039, 2099202, 5243909, 3072,
+  2099202, 3072, 5243909, 1051649, 4195332, 6291462, 3147779, 1051649, 7340039, 3147779, 5243909, 3147779, 1051649, 7340039, 6291462, 3147779, 6291462, 5243909, 1051649, 4195332, 2099202, 3072, 3147779, 7340039, 4195332, 3072, 3147779, 5243909, 2099202, 7340039, 3147779, 6291462, 1051649, 5243909, 2099202, 6291462, 1051649, 7340039, 3072, 3147779, 7340039, 5243909, 3072, 5243909, 2099202, 3072, 5243909, 3147779, 4195332, 4195332, 2099202, 5243909, 2099202, 6291462, 1051649, 2099202, 4195332, 6291462, 1051649, 2099202, 3072, 7340039, 2099202, 3147779, 6291462, 2099202, 5243909, 4195332, 4195332, 1051649, 2099202, 3072, 7340039, 4195332, 3072, 6291462, 3147779, 4195332, 1051649, 5243909, 3072, 7340039, 1051649, 4195332, 3072, 3147779, 2099202, 6291462, 4195332, 1051649, 7340039, 3147779, 4195332, 2099202, 3072, 6291462, 1051649, 6291462, 3072, 4195332, 1051649, 5243909, 2099202, 4195332, 3072, 2099202, 6291462, 3147779, 6291462, 3072, 2099202, 7340039, 4195332, 6291462, 2099202, 7340039, 3147779, 5243909, 2099202, 6291462, 5243909, 1051649, 2099202, 5243909, 4195332, 2099202, 6291462, 3147779,
+  7340039, 2099202, 4195332, 6291462, 2099202, 3072, 6291462, 4195332, 2099202, 5243909, 3072, 7340039, 4195332, 3147779, 1051649, 4195332, 3072, 5243909, 1051649, 3147779, 6291462, 2099202, 5243909, 1051649, 3147779, 4195332, 7340039, 3072, 4195332, 1051649, 5243909, 1051649, 4195332, 6291462, 3072, 1051649, 5243909, 3147779, 6291462, 5243909, 2099202, 1051649, 7340039, 1051649, 6291462, 3147779, 7340039, 1051649, 7340039, 1051649, 6291462, 3072, 7340039, 4195332, 3147779, 7340039, 3072, 3147779, 5243909, 7340039, 4195332, 1051649, 5243909, 3072, 4195332, 7340039, 3072, 2099202, 7340039, 3147779, 6291462, 3147779, 2099202, 3147779, 5243909, 2099202, 1051649, 7340039, 3147779, 4195332, 2099202, 5243909, 3147779, 7340039, 2099202, 6291462, 4195332, 3072, 3147779, 5243909, 3072, 5243909, 1051649, 6291462, 5243909, 2099202, 7340039, 2099202, 4195332, 7340039, 3147779, 6291462, 3072, 6291462, 3147779, 7340039, 1051649, 5243909, 2099202, 4195332, 5243909, 3147779, 1051649, 3072, 5243909, 1051649, 6291462, 3072, 4195332, 3147779, 3072, 7340039, 6291462, 3147779, 1051649, 6291462, 3072, 5243909,
+  1051649, 3147779, 7340039, 3072, 5243909, 7340039, 2099202, 4195332, 1051649, 7340039, 4195332, 1051649, 6291462, 3072, 6291462, 2099202, 7340039, 3147779, 7340039, 3072, 5243909, 4195332, 1051649, 7340039, 5243909, 1051649, 6291462, 3147779, 6291462, 2099202, 4195332, 3147779, 7340039, 2099202, 7340039, 3147779, 6291462, 3072, 3147779, 2099202, 4195332, 6291462, 3147779, 4195332, 3072, 5243909, 1051649, 5243909, 3147779, 7340039, 2099202, 4195332, 3147779, 3072, 6291462, 1051649, 3147779, 5243909, 3072, 2099202, 3147779, 6291462, 2099202, 7340039, 3147779, 1051649, 4195332, 6291462, 3072, 5243909, 1051649, 7340039, 5243909, 3072, 6291462, 4195332, 5243909, 3072, 6291462, 1051649, 7340039, 2099202, 3072, 6291462, 1051649, 5243909, 2099202, 7340039, 4195332, 3147779, 6291462, 2099202, 7340039, 3072, 3147779, 4195332, 1051649, 5243909, 3072, 5243909, 3072, 3147779, 5243909, 1051649, 5243909, 4195332, 2099202, 6291462, 3072, 7340039, 1051649, 3147779, 7340039, 4195332, 3147779, 6291462, 2099202, 4195332, 1051649, 6291462, 2099202, 4195332, 1051649, 3072, 5243909, 3147779, 1051649, 5243909,
+  4195332, 1051649, 4195332, 2099202, 3147779, 1051649, 7340039, 3072, 3147779, 6291462, 2099202, 5243909, 2099202, 5243909, 1051649, 5243909, 3072, 6291462, 2099202, 4195332, 2099202, 6291462, 3147779, 4195332, 3072, 6291462, 2099202, 2099202, 3072, 7340039, 3072, 6291462, 3072, 3147779, 4195332, 5243909, 1051649, 4195332, 7340039, 3072, 7340039, 3072, 2099202, 7340039, 2099202, 4195332, 6291462, 2099202, 3072, 5243909, 1051649, 1051649, 6291462, 2099202, 5243909, 4195332, 6291462, 2099202, 7340039, 4195332, 6291462, 3072, 4195332, 5243909, 3072, 6291462, 5243909, 3147779, 2099202, 6291462, 4195332, 2099202, 4195332, 3147779, 1051649, 7340039, 2099202, 4195332, 3147779, 5243909, 3072, 5243909, 6291462, 2099202, 4195332, 3072, 6291462, 1051649, 1051649, 6291462, 1051649, 4195332, 3147779, 5243909, 1051649, 7340039, 3072, 6291462, 3147779, 2099202, 6291462, 6291462, 1051649, 3147779, 7340039, 3072, 6291462, 4195332, 2099202, 5243909, 1051649, 5243909, 3072, 6291462, 2099202, 3072, 6291462, 1051649, 7340039, 5243909, 3072, 5243909, 7340039, 4195332, 7340039, 2099202, 6291462, 3147779,
+  3072, 6291462, 2099202, 5243909, 6291462, 4195332, 3147779, 5243909, 6291462, 3072, 4195332, 1051649, 7340039, 3147779, 4195332, 7340039, 2099202, 3147779, 3072, 7340039, 3147779, 3072, 6291462, 2099202, 7340039, 3147779, 4195332, 7340039, 5243909, 3147779, 4195332, 1051649, 5243909, 7340039, 2099202, 3072, 5243909, 2099202, 6291462, 2099202, 3147779, 5243909, 6291462, 1051649, 5243909, 3072, 7340039, 2099202, 4195332, 7340039, 3147779, 5243909, 3147779, 7340039, 3072, 2099202, 1051649, 5243909, 3072, 4195332, 1051649, 7340039, 3147779, 6291462, 1051649, 3147779, 1051649, 7340039, 4195332, 2099202, 3072, 7340039, 3072, 5243909, 6291462, 3072, 3147779, 1051649, 7340039, 2099202, 6291462, 3147779, 1051649, 5243909, 7340039, 3147779, 4195332, 7340039, 5243909, 2099202, 7340039, 3072, 7340039, 4195332, 6291462, 3147779, 2099202, 4195332, 2099202, 7340039, 3147779, 3072, 4195332, 5243909, 1051649, 4195332, 3147779, 1051649, 7340039, 3147779, 6291462, 2099202, 4195332, 3147779, 7340039, 4195332, 3147779, 4195332, 3147779, 3147779, 7340039, 2099202, 1051649, 3147779, 3072, 4195332, 1051649, 7340039,
+  5243909, 4195332, 7340039, 3072, 2099202, 1051649, 5243909, 3072, 3147779, 7340039, 5243909, 1051649, 4195332, 3072, 4195332, 1051649, 3147779, 6291462, 5243909, 1051649, 4195332, 7340039, 3072, 5243909, 1051649, 6291462, 3072, 5243909, 1051649, 2099202, 6291462, 2099202, 5243909, 1051649, 4195332, 6291462, 3147779, 7340039, 1051649, 5243909, 1051649, 5243909, 1051649, 4195332, 4195332, 3147779, 1051649, 5243909, 3072, 4195332, 3072, 6291462, 1051649, 2099202, 5243909, 6291462, 7340039, 3147779, 7340039, 2099202, 3147779, 5243909, 1051649, 2099202, 5243909, 7340039, 2099202, 4195332, 3072, 6291462, 5243909, 2099202, 6291462, 1051649, 2099202, 5243909, 6291462, 5243909, 3072, 4195332, 1051649, 4195332, 7340039, 3072, 3147779, 1051649, 5243909, 3072, 3147779, 1051649, 5243909, 3147779, 2099202, 3072, 2099202, 6291462, 5243909, 7340039, 3072, 4195332, 1051649, 7340039, 1051649, 6291462, 3147779, 7340039, 2099202, 5243909, 3072, 4195332, 3072, 7340039, 5243909, 1051649, 5243909, 2099202, 7340039, 3072, 6291462, 1051649, 3072, 6291462, 4195332, 6291462, 2099202, 7340039, 5243909, 2099202,
+  1051649, 3072, 3147779, 4195332, 7340039, 6291462, 2099202, 7340039, 2099202, 1051649, 2099202, 6291462, 3147779, 7340039, 2099202, 6291462, 5243909, 1051649, 4195332, 6291462, 2099202, 3147779, 5243909, 2099202, 4195332, 1051649, 7340039, 2099202, 4195332, 5243909, 3072, 7340039, 2099202, 3147779, 7340039, 1051649, 5243909, 3147779, 1051649, 7340039, 4195332, 2099202, 3147779, 7340039, 2099202, 6291462, 3147779, 4195332, 6291462, 2099202, 5243909, 2099202, 4195332, 7340039, 3147779, 3072, 1051649, 4195332, 1051649, 6291462, 3072, 4195332, 7340039, 4195332, 3072, 6291462, 3072, 7340039, 3147779, 4195332, 1051649, 3147779, 4195332, 3147779, 7340039, 1051649, 3147779, 2099202, 7340039, 4195332, 6291462, 3072, 2099202, 4195332, 6291462, 2099202, 7340039, 2099202, 6291462, 4195332, 3072, 5243909, 6291462, 2099202, 5243909, 3072, 3147779, 1051649, 5243909, 3147779, 5243909, 2099202, 6291462, 2099202, 2099202, 3072, 6291462, 3147779, 7340039, 1051649, 5243909, 3147779, 3072, 7340039, 1051649, 6291462, 3072, 5243909, 2099202, 5243909, 4195332, 2099202, 1051649, 3147779, 5243909, 3147779, 3072, 6291462,
+  3147779, 7340039, 5243909, 3072, 3147779, 1051649, 4195332, 3072, 5243909, 6291462, 4195332, 3072, 7340039, 1051649, 5243909, 3147779, 3072, 7340039, 2099202, 3072, 7340039, 1051649, 7340039, 3072, 6291462, 4195332, 3147779, 6291462, 3072, 7340039, 3147779, 5243909, 3072, 6291462, 2099202, 4195332, 3072, 6291462, 3147779, 3072, 6291462, 3072, 6291462, 3147779, 3072, 6291462, 3072, 7340039, 1051649, 3147779, 6291462, 3072, 6291462, 1051649, 5243909, 4195332, 6291462, 3147779, 5243909, 2099202, 6291462, 3147779, 3072, 6291462, 3147779, 4195332, 2099202, 5243909, 1051649, 7340039, 6291462, 1051649, 7340039, 3072, 4195332, 3147779, 7340039, 3072, 4195332, 1051649, 2099202, 7340039, 3147779, 6291462, 3072, 2099202, 4195332, 3072, 7340039, 1051649, 6291462, 3147779, 1051649, 6291462, 4195332, 7340039, 3147779, 6291462, 1051649, 7340039, 1051649, 4195332, 3072, 4195332, 7340039, 4195332, 5243909, 1051649, 4195332, 6291462, 2099202, 2099202, 6291462, 4195332, 3147779, 4195332, 2099202, 7340039, 4195332, 1051649, 7340039, 3147779, 7340039, 3072, 6291462, 1051649, 7340039, 4195332,
+  1051649, 4195332, 2099202, 6291462, 3147779, 5243909, 6291462, 4195332, 3147779, 1051649, 6291462, 4195332, 2099202, 5243909, 3072, 4195332, 6291462, 2099202, 4195332, 3147779, 5243909, 1051649, 3147779, 5243909, 2099202, 3072, 5243909, 1051649, 5243909, 3147779, 1051649, 6291462, 4195332, 3072, 7340039, 2099202, 6291462, 2099202, 7340039, 4195332, 3147779, 5243909, 1051649, 6291462, 5243909, 2099202, 3147779, 1051649, 4195332, 7340039, 3147779, 4195332, 3147779, 3072, 7340039, 2099202, 3072, 7340039, 3072, 5243909, 1051649, 5243909, 2099202, 6291462, 1051649, 7340039, 3147779, 1051649, 5243909, 3072, 2099202, 5243909, 2099202, 5243909, 1051649, 5243909, 1051649, 6291462, 3147779, 6291462, 5243909, 3147779, 1051649, 5243909, 4195332, 7340039, 3147779, 5243909, 3147779, 4195332, 2099202, 7340039, 4195332, 3072, 2099202, 1051649, 5243909, 3072, 4195332, 2099202, 5243909, 6291462, 3147779, 7340039, 1051649, 3072, 6291462, 2099202, 7340039, 3072, 4195332, 6291462, 1051649, 2099202, 7340039, 3072, 5243909, 1051649, 3147779, 6291462, 3072, 3147779, 5243909, 4195332, 2099202, 5243909, 2099202, 6291462,
+  7340039, 2099202, 6291462, 1051649, 1051649, 7340039, 2099202, 1051649, 7340039, 5243909, 3072, 3147779, 6291462, 2099202, 6291462, 3147779, 1051649, 5243909, 3072, 7340039, 2099202, 5243909, 6291462, 1051649, 7340039, 4195332, 3147779, 6291462, 2099202, 7340039, 2099202, 4195332, 1051649, 3147779, 5243909, 1051649, 4195332, 5243909, 3072, 2099202, 1051649, 7340039, 4195332, 3072, 4195332, 1051649, 7340039, 5243909, 3072, 5243909, 1051649, 7340039, 6291462, 2099202, 5243909, 3147779, 4195332, 2099202, 5243909, 2099202, 4195332, 7340039, 2099202, 4195332, 5243909, 3072, 5243909, 2099202, 6291462, 4195332, 3147779, 7340039, 4195332, 3072, 6291462, 2099202, 7340039, 2099202, 5243909, 1051649, 3072, 5243909, 7340039, 1051649, 6291462, 3072, 5243909, 1051649, 6291462, 3072, 5243909, 1051649, 4195332, 6291462, 7340039, 3147779, 4195332, 2099202, 7340039, 5243909, 3072, 3147779, 1051649, 5243909, 3147779, 3147779, 7340039, 1051649, 3147779, 5243909, 1051649, 3147779, 5243909, 6291462, 1051649, 5243909, 2099202, 7340039, 5243909, 2099202, 5243909, 6291462, 1051649, 2099202, 7340039, 3147779, 4195332, 3072,
+  4195332, 3072, 3147779, 5243909, 5243909, 3072, 3147779, 6291462, 3072, 2099202, 7340039, 3147779, 1051649, 7340039, 1051649, 3147779, 7340039, 3147779, 6291462, 2099202, 4195332, 3072, 4195332, 4195332, 2099202, 1051649, 7340039, 3072, 4195332, 1051649, 5243909, 3072, 7340039, 6291462, 3147779, 7340039, 3072, 3147779, 4195332, 6291462, 5243909, 3147779, 1051649, 7340039, 3147779, 5243909, 3147779, 2099202, 6291462, 1051649, 5243909, 3072, 2099202, 4195332, 6291462, 3072, 6291462, 1051649, 3147779, 7340039, 3147779, 3072, 6291462, 3072, 7340039, 3147779, 2099202, 7340039, 3147779, 1051649, 7340039, 1051649, 4195332, 7340039, 3147779, 5243909, 3072, 4195332, 3072, 6291462, 3147779, 4195332, 2099202, 4195332, 1051649, 2099202, 7340039, 2099202, 4195332, 6291462, 1051649, 7340039, 2099202, 3147779, 1051649, 5243909, 7340039, 3072, 3147779, 1051649, 7340039, 2099202, 6291462, 2099202, 6291462, 5243909, 3072, 4195332, 5243909, 2099202, 7340039, 4195332, 3072, 4195332, 3147779, 6291462, 3147779, 3072, 4195332, 1051649, 7340039, 3072, 4195332, 5243909, 3072, 6291462, 1051649, 5243909,
+  2099202, 7340039, 6291462, 3072, 3147779, 7340039, 5243909, 2099202, 4195332, 6291462, 1051649, 5243909, 5243909, 3072, 4195332, 5243909, 3072, 4195332, 1051649, 6291462, 3147779, 6291462, 1051649, 7340039, 3072, 5243909, 2099202, 4195332, 6291462, 1051649, 6291462, 3147779, 5243909, 2099202, 1051649, 4195332, 6291462, 1051649, 5243909, 2099202, 3072, 7340039, 2099202, 4195332, 3072, 6291462, 1051649, 7340039, 3147779, 4195332, 3147779, 7340039, 5243909, 3147779, 1051649, 5243909, 1051649, 7340039, 4195332, 3072, 6291462, 1051649, 4195332, 3147779, 1051649, 6291462, 4195332, 3072, 4195332, 6291462, 3072, 5243909, 2099202, 3072, 4195332, 1051649, 6291462, 4195332, 7340039, 2099202, 7340039, 3072, 6291462, 3147779, 6291462, 4195332, 3147779, 3072, 5243909, 2099202, 3147779, 5243909, 3072, 6291462, 4195332, 3072, 2099202, 3147779, 6291462, 4195332, 2099202, 6291462, 3072, 4195332, 3072, 4195332, 2099202, 6291462, 3072, 6291462, 3147779, 1051649, 7340039, 1051649, 6291462, 3072, 7340039, 4195332, 6291462, 3072, 3147779, 6291462, 3147779, 1051649, 7340039, 2099202, 6291462, 3147779,
+  5243909, 2099202, 1051649, 6291462, 4195332, 2099202, 3072, 7340039, 1051649, 4195332, 3072, 4195332, 2099202, 7340039, 4195332, 2099202, 7340039, 2099202, 5243909, 3072, 4195332, 1051649, 5243909, 3147779, 5243909, 3147779, 6291462, 3147779, 3072, 4195332, 3147779, 6291462, 3072, 7340039, 1051649, 6291462, 2099202, 7340039, 3072, 7340039, 4195332, 1051649, 5243909, 6291462, 2099202, 4195332, 2099202, 5243909, 3072, 7340039, 1051649, 2099202, 3072, 7340039, 2099202, 4195332, 6291462, 3147779, 1051649, 5243909, 2099202, 7340039, 2099202, 6291462, 3147779, 3072, 5243909, 6291462, 1051649, 2099202, 5243909, 3147779, 6291462, 3147779, 6291462, 4195332, 2099202, 3147779, 1051649, 5243909, 1051649, 5243909, 3147779, 5243909, 3072, 1051649, 7340039, 3147779, 6291462, 3072, 7340039, 3147779, 5243909, 2099202, 7340039, 4195332, 7340039, 6291462, 1051649, 5243909, 3072, 4195332, 5243909, 3147779, 7340039, 1051649, 7340039, 2099202, 7340039, 2099202, 3072, 5243909, 2099202, 4195332, 2099202, 5243909, 1051649, 2099202, 3147779, 6291462, 2099202, 3072, 7340039, 4195332, 5243909, 3072, 3147779, 1051649,
+  3072, 7340039, 4195332, 3147779, 1051649, 6291462, 3147779, 5243909, 3147779, 5243909, 7340039, 1051649, 6291462, 3147779, 1051649, 6291462, 3072, 6291462, 4195332, 7340039, 6291462, 2099202, 7340039, 2099202, 1051649, 7340039, 3072, 2099202, 5243909, 7340039, 1051649, 2099202, 4195332, 4195332, 5243909, 3072, 4195332, 2099202, 5243909, 3147779, 3147779, 6291462, 3072, 2099202, 7340039, 3147779, 6291462, 1051649, 4195332, 2099202, 5243909, 6291462, 4195332, 6291462, 3072, 7340039, 2099202, 3072, 7340039, 5243909, 1051649, 4195332, 5243909, 1051649, 7340039, 4195332, 3147779, 1051649, 6291462, 4195332, 1051649, 7340039, 3072, 5243909, 1051649, 7340039, 3072, 6291462, 3147779, 6291462, 2099202, 4195332, 1051649, 2099202, 7340039, 5243909, 4195332, 3072, 6291462, 4195332, 1051649, 6291462, 3072, 4195332, 1051649, 3147779, 3072, 2099202, 4195332, 1051649, 3147779, 7340039, 2099202, 1051649, 2099202, 5243909, 4195332, 1051649, 3147779, 4195332, 5243909, 3147779, 6291462, 3072, 7340039, 3147779, 4195332, 7340039, 3072, 5243909, 4195332, 3147779, 5243909, 1051649, 2099202, 6291462, 4195332, 7340039,
+  5243909, 3147779, 1051649, 7340039, 5243909, 2099202, 4195332, 3072, 7340039, 2099202, 1051649, 6291462, 3147779, 3072, 7340039, 3147779, 2099202, 5243909, 1051649, 3147779, 2099202, 5243909, 3072, 4195332, 6291462, 2099202, 4195332, 7340039, 1051649, 3147779, 6291462, 3072, 7340039, 2099202, 1051649, 6291462, 3147779, 1051649, 6291462, 3072, 6291462, 2099202, 4195332, 5243909, 1051649, 5243909, 3072, 3147779, 6291462, 7340039, 1051649, 3147779, 2099202, 1051649, 4195332, 1051649, 4195332, 5243909, 3147779, 2099202, 6291462, 3147779, 3072, 4195332, 2099202, 5243909, 2099202, 7340039, 3072, 6291462, 2099202, 4195332, 3147779, 2099202, 5243909, 1051649, 2099202, 5243909, 3072, 7340039, 3072, 4195332, 7340039, 5243909, 3147779, 1051649, 2099202, 5243909, 1051649, 2099202, 5243909, 2099202, 7340039, 5243909, 3147779, 6291462, 5243909, 1051649, 7340039, 6291462, 5243909, 1051649, 6291462, 4195332, 7340039, 3072, 3147779, 5243909, 6291462, 3072, 7340039, 1051649, 2099202, 5243909, 3147779, 1051649, 6291462, 4195332, 1051649, 7340039, 1051649, 6291462, 2099202, 7340039, 4195332, 3072, 3147779, 2099202,
+  6291462, 3072, 5243909, 2099202, 3072, 6291462, 1051649, 6291462, 2099202, 4195332, 5243909, 2099202, 4195332, 5243909, 2099202, 5243909, 3072, 7340039, 1051649, 5243909, 3072, 3147779, 7340039, 4195332, 3072, 5243909, 1051649, 5243909, 3147779, 5243909, 1051649, 4195332, 5243909, 3147779, 6291462, 3147779, 7340039, 4195332, 2099202, 5243909, 1051649, 5243909, 3147779, 3072, 6291462, 1051649, 7340039, 4195332, 3072, 4195332, 3072, 5243909, 4195332, 7340039, 3147779, 6291462, 3072, 7340039, 3072, 4195332, 1051649, 5243909, 7340039, 3147779, 6291462, 3072, 3147779, 2099202, 5243909, 1051649, 7340039, 3072, 7340039, 1051649, 4195332, 7340039, 4195332, 6291462, 3147779, 1051649, 3147779, 6291462, 2099202, 3072, 7340039, 5243909, 6291462, 3147779, 4195332, 7340039, 3072, 6291462, 1051649, 3072, 6291462, 2099202, 4195332, 5243909, 3072, 3147779, 3072, 5243909, 3147779, 3072, 4195332, 6291462, 2099202, 7340039, 1051649, 4195332, 2099202, 5243909, 6291462, 3147779, 1051649, 7340039, 3072, 2099202, 5243909, 2099202, 4195332, 3147779, 6291462, 3072, 3147779, 6291462, 5243909, 1051649,
+  4195332, 3147779, 4195332, 7340039, 4195332, 2099202, 5243909, 3072, 7340039, 3147779, 6291462, 3072, 7340039, 1051649, 6291462, 3147779, 4195332, 2099202, 6291462, 4195332, 7340039, 6291462, 1051649, 2099202, 6291462, 3147779, 7340039, 2099202, 3072, 7340039, 3147779, 7340039, 3072, 4195332, 3072, 5243909, 3072, 2099202, 6291462, 3147779, 7340039, 1051649, 7340039, 4195332, 2099202, 4195332, 5243909, 2099202, 6291462, 3147779, 7340039, 1051649, 6291462, 3072, 2099202, 5243909, 2099202, 3147779, 6291462, 2099202, 7340039, 4195332, 1051649, 3072, 5243909, 7340039, 5243909, 1051649, 6291462, 4195332, 3147779, 5243909, 2099202, 6291462, 3147779, 3072, 4195332, 1051649, 5243909, 4195332, 7340039, 1051649, 6291462, 4195332, 2099202, 3147779, 3072, 7340039, 1051649, 4195332, 2099202, 3147779, 4195332, 6291462, 2099202, 1051649, 7340039, 3147779, 6291462, 2099202, 7340039, 2099202, 6291462, 3147779, 5243909, 1051649, 4195332, 3072, 5243909, 3147779, 7340039, 3072, 4195332, 3072, 5243909, 4195332, 6291462, 3147779, 7340039, 3147779, 3072, 7340039, 2099202, 4195332, 7340039, 1051649, 2099202, 7340039,
+  3072, 6291462, 1051649, 1051649, 3147779, 7340039, 3147779, 5243909, 3147779, 3072, 1051649, 5243909, 3147779, 4195332, 2099202, 7340039, 3072, 6291462, 3147779, 3072, 1051649, 3147779, 5243909, 6291462, 1051649, 4195332, 3072, 6291462, 4195332, 2099202, 5243909, 1051649, 4195332, 2099202, 7340039, 1051649, 4195332, 7340039, 1051649, 4195332, 3072, 5243909, 2099202, 5243909, 6291462, 3072, 3147779, 7340039, 1051649, 2099202, 4195332, 3147779, 5243909, 2099202, 6291462, 1051649, 7340039, 4195332, 1051649, 6291462, 3072, 7340039, 3147779, 6291462, 2099202, 3147779, 3072, 4195332, 2099202, 7340039, 3072, 3147779, 5243909, 3072, 6291462, 2099202, 7340039, 2099202, 6291462, 3072, 3147779, 5243909, 2099202, 3072, 6291462, 1051649, 4195332, 6291462, 1051649, 6291462, 4195332, 7340039, 3072, 3147779, 4195332, 5243909, 3072, 3147779, 1051649, 5243909, 4195332, 7340039, 3072, 7340039, 2099202, 6291462, 3147779, 7340039, 2099202, 6291462, 1051649, 4195332, 6291462, 1051649, 7340039, 2099202, 3072, 5243909, 1051649, 5243909, 6291462, 1051649, 5243909, 1051649, 4195332, 4195332, 5243909, 2099202,
+  6291462, 4195332, 2099202, 6291462, 5243909, 3072, 4195332, 1051649, 6291462, 2099202, 4195332, 7340039, 2099202, 3072, 5243909, 1051649, 3147779, 5243909, 1051649, 5243909, 7340039, 3147779, 3072, 4195332, 2099202, 6291462, 3147779, 2099202, 5243909, 3072, 6291462, 3147779, 6291462, 2099202, 5243909, 3147779, 5243909, 2099202, 6291462, 3147779, 7340039, 1051649, 6291462, 3072, 3147779, 7340039, 1051649, 4195332, 5243909, 6291462, 3072, 7340039, 3072, 5243909, 3147779, 3147779, 5243909, 3072, 5243909, 3147779, 4195332, 2099202, 4195332, 1051649, 6291462, 3147779, 4195332, 6291462, 3072, 3147779, 6291462, 1051649, 7340039, 4195332, 2099202, 5243909, 3147779, 3072, 2099202, 6291462, 4195332, 1051649, 7340039, 4195332, 5243909, 7340039, 2099202, 3147779, 3147779, 5243909, 3072, 5243909, 2099202, 7340039, 1051649, 4195332, 7340039, 4195332, 7340039, 3072, 2099202, 1051649, 5243909, 3147779, 1051649, 3072, 5243909, 1051649, 3072, 4195332, 7340039, 2099202, 3147779, 5243909, 1051649, 4195332, 6291462, 2099202, 6291462, 3072, 2099202, 6291462, 3147779, 7340039, 3072, 7340039, 3072, 3147779,
+  1051649, 2099202, 7340039, 3072, 4195332, 7340039, 2099202, 7340039, 4195332, 1051649, 6291462, 3072, 3147779, 7340039, 4195332, 6291462, 3072, 7340039, 2099202, 4195332, 2099202, 5243909, 7340039, 3072, 7340039, 1051649, 6291462, 3072, 7340039, 3147779, 1051649, 5243909, 3072, 6291462, 3072, 7340039, 3072, 4195332, 1051649, 5243909, 3072, 4195332, 3147779, 7340039, 1051649, 4195332, 3147779, 6291462, 3072, 2099202, 5243909, 4195332, 2099202, 7340039, 1051649, 6291462, 1051649, 3147779, 7340039, 1051649, 6291462, 3072, 7340039, 5243909, 3072, 7340039, 1051649, 2099202, 7340039, 4195332, 5243909, 2099202, 4195332, 3072, 6291462, 1051649, 6291462, 3147779, 7340039, 4195332, 3072, 6291462, 1051649, 3147779, 3072, 2099202, 6291462, 3072, 7340039, 1051649, 7340039, 1051649, 5243909, 1051649, 6291462, 2099202, 3072, 2099202, 5243909, 3147779, 6291462, 4195332, 3072, 6291462, 4195332, 7340039, 3147779, 5243909, 6291462, 3147779, 1051649, 6291462, 3072, 7340039, 4195332, 3072, 2099202, 4195332, 3147779, 5243909, 4195332, 3072, 2099202, 5243909, 3147779, 1051649, 6291462, 5243909,
+  7340039, 4195332, 1051649, 6291462, 3147779, 3072, 5243909, 1051649, 3147779, 7340039, 2099202, 5243909, 6291462, 1051649, 1051649, 4195332, 3147779, 6291462, 4195332, 3072, 6291462, 1051649, 3147779, 4195332, 5243909, 3147779, 5243909, 4195332, 3147779, 1051649, 7340039, 2099202, 7340039, 4195332, 3147779, 2099202, 6291462, 3147779, 2099202, 7340039, 3147779, 6291462, 3072, 5243909, 2099202, 5243909, 1051649, 2099202, 7340039, 5243909, 2099202, 3147779, 6291462, 2099202, 4195332, 3072, 6291462, 4195332, 2099202, 5243909, 2099202, 5243909, 2099202, 4195332, 3147779, 5243909, 1051649, 5243909, 1051649, 5243909, 3072, 6291462, 7340039, 2099202, 3147779, 7340039, 3072, 5243909, 1051649, 5243909, 3147779, 2099202, 5243909, 5243909, 7340039, 4195332, 1051649, 5243909, 4195332, 3147779, 2099202, 4195332, 6291462, 3072, 3147779, 5243909, 3147779, 6291462, 1051649, 4195332, 1051649, 7340039, 3147779, 1051649, 2099202, 4195332, 1051649, 7340039, 2099202, 1051649, 5243909, 3147779, 5243909, 2099202, 4195332, 6291462, 7340039, 3072, 7340039, 1051649, 7340039, 3147779, 5243909, 1051649, 4195332, 5243909, 2099202, 3147779,
+  3072, 4195332, 5243909, 2099202, 5243909, 2099202, 4195332, 6291462, 3072, 4195332, 1051649, 3147779, 3072, 3147779, 7340039, 2099202, 6291462, 1051649, 2099202, 7340039, 4195332, 2099202, 6291462, 1051649, 7340039, 3072, 1051649, 2099202, 6291462, 4195332, 5243909, 3072, 4195332, 1051649, 4195332, 5243909, 1051649, 7340039, 5243909, 2099202, 1051649, 3147779, 6291462, 2099202, 7340039, 3072, 4195332, 7340039, 3147779, 1051649, 6291462, 1051649, 3072, 7340039, 4195332, 5243909, 2099202, 7340039, 4195332, 3072, 7340039, 3147779, 3072, 6291462, 1051649, 6291462, 4195332, 3147779, 2099202, 7340039, 2099202, 3147779, 1051649, 5243909, 4195332, 1051649, 5243909, 2099202, 7340039, 3147779, 1051649, 7340039, 3072, 3147779, 1051649, 4195332, 3072, 7340039, 3072, 6291462, 5243909, 3072, 4195332, 3147779, 6291462, 3072, 7340039, 2099202, 5243909, 3072, 5243909, 2099202, 6291462, 5243909, 6291462, 3072, 5243909, 2099202, 4195332, 6291462, 2099202, 7340039, 3072, 3147779, 6291462, 2099202, 1051649, 5243909, 3147779, 2099202, 3072, 6291462, 1051649, 7340039, 3072, 6291462, 1051649, 5243909,
+  2099202, 3147779, 3072, 7340039, 1051649, 6291462, 3072, 2099202, 6291462, 5243909, 7340039, 5243909, 4195332, 6291462, 5243909, 3072, 3147779, 5243909, 3147779, 5243909, 1051649, 5243909, 3072, 6291462, 2099202, 4195332, 7340039, 3147779, 3072, 7340039, 2099202, 3147779, 6291462, 2099202, 7340039, 1051649, 3147779, 4195332, 3072, 5243909, 7340039, 4195332, 1051649, 4195332, 2099202, 6291462, 3147779, 3072, 1051649, 5243909, 3147779, 7340039, 4195332, 3147779, 2099202, 1051649, 6291462, 3072, 3147779, 6291462, 1051649, 5243909, 1051649, 7340039, 4195332, 2099202, 3072, 7340039, 3072, 4195332, 5243909, 7340039, 3147779, 3072, 7340039, 2099202, 4195332, 6291462, 3072, 6291462, 5243909, 4195332, 2099202, 6291462, 7340039, 3147779, 6291462, 2099202, 3147779, 5243909, 2099202, 6291462, 2099202, 7340039, 2099202, 4195332, 1051649, 6291462, 4195332, 7340039, 3147779, 4195332, 3072, 3147779, 2099202, 7340039, 4195332, 1051649, 7340039, 3072, 4195332, 1051649, 6291462, 5243909, 1051649, 3147779, 5243909, 3072, 6291462, 5243909, 6291462, 3147779, 4195332, 3147779, 7340039, 3147779, 4195332, 6291462,
+  7340039, 5243909, 6291462, 1051649, 5243909, 3147779, 7340039, 4195332, 2099202, 2099202, 3147779, 1051649, 7340039, 1051649, 2099202, 7340039, 4195332, 1051649, 7340039, 3072, 7340039, 2099202, 5243909, 3147779, 3072, 5243909, 2099202, 4195332, 5243909, 1051649, 4195332, 6291462, 1051649, 5243909, 3072, 4195332, 6291462, 1051649, 7340039, 2099202, 3072, 5243909, 6291462, 3072, 6291462, 3147779, 4195332, 7340039, 4195332, 5243909, 3072, 1051649, 5243909, 3072, 7340039, 5243909, 3147779, 1051649, 5243909, 2099202, 4195332, 3147779, 6291462, 1051649, 3147779, 5243909, 6291462, 3147779, 6291462, 2099202, 3072, 1051649, 6291462, 4195332, 2099202, 7340039, 3072, 3147779, 1051649, 3147779, 3072, 7340039, 2099202, 4195332, 3072, 5243909, 2099202, 6291462, 1051649, 7340039, 1051649, 3147779, 7340039, 3072, 4195332, 3147779, 7340039, 2099202, 3072, 3147779, 1051649, 6291462, 4195332, 7340039, 1051649, 3147779, 3072, 6291462, 3147779, 3147779, 7340039, 3147779, 4195332, 3072, 7340039, 4195332, 7340039, 3147779, 4195332, 1051649, 2099202, 5243909, 3072, 6291462, 2099202, 3072, 5243909, 1051649,
+  2099202, 3072, 3147779, 4195332, 7340039, 3072, 4195332, 1051649, 6291462, 3072, 5243909, 3072, 2099202, 5243909, 4195332, 3072, 3147779, 6291462, 2099202, 3147779, 4195332, 3147779, 7340039, 1051649, 6291462, 3147779, 6291462, 3072, 7340039, 2099202, 7340039, 3072, 6291462, 2099202, 7340039, 3147779, 3072, 5243909, 1051649, 4195332, 6291462, 1051649, 3147779, 5243909, 2099202, 3072, 5243909, 1051649, 2099202, 7340039, 3147779, 6291462, 2099202, 4195332, 6291462, 1051649, 6291462, 3147779, 5243909, 3072, 7340039, 3072, 7340039, 2099202, 4195332, 3072, 2099202, 1051649, 4195332, 5243909, 6291462, 5243909, 2099202, 3072, 6291462, 1051649, 5243909, 6291462, 4195332, 6291462, 4195332, 1051649, 5243909, 1051649, 3147779, 6291462, 3072, 5243909, 3147779, 3147779, 4195332, 6291462, 1051649, 5243909, 1051649, 5243909, 3072, 5243909, 6291462, 4195332, 7340039, 1051649, 5243909, 3072, 5243909, 6291462, 3147779, 5243909, 2099202, 6291462, 3072, 5243909, 2099202, 5243909, 2099202, 1051649, 3072, 5243909, 1051649, 7340039, 4195332, 2099202, 7340039, 1051649, 4195332, 7340039, 2099202, 6291462,
+  5243909, 4195332, 7340039, 3072, 2099202, 5243909, 3147779, 6291462, 4195332, 3147779, 7340039, 4195332, 6291462, 3072, 6291462, 5243909, 6291462, 3072, 5243909, 1051649, 6291462, 3072, 2099202, 5243909, 4195332, 1051649, 2099202, 5243909, 3147779, 4195332, 1051649, 3147779, 5243909, 4195332, 1051649, 6291462, 4195332, 3147779, 7340039, 2099202, 3072, 7340039, 2099202, 7340039, 3147779, 6291462, 2099202, 4195332, 6291462, 3072, 5243909, 1051649, 6291462, 3072, 2099202, 4195332, 1051649, 7340039, 3072, 6291462, 5243909, 2099202, 4195332, 5243909, 1051649, 7340039, 5243909, 7340039, 1051649, 3147779, 3147779, 1051649, 7340039, 4195332, 3147779, 5243909, 3147779, 2099202, 1051649, 5243909, 2099202, 6291462, 3147779, 7340039, 4195332, 1051649, 4195332, 7340039, 3072, 7340039, 3072, 2099202, 6291462, 3147779, 7340039, 2099202, 4195332, 3147779, 2099202, 3072, 2099202, 5243909, 3147779, 2099202, 4195332, 1051649, 2099202, 6291462, 3072, 5243909, 2099202, 6291462, 1051649, 7340039, 3147779, 6291462, 4195332, 2099202, 7340039, 3147779, 3072, 6291462, 1051649, 5243909, 2099202, 4195332, 1051649, 3147779,
+  1051649, 3072, 5243909, 3147779, 6291462, 1051649, 2099202, 1051649, 6291462, 1051649, 5243909, 2099202, 3147779, 7340039, 2099202, 1051649, 2099202, 4195332, 3147779, 7340039, 2099202, 4195332, 6291462, 1051649, 3147779, 7340039, 4195332, 6291462, 3072, 6291462, 2099202, 5243909, 3072, 3147779, 7340039, 3147779, 2099202, 6291462, 3072, 5243909, 3147779, 4195332, 5243909, 3072, 1051649, 6291462, 3072, 7340039, 2099202, 4195332, 3147779, 6291462, 2099202, 7340039, 5243909, 3147779, 5243909, 2099202, 4195332, 3147779, 1051649, 3147779, 6291462, 3072, 6291462, 3147779, 1051649, 4195332, 6291462, 3072, 4195332, 6291462, 2099202, 5243909, 1051649, 7340039, 1051649, 4195332, 7340039, 3072, 7340039, 1051649, 4195332, 2099202, 3072, 6291462, 1051649, 4195332, 2099202, 5243909, 3147779, 5243909, 1051649, 4195332, 3072, 6291462, 1051649, 7340039, 3147779, 7340039, 5243909, 3072, 6291462, 2099202, 7340039, 4195332, 7340039, 1051649, 4195332, 7340039, 1051649, 3147779, 4195332, 3072, 6291462, 1051649, 5243909, 3147779, 3072, 6291462, 5243909, 3147779, 4195332, 7340039, 3072, 6291462, 3147779, 7340039,
+  7340039, 4195332, 1051649, 7340039, 3072, 4195332, 7340039, 5243909, 3147779, 3072, 5243909, 1051649, 5243909, 3072, 4195332, 7340039, 3147779, 5243909, 1051649, 4195332, 3072, 7340039, 3147779, 7340039, 3072, 6291462, 3072, 5243909, 1051649, 2099202, 7340039, 4195332, 6291462, 1051649, 5243909, 3072, 6291462, 1051649, 5243909, 1051649, 6291462, 3072, 3147779, 6291462, 4195332, 3147779, 5243909, 1051649, 5243909, 1051649, 7340039, 1051649, 4195332, 2099202, 3072, 6291462, 3072, 7340039, 2099202, 5243909, 7340039, 1051649, 2099202, 7340039, 3147779, 3072, 7340039, 3147779, 2099202, 5243909, 7340039, 1051649, 3147779, 3072, 6291462, 3072, 6291462, 3147779, 2099202, 5243909, 3147779, 3072, 5243909, 2099202, 7340039, 3147779, 5243909, 2099202, 6291462, 1051649, 7340039, 2099202, 6291462, 5243909, 2099202, 4195332, 5243909, 3072, 6291462, 1051649, 4195332, 7340039, 2099202, 6291462, 3072, 3147779, 3072, 5243909, 3147779, 2099202, 5243909, 3072, 7340039, 4195332, 2099202, 7340039, 1051649, 6291462, 4195332, 2099202, 1051649, 6291462, 3072, 2099202, 5243909, 1051649, 4195332, 2099202,
+  3072, 3147779, 6291462, 2099202, 5243909, 3147779, 3072, 2099202, 4195332, 7340039, 3147779, 7340039, 2099202, 4195332, 1051649, 1051649, 6291462, 3072, 6291462, 2099202, 5243909, 2099202, 3072, 5243909, 2099202, 4195332, 2099202, 3147779, 7340039, 3147779, 5243909, 3072, 1051649, 6291462, 2099202, 7340039, 2099202, 4195332, 4195332, 7340039, 2099202, 6291462, 4195332, 1051649, 7340039, 2099202, 3072, 7340039, 3147779, 6291462, 3147779, 3072, 7340039, 4195332, 2099202, 5243909, 4195332, 4195332, 1051649, 6291462, 3072, 4195332, 5243909, 2099202, 4195332, 5243909, 2099202, 3072, 6291462, 3147779, 3072, 4195332, 7340039, 4195332, 2099202, 5243909, 4195332, 3072, 6291462, 2099202, 4195332, 6291462, 4195332, 6291462, 3072, 5243909, 1051649, 5243909, 3072, 4195332, 3147779, 3072, 1051649, 7340039, 1051649, 6291462, 1051649, 5243909, 2099202, 5243909, 3147779, 1051649, 4195332, 1051649, 5243909, 5243909, 6291462, 4195332, 3072, 6291462, 2099202, 7340039, 1051649, 3147779, 5243909, 3072, 4195332, 1051649, 7340039, 3147779, 7340039, 2099202, 5243909, 6291462, 2099202, 7340039, 3147779, 5243909,
+  2099202, 6291462, 1051649, 7340039, 4195332, 1051649, 7340039, 3147779, 6291462, 1051649, 6291462, 3072, 7340039, 5243909, 6291462, 4195332, 2099202, 7340039, 3147779, 6291462, 1051649, 4195332, 5243909, 1051649, 6291462, 1051649, 7340039, 4195332, 3072, 5243909, 2099202, 6291462, 3147779, 4195332, 3072, 4195332, 3147779, 1051649, 6291462, 3072, 3147779, 4195332, 2099202, 7340039, 2099202, 5243909, 6291462, 4195332, 3072, 2099202, 5243909, 3147779, 5243909, 1051649, 7340039, 1051649, 3147779, 6291462, 3072, 4195332, 3147779, 6291462, 4195332, 3072, 6291462, 1051649, 5243909, 7340039, 4195332, 1051649, 7340039, 2099202, 5243909, 2099202, 6291462, 3147779, 2099202, 7340039, 5243909, 1051649, 7340039, 3072, 1051649, 3147779, 7340039, 2099202, 7340039, 3147779, 6291462, 2099202, 6291462, 7340039, 3147779, 5243909, 2099202, 3147779, 7340039, 3147779, 4195332, 3072, 6291462, 4195332, 3072, 7340039, 3147779, 2099202, 2099202, 1051649, 7340039, 4195332, 1051649, 3147779, 5243909, 3072, 6291462, 3147779, 7340039, 5243909, 2099202, 3072, 4195332, 5243909, 3072, 3147779, 1051649, 4195332, 3072, 6291462,
+  5243909, 1051649, 4195332, 3147779, 2099202, 6291462, 5243909, 3072, 2099202, 4195332, 2099202, 4195332, 3147779, 3072, 2099202, 7340039, 4195332, 1051649, 4195332, 3072, 7340039, 3147779, 3147779, 7340039, 3072, 5243909, 3147779, 1051649, 7340039, 3072, 4195332, 5243909, 2099202, 7340039, 5243909, 1051649, 5243909, 7340039, 2099202, 3147779, 7340039, 1051649, 5243909, 3072, 4195332, 3147779, 1051649, 4195332, 7340039, 4195332, 1051649, 6291462, 2099202, 4195332, 5243909, 6291462, 1051649, 3147779, 7340039, 2099202, 5243909, 1051649, 3147779, 7340039, 2099202, 7340039, 1051649, 2099202, 4195332, 5243909, 1051649, 6291462, 3072, 5243909, 3072, 1051649, 5243909, 3072, 2099202, 3147779, 5243909, 3147779, 7340039, 5243909, 4195332, 1051649, 4195332, 1051649, 4195332, 3072, 4195332, 1051649, 4195332, 3072, 4195332, 6291462, 3072, 1051649, 7340039, 3147779, 6291462, 1051649, 6291462, 3147779, 3072, 4195332, 7340039, 3147779, 4195332, 2099202, 6291462, 2099202, 4195332, 7340039, 2099202, 4195332, 3072, 1051649, 6291462, 3147779, 6291462, 1051649, 7340039, 3147779, 6291462, 6291462, 1051649, 3147779,
+  3072, 7340039, 5243909, 3072, 6291462, 1051649, 3147779, 5243909, 7340039, 3072, 6291462, 4195332, 6291462, 1051649, 5243909, 3072, 3147779, 6291462, 2099202, 5243909, 2099202, 6291462, 3072, 4195332, 3147779, 3072, 6291462, 5243909, 2099202, 6291462, 3147779, 1051649, 7340039, 3072, 3147779, 7340039, 3072, 2099202, 4195332, 6291462, 3072, 5243909, 3147779, 6291462, 5243909, 2099202, 6291462, 3072, 2099202, 7340039, 5243909, 3072, 7340039, 3072, 2099202, 3147779, 7340039, 3072, 5243909, 3147779, 3072, 6291462, 5243909, 3072, 3147779, 4195332, 3147779, 6291462, 3072, 2099202, 5243909, 3147779, 7340039, 3147779, 7340039, 6291462, 3147779, 7340039, 4195332, 7340039, 3072, 4195332, 2099202, 3072, 3147779, 6291462, 3072, 6291462, 7340039, 2099202, 7340039, 5243909, 2099202, 6291462, 1051649, 5243909, 3147779, 6291462, 2099202, 5243909, 1051649, 4195332, 2099202, 5243909, 7340039, 1051649, 6291462, 3072, 7340039, 3072, 5243909, 7340039, 3072, 3147779, 1051649, 6291462, 3147779, 5243909, 4195332, 5243909, 1051649, 4195332, 2099202, 4195332, 3072, 5243909, 3147779, 7340039,
+  4195332, 3147779, 2099202, 5243909, 4195332, 7340039, 4195332, 1051649, 2099202, 5243909, 3072, 3147779, 1051649, 5243909, 3147779, 6291462, 1051649, 5243909, 4195332, 7340039, 1051649, 4195332, 1051649, 6291462, 4195332, 7340039, 2099202, 3147779, 5243909, 1051649, 3147779, 6291462, 2099202, 5243909, 1051649, 4195332, 6291462, 6291462, 1051649, 5243909, 2099202, 7340039, 1051649, 2099202, 1051649, 7340039, 1051649, 6291462, 5243909, 3072, 3147779, 4195332, 2099202, 5243909, 7340039, 3072, 4195332, 2099202, 6291462, 1051649, 7340039, 1051649, 2099202, 5243909, 7340039, 3072, 6291462, 1051649, 4195332, 7340039, 3147779, 3072, 4195332, 2099202, 4195332, 3072, 4195332, 1051649, 3147779, 1051649, 6291462, 2099202, 4195332, 6291462, 5243909, 2099202, 5243909, 3147779, 1051649, 5243909, 3072, 2099202, 7340039, 3147779, 6291462, 3072, 7340039, 4195332, 3072, 4195332, 7340039, 3072, 7340039, 1051649, 3147779, 6291462, 1051649, 5243909, 2099202, 5243909, 1051649, 3147779, 5243909, 4195332, 6291462, 2099202, 1051649, 7340039, 2099202, 3072, 7340039, 3147779, 6291462, 1051649, 7340039, 1051649, 5243909, 2099202,
+  3072, 6291462, 1051649, 7340039, 2099202, 3072, 3147779, 6291462, 7340039, 2099202, 6291462, 2099202, 7340039, 3147779, 7340039, 1051649, 7340039, 3147779, 3072, 2099202, 4195332, 7340039, 5243909, 2099202, 1051649, 5243909, 1051649, 6291462, 3072, 4195332, 7340039, 3072, 6291462, 3147779, 6291462, 3072, 2099202, 3147779, 3072, 4195332, 6291462, 3072, 4195332, 6291462, 5243909, 3147779, 3072, 3147779, 4195332, 3147779, 6291462, 1051649, 6291462, 3147779, 1051649, 6291462, 3147779, 7340039, 2099202, 5243909, 4195332, 3147779, 6291462, 4195332, 1051649, 5243909, 2099202, 3147779, 6291462, 1051649, 5243909, 2099202, 6291462, 3072, 5243909, 2099202, 7340039, 6291462, 3072, 6291462, 3147779, 7340039, 1051649, 2099202, 3072, 7340039, 2099202, 3072, 6291462, 2099202, 5243909, 4195332, 3072, 4195332, 2099202, 3147779, 1051649, 2099202, 6291462, 2099202, 3147779, 5243909, 3147779, 5243909, 4195332, 3072, 5243909, 4195332, 6291462, 3147779, 6291462, 2099202, 1051649, 7340039, 3072, 4195332, 6291462, 3072, 4195332, 6291462, 3147779, 3072, 5243909, 2099202, 5243909, 4195332, 3072, 6291462,
+  2099202, 5243909, 4195332, 3072, 3147779, 6291462, 4195332, 3072, 4195332, 1051649, 3147779, 5243909, 3072, 4195332, 3072, 2099202, 5243909, 2099202, 5243909, 7340039, 1051649, 3072, 3147779, 6291462, 2099202, 7340039, 4195332, 3147779, 7340039, 2099202, 1051649, 5243909, 2099202, 4195332, 1051649, 5243909, 7340039, 4195332, 7340039, 2099202, 1051649, 5243909, 3147779, 1051649, 3072, 4195332, 7340039, 2099202, 7340039, 1051649, 5243909, 3072, 7340039, 1051649, 6291462, 4195332, 3072, 4195332, 1051649, 5243909, 1051649, 7340039, 3072, 2099202, 6291462, 4195332, 7340039, 4195332, 3072, 7340039, 1051649, 6291462, 1051649, 7340039, 3147779, 5243909, 1051649, 3147779, 5243909, 2099202, 5243909, 1051649, 6291462, 4195332, 5243909, 1051649, 4195332, 6291462, 3147779, 3147779, 7340039, 1051649, 3147779, 5243909, 3147779, 7340039, 6291462, 5243909, 1051649, 7340039, 1051649, 6291462, 3072, 2099202, 6291462, 2099202, 7340039, 2099202, 3072, 1051649, 4195332, 6291462, 4195332, 2099202, 5243909, 3147779, 4195332, 7340039, 2099202, 1051649, 4195332, 6291462, 2099202, 6291462, 3072, 3147779, 7340039, 4195332,
+  7340039, 1051649, 3147779, 6291462, 5243909, 1051649, 7340039, 2099202, 6291462, 5243909, 3072, 6291462, 3147779, 6291462, 4195332, 7340039, 3072, 6291462, 1051649, 3147779, 6291462, 3147779, 5243909, 3072, 4195332, 1051649, 3072, 6291462, 2099202, 5243909, 3147779, 7340039, 3072, 3147779, 6291462, 4195332, 2099202, 1051649, 3147779, 5243909, 7340039, 3147779, 7340039, 4195332, 6291462, 2099202, 3147779, 5243909, 3072, 6291462, 3147779, 2099202, 4195332, 4195332, 1051649, 5243909, 2099202, 6291462, 3147779, 7340039, 3072, 4195332, 3147779, 6291462, 3072, 2099202, 3072, 5243909, 3147779, 4195332, 2099202, 5243909, 4195332, 2099202, 4195332, 3072, 6291462, 4195332, 1051649, 7340039, 3072, 5243909, 3147779, 1051649, 7340039, 3147779, 7340039, 1051649, 5243909, 3072, 4195332, 6291462, 2099202, 7340039, 1051649, 4195332, 3072, 3147779, 5243909, 3072, 4195332, 2099202, 7340039, 4195332, 3072, 4195332, 1051649, 3147779, 7340039, 5243909, 3072, 7340039, 3072, 5243909, 1051649, 7340039, 1051649, 2099202, 5243909, 3147779, 7340039, 1051649, 4195332, 1051649, 7340039, 4195332, 1051649, 2099202,
+  3072, 4195332, 1051649, 5243909, 2099202, 3072, 5243909, 3147779, 1051649, 3147779, 7340039, 2099202, 5243909, 1051649, 4195332, 2099202, 5243909, 4195332, 3072, 5243909, 2099202, 7340039, 1051649, 6291462, 4195332, 7340039, 5243909, 3147779, 4195332, 3072, 6291462, 1051649, 4195332, 7340039, 2099202, 3072, 6291462, 2099202, 7340039, 3072, 4195332, 1051649, 4195332, 3072, 2099202, 6291462, 1051649, 4195332, 5243909, 1051649, 4195332, 7340039, 3147779, 3072, 6291462, 2099202, 7340039, 4195332, 1051649, 3147779, 6291462, 2099202, 7340039, 1051649, 5243909, 3147779, 7340039, 1051649, 6291462, 1051649, 7340039, 3147779, 3072, 6291462, 1051649, 7340039, 1051649, 2099202, 5243909, 3147779, 4195332, 2099202, 6291462, 3072, 5243909, 3072, 4195332, 2099202, 7340039, 3147779, 7340039, 1051649, 5243909, 3072, 6291462, 2099202, 7340039, 4195332, 2099202, 7340039, 3147779, 5243909, 1051649, 5243909, 7340039, 3147779, 6291462, 5243909, 2099202, 4195332, 3147779, 1051649, 6291462, 2099202, 5243909, 3072, 3147779, 6291462, 3072, 6291462, 2099202, 3147779, 7340039, 4195332, 3072, 6291462, 3147779, 5243909,
+  7340039, 5243909, 7340039, 3072, 3147779, 7340039, 2099202, 7340039, 4195332, 4195332, 1051649, 6291462, 3072, 7340039, 1051649, 6291462, 2099202, 7340039, 3147779, 6291462, 3072, 4195332, 3147779, 1051649, 3147779, 3072, 2099202, 7340039, 1051649, 6291462, 2099202, 4195332, 5243909, 3072, 5243909, 3147779, 6291462, 4195332, 1051649, 5243909, 2099202, 6291462, 2099202, 5243909, 7340039, 1051649, 4195332, 7340039, 2099202, 4195332, 3072, 6291462, 2099202, 7340039, 3147779, 5243909, 3072, 2099202, 6291462, 4195332, 1051649, 5243909, 3072, 4195332, 5243909, 1051649, 4195332, 6291462, 2099202, 5243909, 3072, 2099202, 7340039, 3147779, 6291462, 3147779, 4195332, 7340039, 2099202, 6291462, 1051649, 7340039, 2099202, 6291462, 3147779, 4195332, 2099202, 6291462, 1051649, 4195332, 3072, 5243909, 3147779, 4195332, 1051649, 5243909, 3147779, 3072, 6291462, 4195332, 3072, 6291462, 4195332, 2099202, 1051649, 5243909, 1051649, 3072, 7340039, 1051649, 5243909, 4195332, 3147779, 7340039, 1051649, 7340039, 2099202, 5243909, 2099202, 4195332, 3072, 5243909, 2099202, 5243909, 3147779, 2099202, 6291462, 1051649,
+  3147779, 1051649, 2099202, 6291462, 4195332, 1051649, 5243909, 1051649, 3072, 6291462, 2099202, 3147779, 5243909, 1051649, 5243909, 3147779, 3072, 3147779, 1051649, 5243909, 2099202, 7340039, 2099202, 6291462, 6291462, 4195332, 5243909, 1051649, 5243909, 3147779, 7340039, 3072, 2099202, 4195332, 1051649, 7340039, 1051649, 3072, 6291462, 3147779, 5243909, 2099202, 6291462, 3072, 3147779, 5243909, 2099202, 3072, 7340039, 3147779, 6291462, 1051649, 5243909, 3147779, 3072, 7340039, 1051649, 6291462, 5243909, 3072, 7340039, 3147779, 3147779, 6291462, 2099202, 7340039, 2099202, 3072, 4195332, 3147779, 6291462, 5243909, 4195332, 1051649, 5243909, 3072, 5243909, 3072, 4195332, 3072, 4195332, 5243909, 3072, 4195332, 1051649, 7340039, 3072, 6291462, 5243909, 2099202, 7340039, 1051649, 6291462, 2099202, 7340039, 1051649, 6291462, 5243909, 1051649, 3147779, 2099202, 1051649, 7340039, 2099202, 6291462, 3147779, 7340039, 3147779, 6291462, 2099202, 4195332, 3072, 6291462, 3072, 3147779, 4195332, 3147779, 6291462, 1051649, 7340039, 5243909, 1051649, 6291462, 3072, 7340039, 5243909, 3072, 4195332,
+  6291462, 3147779, 4195332, 2099202, 6291462, 2099202, 3147779, 6291462, 5243909, 2099202, 7340039, 4195332, 3147779, 7340039, 2099202, 6291462, 4195332, 7340039, 5243909, 4195332, 1051649, 5243909, 3072, 4195332, 3072, 3147779, 1051649, 7340039, 4195332, 3072, 3147779, 5243909, 7340039, 3147779, 6291462, 3147779, 5243909, 7340039, 4195332, 1051649, 7340039, 3072, 3147779, 7340039, 5243909, 3072, 6291462, 5243909, 1051649, 6291462, 2099202, 4195332, 1051649, 5243909, 2099202, 4195332, 5243909, 1051649, 3147779, 5243909, 2099202, 1051649, 7340039, 3072, 6291462, 3147779, 1051649, 5243909, 7340039, 1051649, 3147779, 3072, 2099202, 7340039, 2099202, 4195332, 3147779, 7340039, 2099202, 6291462, 1051649, 6291462, 3147779, 7340039, 4195332, 2099202, 5243909, 3147779, 3072, 5243909, 3147779, 4195332, 3072, 5243909, 2099202, 3147779, 4195332, 2099202, 1051649, 7340039, 5243909, 6291462, 3072, 5243909, 4195332, 3072, 5243909, 2099202, 3147779, 6291462, 1051649, 7340039, 2099202, 5243909, 1051649, 6291462, 3072, 7340039, 4195332, 1051649, 3147779, 7340039, 2099202, 4195332, 1051649, 3147779, 6291462, 2099202,
+  5243909, 3072, 7340039, 1051649, 5243909, 3072, 6291462, 3072, 3147779, 5243909, 3072, 6291462, 3072, 4195332, 4195332, 3072, 1051649, 2099202, 4195332, 3072, 6291462, 3147779, 7340039, 2099202, 5243909, 7340039, 4195332, 2099202, 6291462, 2099202, 6291462, 2099202, 1051649, 5243909, 3072, 4195332, 3072, 3147779, 2099202, 6291462, 1051649, 5243909, 4195332, 1051649, 2099202, 7340039, 3147779, 1051649, 4195332, 3147779, 5243909, 3072, 7340039, 3147779, 6291462, 1051649, 4195332, 2099202, 7340039, 3072, 4195332, 5243909, 2099202, 4195332, 3147779, 3072, 6291462, 3147779, 2099202, 4195332, 7340039, 4195332, 6291462, 1051649, 6291462, 1051649, 5243909, 3072, 5243909, 3147779, 7340039, 3147779, 2099202, 4195332, 3072, 7340039, 2099202, 6291462, 4195332, 3072, 6291462, 1051649, 7340039, 4195332, 3072, 7340039, 3072, 3147779, 6291462, 3072, 2099202, 3147779, 4195332, 3147779, 2099202, 7340039, 4195332, 3072, 7340039, 3072, 5243909, 3147779, 7340039, 4195332, 5243909, 2099202, 4195332, 3072, 3147779, 6291462, 4195332, 3072, 3147779, 5243909, 6291462, 2099202, 7340039, 3072,
+  2099202, 7340039, 3147779, 4195332, 2099202, 7340039, 4195332, 6291462, 1051649, 4195332, 1051649, 7340039, 5243909, 2099202, 6291462, 3147779, 7340039, 6291462, 1051649, 6291462, 2099202, 5243909, 1051649, 6291462, 1051649, 2099202, 6291462, 3072, 3147779, 5243909, 3072, 6291462, 1051649, 4195332, 6291462, 2099202, 5243909, 7340039, 3072, 4195332, 3147779, 1051649, 7340039, 3147779, 6291462, 1051649, 4195332, 6291462, 7340039, 3072, 3147779, 7340039, 2099202, 2099202, 3072, 5243909, 7340039, 3072, 6291462, 2099202, 7340039, 1051649, 6291462, 3072, 5243909, 7340039, 2099202, 6291462, 3072, 6291462, 3072, 2099202, 5243909, 3147779, 3072, 6291462, 2099202, 7340039, 1051649, 3147779, 3072, 5243909, 6291462, 3072, 5243909, 3147779, 1051649, 1051649, 2099202, 7340039, 4195332, 3147779, 5243909, 1051649, 6291462, 2099202, 5243909, 6291462, 4195332, 7340039, 5243909, 3072, 7340039, 1051649, 6291462, 3072, 3147779, 6291462, 2099202, 5243909, 6291462, 1051649, 3147779, 3072, 2099202, 7340039, 3147779, 6291462, 5243909, 3072, 2099202, 6291462, 7340039, 1051649, 4195332, 3072, 5243909, 3147779,
+  4195332, 3072, 5243909, 1051649, 5243909, 3147779, 1051649, 4195332, 3147779, 7340039, 3147779, 2099202, 1051649, 6291462, 1051649, 5243909, 3072, 3147779, 4195332, 3147779, 7340039, 3072, 4195332, 3147779, 7340039, 5243909, 1051649, 7340039, 4195332, 1051649, 5243909, 3147779, 4195332, 7340039, 1051649, 7340039, 2099202, 5243909, 2099202, 7340039, 3147779, 6291462, 2099202, 4195332, 3072, 5243909, 2099202, 3072, 2099202, 6291462, 5243909, 1051649, 6291462, 4195332, 7340039, 2099202, 3147779, 5243909, 3147779, 4195332, 3072, 5243909, 3147779, 7340039, 2099202, 4195332, 1051649, 4195332, 5243909, 2099202, 4195332, 7340039, 1051649, 4195332, 7340039, 2099202, 4195332, 1051649, 6291462, 4195332, 7340039, 1051649, 2099202, 6291462, 1051649, 5243909, 7340039, 5243909, 6291462, 1051649, 6291462, 2099202, 3072, 3147779, 4195332, 7340039, 1051649, 3147779, 3072, 2099202, 6291462, 4195332, 1051649, 5243909, 2099202, 5243909, 4195332, 1051649, 4195332, 3147779, 1051649, 4195332, 7340039, 4195332, 6291462, 1051649, 5243909, 1051649, 2099202, 7340039, 4195332, 2099202, 3072, 5243909, 6291462, 3147779, 1051649, 7340039,
+  6291462, 2099202, 3147779, 6291462, 1051649, 7340039, 3072, 7340039, 2099202, 5243909, 3072, 5243909, 7340039, 4195332, 1051649, 5243909, 2099202, 7340039, 2099202, 4195332, 1051649, 5243909, 2099202, 6291462, 3072, 3147779, 1051649, 5243909, 3147779, 7340039, 2099202, 7340039, 3072, 2099202, 3147779, 4195332, 1051649, 3147779, 4195332, 3072, 5243909, 3072, 5243909, 4195332, 7340039, 2099202, 7340039, 5243909, 3147779, 4195332, 3072, 4195332, 1051649, 5243909, 1051649, 3147779, 6291462, 1051649, 7340039, 1051649, 3147779, 6291462, 1051649, 4195332, 3072, 5243909, 1051649, 7340039, 2099202, 7340039, 1051649, 3147779, 6291462, 3147779, 3072, 3147779, 5243909, 6291462, 3147779, 3072, 2099202, 5243909, 3147779, 4195332, 7340039, 3072, 4195332, 3147779, 3072, 4195332, 2099202, 7340039, 5243909, 6291462, 2099202, 3072, 5243909, 5243909, 6291462, 3147779, 1051649, 7340039, 4195332, 3072, 7340039, 1051649, 6291462, 6291462, 3072, 7340039, 2099202, 5243909, 2099202, 3072, 6291462, 3147779, 3072, 7340039, 4195332, 1051649, 5243909, 3147779, 4195332, 2099202, 3072, 7340039, 4195332, 1051649,
+  2099202, 4195332, 7340039, 3072, 4195332, 3147779, 6291462, 3147779, 3072, 4195332, 6291462, 2099202, 3072, 3147779, 7340039, 3072, 6291462, 1051649, 5243909, 3072, 7340039, 3147779, 6291462, 1051649, 4195332, 7340039, 2099202, 4195332, 3072, 6291462, 3072, 4195332, 5243909, 6291462, 3072, 4195332, 6291462, 1051649, 7340039, 6291462, 2099202, 6291462, 2099202, 3072, 1051649, 3147779, 4195332, 1051649, 6291462, 2099202, 7340039, 3147779, 6291462, 3072, 4195332, 6291462, 3072, 4195332, 2099202, 6291462, 4195332, 3072, 6291462, 3147779, 7340039, 3147779, 5243909, 3072, 5243909, 3147779, 6291462, 5243909, 3072, 7340039, 5243909, 1051649, 4195332, 3072, 2099202, 5243909, 6291462, 1051649, 7340039, 3072, 3147779, 4195332, 2099202, 5243909, 2099202, 7340039, 3147779, 3072, 4195332, 1051649, 5243909, 7340039, 3147779, 1051649, 3072, 4195332, 5243909, 2099202, 3147779, 5243909, 3147779, 4195332, 3072, 3147779, 5243909, 1051649, 6291462, 3072, 5243909, 3147779, 3147779, 4195332, 5243909, 2099202, 4195332, 7340039, 3072, 6291462, 7340039, 1051649, 5243909, 2099202, 3147779, 6291462,
+  3072, 3147779, 1051649, 5243909, 6291462, 1051649, 2099202, 6291462, 2099202, 5243909, 1051649, 6291462, 3147779, 5243909, 2099202, 4195332, 4195332, 3147779, 7340039, 4195332, 1051649, 5243909, 3072, 3147779, 5243909, 3072, 6291462, 2099202, 7340039, 2099202, 3147779, 5243909, 1051649, 3147779, 5243909, 2099202, 6291462, 3072, 3147779, 4195332, 1051649, 3147779, 6291462, 4195332, 7340039, 5243909, 3072, 7340039, 3072, 5243909, 1051649, 5243909, 4195332, 3147779, 7340039, 2099202, 2099202, 5243909, 5243909, 3072, 7340039, 4195332, 2099202, 5243909, 2099202, 1051649, 7340039, 3147779, 1051649, 4195332, 3072, 2099202, 4195332, 2099202, 4195332, 7340039, 2099202, 3147779, 7340039, 1051649, 4195332, 5243909, 2099202, 5243909, 7340039, 1051649, 6291462, 1051649, 7340039, 1051649, 6291462, 3147779, 2099202, 7340039, 3147779, 1051649, 4195332, 6291462, 6291462, 2099202, 7340039, 3072, 2099202, 6291462, 1051649, 7340039, 5243909, 2099202, 7340039, 1051649, 4195332, 5243909, 2099202, 7340039, 3072, 7340039, 1051649, 6291462, 3072, 3147779, 5243909, 2099202, 1051649, 6291462, 4195332, 5243909, 3072, 5243909,
+  7340039, 4195332, 7340039, 4195332, 2099202, 4195332, 5243909, 3072, 7340039, 1051649, 4195332, 3072, 6291462, 1051649, 7340039, 3072, 6291462, 2099202, 3072, 3147779, 6291462, 2099202, 7340039, 3147779, 6291462, 3147779, 5243909, 1051649, 5243909, 3072, 7340039, 1051649, 4195332, 6291462, 1051649, 7340039, 3147779, 5243909, 6291462, 1051649, 5243909, 7340039, 3072, 5243909, 2099202, 1051649, 6291462, 3147779, 4195332, 2099202, 7340039, 3072, 2099202, 5243909, 3072, 4195332, 7340039, 3147779, 1051649, 6291462, 2099202, 1051649, 7340039, 3072, 6291462, 4195332, 2099202, 6291462, 6291462, 1051649, 7340039, 5243909, 1051649, 6291462, 3072, 3147779, 5243909, 7340039, 1051649, 6291462, 3072, 3147779, 6291462, 3072, 2099202, 6291462, 4195332, 5243909, 2099202, 5243909, 3072, 5243909, 1051649, 4195332, 2099202, 7340039, 3072, 4195332, 2099202, 1051649, 5243909, 3147779, 7340039, 4195332, 3072, 2099202, 4195332, 1051649, 3147779, 6291462, 3147779, 7340039, 1051649, 6291462, 1051649, 6291462, 3147779, 2099202, 5243909, 3147779, 1051649, 6291462, 4195332, 3072, 3147779, 1051649, 7340039, 1051649,
+  5243909, 2099202, 3072, 6291462, 3072, 7340039, 2099202, 6291462, 3147779, 4195332, 7340039, 3147779, 2099202, 5243909, 3147779, 1051649, 2099202, 5243909, 4195332, 6291462, 2099202, 5243909, 1051649, 4195332, 3072, 2099202, 4195332, 7340039, 2099202, 4195332, 3147779, 6291462, 3072, 2099202, 5243909, 3072, 2099202, 1051649, 7340039, 3147779, 2099202, 4195332, 3147779, 1051649, 6291462, 5243909, 2099202, 1051649, 6291462, 4195332, 1051649, 3147779, 6291462, 1051649, 6291462, 3147779, 3072, 5243909, 6291462, 2099202, 4195332, 5243909, 1051649, 3147779, 3147779, 5243909, 3072, 4195332, 3072, 4195332, 3147779, 3072, 5243909, 5243909, 3147779, 6291462, 3072, 2099202, 4195332, 6291462, 3147779, 7340039, 1051649, 3147779, 6291462, 2099202, 3072, 3147779, 6291462, 3147779, 3147779, 7340039, 2099202, 6291462, 3072, 4195332, 6291462, 1051649, 7340039, 4195332, 6291462, 3072, 2099202, 4195332, 6291462, 7340039, 2099202, 6291462, 4195332, 3072, 4195332, 3072, 4195332, 3147779, 5243909, 2099202, 3072, 7340039, 1051649, 6291462, 4195332, 2099202, 5243909, 7340039, 5243909, 6291462, 3147779, 2099202,
+  3072, 4195332, 6291462, 3147779, 5243909, 1051649, 5243909, 3072, 5243909, 1051649, 2099202, 5243909, 7340039, 3072, 4195332, 5243909, 7340039, 3072, 7340039, 1051649, 6291462, 3072, 6291462, 1051649, 7340039, 5243909, 4195332, 3072, 6291462, 1051649, 7340039, 1051649, 5243909, 3147779, 6291462, 4195332, 7340039, 4195332, 3072, 5243909, 7340039, 3072, 5243909, 7340039, 3072, 3147779, 4195332, 7340039, 3072, 5243909, 3147779, 7340039, 5243909, 1051649, 4195332, 7340039, 2099202, 4195332, 1051649, 3147779, 7340039, 3072, 6291462, 5243909, 1051649, 7340039, 2099202, 7340039, 3147779, 5243909, 7340039, 3147779, 2099202, 1051649, 7340039, 1051649, 4195332, 6291462, 3072, 2099202, 4195332, 1051649, 5243909, 4195332, 1051649, 7340039, 3147779, 6291462, 3072, 7340039, 4195332, 3072, 5243909, 3147779, 6291462, 2099202, 5243909, 3147779, 3072, 3147779, 1051649, 5243909, 6291462, 3147779, 3072, 1051649, 5243909, 3072, 2099202, 6291462, 2099202, 6291462, 2099202, 7340039, 3072, 5243909, 4195332, 5243909, 3072, 4195332, 7340039, 3072, 3147779, 1051649, 2099202, 3072, 4195332, 6291462,
+  3147779, 7340039, 2099202, 1051649, 3147779, 6291462, 3147779, 7340039, 2099202, 4195332, 6291462, 3072, 4195332, 3147779, 7340039, 3147779, 1051649, 4195332, 2099202, 4195332, 3147779, 7340039, 2099202, 5243909, 3147779, 2099202, 1051649, 7340039, 3147779, 2099202, 5243909, 4195332, 1051649, 7340039, 3072, 2099202, 1051649, 6291462, 3147779, 2099202, 1051649, 4195332, 1051649, 4195332, 2099202, 7340039, 3072, 3147779, 2099202, 3147779, 6291462, 3072, 2099202, 7340039, 3147779, 3072, 6291462, 5243909, 3072, 5243909, 2099202, 4195332, 3147779, 2099202, 6291462, 3072, 4195332, 2099202, 6291462, 1051649, 3072, 6291462, 7340039, 2099202, 4195332, 6291462, 1051649, 5243909, 3147779, 4195332, 7340039, 3072, 7340039, 3147779, 4195332, 2099202, 5243909, 1051649, 4195332, 1051649, 5243909, 2099202, 6291462, 3072, 4195332, 1051649, 7340039, 2099202, 6291462, 5243909, 7340039, 3147779, 1051649, 5243909, 7340039, 3147779, 5243909, 3147779, 7340039, 3147779, 5243909, 3147779, 1051649, 5243909, 2099202, 7340039, 1051649, 3147779, 6291462, 1051649, 2099202, 5243909, 3147779, 7340039, 4195332, 7340039, 1051649, 5243909,
+  3147779, 3072, 5243909, 7340039, 4195332, 3072, 2099202, 4195332, 1051649, 7340039, 1051649, 3147779, 6291462, 1051649, 3072, 6291462, 5243909, 2099202, 6291462, 3072, 5243909, 1051649, 4195332, 3072, 6291462, 3147779, 6291462, 4195332, 3072, 6291462, 3072, 6291462, 3147779, 3147779, 4195332, 5243909, 7340039, 3072, 3147779, 7340039, 5243909, 6291462, 3147779, 7340039, 3147779, 5243909, 6291462, 1051649, 6291462, 4195332, 1051649, 4195332, 5243909, 3072, 4195332, 6291462, 1051649, 7340039, 3147779, 6291462, 1051649, 7340039, 3072, 7340039, 4195332, 3147779, 6291462, 3072, 4195332, 5243909, 2099202, 4195332, 1051649, 4195332, 3072, 7340039, 2099202, 5243909, 1051649, 7340039, 2099202, 5243909, 1051649, 6291462, 3072, 7340039, 1051649, 5243909, 2099202, 7340039, 3072, 5243909, 3147779, 1051649, 7340039, 2099202, 4195332, 1051649, 5243909, 2099202, 3072, 4195332, 7340039, 3072, 2099202, 4195332, 3072, 7340039, 1051649, 4195332, 3072, 7340039, 6291462, 4195332, 1051649, 4195332, 6291462, 2099202, 7340039, 3147779, 7340039, 3072, 6291462, 2099202, 3072, 3147779, 5243909, 2099202,
+  4195332, 6291462, 1051649, 6291462, 3072, 5243909, 6291462, 3147779, 5243909, 2099202, 4195332, 7340039, 2099202, 6291462, 5243909, 2099202, 3072, 7340039, 3147779, 7340039, 2099202, 7340039, 3147779, 5243909, 1051649, 6291462, 3072, 2099202, 7340039, 4195332, 2099202, 5243909, 3072, 6291462, 4195332, 1051649, 3147779, 4195332, 6291462, 3072, 2099202, 4195332, 3072, 5243909, 1051649, 3072, 2099202, 5243909, 3072, 7340039, 2099202, 7340039, 2099202, 2099202, 6291462, 2099202, 4195332, 1051649, 3147779, 4195332, 2099202, 4195332, 5243909, 2099202, 3072, 6291462, 1051649, 6291462, 3147779, 1051649, 6291462, 2099202, 6291462, 3147779, 5243909, 2099202, 3072, 6291462, 3147779, 6291462, 3072, 3147779, 5243909, 2099202, 3147779, 6291462, 4195332, 3072, 6291462, 3147779, 4195332, 1051649, 7340039, 4195332, 3147779, 6291462, 3072, 7340039, 3147779, 3147779, 6291462, 2099202, 5243909, 3147779, 6291462, 1051649, 5243909, 2099202, 5243909, 1051649, 6291462, 2099202, 3072, 7340039, 3147779, 6291462, 3072, 5243909, 3072, 4195332, 1051649, 5243909, 2099202, 5243909, 4195332, 6291462, 3072, 7340039,
+  5243909, 1051649, 4195332, 3147779, 2099202, 7340039, 1051649, 4195332, 3072, 6291462, 1051649, 5243909, 3072, 3147779, 1051649, 5243909, 4195332, 5243909, 1051649, 3147779, 3072, 4195332, 1051649, 7340039, 3147779, 2099202, 4195332, 5243909, 1051649, 5243909, 3147779, 7340039, 2099202, 7340039, 1051649, 5243909, 2099202, 7340039, 1051649, 4195332, 1051649, 6291462, 2099202, 3147779, 6291462, 4195332, 6291462, 2099202, 7340039, 3147779, 4195332, 1051649, 6291462, 5243909, 1051649, 3147779, 3072, 7340039, 5243909, 3072, 7340039, 1051649, 1051649, 5243909, 5243909, 3147779, 7340039, 1051649, 4195332, 7340039, 3147779, 5243909, 3072, 7340039, 1051649, 6291462, 4195332, 4195332, 1051649, 1051649, 4195332, 6291462, 3072, 7340039, 2099202, 3072, 3147779, 7340039, 2099202, 1051649, 5243909, 6291462, 2099202, 3072, 6291462, 4195332, 3147779, 5243909, 1051649, 7340039, 3072, 6291462, 1051649, 1051649, 4195332, 7340039, 3147779, 1051649, 7340039, 3147779, 4195332, 2099202, 5243909, 3147779, 1051649, 2099202, 4195332, 3147779, 7340039, 2099202, 6291462, 3147779, 1051649, 6291462, 1051649, 2099202, 5243909, 2099202,
+  3072, 7340039, 1051649, 6291462, 1051649, 3147779, 7340039, 2099202, 6291462, 3147779, 7340039, 2099202, 4195332, 7340039, 3147779, 7340039, 3072, 2099202, 4195332, 6291462, 5243909, 2099202, 5243909, 3072, 5243909, 7340039, 3147779, 3072, 7340039, 1051649, 4195332, 3072, 5243909, 1051649, 3147779, 6291462, 3072, 2099202, 6291462, 5243909, 7340039, 3147779, 6291462, 3072, 7340039, 1051649, 4195332, 3072, 5243909, 1051649, 5243909, 4195332, 3072, 3147779, 5243909, 7340039, 6291462, 4195332, 3072, 6291462, 3147779, 6291462, 3147779, 7340039, 1051649, 2099202, 2099202, 4195332, 5243909, 3072, 3147779, 5243909, 2099202, 4195332, 3147779, 2099202, 7340039, 3072, 5243909, 7340039, 3147779, 2099202, 4195332, 4195332, 5243909, 6291462, 5243909, 2099202, 4195332, 7340039, 3147779, 3072, 4195332, 6291462, 1051649, 1051649, 5243909, 3072, 6291462, 2099202, 4195332, 3147779, 5243909, 6291462, 2099202, 3072, 5243909, 6291462, 3072, 6291462, 3072, 6291462, 1051649, 5243909, 7340039, 4195332, 6291462, 1051649, 3147779, 6291462, 3072, 7340039, 4195332, 2099202, 7340039, 4195332, 1051649, 7340039,
+  4195332, 3147779, 7340039, 2099202, 4195332, 5243909, 3072, 5243909, 3147779, 3072, 4195332, 1051649, 5243909, 3072, 6291462, 2099202, 4195332, 6291462, 3072, 1051649, 3147779, 7340039, 3147779, 6291462, 2099202, 1051649, 4195332, 6291462, 3147779, 5243909, 2099202, 6291462, 3147779, 7340039, 3072, 4195332, 4195332, 5243909, 3072, 2099202, 3147779, 1051649, 4195332, 2099202, 5243909, 1051649, 7340039, 4195332, 3147779, 6291462, 3072, 7340039, 2099202, 7340039, 1051649, 3072, 2099202, 5243909, 2099202, 4195332, 2099202, 4195332, 3072, 3147779, 4195332, 5243909, 7340039, 3072, 6291462, 2099202, 7340039, 1051649, 6291462, 3072, 6291462, 1051649, 5243909, 2099202, 5243909, 3072, 6291462, 1051649, 7340039, 1051649, 3072, 4195332, 1051649, 6291462, 3072, 4195332, 1051649, 6291462, 2099202, 3147779, 5243909, 7340039, 2099202, 7340039, 4195332, 5243909, 2099202, 7340039, 1051649, 4195332, 7340039, 4195332, 1051649, 4195332, 3147779, 4195332, 2099202, 7340039, 4195332, 3072, 2099202, 3072, 3147779, 5243909, 1051649, 2099202, 5243909, 1051649, 6291462, 3072, 3147779, 5243909, 3072, 3147779,
+  3147779, 2099202, 5243909, 3072, 6291462, 1051649, 6291462, 2099202, 4195332, 5243909, 3147779, 6291462, 2099202, 6291462, 3147779, 5243909, 1051649, 2099202, 7340039, 4195332, 6291462, 3072, 4195332, 1051649, 5243909, 6291462, 1051649, 2099202, 7340039, 3072, 6291462, 3147779, 1051649, 5243909, 2099202, 7340039, 1051649, 3147779, 7340039, 4195332, 6291462, 3072, 5243909, 2099202, 6291462, 3147779, 1051649, 5243909, 2099202, 3147779, 4195332, 3147779, 1051649, 6291462, 3147779, 6291462, 3147779, 7340039, 1051649, 5243909, 6291462, 1051649, 7340039, 2099202, 6291462, 3072, 4195332, 1051649, 5243909, 3147779, 4195332, 1051649, 4195332, 3147779, 5243909, 3072, 3147779, 7340039, 4195332, 2099202, 5243909, 3147779, 5243909, 3147779, 7340039, 2099202, 7340039, 1051649, 3147779, 6291462, 3072, 5243909, 7340039, 1051649, 4195332, 3072, 4195332, 1051649, 2099202, 3072, 4195332, 3072, 6291462, 2099202, 3072, 3147779, 7340039, 2099202, 5243909, 1051649, 6291462, 3147779, 1051649, 4195332, 6291462, 4195332, 6291462, 3072, 7340039, 4195332, 2099202, 5243909, 3147779, 4195332, 6291462, 1051649, 6291462, 5243909,
+  6291462, 3072, 5243909, 4195332, 3147779, 7340039, 1051649, 7340039, 3072, 6291462, 3072, 7340039, 1051649, 4195332, 1051649, 3072, 7340039, 3147779, 2099202, 5243909, 1051649, 2099202, 6291462, 7340039, 3072, 3147779, 6291462, 4195332, 2099202, 2099202, 4195332, 3072, 7340039, 3147779, 6291462, 1051649, 6291462, 2099202, 5243909, 3072, 2099202, 7340039, 3147779, 7340039, 3072, 4195332, 6291462, 3072, 7340039, 3072, 7340039, 5243909, 5243909, 2099202, 4195332, 1051649, 5243909, 3072, 4195332, 3147779, 3072, 5243909, 4195332, 6291462, 1051649, 3147779, 7340039, 2099202, 6291462, 3072, 7340039, 6291462, 2099202, 7340039, 1051649, 4195332, 7340039, 3072, 3147779, 7340039, 1051649, 6291462, 3072, 5243909, 2099202, 3147779, 5243909, 2099202, 5243909, 2099202, 7340039, 3147779, 2099202, 5243909, 2099202, 6291462, 3147779, 5243909, 6291462, 7340039, 3147779, 6291462, 3147779, 1051649, 5243909, 6291462, 2099202, 6291462, 3072, 7340039, 3072, 5243909, 1051649, 7340039, 2099202, 5243909, 1051649, 3147779, 6291462, 4195332, 3072, 6291462, 3072, 7340039, 2099202, 5243909, 2099202, 1051649,
+  3147779, 7340039, 2099202, 6291462, 3072, 2099202, 4195332, 3147779, 6291462, 3147779, 1051649, 4195332, 3147779, 5243909, 7340039, 3147779, 4195332, 5243909, 3072, 4195332, 7340039, 5243909, 1051649, 3147779, 4195332, 5243909, 1051649, 3072, 6291462, 4195332, 7340039, 5243909, 2099202, 4195332, 3072, 5243909, 3147779, 3072, 4195332, 6291462, 5243909, 3147779, 1051649, 2099202, 4195332, 7340039, 2099202, 3147779, 4195332, 2099202, 2099202, 1051649, 1051649, 6291462, 3072, 7340039, 2099202, 4195332, 7340039, 2099202, 7340039, 2099202, 3072, 5243909, 2099202, 6291462, 3072, 5243909, 1051649, 3147779, 5243909, 2099202, 3072, 3147779, 6291462, 2099202, 4195332, 2099202, 6291462, 1051649, 4195332, 3147779, 4195332, 6291462, 3072, 6291462, 3072, 7340039, 1051649, 5243909, 3147779, 3072, 6291462, 1051649, 5243909, 3072, 7340039, 1051649, 3072, 3147779, 1051649, 5243909, 2099202, 7340039, 4195332, 1051649, 4195332, 2099202, 4195332, 3147779, 3147779, 7340039, 2099202, 5243909, 3072, 3147779, 7340039, 5243909, 1051649, 2099202, 7340039, 3147779, 5243909, 1051649, 4195332, 3072, 7340039, 4195332,
+  3072, 4195332, 1051649, 4195332, 6291462, 5243909, 3072, 2099202, 1051649, 5243909, 7340039, 2099202, 5243909, 3072, 2099202, 6291462, 1051649, 6291462, 1051649, 7340039, 3147779, 3072, 6291462, 1051649, 7340039, 2099202, 4195332, 7340039, 5243909, 3072, 3147779, 1051649, 4195332, 7340039, 4195332, 2099202, 5243909, 7340039, 1051649, 2099202, 3072, 6291462, 5243909, 1051649, 6291462, 3072, 5243909, 1051649, 6291462, 6291462, 4195332, 7340039, 3147779, 5243909, 4195332, 3147779, 3072, 6291462, 1051649, 6291462, 3147779, 1051649, 5243909, 3147779, 7340039, 4195332, 2099202, 4195332, 4195332, 7340039, 1051649, 4195332, 7340039, 5243909, 1051649, 5243909, 3072, 6291462, 3147779, 5243909, 3072, 7340039, 2099202, 1051649, 4195332, 3147779, 6291462, 4195332, 3072, 4195332, 1051649, 5243909, 4195332, 7340039, 3147779, 2099202, 4195332, 3147779, 5243909, 4195332, 7340039, 1051649, 6291462, 3072, 3147779, 7340039, 3072, 6291462, 1051649, 5243909, 2099202, 5243909, 3072, 4195332, 6291462, 1051649, 4195332, 3072, 7340039, 3147779, 4195332, 1051649, 2099202, 6291462, 7340039, 3147779, 1051649, 6291462,
+  7340039, 3147779, 6291462, 2099202, 1051649, 3147779, 7340039, 4195332, 7340039, 3072, 2099202, 6291462, 1051649, 7340039, 4195332, 3072, 4195332, 3147779, 5243909, 1051649, 5243909, 2099202, 4195332, 5243909, 3147779, 3072, 6291462, 1051649, 3147779, 2099202, 6291462, 1051649, 6291462, 3072, 3147779, 7340039, 1051649, 3147779, 6291462, 7340039, 4195332, 3072, 4195332, 7340039, 3147779, 2099202, 4195332, 7340039, 3072, 1051649, 5243909, 3072, 6291462, 3072, 2099202, 6291462, 5243909, 2099202, 5243909, 3072, 7340039, 4195332, 6291462, 1051649, 5243909, 3072, 7340039, 1051649, 6291462, 3072, 5243909, 3147779, 3072, 2099202, 6291462, 3147779, 7340039, 1051649, 2099202, 7340039, 4195332, 2099202, 6291462, 3147779, 7340039, 1051649, 1051649, 3147779, 7340039, 3147779, 7340039, 6291462, 2099202, 3072, 5243909, 1051649, 6291462, 3072, 7340039, 2099202, 5243909, 2099202, 4195332, 5243909, 4195332, 2099202, 5243909, 3147779, 7340039, 3072, 6291462, 1051649, 7340039, 2099202, 3147779, 7340039, 2099202, 5243909, 3147779, 6291462, 3072, 7340039, 4195332, 3147779, 1051649, 5243909, 4195332, 2099202,
+  1051649, 5243909, 3072, 7340039, 3147779, 5243909, 1051649, 2099202, 6291462, 4195332, 5243909, 3072, 4195332, 3147779, 6291462, 5243909, 7340039, 3072, 2099202, 6291462, 4195332, 1051649, 6291462, 3072, 7340039, 5243909, 3147779, 4195332, 7340039, 1051649, 4195332, 5243909, 2099202, 6291462, 3072, 6291462, 2099202, 5243909, 3072, 3147779, 1051649, 6291462, 3147779, 1051649, 5243909, 6291462, 1051649, 3147779, 5243909, 7340039, 3147779, 3147779, 2099202, 4195332, 7340039, 1051649, 3072, 4195332, 3147779, 5243909, 2099202, 3072, 2099202, 7340039, 3147779, 1051649, 3147779, 6291462, 2099202, 3147779, 5243909, 2099202, 7340039, 4195332, 7340039, 1051649, 3147779, 5243909, 3072, 6291462, 1051649, 5243909, 3072, 5243909, 2099202, 7340039, 4195332, 6291462, 1051649, 5243909, 2099202, 3072, 4195332, 6291462, 3147779, 7340039, 2099202, 4195332, 1051649, 5243909, 3072, 6291462, 3147779, 1051649, 3072, 7340039, 1051649, 5243909, 2099202, 4195332, 3147779, 5243909, 4195332, 6291462, 3072, 5243909, 3072, 6291462, 1051649, 2099202, 6291462, 3147779, 3072, 5243909, 1051649, 7340039, 2099202, 6291462,
+  4195332, 3147779, 6291462, 4195332, 3072, 2099202, 6291462, 5243909, 1051649, 2099202, 3147779, 7340039, 1051649, 7340039, 3072, 2099202, 2099202, 6291462, 3147779, 3072, 2099202, 7340039, 3147779, 2099202, 4195332, 2099202, 3072, 5243909, 1051649, 6291462, 3072, 3147779, 5243909, 2099202, 5243909, 1051649, 4195332, 6291462, 2099202, 7340039, 4195332, 5243909, 2099202, 6291462, 3072, 4195332, 6291462, 2099202, 3072, 4195332, 1051649, 7340039, 6291462, 1051649, 5243909, 3147779, 5243909, 3147779, 7340039, 1051649, 6291462, 4195332, 6291462, 4195332, 3072, 5243909, 6291462, 1051649, 5243909, 7340039, 3072, 6291462, 3147779, 1051649, 4195332, 2099202, 6291462, 4195332, 2099202, 4195332, 1051649, 3147779, 6291462, 4195332, 3072, 5243909, 2099202, 3072, 6291462, 1051649, 6291462, 3147779, 7340039, 1051649, 4195332, 3072, 4195332, 6291462, 2099202, 3147779, 6291462, 1051649, 7340039, 5243909, 3147779, 6291462, 4195332, 3147779, 3072, 6291462, 3072, 2099202, 1051649, 3147779, 7340039, 2099202, 4195332, 3147779, 4195332, 5243909, 1051649, 5243909, 2099202, 7340039, 4195332, 3072, 4195332, 3072,
+  7340039, 2099202, 1051649, 5243909, 7340039, 4195332, 1051649, 3147779, 5243909, 7340039, 3072, 6291462, 4195332, 1051649, 3147779, 6291462, 4195332, 1051649, 5243909, 7340039, 4195332, 3072, 5243909, 6291462, 1051649, 6291462, 7340039, 3147779, 2099202, 5243909, 3147779, 7340039, 1051649, 4195332, 3147779, 7340039, 4195332, 3072, 5243909, 1051649, 4195332, 3072, 7340039, 3147779, 5243909, 2099202, 3072, 6291462, 5243909, 3147779, 5243909, 3072, 2099202, 4195332, 1051649, 7340039, 1051649, 6291462, 3072, 7340039, 1051649, 3147779, 1051649, 4195332, 7340039, 3147779, 2099202, 4195332, 3072, 3147779, 4195332, 3072, 5243909, 6291462, 3072, 5243909, 3147779, 3072, 7340039, 2099202, 7340039, 5243909, 3072, 3147779, 7340039, 2099202, 4195332, 7340039, 3147779, 4195332, 3072, 3147779, 5243909, 2099202, 7340039, 1051649, 6291462, 1051649, 4195332, 7340039, 2099202, 4195332, 3072, 7340039, 2099202, 3072, 1051649, 7340039, 6291462, 4195332, 7340039, 5243909, 6291462, 3072, 5243909, 2099202, 6291462, 3072, 7340039, 3072, 7340039, 2099202, 6291462, 1051649, 3147779, 7340039, 5243909, 2099202,
+  1051649, 7340039, 5243909, 3072, 2099202, 5243909, 7340039, 3072, 4195332, 2099202, 4195332, 3147779, 2099202, 5243909, 6291462, 1051649, 5243909, 7340039, 2099202, 3147779, 1051649, 6291462, 3147779, 3072, 4195332, 4195332, 3147779, 3072, 7340039, 6291462, 3072, 2099202, 7340039, 3072, 5243909, 1051649, 2099202, 6291462, 3147779, 3147779, 7340039, 2099202, 4195332, 1051649, 7340039, 5243909, 2099202, 4195332, 1051649, 7340039, 2099202, 7340039, 5243909, 3147779, 6291462, 4195332, 2099202, 5243909, 3147779, 2099202, 3147779, 7340039, 5243909, 2099202, 3072, 5243909, 1051649, 6291462, 2099202, 6291462, 2099202, 7340039, 3147779, 2099202, 7340039, 1051649, 6291462, 5243909, 1051649, 5243909, 3072, 2099202, 6291462, 4195332, 1051649, 5243909, 1051649, 4195332, 3072, 7340039, 5243909, 2099202, 3072, 6291462, 3147779, 5243909, 2099202, 5243909, 3072, 3147779, 6291462, 2099202, 4195332, 2099202, 5243909, 3147779, 5243909, 1051649, 4195332, 2099202, 1051649, 2099202, 3147779, 6291462, 1051649, 7340039, 1051649, 6291462, 3147779, 4195332, 1051649, 4195332, 3072, 5243909, 4195332, 1051649, 3072, 5243909,
+  4195332, 3072, 4195332, 3147779, 6291462, 1051649, 2099202, 6291462, 5243909, 1051649, 6291462, 3072, 7340039, 3147779, 2099202, 4195332, 3072, 3147779, 5243909, 1051649, 7340039, 4195332, 2099202, 7340039, 6291462, 3072, 1051649, 5243909, 4195332, 1051649, 7340039, 4195332, 3147779, 6291462, 2099202, 7340039, 4195332, 1051649, 7340039, 3072, 5243909, 1051649, 6291462, 3147779, 3072, 3147779, 7340039, 5243909, 2099202, 4195332, 3072, 3147779, 1051649, 6291462, 3072, 2099202, 6291462, 3072, 5243909, 4195332, 6291462, 3072, 2099202, 6291462, 4195332, 1051649, 7340039, 3147779, 7340039, 1051649, 5243909, 1051649, 5243909, 1051649, 4195332, 4195332, 3072, 3147779, 2099202, 6291462, 4195332, 7340039, 3147779, 3072, 7340039, 3147779, 6291462, 2099202, 6291462, 2099202, 3147779, 6291462, 4195332, 1051649, 5243909, 3072, 7340039, 3147779, 7340039, 5243909, 3072, 5243909, 1051649, 6291462, 1051649, 7340039, 3147779, 7340039, 3072, 3147779, 5243909, 7340039, 4195332, 3072, 4195332, 3147779, 5243909, 3147779, 2099202, 5243909, 2099202, 5243909, 3147779, 7340039, 3072, 6291462, 6291462, 3147779,
+  7340039, 3147779, 6291462, 1051649, 4195332, 3147779, 7340039, 3147779, 3072, 7340039, 3147779, 5243909, 1051649, 5243909, 3072, 7340039, 3147779, 6291462, 3072, 4195332, 3147779, 3072, 5243909, 1051649, 2099202, 5243909, 7340039, 3147779, 1051649, 4195332, 2099202, 5243909, 3072, 1051649, 5243909, 3072, 5243909, 1051649, 5243909, 5243909, 2099202, 4195332, 3072, 7340039, 4195332, 1051649, 4195332, 3072, 7340039, 1051649, 6291462, 4195332, 6291462, 2099202, 4195332, 7340039, 4195332, 3147779, 7340039, 3072, 2099202, 7340039, 3147779, 3072, 6291462, 3147779, 5243909, 3072, 2099202, 4195332, 3147779, 6291462, 3072, 6291462, 2099202, 7340039, 3147779, 7340039, 4195332, 3072, 3147779, 1051649, 6291462, 4195332, 2099202, 5243909, 3072, 5243909, 4195332, 3072, 6291462, 1051649, 7340039, 4195332, 2099202, 6291462, 4195332, 1051649, 3147779, 1051649, 7340039, 3147779, 6291462, 4195332, 1051649, 5243909, 3072, 4195332, 5243909, 6291462, 1051649, 2099202, 1051649, 6291462, 7340039, 2099202, 5243909, 3072, 6291462, 3072, 7340039, 1051649, 6291462, 2099202, 3147779, 2099202, 4195332, 2099202,
+  2099202, 5243909, 1051649, 6291462, 3072, 5243909, 1051649, 4195332, 6291462, 2099202, 4195332, 2099202, 6291462, 4195332, 6291462, 1051649, 4195332, 2099202, 7340039, 2099202, 6291462, 2099202, 7340039, 3147779, 6291462, 1051649, 4195332, 6291462, 2099202, 6291462, 3072, 6291462, 4195332, 6291462, 2099202, 3147779, 7340039, 3147779, 3147779, 1051649, 6291462, 2099202, 6291462, 3147779, 5243909, 1051649, 6291462, 2099202, 3147779, 6291462, 2099202, 3072, 4195332, 3072, 5243909, 1051649, 5243909, 1051649, 1051649, 5243909, 1051649, 5243909, 4195332, 6291462, 2099202, 7340039, 3072, 6291462, 4195332, 7340039, 3072, 2099202, 4195332, 4195332, 5243909, 1051649, 5243909, 1051649, 6291462, 2099202, 5243909, 5243909, 1051649, 3147779, 6291462, 1051649, 3147779, 7340039, 1051649, 7340039, 2099202, 5243909, 3147779, 3072, 7340039, 1051649, 5243909, 2099202, 6291462, 4195332, 3147779, 3072, 2099202, 3147779, 7340039, 2099202, 6291462, 2099202, 3147779, 3072, 4195332, 7340039, 5243909, 3147779, 3072, 4195332, 1051649, 7340039, 4195332, 6291462, 2099202, 4195332, 1051649, 5243909, 7340039, 1051649, 6291462, 3072,
+  6291462, 1051649, 7340039, 3147779, 7340039, 2099202, 6291462, 3147779, 3072, 6291462, 1051649, 7340039, 3072, 3147779, 2099202, 7340039, 3072, 5243909, 1051649, 5243909, 5243909, 1051649, 4195332, 3072, 2099202, 7340039, 3147779, 3072, 5243909, 3147779, 7340039, 2099202, 3072, 4195332, 1051649, 7340039, 3072, 6291462, 3072, 7340039, 2099202, 7340039, 3072, 4195332, 2099202, 6291462, 3147779, 7340039, 3072, 5243909, 3147779, 5243909, 7340039, 3147779, 7340039, 2099202, 3147779, 6291462, 4195332, 3147779, 7340039, 3147779, 1051649, 5243909, 3072, 3147779, 5243909, 2099202, 1051649, 3147779, 5243909, 6291462, 7340039, 3072, 3147779, 6291462, 3072, 4195332, 3147779, 7340039, 3072, 4195332, 7340039, 2099202, 3072, 7340039, 5243909, 3072, 5243909, 3147779, 4195332, 3072, 6291462, 2099202, 5243909, 3147779, 3072, 7340039, 4195332, 3072, 6291462, 5243909, 7340039, 4195332, 3072, 5243909, 1051649, 4195332, 7340039, 5243909, 1051649, 2099202, 3072, 6291462, 2099202, 7340039, 3147779, 1051649, 3147779, 3147779, 5243909, 3072, 7340039, 3147779, 3072, 5243909, 3147779, 4195332,
+};
+
 #else
 #define DM_WIDTH 8
 #define DM_WIDTH_SHIFT 3
 #define DM_HEIGHT 8
-static guchar DM[8][8] =
+static const guchar DM[8][8] =
 {
   { 0,  32, 8,  40, 2,  34, 10, 42 },
   { 48, 16, 56, 24, 50, 18, 58, 26 },
@@ -959,10 +1252,22 @@ static guchar DM[8][8] =
   { 15, 47, 7,  39, 13, 45, 5,  37 },
   { 63, 31, 55, 23, 61, 29, 53, 21 }
 };
-#endif
 
-static guint32 *DM_565 = NULL;
+static const guint32 DM_565[8 * 8] =
+{
+  3072, 4195332, 1051649, 5243909, 3072, 4195332, 1051649, 5243909,
+  6291462, 2099202, 7340039, 3147779, 6291462, 2099202, 7340039, 3147779,
+  1051649, 5243909, 3072, 4195332, 1051649, 5243909, 3072, 4195332,
+  7340039, 3147779, 6291462, 2099202, 7340039, 3147779, 6291462, 2099202,
+  3072, 4195332, 1051649, 5243909, 3072, 4195332, 1051649, 5243909,
+  6291462, 2099202, 7340039, 3147779, 6291462, 2099202, 7340039, 3147779,
+  1051649, 5243909, 3072, 4195332, 1051649, 5243909, 3072, 4195332,
+  7340039, 3147779, 6291462, 2099202, 7340039, 3147779, 6291462, 2099202,
+};
+
+#endif
 
+#if 0
 static void
 gdk_rgb_preprocess_dm_565 (void)
 {
@@ -982,20 +1287,24 @@ gdk_rgb_preprocess_dm_565 (void)
        }
     }
 }
+#else
+#define gdk_rgb_preprocess_dm_565()
+#endif
 
 static void
-gdk_rgb_convert_8_d666 (GdkImage *image,
+gdk_rgb_convert_8_d666 (GdkRgbInfo *image_info, GdkImage *image,
                        gint x0, gint y0, gint width, gint height,
-                       guchar *buf, int rowstride,
+                       const guchar *buf, int rowstride,
                        gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   gint bpl;
   guchar *obuf, *obptr;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   gint r, g, b;
-  guchar *dmp;
+  const guchar *dmp;
   gint dith;
+  guchar *colorcube_d = image_info->colorcube_d;
 
   bptr = buf;
   bpl = image->bpl;
@@ -1023,20 +1332,21 @@ gdk_rgb_convert_8_d666 (GdkImage *image,
 }
 
 static void
-gdk_rgb_convert_8_d (GdkImage *image,
+gdk_rgb_convert_8_d (GdkRgbInfo *image_info, GdkImage *image,
                     gint x0, gint y0, gint width, gint height,
-                    guchar *buf, int rowstride,
+                    const guchar *buf, int rowstride,
                     gint x_align, gint y_align,
                     GdkRgbCmap *cmap)
 {
   int x, y;
   gint bpl;
   guchar *obuf, *obptr;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   gint r, g, b;
-  guchar *dmp;
+  const guchar *dmp;
   gint dith;
   gint rs, gs, bs;
+  guchar *colorcube_d = image_info->colorcube_d;
 
   bptr = buf;
   bpl = image->bpl;
@@ -1067,19 +1377,20 @@ gdk_rgb_convert_8_d (GdkImage *image,
 }
 
 static void
-gdk_rgb_convert_8_indexed (GdkImage *image,
+gdk_rgb_convert_8_indexed (GdkRgbInfo *image_info, GdkImage *image,
                           gint x0, gint y0, gint width, gint height,
-                          guchar *buf, int rowstride,
+                          const guchar *buf, int rowstride,
                           gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   gint bpl;
   guchar *obuf, *obptr;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   guchar c;
   guchar *lut;
+  GdkRgbCmapInfo *cmap_info = gdk_rgb_cmap_get_info (cmap, image_info);
 
-  lut = cmap->lut;
+  lut = cmap_info->lut;
   bptr = buf;
   bpl = image->bpl;
   obuf = ((guchar *)image->mem) + y0 * bpl + x0;
@@ -1099,15 +1410,15 @@ gdk_rgb_convert_8_indexed (GdkImage *image,
 }
 
 static void
-gdk_rgb_convert_gray8 (GdkImage *image,
+gdk_rgb_convert_gray8 (GdkRgbInfo *image_info, GdkImage *image,
                       gint x0, gint y0, gint width, gint height,
-                      guchar *buf, int rowstride,
+                      const guchar *buf, int rowstride,
                       gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   gint bpl;
   guchar *obuf, *obptr;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   gint r, g, b;
 
   bptr = buf;
@@ -1131,15 +1442,15 @@ gdk_rgb_convert_gray8 (GdkImage *image,
 }
 
 static void
-gdk_rgb_convert_gray8_gray (GdkImage *image,
+gdk_rgb_convert_gray8_gray (GdkRgbInfo *image_info, GdkImage *image,
                            gint x0, gint y0, gint width, gint height,
-                           guchar *buf, int rowstride,
+                           const guchar *buf, int rowstride,
                            gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int y;
   gint bpl;
   guchar *obuf;
-  guchar *bptr;
+  const guchar *bptr;
 
   bptr = buf;
   bpl = image->bpl;
@@ -1152,29 +1463,29 @@ gdk_rgb_convert_gray8_gray (GdkImage *image,
     }
 }
 
-#ifndef WORDS_BIGENDIAN
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
 #define HAIRY_CONVERT_565
 #endif
 
 #ifdef HAIRY_CONVERT_565
 /* Render a 24-bit RGB image in buf into the GdkImage, without dithering.
    This assumes native byte ordering - what should really be done is to
-   check whether static_image->byte_order is consistent with the _ENDIAN
+   check whether the image byte_order is consistent with the _ENDIAN
    config flag, and if not, use a different function.
 
    This one is even faster than the one below - its inner loop loads 3
    words (i.e. 4 24-bit pixels), does a lot of shifting and masking,
    then writes 2 words. */
 static void
-gdk_rgb_convert_565 (GdkImage *image,
+gdk_rgb_convert_565 (GdkRgbInfo *image_info, GdkImage *image,
                     gint x0, gint y0, gint width, gint height,
-                    guchar *buf, int rowstride,
+                    const guchar *buf, int rowstride,
                     gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf, *obptr;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   guchar r, g, b;
 
   bptr = buf;
@@ -1184,7 +1495,7 @@ gdk_rgb_convert_565 (GdkImage *image,
     {
       bp2 = bptr;
       obptr = obuf;
-      if (((unsigned long)obuf | (unsigned long) bp2) & 3)
+      if (((guintptr)obuf | (guintptr) bp2) & 3)
        {
          for (x = 0; x < width; x++)
            {
@@ -1243,7 +1554,7 @@ gdk_rgb_convert_565 (GdkImage *image,
 #else
 /* Render a 24-bit RGB image in buf into the GdkImage, without dithering.
    This assumes native byte ordering - what should really be done is to
-   check whether static_image->byte_order is consistent with the _ENDIAN
+   check whether the image byte_order is consistent with the _ENDIAN
    config flag, and if not, use a different function.
 
    This routine is faster than the one included with Gtk 1.0 for a number
@@ -1263,15 +1574,15 @@ gdk_rgb_convert_565 (GdkImage *image,
    shifting and masking, then writes 2 words.
 */
 static void
-gdk_rgb_convert_565 (GdkImage *image,
+gdk_rgb_convert_565 (GdkRgbInfo *image_info, GdkImage *image,
                     gint x0, gint y0, gint width, gint height,
-                    guchar *buf, int rowstride,
+                    const guchar *buf, int rowstride,
                     gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   guchar r, g, b;
 
   bptr = buf;
@@ -1297,15 +1608,15 @@ gdk_rgb_convert_565 (GdkImage *image,
 
 #ifdef HAIRY_CONVERT_565
 static void
-gdk_rgb_convert_565_gray (GdkImage *image,
+gdk_rgb_convert_565_gray (GdkRgbInfo *image_info, GdkImage *image,
                          gint x0, gint y0, gint width, gint height,
-                         guchar *buf, int rowstride,
+                         const guchar *buf, int rowstride,
                          gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf, *obptr;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   guchar g;
 
   bptr = buf;
@@ -1315,7 +1626,7 @@ gdk_rgb_convert_565_gray (GdkImage *image,
     {
       bp2 = bptr;
       obptr = obuf;
-      if (((unsigned long)obuf | (unsigned long) bp2) & 3)
+      if (((guintptr)obuf | (guintptr) bp2) & 3)
        {
          for (x = 0; x < width; x++)
            {
@@ -1365,15 +1676,15 @@ gdk_rgb_convert_565_gray (GdkImage *image,
 }
 #else
 static void
-gdk_rgb_convert_565_gray (GdkImage *image,
+gdk_rgb_convert_565_gray (GdkRgbInfo *image_info, GdkImage *image,
                          gint x0, gint y0, gint width, gint height,
-                         guchar *buf, int rowstride,
+                         const guchar *buf, int rowstride,
                          gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   guchar g;
 
   bptr = buf;
@@ -1396,15 +1707,15 @@ gdk_rgb_convert_565_gray (GdkImage *image,
 #endif
 
 static void
-gdk_rgb_convert_565_br (GdkImage *image,
+gdk_rgb_convert_565_br (GdkRgbInfo *image_info, GdkImage *image,
                        gint x0, gint y0, gint width, gint height,
-                       guchar *buf, int rowstride,
+                       const guchar *buf, int rowstride,
                        gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   guchar r, g, b;
 
   bptr = buf;
@@ -1435,16 +1746,16 @@ gdk_rgb_convert_565_br (GdkImage *image,
    in this mode. */
 #ifdef HAIRY_CONVERT_565
 static void
-gdk_rgb_convert_565_d (GdkImage *image,
-                    gint x0, gint y0, gint width, gint height,
-                    guchar *buf, int rowstride,
-                    gint x_align, gint y_align, GdkRgbCmap *cmap)
+gdk_rgb_convert_565_d (GdkRgbInfo *image_info, GdkImage *image,
+                       gint x0, gint y0, gint width, gint height,
+                       const guchar *buf, int rowstride,
+                       gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   /* Now this is what I'd call some highly tuned code! */
   int x, y;
   guchar *obuf, *obptr;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
 
   width += x_align;
   height += y_align;
@@ -1454,10 +1765,10 @@ gdk_rgb_convert_565_d (GdkImage *image,
   obuf = ((guchar *)image->mem) + y0 * bpl + x0 * 2;
   for (y = y_align; y < height; y++)
     {
-      guint32 *dmp = DM_565 + ((y & (DM_HEIGHT - 1)) << DM_WIDTH_SHIFT);
+      const guint32 *dmp = DM_565 + ((y & (DM_HEIGHT - 1)) << DM_WIDTH_SHIFT);
       bp2 = bptr;
       obptr = obuf;
-      if (((unsigned long)obuf | (unsigned long) bp2) & 3)
+      if (((guintptr)obuf | (guintptr) bp2) & 3)
        {
          for (x = x_align; x < width; x++)
            {
@@ -1560,15 +1871,15 @@ gdk_rgb_convert_565_d (GdkImage *image,
 }
 #else
 static void
-gdk_rgb_convert_565_d (GdkImage *image,
+gdk_rgb_convert_565_d (GdkRgbInfo *image_info, GdkImage *image,
                        gint x0, gint y0, gint width, gint height,
-                       guchar *buf, int rowstride,
+                       const guchar *buf, int rowstride,
                        gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf;
   gint bpl;
-  guchar *bptr;
+  const guchar *bptr;
 
   width += x_align;
   height += y_align;
@@ -1579,7 +1890,7 @@ gdk_rgb_convert_565_d (GdkImage *image,
 
   for (y = y_align; y < height; y++)
     {
-      guint32 *dmp = DM_565 + ((y & (DM_HEIGHT - 1)) << DM_WIDTH_SHIFT);
+      const guint32 *dmp = DM_565 + ((y & (DM_HEIGHT - 1)) << DM_WIDTH_SHIFT);
       guchar *bp2 = bptr;
 
       for (x = x_align; x < width; x++)
@@ -1605,15 +1916,15 @@ gdk_rgb_convert_565_d (GdkImage *image,
 #endif
 
 static void
-gdk_rgb_convert_555 (GdkImage *image,
+gdk_rgb_convert_555 (GdkRgbInfo *image_info, GdkImage *image,
                     gint x0, gint y0, gint width, gint height,
-                    guchar *buf, int rowstride,
+                    const guchar *buf, int rowstride,
                     gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   guchar r, g, b;
 
   bptr = buf;
@@ -1637,15 +1948,15 @@ gdk_rgb_convert_555 (GdkImage *image,
 }
 
 static void
-gdk_rgb_convert_555_br (GdkImage *image,
+gdk_rgb_convert_555_br (GdkRgbInfo *image_info, GdkImage *image,
                        gint x0, gint y0, gint width, gint height,
-                       guchar *buf, int rowstride,
+                       const guchar *buf, int rowstride,
                        gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   guchar r, g, b;
 
   bptr = buf;
@@ -1664,7 +1975,7 @@ gdk_rgb_convert_555_br (GdkImage *image,
           */
          ((unsigned short *)obuf)[x] = ((r & 0xf8) >> 1) |
            ((g & 0xc0) >> 6) |
-           ((g & 0x18) << 10) |
+           ((g & 0x38) << 10) |
            ((b & 0xf8) << 5);
        }
       bptr += rowstride;
@@ -1673,15 +1984,15 @@ gdk_rgb_convert_555_br (GdkImage *image,
 }
 
 static void
-gdk_rgb_convert_888_msb (GdkImage *image,
+gdk_rgb_convert_888_msb (GdkRgbInfo *image_info, GdkImage *image,
                         gint x0, gint y0, gint width, gint height,
-                        guchar *buf, int rowstride,
+                        const guchar *buf, int rowstride,
                         gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int y;
   guchar *obuf;
   gint bpl;
-  guchar *bptr;
+  const guchar *bptr;
 
   bptr = buf;
   bpl = image->bpl;
@@ -1695,21 +2006,21 @@ gdk_rgb_convert_888_msb (GdkImage *image,
 }
 
 /* todo: optimize this */
-#ifndef WORDS_BIGENDIAN
+#if G_BYTE_ORDER == G_LITTLE_ENDIAN
 #define HAIRY_CONVERT_888
 #endif
 
 #ifdef HAIRY_CONVERT_888
 static void
-gdk_rgb_convert_888_lsb (GdkImage *image,
+gdk_rgb_convert_888_lsb (GdkRgbInfo *image_info, GdkImage *image,
                         gint x0, gint y0, gint width, gint height,
-                        guchar *buf, int rowstride,
+                        const guchar *buf, int rowstride,
                         gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf, *obptr;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   int r, g, b;
 
   bptr = buf;
@@ -1719,7 +2030,7 @@ gdk_rgb_convert_888_lsb (GdkImage *image,
     {
       bp2 = bptr;
       obptr = obuf;
-      if (((unsigned long)obuf | (unsigned long) bp2) & 3)
+      if (((guintptr)obuf | (guintptr) bp2) & 3)
        {
          for (x = 0; x < width; x++)
            {
@@ -1775,15 +2086,15 @@ gdk_rgb_convert_888_lsb (GdkImage *image,
 }
 #else
 static void
-gdk_rgb_convert_888_lsb (GdkImage *image,
+gdk_rgb_convert_888_lsb (GdkRgbInfo *image_info, GdkImage *image,
                         gint x0, gint y0, gint width, gint height,
-                        guchar *buf, int rowstride,
+                        const guchar *buf, int rowstride,
                         gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   int r, g, b;
 
   bptr = buf;
@@ -1811,16 +2122,15 @@ gdk_rgb_convert_888_lsb (GdkImage *image,
 /* convert 24-bit packed to 32-bit unpacked */
 /* todo: optimize this */
 static void
-gdk_rgb_convert_0888 (GdkImage *image,
+gdk_rgb_convert_0888 (GdkRgbInfo *image_info, GdkImage *image,
                      gint x0, gint y0, gint width, gint height,
-                     guchar *buf, int rowstride,
+                     const guchar *buf, int rowstride,
                      gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
-  int x, y;
-  guchar *obuf;
+  int y, w;
+  guchar *obuf, *p;
   gint bpl;
-  guchar *bptr, *bp2;
-  int r, g, b;
+  const guchar *bptr, *bp2;
 
   bptr = buf;
   bpl = image->bpl;
@@ -1828,13 +2138,72 @@ gdk_rgb_convert_0888 (GdkImage *image,
   for (y = 0; y < height; y++)
     {
       bp2 = bptr;
-      for (x = 0; x < width; x++)
+      p = obuf;
+      w = width;
+      while (w--)
        {
-         r = bp2[0];
-         g = bp2[1];
-         b = bp2[2];
-         ((unsigned long *)obuf)[x] = (r << 16) | (g << 8) | b;
+         p[0] = bp2[2];
+         p[1] = bp2[1];
+         p[2] = bp2[0];
+         p[3] = 0xff;
+         bp2 += 3;
+         p += 4;
+       }
+      bptr += rowstride;
+      obuf += bpl;
+    }
+}
+
+#ifdef USE_MEDIALIB25
+/* convert 24-bit packed to 32-bit unpacked */
+static void
+gdk_rgb_convert_0888_medialib (GdkRgbInfo *image_info, GdkImage *image,
+                              gint x0, gint y0, gint width, gint height,
+                              const guchar *buf, int rowstride,
+                              gint x_align, gint y_align, GdkRgbCmap *cmap)
+{
+  int y, w;
+  guchar *obuf, *p;
+  gint bpl;
+  const guchar *bptr, *bp2;
+
+  bptr = buf;
+  bpl = image->bpl;
+  obuf = ((guchar *)image->mem) + y0 * bpl + x0 * 4;
+
+  mlib_VideoColorRGBint_to_BGRAint (obuf, bptr, NULL, 0xff,
+                                    width, height, bpl, 
+                                    rowstride, 0);
+}
+#endif
+
+static void
+gdk_rgb_convert_0888_br (GdkRgbInfo *image_info, GdkImage *image,
+                        gint x0, gint y0, gint width, gint height,
+                        const guchar *buf, int rowstride,
+                        gint x_align, gint y_align, GdkRgbCmap *cmap)
+{
+  int y, w;
+  guchar *obuf, *p;
+  gint bpl;
+  const guchar *bptr, *bp2;
+
+  bptr = buf;
+  bpl = image->bpl;
+  obuf = ((guchar *)image->mem) + y0 * bpl + x0 * 4;
+  for (y = 0; y < height; y++)
+    {
+      bp2 = bptr;
+      p = obuf;
+      w = width;
+      while (w--)
+       {
+         p[0] = 0xff;
+         p[1] = bp2[0];
+         p[2] = bp2[1];
+         p[3] = bp2[2];
          bp2 += 3;
+         p += 4;
        }
       bptr += rowstride;
       obuf += bpl;
@@ -1842,15 +2211,15 @@ gdk_rgb_convert_0888 (GdkImage *image,
 }
 
 static void
-gdk_rgb_convert_0888_br (GdkImage *image,
+gdk_rgb_convert_8880_br (GdkRgbInfo *image_info, GdkImage *image,
                         gint x0, gint y0, gint width, gint height,
-                        guchar *buf, int rowstride,
+                        const guchar *buf, int rowstride,
                         gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   int r, g, b;
 
   bptr = buf;
@@ -1864,7 +2233,7 @@ gdk_rgb_convert_0888_br (GdkImage *image,
          r = bp2[0];
          g = bp2[1];
          b = bp2[2];
-         ((unsigned long *)obuf)[x] = (b << 24) | (g << 16) | (r << 8);
+         ((guint32 *)obuf)[x] = (b << 16) | (g << 8) | r;
          bp2 += 3;
        }
       bptr += rowstride;
@@ -1875,22 +2244,23 @@ gdk_rgb_convert_0888_br (GdkImage *image,
 /* Generic truecolor/directcolor conversion function. Slow, but these
    are oddball modes. */
 static void
-gdk_rgb_convert_truecolor_lsb (GdkImage *image,
+gdk_rgb_convert_truecolor_lsb (GdkRgbInfo *image_info, GdkImage *image,
                               gint x0, gint y0, gint width, gint height,
-                              guchar *buf, int rowstride,
+                              const guchar *buf, int rowstride,
                               gint x_align, gint y_align,
                               GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf, *obptr;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   gint r, g, b;
   gint r_right, r_left;
   gint g_right, g_left;
   gint b_right, b_left;
   gint bpp;
   guint32 pixel;
+  guint32 alpha_mask = gdk_rgb_alpha_mask (image_info);
   gint i;
 
   r_right = 8 - image_info->visual->red_prec;
@@ -1914,7 +2284,7 @@ gdk_rgb_convert_truecolor_lsb (GdkImage *image,
          b = bp2[2];
          pixel = ((r >> r_right) << r_left) |
            ((g >> g_right) << g_left) |
-           ((b >> b_right) << b_left);
+           ((b >> b_right) << b_left) | alpha_mask;
          for (i = 0; i < bpp; i++)
            {
              *obptr++ = pixel & 0xff;
@@ -1928,26 +2298,27 @@ gdk_rgb_convert_truecolor_lsb (GdkImage *image,
 }
 
 static void
-gdk_rgb_convert_truecolor_lsb_d (GdkImage *image,
+gdk_rgb_convert_truecolor_lsb_d (GdkRgbInfo *image_info, GdkImage *image,
                                 gint x0, gint y0, gint width, gint height,
-                                guchar *buf, int rowstride,
+                                const guchar *buf, int rowstride,
                                 gint x_align, gint y_align,
                                 GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf, *obptr;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   gint r, g, b;
   gint r_right, r_left, r_prec;
   gint g_right, g_left, g_prec;
   gint b_right, b_left, b_prec;
   gint bpp;
   guint32 pixel;
+  guint32 alpha_mask = gdk_rgb_alpha_mask (image_info);
   gint i;
   gint dith;
   gint r1, g1, b1;
-  guchar *dmp;
+  const guchar *dmp;
 
   r_right = 8 - image_info->visual->red_prec;
   r_left = image_info->visual->red_shift;
@@ -1978,7 +2349,7 @@ gdk_rgb_convert_truecolor_lsb_d (GdkImage *image,
          b1 = b + (dith >> b_prec);
          pixel = (((r1 - (r1 >> r_prec)) >> r_right) << r_left) |
            (((g1 - (g1 >> g_prec)) >> g_right) << g_left) |
-           (((b1 - (b1 >> b_prec)) >> b_right) << b_left);
+           (((b1 - (b1 >> b_prec)) >> b_right) << b_left) | alpha_mask;
          for (i = 0; i < bpp; i++)
            {
              *obptr++ = pixel & 0xff;
@@ -1992,22 +2363,23 @@ gdk_rgb_convert_truecolor_lsb_d (GdkImage *image,
 }
 
 static void
-gdk_rgb_convert_truecolor_msb (GdkImage *image,
+gdk_rgb_convert_truecolor_msb (GdkRgbInfo *image_info, GdkImage *image,
                               gint x0, gint y0, gint width, gint height,
-                              guchar *buf, int rowstride,
+                              const guchar *buf, int rowstride,
                               gint x_align, gint y_align,
                               GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf, *obptr;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   gint r, g, b;
   gint r_right, r_left;
   gint g_right, g_left;
   gint b_right, b_left;
   gint bpp;
   guint32 pixel;
+  guint32 alpha_mask = gdk_rgb_alpha_mask (image_info);
   gint shift, shift_init;
 
   r_right = 8 - image_info->visual->red_prec;
@@ -2032,7 +2404,7 @@ gdk_rgb_convert_truecolor_msb (GdkImage *image,
          b = bp2[2];
          pixel = ((r >> r_right) << r_left) |
            ((g >> g_right) << g_left) |
-           ((b >> b_right) << b_left);
+           ((b >> b_right) << b_left) | alpha_mask;
          for (shift = shift_init; shift >= 0; shift -= 8)
            {
              *obptr++ = (pixel >> shift) & 0xff;
@@ -2045,26 +2417,27 @@ gdk_rgb_convert_truecolor_msb (GdkImage *image,
 }
 
 static void
-gdk_rgb_convert_truecolor_msb_d (GdkImage *image,
+gdk_rgb_convert_truecolor_msb_d (GdkRgbInfo *image_info, GdkImage *image,
                                 gint x0, gint y0, gint width, gint height,
-                                guchar *buf, int rowstride,
+                                const guchar *buf, int rowstride,
                                 gint x_align, gint y_align,
                                 GdkRgbCmap *cmap)
 {
   int x, y;
   guchar *obuf, *obptr;
   gint bpl;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   gint r, g, b;
   gint r_right, r_left, r_prec;
   gint g_right, g_left, g_prec;
   gint b_right, b_left, b_prec;
   gint bpp;
   guint32 pixel;
+  guint32 alpha_mask = gdk_rgb_alpha_mask (image_info);
   gint shift, shift_init;
   gint dith;
   gint r1, g1, b1;
-  guchar *dmp;
+  const guchar *dmp;
 
   r_right = 8 - image_info->visual->red_prec;
   r_left = image_info->visual->red_shift;
@@ -2096,7 +2469,7 @@ gdk_rgb_convert_truecolor_msb_d (GdkImage *image,
          b1 = b + (dith >> b_prec);
          pixel = (((r1 - (r1 >> r_prec)) >> r_right) << r_left) |
            (((g1 - (g1 >> g_prec)) >> g_right) << g_left) |
-           (((b1 - (b1 >> b_prec)) >> b_right) << b_left);
+           (((b1 - (b1 >> b_prec)) >> b_right) << b_left) | alpha_mask;
          for (shift = shift_init; shift >= 0; shift -= 8)
            {
              *obptr++ = (pixel >> shift) & 0xff;
@@ -2108,23 +2481,23 @@ gdk_rgb_convert_truecolor_msb_d (GdkImage *image,
     }
 }
 
-#define IMAGE_8BPP
+/* This actually works for depths from 3 to 7 */
 static void
-gdk_rgb_convert_4 (GdkImage *image,
+gdk_rgb_convert_4 (GdkRgbInfo *image_info, GdkImage *image,
                   gint x0, gint y0, gint width, gint height,
-                  guchar *buf, int rowstride,
+                  const guchar *buf, int rowstride,
                   gint x_align, gint y_align,
                   GdkRgbCmap *cmap)
 {
   int x, y;
   gint bpl;
   guchar *obuf, *obptr;
-  guchar *bptr, *bp2;
+  const guchar *bptr, *bp2;
   gint r, g, b;
-  guchar *dmp;
+  const guchar *dmp;
   gint dith;
-  guchar pix0, pix1;
-
+  guchar *colorcube_d = image_info->colorcube_d;
+  
   bptr = buf;
   bpl = image->bpl;
   obuf = ((guchar *)image->mem) + y0 * bpl + x0;
@@ -2133,7 +2506,6 @@ gdk_rgb_convert_4 (GdkImage *image,
       dmp = DM[(y_align + y) & (DM_HEIGHT - 1)];
       bp2 = bptr;
       obptr = obuf;
-#ifdef IMAGE_8BPP
       for (x = 0; x < width; x += 1)
        {
          r = *bp2++;
@@ -2145,56 +2517,359 @@ gdk_rgb_convert_4 (GdkImage *image,
                                (((b + dith) & 0x100) >> 8)];
          obptr++;
        }
-#else
-      for (x = 0; x < width; x += 2)
+      bptr += rowstride;
+      obuf += bpl;
+    }
+}
+
+static void
+gdk_rgb_convert_4_pack (GdkRgbInfo *image_info, GdkImage *image,
+                       gint x0, gint y0, gint width, gint height,
+                       const guchar *buf, int rowstride,
+                       gint x_align, gint y_align,
+                       GdkRgbCmap *cmap)
+{
+  int x, y, ix;
+  gint bpl;
+  guchar *obuf, *obptr;
+  const guchar *bptr, *bp2;
+  gint r, g, b;
+  const guchar *dmp;
+  gint dith;
+  guchar *colorcube_d = image_info->colorcube_d;
+  guchar pix0, pix1;
+
+  bptr = buf;
+  bpl = image->bpl;
+  obuf = ((guchar *)image->mem) + y0 * bpl + (x0 >> 1);
+  for (y = 0; y < height; y++)
+    {
+      dmp = DM[(y_align + y) & (DM_HEIGHT - 1)];
+      bp2 = bptr;
+      obptr = obuf;
+
+      x = 0;
+      if (x0 & 1)
        {
          r = *bp2++;
          g = *bp2++;
          b = *bp2++;
-         dith = (dmp[(x_align + x) & (DM_WIDTH - 1)] << 2) | 3;
-         pix0 = colorcube_d[(((r + dith) & 0x100) >> 2) |
-                           (((g + dith) & 0x100) >> 5) |
-                           (((b + dith) & 0x100) >> 8)];
-         r = *bp2++;
-         g = *bp2++;
-         b = *bp2++;
          dith = (dmp[(x_align + x + 1) & (DM_WIDTH - 1)] << 2) | 3;
-         pix1 = colorcube_d[(((r + dith) & 0x100) >> 2) |
-                           (((g + dith) & 0x100) >> 5) |
-                           (((b + dith) & 0x100) >> 8)];
-         obptr[0] = (pix0 << 4) | pix1;
+         ix = (((r + dith) & 0x100) >> 2) |
+           (((g + 258 - dith) & 0x100) >> 5) |
+           (((b + dith) & 0x100) >> 8);
+         pix1 = (colorcube_d[ix]);
+         *obptr = (*obptr & 0xF0) | pix1;
          obptr++;
+         x++;
        }
-#endif
+      while (x < width)
+       {
+         r = *bp2++;
+         g = *bp2++;
+         b = *bp2++;
+         dith = (dmp[(x_align + x) & (DM_WIDTH - 1)] << 2) | 3;
+        ix = (((r + dith) & 0x100) >> 2) |
+          (((g + 258 - dith) & 0x100) >> 5) |
+          (((b + dith) & 0x100) >> 8);
+         pix0 = (colorcube_d[ix]);
+        x++;
+        if (x == width)
+          pix1 = (*obptr & 0x0F);
+        else
+          {
+            r = *bp2++;
+            g = *bp2++;
+            b = *bp2++;
+            dith = (dmp[(x_align + x + 1) & (DM_WIDTH - 1)] << 2) | 3;
+            ix = (((r + dith) & 0x100) >> 2) |
+              (((g + 258 - dith) & 0x100) >> 5) |
+              (((b + dith) & 0x100) >> 8);
+            pix1 = (colorcube_d[ix]);
+            x++;
+          }
+         *obptr++ = (pix0 << 4) | pix1;
+       }
       bptr += rowstride;
       obuf += bpl;
     }
 }
 
-
-/* Returns a pointer to the stage buffer. */
-static guchar *
-gdk_rgb_ensure_stage (void)
-{
-  if (image_info->stage_buf == NULL)
-    image_info->stage_buf = g_malloc (IMAGE_HEIGHT * STAGE_ROWSTRIDE);
-  return image_info->stage_buf;
-}
-
-/* This is slow. Speed me up, please. */
+/* This actually works for depths from 3 to 7 */
 static void
-gdk_rgb_32_to_stage (guchar *buf, gint rowstride, gint width, gint height)
+gdk_rgb_convert_gray4 (GdkRgbInfo *image_info, GdkImage *image,
+                      gint x0, gint y0, gint width, gint height,
+                      const guchar *buf, int rowstride,
+                      gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
-  gint x, y;
-  guchar *pi_start, *po_start;
-  guchar *pi, *po;
+  int x, y;
+  gint bpl;
+  guchar *obuf, *obptr;
+  const guchar *bptr, *bp2;
+  gint r, g, b;
+  gint shift;
 
-  pi_start = buf;
-  po_start = gdk_rgb_ensure_stage ();
+  bptr = buf;
+  bpl = image->bpl;
+  obuf = ((guchar *)image->mem) + y0 * bpl + x0;
+  shift = 9 - image_info->visual->depth;
   for (y = 0; y < height; y++)
     {
-      pi = pi_start;
-      po = po_start;
+      bp2 = bptr;
+      obptr = obuf;
+      for (x = 0; x < width; x++)
+       {
+         r = *bp2++;
+         g = *bp2++;
+         b = *bp2++;
+         obptr[0] = (g + ((b + r) >> 1)) >> shift;
+         obptr++;
+       }
+      bptr += rowstride;
+      obuf += bpl;
+    }
+}
+
+static void
+gdk_rgb_convert_gray4_pack (GdkRgbInfo *image_info, GdkImage *image,
+                           gint x0, gint y0, gint width, gint height,
+                           const guchar *buf, int rowstride,
+                           gint x_align, gint y_align, GdkRgbCmap *cmap)
+{
+  int x, y;
+  gint bpl;
+  guchar *obuf, *obptr;
+  const guchar *bptr, *bp2;
+  gint r, g, b;
+  gint shift;
+  guchar pix0, pix1;
+  /* todo: this is hardcoded to big-endian. Make endian-agile. */
+
+  bptr = buf;
+  bpl = image->bpl;
+  obuf = ((guchar *)image->mem) + y0 * bpl + (x0 >> 1);
+  shift = 9 - image_info->visual->depth;
+  for (y = 0; y < height; y++)
+    {
+      bp2 = bptr;
+      obptr = obuf;
+
+      x = 0;
+      if (x0 & 1)
+       {
+         r = *bp2++;
+         g = *bp2++;
+         b = *bp2++;
+         pix1 = (g + ((b + r) >> 1)) >> shift;
+         *obptr = (*obptr & 0xF0) | pix1;
+         obptr++;
+         x++;
+       }
+      while (x < width)
+       {
+         r = *bp2++;
+         g = *bp2++;
+         b = *bp2++;
+         pix0 = (g + ((b + r) >> 1)) >> shift;
+         x++;
+         if (x == width)
+           pix1 = (*obptr & 0x0F);
+         else
+           {
+             r = *bp2++;
+             g = *bp2++;
+             b = *bp2++;
+             pix1 = (g + ((b + r) >> 1)) >> shift;
+             x++;
+           }
+         *obptr++ = (pix0 << 4) | pix1;
+       }
+      bptr += rowstride;
+      obuf += bpl;
+    }
+}
+
+/* This actually works for depths from 3 to 7 */
+static void
+gdk_rgb_convert_gray4_d (GdkRgbInfo *image_info, GdkImage *image,
+                        gint x0, gint y0, gint width, gint height,
+                        const guchar *buf, int rowstride,
+                        gint x_align, gint y_align, GdkRgbCmap *cmap)
+{
+  int x, y;
+  gint bpl;
+  guchar *obuf, *obptr;
+  const guchar *bptr, *bp2;
+  gint r, g, b;
+  const guchar *dmp;
+  gint prec, right;
+  gint gray;
+
+  bptr = buf;
+  bpl = image->bpl;
+  obuf = ((guchar *)image->mem) + y0 * bpl + x0;
+  prec = image_info->visual->depth;
+  right = 8 - prec;
+  for (y = 0; y < height; y++)
+    {
+      bp2 = bptr;
+      obptr = obuf;
+      dmp = DM[(y_align + y) & (DM_HEIGHT - 1)];
+      for (x = 0; x < width; x++)
+       {
+         r = *bp2++;
+         g = *bp2++;
+         b = *bp2++;
+         gray = (g + ((b + r) >> 1)) >> 1;
+         gray += (dmp[(x_align + x) & (DM_WIDTH - 1)] << 2) >> prec;
+         obptr[0] = (gray - (gray >> prec)) >> right;
+         obptr++;
+       }
+      bptr += rowstride;
+      obuf += bpl;
+    }
+}
+
+static void
+gdk_rgb_convert_gray4_d_pack (GdkRgbInfo *image_info, GdkImage *image,
+                             gint x0, gint y0, gint width, gint height,
+                             const guchar *buf, int rowstride,
+                             gint x_align, gint y_align, GdkRgbCmap *cmap)
+{
+  int x, y;
+  gint bpl;
+  guchar *obuf, *obptr;
+  const guchar *bptr, *bp2;
+  gint r, g, b;
+  const guchar *dmp;
+  gint prec, right;
+  gint gray;
+  guchar pix0, pix1;
+  /* todo: this is hardcoded to big-endian. Make endian-agile. */
+
+  bptr = buf;
+  bpl = image->bpl;
+  obuf = ((guchar *)image->mem) + y0 * bpl + (x0 >> 1);
+  prec = image_info->visual->depth;
+  right = 8 - prec;
+  for (y = 0; y < height; y++)
+    {
+      bp2 = bptr;
+      obptr = obuf;
+      dmp = DM[(y_align + y) & (DM_HEIGHT - 1)];
+
+      x = 0;
+      if (x0 & 1)
+       {
+         r = *bp2++;
+         g = *bp2++;
+         b = *bp2++;
+         gray = (g + ((b + r) >> 1)) >> 1;
+         gray += (dmp[(x_align + x + 1) & (DM_WIDTH - 1)] << 2) >> prec;
+         pix1 = (gray - (gray >> prec)) >> right;
+         *obptr = (*obptr & 0xF0) | pix1;
+         obptr++;
+         x++;
+       }
+      while (x < width)
+       {
+         r = *bp2++;
+         g = *bp2++;
+         b = *bp2++;
+         gray = (g + ((b + r) >> 1)) >> 1;
+         gray += (dmp[(x_align + x) & (DM_WIDTH - 1)] << 2) >> prec;
+         pix0 = (gray - (gray >> prec)) >> right;
+         x++;
+         if (x == width)
+           pix1 = (*obptr & 0x0F);
+         else
+           {
+             r = *bp2++;
+             g = *bp2++;
+             b = *bp2++;
+             gray = (g + ((b + r) >> 1)) >> 1;
+             gray += (dmp[(x_align + x + 1) & (DM_WIDTH - 1)] << 2) >> prec;
+             pix1 = (gray - (gray >> prec)) >> right;
+             x++;
+           }
+         *obptr++ = (pix0 << 4) | pix1;
+       }
+      bptr += rowstride;
+      obuf += bpl;
+    }
+}
+
+static void
+gdk_rgb_convert_1 (GdkRgbInfo *image_info, GdkImage *image,
+                  gint x0, gint y0, gint width, gint height,
+                  const guchar *buf, int rowstride,
+                  gint x_align, gint y_align,
+                  GdkRgbCmap *cmap)
+{
+  int x, y;
+  gint bpl;
+  guchar *obuf, *obptr;
+  const guchar *bptr, *bp2;
+  gint r, g, b;
+  const guchar *dmp;
+  gint dith;
+  guchar byte;
+
+  bptr = buf;
+  bpl = image->bpl;
+  obuf = ((guchar *)image->mem) + y0 * bpl + (x0 >> 3);
+  byte = 0; /* unnecessary, but it keeps gcc from complaining */
+  for (y = 0; y < height; y++)
+    {
+      dmp = DM[(y_align + y) & (DM_HEIGHT - 1)];
+      bp2 = bptr;
+      obptr = obuf;
+      for (x = 0; x < width; x++)
+       {
+         r = *bp2++;
+         g = *bp2++;
+         b = *bp2++;
+         dith = (dmp[(x_align + x) & (DM_WIDTH - 1)] << 4) | 4;
+         byte += byte + (r + g + g + b + dith > 1020);
+         if ((x & 7) == 7)
+           {
+             obptr[0] = byte;
+             obptr++;
+           }
+       }
+      if (x & 7)
+       obptr[0] = byte << (8 - (x & 7));
+      bptr += rowstride;
+      obuf += bpl;
+    }
+}
+
+/* Returns a pointer to the stage buffer. */
+static guchar *
+gdk_rgb_ensure_stage (GdkRgbInfo *image_info)
+{
+  if (image_info->stage_buf == NULL)
+    image_info->stage_buf = g_malloc (GDK_SCRATCH_IMAGE_HEIGHT * STAGE_ROWSTRIDE);
+  return image_info->stage_buf;
+}
+
+/* This is slow. Speed me up, please. */
+static void
+gdk_rgb_32_to_stage (GdkRgbInfo *image_info,
+                    const guchar *buf, gint rowstride, gint width, gint height)
+{
+  gint x, y;
+  const guchar *pi_start;
+  guchar *po_start;
+  const guchar *pi;
+  guchar *po;
+
+  pi_start = buf;
+  po_start = gdk_rgb_ensure_stage (image_info);
+  for (y = 0; y < height; y++)
+    {
+      pi = pi_start;
+      po = po_start;
       for (x = 0; x < width; x++)
        {
          *po++ = *pi++;
@@ -2210,14 +2885,14 @@ gdk_rgb_32_to_stage (guchar *buf, gint rowstride, gint width, gint height)
 /* Generic 32bit RGB conversion function - convert to 24bit packed, then
    go from there. */
 static void
-gdk_rgb_convert_32_generic (GdkImage *image,
+gdk_rgb_convert_32_generic (GdkRgbInfo *image_info, GdkImage *image,
                            gint x0, gint y0, gint width, gint height,
-                           guchar *buf, gint rowstride,
+                           const guchar *buf, gint rowstride,
                            gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
-  gdk_rgb_32_to_stage (buf, rowstride, width, height);
+  gdk_rgb_32_to_stage (image_info, buf, rowstride, width, height);
 
-  (*image_info->conv) (image, x0, y0, width, height,
+  (*image_info->conv) (image_info, image, x0, y0, width, height,
                       image_info->stage_buf, STAGE_ROWSTRIDE,
                       x_align, y_align, cmap);
 }
@@ -2225,29 +2900,32 @@ gdk_rgb_convert_32_generic (GdkImage *image,
 /* Generic 32bit RGB conversion function - convert to 24bit packed, then
    go from there. */
 static void
-gdk_rgb_convert_32_generic_d (GdkImage *image,
+gdk_rgb_convert_32_generic_d (GdkRgbInfo *image_info, GdkImage *image,
                              gint x0, gint y0, gint width, gint height,
-                             guchar *buf, gint rowstride,
+                             const guchar *buf, gint rowstride,
                              gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
-  gdk_rgb_32_to_stage (buf, rowstride, width, height);
+  gdk_rgb_32_to_stage (image_info, buf, rowstride, width, height);
 
-  (*image_info->conv_d) (image, x0, y0, width, height,
+  (*image_info->conv_d) (image_info, image, x0, y0, width, height,
                         image_info->stage_buf, STAGE_ROWSTRIDE,
                         x_align, y_align, cmap);
 }
 
 /* This is slow. Speed me up, please. */
 static void
-gdk_rgb_gray_to_stage (guchar *buf, gint rowstride, gint width, gint height)
+gdk_rgb_gray_to_stage (GdkRgbInfo *image_info,
+                      const guchar *buf, gint rowstride, gint width, gint height)
 {
   gint x, y;
-  guchar *pi_start, *po_start;
-  guchar *pi, *po;
+  const guchar *pi_start;
+  guchar *po_start;
+  const guchar *pi;
+  guchar *po;
   guchar gray;
 
   pi_start = buf;
-  po_start = gdk_rgb_ensure_stage ();
+  po_start = gdk_rgb_ensure_stage (image_info);
   for (y = 0; y < height; y++)
     {
       pi = pi_start;
@@ -2267,51 +2945,51 @@ gdk_rgb_gray_to_stage (guchar *buf, gint rowstride, gint width, gint height)
 /* Generic gray conversion function - convert to 24bit packed, then go
    from there. */
 static void
-gdk_rgb_convert_gray_generic (GdkImage *image,
+gdk_rgb_convert_gray_generic (GdkRgbInfo *image_info, GdkImage *image,
                              gint x0, gint y0, gint width, gint height,
-                             guchar *buf, gint rowstride,
+                             const guchar *buf, gint rowstride,
                              gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
-  gdk_rgb_gray_to_stage (buf, rowstride, width, height);
+  gdk_rgb_gray_to_stage (image_info, buf, rowstride, width, height);
 
-  (*image_info->conv) (image, x0, y0, width, height,
+  (*image_info->conv) (image_info, image, x0, y0, width, height,
                       image_info->stage_buf, STAGE_ROWSTRIDE,
                       x_align, y_align, cmap);
 }
 
 static void
-gdk_rgb_convert_gray_generic_d (GdkImage *image,
+gdk_rgb_convert_gray_generic_d (GdkRgbInfo *image_info, GdkImage *image,
                                gint x0, gint y0, gint width, gint height,
-                               guchar *buf, gint rowstride,
+                               const guchar *buf, gint rowstride,
                                gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
-  gdk_rgb_gray_to_stage (buf, rowstride, width, height);
+  gdk_rgb_gray_to_stage (image_info, buf, rowstride, width, height);
 
-  (*image_info->conv_d) (image, x0, y0, width, height,
+  (*image_info->conv_d) (image_info, image, x0, y0, width, height,
                         image_info->stage_buf, STAGE_ROWSTRIDE,
                         x_align, y_align, cmap);
 }
 
 /* Render grayscale using indexed method. */
 static void
-gdk_rgb_convert_gray_cmap (GdkImage *image,
+gdk_rgb_convert_gray_cmap (GdkRgbInfo *image_info, GdkImage *image,
                           gint x0, gint y0, gint width, gint height,
-                          guchar *buf, gint rowstride,
+                          const guchar *buf, gint rowstride,
                           gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
-  (*image_info->conv_indexed) (image, x0, y0, width, height,
+  (*image_info->conv_indexed) (image_info, image, x0, y0, width, height,
                               buf, rowstride,
                               x_align, y_align, image_info->gray_cmap);
 }
 
 #if 0
 static void
-gdk_rgb_convert_gray_cmap_d (GdkImage *image,
-                               gint x0, gint y0, gint width, gint height,
-                               guchar *buf, gint rowstride,
-                               gint x_align, gint y_align, GdkRgbCmap *cmap)
+gdk_rgb_convert_gray_cmap_d (GdkRgbInfo *image_info, GdkImage *image,
+                            gint x0, gint y0, gint width, gint height,
+                            const guchar *buf, gint rowstride,
+                            gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
-  (*image_info->conv_indexed_d) (image, x0, y0, width, height,
+  (*image_info->conv_indexed_d) (image_info, image, x0, y0, width, height,
                                 buf, rowstride,
                                 x_align, y_align, image_info->gray_cmap);
 }
@@ -2319,16 +2997,19 @@ gdk_rgb_convert_gray_cmap_d (GdkImage *image,
 
 /* This is slow. Speed me up, please. */
 static void
-gdk_rgb_indexed_to_stage (guchar *buf, gint rowstride, gint width, gint height,
+gdk_rgb_indexed_to_stage (GdkRgbInfo *image_info,
+                         const guchar *buf, gint rowstride, gint width, gint height,
                          GdkRgbCmap *cmap)
 {
   gint x, y;
-  guchar *pi_start, *po_start;
-  guchar *pi, *po;
+  const guchar *pi_start;
+  guchar *po_start;
+  const guchar *pi;
+  guchar *po;
   gint rgb;
 
   pi_start = buf;
-  po_start = gdk_rgb_ensure_stage ();
+  po_start = gdk_rgb_ensure_stage (image_info);
   for (y = 0; y < height; y++)
     {
       pi = pi_start;
@@ -2348,28 +3029,28 @@ gdk_rgb_indexed_to_stage (guchar *buf, gint rowstride, gint width, gint height,
 /* Generic gray conversion function - convert to 24bit packed, then go
    from there. */
 static void
-gdk_rgb_convert_indexed_generic (GdkImage *image,
+gdk_rgb_convert_indexed_generic (GdkRgbInfo *image_info, GdkImage *image,
                                 gint x0, gint y0, gint width, gint height,
-                                guchar *buf, gint rowstride,
+                                const guchar *buf, gint rowstride,
                                 gint x_align, gint y_align, GdkRgbCmap *cmap)
 {
-  gdk_rgb_indexed_to_stage (buf, rowstride, width, height, cmap);
+  gdk_rgb_indexed_to_stage (image_info, buf, rowstride, width, height, cmap);
 
-  (*image_info->conv) (image, x0, y0, width, height,
+  (*image_info->conv) (image_info, image, x0, y0, width, height,
                       image_info->stage_buf, STAGE_ROWSTRIDE,
                       x_align, y_align, cmap);
 }
 
 static void
-gdk_rgb_convert_indexed_generic_d (GdkImage *image,
+gdk_rgb_convert_indexed_generic_d (GdkRgbInfo *image_info, GdkImage *image,
                                   gint x0, gint y0, gint width, gint height,
-                                  guchar *buf, gint rowstride,
+                                  const guchar *buf, gint rowstride,
                                   gint x_align, gint y_align,
                                   GdkRgbCmap *cmap)
 {
-  gdk_rgb_indexed_to_stage (buf, rowstride, width, height, cmap);
+  gdk_rgb_indexed_to_stage (image_info, buf, rowstride, width, height, cmap);
 
-  (*image_info->conv_d) (image, x0, y0, width, height,
+  (*image_info->conv_d) (image_info, image, x0, y0, width, height,
                         image_info->stage_buf, STAGE_ROWSTRIDE,
                         x_align, y_align, cmap);
 }
@@ -2377,7 +3058,7 @@ gdk_rgb_convert_indexed_generic_d (GdkImage *image,
 /* Select a conversion function based on the visual and a
    representative image. */
 static void
-gdk_rgb_select_conv (GdkImage *image)
+gdk_rgb_select_conv (GdkRgbInfo *image_info)
 {
   GdkByteOrder byte_order;
   gint depth, bpp, byterev;
@@ -2387,13 +3068,21 @@ gdk_rgb_select_conv (GdkImage *image)
   GdkRgbConvFunc conv_32, conv_32_d;
   GdkRgbConvFunc conv_gray, conv_gray_d;
   GdkRgbConvFunc conv_indexed, conv_indexed_d;
+  gboolean mask_rgb, mask_bgr;
+  GdkScreen *screen = gdk_visual_get_screen (image_info->visual);
 
   depth = image_info->visual->depth;
-  bpp = image->bpp;
 
-  byte_order = image->byte_order;
+  bpp = _gdk_windowing_get_bits_for_depth (gdk_screen_get_display (screen),
+                                          image_info->visual->depth);
+
+  byte_order = image_info->visual->byte_order;
+  if (gdk_rgb_verbose)
+    g_print ("Chose visual type=%d depth=%d, image bpp=%d, %s first\n",
+            image_info->visual->type, image_info->visual->depth,
+            bpp, byte_order == GDK_LSB_FIRST ? "lsb" : "msb");
 
-#ifdef WORDS_BIGENDIAN
+#if G_BYTE_ORDER == G_BIG_ENDIAN
   byterev = (byte_order == GDK_LSB_FIRST);
 #else
   byterev = (byte_order == GDK_MSB_FIRST);
@@ -2407,6 +3096,9 @@ gdk_rgb_select_conv (GdkImage *image)
   green_mask = image_info->visual->green_mask;
   blue_mask = image_info->visual->blue_mask;
 
+  mask_rgb = red_mask == 0xff0000 && green_mask == 0xff00 && blue_mask == 0xff;
+  mask_bgr = red_mask == 0xff && green_mask == 0xff00 && blue_mask == 0xff0000;
+
   conv = NULL;
   conv_d = NULL;
 
@@ -2421,7 +3113,9 @@ gdk_rgb_select_conv (GdkImage *image)
 
   image_info->dith_default = FALSE;
 
-  if (bpp == 2 && depth == 16 && !byterev &&
+  if (image_info->bitmap)
+    conv = gdk_rgb_convert_1;
+  else if (bpp == 16 && depth == 16 && !byterev &&
       red_mask == 0xf800 && green_mask == 0x7e0 && blue_mask == 0x1f)
     {
       conv = gdk_rgb_convert_565;
@@ -2429,39 +3123,77 @@ gdk_rgb_select_conv (GdkImage *image)
       conv_gray = gdk_rgb_convert_565_gray;
       gdk_rgb_preprocess_dm_565 ();
     }
-  else if (bpp == 2 && depth == 16 &&
+  else if (bpp == 16 && depth == 16 &&
           vtype == GDK_VISUAL_TRUE_COLOR && byterev &&
       red_mask == 0xf800 && green_mask == 0x7e0 && blue_mask == 0x1f)
     conv = gdk_rgb_convert_565_br;
 
-  else if (bpp == 2 && depth == 15 &&
+  else if (bpp == 16 && depth == 15 &&
           vtype == GDK_VISUAL_TRUE_COLOR && !byterev &&
       red_mask == 0x7c00 && green_mask == 0x3e0 && blue_mask == 0x1f)
     conv = gdk_rgb_convert_555;
 
-  else if (bpp == 2 && depth == 15 &&
+  else if (bpp == 16 && depth == 15 &&
           vtype == GDK_VISUAL_TRUE_COLOR && byterev &&
       red_mask == 0x7c00 && green_mask == 0x3e0 && blue_mask == 0x1f)
     conv = gdk_rgb_convert_555_br;
 
-  /* I'm not 100% sure about the 24bpp tests */
-  else if (bpp == 3 && depth == 24 &&
-          vtype == GDK_VISUAL_TRUE_COLOR && byte_order == GDK_LSB_FIRST &&
-          red_mask == 0xff0000 && green_mask == 0xff00 && blue_mask == 0xff)
+  /* I'm not 100% sure about the 24bpp tests - but testing will show*/
+  else if (bpp == 24 && depth == 24 && vtype == GDK_VISUAL_TRUE_COLOR &&
+          ((mask_rgb && byte_order == GDK_LSB_FIRST) ||
+           (mask_bgr && byte_order == GDK_MSB_FIRST)))
     conv = gdk_rgb_convert_888_lsb;
-  else if (bpp == 3 && depth == 24 &&
-          vtype == GDK_VISUAL_TRUE_COLOR && byte_order == GDK_MSB_FIRST &&
-          red_mask == 0xff0000 && green_mask == 0xff00 && blue_mask == 0xff)
+  else if (bpp == 24 && depth == 24 && vtype == GDK_VISUAL_TRUE_COLOR &&
+          ((mask_rgb && byte_order == GDK_MSB_FIRST) ||
+           (mask_bgr && byte_order == GDK_LSB_FIRST)))
     conv = gdk_rgb_convert_888_msb;
-  else if (bpp == 4 && depth == 24 &&
-          vtype == GDK_VISUAL_TRUE_COLOR && !byterev &&
-          red_mask == 0xff0000 && green_mask == 0xff00 && blue_mask == 0xff)
-    conv = gdk_rgb_convert_0888;
-  else if (bpp == 4 && depth == 24 &&
-          vtype == GDK_VISUAL_TRUE_COLOR && byterev &&
-          red_mask == 0xff0000 && green_mask == 0xff00 && blue_mask == 0xff)
+  else if (bpp == 32 &&
+          (depth == 24 || depth == 32) &&
+          vtype == GDK_VISUAL_TRUE_COLOR &&
+          (mask_rgb && byte_order == GDK_MSB_FIRST))
     conv = gdk_rgb_convert_0888_br;
-
+  else if (bpp == 32 &&
+          (depth == 24 || depth == 32) &&
+          vtype == GDK_VISUAL_TRUE_COLOR &&
+          (mask_rgb && byte_order == GDK_LSB_FIRST))
+    {
+#ifdef USE_MEDIALIB25
+      if (_gdk_use_medialib ())
+        conv = gdk_rgb_convert_0888_medialib;
+      else
+        conv = gdk_rgb_convert_0888;
+#else
+      conv = gdk_rgb_convert_0888;
+#endif
+    }
+  
+#if G_BYTE_ORDER == G_BIG_ENDIAN
+  else if (bpp == 32 && depth == 24 && vtype == GDK_VISUAL_TRUE_COLOR &&
+          (mask_bgr && byte_order == GDK_MSB_FIRST))
+    conv = gdk_rgb_convert_8880_br;
+  else if (bpp == 32 && depth == 32 && vtype == GDK_VISUAL_TRUE_COLOR &&
+          (mask_rgb && byte_order == GDK_LSB_FIRST))
+    conv = gdk_rgb_convert_8880_br;
+  else if (bpp == 32 && depth == 32 && vtype == GDK_VISUAL_TRUE_COLOR &&
+          (mask_rgb && byte_order == GDK_MSB_FIRST))
+    conv = gdk_rgb_convert_8880_br;
+#else
+  else if (bpp == 32 && depth == 24 && vtype == GDK_VISUAL_TRUE_COLOR &&
+          (mask_bgr && byte_order == GDK_LSB_FIRST))
+    conv = gdk_rgb_convert_8880_br;
+  else if (bpp == 32 && depth == 32 && vtype == GDK_VISUAL_TRUE_COLOR &&
+          (mask_rgb && byte_order == GDK_LSB_FIRST))
+    {
+#ifdef USE_MEDIALIB25
+      if (_gdk_use_medialib ())
+        conv = gdk_rgb_convert_0888_medialib;
+      else
+        conv = gdk_rgb_convert_0888;
+#else
+      conv = gdk_rgb_convert_0888;
+#endif
+    }
+#endif
   else if (vtype == GDK_VISUAL_TRUE_COLOR && byte_order == GDK_LSB_FIRST)
     {
       conv = gdk_rgb_convert_truecolor_lsb;
@@ -2472,12 +3204,21 @@ gdk_rgb_select_conv (GdkImage *image)
       conv = gdk_rgb_convert_truecolor_msb;
       conv_d = gdk_rgb_convert_truecolor_msb_d;
     }
-  else if (bpp == 1 && depth == 8 && (vtype == GDK_VISUAL_PSEUDO_COLOR
+  else if (bpp == 8 &&
+          depth <= 8 &&
+          depth > 4 &&
+          (vtype == GDK_VISUAL_PSEUDO_COLOR
+           || vtype == GDK_VISUAL_STATIC_COLOR
 #ifdef ENABLE_GRAYSCALE
-                                     || vtype == GDK_VISUAL_GRAYSCALE
+           || vtype == GDK_VISUAL_GRAYSCALE
 #endif
-                                     ))
+           ))
     {
+      /* Mainly for Win32: use these conversion functions also for the
+       * explicitly (on user request) restricted palette versions of
+       * 256-color, i.e. depths 5, 6 and 7. On X11, such depths
+       * probably never occur.
+       */
       image_info->dith_default = TRUE;
       conv = gdk_rgb_convert_8;
       if (vtype != GDK_VISUAL_GRAYSCALE)
@@ -2492,7 +3233,7 @@ gdk_rgb_select_conv (GdkImage *image)
       conv_indexed = gdk_rgb_convert_8_indexed;
       conv_gray = gdk_rgb_convert_gray_cmap;
     }
-  else if (bpp == 1 && depth == 8 && (vtype == GDK_VISUAL_STATIC_GRAY
+  else if (bpp == 8 && depth == 8 && (vtype == GDK_VISUAL_STATIC_GRAY
 #ifdef not_ENABLE_GRAYSCALE
                                      || vtype == GDK_VISUAL_GRAYSCALE
 #endif
@@ -2501,10 +3242,34 @@ gdk_rgb_select_conv (GdkImage *image)
       conv = gdk_rgb_convert_gray8;
       conv_gray = gdk_rgb_convert_gray8_gray;
     }
-  else if (depth == 4)
+  else if (bpp == 8 && depth < 8 && depth >= 2 &&
+          (vtype == GDK_VISUAL_STATIC_GRAY
+           || vtype == GDK_VISUAL_GRAYSCALE))
+    {
+      conv = gdk_rgb_convert_gray4;
+      conv_d = gdk_rgb_convert_gray4_d;
+    }
+  else if (bpp == 8 && depth < 8 && depth >= 3)
     {
       conv = gdk_rgb_convert_4;
     }
+  else if (bpp == 4 && depth <= 4 && depth >= 2 &&
+          (vtype == GDK_VISUAL_STATIC_GRAY
+           || vtype == GDK_VISUAL_GRAYSCALE))
+    {
+      conv = gdk_rgb_convert_gray4_pack;
+      conv_d = gdk_rgb_convert_gray4_d_pack;
+    }
+  else if (bpp == 4 && depth == 4 &&
+          vtype == GDK_VISUAL_STATIC_COLOR)
+    conv = gdk_rgb_convert_4_pack;
+
+  if (!conv)
+    g_error ("Visual type=%d depth=%d, image bpp=%d, %s first\n"
+             "is not supported by GdkRGB. Please submit a bug report\n"
+             "with the above values to bugzilla.gnome.org",
+             vtype, depth, bpp,
+             byte_order == GDK_LSB_FIRST ? "lsb" : "msb");
 
   if (conv_d == NULL)
     conv_d = conv;
@@ -2522,148 +3287,48 @@ gdk_rgb_select_conv (GdkImage *image)
   image_info->conv_indexed_d = conv_indexed_d;
 }
 
-static gint horiz_idx;
-static gint horiz_y = IMAGE_HEIGHT;
-static gint vert_idx;
-static gint vert_x = IMAGE_WIDTH;
-static gint tile_idx;
-static gint tile_x = IMAGE_WIDTH;
-static gint tile_y1 = IMAGE_HEIGHT;
-static gint tile_y2 = IMAGE_HEIGHT;
-
-#ifdef VERBOSE
-static gint sincelast;
-#endif
-
-/* Defining NO_FLUSH can cause inconsistent screen updates, but is useful
-   for performance evaluation. */
-
-#undef NO_FLUSH
-
-static gint
-gdk_rgb_alloc_scratch_image (void)
-{
-  if (static_image_idx == N_IMAGES)
-    {
-#ifndef NO_FLUSH
-      gdk_flush ();
-#endif
-#ifdef VERBOSE
-      g_print ("flush, %d puts since last flush\n", sincelast);
-      sincelast = 0;
-#endif
-      static_image_idx = 0;
-      horiz_y = IMAGE_HEIGHT;
-      vert_x = IMAGE_WIDTH;
-      tile_x = IMAGE_WIDTH;
-      tile_y1 = tile_y2 = IMAGE_HEIGHT;
-    }
-  return static_image_idx++;
-}
-
-static GdkImage *
-gdk_rgb_alloc_scratch (gint width, gint height, gint *x0, gint *y0)
-{
-  GdkImage *image;
-  gint idx;
-
-
-  if (width >= (IMAGE_WIDTH >> 1))
-    {
-      if (height >= (IMAGE_HEIGHT >> 1))
-       {
-         idx = gdk_rgb_alloc_scratch_image ();
-         *x0 = 0;
-         *y0 = 0;
-       }
-      else
-       {
-         if (height + horiz_y > IMAGE_HEIGHT)
-           {
-             horiz_idx = gdk_rgb_alloc_scratch_image ();
-             horiz_y = 0;
-           }
-         idx = horiz_idx;
-         *x0 = 0;
-         *y0 = horiz_y;
-         horiz_y += height;
-       }
-    }
-  else
-    {
-      if (height >= (IMAGE_HEIGHT >> 1))
-       {
-         if (width + vert_x > IMAGE_WIDTH)
-           {
-             vert_idx = gdk_rgb_alloc_scratch_image ();
-             vert_x = 0;
-           }
-         idx = vert_idx;
-         *x0 = vert_x;
-         *y0 = 0;
-         vert_x += (width + 3) & -4;
-       }
-      else
-       {
-         if (width + tile_x > IMAGE_WIDTH)
-           {
-             tile_y1 = tile_y2;
-             tile_x = 0;
-           }
-         if (height + tile_y1 > IMAGE_HEIGHT)
-           {
-             tile_idx = gdk_rgb_alloc_scratch_image ();
-             tile_x = 0;
-             tile_y1 = 0;
-             tile_y2 = 0;
-           }
-         if (height + tile_y1 > tile_y2)
-           tile_y2 = height + tile_y1;
-         idx = tile_idx;
-         *x0 = tile_x;
-         *y0 = tile_y1;
-         tile_x += (width + 3) & -4;
-       }
-    }
-  image = static_image[idx];
-#ifdef VERBOSE
-  g_print ("index %d, x %d, y %d (%d x %d)\n", idx, *x0, *y0, width, height);
-  sincelast++;
-#endif
-  return image;
-}
-
 static void
-gdk_draw_rgb_image_core (GdkDrawable *drawable,
-                        GdkGC *gc,
-                        gint x,
-                        gint y,
-                        gint width,
-                        gint height,
-                        guchar *buf,
-                        gint pixstride,
-                        gint rowstride,
-                        GdkRgbConvFunc conv,
-                        GdkRgbCmap *cmap)
+gdk_draw_rgb_image_core (GdkRgbInfo     *image_info,
+                        GdkDrawable    *drawable,
+                        GdkGC          *gc,
+                        gint            x,
+                        gint            y,
+                        gint            width,
+                        gint            height,
+                        const guchar   *buf,
+                        gint            pixstride,
+                        gint            rowstride,
+                        GdkRgbConvFunc  conv,
+                        GdkRgbCmap     *cmap,
+                        gint            xdith,
+                        gint            ydith)
 {
   gint y0, x0;
   gint xs0, ys0;
   GdkImage *image;
   gint width1, height1;
-  guchar *buf_ptr;
+  const guchar *buf_ptr;
 
-  for (y0 = 0; y0 < height; y0 += IMAGE_HEIGHT)
+  if (image_info->bitmap)
     {
-      height1 = MIN (height - y0, IMAGE_HEIGHT);
-      for (x0 = 0; x0 < width; x0 += IMAGE_WIDTH)
+      if (image_info->own_gc == NULL)
+       image_info->own_gc = gdk_gc_new (drawable);
+      gc = image_info->own_gc;
+    }
+  for (y0 = 0; y0 < height; y0 += GDK_SCRATCH_IMAGE_HEIGHT)
+    {
+      height1 = MIN (height - y0, GDK_SCRATCH_IMAGE_HEIGHT);
+      for (x0 = 0; x0 < width; x0 += GDK_SCRATCH_IMAGE_WIDTH)
        {
-         width1 = MIN (width - x0, IMAGE_WIDTH);
+         width1 = MIN (width - x0, GDK_SCRATCH_IMAGE_WIDTH);
          buf_ptr = buf + y0 * rowstride + x0 * pixstride;
 
-         image = gdk_rgb_alloc_scratch (width1, height1, &xs0, &ys0);
+         image = _gdk_image_get_scratch (gdk_drawable_get_screen (drawable), 
+                                         width1, height1,
+                                         image_info->visual->depth, &xs0, &ys0);
 
-         conv (image, xs0, ys0, width1, height1, buf_ptr, rowstride,
-               x + x0, y + y0, cmap);
+         conv (image_info, image, xs0, ys0, width1, height1, buf_ptr, rowstride,
+               x + x0 + xdith, y + y0 + ydith, cmap);
 
 #ifndef DONT_ACTUALLY_DRAW
          gdk_draw_image (drawable, gc,
@@ -2673,47 +3338,160 @@ gdk_draw_rgb_image_core (GdkDrawable *drawable,
     }
 }
 
+static GdkRgbInfo *
+gdk_rgb_get_info_from_drawable (GdkDrawable *drawable)
+{
+  GdkColormap *cmap = gdk_drawable_get_colormap (drawable);
+  GdkScreen *screen = gdk_drawable_get_screen (drawable);
+
+  if (!cmap)
+    {
+      /* This guessing is required to maintain backward compatibility,
+       * but would otherwise be a bad thing
+       */
+
+      gint depth = gdk_drawable_get_depth (drawable);
+      GdkColormap *rgb_cmap = gdk_screen_get_rgb_colormap (screen);
+      if (depth == gdk_colormap_get_visual (rgb_cmap)->depth)
+       cmap = rgb_cmap;
+      else
+       {
+         g_warning ("The gdk_draw_*_image require the drawable argument to\n"
+                    "have a specified colormap. All windows have a colormap,\n"
+                    "however, pixmaps only have colormap by default if they\n"
+                    "were created with a non-NULL window argument. Otherwise\n"
+                    "a colormap must be set on them with gdk_drawable_set_colormap");
+         return NULL;
+       }
+    }
+
+  return gdk_rgb_get_info_from_colormap (cmap);
+}
+
+void
+gdk_draw_rgb_image (GdkDrawable  *drawable,
+                   GdkGC        *gc,
+                   gint          x,
+                   gint          y,
+                   gint          width,
+                   gint          height,
+                   GdkRgbDither  dith,
+                   const guchar *rgb_buf,
+                   gint          rowstride)
+{
+  GdkRgbInfo *image_info = gdk_rgb_get_info_from_drawable (drawable);
+  if (!image_info)
+    return;
+  
+  if (dith == GDK_RGB_DITHER_NONE || (dith == GDK_RGB_DITHER_NORMAL &&
+                                     !image_info->dith_default))
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
+                            rgb_buf, 3, rowstride, image_info->conv, NULL,
+                            0, 0);
+  else
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
+                            rgb_buf, 3, rowstride, image_info->conv_d, NULL,
+                            0, 0);
+}
 
 void
-gdk_draw_rgb_image (GdkDrawable *drawable,
-                   GdkGC *gc,
-                   gint x,
-                   gint y,
-                   gint width,
-                   gint height,
-                   GdkRgbDither dith,
-                   guchar *rgb_buf,
-                   gint rowstride)
-{
+gdk_draw_rgb_image_dithalign (GdkDrawable  *drawable,
+                             GdkGC        *gc,
+                             gint          x,
+                             gint          y,
+                             gint          width,
+                             gint          height,
+                             GdkRgbDither  dith,
+                             const guchar *rgb_buf,
+                             gint          rowstride,
+                             gint          xdith,
+                             gint          ydith)
+{
+  GdkRgbInfo *image_info = gdk_rgb_get_info_from_drawable (drawable);
+  if (!image_info)
+    return;
+  
   if (dith == GDK_RGB_DITHER_NONE || (dith == GDK_RGB_DITHER_NORMAL &&
                                      !image_info->dith_default))
-    gdk_draw_rgb_image_core (drawable, gc, x, y, width, height,
-                            rgb_buf, 3, rowstride, image_info->conv, NULL);
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
+                            rgb_buf, 3, rowstride, image_info->conv, NULL,
+                            xdith, ydith);
   else
-    gdk_draw_rgb_image_core (drawable, gc, x, y, width, height,
-                            rgb_buf, 3, rowstride, image_info->conv_d, NULL);
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
+                            rgb_buf, 3, rowstride, image_info->conv_d, NULL,
+                            xdith, ydith);
 }
 
 void
-gdk_draw_rgb_32_image (GdkDrawable *drawable,
-                      GdkGC *gc,
-                      gint x,
-                      gint y,
-                      gint width,
-                      gint height,
-                      GdkRgbDither dith,
-                      guchar *buf,
-                      gint rowstride)
-{
+gdk_draw_rgb_32_image (GdkDrawable  *drawable,
+                      GdkGC        *gc,
+                      gint          x,
+                      gint          y,
+                      gint          width,
+                      gint          height,
+                      GdkRgbDither  dith,
+                      const guchar *buf,
+                      gint          rowstride)
+{
+  GdkRgbInfo *image_info = gdk_rgb_get_info_from_drawable (drawable);
+  if (!image_info)
+    return;
+  
   if (dith == GDK_RGB_DITHER_NONE || (dith == GDK_RGB_DITHER_NORMAL &&
                                      !image_info->dith_default))
-    gdk_draw_rgb_image_core (drawable, gc, x, y, width, height,
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
                             buf, 4, rowstride,
-                            image_info->conv_32, NULL);
+                            image_info->conv_32, NULL, 0, 0);
   else
-    gdk_draw_rgb_image_core (drawable, gc, x, y, width, height,
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
                             buf, 4, rowstride,
-                            image_info->conv_32_d, NULL);
+                            image_info->conv_32_d, NULL, 0, 0);
+}
+
+/**
+ * gdk_draw_rgb_32_image_dithalign:
+ * @drawable: a #GdkDrawable
+ * @gc: a #GdkGC
+ * @x: X coordinate on @drawable where image should go
+ * @y: Y coordinate on @drawable where image should go
+ * @width: width of area of image to draw
+ * @height: height of area of image to draw
+ * @dith: dithering mode
+ * @buf: RGB image data
+ * @rowstride: rowstride of RGB image data
+ * @xdith: X dither offset
+ * @ydith: Y dither offset
+ *
+ * Like gdk_draw_rgb_32_image(), but allows you to specify the dither
+ * offsets. See gdk_draw_rgb_image_dithalign() for more details.
+ * 
+ **/
+void
+gdk_draw_rgb_32_image_dithalign (GdkDrawable  *drawable,
+                                GdkGC        *gc,
+                                gint          x,
+                                gint          y,
+                                gint          width,
+                                gint          height,
+                                GdkRgbDither  dith,
+                                const guchar *buf,
+                                gint          rowstride,
+                                gint          xdith,
+                                gint          ydith)
+{
+  GdkRgbInfo *image_info = gdk_rgb_get_info_from_drawable (drawable);
+  if (!image_info)
+    return;
+  
+  if (dith == GDK_RGB_DITHER_NONE || (dith == GDK_RGB_DITHER_NORMAL &&
+                                     !image_info->dith_default))
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
+                            buf, 4, rowstride,
+                            image_info->conv_32, NULL, xdith, ydith);
+  else
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
+                            buf, 4, rowstride,
+                            image_info->conv_32_d, NULL, xdith, ydith);
 }
 
 static void
@@ -2728,104 +3506,255 @@ gdk_rgb_make_gray_cmap (GdkRgbInfo *info)
 }
 
 void
-gdk_draw_gray_image (GdkDrawable *drawable,
-                    GdkGC *gc,
-                    gint x,
-                    gint y,
-                    gint width,
-                    gint height,
-                    GdkRgbDither dith,
-                    guchar *buf,
-                    gint rowstride)
-{
+gdk_draw_gray_image (GdkDrawable  *drawable,
+                    GdkGC        *gc,
+                    gint          x,
+                    gint          y,
+                    gint          width,
+                    gint          height,
+                    GdkRgbDither  dith,
+                    const guchar *buf,
+                    gint          rowstride)
+{
+  GdkRgbInfo *image_info = gdk_rgb_get_info_from_drawable (drawable);
+  if (!image_info)
+    return;
+  
   if (image_info->bpp == 1 &&
       image_info->gray_cmap == NULL &&
       (image_info->visual->type == GDK_VISUAL_PSEUDO_COLOR ||
+       image_info->visual->type == GDK_VISUAL_STATIC_COLOR ||
        image_info->visual->type == GDK_VISUAL_GRAYSCALE))
     gdk_rgb_make_gray_cmap (image_info);
   
   if (dith == GDK_RGB_DITHER_NONE || (dith == GDK_RGB_DITHER_NORMAL &&
                                      !image_info->dith_default))
-    gdk_draw_rgb_image_core (drawable, gc, x, y, width, height,
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
                             buf, 1, rowstride,
-                            image_info->conv_gray, NULL);
+                            image_info->conv_gray, NULL, 0, 0);
   else
-    gdk_draw_rgb_image_core (drawable, gc, x, y, width, height,
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
                             buf, 1, rowstride,
-                            image_info->conv_gray_d, NULL);
+                            image_info->conv_gray_d, NULL, 0, 0);
 }
 
-GdkRgbCmap *
-gdk_rgb_cmap_new (guint32 *colors, gint n_colors)
+static GdkRgbCmapInfo *
+gdk_rgb_cmap_get_info (GdkRgbCmap *cmap,
+                      GdkRgbInfo *image_info)
 {
-  GdkRgbCmap *cmap;
+  GSList *tmp_list;
+  GdkRgbCmapInfo *cmap_info;
   int i, j;
   guint32 rgb;
 
+  /* We don't need a LUT for TrueColor or DirectColor visuals */
+  if (image_info->bpp != 1 ||
+      !(image_info->visual->type == GDK_VISUAL_PSEUDO_COLOR ||
+       image_info->visual->type == GDK_VISUAL_STATIC_COLOR ||
+       image_info->visual->type == GDK_VISUAL_GRAYSCALE))
+    return NULL;
+  
+  tmp_list = cmap->info_list;
+
+  while (tmp_list)
+    {
+     cmap_info = tmp_list->data;
+      if (cmap_info->image_info == image_info)
+       return cmap_info;
+    }
+
+  cmap_info = g_new (GdkRgbCmapInfo, 1);
+  cmap_info->image_info = image_info;
+  cmap_info->cmap = cmap;
+  
+  for (i = 0; i < cmap->n_colors; i++)
+    {
+      rgb = cmap->colors[i];
+      j = ((rgb & 0xf00000) >> 12) |
+       ((rgb & 0xf000) >> 8) |
+       ((rgb & 0xf0) >> 4);
+#ifdef VERBOSE
+      g_print ("%d %x %x\n", i, j, image_info->colorcube[j]);
+#endif
+      cmap_info->lut[i] = image_info->colorcube[j];
+    }
+
+  cmap->info_list = g_slist_prepend (cmap->info_list, cmap_info);
+  image_info->cmap_info_list = g_slist_prepend (image_info->cmap_info_list, cmap_info);
+  
+  return cmap_info;
+}
+
+GdkRgbCmap *
+gdk_rgb_cmap_new (guint32 *colors, gint n_colors)
+{
+  GdkRgbCmap *cmap;
+    
   g_return_val_if_fail (n_colors >= 0, NULL);
   g_return_val_if_fail (n_colors <= 256, NULL);
+
   cmap = g_new (GdkRgbCmap, 1);
+
+  cmap->n_colors = n_colors;
   memcpy (cmap->colors, colors, n_colors * sizeof(guint32));
-  if (image_info->bpp == 1 &&
-      (image_info->visual->type == GDK_VISUAL_PSEUDO_COLOR ||
-       image_info->visual->type == GDK_VISUAL_GRAYSCALE))
-    for (i = 0; i < n_colors; i++)
-      {
-       rgb = colors[i];
-       j = ((rgb & 0xf00000) >> 12) |
-                  ((rgb & 0xf000) >> 8) |
-                  ((rgb & 0xf0) >> 4);
-#ifdef VERBOSE
-       g_print ("%d %x %x %d\n", i, j, colorcube[j]);
-#endif
-       cmap->lut[i] = colorcube[j];
-      }
+
+  cmap->info_list = NULL;
+  
   return cmap;
 }
 
 void
 gdk_rgb_cmap_free (GdkRgbCmap *cmap)
 {
+  GSList *tmp_list;
+
+  tmp_list = cmap->info_list;
+  while (tmp_list)
+    {
+      GdkRgbCmapInfo *cmap_info = tmp_list->data;
+      cmap_info->image_info->cmap_info_list = g_slist_remove (cmap_info->image_info->cmap_info_list, cmap_info);
+      g_free (cmap_info);
+      tmp_list = tmp_list->next;
+    }
+  g_slist_free (cmap->info_list);
+  
   g_free (cmap);
 }
 
 void
-gdk_draw_indexed_image (GdkDrawable *drawable,
-                       GdkGC *gc,
-                       gint x,
-                       gint y,
-                       gint width,
-                       gint height,
-                       GdkRgbDither dith,
-                       guchar *buf,
-                       gint rowstride,
-                       GdkRgbCmap *cmap)
-{
+gdk_draw_indexed_image (GdkDrawable  *drawable,
+                       GdkGC        *gc,
+                       gint          x,
+                       gint          y,
+                       gint          width,
+                       gint          height,
+                       GdkRgbDither  dith,
+                       const guchar *buf,
+                       gint          rowstride,
+                       GdkRgbCmap   *cmap)
+{
+  GdkRgbInfo *image_info = gdk_rgb_get_info_from_drawable (drawable);
+  if (!image_info)
+    return;
+  
   if (dith == GDK_RGB_DITHER_NONE || (dith == GDK_RGB_DITHER_NORMAL &&
                                      !image_info->dith_default))
-    gdk_draw_rgb_image_core (drawable, gc, x, y, width, height,
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
                             buf, 1, rowstride,
-                            image_info->conv_indexed, cmap);
+                            image_info->conv_indexed, cmap, 0, 0);
   else
-    gdk_draw_rgb_image_core (drawable, gc, x, y, width, height,
+    gdk_draw_rgb_image_core (image_info, drawable, gc, x, y, width, height,
                             buf, 1, rowstride,
-                            image_info->conv_indexed_d, cmap);
+                            image_info->conv_indexed_d, cmap, 0, 0);
 }
 
 gboolean
-gdk_rgb_ditherable (void)
+gdk_rgb_colormap_ditherable (GdkColormap *cmap)
 {
+  GdkRgbInfo *image_info = gdk_rgb_get_info_from_colormap (cmap);
+
   return (image_info->conv != image_info->conv_d);
 }
 
+gboolean
+gdk_rgb_ditherable (void)
+{
+  return gdk_rgb_colormap_ditherable (gdk_rgb_get_colormap ());
+}
+
+/**
+ * gdk_rgb_get_colormap:
+ * 
+ * Get the preferred colormap for rendering image data.  Not a
+ * very useful function; historically, GDK could only render RGB image
+ * data to one colormap and visual, but in the current version it can
+ * render to any colormap and visual. So there's no need to call this
+ * function.
+ * 
+ * Return value: the preferred colormap
+ **/
 GdkColormap *
-gdk_rgb_get_cmap (void)
+gdk_rgb_get_colormap (void)
 {
-  return image_info->cmap;
+  static GdkColormap *cmap = NULL;
+  if (!cmap)
+    {
+      GdkRgbInfo *image_info = gdk_rgb_create_info (gdk_rgb_choose_visual (gdk_screen_get_default ()), NULL);
+      cmap = image_info->cmap;
+    }
+
+  return cmap;
 }
 
+/**
+ * gdk_screen_get_rgb_colormap:
+ * @screen: a #GdkScreen.
+ * 
+ * Gets the preferred colormap for rendering image data on @screen.
+ * Not a very useful function; historically, GDK could only render RGB
+ * image data to one colormap and visual, but in the current version
+ * it can render to any colormap and visual. So there's no need to
+ * call this function.
+ * 
+ * Return value: the preferred colormap
+ *
+ * Since: 2.2
+ **/
+GdkColormap *
+gdk_screen_get_rgb_colormap (GdkScreen *screen)
+{
+  GdkColormap *cmap;
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+  cmap = g_object_get_data (G_OBJECT (screen), "rgb-colormap"); 
+  if (!cmap)
+    {
+      GdkRgbInfo *image_info = gdk_rgb_create_info (gdk_rgb_choose_visual (screen), NULL);
+      cmap = image_info->cmap;
+      g_object_set_data (G_OBJECT (screen), "rgb-colormap", cmap);
+    }
+
+  return cmap;
+}
+
+/**
+ * gdk_screen_get_rgb_visual:
+ * @screen: a #GdkScreen
+ * 
+ * Gets a "preferred visual" chosen by GdkRGB for rendering image data
+ * on @screen. In previous versions of
+ * GDK, this was the only visual GdkRGB could use for rendering. In
+ * current versions, it's simply the visual GdkRGB would have chosen as 
+ * the optimal one in those previous versions. GdkRGB can now render to 
+ * drawables with any visual.
+ * 
+ * Return value: The #GdkVisual chosen by GdkRGB.
+ *
+ * Since: 2.2
+ **/
+GdkVisual *
+gdk_screen_get_rgb_visual (GdkScreen *screen)
+{
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+  return gdk_colormap_get_visual (gdk_screen_get_rgb_colormap (screen));
+}
+
+/**
+ * gdk_rgb_get_visual:
+ * 
+ * Gets a "preferred visual" chosen by GdkRGB for rendering image data
+ * on the default screen. In previous versions of GDK, this was the
+ * only visual GdkRGB could use for rendering. In current versions,
+ * it's simply the visual GdkRGB would have chosen as the optimal one
+ * in those previous versions. GdkRGB can now render to drawables with
+ * any visual.
+ * 
+ * Return value: The #GdkVisual chosen by GdkRGB.
+ **/
 GdkVisual *
 gdk_rgb_get_visual (void)
 {
-  return image_info->visual;
+  return gdk_screen_get_rgb_visual (gdk_screen_get_default ());
 }
+
+#define __GDK_RGB_C__
+#include "gdkaliasdef.c"