You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.6 MiB

In [217]:
import sys
sys.path.insert(0, "/wd/lut_reproduce/src/")
In [4]:
from PIL import Image
import numpy as np

def PSNR(y_true, y_pred, shave_border=4):
    target_data = np.array(y_true, dtype=np.float32)
    ref_data = np.array(y_pred, dtype=np.float32)

    diff = ref_data - target_data
    if shave_border > 0:
        diff = diff[shave_border:-shave_border, shave_border:-shave_border]
    rmse = np.sqrt(np.mean(np.power(diff, 2)))

    return 20 * np.log10(255. / rmse)

def _rgb2ycbcr(img, maxVal=255):
    O = np.array([[16],
                  [128],
                  [128]])
    T = np.array([[0.256788235294118, 0.504129411764706, 0.097905882352941],
                  [-0.148223529411765, -0.290992156862745, 0.439215686274510],
                  [0.439215686274510, -0.367788235294118, -0.071427450980392]])

    if maxVal == 1:
        O = O / 255.0

    t = np.reshape(img, (img.shape[0] * img.shape[1], img.shape[2]))
    t = np.dot(t, np.transpose(T))
    t[:, 0] += O[0]
    t[:, 1] += O[1]
    t[:, 2] += O[2]
    ycbcr = np.reshape(t, [img.shape[0], img.shape[1], img.shape[2]])

    return ycbcr

image = np.array(Image.open("./data/Set14/HR/monarch.png"))
np.random.seed(2)
noise = np.random.randint(-5,5,size=image.shape)

def with_noise(image, noise):
    return (image + noise).clip(0,255).astype(np.uint8)

a = _rgb2ycbcr(image)[:,:,0]
b = _rgb2ycbcr(with_noise(image, noise))[:,:,0]

image = np.array(Image.open("./data/Set14/HR/monarch.png").convert("YCbCr").getchannel(0))
c = image
d = with_noise(image, noise[:,:,0])

image = np.array(Image.open("./data/Set14/HR/monarch.png"))
y = _rgb2ycbcr(image)[:,:,0]
e = y
f = with_noise(y, noise[:,:,0])

noise_before_rgb2y = PSNR(a, b)
noise_after_pil_rgb2y = PSNR(c, d)
noise_after_mutlut_rgb2y = PSNR(e, f)

# 43.49568901720914, 38.837762584624734, 38.445220463904704
noise_before_rgb2y, noise_after_pil_rgb2y, noise_after_mutlut_rgb2y
Out[4]:
(43.49568901720914, 38.837762584624734, 38.445220463904704)
In [219]:
217728*2*2, 3*1*126*192*2*2
Out[219]:
(870912, 290304)
In [220]:
torch.arange(start=0, end=256, step=16)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
/wd/lut_reproduce/explore.ipynb Cell 4 line 1
----> <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#W3sdnNjb2RlLXJlbW90ZQ%3D%3D?line=0'>1</a> torch.arange(start=0, end=256, step=16)

NameError: name 'torch' is not defined
In [ ]:
import torch
import torch.nn.functional as F
n = 4
a = (torch.arange(n**2) + torch.arange(start=0, end=16**2, step=16)).view(1,1,n,n).type(torch.float32)

def bit_plane_slicing(x, bit_mask='11110000'):
    m = int(bit_mask, 2)
    masks = [m, 255-m]
    images = []
    for mask in masks:
        images.append((x.type(torch.LongTensor) & mask).type(torch.FloatTensor).to(x.device))
    return images

bit_plane_slicing(a)
Out[ ]:
[tensor([[[[  0.,  16.,  32.,  48.],
           [ 64.,  80.,  96., 112.],
           [128., 144., 160., 176.],
           [192., 208., 224., 240.]]]]),
 tensor([[[[ 0.,  1.,  2.,  3.],
           [ 4.,  5.,  6.,  7.],
           [ 8.,  9., 10., 11.],
           [12., 13., 14., 15.]]]])]
In [ ]:
lsb = a % 16
msb = a - lsb
msb, lsb
Out[ ]:
(tensor([[[[  0.,  16.,  32.,  48.],
           [ 64.,  80.,  96., 112.],
           [128., 144., 160., 176.],
           [192., 208., 224., 240.]]]]),
 tensor([[[[ 0.,  1.,  2.,  3.],
           [ 4.,  5.,  6.,  7.],
           [ 8.,  9., 10., 11.],
           [12., 13., 14., 15.]]]]))
In [ ]:
# sys.path.insert(0, "/wd/luts/src/")
import numpy as np
from models import SaveCheckpoint
from models.sdylut import SDYLutR90x2
from pathlib import Path
path1s = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s1_s.npy")
path1d = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s1_d.npy")
path1y = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s1_y.npy")
path2s = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s2_s.npy")
path2d = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s2_d.npy")
path2y = Path("/wd/MuLUT/models/sr_x2sdy/LUT_ft_x4_4bit_int8_s2_y.npy")
lut1s = np.load(path1s).reshape(17,17,17,17,1,1).astype(np.int8) 
lut1s = np.flip(lut1s, axis=[0,2]).copy()
lut1d = np.load(path1d).reshape(17,17,17,17,1,1).astype(np.int8) 
lut1d = np.flip(lut1d, axis=[0,2]).copy()
lut1y = np.load(path1y).reshape(17,17,17,17,1,1).astype(np.int8) 
lut1y = np.flip(lut1y, axis=[0,2]).copy()
lut2s = np.load(path2s).reshape(17,17,17,17,4,4).astype(np.int8) 
lut2s = np.flip(lut2s, axis=[0,2]).copy()
lut2d = np.load(path2d).reshape(17,17,17,17,4,4).astype(np.int8) 
lut2d = np.flip(lut2d, axis=[0,2]).copy()
lut2y = np.load(path2y).reshape(17,17,17,17,4,4).astype(np.int8) 
lut2y = np.flip(lut2y, axis=[0,2]).copy()
m = SDYLutR90x2.init_from_numpy(stage1_S=lut1s, stage1_D=lut1d, stage1_Y=lut1y, stage2_S=lut2s, stage2_D=lut2d, stage2_Y=lut2y)
SaveCheckpoint(model=m, path=f"./models/MuLUT_ft_x4_4bit_int8.pt")
m
Out[ ]:
SDYLutR90x2
  stage1_S size: torch.Size([17, 17, 17, 17, 1, 1])
  stage1_D size: torch.Size([17, 17, 17, 17, 1, 1])
  stage1_Y size: torch.Size([17, 17, 17, 17, 1, 1])
  stage2_S size: torch.Size([17, 17, 17, 17, 4, 4])
  stage2_D size: torch.Size([17, 17, 17, 17, 4, 4])
  stage2_Y size: torch.Size([17, 17, 17, 17, 4, 4])
In [ ]:
from einops import rearrange

f, a = plt.subplots(1,1, figsize=(9*5, 9*5))
gg = lut1s.reshape(17**4, 1, 1)
gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17)
a.imshow(gg)
Out[ ]:
<matplotlib.image.AxesImage at 0x7fec35dbd300>
In [ ]:
from models import LoadCheckpoint

# m = LoadCheckpoint("./models/SDYNetx2_DIV2K/checkpoints/SDYLutx2_0.pth")
m = LoadCheckpoint("./models/HDBHNet_RGB_DIV2K_x4/checkpoints/HDBHNet_15000.pth")
m.stage1_S
Out[ ]:
UpscaleBlock(
  (embed): Linear(in_features=4, out_features=64, bias=True)
  (linear_projections): ModuleList(
    (0): Linear(in_features=64, out_features=64, bias=True)
    (1): Linear(in_features=128, out_features=64, bias=True)
    (2): Linear(in_features=192, out_features=64, bias=True)
    (3): Linear(in_features=256, out_features=64, bias=True)
  )
  (project_channels): Linear(in_features=320, out_features=16, bias=True)
)
In [ ]:
from common.lut import transfer_2x2_input_SxS_output
transfer_2x2_input_SxS_output?
Signature:
transfer_2x2_input_SxS_output(
    block,
    quantization_interval=16,
    batch_size=1024,
    max_value=255,
)
Docstring: <no docstring>
File:      /wd/lut_reproduce/src/common/lut.py
Type:      function
In [ ]:
lut = transfer_2x2_input_SxS_output(m.stage1_S, quantization_interval=1, max_value=15)
 UpscaleBlock 83521/83521    
In [ ]:
import torch 
values1d = torch.arange(0, 256, 16, dtype=torch.uint8)
values1d = torch.cat([values1d, torch.tensor([256])])
values = torch.cartesian_prod(*([values1d]*4)).view(-1, 1, 4)
In [ ]:
values[32000]
Out[ ]:
tensor([[ 96, 128, 192,  96]])
In [ ]:
from einops import rearrange
import numpy as np
import matplotlib.pyplot as plt

f, a = plt.subplots(1,1, figsize=(9*5, 9*5))
gg = lut[:,:,:,:,2,0].reshape(17**4, 1, 1)
gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17)
a.imshow(gg)
Out[ ]:
<matplotlib.image.AxesImage at 0x7fc2a7bd1030>
In [ ]:
import numpy as np
import matplotlib.pyplot as plt
In [ ]:
from models import LoadLutCheckpoint
In [ ]:
lut = LoadLutCheckpoint("/wd/luts/models/srnet2x2/luts/0.pth")
dict_keys(['model', 'scale', 'quantization_interval', 'state_dict'])
Out[ ]:
SRLut2x2
  lut size: torch.Size([17, 17, 17, 17, 4, 4])
In [ ]:
# [lut.stage_lut[(i+8)%17,i,i,(i-8)%17] for i in range(17)]
import torch
# torch.floor_divide(torch.arange(256), 17)
# torch.arange(256) % 17
coefs = (torch.arange(17) % 17) / 17
lut.stage_lut[0,0,0,0], lut.stage_lut[1,1,1,1], coefs, lut.stage_lut[0,0,0,0] + coefs[9]*(lut.stage_lut[1,1,1,1]-lut.stage_lut[0,0,0,0])
Out[ ]:
(tensor([[1., 1., 1., 1.],
         [1., 1., 1., 0.],
         [1., 1., 1., 0.],
         [1., 1., 1., 1.]], grad_fn=<SelectBackward0>),
 tensor([[17., 16., 16., 16.],
         [17., 16., 16., 16.],
         [17., 17., 16., 16.],
         [17., 17., 16., 16.]], grad_fn=<SelectBackward0>),
 tensor([0.0000, 0.0588, 0.1176, 0.1765, 0.2353, 0.2941, 0.3529, 0.4118, 0.4706,
         0.5294, 0.5882, 0.6471, 0.7059, 0.7647, 0.8235, 0.8824, 0.9412]),
 tensor([[9.4706, 8.9412, 8.9412, 8.9412],
         [9.4706, 8.9412, 8.9412, 8.4706],
         [9.4706, 9.4706, 8.9412, 8.4706],
         [9.4706, 9.4706, 8.9412, 8.9412]], grad_fn=<AddBackward0>))
In [ ]:
luts = np.load("/wd/luts/models/RCNetTest/luts/RCLutTest_200000_x4_4.0bit_int8.npz", allow_pickle=True)
state_dict = luts['state_dict'].item()
state_dict
Out[ ]:
{'stage1_lut': array([[131, 131, 130, 130, 129, 129, 128, 128, 127, 126, 126, 125, 125,
         124, 124, 123, 255],
        [115, 117, 118, 120, 121, 123, 124, 126, 127, 129, 130, 131, 133,
         134, 136, 137, 255],
        [153, 150, 147, 143, 140, 137, 134, 130, 127, 124, 120, 117, 114,
         110, 107, 104, 255],
        [115, 117, 118, 120, 121, 123, 124, 126, 127, 129, 130, 132, 133,
         134, 136, 137, 255],
        [129, 129, 129, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126,
         125, 125, 125, 255],
        [115, 117, 118, 120, 121, 123, 124, 126, 127, 129, 130, 131, 133,
         134, 136, 137, 255],
        [160, 156, 152, 148, 144, 140, 135, 131, 127, 123, 118, 114, 110,
         106, 102,  97, 255],
        [ 44,  52,  60,  70,  80,  91, 103, 115, 127, 140, 152, 164, 175,
         185, 194, 203, 255],
        [178, 172, 166, 160, 153, 147, 140, 134, 127, 120, 113, 107, 100,
          94,  88,  82, 255],
        [112, 114, 116, 118, 120, 122, 123, 125, 127, 129, 131, 133, 134,
         136, 138, 140, 255],
        [153, 150, 147, 143, 140, 137, 134, 130, 127, 124, 120, 117, 114,
         110, 107, 104, 255],
        [ 44,  52,  61,  70,  80,  91, 103, 115, 127, 140, 152, 163, 174,
         185, 194, 202, 255],
        [ 14,  20,  27,  37,  50,  66,  85, 106, 128, 150, 171, 189, 205,
         217, 227, 235, 255],
        [125, 125, 125, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128,
         128, 129, 129, 255],
        [130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126,
         125, 125, 125, 255],
        [115, 117, 118, 120, 121, 123, 124, 126, 127, 129, 130, 132, 133,
         134, 136, 137, 255],
        [178, 172, 166, 160, 153, 147, 140, 134, 127, 120, 113, 107, 100,
          94,  88,  82, 255],
        [125, 125, 125, 126, 126, 126, 126, 127, 127, 127, 128, 128, 128,
         128, 129, 129, 255],
        [127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
         127, 127, 127, 255],
        [126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127,
         128, 128, 128, 255],
        [129, 129, 129, 128, 128, 128, 128, 127, 127, 127, 126, 126, 126,
         126, 125, 125, 255],
        [113, 114, 116, 118, 120, 122, 123, 125, 127, 129, 131, 133, 134,
         136, 138, 140, 255],
        [130, 129, 129, 129, 128, 128, 128, 127, 127, 127, 126, 126, 126,
         125, 125, 125, 255],
        [126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127,
         128, 128, 128, 255],
        [127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127,
         127, 127, 127, 255]], dtype=uint8),
 'stage1_dense_upscale_lut': array([[[[[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  3,   1,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  3,   1,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  2,   1,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   1],
            [ 61,  68,  42,  49]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   1],
            [ 81,  77,  49,  61]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  7,   2,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  7,   2,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 10,   4,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   1],
            [122, 104,  50,  52]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   1,   1],
            [125, 107,  62,  78]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  4,   1,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  4,   1,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  4,   1,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   1],
            [ 56,  44,  22,  37]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   1],
            [ 84,  62,  32,  51]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 10,   3,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 10,   3,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 18,   5,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   0],
            [124,  74,  26,  33]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   1],
            [127,  89,  43,  62]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  5,   1,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  5,   2,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  5,   2,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   1],
            [ 93,  64,  30,  49]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   1],
            [110,  83,  44,  70]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 13,   4,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 15,   5,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 31,  10,   1,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   1],
            [151,  96,  38,  48]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   1],
            [158, 103,  48,  71]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         ...,
 
 
 
         [[[[  0,   0,   0,   1],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   2],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   1],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,  40],
            [  0,   0,   0,  71],
            [  0,   0,   1,  80],
            [  0,   0,   2, 126]],
 
           [[  0,   0,   0,  28],
            [  0,   0,   0,  77],
            [  0,   0,   1, 107],
            [  0,   0,   2, 157]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   2],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   4],
            [  0,   0,   0,   2],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   3],
            [  0,   0,   0,   2],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,  52],
            [  0,   0,   0, 116],
            [  0,   0,   1, 133],
            [  0,   0,   2, 151]],
 
           [[  0,   0,   0,  39],
            [  0,   0,   0, 102],
            [  0,   0,   1, 138],
            [  0,   0,   3, 176]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   5],
            [  0,   0,   0,   2],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   5],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   4],
            [  0,   0,   0,   3],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,  71],
            [  0,   0,   1, 152],
            [  0,   0,   1, 172],
            [  0,   0,   3, 187]],
 
           [[  0,   0,   0,  56],
            [  0,   0,   1, 137],
            [  0,   0,   1, 175],
            [  0,   0,   4, 206]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  0,  18, 139, 249],
            [  8, 160, 233, 248],
            [ 83, 226, 235, 241],
            [211, 222, 191, 155]],
 
           [[  1,  17, 136, 250],
            [  9, 164, 233, 249],
            [ 91, 231, 238, 244],
            [221, 230, 208, 189]],
 
           [[  0,  21, 168, 253],
            [ 10, 179, 240, 252],
            [ 82, 232, 239, 247],
            [225, 238, 223, 209]],
 
           ...,
 
           [[  2,  21, 168, 254],
            [ 20, 184, 248, 255],
            [127, 244, 253, 255],
            [252, 255, 255, 255]],
 
           [[  3,  24, 151, 254],
            [ 29, 189, 244, 255],
            [154, 246, 253, 255],
            [253, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  1,  39, 177, 252],
            [ 19, 198, 242, 252],
            [134, 241, 243, 246],
            [242, 245, 226, 188]],
 
           [[  2,  51, 195, 253],
            [ 27, 208, 243, 253],
            [136, 241, 243, 248],
            [244, 248, 235, 215]],
 
           [[  1,  34, 179, 253],
            [ 19, 200, 242, 253],
            [123, 241, 243, 248],
            [240, 246, 236, 225]],
 
           ...,
 
           [[  4,  35, 200, 255],
            [ 40, 209, 250, 255],
            [173, 248, 254, 255],
            [254, 255, 255, 255]],
 
           [[  4,  33, 181, 254],
            [ 45, 206, 248, 255],
            [187, 249, 254, 255],
            [254, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[  0,   0,   0,   7],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   6],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   6],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   1, 110],
            [  0,   0,   1, 157],
            [  0,   0,   2, 150],
            [  0,   0,   3, 170]],
 
           [[  0,   0,   1,  86],
            [  0,   0,   1, 162],
            [  0,   0,   2, 171],
            [  0,   0,   4, 182]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   7],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   7],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  10],
            [  0,   0,   0,   5],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   1, 135],
            [  0,   0,   2, 201],
            [  0,   0,   2, 197],
            [  0,   0,   3, 187]],
 
           [[  0,   0,   1, 120],
            [  0,   0,   2, 203],
            [  0,   0,   3, 209],
            [  0,   0,   6, 205]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,  19],
            [  0,   0,   0,   8],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  13],
            [  0,   0,   0,   7],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  14],
            [  0,   0,   0,   9],
            [  0,   0,   0,   2],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   1, 133],
            [  0,   0,   2, 209],
            [  0,   0,   4, 217],
            [  0,   0,   6, 215]],
 
           [[  0,   0,   1, 132],
            [  0,   0,   2, 213],
            [  0,   0,   4, 227],
            [  0,   1,  10, 230]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  1,  33, 205, 254],
            [ 12, 207, 249, 254],
            [ 99, 240, 247, 249],
            [226, 232, 208, 184]],
 
           [[  0,  26, 203, 254],
            [ 12, 210, 250, 254],
            [111, 243, 248, 251],
            [228, 235, 216, 201]],
 
           [[  0,  21, 190, 254],
            [  9, 193, 248, 254],
            [ 72, 236, 247, 251],
            [220, 239, 231, 222]],
 
           ...,
 
           [[  4,  55, 231, 255],
            [ 36, 219, 253, 255],
            [153, 247, 254, 255],
            [252, 255, 255, 255]],
 
           [[  4,  59, 231, 255],
            [ 38, 219, 253, 255],
            [163, 248, 254, 255],
            [253, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  1,  48, 211, 254],
            [ 21, 220, 249, 254],
            [140, 245, 248, 250],
            [242, 244, 226, 200]],
 
           [[  1,  52, 220, 254],
            [ 23, 222, 250, 254],
            [132, 244, 247, 250],
            [243, 246, 233, 213]],
 
           [[  1,  51, 221, 254],
            [ 31, 230, 252, 254],
            [148, 248, 251, 253],
            [244, 250, 244, 234]],
 
           ...,
 
           [[  6,  68, 233, 255],
            [ 56, 226, 253, 255],
            [196, 250, 254, 255],
            [254, 255, 255, 255]],
 
           [[  6,  68, 231, 255],
            [ 54, 225, 253, 255],
            [198, 251, 254, 255],
            [254, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]]],
 
 
 
 
        [[[[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  4,   1,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  6,   2,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  5,   2,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   1],
            [117, 110,  66,  62]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   1,   1],
            [117, 121,  80,  81]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  9,   2,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 11,   3,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 17,   6,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  2,   1,   1,   1],
            [162, 146,  81,  73]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   1,   1],
            [155, 135,  85,  97]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  5,   1,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  6,   2,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  7,   2,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   1,   1],
            [128, 109,  63,  77]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   1,   2],
            [149, 135,  89, 111]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 16,   4,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 17,   4,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 28,   8,   1,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  3,   1,   0,   1],
            [174, 123,  55,  62]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  2,   1,   1,   1],
            [190, 147,  82, 105]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 10,   3,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  9,   3,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  9,   3,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   1],
            [134,  94,  45,  63]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   1,   2],
            [161, 130,  74, 105]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   0,   0,   0],
            [ 22,   6,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   0,   0,   0],
            [ 23,   7,   1,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   0,   0,   0],
            [ 48,  14,   1,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  3,   2,   1,   1],
            [186, 125,  54,  70]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  3,   2,   1,   2],
            [201, 152,  81, 111]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         ...,
 
 
 
         [[[[  0,   0,   0,   2],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   3],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   5],
            [  0,   0,   0,   2],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   1,  65],
            [  0,   0,   1, 111],
            [  0,   0,   1, 113],
            [  0,   0,   2, 159]],
 
           [[  0,   0,   1,  65],
            [  0,   0,   1, 136],
            [  0,   0,   2, 149],
            [  0,   0,   3, 177]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   5],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   7],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   7],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   1,  84],
            [  0,   0,   1, 162],
            [  0,   0,   2, 169],
            [  0,   0,   4, 172]],
 
           [[  0,   0,   1,  87],
            [  0,   0,   1, 175],
            [  0,   0,   3, 189],
            [  0,   0,   6, 201]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   8],
            [  0,   0,   0,   4],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   8],
            [  0,   0,   0,   4],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   8],
            [  0,   0,   0,   4],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   1, 120],
            [  0,   0,   2, 199],
            [  0,   0,   3, 207],
            [  0,   0,   6, 204]],
 
           [[  0,   0,   1,  89],
            [  0,   0,   1, 178],
            [  0,   0,   3, 202],
            [  0,   0,   7, 217]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  1,  35, 202, 254],
            [ 26, 219, 247, 253],
            [166, 246, 245, 243],
            [232, 236, 203, 125]],
 
           [[  1,  46, 206, 254],
            [ 20, 215, 248, 253],
            [140, 244, 246, 248],
            [240, 241, 218, 190]],
 
           [[  2,  62, 220, 254],
            [ 27, 220, 250, 254],
            [132, 244, 248, 251],
            [242, 248, 239, 225]],
 
           ...,
 
           [[  5,  63, 229, 255],
            [ 50, 221, 252, 255],
            [190, 250, 254, 255],
            [254, 255, 255, 255]],
 
           [[  7,  64, 215, 255],
            [ 60, 221, 251, 255],
            [199, 251, 254, 255],
            [254, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  2,  60, 220, 254],
            [ 46, 234, 250, 254],
            [206, 250, 248, 246],
            [247, 248, 226, 158]],
 
           [[  2,  81, 229, 254],
            [ 39, 232, 251, 254],
            [181, 248, 249, 250],
            [248, 248, 232, 210]],
 
           [[  3,  97, 235, 255],
            [ 38, 233, 252, 254],
            [171, 249, 251, 253],
            [250, 252, 248, 242]],
 
           ...,
 
           [[  6,  71, 232, 255],
            [ 60, 226, 253, 255],
            [212, 252, 255, 255],
            [254, 255, 255, 255]],
 
           [[  6,  64, 224, 255],
            [ 58, 221, 252, 255],
            [212, 252, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[  0,   0,   0,  10],
            [  0,   0,   0,   5],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  10],
            [  0,   0,   0,   5],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   9],
            [  0,   0,   0,   4],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   2, 148],
            [  0,   0,   2, 190],
            [  0,   0,   3, 181],
            [  0,   0,   4, 199]],
 
           [[  0,   0,   1, 122],
            [  0,   0,   2, 187],
            [  0,   0,   3, 192],
            [  0,   0,   6, 210]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,  17],
            [  0,   0,   0,   7],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  14],
            [  0,   0,   0,   7],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  17],
            [  0,   0,   0,   8],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   2, 164],
            [  0,   0,   3, 211],
            [  0,   0,   4, 209],
            [  0,   0,   6, 209]],
 
           [[  0,   0,   2, 152],
            [  0,   0,   3, 217],
            [  0,   0,   5, 220],
            [  0,   1,  10, 223]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,  34],
            [  0,   0,   0,  13],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  29],
            [  0,   0,   0,  12],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  36],
            [  0,   0,   0,  15],
            [  0,   0,   0,   2],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   2, 178],
            [  0,   0,   4, 230],
            [  0,   0,   6, 230],
            [  0,   1,   9, 223]],
 
           [[  0,   0,   3, 187],
            [  0,   0,   5, 235],
            [  0,   1,   8, 236],
            [  0,   1,  13, 232]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  1,  51, 226, 254],
            [ 34, 233, 252, 254],
            [170, 249, 250, 250],
            [235, 240, 218, 161]],
 
           [[  1,  58, 226, 254],
            [ 25, 228, 251, 254],
            [146, 247, 250, 252],
            [238, 243, 230, 212]],
 
           [[  1,  71, 236, 255],
            [ 27, 233, 253, 255],
            [140, 248, 251, 253],
            [242, 247, 238, 228]],
 
           ...,
 
           [[  7,  98, 245, 255],
            [ 65, 237, 254, 255],
            [198, 252, 255, 255],
            [254, 255, 255, 255]],
 
           [[  6,  88, 243, 255],
            [ 54, 233, 254, 255],
            [192, 252, 255, 255],
            [254, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  2,  73, 235, 255],
            [ 54, 241, 253, 255],
            [200, 251, 251, 251],
            [247, 249, 235, 192]],
 
           [[  3,  96, 240, 255],
            [ 48, 240, 253, 255],
            [183, 250, 251, 253],
            [248, 249, 240, 225]],
 
           [[  2, 100, 242, 255],
            [ 41, 239, 253, 255],
            [170, 250, 252, 253],
            [250, 251, 245, 239]],
 
           ...,
 
           [[  9,  98, 244, 255],
            [ 82, 239, 254, 255],
            [225, 253, 255, 255],
            [255, 255, 255, 255]],
 
           [[ 10, 105, 245, 255],
            [ 83, 239, 254, 255],
            [224, 253, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]]],
 
 
 
 
        [[[[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 11,   3,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 10,   3,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 12,   4,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  2,   1,   1,   1],
            [140, 131,  77,  59]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   1,   1],
            [139, 130,  92,  90]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   0,   0,   0],
            [ 19,   5,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   0,   0,   0],
            [ 23,   7,   1,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   0],
            [ 35,  11,   1,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  4,   2,   1,   1],
            [208, 183,  91,  68]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  3,   2,   1,   1],
            [187, 169, 106, 101]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 13,   3,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 10,   3,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 12,   4,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  2,   1,   1,   1],
            [162, 145,  94, 100]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  2,   1,   1,   2],
            [165, 160, 113, 120]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   0,   0,   0],
            [ 25,   6,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   0,   0,   0],
            [ 34,   8,   1,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   0,   0,   0],
            [ 48,  12,   1,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  4,   2,   1,   1],
            [214, 176,  91, 101]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  4,   2,   1,   2],
            [210, 169,  93, 121]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 15,   4,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 17,   4,   0,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 18,   5,   0,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  3,   2,   1,   2],
            [199, 156,  87, 109]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  4,   2,   1,   3],
            [207, 171, 102, 131]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   0],
            [ 39,  10,   1,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   0],
            [ 34,   9,   1,   0]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [  1,   1,   0,   0],
            [ 59,  17,   1,   0]],
 
           ...,
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 10,   4,   1,   3],
            [235, 198, 121, 156]],
 
           [[  0,   0,   0,   0],
            [  0,   0,   0,   0],
            [ 12,   5,   2,   5],
            [237, 206, 136, 173]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         ...,
 
 
 
         [[[[  0,   0,   0,   5],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   6],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,   7],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   1,  94],
            [  0,   0,   1, 132],
            [  0,   0,   2, 126],
            [  0,   0,   3, 171]],
 
           [[  0,   0,   1,  97],
            [  0,   0,   1, 155],
            [  0,   0,   2, 156],
            [  0,   0,   4, 190]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,   8],
            [  0,   0,   0,   5],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  10],
            [  0,   0,   0,   6],
            [  0,   0,   0,   0],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  14],
            [  0,   0,   0,   7],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   1, 120],
            [  0,   0,   2, 186],
            [  0,   0,   4, 190],
            [  0,   0,   6, 203]],
 
           [[  0,   0,   2, 154],
            [  0,   0,   3, 216],
            [  0,   0,   6, 220],
            [  0,   1,  11, 224]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   0,  18],
            [  0,   0,   0,   9],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  21],
            [  0,   0,   0,   9],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  18],
            [  0,   0,   0,   9],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   2, 152],
            [  0,   0,   3, 218],
            [  0,   0,   6, 220],
            [  0,   1,  11, 220]],
 
           [[  0,   0,   3, 180],
            [  0,   0,   4, 230],
            [  0,   1,   9, 233],
            [  0,   1,  20, 236]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  2,  77, 232, 254],
            [ 58, 240, 252, 254],
            [207, 251, 250, 248],
            [243, 245, 219, 139]],
 
           [[  3,  79, 235, 254],
            [ 62, 243, 253, 254],
            [206, 251, 251, 251],
            [246, 248, 233, 185]],
 
           [[  3,  98, 239, 255],
            [ 53, 240, 253, 255],
            [187, 250, 251, 252],
            [247, 249, 238, 223]],
 
           ...,
 
           [[ 10, 105, 244, 255],
            [ 83, 239, 254, 255],
            [222, 253, 255, 255],
            [255, 255, 255, 255]],
 
           [[  8,  77, 237, 255],
            [ 60, 227, 253, 255],
            [205, 252, 255, 255],
            [254, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  3, 107, 242, 255],
            [ 82, 244, 253, 254],
            [227, 252, 252, 250],
            [250, 250, 239, 188]],
 
           [[  4, 114, 243, 255],
            [ 92, 246, 253, 255],
            [230, 253, 252, 251],
            [252, 252, 242, 206]],
 
           [[  4, 115, 245, 255],
            [ 80, 246, 254, 255],
            [221, 252, 252, 253],
            [252, 253, 247, 230]],
 
           ...,
 
           [[ 16, 129, 246, 255],
            [122, 245, 254, 255],
            [236, 254, 255, 255],
            [255, 255, 255, 255]],
 
           [[ 12,  99, 241, 255],
            [ 92, 238, 254, 255],
            [226, 253, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[  0,   0,   1,  30],
            [  0,   0,   1,  14],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  22],
            [  0,   0,   1,  11],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  21],
            [  0,   0,   0,  10],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   4, 203],
            [  0,   0,   4, 216],
            [  0,   0,   5, 194],
            [  0,   0,   6, 208]],
 
           [[  0,   0,   4, 186],
            [  0,   0,   4, 218],
            [  0,   0,   6, 216],
            [  0,   1,  11, 228]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   1,  32],
            [  0,   0,   0,  14],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  41],
            [  0,   0,   0,  19],
            [  0,   0,   0,   1],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   0,  40],
            [  0,   0,   0,  18],
            [  0,   0,   0,   2],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   4, 202],
            [  0,   0,   6, 231],
            [  0,   0,   8, 224],
            [  0,   1,  10, 226]],
 
           [[  0,   0,   5, 203],
            [  0,   0,   6, 232],
            [  0,   1,  10, 232],
            [  0,   1,  19, 238]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  0,   0,   1,  60],
            [  0,   0,   1,  26],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   1,  55],
            [  0,   0,   1,  24],
            [  0,   0,   0,   2],
            [  0,   0,   0,   0]],
 
           [[  0,   0,   1,  59],
            [  0,   0,   1,  27],
            [  0,   0,   0,   3],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[  0,   0,   5, 214],
            [  0,   0,   9, 240],
            [  0,   1,  12, 237],
            [  0,   1,  15, 236]],
 
           [[  0,   1,   9, 233],
            [  0,   1,  14, 248],
            [  0,   2,  23, 247],
            [  0,   3,  42, 247]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[  3, 103, 243, 255],
            [ 75, 246, 254, 255],
            [211, 252, 252, 252],
            [244, 247, 231, 175]],
 
           [[  3, 104, 243, 255],
            [ 77, 246, 254, 255],
            [211, 252, 252, 252],
            [246, 249, 236, 191]],
 
           [[  3, 117, 245, 255],
            [ 70, 245, 254, 255],
            [203, 252, 253, 253],
            [248, 250, 243, 228]],
 
           ...,
 
           [[ 15, 149, 251, 255],
            [107, 246, 255, 255],
            [226, 254, 255, 255],
            [254, 255, 255, 255]],
 
           [[ 16, 147, 251, 255],
            [100, 245, 255, 255],
            [221, 254, 255, 255],
            [254, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[  6, 134, 249, 255],
            [ 99, 248, 254, 255],
            [227, 253, 253, 253],
            [251, 251, 245, 219]],
 
           [[  5, 135, 248, 255],
            [ 99, 249, 254, 255],
            [229, 253, 253, 254],
            [252, 252, 246, 226]],
 
           [[  5, 136, 249, 255],
            [ 97, 249, 254, 255],
            [226, 253, 253, 254],
            [252, 253, 249, 238]],
 
           ...,
 
           [[ 22, 155, 250, 255],
            [140, 248, 255, 255],
            [237, 254, 255, 255],
            [255, 255, 255, 255]],
 
           [[ 23, 156, 250, 255],
            [135, 248, 255, 255],
            [234, 254, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]]],
 
 
 
 
        ...,
 
 
 
 
        [[[[[215, 152,  14,   0],
            [165,  41,   3,   0],
            [ 24,   4,   0,   0],
            [  1,   0,   0,   0]],
 
           [[215, 138,  12,   0],
            [160,  31,   2,   0],
            [ 19,   3,   0,   0],
            [  0,   0,   0,   0]],
 
           [[228, 139,  10,   0],
            [178,  34,   2,   0],
            [ 19,   3,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[242,  80,   5,   0],
            [167,  11,   1,   1],
            [ 35,   5,   1,   1],
            [  5,   5,   3,   5]],
 
           [[242,  75,   4,   0],
            [152,  12,   1,   0],
            [ 22,   4,   1,   1],
            [  5,   6,   5,   7]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[231, 159,  13,   0],
            [210,  60,   3,   0],
            [ 61,   7,   0,   0],
            [  2,   0,   0,   0]],
 
           [[229, 166,  17,   0],
            [195,  53,   4,   0],
            [ 41,   4,   0,   0],
            [  2,   0,   0,   0]],
 
           [[236, 168,  15,   0],
            [207,  53,   3,   0],
            [ 40,   4,   0,   0],
            [  1,   0,   0,   0]],
 
           ...,
 
           [[245, 105,   7,   0],
            [191,  19,   2,   1],
            [ 56,  10,   2,   2],
            [ 10,  11,   6,   9]],
 
           [[245,  99,   6,   0],
            [176,  20,   2,   1],
            [ 34,   8,   2,   1],
            [ 10,  13,  10,  11]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[237, 171,  15,   0],
            [228,  83,   4,   0],
            [107,  14,   1,   0],
            [  6,   1,   0,   0]],
 
           [[241, 172,  15,   0],
            [231,  82,   4,   0],
            [102,  13,   1,   0],
            [  5,   1,   0,   0]],
 
           [[244, 200,  25,   0],
            [229,  92,   6,   0],
            [ 82,  10,   1,   0],
            [  3,   1,   0,   0]],
 
           ...,
 
           [[247, 131,  12,   1],
            [228,  64,   6,   2],
            [146,  46,   8,   4],
            [ 47,  49,  19,  17]],
 
           [[250, 139,  12,   1],
            [218,  44,   4,   1],
            [ 83,  21,   6,   2],
            [ 30,  38,  24,  22]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 243,  41],
            [255, 255, 246,  47],
            [255, 255, 241,  22],
            [255, 255, 239,   8]],
 
           [[255, 255, 243,  40],
            [255, 255, 246,  47],
            [255, 255, 241,  25],
            [255, 255, 242,  11]],
 
           [[255, 255, 239,  27],
            [255, 255, 242,  52],
            [255, 255, 242,  43],
            [255, 255, 246,  26]],
 
           ...,
 
           [[255, 255, 246, 109],
            [255, 255, 250, 223],
            [255, 255, 254, 252],
            [255, 255, 255, 255]],
 
           [[255, 255, 247, 143],
            [255, 255, 252, 240],
            [255, 255, 255, 254],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 248,  68],
            [255, 255, 249,  74],
            [255, 255, 247,  41],
            [255, 255, 246,  15]],
 
           [[255, 255, 248,  71],
            [255, 255, 249,  80],
            [255, 255, 247,  48],
            [255, 255, 248,  22]],
 
           [[255, 255, 249,  81],
            [255, 255, 250,  95],
            [255, 255, 248,  66],
            [255, 255, 250,  38]],
 
           ...,
 
           [[255, 255, 249, 137],
            [255, 255, 252, 233],
            [255, 255, 255, 253],
            [255, 255, 255, 255]],
 
           [[255, 255, 249, 164],
            [255, 255, 252, 241],
            [255, 255, 255, 254],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[230, 159,  16,   0],
            [194,  48,   3,   0],
            [ 33,   5,   0,   0],
            [  0,   0,   0,   0]],
 
           [[231, 169,  18,   0],
            [173,  43,   3,   0],
            [ 26,   5,   0,   0],
            [  0,   0,   0,   0]],
 
           [[238, 181,  20,   0],
            [188,  47,   3,   0],
            [ 29,   5,   0,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[245, 113,  11,   1],
            [171,  18,   2,   1],
            [ 30,   6,   2,   1],
            [  4,   5,   4,   6]],
 
           [[246, 108,   9,   1],
            [168,  17,   2,   1],
            [ 24,   5,   2,   1],
            [  5,   5,   5,   9]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[239, 189,  28,   0],
            [220,  77,   6,   0],
            [ 64,  10,   1,   0],
            [  1,   0,   0,   0]],
 
           [[240, 186,  25,   0],
            [220,  72,   5,   0],
            [ 62,  10,   1,   0],
            [  1,   0,   0,   0]],
 
           [[244, 209,  36,   0],
            [221,  88,   7,   0],
            [ 59,  10,   1,   0],
            [  1,   0,   0,   0]],
 
           ...,
 
           [[247, 125,  13,   1],
            [199,  31,   3,   1],
            [ 60,  15,   4,   2],
            [ 11,  14,  10,  12]],
 
           [[248, 112,   9,   1],
            [190,  25,   3,   1],
            [ 40,   9,   3,   2],
            [ 11,  13,   9,  14]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[244, 197,  26,   0],
            [234,  98,   9,   0],
            [121,  18,   1,   0],
            [  7,   1,   0,   0]],
 
           [[246, 212,  38,   0],
            [238, 116,  10,   0],
            [125,  18,   1,   0],
            [  6,   1,   0,   0]],
 
           [[249, 214,  36,   0],
            [242, 121,  10,   0],
            [117,  16,   1,   0],
            [  4,   1,   0,   0]],
 
           ...,
 
           [[248, 157,  24,   1],
            [228,  84,  10,   2],
            [138,  51,  12,   4],
            [ 44,  48,  28,  25]],
 
           [[250, 157,  22,   1],
            [224,  72,   9,   2],
            [105,  35,   9,   4],
            [ 38,  45,  29,  33]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 249,  86],
            [255, 255, 250,  93],
            [255, 255, 247,  47],
            [255, 255, 246,  16]],
 
           [[255, 255, 250, 102],
            [255, 255, 251, 110],
            [255, 255, 249,  62],
            [255, 255, 248,  25]],
 
           [[255, 255, 251, 101],
            [255, 255, 251, 110],
            [255, 255, 249,  75],
            [255, 255, 250,  50]],
 
           ...,
 
           [[255, 255, 252, 185],
            [255, 255, 254, 246],
            [255, 255, 255, 254],
            [255, 255, 255, 255]],
 
           [[255, 255, 252, 205],
            [255, 255, 254, 249],
            [255, 255, 255, 254],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 252, 140],
            [255, 255, 252, 148],
            [255, 255, 251,  87],
            [255, 255, 250,  30]],
 
           [[255, 255, 252, 135],
            [255, 255, 253, 149],
            [255, 255, 252,  97],
            [255, 255, 252,  43]],
 
           [[255, 255, 253, 152],
            [255, 255, 253, 165],
            [255, 255, 252, 118],
            [255, 255, 253,  67]],
 
           ...,
 
           [[255, 255, 253, 216],
            [255, 255, 254, 250],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 253, 230],
            [255, 255, 254, 250],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[242, 190,  27,   1],
            [212,  67,   5,   0],
            [ 55,  10,   1,   0],
            [  1,   0,   0,   0]],
 
           [[244, 201,  32,   0],
            [219,  79,   6,   0],
            [ 55,  10,   1,   0],
            [  1,   0,   0,   0]],
 
           [[243, 204,  32,   0],
            [207,  70,   5,   0],
            [ 43,   8,   1,   0],
            [  0,   0,   0,   0]],
 
           ...,
 
           [[247, 138,  18,   2],
            [180,  23,   3,   2],
            [ 31,   7,   3,   2],
            [  3,   5,   5,   8]],
 
           [[246, 123,  15,   2],
            [173,  23,   3,   2],
            [ 24,   6,   2,   2],
            [  4,   5,   5,   9]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[247, 216,  43,   1],
            [234, 108,   9,   0],
            [112,  23,   1,   0],
            [  3,   1,   0,   0]],
 
           [[248, 219,  46,   1],
            [229,  99,   8,   0],
            [ 83,  16,   1,   0],
            [  1,   1,   0,   0]],
 
           [[249, 219,  43,   1],
            [234, 102,   8,   0],
            [ 84,  16,   1,   0],
            [  1,   0,   0,   0]],
 
           ...,
 
           [[249, 169,  31,   3],
            [212,  53,   7,   3],
            [ 61,  18,   6,   4],
            [  7,  11,  11,  19]],
 
           [[251, 164,  28,   3],
            [213,  46,   8,   4],
            [ 58,  15,   6,   4],
            [ 14,  17,  16,  29]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[249, 224,  55,   1],
            [241, 130,  15,   1],
            [145,  37,   2,   0],
            [  7,   2,   0,   0]],
 
           [[249, 230,  68,   1],
            [242, 144,  16,   0],
            [131,  29,   2,   0],
            [  4,   1,   0,   0]],
 
           [[251, 233,  66,   1],
            [245, 145,  14,   0],
            [130,  29,   2,   0],
            [  3,   1,   0,   0]],
 
           ...,
 
           [[250, 179,  43,   3],
            [229,  94,  16,   4],
            [127,  52,  17,   8],
            [ 34,  43,  33,  40]],
 
           [[250, 177,  37,   3],
            [228,  95,  16,   4],
            [100,  39,  13,   7],
            [ 28,  39,  31,  45]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 253, 184],
            [255, 255, 253, 184],
            [255, 255, 252, 108],
            [255, 255, 250,  35]],
 
           [[255, 255, 253, 168],
            [255, 255, 253, 177],
            [255, 255, 252, 113],
            [255, 255, 251,  44]],
 
           [[255, 255, 254, 170],
            [255, 255, 254, 182],
            [255, 255, 252, 133],
            [255, 255, 252,  78]],
 
           ...,
 
           [[255, 255, 254, 243],
            [255, 255, 255, 253],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 248],
            [255, 255, 255, 254],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 254, 201],
            [255, 255, 254, 204],
            [255, 255, 253, 140],
            [255, 255, 252,  57]],
 
           [[255, 255, 254, 204],
            [255, 255, 254, 210],
            [255, 255, 253, 162],
            [255, 255, 253,  85]],
 
           [[255, 255, 254, 195],
            [255, 255, 254, 207],
            [255, 255, 254, 168],
            [255, 255, 254, 101]],
 
           ...,
 
           [[255, 255, 255, 246],
            [255, 255, 255, 253],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 250],
            [255, 255, 255, 254],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         ...,
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 255, 254, 253],
            [208, 192, 124,  71]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 254, 254, 253],
            [194, 173, 113,  76]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 254, 254, 254],
            [174, 157, 112, 106]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [252, 254, 255, 255],
            [151, 242, 254, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [252, 254, 255, 255],
            [182, 248, 254, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 254, 254],
            [239, 227, 168, 119]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 254],
            [234, 221, 175, 146]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 254],
            [234, 223, 182, 163]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 255, 255, 255],
            [216, 252, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 255, 255, 255],
            [238, 253, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [248, 242, 200, 141]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [249, 244, 217, 187]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [249, 246, 229, 214]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [248, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [250, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 254]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 254, 254],
            [228, 212, 153, 114]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 255, 254, 254],
            [223, 214, 171, 141]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 254, 254, 254],
            [196, 198, 162, 153]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [252, 254, 255, 255],
            [182, 249, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [252, 255, 255, 255],
            [189, 249, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [244, 233, 186, 153]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [242, 239, 213, 189]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [242, 239, 218, 203]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 255, 255, 255],
            [229, 253, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 255, 255, 255],
            [239, 254, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [249, 246, 221, 185]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [250, 247, 224, 194]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [251, 250, 237, 222]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [251, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [251, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]]],
 
 
 
 
        [[[[[241, 195,  30,   0],
            [222,  79,   6,   0],
            [ 63,  10,   1,   0],
            [  1,   0,   0,   0]],
 
           [[244, 212,  40,   0],
            [223,  94,   7,   0],
            [ 60,  11,   1,   0],
            [  1,   0,   0,   0]],
 
           [[247, 204,  28,   0],
            [222,  81,   5,   0],
            [ 55,  10,   1,   0],
            [  1,   0,   0,   0]],
 
           ...,
 
           [[246, 141,  19,   1],
            [216,  59,   8,   2],
            [103,  37,  11,   4],
            [ 18,  27,  21,  19]],
 
           [[249, 148,  17,   1],
            [212,  44,   4,   1],
            [ 78,  19,   5,   2],
            [ 13,  16,  12,  15]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[246, 213,  38,   0],
            [238, 115,  10,   0],
            [120,  16,   1,   0],
            [  5,   1,   0,   0]],
 
           [[249, 217,  38,   0],
            [242, 120,  10,   0],
            [115,  15,   1,   0],
            [  3,   1,   0,   0]],
 
           [[249, 220,  41,   0],
            [239, 120,  10,   0],
            [100,  14,   1,   0],
            [  3,   1,   0,   0]],
 
           ...,
 
           [[248, 152,  24,   1],
            [227,  69,  10,   2],
            [133,  48,  16,   5],
            [ 33,  45,  36,  29]],
 
           [[249, 165,  26,   1],
            [229,  84,  10,   2],
            [136,  48,  12,   4],
            [ 38,  44,  27,  27]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[248, 220,  44,   0],
            [244, 140,  13,   0],
            [158,  26,   1,   0],
            [ 10,   2,   0,   0]],
 
           [[251, 225,  43,   0],
            [247, 150,  13,   0],
            [157,  26,   1,   0],
            [  7,   2,   0,   0]],
 
           [[251, 224,  39,   0],
            [247, 142,  11,   0],
            [149,  22,   1,   0],
            [  6,   2,   0,   0]],
 
           ...,
 
           [[253, 214,  59,   2],
            [247, 144,  33,   8],
            [204, 107,  38,  17],
            [ 93, 113,  73,  59]],
 
           [[253, 210,  55,   2],
            [245, 133,  23,   5],
            [197,  87,  25,  10],
            [ 97, 101,  64,  59]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 250,  73],
            [255, 255, 250,  75],
            [255, 255, 246,  38],
            [255, 255, 244,  18]],
 
           [[255, 255, 250,  68],
            [255, 255, 250,  75],
            [255, 255, 247,  47],
            [255, 255, 247,  29]],
 
           [[255, 255, 247,  43],
            [255, 255, 248,  72],
            [255, 255, 247,  64],
            [255, 255, 249,  44]],
 
           ...,
 
           [[255, 255, 252, 167],
            [255, 255, 254, 244],
            [255, 255, 255, 254],
            [255, 255, 255, 255]],
 
           [[255, 255, 252, 181],
            [255, 255, 254, 247],
            [255, 255, 255, 254],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 251, 108],
            [255, 255, 251, 113],
            [255, 255, 249,  63],
            [255, 255, 249,  24]],
 
           [[255, 255, 252, 107],
            [255, 255, 252, 113],
            [255, 255, 250,  75],
            [255, 255, 250,  48]],
 
           [[255, 255, 251,  86],
            [255, 255, 251, 100],
            [255, 255, 249,  80],
            [255, 255, 251,  67]],
 
           ...,
 
           [[255, 255, 253, 194],
            [255, 255, 254, 247],
            [255, 255, 255, 254],
            [255, 255, 255, 255]],
 
           [[255, 255, 253, 199],
            [255, 255, 254, 249],
            [255, 255, 255, 254],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[248, 219,  44,   1],
            [229,  96,   8,   0],
            [ 78,  15,   1,   0],
            [  1,   0,   0,   0]],
 
           [[250, 221,  44,   1],
            [235, 103,   8,   0],
            [ 83,  15,   1,   0],
            [  1,   0,   0,   0]],
 
           [[249, 222,  48,   1],
            [227,  97,   8,   0],
            [ 67,  12,   1,   0],
            [  1,   0,   0,   0]],
 
           ...,
 
           [[249, 180,  43,   3],
            [225,  78,  12,   3],
            [108,  35,  12,   5],
            [ 15,  20,  18,  21]],
 
           [[249, 182,  40,   3],
            [220,  76,  11,   3],
            [ 85,  28,   9,   5],
            [ 11,  16,  15,  25]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[249, 229,  64,   1],
            [242, 139,  14,   0],
            [123,  25,   1,   0],
            [  3,   1,   0,   0]],
 
           [[251, 233,  66,   1],
            [245, 144,  14,   0],
            [124,  25,   2,   0],
            [  2,   1,   0,   0]],
 
           [[252, 229,  53,   1],
            [245, 132,  10,   0],
            [134,  26,   1,   0],
            [  2,   1,   0,   0]],
 
           ...,
 
           [[251, 184,  48,   3],
            [234,  90,  15,   3],
            [140,  49,  18,   6],
            [ 32,  38,  34,  33]],
 
           [[251, 189,  47,   3],
            [231,  98,  16,   4],
            [131,  51,  17,   7],
            [ 32,  41,  32,  39]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[251, 233,  66,   1],
            [246, 155,  20,   0],
            [164,  45,   3,   0],
            [  9,   3,   0,   0]],
 
           [[252, 235,  72,   1],
            [248, 166,  19,   0],
            [161,  36,   2,   0],
            [  6,   2,   0,   0]],
 
           [[253, 238,  73,   1],
            [251, 174,  20,   1],
            [177,  39,   3,   0],
            [  7,   2,   0,   0]],
 
           ...,
 
           [[253, 216,  73,   4],
            [245, 143,  42,  12],
            [189, 105,  51,  27],
            [ 86, 115,  97,  91]],
 
           [[253, 212,  67,   4],
            [245, 137,  31,   8],
            [195,  95,  35,  17],
            [104, 113,  86,  91]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 252, 124],
            [255, 255, 252, 128],
            [255, 255, 250,  75],
            [255, 255, 249,  35]],
 
           [[255, 255, 253, 135],
            [255, 255, 253, 141],
            [255, 255, 251,  93],
            [255, 255, 250,  53]],
 
           [[255, 255, 253, 131],
            [255, 255, 253, 140],
            [255, 255, 251, 105],
            [255, 255, 252,  75]],
 
           ...,
 
           [[255, 255, 255, 240],
            [255, 255, 255, 253],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 254, 237],
            [255, 255, 255, 253],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 253, 166],
            [255, 255, 253, 173],
            [255, 255, 252, 109],
            [255, 255, 251,  40]],
 
           [[255, 255, 254, 170],
            [255, 255, 254, 179],
            [255, 255, 253, 127],
            [255, 255, 252,  70]],
 
           [[255, 255, 254, 172],
            [255, 255, 254, 180],
            [255, 255, 253, 137],
            [255, 255, 253,  97]],
 
           ...,
 
           [[255, 255, 255, 247],
            [255, 255, 255, 254],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 245],
            [255, 255, 255, 254],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[251, 235,  77,   1],
            [240, 132,  14,   0],
            [114,  26,   2,   0],
            [  2,   1,   0,   0]],
 
           [[252, 235,  74,   1],
            [241, 135,  14,   0],
            [105,  22,   2,   0],
            [  1,   0,   0,   0]],
 
           [[252, 231,  58,   1],
            [242, 119,   9,   0],
            [111,  18,   1,   0],
            [  1,   0,   0,   0]],
 
           ...,
 
           [[250, 195,  69,   7],
            [224,  80,  17,   6],
            [ 88,  28,  12,   7],
            [ 11,  14,  16,  25]],
 
           [[250, 182,  50,   6],
            [221,  76,  14,   6],
            [ 81,  27,  11,   7],
            [ 10,  14,  16,  30]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[252, 240,  95,   2],
            [244, 154,  18,   1],
            [141,  37,   2,   0],
            [  3,   1,   0,   0]],
 
           [[253, 241,  97,   2],
            [246, 162,  20,   1],
            [134,  33,   2,   0],
            [  2,   1,   0,   0]],
 
           [[253, 243, 104,   2],
            [249, 169,  21,   1],
            [156,  38,   3,   0],
            [  3,   1,   0,   0]],
 
           ...,
 
           [[253, 218,  99,  11],
            [242, 127,  35,  13],
            [161,  68,  32,  20],
            [ 38,  52,  55,  72]],
 
           [[252, 206,  79,   8],
            [234, 111,  27,   9],
            [126,  53,  23,  13],
            [ 29,  38,  38,  59]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[254, 247, 134,   5],
            [251, 198,  39,   1],
            [204,  81,   6,   0],
            [ 16,   4,   0,   0]],
 
           [[253, 244, 112,   3],
            [251, 189,  30,   1],
            [186,  58,   4,   0],
            [  6,   2,   0,   0]],
 
           [[254, 245, 113,   3],
            [251, 190,  29,   1],
            [191,  63,   5,   0],
            [  6,   2,   0,   0]],
 
           ...,
 
           [[254, 232, 127,  14],
            [248, 167,  62,  23],
            [200, 112,  58,  36],
            [ 92, 108,  98, 107]],
 
           [[254, 230, 116,  12],
            [247, 164,  55,  20],
            [201, 116,  58,  37],
            [106, 125, 112, 130]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 254, 182],
            [255, 255, 254, 190],
            [255, 255, 252, 126],
            [255, 255, 251,  58]],
 
           [[255, 255, 254, 187],
            [255, 255, 254, 202],
            [255, 255, 253, 154],
            [255, 255, 253,  88]],
 
           [[255, 255, 254, 194],
            [255, 255, 254, 206],
            [255, 255, 253, 163],
            [255, 255, 253, 108]],
 
           ...,
 
           [[255, 255, 255, 253],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 253],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 254, 216],
            [255, 255, 254, 214],
            [255, 255, 254, 156],
            [255, 255, 253,  75]],
 
           [[255, 255, 254, 211],
            [255, 255, 254, 219],
            [255, 255, 254, 179],
            [255, 255, 254, 117]],
 
           [[255, 255, 255, 200],
            [255, 255, 254, 195],
            [255, 255, 253, 158],
            [255, 255, 254, 124]],
 
           ...,
 
           [[255, 255, 255, 253],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 254],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         ...,
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 254],
            [235, 224, 165, 113]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 254],
            [230, 217, 163, 130]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 254],
            [212, 199, 160, 164]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 255, 255, 255],
            [217, 251, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 255, 255, 255],
            [218, 252, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [247, 242, 205, 153]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [248, 243, 211, 178]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [246, 242, 215, 196]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [248, 254, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [249, 254, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [252, 250, 232, 199]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [252, 250, 235, 217]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [252, 251, 237, 220]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [253, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [253, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 254],
            [239, 226, 180, 149]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [238, 229, 191, 170]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [231, 232, 211, 207]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 255, 255, 255],
            [229, 253, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [254, 255, 255, 255],
            [228, 253, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [249, 245, 218, 188]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [249, 247, 231, 215]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [250, 248, 235, 224]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [248, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [249, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [252, 249, 229, 198]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [253, 251, 243, 227]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [253, 252, 245, 234]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [253, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [253, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]]],
 
 
 
 
        [[[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         ...,
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]],
 
 
 
         [[[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          ...,
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]],
 
 
          [[[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           ...,
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]],
 
           [[255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255],
            [255, 255, 255, 255]]]]]], dtype=uint8),
 'quantization_interval': 16}
In [ ]:
f, a = plt.subplots(2,1, figsize=(25, 9/2))
lut1 = state_dict['stage1_lut']
# a[0].imshow(lut1)
a[1].imshow(np.transpose(state_dict['stage1_dense_upscale_lut'].reshape(17**2, 17*17*16)))
pcm = a[0].pcolormesh(lut1)
f.colorbar(pcm, ax=a, location='right')
f.suptitle("Stage 1, rc_conv")
a[0].set_title(f"{int(np.sqrt(lut1.shape[0]))}x{int(np.sqrt(lut1.shape[0]))}")
# a[1].set_title(f"stage1_dense_upscale_lut")
Out[ ]:
Text(0.5, 1.0, '5x5')
In [ ]:
from einops import rearrange

f, a = plt.subplots(1,1, figsize=(9*5, 9*5))
gg = state_dict['stage1_dense_upscale_lut'].reshape(17**4, 4, 4)
gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17)
a.imshow(gg)
In [ ]:
luts = np.load("/wd/luts/models/dense_block/luts/RCLutTest_200000_x4_4.0bit_int8.npz", allow_pickle=True)
state_dict = luts['state_dict'].item()
from einops import rearrange

f, a = plt.subplots(1,1, figsize=(9*5, 9*5))
gg = state_dict['stage1_dense_upscale_lut'].reshape(17**4, 4, 4)
gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17)
a.imshow(gg)
In [ ]:
luts = np.load("/wd/luts/models/dense_block_cascade/luts/RCLutTest_010000_x4_4.0bit_int8.npz", allow_pickle=True)
state_dict = luts['state_dict'].item()
from einops import rearrange

f, a = plt.subplots(1,1, figsize=(9*5, 9*5))
gg = state_dict['stage1_dense_upscale_lut'].reshape(17**4, 1, 1)
gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17)
a.imshow(gg)
In [ ]:
f, a = plt.subplots(1,1, figsize=(9*5, 9*5))
gg = state_dict['stage2_dense_upscale_lut'].reshape(17**4, 4, 4)
gg = rearrange(gg, '(b1 b2) h w -> (b2 h) (b1 w) ', b1=17*17, b2=17*17)
a.imshow(gg)
In [ ]:
f, a = plt.subplots(3,1, figsize=(25/2, 9/2))
lut1 = np.load("LUT_x4_8.0bit_int8_stage1_3x3_rc_conv.npy")
lut2 = np.load("LUT_x4_8.0bit_int8_stage1_5x5_rc_conv.npy")
lut3 = np.load("LUT_x4_8.0bit_int8_stage1_7x7_rc_conv.npy")
a[0].imshow(lut1)
a[1].imshow(lut2)
a[2].imshow(lut3)
pcm = a[0].pcolormesh(lut1)
f.colorbar(pcm, ax=a, location='right')
f.suptitle("Stage 1, rc_conv")
a[0].set_title("3x3")
a[1].set_title("5x5")
a[2].set_title("7x7")
Out[ ]:
Text(0.5, 1.0, '7x7')
In [ ]:
f, a = plt.subplots(3,1, figsize=(25/2, 9/2))
lut1 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage1_3x3_dense_upscale_lut.npy"))
lut2 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage1_5x5_dense_upscale_lut.npy"))
lut3 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage1_7x7_dense_upscale_lut.npy"))
a[0].imshow(lut1)
a[1].imshow(lut2)
a[2].imshow(lut3)
pcm = a[0].pcolormesh(lut1)
f.colorbar(pcm, ax=a, location='right')
f.suptitle("Stage 1, dense_upscale_lut")
a[0].set_title("3x3")
a[1].set_title("5x5")
a[2].set_title("7x7")
Out[ ]:
Text(0.5, 1.0, '7x7')
In [ ]:
f, a = plt.subplots(3,1, figsize=(25/2, 9/2))
lut1 = np.load("LUT_x4_8.0bit_int8_stage2_3x3_rc_conv.npy")
lut2 = np.load("LUT_x4_8.0bit_int8_stage2_5x5_rc_conv.npy")
lut3 = np.load("LUT_x4_8.0bit_int8_stage2_7x7_rc_conv.npy")
a[0].imshow(lut1)
a[1].imshow(lut2)
a[2].imshow(lut3)
pcm = a[0].pcolormesh(lut1)
f.colorbar(pcm, ax=a, location='right')
f.suptitle("Stage 2, rc_conv")
a[0].set_title("3x3")
a[1].set_title("5x5")
a[2].set_title("7x7")
Out[ ]:
Text(0.5, 1.0, '7x7')
In [ ]:
f, a = plt.subplots(3,1, figsize=(25/2, 9/2))
lut1 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_3x3_dense_upscale_lut.npy"))
lut2 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_5x5_dense_upscale_lut.npy"))
lut3 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_7x7_dense_upscale_lut.npy"))
a[0].imshow(lut1)
a[1].imshow(lut2)
a[2].imshow(lut3)
pcm = a[0].pcolormesh(lut1)
f.colorbar(pcm, ax=a, location='right')
f.suptitle("Stage 2, dense_upscale_lut")
a[0].set_title("3x3")
a[1].set_title("5x5")
a[2].set_title("7x7")
Out[ ]:
Text(0.5, 1.0, '7x7')
In [ ]:
f, a = plt.subplots(3,1, figsize=(25/2, 9/2))
lut1 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_3x3_dense_upscale_lut.npy"))
lut2 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_5x5_dense_upscale_lut.npy"))
lut3 = np.transpose(np.load("LUT_x4_8.0bit_int8_stage2_7x7_dense_upscale_lut.npy"))
a[1].imshow(lut2)
a[2].imshow(lut3)
pcm = a[0].pcolormesh(lut1)
f.colorbar(pcm, ax=a, location='right')
f.suptitle("Stage 2, dense_upscale_lut")
a[0].set_title("3x3")
a[1].set_title("5x5")
a[2].set_title("7x7")
# lut1[:, 100:150]
Out[ ]:
Text(0.5, 1.0, '7x7')
In [ ]:
import sys
sys.path.insert(0, "/wd/luts/src/")
from rclut.model import LoadRCLutCheckpoint, AVAILABLE_LUT_MODELS, RCLutx2, RCLutx1
from pathlib import Path
import torch
import numpy as np
import cv2
from PIL import Image

m = LoadRCLutCheckpoint("/wd/luts/models/RCNetx2TMP/RCLutx2_000000_x4_8.0bit_int8.npz")
image = cv2.imread("/wd/luts/data/Set5/LR_bicubic/X4/baby.png")[:,:,::-1]
# Image.fromarray(image)
m(torch.tensor(image.copy()).permute(2,0,1)[None,...])
torch.Size([3, 1, 126, 126])
torch.uint8 torch.Size([3, 1, 128, 128])
float64 (3, 1, 128, 128)
tensor(116.4444) tensor(138.5556)
tensor(116.) tensor(139.)
torch.float32 torch.Size([3, 1, 128, 128])
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
/wd/luts/models/RCNetx2TMP/explore.ipynb Cell 10 line 1
     <a href='vscode-notebook-cell://192.168.88.70:8400/wd/luts/models/RCNetx2TMP/explore.ipynb#X10sdnNjb2RlLXJlbW90ZQ%3D%3D?line=10'>11</a> image = cv2.imread("/wd/luts/data/Set5/LR_bicubic/X4/baby.png")[:,:,::-1]
     <a href='vscode-notebook-cell://192.168.88.70:8400/wd/luts/models/RCNetx2TMP/explore.ipynb#X10sdnNjb2RlLXJlbW90ZQ%3D%3D?line=11'>12</a> # Image.fromarray(image)
---> <a href='vscode-notebook-cell://192.168.88.70:8400/wd/luts/models/RCNetx2TMP/explore.ipynb#X10sdnNjb2RlLXJlbW90ZQ%3D%3D?line=12'>13</a> m(torch.tensor(image.copy()).permute(2,0,1)[None,...])

File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs)
   1509     return self._compiled_call_impl(*args, **kwargs)  # type: ignore[misc]
   1510 else:
-> 1511     return self._call_impl(*args, **kwargs)

File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs)
   1515 # If we don't have any hooks, we want to skip the rest of the logic in
   1516 # this function, and just call forward.
   1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
   1518         or _global_backward_pre_hooks or _global_backward_hooks
   1519         or _global_forward_hooks or _global_forward_pre_hooks):
-> 1520     return forward_call(*args, **kwargs)
   1522 try:
   1523     result = None

File /wd/luts/src/rclut/model.py:265, in RCLutx2.forward(self, x)
    263 for rotations_count in range(1,4+1):
    264     rotated = torch.rot90(x, k=rotations_count, dims=[2, 3])
--> 265     output_1 += torch.rot90(self.stage1_3x3_block_lut(rotated), k=-rotations_count, dims=[2, 3])
    266     output_1 += torch.rot90(self.stage1_5x5_block_lut(rotated), k=-rotations_count, dims=[2, 3])
    267     output_1 += torch.rot90(self.stage1_7x7_block_lut(rotated), k=-rotations_count, dims=[2, 3])

RuntimeError: The size of tensor a (126) must match the size of tensor b (128) at non-singleton dimension 3
In [ ]:
torch.tensor().repeat?
Object `repeat` not found.
In [ ]:
import numpy as np
import torch
weights = torch.tensor(np.tile(np.arange(255), 9*3).reshape(3, 9, 255)) +100
x = torch.rand((3,9,1))*255
x = x.round().type(torch.int64)

weights.shape, x.shape
Out[ ]:
(torch.Size([3, 9, 255]), torch.Size([3, 9, 1]))
In [ ]:
torch.gather(input=weights, dim=-1, index=x), x
Out[ ]:
(tensor([[[121],
          [212],
          [156],
          [227],
          [235],
          [201],
          [322],
          [208],
          [274]],
 
         [[119],
          [117],
          [232],
          [318],
          [183],
          [234],
          [324],
          [117],
          [166]],
 
         [[259],
          [179],
          [193],
          [176],
          [237],
          [131],
          [168],
          [233],
          [182]]]),
 tensor([[[ 21],
          [112],
          [ 56],
          [127],
          [135],
          [101],
          [222],
          [108],
          [174]],
 
         [[ 19],
          [ 17],
          [132],
          [218],
          [ 83],
          [134],
          [224],
          [ 17],
          [ 66]],
 
         [[159],
          [ 79],
          [ 93],
          [ 76],
          [137],
          [ 31],
          [ 68],
          [133],
          [ 82]]]))
In [ ]:
import torch

# Create a matrix
matrix = torch.randn(3, 4)

# Create a vector of indices
indices = torch.tensor([0, 2, 1])

# Extract elements from each row based on the indices
selected_elements = matrix[torch.arange(3)[:, None], indices]
selected_elements, matrix
Out[ ]:
(tensor([[-0.3433, -1.7434,  0.6454],
         [ 0.2597,  0.9045, -1.9901],
         [-1.0239, -1.8547,  0.1800]]),
 tensor([[-0.3433,  0.6454, -1.7434, -0.4747],
         [ 0.2597, -1.9901,  0.9045,  0.8336],
         [-1.0239,  0.1800, -1.8547, -0.5057]]))
In [ ]:
def f(x, w):
    print(x.shape, w.shape)
    return torch.index_select(w, 0, x)

bv = torch.vmap(f)
weights = torch.tensor(np.tile(np.arange(255), 9).reshape(9, 255))+100
x = torch.rand((9,3))*255
x = x.round().type(torch.int64)
bv(x, weights), x, weights
torch.Size([3]) torch.Size([255])
Out[ ]:
(tensor([[148, 257, 270],
         [286, 350, 119],
         [122, 153, 327],
         [256, 172, 198],
         [178, 218, 290],
         [295, 119, 218],
         [102, 289, 128],
         [296, 143, 327],
         [232, 295, 233]]),
 tensor([[ 48, 157, 170],
         [186, 250,  19],
         [ 22,  53, 227],
         [156,  72,  98],
         [ 78, 118, 190],
         [195,  19, 118],
         [  2, 189,  28],
         [196,  43, 227],
         [132, 195, 133]]),
 tensor([[100, 101, 102,  ..., 352, 353, 354],
         [100, 101, 102,  ..., 352, 353, 354],
         [100, 101, 102,  ..., 352, 353, 354],
         ...,
         [100, 101, 102,  ..., 352, 353, 354],
         [100, 101, 102,  ..., 352, 353, 354],
         [100, 101, 102,  ..., 352, 353, 354]]))
In [ ]:
rc_conv_3x3 = np.load("LUT_x4_8.0bit_int8_stage1_3x3_rc_conv.npy")
rc_conv_3x3[:,image].shape
Out[ ]:
(9, 126, 126, 3)
In [ ]:
 
Out[ ]:
In [ ]:
m(image)
In [ ]:
srlut = np.load("/wd/SR-LUT/2_Transfer_to_LUT/Model_S_x4_4bit_int8.npy").reshape(17**4, 4*4).astype(np.int16) 
# srlut = np.load("/wd/SR-LUT/3_Test_using_LUT/Model_F_x4_4bit_int8.npy").astype(np.int16).reshape(-1, 4*4)
srlut = (srlut+128).astype(np.uint8)
srlut.shape
Out[ ]:
(83521, 16)
In [ ]:
f, a = plt.subplots(1,1, figsize=(9, 9))
pcm = a.pcolormesh(np.transpose(srlut[:17]))
f.colorbar(pcm, ax=a, location='right')
Out[ ]:
<matplotlib.colorbar.Colorbar at 0x7f11264ef5b0>
In [ ]:
set([i//16 for i in range(256)])
Out[ ]:
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
In [ ]:
np.arange(0, 256, 2**4), len(np.arange(0, 256, 2**4))
Out[ ]:
(array([  0,  16,  32,  48,  64,  80,  96, 112, 128, 144, 160, 176, 192,
        208, 224, 240]),
 16)
In [ ]:
a,b,c,d = 127,127,127,12,7
plt.imshow(srlut.reshape(17,17,17,17,4,4)[a//16,12//16,12//16,12//16], cmap='gray')
Out[ ]:
<matplotlib.image.AxesImage at 0x7f112644d930>
In [ ]:
import seaborn as sns
import pandas as pd
tt = srlut.reshape(17,17,17,17,16)
i = 8
aa = pd.DataFrame(np.transpose(tt[i,5,5,:,:]))
aa.columns = [f"[{x*(256/17):.0f},\n{(x+1)*(256/17):.0f}]" for x in np.arange(17)]
sns.set_theme(rc={'figure.figsize':(11.7,8.27)})
a = sns.heatmap(aa, annot=True, fmt=".0f")
a.set_xlabel("buckets")
a.set_ylabel("output pixel")
# aa
Out[ ]:
Text(112.49999999999999, 0.5, 'output pixel')
In [ ]:
hh = pd.DataFrame(srlut.flatten()).value_counts().reset_index().sort_values(by=0)
hh.columns = ['bucket', 'count']
sns.set_theme(rc={'figure.figsize':(24.7,8.27)})
sns.barplot(data=hh, x='bucket', y='count')
plt.xticks(rotation=90, fontsize=8);
In [ ]:
np.transpose(srlut[:17]+127).min(), np.transpose(srlut[:17]+127).max()
Out[ ]:
(-128, 127)
In [ ]:
srlut[:17].dtype
Out[ ]:
dtype('int8')
In [ ]:
(srlut[:17]+127).min()
Out[ ]:
-128
In [ ]:
import cv2
from pathlib import Path

ds_path = Path("/wd/luts/data/Synthetic/")
hr_path = ds_path / "HR"
lr_path = ds_path / "LR"
w = h = 1024

for i in range(256):
    cv2.imwrite(str(hr_path / f"const_{i:04d}.png"), np.full((w,h,3), fill_value=i, dtype=np.uint8))
    for scale in [2,4]:
        cv2.imwrite(str(lr_path / f"X{scale}" / f"const_{i:04d}.png"), np.full((w//scale,h//scale,3), fill_value=i, dtype=np.uint8))

# for i in range(256):
im = np.ones((w,h,3), dtype=np.uint8)
for i in range(h):
    im[i] *= int((i / h) * 255)
cv2.imwrite(str(hr_path / f"linear.png"), im)
for scale in [2,4]:
    im = np.ones((w//scale,h//scale,3), dtype=np.uint8)
    for i in range(h//scale):
        im[i] *= int((i / (h//scale)) * 255)
    cv2.imwrite(str(lr_path / f"X{scale}" / f"linear.png"), im)
In [ ]:
import numpy as np
im = np.ones((w,h,3), dtype=np.uint8)
for c in range(3):
    im = np.rot90(im, c)
    for i in range(h):
        for j in range(w):
            im[i,j,c] *= int(((i + j)/ (h + w)) * 255)
cv2.imwrite(str(hr_path / f"diagonalc.png"), im)
for scale in [2,4]:
    im = np.ones((w//scale,h//scale,3), dtype=np.uint8)
    for c in range(3):
        im = np.rot90(im, c)
        for i in range(h//scale):
            for j in range(w//scale):
                im[i,j,c] *= int(((i + j)/ (h//scale + w//scale)) * 255)
    cv2.imwrite(str(lr_path / f"X{scale}" / f"diagonalc.png"), im)
In [ ]:
import torch
import torch.nn.functional as F
n = 4
a = torch.arange(n**2).view(1,1,n,n).type(torch.float32)
b = F.unfold(a, kernel_size=(2,2))
a, b, a.shape, b.shape,
gg = torch.nn.Linear(9,1)
gg(b).shape
Out[ ]:
torch.Size([1, 4, 1])
In [ ]:
torch.nn.Linear?
Init signature:
torch.nn.Linear(
    in_features: int,
    out_features: int,
    bias: bool = True,
    device=None,
    dtype=None,
) -> None
Docstring:     
Applies a linear transformation to the incoming data: :math:`y = xA^T + b`.

This module supports :ref:`TensorFloat32<tf32_on_ampere>`.

On certain ROCm devices, when using float16 inputs this module will use :ref:`different precision<fp16_on_mi200>` for backward.

Args:
    in_features: size of each input sample
    out_features: size of each output sample
    bias: If set to ``False``, the layer will not learn an additive bias.
        Default: ``True``

Shape:
    - Input: :math:`(*, H_{in})` where :math:`*` means any number of
      dimensions including none and :math:`H_{in} = \text{in\_features}`.
    - Output: :math:`(*, H_{out})` where all but the last dimension
      are the same shape as the input and :math:`H_{out} = \text{out\_features}`.

Attributes:
    weight: the learnable weights of the module of shape
        :math:`(\text{out\_features}, \text{in\_features})`. The values are
        initialized from :math:`\mathcal{U}(-\sqrt{k}, \sqrt{k})`, where
        :math:`k = \frac{1}{\text{in\_features}}`
    bias:   the learnable bias of the module of shape :math:`(\text{out\_features})`.
            If :attr:`bias` is ``True``, the values are initialized from
            :math:`\mathcal{U}(-\sqrt{k}, \sqrt{k})` where
            :math:`k = \frac{1}{\text{in\_features}}`

Examples::

    >>> m = nn.Linear(20, 30)
    >>> input = torch.randn(128, 20)
    >>> output = m(input)
    >>> print(output.size())
    torch.Size([128, 30])
Init docstring: Initialize internal Module state, shared by both nn.Module and ScriptModule.
File:           /opt/conda/lib/python3.10/site-packages/torch/nn/modules/linear.py
Type:           type
Subclasses:     NonDynamicallyQuantizableLinear, LazyLinear, Linear, LinearBn1d, Linear
In [ ]:
import torch
import torch.nn as nn
import torch.nn.functional as F
import numpy as np

class PercievePatternv2():
    def __init__(self, receptive_field_idxes=[[0,0],[0,1],[1,0],[1,1]], center=[0,0], window_size=2):
        assert window_size >= (np.max(receptive_field_idxes)+1)
        self.receptive_field_idxes = np.array(receptive_field_idxes)
        self.window_size = window_size
        self.center = center
        self.receptive_field_idxes = [
            self.receptive_field_idxes[0,0]*self.window_size + self.receptive_field_idxes[0,1],
            self.receptive_field_idxes[1,0]*self.window_size + self.receptive_field_idxes[1,1],
            self.receptive_field_idxes[2,0]*self.window_size + self.receptive_field_idxes[2,1],
            self.receptive_field_idxes[3,0]*self.window_size + self.receptive_field_idxes[3,1],
        ]

    def __call__(self, x):
        b,c,h,w = x.shape
        x = F.pad(
            x, 
            pad=[self.center[0], self.window_size-self.center[0]-1,
                 self.center[1], self.window_size-self.center[1]-1], 
            mode='replicate'
        )
        x = F.unfold(input=x, kernel_size=self.window_size)
        x = torch.stack([
            x[:,self.receptive_field_idxes[0],:],
            x[:,self.receptive_field_idxes[1],:],
            x[:,self.receptive_field_idxes[2],:],
            x[:,self.receptive_field_idxes[3],:]
        ], 2)
        # x = x.reshape(x.shape[0]*x.shape[1], 1, 2, 2)
        return x
In [ ]:
_extract_pattern = PercievePatternv2(receptive_field_idxes=[[0,0],[0,1],[1,0],[1,1]], center=[0,0], window_size=2)
n = 3
a = torch.arange(n**2).view(1,1,n,n).type(torch.float32)
a, _extract_pattern(a), _extract_pattern(a).shape
Out[ ]:
(tensor([[[[0., 1., 2.],
           [3., 4., 5.],
           [6., 7., 8.]]]]),
 tensor([[[0., 1., 3., 4.],
          [1., 2., 4., 5.],
          [2., 2., 5., 5.],
          [3., 4., 6., 7.],
          [4., 5., 7., 8.],
          [5., 5., 8., 8.],
          [6., 7., 6., 7.],
          [7., 8., 7., 8.],
          [8., 8., 8., 8.]]]),
 torch.Size([1, 9, 4]))
In [ ]:
def round_func(input):
    # Backward Pass Differentiable Approximation (BPDA)
    # This is equivalent to replacing round function (non-differentiable)
    # with an identity function (differentiable) only when backward,
    forward_value = torch.round(input)
    out = input.clone()
    out.data = forward_value.data
    return out 
In [ ]:
class DenseConvUpscaleBlockv2(nn.Module):
    def __init__(self, receptive_field_idxes=[[0,0],[0,1],[1,0],[1,1]], center=[0,0], window_size=2, in_features=4, hidden_dim = 32, layers_count=5, upscale_factor=1):
        super(DenseConvUpscaleBlockv2, self).__init__()   
        assert layers_count > 0     
        self.percieve_pattern = PercievePatternv2(receptive_field_idxes=receptive_field_idxes, center=center, window_size=window_size)
        self.upscale_factor = upscale_factor 
        self.hidden_dim = hidden_dim
        self.embed = nn.Linear(in_features=in_features, out_features=hidden_dim, bias=True)
        
        self.linear_projections = []
        for i in range(layers_count):
            self.linear_projections.append(nn.Linear(in_features=(i+1)*hidden_dim, out_features=hidden_dim, bias=True))
        self.linear_projections = nn.ModuleList(self.linear_projections)          

        self.project_channels = nn.Linear(in_features=(layers_count+1)*hidden_dim, out_features=upscale_factor * upscale_factor, bias=True)
    
    def forward(self, x):
        b,c,h,w = x.shape
        x = (x-127.5)/127.5    
        x = self.percieve_pattern(x)
        x = torch.relu(self.embed(x))
        for linear_projection in self.linear_projections:
            x = torch.cat([x, torch.relu(linear_projection(x))], dim=2)
        x = self.project_channels(x)
        x = x.reshape(b, c, h*self.upscale_factor, w*self.upscale_factor)
        x = torch.tanh(x)         
        x = x*127.5 + 127.5 
        x = round_func(x)
        return x  

layer = DenseConvUpscaleBlockv2()
layer(a)
Out[ ]:
tensor([[[[113., 113., 113.],
          [113., 113., 113.],
          [113., 113., 113.]]]], grad_fn=<CloneBackward0>)
In [ ]:
rotations_count = -1
b = torch.rot90(a, k=rotations_count, dims=[-2, -1])
c = torch.rot90(b, k=-rotations_count, dims=[-2, -1])
c
Out[ ]:
tensor([[[[0., 1., 2.],
          [3., 4., 5.],
          [6., 7., 8.]]]])
In [ ]:
 
torch.Size([1, 9, 4])
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
/wd/lut_reproduce/explore.ipynb Cell 43 line 1
----> <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=0'>1</a> layer(a)

File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs)
   1509     return self._compiled_call_impl(*args, **kwargs)  # type: ignore[misc]
   1510 else:
-> 1511     return self._call_impl(*args, **kwargs)

File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs)
   1515 # If we don't have any hooks, we want to skip the rest of the logic in
   1516 # this function, and just call forward.
   1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
   1518         or _global_backward_pre_hooks or _global_backward_hooks
   1519         or _global_forward_hooks or _global_forward_pre_hooks):
-> 1520     return forward_call(*args, **kwargs)
   1522 try:
   1523     result = None

/wd/lut_reproduce/explore.ipynb Cell 43 line 2
     <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=21'>22</a> x = torch.relu(self.embed(x))
     <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=22'>23</a> for linear_projection in self.linear_projections:
---> <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=23'>24</a>     x = torch.cat([x, torch.relu(linear_projection(x))], dim=1)
     <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=24'>25</a> x = self.project_channels(x)
     <a href='vscode-notebook-cell://192.168.88.70:8400/wd/lut_reproduce/explore.ipynb#X61sdnNjb2RlLXJlbW90ZQ%3D%3D?line=25'>26</a> x = x.reshape(b, c, h*self.upscale_factor, w*self.upscale_factor)

File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs)
   1509     return self._compiled_call_impl(*args, **kwargs)  # type: ignore[misc]
   1510 else:
-> 1511     return self._call_impl(*args, **kwargs)

File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs)
   1515 # If we don't have any hooks, we want to skip the rest of the logic in
   1516 # this function, and just call forward.
   1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
   1518         or _global_backward_pre_hooks or _global_backward_hooks
   1519         or _global_forward_hooks or _global_forward_pre_hooks):
-> 1520     return forward_call(*args, **kwargs)
   1522 try:
   1523     result = None

File /opt/conda/lib/python3.10/site-packages/torch/nn/modules/linear.py:116, in Linear.forward(self, input)
    115 def forward(self, input: Tensor) -> Tensor:
--> 116     return F.linear(input, self.weight, self.bias)

RuntimeError: mat1 and mat2 shapes cannot be multiplied (18x32 and 64x32)
In [27]:
im_x1, im_x2, im_x4 = gen_sin_im2(tgt_size=256*4, exponent_coef=.148/1.9*2, max_value=16, rotate_angle=0, start_val=127)
im_x1
Out[27]:
In [30]:
for angle in range(90):
    max_value = 15
    for start_val in range(0, 255-max_value+1, max_value):
        coef = .148/1.9*2
        im_x1, im_x2, im_x4 = gen_sin_im2(tgt_size=256*4, exponent_coef=coef, max_value=max_value, rotate_angle=angle, start_val=start_val)
        name = f"sin_{int(coef*100):03d}_{max_value}_{angle}_{start_val}"
        print(name)
        im_x1.save(f"./data/SyntheticTrain/HR/v2{name}.png") 
        im_x2.save(f"./data/SyntheticTrain/LR/X2/v2{name}.png") 
        im_x4.save(f"./data/SyntheticTrain/LR/X4/v2{name}.png") 
sin_015_15_0_0
sin_015_15_0_15
sin_015_15_0_30
sin_015_15_0_45
sin_015_15_0_60
sin_015_15_0_75
sin_015_15_0_90
sin_015_15_0_105
sin_015_15_0_120
sin_015_15_0_135
sin_015_15_0_150
sin_015_15_0_165
sin_015_15_0_180
sin_015_15_0_195
sin_015_15_0_210
sin_015_15_0_225
sin_015_15_0_240
sin_015_15_1_0
sin_015_15_1_15
sin_015_15_1_30
sin_015_15_1_45
sin_015_15_1_60
sin_015_15_1_75
sin_015_15_1_90
sin_015_15_1_105
sin_015_15_1_120
sin_015_15_1_135
sin_015_15_1_150
sin_015_15_1_165
sin_015_15_1_180
sin_015_15_1_195
sin_015_15_1_210
sin_015_15_1_225
sin_015_15_1_240
sin_015_15_2_0
sin_015_15_2_15
sin_015_15_2_30
sin_015_15_2_45
sin_015_15_2_60
sin_015_15_2_75
sin_015_15_2_90
sin_015_15_2_105
sin_015_15_2_120
sin_015_15_2_135
sin_015_15_2_150
sin_015_15_2_165
sin_015_15_2_180
sin_015_15_2_195
sin_015_15_2_210
sin_015_15_2_225
sin_015_15_2_240
sin_015_15_3_0
sin_015_15_3_15
sin_015_15_3_30
sin_015_15_3_45
sin_015_15_3_60
sin_015_15_3_75
sin_015_15_3_90
sin_015_15_3_105
sin_015_15_3_120
sin_015_15_3_135
sin_015_15_3_150
sin_015_15_3_165
sin_015_15_3_180
sin_015_15_3_195
sin_015_15_3_210
sin_015_15_3_225
sin_015_15_3_240
sin_015_15_4_0
sin_015_15_4_15
sin_015_15_4_30
sin_015_15_4_45
sin_015_15_4_60
sin_015_15_4_75
sin_015_15_4_90
sin_015_15_4_105
sin_015_15_4_120
sin_015_15_4_135
sin_015_15_4_150
sin_015_15_4_165
sin_015_15_4_180
sin_015_15_4_195
sin_015_15_4_210
sin_015_15_4_225
sin_015_15_4_240
sin_015_15_5_0
sin_015_15_5_15
sin_015_15_5_30
sin_015_15_5_45
sin_015_15_5_60
sin_015_15_5_75
sin_015_15_5_90
sin_015_15_5_105
sin_015_15_5_120
sin_015_15_5_135
sin_015_15_5_150
sin_015_15_5_165
sin_015_15_5_180
sin_015_15_5_195
sin_015_15_5_210
sin_015_15_5_225
sin_015_15_5_240
sin_015_15_6_0
sin_015_15_6_15
sin_015_15_6_30
sin_015_15_6_45
sin_015_15_6_60
sin_015_15_6_75
sin_015_15_6_90
sin_015_15_6_105
sin_015_15_6_120
sin_015_15_6_135
sin_015_15_6_150
sin_015_15_6_165
sin_015_15_6_180
sin_015_15_6_195
sin_015_15_6_210
sin_015_15_6_225
sin_015_15_6_240
sin_015_15_7_0
sin_015_15_7_15
sin_015_15_7_30
sin_015_15_7_45
sin_015_15_7_60
sin_015_15_7_75
sin_015_15_7_90
sin_015_15_7_105
sin_015_15_7_120
sin_015_15_7_135
sin_015_15_7_150
sin_015_15_7_165
sin_015_15_7_180
sin_015_15_7_195
sin_015_15_7_210
sin_015_15_7_225
sin_015_15_7_240
sin_015_15_8_0
sin_015_15_8_15
sin_015_15_8_30
sin_015_15_8_45
sin_015_15_8_60
sin_015_15_8_75
sin_015_15_8_90
sin_015_15_8_105
sin_015_15_8_120
sin_015_15_8_135
sin_015_15_8_150
sin_015_15_8_165
sin_015_15_8_180
sin_015_15_8_195
sin_015_15_8_210
sin_015_15_8_225
sin_015_15_8_240
sin_015_15_9_0
sin_015_15_9_15
sin_015_15_9_30
sin_015_15_9_45
sin_015_15_9_60
sin_015_15_9_75
sin_015_15_9_90
sin_015_15_9_105
sin_015_15_9_120
sin_015_15_9_135
sin_015_15_9_150
sin_015_15_9_165
sin_015_15_9_180
sin_015_15_9_195
sin_015_15_9_210
sin_015_15_9_225
sin_015_15_9_240
sin_015_15_10_0
sin_015_15_10_15
sin_015_15_10_30
sin_015_15_10_45
sin_015_15_10_60
sin_015_15_10_75
sin_015_15_10_90
sin_015_15_10_105
sin_015_15_10_120
sin_015_15_10_135
sin_015_15_10_150
sin_015_15_10_165
sin_015_15_10_180
sin_015_15_10_195
sin_015_15_10_210
sin_015_15_10_225
sin_015_15_10_240
sin_015_15_11_0
sin_015_15_11_15
sin_015_15_11_30
sin_015_15_11_45
sin_015_15_11_60
sin_015_15_11_75
sin_015_15_11_90
sin_015_15_11_105
sin_015_15_11_120
sin_015_15_11_135
sin_015_15_11_150
sin_015_15_11_165
sin_015_15_11_180
sin_015_15_11_195
sin_015_15_11_210
sin_015_15_11_225
sin_015_15_11_240
sin_015_15_12_0
sin_015_15_12_15
sin_015_15_12_30
sin_015_15_12_45
sin_015_15_12_60
sin_015_15_12_75
sin_015_15_12_90
sin_015_15_12_105
sin_015_15_12_120
sin_015_15_12_135
sin_015_15_12_150
sin_015_15_12_165
sin_015_15_12_180
sin_015_15_12_195
sin_015_15_12_210
sin_015_15_12_225
sin_015_15_12_240
sin_015_15_13_0
sin_015_15_13_15
sin_015_15_13_30
sin_015_15_13_45
sin_015_15_13_60
sin_015_15_13_75
sin_015_15_13_90
sin_015_15_13_105
sin_015_15_13_120
sin_015_15_13_135
sin_015_15_13_150
sin_015_15_13_165
sin_015_15_13_180
sin_015_15_13_195
sin_015_15_13_210
sin_015_15_13_225
sin_015_15_13_240
sin_015_15_14_0
sin_015_15_14_15
sin_015_15_14_30
sin_015_15_14_45
sin_015_15_14_60
sin_015_15_14_75
sin_015_15_14_90
sin_015_15_14_105
sin_015_15_14_120
sin_015_15_14_135
sin_015_15_14_150
sin_015_15_14_165
sin_015_15_14_180
sin_015_15_14_195
sin_015_15_14_210
sin_015_15_14_225
sin_015_15_14_240
sin_015_15_15_0
sin_015_15_15_15
sin_015_15_15_30
sin_015_15_15_45
sin_015_15_15_60
sin_015_15_15_75
sin_015_15_15_90
sin_015_15_15_105
sin_015_15_15_120
sin_015_15_15_135
sin_015_15_15_150
sin_015_15_15_165
sin_015_15_15_180
sin_015_15_15_195
sin_015_15_15_210
sin_015_15_15_225
sin_015_15_15_240
sin_015_15_16_0
sin_015_15_16_15
sin_015_15_16_30
sin_015_15_16_45
sin_015_15_16_60
sin_015_15_16_75
sin_015_15_16_90
sin_015_15_16_105
sin_015_15_16_120
sin_015_15_16_135
sin_015_15_16_150
sin_015_15_16_165
sin_015_15_16_180
sin_015_15_16_195
sin_015_15_16_210
sin_015_15_16_225
sin_015_15_16_240
sin_015_15_17_0
sin_015_15_17_15
sin_015_15_17_30
sin_015_15_17_45
sin_015_15_17_60
sin_015_15_17_75
sin_015_15_17_90
sin_015_15_17_105
sin_015_15_17_120
sin_015_15_17_135
sin_015_15_17_150
sin_015_15_17_165
sin_015_15_17_180
sin_015_15_17_195
sin_015_15_17_210
sin_015_15_17_225
sin_015_15_17_240
sin_015_15_18_0
sin_015_15_18_15
sin_015_15_18_30
sin_015_15_18_45
sin_015_15_18_60
sin_015_15_18_75
sin_015_15_18_90
sin_015_15_18_105
sin_015_15_18_120
sin_015_15_18_135
sin_015_15_18_150
sin_015_15_18_165
sin_015_15_18_180
sin_015_15_18_195
sin_015_15_18_210
sin_015_15_18_225
sin_015_15_18_240
sin_015_15_19_0
sin_015_15_19_15
sin_015_15_19_30
sin_015_15_19_45
sin_015_15_19_60
sin_015_15_19_75
sin_015_15_19_90
sin_015_15_19_105
sin_015_15_19_120
sin_015_15_19_135
sin_015_15_19_150
sin_015_15_19_165
sin_015_15_19_180
sin_015_15_19_195
sin_015_15_19_210
sin_015_15_19_225
sin_015_15_19_240
sin_015_15_20_0
sin_015_15_20_15
sin_015_15_20_30
sin_015_15_20_45
sin_015_15_20_60
sin_015_15_20_75
sin_015_15_20_90
sin_015_15_20_105
sin_015_15_20_120
sin_015_15_20_135
sin_015_15_20_150
sin_015_15_20_165
sin_015_15_20_180
sin_015_15_20_195
sin_015_15_20_210
sin_015_15_20_225
sin_015_15_20_240
sin_015_15_21_0
sin_015_15_21_15
sin_015_15_21_30
sin_015_15_21_45
sin_015_15_21_60
sin_015_15_21_75
sin_015_15_21_90
sin_015_15_21_105
sin_015_15_21_120
sin_015_15_21_135
sin_015_15_21_150
sin_015_15_21_165
sin_015_15_21_180
sin_015_15_21_195
sin_015_15_21_210
sin_015_15_21_225
sin_015_15_21_240
sin_015_15_22_0
sin_015_15_22_15
sin_015_15_22_30
sin_015_15_22_45
sin_015_15_22_60
sin_015_15_22_75
sin_015_15_22_90
sin_015_15_22_105
sin_015_15_22_120
sin_015_15_22_135
sin_015_15_22_150
sin_015_15_22_165
sin_015_15_22_180
sin_015_15_22_195
sin_015_15_22_210
sin_015_15_22_225
sin_015_15_22_240
sin_015_15_23_0
sin_015_15_23_15
sin_015_15_23_30
sin_015_15_23_45
sin_015_15_23_60
sin_015_15_23_75
sin_015_15_23_90
sin_015_15_23_105
sin_015_15_23_120
sin_015_15_23_135
sin_015_15_23_150
sin_015_15_23_165
sin_015_15_23_180
sin_015_15_23_195
sin_015_15_23_210
sin_015_15_23_225
sin_015_15_23_240
sin_015_15_24_0
sin_015_15_24_15
sin_015_15_24_30
sin_015_15_24_45
sin_015_15_24_60
sin_015_15_24_75
sin_015_15_24_90
sin_015_15_24_105
sin_015_15_24_120
sin_015_15_24_135
sin_015_15_24_150
sin_015_15_24_165
sin_015_15_24_180
sin_015_15_24_195
sin_015_15_24_210
sin_015_15_24_225
sin_015_15_24_240
sin_015_15_25_0
sin_015_15_25_15
sin_015_15_25_30
sin_015_15_25_45
sin_015_15_25_60
sin_015_15_25_75
sin_015_15_25_90
sin_015_15_25_105
sin_015_15_25_120
sin_015_15_25_135
sin_015_15_25_150
sin_015_15_25_165
sin_015_15_25_180
sin_015_15_25_195
sin_015_15_25_210
sin_015_15_25_225
sin_015_15_25_240
sin_015_15_26_0
sin_015_15_26_15
sin_015_15_26_30
sin_015_15_26_45
sin_015_15_26_60
sin_015_15_26_75
sin_015_15_26_90
sin_015_15_26_105
sin_015_15_26_120
sin_015_15_26_135
sin_015_15_26_150
sin_015_15_26_165
sin_015_15_26_180
sin_015_15_26_195
sin_015_15_26_210
sin_015_15_26_225
sin_015_15_26_240
sin_015_15_27_0
sin_015_15_27_15
sin_015_15_27_30
sin_015_15_27_45
sin_015_15_27_60
sin_015_15_27_75
sin_015_15_27_90
sin_015_15_27_105
sin_015_15_27_120
sin_015_15_27_135
sin_015_15_27_150
sin_015_15_27_165
sin_015_15_27_180
sin_015_15_27_195
sin_015_15_27_210
sin_015_15_27_225
sin_015_15_27_240
sin_015_15_28_0
sin_015_15_28_15
sin_015_15_28_30
sin_015_15_28_45
sin_015_15_28_60
sin_015_15_28_75
sin_015_15_28_90
sin_015_15_28_105
sin_015_15_28_120
sin_015_15_28_135
sin_015_15_28_150
sin_015_15_28_165
sin_015_15_28_180
sin_015_15_28_195
sin_015_15_28_210
sin_015_15_28_225
sin_015_15_28_240
sin_015_15_29_0
sin_015_15_29_15
sin_015_15_29_30
sin_015_15_29_45
sin_015_15_29_60
sin_015_15_29_75
sin_015_15_29_90
sin_015_15_29_105
sin_015_15_29_120
sin_015_15_29_135
sin_015_15_29_150
sin_015_15_29_165
sin_015_15_29_180
sin_015_15_29_195
sin_015_15_29_210
sin_015_15_29_225
sin_015_15_29_240
sin_015_15_30_0
sin_015_15_30_15
sin_015_15_30_30
sin_015_15_30_45
sin_015_15_30_60
sin_015_15_30_75
sin_015_15_30_90
sin_015_15_30_105
sin_015_15_30_120
sin_015_15_30_135
sin_015_15_30_150
sin_015_15_30_165
sin_015_15_30_180
sin_015_15_30_195
sin_015_15_30_210
sin_015_15_30_225
sin_015_15_30_240
sin_015_15_31_0
sin_015_15_31_15
sin_015_15_31_30
sin_015_15_31_45
sin_015_15_31_60
sin_015_15_31_75
sin_015_15_31_90
sin_015_15_31_105
sin_015_15_31_120
sin_015_15_31_135
sin_015_15_31_150
sin_015_15_31_165
sin_015_15_31_180
sin_015_15_31_195
sin_015_15_31_210
sin_015_15_31_225
sin_015_15_31_240
sin_015_15_32_0
sin_015_15_32_15
sin_015_15_32_30
sin_015_15_32_45
sin_015_15_32_60
sin_015_15_32_75
sin_015_15_32_90
sin_015_15_32_105
sin_015_15_32_120
sin_015_15_32_135
sin_015_15_32_150
sin_015_15_32_165
sin_015_15_32_180
sin_015_15_32_195
sin_015_15_32_210
sin_015_15_32_225
sin_015_15_32_240
sin_015_15_33_0
sin_015_15_33_15
sin_015_15_33_30
sin_015_15_33_45
sin_015_15_33_60
sin_015_15_33_75
sin_015_15_33_90
sin_015_15_33_105
sin_015_15_33_120
sin_015_15_33_135
sin_015_15_33_150
sin_015_15_33_165
sin_015_15_33_180
sin_015_15_33_195
sin_015_15_33_210
sin_015_15_33_225
sin_015_15_33_240
sin_015_15_34_0
sin_015_15_34_15
sin_015_15_34_30
sin_015_15_34_45
sin_015_15_34_60
sin_015_15_34_75
sin_015_15_34_90
sin_015_15_34_105
sin_015_15_34_120
sin_015_15_34_135
sin_015_15_34_150
sin_015_15_34_165
sin_015_15_34_180
sin_015_15_34_195
sin_015_15_34_210
sin_015_15_34_225
sin_015_15_34_240
sin_015_15_35_0
sin_015_15_35_15
sin_015_15_35_30
sin_015_15_35_45
sin_015_15_35_60
sin_015_15_35_75
sin_015_15_35_90
sin_015_15_35_105
sin_015_15_35_120
sin_015_15_35_135
sin_015_15_35_150
sin_015_15_35_165
sin_015_15_35_180
sin_015_15_35_195
sin_015_15_35_210
sin_015_15_35_225
sin_015_15_35_240
sin_015_15_36_0
sin_015_15_36_15
sin_015_15_36_30
sin_015_15_36_45
sin_015_15_36_60
sin_015_15_36_75
sin_015_15_36_90
sin_015_15_36_105
sin_015_15_36_120
sin_015_15_36_135
sin_015_15_36_150
sin_015_15_36_165
sin_015_15_36_180
sin_015_15_36_195
sin_015_15_36_210
sin_015_15_36_225
sin_015_15_36_240
sin_015_15_37_0
sin_015_15_37_15
sin_015_15_37_30
sin_015_15_37_45
sin_015_15_37_60
sin_015_15_37_75
sin_015_15_37_90
sin_015_15_37_105
sin_015_15_37_120
sin_015_15_37_135
sin_015_15_37_150
sin_015_15_37_165
sin_015_15_37_180
sin_015_15_37_195
sin_015_15_37_210
sin_015_15_37_225
sin_015_15_37_240
sin_015_15_38_0
sin_015_15_38_15
sin_015_15_38_30
sin_015_15_38_45
sin_015_15_38_60
sin_015_15_38_75
sin_015_15_38_90
sin_015_15_38_105
sin_015_15_38_120
sin_015_15_38_135
sin_015_15_38_150
sin_015_15_38_165
sin_015_15_38_180
sin_015_15_38_195
sin_015_15_38_210
sin_015_15_38_225
sin_015_15_38_240
sin_015_15_39_0
sin_015_15_39_15
sin_015_15_39_30
sin_015_15_39_45
sin_015_15_39_60
sin_015_15_39_75
sin_015_15_39_90
sin_015_15_39_105
sin_015_15_39_120
sin_015_15_39_135
sin_015_15_39_150
sin_015_15_39_165
sin_015_15_39_180
sin_015_15_39_195
sin_015_15_39_210
sin_015_15_39_225
sin_015_15_39_240
sin_015_15_40_0
sin_015_15_40_15
sin_015_15_40_30
sin_015_15_40_45
sin_015_15_40_60
sin_015_15_40_75
sin_015_15_40_90
sin_015_15_40_105
sin_015_15_40_120
sin_015_15_40_135
sin_015_15_40_150
sin_015_15_40_165
sin_015_15_40_180
sin_015_15_40_195
sin_015_15_40_210
sin_015_15_40_225
sin_015_15_40_240
sin_015_15_41_0
sin_015_15_41_15
sin_015_15_41_30
sin_015_15_41_45
sin_015_15_41_60
sin_015_15_41_75
sin_015_15_41_90
sin_015_15_41_105
sin_015_15_41_120
sin_015_15_41_135
sin_015_15_41_150
sin_015_15_41_165
sin_015_15_41_180
sin_015_15_41_195
sin_015_15_41_210
sin_015_15_41_225
sin_015_15_41_240
sin_015_15_42_0
sin_015_15_42_15
sin_015_15_42_30
sin_015_15_42_45
sin_015_15_42_60
sin_015_15_42_75
sin_015_15_42_90
sin_015_15_42_105
sin_015_15_42_120
sin_015_15_42_135
sin_015_15_42_150
sin_015_15_42_165
sin_015_15_42_180
sin_015_15_42_195
sin_015_15_42_210
sin_015_15_42_225
sin_015_15_42_240
sin_015_15_43_0
sin_015_15_43_15
sin_015_15_43_30
sin_015_15_43_45
sin_015_15_43_60
sin_015_15_43_75
sin_015_15_43_90
sin_015_15_43_105
sin_015_15_43_120
sin_015_15_43_135
sin_015_15_43_150
sin_015_15_43_165
sin_015_15_43_180
sin_015_15_43_195
sin_015_15_43_210
sin_015_15_43_225
sin_015_15_43_240
sin_015_15_44_0
sin_015_15_44_15
sin_015_15_44_30
sin_015_15_44_45
sin_015_15_44_60
sin_015_15_44_75
sin_015_15_44_90
sin_015_15_44_105
sin_015_15_44_120
sin_015_15_44_135
sin_015_15_44_150
sin_015_15_44_165
sin_015_15_44_180
sin_015_15_44_195
sin_015_15_44_210
sin_015_15_44_225
sin_015_15_44_240
sin_015_15_45_0
sin_015_15_45_15
sin_015_15_45_30
sin_015_15_45_45
sin_015_15_45_60
sin_015_15_45_75
sin_015_15_45_90
sin_015_15_45_105
sin_015_15_45_120
sin_015_15_45_135
sin_015_15_45_150
sin_015_15_45_165
sin_015_15_45_180
sin_015_15_45_195
sin_015_15_45_210
sin_015_15_45_225
sin_015_15_45_240
sin_015_15_46_0
sin_015_15_46_15
sin_015_15_46_30
sin_015_15_46_45
sin_015_15_46_60
sin_015_15_46_75
sin_015_15_46_90
sin_015_15_46_105
sin_015_15_46_120
sin_015_15_46_135
sin_015_15_46_150
sin_015_15_46_165
sin_015_15_46_180
sin_015_15_46_195
sin_015_15_46_210
sin_015_15_46_225
sin_015_15_46_240
sin_015_15_47_0
sin_015_15_47_15
sin_015_15_47_30
sin_015_15_47_45
sin_015_15_47_60
sin_015_15_47_75
sin_015_15_47_90
sin_015_15_47_105
sin_015_15_47_120
sin_015_15_47_135
sin_015_15_47_150
sin_015_15_47_165
sin_015_15_47_180
sin_015_15_47_195
sin_015_15_47_210
sin_015_15_47_225
sin_015_15_47_240
sin_015_15_48_0
sin_015_15_48_15
sin_015_15_48_30
sin_015_15_48_45
sin_015_15_48_60
sin_015_15_48_75
sin_015_15_48_90
sin_015_15_48_105
sin_015_15_48_120
sin_015_15_48_135
sin_015_15_48_150
sin_015_15_48_165
sin_015_15_48_180
sin_015_15_48_195
sin_015_15_48_210
sin_015_15_48_225
sin_015_15_48_240
sin_015_15_49_0
sin_015_15_49_15
sin_015_15_49_30
sin_015_15_49_45
sin_015_15_49_60
sin_015_15_49_75
sin_015_15_49_90
sin_015_15_49_105
sin_015_15_49_120
sin_015_15_49_135
sin_015_15_49_150
sin_015_15_49_165
sin_015_15_49_180
sin_015_15_49_195
sin_015_15_49_210
sin_015_15_49_225
sin_015_15_49_240
sin_015_15_50_0
sin_015_15_50_15
sin_015_15_50_30
sin_015_15_50_45
sin_015_15_50_60
sin_015_15_50_75
sin_015_15_50_90
sin_015_15_50_105
sin_015_15_50_120
sin_015_15_50_135
sin_015_15_50_150
sin_015_15_50_165
sin_015_15_50_180
sin_015_15_50_195
sin_015_15_50_210
sin_015_15_50_225
sin_015_15_50_240
sin_015_15_51_0
sin_015_15_51_15
sin_015_15_51_30
sin_015_15_51_45
sin_015_15_51_60
sin_015_15_51_75
sin_015_15_51_90
sin_015_15_51_105
sin_015_15_51_120
sin_015_15_51_135
sin_015_15_51_150
sin_015_15_51_165
sin_015_15_51_180
sin_015_15_51_195
sin_015_15_51_210
sin_015_15_51_225
sin_015_15_51_240
sin_015_15_52_0
sin_015_15_52_15
sin_015_15_52_30
sin_015_15_52_45
sin_015_15_52_60
sin_015_15_52_75
sin_015_15_52_90
sin_015_15_52_105
sin_015_15_52_120
sin_015_15_52_135
sin_015_15_52_150
sin_015_15_52_165
sin_015_15_52_180
sin_015_15_52_195
sin_015_15_52_210
sin_015_15_52_225
sin_015_15_52_240
sin_015_15_53_0
sin_015_15_53_15
sin_015_15_53_30
sin_015_15_53_45
sin_015_15_53_60
sin_015_15_53_75
sin_015_15_53_90
sin_015_15_53_105
sin_015_15_53_120
sin_015_15_53_135
sin_015_15_53_150
sin_015_15_53_165
sin_015_15_53_180
sin_015_15_53_195
sin_015_15_53_210
sin_015_15_53_225
sin_015_15_53_240
sin_015_15_54_0
sin_015_15_54_15
sin_015_15_54_30
sin_015_15_54_45
sin_015_15_54_60
sin_015_15_54_75
sin_015_15_54_90
sin_015_15_54_105
sin_015_15_54_120
sin_015_15_54_135
sin_015_15_54_150
sin_015_15_54_165
sin_015_15_54_180
sin_015_15_54_195
sin_015_15_54_210
sin_015_15_54_225
sin_015_15_54_240
sin_015_15_55_0
sin_015_15_55_15
sin_015_15_55_30
sin_015_15_55_45
sin_015_15_55_60
sin_015_15_55_75
sin_015_15_55_90
sin_015_15_55_105
sin_015_15_55_120
sin_015_15_55_135
sin_015_15_55_150
sin_015_15_55_165
sin_015_15_55_180
sin_015_15_55_195
sin_015_15_55_210
sin_015_15_55_225
sin_015_15_55_240
sin_015_15_56_0
sin_015_15_56_15
sin_015_15_56_30
sin_015_15_56_45
sin_015_15_56_60
sin_015_15_56_75
sin_015_15_56_90
sin_015_15_56_105
sin_015_15_56_120
sin_015_15_56_135
sin_015_15_56_150
sin_015_15_56_165
sin_015_15_56_180
sin_015_15_56_195
sin_015_15_56_210
sin_015_15_56_225
sin_015_15_56_240
sin_015_15_57_0
sin_015_15_57_15
sin_015_15_57_30
sin_015_15_57_45
sin_015_15_57_60
sin_015_15_57_75
sin_015_15_57_90
sin_015_15_57_105
sin_015_15_57_120
sin_015_15_57_135
sin_015_15_57_150
sin_015_15_57_165
sin_015_15_57_180
sin_015_15_57_195
sin_015_15_57_210
sin_015_15_57_225
sin_015_15_57_240
sin_015_15_58_0
sin_015_15_58_15
sin_015_15_58_30
sin_015_15_58_45
sin_015_15_58_60
sin_015_15_58_75
sin_015_15_58_90
sin_015_15_58_105
sin_015_15_58_120
sin_015_15_58_135
sin_015_15_58_150
sin_015_15_58_165
sin_015_15_58_180
sin_015_15_58_195
sin_015_15_58_210
sin_015_15_58_225
sin_015_15_58_240
sin_015_15_59_0
sin_015_15_59_15
sin_015_15_59_30
sin_015_15_59_45
sin_015_15_59_60
sin_015_15_59_75
sin_015_15_59_90
sin_015_15_59_105
sin_015_15_59_120
sin_015_15_59_135
sin_015_15_59_150
sin_015_15_59_165
sin_015_15_59_180
sin_015_15_59_195
sin_015_15_59_210
sin_015_15_59_225
sin_015_15_59_240
sin_015_15_60_0
sin_015_15_60_15
sin_015_15_60_30
sin_015_15_60_45
sin_015_15_60_60
sin_015_15_60_75
sin_015_15_60_90
sin_015_15_60_105
sin_015_15_60_120
sin_015_15_60_135
sin_015_15_60_150
sin_015_15_60_165
sin_015_15_60_180
sin_015_15_60_195
sin_015_15_60_210
sin_015_15_60_225
sin_015_15_60_240
sin_015_15_61_0
sin_015_15_61_15
sin_015_15_61_30
sin_015_15_61_45
sin_015_15_61_60
sin_015_15_61_75
sin_015_15_61_90
sin_015_15_61_105
sin_015_15_61_120
sin_015_15_61_135
sin_015_15_61_150
sin_015_15_61_165
sin_015_15_61_180
sin_015_15_61_195
sin_015_15_61_210
sin_015_15_61_225
sin_015_15_61_240
sin_015_15_62_0
sin_015_15_62_15
sin_015_15_62_30
sin_015_15_62_45
sin_015_15_62_60
sin_015_15_62_75
sin_015_15_62_90
sin_015_15_62_105
sin_015_15_62_120
sin_015_15_62_135
sin_015_15_62_150
sin_015_15_62_165
sin_015_15_62_180
sin_015_15_62_195
sin_015_15_62_210
sin_015_15_62_225
sin_015_15_62_240
sin_015_15_63_0
sin_015_15_63_15
sin_015_15_63_30
sin_015_15_63_45
sin_015_15_63_60
sin_015_15_63_75
sin_015_15_63_90
sin_015_15_63_105
sin_015_15_63_120
sin_015_15_63_135
sin_015_15_63_150
sin_015_15_63_165
sin_015_15_63_180
sin_015_15_63_195
sin_015_15_63_210
sin_015_15_63_225
sin_015_15_63_240
sin_015_15_64_0
sin_015_15_64_15
sin_015_15_64_30
sin_015_15_64_45
sin_015_15_64_60
sin_015_15_64_75
sin_015_15_64_90
sin_015_15_64_105
sin_015_15_64_120
sin_015_15_64_135
sin_015_15_64_150
sin_015_15_64_165
sin_015_15_64_180
sin_015_15_64_195
sin_015_15_64_210
sin_015_15_64_225
sin_015_15_64_240
sin_015_15_65_0
sin_015_15_65_15
sin_015_15_65_30
sin_015_15_65_45
sin_015_15_65_60
sin_015_15_65_75
sin_015_15_65_90
sin_015_15_65_105
sin_015_15_65_120
sin_015_15_65_135
sin_015_15_65_150
sin_015_15_65_165
sin_015_15_65_180
sin_015_15_65_195
sin_015_15_65_210
sin_015_15_65_225
sin_015_15_65_240
sin_015_15_66_0
sin_015_15_66_15
sin_015_15_66_30
sin_015_15_66_45
sin_015_15_66_60
sin_015_15_66_75
sin_015_15_66_90
sin_015_15_66_105
sin_015_15_66_120
sin_015_15_66_135
sin_015_15_66_150
sin_015_15_66_165
sin_015_15_66_180
sin_015_15_66_195
sin_015_15_66_210
sin_015_15_66_225
sin_015_15_66_240
sin_015_15_67_0
sin_015_15_67_15
sin_015_15_67_30
sin_015_15_67_45
sin_015_15_67_60
sin_015_15_67_75
sin_015_15_67_90
sin_015_15_67_105
sin_015_15_67_120
sin_015_15_67_135
sin_015_15_67_150
sin_015_15_67_165
sin_015_15_67_180
sin_015_15_67_195
sin_015_15_67_210
sin_015_15_67_225
sin_015_15_67_240
sin_015_15_68_0
sin_015_15_68_15
sin_015_15_68_30
sin_015_15_68_45
sin_015_15_68_60
sin_015_15_68_75
sin_015_15_68_90
sin_015_15_68_105
sin_015_15_68_120
sin_015_15_68_135
sin_015_15_68_150
sin_015_15_68_165
sin_015_15_68_180
sin_015_15_68_195
sin_015_15_68_210
sin_015_15_68_225
sin_015_15_68_240
sin_015_15_69_0
sin_015_15_69_15
sin_015_15_69_30
sin_015_15_69_45
sin_015_15_69_60
sin_015_15_69_75
sin_015_15_69_90
sin_015_15_69_105
sin_015_15_69_120
sin_015_15_69_135
sin_015_15_69_150
sin_015_15_69_165
sin_015_15_69_180
sin_015_15_69_195
sin_015_15_69_210
sin_015_15_69_225
sin_015_15_69_240
sin_015_15_70_0
sin_015_15_70_15
sin_015_15_70_30
sin_015_15_70_45
sin_015_15_70_60
sin_015_15_70_75
sin_015_15_70_90
sin_015_15_70_105
sin_015_15_70_120
sin_015_15_70_135
sin_015_15_70_150
sin_015_15_70_165
sin_015_15_70_180
sin_015_15_70_195
sin_015_15_70_210
sin_015_15_70_225
sin_015_15_70_240
sin_015_15_71_0
sin_015_15_71_15
sin_015_15_71_30
sin_015_15_71_45
sin_015_15_71_60
sin_015_15_71_75
sin_015_15_71_90
sin_015_15_71_105
sin_015_15_71_120
sin_015_15_71_135
sin_015_15_71_150
sin_015_15_71_165
sin_015_15_71_180
sin_015_15_71_195
sin_015_15_71_210
sin_015_15_71_225
sin_015_15_71_240
sin_015_15_72_0
sin_015_15_72_15
sin_015_15_72_30
sin_015_15_72_45
sin_015_15_72_60
sin_015_15_72_75
sin_015_15_72_90
sin_015_15_72_105
sin_015_15_72_120
sin_015_15_72_135
sin_015_15_72_150
sin_015_15_72_165
sin_015_15_72_180
sin_015_15_72_195
sin_015_15_72_210
sin_015_15_72_225
sin_015_15_72_240
sin_015_15_73_0
sin_015_15_73_15
sin_015_15_73_30
sin_015_15_73_45
sin_015_15_73_60
sin_015_15_73_75
sin_015_15_73_90
sin_015_15_73_105
sin_015_15_73_120
sin_015_15_73_135
sin_015_15_73_150
sin_015_15_73_165
sin_015_15_73_180
sin_015_15_73_195
sin_015_15_73_210
sin_015_15_73_225
sin_015_15_73_240
sin_015_15_74_0
sin_015_15_74_15
sin_015_15_74_30
sin_015_15_74_45
sin_015_15_74_60
sin_015_15_74_75
sin_015_15_74_90
sin_015_15_74_105
sin_015_15_74_120
sin_015_15_74_135
sin_015_15_74_150
sin_015_15_74_165
sin_015_15_74_180
sin_015_15_74_195
sin_015_15_74_210
sin_015_15_74_225
sin_015_15_74_240
sin_015_15_75_0
sin_015_15_75_15
sin_015_15_75_30
sin_015_15_75_45
sin_015_15_75_60
sin_015_15_75_75
sin_015_15_75_90
sin_015_15_75_105
sin_015_15_75_120
sin_015_15_75_135
sin_015_15_75_150
sin_015_15_75_165
sin_015_15_75_180
sin_015_15_75_195
sin_015_15_75_210
sin_015_15_75_225
sin_015_15_75_240
sin_015_15_76_0
sin_015_15_76_15
sin_015_15_76_30
sin_015_15_76_45
sin_015_15_76_60
sin_015_15_76_75
sin_015_15_76_90
sin_015_15_76_105
sin_015_15_76_120
sin_015_15_76_135
sin_015_15_76_150
sin_015_15_76_165
sin_015_15_76_180
sin_015_15_76_195
sin_015_15_76_210
sin_015_15_76_225
sin_015_15_76_240
sin_015_15_77_0
sin_015_15_77_15
sin_015_15_77_30
sin_015_15_77_45
sin_015_15_77_60
sin_015_15_77_75
sin_015_15_77_90
sin_015_15_77_105
sin_015_15_77_120
sin_015_15_77_135
sin_015_15_77_150
sin_015_15_77_165
sin_015_15_77_180
sin_015_15_77_195
sin_015_15_77_210
sin_015_15_77_225
sin_015_15_77_240
sin_015_15_78_0
sin_015_15_78_15
sin_015_15_78_30
sin_015_15_78_45
sin_015_15_78_60
sin_015_15_78_75
sin_015_15_78_90
sin_015_15_78_105
sin_015_15_78_120
sin_015_15_78_135
sin_015_15_78_150
sin_015_15_78_165
sin_015_15_78_180
sin_015_15_78_195
sin_015_15_78_210
sin_015_15_78_225
sin_015_15_78_240
sin_015_15_79_0
sin_015_15_79_15
sin_015_15_79_30
sin_015_15_79_45
sin_015_15_79_60
sin_015_15_79_75
sin_015_15_79_90
sin_015_15_79_105
sin_015_15_79_120
sin_015_15_79_135
sin_015_15_79_150
sin_015_15_79_165
sin_015_15_79_180
sin_015_15_79_195
sin_015_15_79_210
sin_015_15_79_225
sin_015_15_79_240
sin_015_15_80_0
sin_015_15_80_15
sin_015_15_80_30
sin_015_15_80_45
sin_015_15_80_60
sin_015_15_80_75
sin_015_15_80_90
sin_015_15_80_105
sin_015_15_80_120
sin_015_15_80_135
sin_015_15_80_150
sin_015_15_80_165
sin_015_15_80_180
sin_015_15_80_195
sin_015_15_80_210
sin_015_15_80_225
sin_015_15_80_240
sin_015_15_81_0
sin_015_15_81_15
sin_015_15_81_30
sin_015_15_81_45
sin_015_15_81_60
sin_015_15_81_75
sin_015_15_81_90
sin_015_15_81_105
sin_015_15_81_120
sin_015_15_81_135
sin_015_15_81_150
sin_015_15_81_165
sin_015_15_81_180
sin_015_15_81_195
sin_015_15_81_210
sin_015_15_81_225
sin_015_15_81_240
sin_015_15_82_0
sin_015_15_82_15
sin_015_15_82_30
sin_015_15_82_45
sin_015_15_82_60
sin_015_15_82_75
sin_015_15_82_90
sin_015_15_82_105
sin_015_15_82_120
sin_015_15_82_135
sin_015_15_82_150
sin_015_15_82_165
sin_015_15_82_180
sin_015_15_82_195
sin_015_15_82_210
sin_015_15_82_225
sin_015_15_82_240
sin_015_15_83_0
sin_015_15_83_15
sin_015_15_83_30
sin_015_15_83_45
sin_015_15_83_60
sin_015_15_83_75
sin_015_15_83_90
sin_015_15_83_105
sin_015_15_83_120
sin_015_15_83_135
sin_015_15_83_150
sin_015_15_83_165
sin_015_15_83_180
sin_015_15_83_195
sin_015_15_83_210
sin_015_15_83_225
sin_015_15_83_240
sin_015_15_84_0
sin_015_15_84_15
sin_015_15_84_30
sin_015_15_84_45
sin_015_15_84_60
sin_015_15_84_75
sin_015_15_84_90
sin_015_15_84_105
sin_015_15_84_120
sin_015_15_84_135
sin_015_15_84_150
sin_015_15_84_165
sin_015_15_84_180
sin_015_15_84_195
sin_015_15_84_210
sin_015_15_84_225
sin_015_15_84_240
sin_015_15_85_0
sin_015_15_85_15
sin_015_15_85_30
sin_015_15_85_45
sin_015_15_85_60
sin_015_15_85_75
sin_015_15_85_90
sin_015_15_85_105
sin_015_15_85_120
sin_015_15_85_135
sin_015_15_85_150
sin_015_15_85_165
sin_015_15_85_180
sin_015_15_85_195
sin_015_15_85_210
sin_015_15_85_225
sin_015_15_85_240
sin_015_15_86_0
sin_015_15_86_15
sin_015_15_86_30
sin_015_15_86_45
sin_015_15_86_60
sin_015_15_86_75
sin_015_15_86_90
sin_015_15_86_105
sin_015_15_86_120
sin_015_15_86_135
sin_015_15_86_150
sin_015_15_86_165
sin_015_15_86_180
sin_015_15_86_195
sin_015_15_86_210
sin_015_15_86_225
sin_015_15_86_240
sin_015_15_87_0
sin_015_15_87_15
sin_015_15_87_30
sin_015_15_87_45
sin_015_15_87_60
sin_015_15_87_75
sin_015_15_87_90
sin_015_15_87_105
sin_015_15_87_120
sin_015_15_87_135
sin_015_15_87_150
sin_015_15_87_165
sin_015_15_87_180
sin_015_15_87_195
sin_015_15_87_210
sin_015_15_87_225
sin_015_15_87_240
sin_015_15_88_0
sin_015_15_88_15
sin_015_15_88_30
sin_015_15_88_45
sin_015_15_88_60
sin_015_15_88_75
sin_015_15_88_90
sin_015_15_88_105
sin_015_15_88_120
sin_015_15_88_135
sin_015_15_88_150
sin_015_15_88_165
sin_015_15_88_180
sin_015_15_88_195
sin_015_15_88_210
sin_015_15_88_225
sin_015_15_88_240
sin_015_15_89_0
sin_015_15_89_15
sin_015_15_89_30
sin_015_15_89_45
sin_015_15_89_60
sin_015_15_89_75
sin_015_15_89_90
sin_015_15_89_105
sin_015_15_89_120
sin_015_15_89_135
sin_015_15_89_150
sin_015_15_89_165
sin_015_15_89_180
sin_015_15_89_195
sin_015_15_89_210
sin_015_15_89_225
sin_015_15_89_240
In [250]:
Path("./data/Synthetic/HR/").mkdir(parents=True, exist_ok=True)
Path("./data/Synthetic/LR/X2").mkdir(parents=True, exist_ok=True)
Path("./data/Synthetic/LR/X4").mkdir(parents=True, exist_ok=True)
In [ ]:
 
In [26]:
from PIL import Image
import numpy as np

def gen_sin_im(tgt_size=640, exponent_coef=0.8, max_value=255, rotate_angle=0):
    normal_size = int((np.sqrt(2)-1)*tgt_size*np.cos(np.radians(rotate_angle/np.pi)))
    size = tgt_size+normal_size*2
    im = np.linspace(0,np.pi*size,num=size)+np.pi
    im = np.sin(im**exponent_coef)
    im = np.stack([im]*size)
    im = im-im.min()
    im = im/im.max()
    im = im*max_value
    im = im.astype(np.uint8)
    # im = im[normal_size:-normal_size,normal_size:-normal_size]
    im_hr = Image.fromarray(im, mode='L')
    im_hr = im_hr.rotate(rotate_angle)
    im_hr = im_hr.crop((normal_size,normal_size,im.shape[1]-normal_size,im.shape[0]-normal_size))
    im_x2 = im_hr.copy()
    im_x4 = im_hr.copy()
    im_x2.thumbnail([tgt_size//2,tgt_size//2], resample=Image.LANCZOS)
    im_x4.thumbnail([tgt_size//4,tgt_size//4], resample=Image.LANCZOS)
    return im_hr, im_x2, im_x4

def gen_sin_im2(tgt_size=640, exponent_coef=0.8, max_value=255, rotate_angle=0, start_val = 0):
    normal_size = int((np.sqrt(2)-1)*tgt_size*np.cos(np.radians(rotate_angle/np.pi)))
    size = tgt_size+normal_size*2
    im = np.linspace(0,np.pi*size,num=size)+np.pi
    im = np.sin(im*im**exponent_coef)
    im = np.stack([im]*size)
    im = im-im.min()
    im = im/im.max()
    im = im*max_value+start_val 
    im = im.astype(np.uint8)
    # im = im[normal_size:-normal_size,normal_size:-normal_size]
    im_hr = Image.fromarray(im, mode='L')
    im_hr = im_hr.rotate(rotate_angle)
    im_hr = im_hr.crop((normal_size,normal_size,im.shape[1]-normal_size,im.shape[0]-normal_size))
    im_x2 = im_hr.copy()
    im_x4 = im_hr.copy()
    im_x2.thumbnail([tgt_size//2,tgt_size//2], resample=Image.LANCZOS)
    im_x4.thumbnail([tgt_size//4,tgt_size//4], resample=Image.LANCZOS)
    return im_hr, im_x2, im_x4
# for max_value in range(1, 255):

# im_x1, im_x2, im_x4 = gen_sin_im(size=256*4, exponent_coef=coef, max_value=max_value, rotate_angle=45)
# im_x1
In [93]:
max_value = 255    
for angle in [45,90,135]:
    coef = 0.55
    im_x1, im_x2, im_x4 = gen_sin_im(tgt_size=256*4, exponent_coef=coef, max_value=max_value, rotate_angle=angle)
    name = f"sin_{int(coef*100):03d}_{max_value}_{angle}"
    print(name)
    im_x1.save(f"./data/Synthetic/HR/{name}.png") 
    im_x2.save(f"./data/Synthetic/LR/X2/{name}.png") 
    im_x4.save(f"./data/Synthetic/LR/X4/{name}.png") 
sin_055_255_45
sin_055_255_90
sin_055_255_135
In [123]:
max_value = 255    
for angle in range(90):
    coef = .148/2
    im_x1, im_x2, im_x4 = gen_sin_im2(tgt_size=256*4, exponent_coef=coef, max_value=max_value, rotate_angle=angle)
    name = f"sin_{int(coef*100):03d}_{max_value}_{angle}"
    print(name)
    im_x1.save(f"./data/Synthetic/HR/v2{name}.png") 
    im_x2.save(f"./data/Synthetic/LR/X2/v2{name}.png") 
    im_x4.save(f"./data/Synthetic/LR/X4/v2{name}.png") 
sin_007_255_0
sin_007_255_1
sin_007_255_2
sin_007_255_3
sin_007_255_4
sin_007_255_5
sin_007_255_6
sin_007_255_7
sin_007_255_8
sin_007_255_9
sin_007_255_10
sin_007_255_11
sin_007_255_12
sin_007_255_13
sin_007_255_14
sin_007_255_15
sin_007_255_16
sin_007_255_17
sin_007_255_18
sin_007_255_19
sin_007_255_20
sin_007_255_21
sin_007_255_22
sin_007_255_23
sin_007_255_24
sin_007_255_25
sin_007_255_26
sin_007_255_27
sin_007_255_28
sin_007_255_29
sin_007_255_30
sin_007_255_31
sin_007_255_32
sin_007_255_33
sin_007_255_34
sin_007_255_35
sin_007_255_36
sin_007_255_37
sin_007_255_38
sin_007_255_39
sin_007_255_40
sin_007_255_41
sin_007_255_42
sin_007_255_43
sin_007_255_44
sin_007_255_45
sin_007_255_46
sin_007_255_47
sin_007_255_48
sin_007_255_49
sin_007_255_50
sin_007_255_51
sin_007_255_52
sin_007_255_53
sin_007_255_54
sin_007_255_55
sin_007_255_56
sin_007_255_57
sin_007_255_58
sin_007_255_59
sin_007_255_60
sin_007_255_61
sin_007_255_62
sin_007_255_63
sin_007_255_64
sin_007_255_65
sin_007_255_66
sin_007_255_67
sin_007_255_68
sin_007_255_69
sin_007_255_70
sin_007_255_71
sin_007_255_72
sin_007_255_73
sin_007_255_74
sin_007_255_75
sin_007_255_76
sin_007_255_77
sin_007_255_78
sin_007_255_79
sin_007_255_80
sin_007_255_81
sin_007_255_82
sin_007_255_83
sin_007_255_84
sin_007_255_85
sin_007_255_86
sin_007_255_87
sin_007_255_88
sin_007_255_89
In [ ]:
from PIL import Image
import numpy as np

def PSNR(y_true, y_pred, shave_border=4):
    target_data = np.array(y_true, dtype=np.float32)
    ref_data = np.array(y_pred, dtype=np.float32)

    diff = ref_data - target_data
    if shave_border > 0:
        diff = diff[shave_border:-shave_border, shave_border:-shave_border]
    rmse = np.sqrt(np.mean(np.power(diff, 2)))

    return 20 * np.log10(255. / rmse)

def _rgb2ycbcr(img, maxVal=255):
    O = np.array([[16],
                  [128],
                  [128]])
    T = np.array([[0.256788235294118, 0.504129411764706, 0.097905882352941],
                  [-0.148223529411765, -0.290992156862745, 0.439215686274510],
                  [0.439215686274510, -0.367788235294118, -0.071427450980392]])

    if maxVal == 1:
        O = O / 255.0

    t = np.reshape(img, (img.shape[0] * img.shape[1], img.shape[2]))
    t = np.dot(t, np.transpose(T))
    t[:, 0] += O[0]
    t[:, 1] += O[1]
    t[:, 2] += O[2]
    ycbcr = np.reshape(t, [img.shape[0], img.shape[1], img.shape[2]])

    return ycbcr

image = np.array(Image.open("./data/Set14/HR/monarch.png"))
np.random.seed(2)
noise = np.random.randint(-5,5,size=image.shape)

def with_noise(image, noise):
    return (image + noise).clip(0,255).astype(np.uint8)

a = _rgb2ycbcr(image)[:,:,0]
b = _rgb2ycbcr(with_noise(image, noise))[:,:,0]

image = np.array(Image.open("./data/Set14/HR/monarch.png").convert("YCbCr").getchannel(0))
c = image
d = with_noise(image, noise[:,:,0])

image = np.array(Image.open("./data/Set14/HR/monarch.png"))
y = _rgb2ycbcr(image)[:,:,0]
e = y
f = with_noise(y, noise[:,:,0])

noise_before_rgb2y = PSNR(a, b)
noise_after_pil_rgb2y = PSNR(c, d)
noise_after_mutlut_rgb2y = PSNR(e, f)

# 43.49568901720914, 38.837762584624734, 38.445220463904704
noise_before_rgb2y, noise_after_pil_rgb2y, noise_after_mutlut_rgb2y
(43.49568901720914, 38.837762584624734, 38.445220463904704)
In [254]:
for angle in range(0,271, 15):
    coef = 0.23
    max_value=255
    im_x1, im_x2, im_x4 = gen_sin_im(tgt_size=256*4, exponent_coef=coef, max_value=max_value, rotate_angle=angle)
    name = f"sin_{int(coef*100):03d}_{max_value}_{angle}"
    print(name)
    im_x1.save(f"./data/Synthetic/HR/{name}.png") 
    im_x2.save(f"./data/Synthetic/LR/X2/{name}.png") 
    im_x4.save(f"./data/Synthetic/LR/X4/{name}.png") 
sin_023_255_0
sin_023_255_15
sin_023_255_30
sin_023_255_45
sin_023_255_60
sin_023_255_75
sin_023_255_90
sin_023_255_105
sin_023_255_120
sin_023_255_135
sin_023_255_150
sin_023_255_165
sin_023_255_180
sin_023_255_195
sin_023_255_210
sin_023_255_225
sin_023_255_240
sin_023_255_255
sin_023_255_270
In [227]:
from pathlib import Path

hr = list(Path("./data/Synthetic/LR/X4/").glob("*"))
sizes = [[f,Image.open(f).size[0],Image.open(f).size[0]] for f in hr]
import pandas as pd
df = pd.DataFrame(sizes, columns=['path', 'width', 'height'])
df
Out[227]:
path width height
0 data/Synthetic/LR/X4/const_0000.png 256 256
1 data/Synthetic/LR/X4/const_0001.png 256 256
2 data/Synthetic/LR/X4/const_0002.png 256 256
3 data/Synthetic/LR/X4/const_0003.png 256 256
4 data/Synthetic/LR/X4/const_0004.png 256 256
... ... ... ...
1271 data/Synthetic/LR/X4/sin_085_253_90.png 256 256
1272 data/Synthetic/LR/X4/sin_085_253_135.png 256 256
1273 data/Synthetic/LR/X4/sin_085_254_45.png 256 256
1274 data/Synthetic/LR/X4/sin_085_254_90.png 256 256
1275 data/Synthetic/LR/X4/sin_085_254_135.png 256 256

1276 rows × 3 columns

In [ ]:
hr = list(Path("./data/Synthetic/HR/").glob("*"))
sizes = [[f,Image.open(f).size[0],Image.open(f).size[0]] for f in hr]
import pandas as pd
df = pd.DataFrame(sizes, columns=['path', 'width', 'height'])
df
Out[ ]:
path width height
0 data/Synthetic/HR/const_0000.png 1024 1024
1 data/Synthetic/HR/const_0001.png 1024 1024
2 data/Synthetic/HR/const_0002.png 1024 1024
3 data/Synthetic/HR/const_0003.png 1024 1024
4 data/Synthetic/HR/const_0004.png 1024 1024
... ... ... ...
1271 data/Synthetic/HR/sin_085_252_90.png 1024 1024
1272 data/Synthetic/HR/sin_085_253_45.png 1024 1024
1273 data/Synthetic/HR/sin_085_253_90.png 1024 1024
1274 data/Synthetic/HR/sin_085_254_45.png 1024 1024
1275 data/Synthetic/HR/sin_085_254_90.png 1024 1024

1276 rows × 3 columns

In [4]:
from matplotlib import pyplot as plt
import numpy as np
cmap = plt.get_cmap('viridis')
cmaplist = [cmap(i) for i in range(cmap.N)]
cmaplut = np.array(cmaplist)
cmaplut = np.round(cmaplut[:, 0:3]*255).astype(np.uint8)
cmaplut.shape

im = np.random.randint(0,255,size=[127,127]).astype(np.uint8)
im_c = cmaplut[im]
from PIL import Image
Image.fromarray(im_c)
Out[4]:
In [2]:
import torch
import matplotlib.pyplot as plt

def perm_roll(im, axis, amount):
  permutation = torch.roll(torch.arange(im.shape[axis], device=im.device), amount, dims=0)
  return torch.index_select(im, axis, permutation)

def shift_left(im):
  tt = perm_roll(im, axis=-2, amount=-(im.shape[-2]+1)//2)
  tt = perm_roll(tt, axis=-1, amount=-(im.shape[-1]+1)//2)
  return tt

def shift_right(im):
  tt = perm_roll(im, axis=-2, amount=(im.shape[-2]+1)//2)
  tt = perm_roll(tt, axis=-1, amount=(im.shape[-1]+1)//2)
  return tt

def circular_aperture(h, w, r=None, low_pass_frequency=False):
    if r is None:
        r = min(h//2, w//2)
    x, y = torch.meshgrid(torch.arange(-h//2, h//2), torch.arange(-w//2, w//2), indexing='ij')
    circle_dist = torch.sqrt(x**2 + y**2)
    if low_pass_frequency:
        circle_aperture = torch.where(circle_dist<r, torch.zeros_like(circle_dist), torch.ones_like(circle_dist))
    else:
        circle_aperture = torch.where(circle_dist<r, torch.ones_like(circle_dist), torch.zeros_like(circle_dist))
    return circle_aperture

def aperture(h, w, condition=None, low_pass_frequency=False):
    """torch.where(condition(circle_dist), torch.ones_like(circle_dist), torch.zeros_like(circle_dist)) """
    x, y = torch.meshgrid(torch.arange(-h//2, h//2), torch.arange(-w//2, w//2), indexing='ij')
    circle_dist = torch.sqrt(x**2 + y**2)
    if low_pass_frequency:
        circle_aperture = torch.where(condition(circle_dist), torch.zeros_like(circle_dist), torch.ones_like(circle_dist))
    else:
        circle_aperture = torch.where(condition(circle_dist), torch.ones_like(circle_dist), torch.zeros_like(circle_dist))
    return circle_aperture


def imshow(tensor, figsize=None, title="", **args):
    figsize = figsize if figsize else (13*0.8,5*0.8)
    
    if type(tensor) is list:
        for idx, el in enumerate(tensor):
            imshow(el, figsize=figsize, title=title, **args)
            plt.suptitle("{} {}".format(idx, title))
        return
    if len(tensor.shape)==4:
        for idx, el in enumerate(torch.squeeze(tensor, dim=1)):
            imshow(el, figsize=figsize, title=title, **args)
            plt.suptitle("{} {}".format(idx, title))
        return
    
    tensor = tensor.detach().cpu() if type(tensor) == torch.Tensor else tensor
    if tensor.dtype == torch.complex64:
        f, ax = plt.subplots(1, 5, figsize=figsize, gridspec_kw={'width_ratios': [46.5,3,1,46.5,3]})
        real_im = ax[0].imshow(tensor.real, **args)
        imag_im = ax[3].imshow(tensor.imag, **args)
        box = ax[1].get_position()
        box.x0 = box.x0 - 0.02
        box.x1 = box.x1 - 0.03
        ax[1].set_position(box)
        box = ax[4].get_position()
        box.x0 = box.x0 - 0.02
        box.x1 = box.x1 - 0.03
        ax[4].set_position(box)
        ax[0].set_title("real");
        ax[3].set_title("imag");
        f.colorbar(real_im, ax[1]);
        f.colorbar(imag_im, ax[4]);
        f.suptitle(title)
        ax[2].remove()
        return f, ax
    else:
        f, ax = plt.subplots(1, 2, gridspec_kw={'width_ratios': [95,5]}, figsize=figsize)
        im = ax[0].imshow(tensor, **args)
        f.colorbar(im, ax[1])
        f.suptitle(title)
        return f, ax

h, w = 640, 640
r = min(h, w)//4
imshow(aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, low_pass_frequency=False))
Out[2]:
(<Figure size 1040x400 with 2 Axes>, array([<Axes: >, <Axes: >], dtype=object))
In [73]:
aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, is_inv=True).sum()
Out[73]:
tensor(12453.)
In [11]:
from torch.fft import rfft2, irfft2, fft2, ifft2
i = 206
image = np.array(Image.open("./models/HDBHNet_L_DIV2K_x4/val/Set14/monarch_400000.png").convert("YCbCr").getchannel(0))#[i:i+48,i:i+48]
h,w = image.shape
r = min(h, w)//12
ap = aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, low_pass_frequency=False)
image = torch.tensor(image)
# image = ifft(fft2(image) * aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, is_inv=False))
image = ifft2(shift_right(shift_right(fft2(image))*ap)).real**2
f,ax=plt.subplots(1,1,figsize=[20,20])
ax.imshow(image)
Out[11]:
<matplotlib.image.AxesImage at 0x7ff3546c5c60>
In [54]:
imshow(shift_left(fft2(image))*aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, is_inv=True), figsize=[25,25])
Out[54]:
(<Figure size 2500x2500 with 4 Axes>,
 array([<Axes: title={'center': 'real'}>, <Axes: >, <Axes: >,
        <Axes: title={'center': 'imag'}>, <Axes: >], dtype=object))
In [43]:
aperture(h=h, w=w, condition=lambda circle_dist: circle_dist>r, is_inv=False).shape, fft2(image).shape
Out[43]:
(torch.Size([504, 768]), torch.Size([504, 768]))