RysonFeng commited on
Commit
b5baf02
1 Parent(s): 2b6c2bd
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +5 -2
  2. .gitignore +15 -0
  3. app.py +67 -8
  4. third_party/lama +0 -1
  5. third_party/lama/.gitignore +3 -0
  6. third_party/lama/LICENSE +3 -0
  7. third_party/lama/README.md +3 -0
  8. third_party/lama/bin/analyze_errors.py +3 -0
  9. third_party/lama/bin/blur_predicts.py +3 -0
  10. third_party/lama/bin/calc_dataset_stats.py +3 -0
  11. third_party/lama/bin/debug/analyze_overlapping_masks.sh +3 -0
  12. third_party/lama/bin/evaluate_predicts.py +3 -0
  13. third_party/lama/bin/evaluator_example.py +3 -0
  14. third_party/lama/bin/extract_masks.py +3 -0
  15. third_party/lama/bin/filter_sharded_dataset.py +3 -0
  16. third_party/lama/bin/gen_debug_mask_dataset.py +3 -0
  17. third_party/lama/bin/gen_mask_dataset.py +3 -0
  18. third_party/lama/bin/gen_mask_dataset_hydra.py +3 -0
  19. third_party/lama/bin/gen_outpainting_dataset.py +3 -0
  20. third_party/lama/bin/make_checkpoint.py +3 -0
  21. third_party/lama/bin/mask_example.py +3 -0
  22. third_party/lama/bin/paper_runfiles/blur_tests.sh +3 -0
  23. third_party/lama/bin/paper_runfiles/env.sh +3 -0
  24. third_party/lama/bin/paper_runfiles/find_best_checkpoint.py +3 -0
  25. third_party/lama/bin/paper_runfiles/generate_test_celeba-hq.sh +3 -0
  26. third_party/lama/bin/paper_runfiles/generate_test_ffhq.sh +3 -0
  27. third_party/lama/bin/paper_runfiles/generate_test_paris.sh +3 -0
  28. third_party/lama/bin/paper_runfiles/generate_test_paris_256.sh +3 -0
  29. third_party/lama/bin/paper_runfiles/generate_val_test.sh +3 -0
  30. third_party/lama/bin/paper_runfiles/predict_inner_features.sh +3 -0
  31. third_party/lama/bin/paper_runfiles/update_test_data_stats.sh +3 -0
  32. third_party/lama/bin/predict.py +3 -0
  33. third_party/lama/bin/predict_inner_features.py +3 -0
  34. third_party/lama/bin/report_from_tb.py +3 -0
  35. third_party/lama/bin/sample_from_dataset.py +3 -0
  36. third_party/lama/bin/side_by_side.py +3 -0
  37. third_party/lama/bin/split_tar.py +3 -0
  38. third_party/lama/bin/to_jit.py +3 -0
  39. third_party/lama/bin/train.py +3 -0
  40. third_party/lama/colab/LaMa_inpainting.ipynb +3 -0
  41. third_party/lama/conda_env.yml +3 -0
  42. third_party/lama/configs/analyze_mask_errors.yaml +3 -0
  43. third_party/lama/configs/data_gen/random_medium_256.yaml +3 -0
  44. third_party/lama/configs/data_gen/random_medium_512.yaml +3 -0
  45. third_party/lama/configs/data_gen/random_thick_256.yaml +3 -0
  46. third_party/lama/configs/data_gen/random_thick_512.yaml +3 -0
  47. third_party/lama/configs/data_gen/random_thin_256.yaml +3 -0
  48. third_party/lama/configs/data_gen/random_thin_512.yaml +3 -0
  49. third_party/lama/configs/debug_mask_gen.yaml +3 -0
  50. third_party/lama/configs/eval1.yaml +3 -0
.gitattributes CHANGED
@@ -32,5 +32,8 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
35
- third_party filter=lfs diff=lfs merge=lfs -text
36
- pretrained_models filter=lfs diff=lfs merge=lfs -text
 
 
 
 
32
  *.zip filter=lfs diff=lfs merge=lfs -text
33
  *.zst filter=lfs diff=lfs merge=lfs -text
34
  *tfevents* filter=lfs diff=lfs merge=lfs -text
35
+ **.png filter=lfs diff=lfs merge=lfs -text
36
+ **.gif filter=lfs diff=lfs merge=lfs -text
37
+ **.jpg filter=lfs diff=lfs merge=lfs -text
38
+ third_party/** filter=lfs diff=lfs merge=lfs -text
39
+ pretrained_models/** filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Python byte code, etc.
2
+ __pycache__/
3
+
4
+ # C/C++ object files/libraries
5
+ *.o
6
+ *.so
7
+
8
+ # macOS
9
+ **/.DS_Store
10
+
11
+ # tmp
12
+ ~*
13
+
14
+ # third_party git
15
+ third_party/**.git
app.py CHANGED
@@ -1,25 +1,84 @@
1
  import gradio as gr
2
  import numpy as np
3
-
 
 
 
 
4
  from sam_segment import predict_masks_with_sam
5
  from lama_inpaint import inpaint_img_with_lama
6
  from utils import load_img_to_array, save_array_to_img, dilate_mask, \
7
  show_mask, show_points
8
 
9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  with gr.Blocks() as demo:
11
  with gr.Row():
12
- input_img = gr.Image(label="Input")
13
- output_img = gr.Image(label="Selected Segment")
14
-
 
 
15
  with gr.Row():
16
- h = gr.Number()
17
  w = gr.Number()
 
 
 
 
 
 
 
18
 
19
- def get_select_coords(img, evt: gr.SelectData):
20
- return evt.index[1], evt.index[0]
 
 
 
 
21
 
22
- input_img.select(get_select_coords, [input_img,], [h, w])
23
 
24
  if __name__ == "__main__":
25
  demo.launch()
 
1
  import gradio as gr
2
  import numpy as np
3
+ from pathlib import Path
4
+ from matplotlib import pyplot as plt
5
+ import torch
6
+ import tempfile
7
+ import os
8
  from sam_segment import predict_masks_with_sam
9
  from lama_inpaint import inpaint_img_with_lama
10
  from utils import load_img_to_array, save_array_to_img, dilate_mask, \
11
  show_mask, show_points
12
 
13
 
14
+ def mkstemp(suffix, dir=None):
15
+ fd, path = tempfile.mkstemp(suffix=f"{suffix}", dir=dir)
16
+ os.close(fd)
17
+ return Path(path)
18
+
19
+
20
+ def get_masked_img(img, point_coords):
21
+ point_labels = [1]
22
+ dilate_kernel_size = 15
23
+ device = "cuda" if torch.cuda.is_available() else "cpu"
24
+ masks, _, _ = predict_masks_with_sam(
25
+ img,
26
+ [point_coords],
27
+ point_labels,
28
+ model_type="vit_h",
29
+ ckpt_p="pretrained_models/sam_vit_h_4b8939.pth",
30
+ device=device,
31
+ )
32
+ masks = masks.astype(np.uint8) * 255
33
+
34
+ # dilate mask to avoid unmasked edge effect
35
+ if dilate_kernel_size is not None:
36
+ masks = [dilate_mask(mask, dilate_kernel_size) for mask in masks]
37
+
38
+ figs = []
39
+ for idx, mask in enumerate(masks):
40
+ # save the pointed and masked image
41
+ tmp_p = mkstemp(".png")
42
+ dpi = plt.rcParams['figure.dpi']
43
+ height, width = img.shape[:2]
44
+ fig = plt.figure(figsize=(width/dpi/0.77, height/dpi/0.77))
45
+ plt.imshow(img)
46
+ plt.axis('off')
47
+ # show_points(plt.gca(), [point_coords], point_labels,
48
+ # size=(width*0.04)**2)
49
+ # plt.savefig(tmp_p, bbox_inches='tight', pad_inches=0)
50
+ show_mask(plt.gca(), mask, random_color=False)
51
+ plt.savefig(tmp_p, bbox_inches='tight', pad_inches=0)
52
+ figs.append(fig)
53
+ plt.close()
54
+ return figs
55
+
56
+
57
+
58
  with gr.Blocks() as demo:
59
  with gr.Row():
60
+ img = gr.Image(label="Image")
61
+ with gr.Row(label="Image with Segmentation Mask"):
62
+ img_with_mask_0 = gr.Plot()
63
+ img_with_mask_1 = gr.Plot()
64
+ img_with_mask_2 = gr.Plot()
65
  with gr.Row():
 
66
  w = gr.Number()
67
+ h = gr.Number()
68
+
69
+ predict_mask = gr.Button("Predict Mask Using SAM")
70
+
71
+
72
+ def get_select_coords(evt: gr.SelectData):
73
+ return evt.index[0], evt.index[1]
74
 
75
+ img.select(get_select_coords, [], [w, h])
76
+ predict_mask.click(
77
+ get_masked_img,
78
+ [img, [w, h]],
79
+ [img_with_mask_0, img_with_mask_1, img_with_mask_2]
80
+ )
81
 
 
82
 
83
  if __name__ == "__main__":
84
  demo.launch()
third_party/lama DELETED
@@ -1 +0,0 @@
1
- Subproject commit 7dee0e4a3cf5f73f86a820674bf471454f52b74f
 
 
third_party/lama/.gitignore ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:dbe005fc6c62133aee2511011dad6e169d913bba51490d29d36659566c7d84e9
3
+ size 1865
third_party/lama/LICENSE ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4ceeeac5a802e86c413c22b16cce8e9a22027b0250c97e6f8ac97c14cf0542c0
3
+ size 11348
third_party/lama/README.md ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:54b097c25246f2193703790ca10f3da7a134ca9cd6fee6f7f14d1e03c016df3a
3
+ size 16575
third_party/lama/bin/analyze_errors.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9019332b8309090906f49ac63fe6a6e5f1a5a03e2eedf3e56c8be6cfd6fb2dcc
3
+ size 17698
third_party/lama/bin/blur_predicts.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ed0863c166ba510175e89a373f7b950550e8008ed4b328e6b7d2c53e7237889a
3
+ size 2191
third_party/lama/bin/calc_dataset_stats.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:53e279cba5626e01ffaa7984b775603f64cdf149a72fa16a0f58000a3bcbc4ec
3
+ size 3627
third_party/lama/bin/debug/analyze_overlapping_masks.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c368f947b87d27ecda000ba96d2dd81437aa24215064f1cae1df92c86f0f1c52
3
+ size 1132
third_party/lama/bin/evaluate_predicts.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:67458a187713e1455dd1ff013bd678d608979ae49f637a22f24ee92d40de0e8b
3
+ size 3530
third_party/lama/bin/evaluator_example.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3c88b5a0d15bfa6e81b60c963aa8f32ff752b853ae3cf38966d24cccdfc8b931
3
+ size 2359
third_party/lama/bin/extract_masks.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2e90a3197316ee22fd33b01ce1df8b8e21be39288e1669ec1c9f4d7e6e0fcd19
3
+ size 1627
third_party/lama/bin/filter_sharded_dataset.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:48c820e8ec725ffbc1b625d6924dab43c5134f955e0a32bc3ee756f437e6c2f1
3
+ size 2346
third_party/lama/bin/gen_debug_mask_dataset.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ea1b7f9144b3716ebe676bb89efd9ae052e4831670ba65c3b1f05ef770da5e76
3
+ size 1909
third_party/lama/bin/gen_mask_dataset.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3f0ab3421b1b5f69b00e2e8faec6ac6ef7f980dc8ce8aed340bd99e3e5bd5a1b
3
+ size 5609
third_party/lama/bin/gen_mask_dataset_hydra.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d732574c27a74fa64c66a1afea6497e4fd87103d7da3d58e3dc83f7bb59ad46e
3
+ size 5340
third_party/lama/bin/gen_outpainting_dataset.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7457d08e1f495c3bee3de2413fdb735f252d3fe342b5e54e5372af73b1598211
3
+ size 3226
third_party/lama/bin/make_checkpoint.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d86903c380809c4c266a0ea39cae4d2fb4aa4fcae9ca51491053ac28a72c2edf
3
+ size 3097
third_party/lama/bin/mask_example.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a3d14ee869193ebb1b5ac68ea92c9506e7f9bba280ca9c4581fb170cd6ccd789
3
+ size 466
third_party/lama/bin/paper_runfiles/blur_tests.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8c8ec2117f3e600321150ed0f24d385c71edb14f2c221a2c32afe6d61a833cfc
3
+ size 1491
third_party/lama/bin/paper_runfiles/env.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:669a5d8d21c3c4400225ef11a4d424d79de578cd5fa923ef55fb930e743a7094
3
+ size 170
third_party/lama/bin/paper_runfiles/find_best_checkpoint.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:42d198b58e58ec822e1aac66d66251b87c519f8b9ec178a1c0f810f0891841ae
3
+ size 2075
third_party/lama/bin/paper_runfiles/generate_test_celeba-hq.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ecde53349bd3df42ce1e2659578ab493f78a521760168c1458c746b06c304fe9
3
+ size 603
third_party/lama/bin/paper_runfiles/generate_test_ffhq.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:27abaa6c56ac539bea34bac171d31558826399e1ea2e69742ac0bb9f93364413
3
+ size 580
third_party/lama/bin/paper_runfiles/generate_test_paris.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3b48c06f2d0197d5b52fd6dbaa3c3b24ec41d19e8ae485e920eab1f85b9e2d0c
3
+ size 593
third_party/lama/bin/paper_runfiles/generate_test_paris_256.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:174c38fc6663c4bb6eb7b259a81ec6e4b1d16df0ae40cd4329b2fb4656306a74
3
+ size 598
third_party/lama/bin/paper_runfiles/generate_val_test.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:13ea073dbdec3dcab2af58f39099f1e23f7a93e7f445ba00d3091070ab1cd329
3
+ size 1045
third_party/lama/bin/paper_runfiles/predict_inner_features.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:eebdbcad0999666cc465eea6cf5154bd90a933a044da95888de6e6f1fdf5b15a
3
+ size 841
third_party/lama/bin/paper_runfiles/update_test_data_stats.sh ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:686112f14750df31bb8dec7d603088b40a2b6b2083df6688817640c7d26d788c
3
+ size 927
third_party/lama/bin/predict.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2d7cff7b5f498e895830f97fc076f33ad61bf62c5a117f2028932b267e9d13f7
3
+ size 4092
third_party/lama/bin/predict_inner_features.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2754aedde8a69795dca8cb2ee2919ba6237397b1d0501061f684e347d35128ac
3
+ size 4938
third_party/lama/bin/report_from_tb.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c110718a1f0c37ed143eeac317a4bd3522350060e178ea655fd5d0bd32804dfc
3
+ size 2588
third_party/lama/bin/sample_from_dataset.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:eb5507435eb50c10e50f96707e77f5109b8c8f73f14c520a24b321b24b6fc642
3
+ size 3044
third_party/lama/bin/side_by_side.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9eaec563dbc98868725083fd560f729e3e50dc263b71a6ff1bbfd9f627df0b5d
3
+ size 2826
third_party/lama/bin/split_tar.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4703b7bc32216cbf08b423db5f79b92f44ecbaa73a91ebc8523302ae33064291
3
+ size 470
third_party/lama/bin/to_jit.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d38126c069b3a1091baf117ddb5b89a76b8042e9fe60945fac456674d4a90628
3
+ size 2155
third_party/lama/bin/train.py ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c831397ca8351bba57c77104a434ac1b14b1de60328e8f85a0bd33faa02311f5
3
+ size 2609
third_party/lama/colab/LaMa_inpainting.ipynb ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c9ff06f0acc792e5df6a105f319c63012ba16652e138f6f2fe0337c5db60672a
3
+ size 4656224
third_party/lama/conda_env.yml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4ecbf273c3d3c537f627319a2f1485cc3ba23f1d6e13de2da3564d3703568bbd
3
+ size 5074
third_party/lama/configs/analyze_mask_errors.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:12848aaa11ea09820526a7ff2cc434734ad42ad89c1bf8102efe368ded82cdc2
3
+ size 129
third_party/lama/configs/data_gen/random_medium_256.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5dfb4e402334890d4dc11fc94980229203173136226570422512e02c5d3d40d0
3
+ size 503
third_party/lama/configs/data_gen/random_medium_512.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bd2127ef11a3065dcbdff8e6044ea86eead96a0d57cf3c46c0d98871240a77f8
3
+ size 506
third_party/lama/configs/data_gen/random_thick_256.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f00ec6113bfedcab80650106e2530068c7229d5d7532dc91b66ee4babec27c63
3
+ size 506
third_party/lama/configs/data_gen/random_thick_512.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9be861ace6c532d5bf17b206d0983e0a9abec22f35239f7e3230da2aa2e0b2be
3
+ size 506
third_party/lama/configs/data_gen/random_thin_256.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:36f704b1545607ea51010a47362c78485e9ea5d6d0090ce7055ec870a2cbf54a
3
+ size 393
third_party/lama/configs/data_gen/random_thin_512.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4c9ade05222805dda751b027de3cf5f0c63b7f57e03e99449753385470bfd7e4
3
+ size 394
third_party/lama/configs/debug_mask_gen.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7d3a9a6fb45fb913369a8dd02d9348ef38d232c63a27a401c9255b8ae3cdffb0
3
+ size 56
third_party/lama/configs/eval1.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9886df4d30c2e24c4adb2dd4834e044f71ec340342546403e7a5e7d36b8a2eb0
3
+ size 94