protected void paint64( TerrainRegion r, Graphics2D g2d, double ox, double oy, double m ) {
		l.precache(r.terrainTypePaletteHandle);
		l.precache(r.subregionPaletteHandle);
		
		Handle[] subregionHandles = (Handle[])l.getValue(r.subregionPaletteHandle, emptyHandleArray);
		Handle[] terrainTypeHandles = (Handle[])l.getValue(r.terrainTypePaletteHandle, emptyHandleArray);
		
		TerrainType[] terrainTypes = new TerrainType[256];
		TerrainRegion[] subregions = null;

		for( int i=0; i<terrainTypeHandles.length; ++i ) {
			l.precache(terrainTypeHandles[i]);
		}
		if( m >= 192 || m <= -192 ) {
			subregions = new TerrainRegion[256];
			for( int i=0; i<subregionHandles.length; ++i ) {
				l.precache(subregionHandles[i]);
			}
			for( int i=0; i<subregionHandles.length; ++i ) {
				subregions[i] = (TerrainRegion)l.getValue(subregionHandles[i], TerrainRegion.NULL_REGION);
			}
			for( int i=subregionHandles.length; i<256; ++i ) {
				subregions[i] = TerrainRegion.NULL_REGION;
			}
		}
		for( int i=0; i<terrainTypeHandles.length; ++i ) {
			terrainTypes[i] = (TerrainType)l.getValue(terrainTypeHandles[i], TerrainRegion.NULL_REGION);
		}
		for( int i=terrainTypeHandles.length; i<256; ++i ) {
			terrainTypes[i] = TerrainType.NULL_TERRAIN_TYPE;
		}
		
		paint16( r, terrainTypes, subregions,  0, g2d, ox-0.25*m, oy-0.25*m,  m );
		paint16( r, terrainTypes, subregions, 16, g2d, ox+     0, oy+0.25*m,  m );
		paint16( r, terrainTypes, subregions, 32, g2d, ox+0.25*m, oy-0.25*m,  m );
		paint16( r, terrainTypes, subregions, 48, g2d, ox+     0, oy-0.25*m, -m );
	}