From ba61f6ba332c507049444801fb8e8530e8414038 Mon Sep 17 00:00:00 2001 From: axpoems <145597137+axpoems@users.noreply.github.com> Date: Sun, 25 Feb 2024 20:01:46 +0100 Subject: [PATCH 01/28] Add cathash images --- .../bisq/desktop/common/utils/ImageUtil.java | 3 +- .../components/robohash/Configuration.java | 106 +++++++++++++----- .../resources/images/cathash/bg0/bg0_000.png | Bin 0 -> 13520 bytes .../resources/images/cathash/bg0/bg0_001.png | Bin 0 -> 14396 bytes .../resources/images/cathash/bg0/bg0_002.png | Bin 0 -> 14674 bytes .../resources/images/cathash/bg0/bg0_003.png | Bin 0 -> 14771 bytes .../resources/images/cathash/bg0/bg0_004.png | Bin 0 -> 14797 bytes .../resources/images/cathash/bg0/bg0_005.png | Bin 0 -> 14580 bytes .../resources/images/cathash/bg0/bg0_006.png | Bin 0 -> 14279 bytes .../resources/images/cathash/bg0/bg0_007.png | Bin 0 -> 14551 bytes .../resources/images/cathash/bg0/bg0_008.png | Bin 0 -> 14513 bytes .../resources/images/cathash/bg0/bg0_009.png | Bin 0 -> 14230 bytes .../resources/images/cathash/bg0/bg0_010.png | Bin 0 -> 14799 bytes .../resources/images/cathash/bg0/bg0_011.png | Bin 0 -> 14730 bytes .../resources/images/cathash/bg0/bg0_012.png | Bin 0 -> 14789 bytes .../resources/images/cathash/bg0/bg0_013.png | Bin 0 -> 14403 bytes .../resources/images/cathash/bg0/bg0_014.png | Bin 0 -> 14719 bytes .../resources/images/cathash/bg0/bg0_015.png | Bin 0 -> 14791 bytes .../resources/images/cathash/bg1/bg1_000.png | Bin 0 -> 7343 bytes .../resources/images/cathash/bg1/bg1_001.png | Bin 0 -> 6748 bytes .../resources/images/cathash/bg1/bg1_002.png | Bin 0 -> 5764 bytes .../resources/images/cathash/bg1/bg1_003.png | Bin 0 -> 5715 bytes .../resources/images/cathash/bg1/bg1_004.png | Bin 0 -> 5439 bytes .../resources/images/cathash/bg1/bg1_005.png | Bin 0 -> 3968 bytes .../resources/images/cathash/bg1/bg1_006.png | Bin 0 -> 4932 bytes .../resources/images/cathash/bg1/bg1_007.png | Bin 0 -> 4949 bytes .../resources/images/cathash/bg1/bg1_008.png | Bin 0 -> 4749 bytes .../resources/images/cathash/bg1/bg1_009.png | Bin 0 -> 3582 bytes .../resources/images/cathash/bg1/bg1_010.png | Bin 0 -> 3568 bytes .../resources/images/cathash/bg1/bg1_011.png | Bin 0 -> 5577 bytes .../resources/images/cathash/bg1/bg1_012.png | Bin 0 -> 5506 bytes .../resources/images/cathash/bg1/bg1_013.png | Bin 0 -> 7164 bytes .../resources/images/cathash/bg1/bg1_014.png | Bin 0 -> 6978 bytes .../resources/images/cathash/bg1/bg1_015.png | Bin 0 -> 5477 bytes .../resources/images/cathash/bg1/bg1_016.png | Bin 0 -> 5638 bytes .../resources/images/cathash/bg1/bg1_017.png | Bin 0 -> 6877 bytes .../resources/images/cathash/bg1/bg1_018.png | Bin 0 -> 6480 bytes .../resources/images/cathash/bg1/bg1_019.png | Bin 0 -> 5555 bytes .../resources/images/cathash/bg1/bg1_020.png | Bin 0 -> 5778 bytes .../resources/images/cathash/bg1/bg1_021.png | Bin 0 -> 3911 bytes .../resources/images/cathash/bg1/bg1_022.png | Bin 0 -> 4800 bytes .../resources/images/cathash/bg1/bg1_023.png | Bin 0 -> 4819 bytes .../resources/images/cathash/bg1/bg1_024.png | Bin 0 -> 4784 bytes .../resources/images/cathash/bg1/bg1_025.png | Bin 0 -> 3515 bytes .../resources/images/cathash/bg1/bg1_026.png | Bin 0 -> 3534 bytes .../resources/images/cathash/bg1/bg1_027.png | Bin 0 -> 5402 bytes .../resources/images/cathash/bg1/bg1_028.png | Bin 0 -> 5388 bytes .../resources/images/cathash/bg1/bg1_029.png | Bin 0 -> 6790 bytes .../resources/images/cathash/bg1/bg1_030.png | Bin 0 -> 6648 bytes .../resources/images/cathash/bg1/bg1_031.png | Bin 0 -> 5216 bytes .../images/cathash/ears0/ears0_000.png | Bin 0 -> 7939 bytes .../images/cathash/ears0/ears0_001.png | Bin 0 -> 6600 bytes .../images/cathash/ears0/ears0_002.png | Bin 0 -> 7039 bytes .../images/cathash/ears0/ears0_003.png | Bin 0 -> 7096 bytes .../images/cathash/ears0/ears0_004.png | Bin 0 -> 7004 bytes .../images/cathash/ears0/ears0_005.png | Bin 0 -> 6992 bytes .../images/cathash/ears0/ears0_006.png | Bin 0 -> 6450 bytes .../images/cathash/ears0/ears0_007.png | Bin 0 -> 7029 bytes .../images/cathash/ears0/ears0_008.png | Bin 0 -> 6964 bytes .../images/cathash/ears0/ears0_009.png | Bin 0 -> 7401 bytes .../images/cathash/ears0/ears0_010.png | Bin 0 -> 7912 bytes .../images/cathash/ears0/ears0_011.png | Bin 0 -> 8103 bytes .../images/cathash/ears0/ears0_012.png | Bin 0 -> 8046 bytes .../images/cathash/ears0/ears0_013.png | Bin 0 -> 7843 bytes .../images/cathash/ears0/ears0_014.png | Bin 0 -> 8014 bytes .../images/cathash/ears0/ears0_015.png | Bin 0 -> 7910 bytes .../images/cathash/ears1/ears1_000.png | Bin 0 -> 2292 bytes .../images/cathash/ears1/ears1_001.png | Bin 0 -> 5443 bytes .../images/cathash/ears1/ears1_002.png | Bin 0 -> 5175 bytes .../images/cathash/eyes0/eyes0_000.png | Bin 0 -> 3311 bytes .../images/cathash/eyes0/eyes0_001.png | Bin 0 -> 3867 bytes .../images/cathash/eyes0/eyes0_002.png | Bin 0 -> 4005 bytes .../images/cathash/eyes0/eyes0_003.png | Bin 0 -> 3904 bytes .../images/cathash/eyes0/eyes0_004.png | Bin 0 -> 3663 bytes .../images/cathash/eyes0/eyes0_005.png | Bin 0 -> 3669 bytes .../images/cathash/eyes0/eyes0_006.png | Bin 0 -> 3668 bytes .../images/cathash/eyes0/eyes0_007.png | Bin 0 -> 3520 bytes .../images/cathash/eyes0/eyes0_008.png | Bin 0 -> 3384 bytes .../images/cathash/eyes0/eyes0_009.png | Bin 0 -> 3746 bytes .../images/cathash/eyes0/eyes0_010.png | Bin 0 -> 3871 bytes .../images/cathash/eyes0/eyes0_011.png | Bin 0 -> 3754 bytes .../images/cathash/eyes0/eyes0_012.png | Bin 0 -> 3606 bytes .../images/cathash/eyes0/eyes0_013.png | Bin 0 -> 3564 bytes .../images/cathash/eyes0/eyes0_014.png | Bin 0 -> 3546 bytes .../images/cathash/eyes0/eyes0_015.png | Bin 0 -> 3416 bytes .../images/cathash/face0/face0_000.png | Bin 0 -> 12362 bytes .../images/cathash/face0/face0_001.png | Bin 0 -> 11620 bytes .../images/cathash/face0/face0_002.png | Bin 0 -> 12032 bytes .../images/cathash/face0/face0_003.png | Bin 0 -> 12291 bytes .../images/cathash/face0/face0_004.png | Bin 0 -> 12356 bytes .../images/cathash/face0/face0_005.png | Bin 0 -> 12200 bytes .../images/cathash/face0/face0_006.png | Bin 0 -> 11966 bytes .../images/cathash/face0/face0_007.png | Bin 0 -> 12202 bytes .../images/cathash/face0/face0_008.png | Bin 0 -> 12222 bytes .../images/cathash/face0/face0_009.png | Bin 0 -> 11925 bytes .../images/cathash/face0/face0_010.png | Bin 0 -> 12313 bytes .../images/cathash/face0/face0_011.png | Bin 0 -> 12279 bytes .../images/cathash/face0/face0_012.png | Bin 0 -> 12369 bytes .../images/cathash/face0/face0_013.png | Bin 0 -> 12104 bytes .../images/cathash/face0/face0_014.png | Bin 0 -> 12322 bytes .../images/cathash/face0/face0_015.png | Bin 0 -> 12297 bytes .../images/cathash/face1/face1_000.png | Bin 0 -> 2292 bytes .../images/cathash/face1/face1_001.png | Bin 0 -> 4841 bytes .../images/cathash/face1/face1_002.png | Bin 0 -> 4286 bytes .../images/cathash/face1/face1_003.png | Bin 0 -> 4881 bytes .../images/cathash/face1/face1_004.png | Bin 0 -> 4479 bytes .../images/cathash/face1/face1_005.png | Bin 0 -> 2292 bytes .../images/cathash/face1/face1_006.png | Bin 0 -> 2292 bytes .../images/cathash/face1/face1_007.png | Bin 0 -> 2292 bytes .../images/cathash/face1/face1_008.png | Bin 0 -> 2292 bytes .../images/cathash/face1/face1_009.png | Bin 0 -> 4640 bytes .../images/cathash/face1/face1_010.png | Bin 0 -> 4177 bytes .../images/cathash/face1/face1_011.png | Bin 0 -> 4807 bytes .../images/cathash/face1/face1_012.png | Bin 0 -> 4282 bytes .../images/cathash/face1/face1_013.png | Bin 0 -> 2292 bytes .../images/cathash/face1/face1_014.png | Bin 0 -> 2292 bytes .../images/cathash/face1/face1_015.png | Bin 0 -> 2292 bytes .../images/cathash/nose0/nose0_000.png | Bin 0 -> 2940 bytes .../images/cathash/nose0/nose0_001.png | Bin 0 -> 2704 bytes .../images/cathash/nose0/nose0_002.png | Bin 0 -> 2910 bytes .../images/cathash/nose0/nose0_003.png | Bin 0 -> 2956 bytes .../images/cathash/nose0/nose0_004.png | Bin 0 -> 2879 bytes .../images/cathash/nose0/nose0_005.png | Bin 0 -> 2873 bytes .../cathash/whiskers0/whiskers0_000.png | Bin 0 -> 3365 bytes .../cathash/whiskers0/whiskers0_001.png | Bin 0 -> 2292 bytes .../cathash/whiskers0/whiskers0_002.png | Bin 0 -> 3735 bytes .../cathash/whiskers0/whiskers0_003.png | Bin 0 -> 3405 bytes .../cathash/whiskers0/whiskers0_004.png | Bin 0 -> 2467 bytes .../cathash/whiskers0/whiskers0_005.png | Bin 0 -> 2473 bytes .../cathash/whiskers0/whiskers0_006.png | Bin 0 -> 2292 bytes .../cathash/whiskers0/whiskers0_007.png | Bin 0 -> 3661 bytes 131 files changed, 78 insertions(+), 31 deletions(-) create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_000.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_001.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_002.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_003.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_004.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_005.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_006.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_007.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_008.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_009.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_010.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_011.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_012.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_013.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_014.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_015.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_000.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_001.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_002.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_003.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_004.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_005.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_006.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_007.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_008.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_009.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_010.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_011.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_012.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_013.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_014.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_015.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_016.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_017.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_018.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_019.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_020.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_021.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_022.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_023.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_024.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_025.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_026.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_027.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_028.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_029.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_030.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_031.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_000.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_001.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_002.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_003.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_004.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_005.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_006.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_007.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_008.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_009.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_010.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_011.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_012.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_013.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_014.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_015.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_000.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_001.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_002.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_000.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_001.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_002.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_003.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_004.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_005.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_006.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_007.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_008.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_009.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_010.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_011.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_012.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_013.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_014.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_015.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_000.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_001.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_002.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_003.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_004.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_005.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_006.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_007.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_008.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_009.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_010.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_011.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_012.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_013.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_014.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_015.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_000.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_001.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_002.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_003.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_004.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_005.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_006.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_007.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_008.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_009.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_010.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_011.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_012.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_013.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_014.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_015.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/nose0/nose0_000.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/nose0/nose0_001.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/nose0/nose0_002.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/nose0/nose0_003.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/nose0/nose0_004.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/nose0/nose0_005.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_000.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_001.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_002.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_003.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_004.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_005.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_006.png create mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_007.png diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/common/utils/ImageUtil.java b/apps/desktop/desktop/src/main/java/bisq/desktop/common/utils/ImageUtil.java index 35b25ca00e..d615f8839e 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/common/utils/ImageUtil.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/common/utils/ImageUtil.java @@ -103,7 +103,8 @@ public static Image composeImage(String[] paths, int width, int height) { graphicsContext2D.clip(); for (String path : paths) { - graphicsContext2D.drawImage(new Image("images/robohash/" + path), 0, 0, width, height); +// graphicsContext2D.drawImage(new Image("images/robohash/" + path), 0, 0, width, height); + graphicsContext2D.drawImage(new Image("images/cathash/" + path), 0, 0, width, height); } SnapshotParameters snapshotParameters = new SnapshotParameters(); snapshotParameters.setFill(Color.TRANSPARENT); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java index d78ccaa929..2ecf734e94 100755 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java @@ -6,56 +6,102 @@ public class Configuration { private final static String ROOT = ""; - private final static int BUCKET_COLOR = 0; - - private static final int COLOR_COUNT = 3; - private static final int BG_COUNT = 15; - private static final int BODY_COUNT = 15; - private static final int FACE_COUNT = 15; - private static final int MOUTH_COUNT = 15; - private static final int EYES_COUNT = 15; - private static final int ACCESSORY_COUNT = 15; - - private final static int BUCKET_COUNT = 7; - private final static int FACET_COUNT = 6; - - private final static byte[] BUCKET_SIZES = new byte[]{COLOR_COUNT, BG_COUNT, BODY_COUNT, FACE_COUNT, MOUTH_COUNT, EYES_COUNT, ACCESSORY_COUNT}; - - private final static String[] INT_TO_COLOR = new String[]{ - "dark", - "green", - "light", - }; +// private final static int BUCKET_COLOR = 0; +// +// private static final int COLOR_COUNT = 3; +// private static final int BG_COUNT = 15; +// private static final int BODY_COUNT = 15; +// private static final int FACE_COUNT = 15; +// private static final int MOUTH_COUNT = 15; +// private static final int EYES_COUNT = 15; +// private static final int ACCESSORY_COUNT = 15; +// +// private final static int BUCKET_COUNT = 7; +// private final static int FACET_COUNT = 6; +// +// private final static byte[] BUCKET_SIZES = new byte[]{COLOR_COUNT, BG_COUNT, BODY_COUNT, FACE_COUNT, MOUTH_COUNT, EYES_COUNT, ACCESSORY_COUNT}; +// +// private final static String[] INT_TO_COLOR = new String[]{ +// "dark", +// "green", +// "light", +// }; + + private static final int BG0_COUNT = 15; + private static final int BG1_COUNT = 31; + private static final int EARS0_COUNT = 15; + private static final int EARS1_COUNT = 2; + private static final int FACE0_COUNT = 15; + private static final int FACE1_COUNT = 15; + private static final int EYES0_COUNT = 15; + private static final int NOSE0_COUNT = 5; + private static final int WHISKERS0_COUNT = 6; + + private final static int BUCKET_COUNT = 9; + private final static int FACET_COUNT = 9; + + private final static byte[] BUCKET_SIZES = new byte[]{BG0_COUNT, BG1_COUNT, EARS0_COUNT, EARS1_COUNT, FACE0_COUNT, + FACE1_COUNT, EYES0_COUNT, NOSE0_COUNT, WHISKERS0_COUNT}; + +// private final static String[] INT_TO_COLOR = new String[]{ +// "dark", +// "green", +// "light", +// }; private final static String[] FACET_PATH_TEMPLATES; +// static { +// String postFix = ".png"; +// FACET_PATH_TEMPLATES = new String[]{ +// ROOT + "bg/#BG_ITEM#" + postFix, +// ROOT + "#COLOR#/0_body/#COLOR#_body-#ITEM#" + postFix, +// ROOT + "#COLOR#/1_face/#COLOR#_face-#ITEM#" + postFix, +// ROOT + "#COLOR#/2_mouth/#COLOR#_mouth-#ITEM#" + postFix, +// ROOT + "#COLOR#/3_eyes/#COLOR#_eyes-#ITEM#" + postFix, +// ROOT + "#COLOR#/4_accessory/#COLOR#_accessory-#ITEM#" + postFix, +// }; +// } + static { String postFix = ".png"; FACET_PATH_TEMPLATES = new String[]{ - ROOT + "bg/#BG_ITEM#" + postFix, - ROOT + "#COLOR#/0_body/#COLOR#_body-#ITEM#" + postFix, - ROOT + "#COLOR#/1_face/#COLOR#_face-#ITEM#" + postFix, - ROOT + "#COLOR#/2_mouth/#COLOR#_mouth-#ITEM#" + postFix, - ROOT + "#COLOR#/3_eyes/#COLOR#_eyes-#ITEM#" + postFix, - ROOT + "#COLOR#/4_accessory/#COLOR#_accessory-#ITEM#" + postFix, + ROOT + "bg0/bg0_#ITEM#" + postFix, + ROOT + "bg1/bg1_#ITEM#" + postFix, + ROOT + "ears0/ears0_#ITEM#" + postFix, + ROOT + "ears1/ears1_#ITEM#" + postFix, + ROOT + "face0/face0_#ITEM#" + postFix, + ROOT + "face1/face1_#ITEM#" + postFix, + ROOT + "eyes0/eyes0_#ITEM#" + postFix, + ROOT + "nose0/nose0_#ITEM#" + postFix, + ROOT + "whiskers0/whiskers0_#ITEM#" + postFix, }; } public String[] convertToFacetParts(byte[] bucketValues) { if (bucketValues.length != BUCKET_COUNT) throw new IllegalArgumentException(); - String color = INT_TO_COLOR[bucketValues[BUCKET_COLOR]]; + //String color = INT_TO_COLOR[bucketValues[BUCKET_COLOR]]; String[] paths = new String[FACET_COUNT]; - int firstFacetBucket = BUCKET_COLOR + 1; + //int firstFacetBucket = BUCKET_COLOR + 1; + +// for (int facet = 0; facet < FACET_COUNT; facet++) { +// int bucketValue = bucketValues[firstFacetBucket + facet]; +// paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], color, bucketValue); +// } for (int facet = 0; facet < FACET_COUNT; facet++) { - int bucketValue = bucketValues[firstFacetBucket + facet]; - paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], color, bucketValue); + int bucketValue = bucketValues[facet]; + paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], bucketValue); } return paths; } + private String generatePath(String facetPathTemplate, int bucketValue) { + return facetPathTemplate.replaceAll("#ITEM#", String.format("%03d", bucketValue)); + } + private String generatePath(String facetPathTemplate, String color, int bucketValue) { return facetPathTemplate .replaceAll("#COLOR#", color) diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_000.png new file mode 100644 index 0000000000000000000000000000000000000000..525f7104fe397ddc0f6d2ea70a770faeb62af138 GIT binary patch literal 13520 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_001.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_001.png new file mode 100644 index 0000000000000000000000000000000000000000..c2f635a5f37bbd6312239bca96396c33d89f6294 GIT binary patch literal 14396 zcmYLw2Q*v%`+tNOv09a=OQss#NMlR?G>{lMXjh(qN+85*t=rS)~L~1 zHL6x^wZ}g`zwbH!oRgE>d!GB;XTP84^}hF|o{l;_m<6S}|bOTWzWc{S)r+ zv+kQh@VEZ->V}Hlt)r;{5&6Z;Uvj&Pfmwmyd;%EGBY-%7!0c5}KtkoUcQjx$>5z&T z`3OMzm!%ItFQ(^2#zvA(0%-pL1OVWGhhzY(V=PH65&;1AmfVk-AQ5gSFB9u?R)Bs_ zv!vVM(mXyYdmG?hrL_4r2pN~0TrlVPMg-*IJVoYE{VB3WrzG#?n#f|`chu*u@s+g# zAz6CP&!xs$Ly-;Fg=WVnBpdH?%)SEpb$vw+2F)J$-;Er}#}>YgR@HA}^=w zpAdUEa^m-IVtUnweqwKbSwJ?xLMOhw!!1Lt1;nbXc_K%P zN5+$R8Xex1lo%2s5!W^)&iL`>DP-?U^aP0mGZH%%+h=9TgcLN&!X9EgOhCogCWun6 zz}FSvJSh_3>nl$w=%81A%01+^apYiP`PpKA5GSh zt-vrumHtIfBl=59_9AufGfg4O<;_QRTNRlpe0%a@>&ZSlqH+mehId2@c$>6-WSlE1 z_)Pn0yB8stX>=s5((9<`9UNd9jt(ihr8av!M~2X@`r^-}iBk5I@Q=1X2bvGJq!Sg3 zDJecgxSI(K#?X4dw^v@iv9&Be;Hw7Ll>PK#D8|nHGfc}=?&Yu6N5fE2VUN_EBauu2 zH|;pfdJUg?h(H+}vv|FV)nUQoVbk*gdS-xCorGFH`jvw@E1CM486$!(Tdibe`q6UM z_4cl)s9GMS7qnYZ0TG+?@pRuTASTXo7FdLqT%cfDs$$x{qmr)J&x*`o`zNZ~IzsS0 zt4{E}2GLuzBbktHDr0ghIhpQ{AfrC4m%Tl#rKe$op#IfMPeA0r<~+fGUR^rGqB;OS;J`5TxKL@yrIJ+ zL^6Os(oo@*49$MMVX)&(c6>zNql=`Zqj7^x_ps+D-)YhI zkBQ#sSKzY2$7c+Tz6seaYUItc6z)~VbOA7uc3N;1R;2#`l+@khb(R0H4e9upPrJB$R509E^j;+ zdHK`$3Aaah20)Cd@-_UEFO7+<*+V&tJ7{Dk1;t$ix}(sBCMy|s`vzX6W`C1&mFWrZ z=&#zBp3z1iJCko8-j17zrUx6Dm7mZvZ%&w3Hoi7{P~o0y@tT%se+O-4%{t)OfE&i> z&f(_k$cm$eFhS?qPOSBBXu-E{I*K_>J&{eoE9le(p3 zj9=3W6LW_adwyP{0kBVTsYUG_Kp#i9iOmxs!XA8d&t!RDu_@Brbh`U_v}LYL2(Oqn zn`N~=*1x;pl+J6T+EJ=Zlmqo}<0iw6CU}#OMD5FWG*m>F^Sv^pQIMC=q6EL5+HLyl zH#j&NSnEQSo*Pmy^6DiWJoSy&myOX+||cP!jS4u;`apr+t1jRjBYpLN}~x^j7Vj_{P5}> zXtmOO=lwWKXMnk_TgPoi#h0#}O{t7KUBvH}@?cz^GOMV_nN*GYuaSP+BI#8$ro(*1 zhqXm*q*km-BC7vi`)k_nqc#PB1ZQ)vr?Y@%u@@7Y_runoRmjex3j* zMQ^6*(+ZwGzKJybaciq0#{M^O9tx#LeyoLXvn%10e#xE7qCD^SYcXX1Extkc#NrV(qrj#UY+ZyPF2T zGdy~WVL&VdnFw4#p&@W+ zljGo>996oy@cXcAufO`G?`Z|48h+zXZM@G9{Jp}>8p!b?Yqo1FRwgl!^{>CkFl$qy z#q+nHWp&3K3KP#N6lp?zK9&D=40n$V_|>Z9(?IKf!`+&-qb`JdywKN*wFxBITl4`a zeB3>_I~de_q8~V?8nR1NR_D|Q)Ve&>7Dl@*C7E@Vp6 zWiJ9x&y?!cs$S6{_CLblKQJF>j z&q|C)qNbM6UJqVg{vH$cK_XEiK=1Ku#b+Pp!QDxfk~IzkeCg^4k2`4WSm-TfT7MQ- zCbKGP7!=96XjtF@VhmCGqzVhOKA<}CoZWdf;OPYaDu`Cui5s5jk1Hs{SUz~4EHK-; zVE!c+A+X+SR=b3ryHRui1$@rqIhAK}jnwIc9)HVf=)90D?7qgA zzN|%vkQ|4162+A#l5+Ay?TgBg;&&0)vpLS+%c-C{8QPL;&LqzRV{u za`$xr7pznbniGktXKH;x-oGR>v$JY#z9^ev_^R{PYd_ndEGV!hNWrLF_g^KMlN3TF zx_zGW^|=l?Ump$p8yt!GbZkhLS6@&mBY)4g?}MD076w~kR57^2MtE)20Yw_GAvhEYP&yMi}qwEDD&-gJl@)8GS!e@}PC!6p8? z%b76_CuU@Fx10FRL)#YL`M!X$?x2u?;#W2yR&rEDUgRe+4Yw_xf7J{r38(d!JO75$8tQH7AeA2cn-*@j0iGeojf9BaA zbR-qZIT=Y1oJx33GT;sF^0LVP{_&XCaJ9D#hK3$nObdw4ygCtc11PKmyvP1;0X$FZ5{v>epr1-JjK+C zm{n7YNYH#TqAzwKhtlFTl=uG-?=`D89KPgKf)iHf#y+CgB7sK5aDJuFUVD+kQeH5L z!Per!!m{#08sx(j+Mu!`ZnW=Ci^#$f$F^>z`s|y+EWJTlJ)%A6qn$fy=Xii$yf!w7 z-8{b-4|WP9L%M`PddgkCNMBk1!V!+!2vlU2onEX1q)~zH=b#&9Bv6g^L)olms=DwZ z6uM&`Jj|qOw5It&NneK5h^A@cngk6S4LC)a%zj{HYJa3uVj=B311M4@z~g*vyb$AP zL{7*=L%2hq9xek4n=NAH05t$mV;(@LE^}ruz-6OlQCRA(2t;q<2Ns-P_%*gvlF(1o zyjtvR9hy4+~5Hh@h@yRklg?7(J`vP6c4IeAQl=JCm@0O19AdQQYG*X0D|eMi}1c|t}TrC>4yd~M`cG=xot;E}I>s#@9h z_(!j7iyUcI)H8$^U&3>D99(d-or^oH<_hhMRruRk@Fja5 zhF6Y@&CZ9;Ud^h-F-ECJCW}DqRXp?hR-Vk)o#GGv^!eB7`DS8%>jezL$s8eY-b4C% z%W=-OuhW97NEA%V->jxwhzzz{GF$ha;Z?%leclv|m*0ohQ8<|qnVg8iZ3}tJZ40L( zlZUPh8KR4y3Ks#`MBltH9beFb?wGEsAYEF$AcYw_^Hu}!$b1E3P$P2wd0xZwbhkp(LkjthUtahwPhLF$Gmj9D*09X{uW@=+sX6w-QK@I_ z$Xjcgv?BN2^G?rI|E~UyGHnkZ-BoJj;b8EgBiVn-7(FC4(iiPdqP>QESb`hAD}pl& zP!1J7SmK)^W5x-+nH<}y*lS|@}uW-Z*HdmXh zlV*AN5wqUDEHk&o_Dy%Us3biX`@~9D1lE)&US6_iuAIWd)?Bw4;tA@Lc{HbkLnFu@ z^*`2)7aWP|iij~q6-ue0T$cmhsmh`4?aZb6Y7A_UWd*9GS5PsZTbY3%cto!NPoLSn znt(1s|6gBA<7C%mNNN(P_q-Y{Z(*v@ZK!kZ39_!2euhu4%yr_>mdtR(7|Lt7@#+*p6mx9mC)_70 zfW!+gzGXr}Y>XvVvliPTD$c}z4C?CPpv>KynrHmJlS$34=nfnEIYcU-aNlFAx%Bm~ zJ0-1Y`?8V&{W*P!ZV-HoaN2f*>gcfY7l4sU zjd*IVU?G#904lL@7v!KOVM<21aQEHwC&S4I7!hZ0croqA(MNB^TEhDK+v*Sg^9nA@ z4;9WKtgekr8HelrkBkAWzRP8O6qV0mBo8C!)fA zU;;97eUC|8mm!<)LF7`f6B1WIiZ{4E&qe6*{Kz`y*C3$p>8q%MJ<8h=_8d}&kC zpU4-(O}}+nQIY^S^Z|qzxf!tEuwR_B3Z8gnFGmJ5pewSYa^wqxgg*O`5APd1o8jhP zCcDfr>S&wIx)}Lbhb)WIr-+=iv^;vEX}oPZ2&?ZPUm&FVgrJ}p+#Y@i_{AN|MyfY1 z>ZF`kOyQ{5QciC1*IJ?10c!bATRH9NE2u`9ibeZIRY~aQ+{VFM412YN^`{SPSr?Gi zg|a_D*ev-UPX%>O%W`D4MOqiEUyw2nx6j-iQdXmQ@`I%a5~dFmQTHzI2WSm&j+o2j zx0lXWtR>0|>=iZTL~>nLr@AQ>8T4p>xr%DfbN9cK@>4bcLarl7j?8}y0^2*5yfa>^ zHg%#x_HS4{JtoLU2P}_Ga0o3!NQw%8e~)j-DM~H&+4JL!s3V+5B>H>GfiMok-n0Cd zA3*+F1y^bHHb$@B!Cx*T4PYxR-`6%KLU=PWsOxFr2xnuVal#hCPs`Q+Eza?h1jjfz zsnT@MB;EumOZYL}q8@9(TgjjVRK3JDtBTPEExa{OOGHwkGoA9LH8EEa!7-0|SzX2K zL8e;L|A}q!&Q(ru2`zJ8x&eDx-KX(xF;dT+fXU8YTX44l`T|_-nOryh@yThwaqDR__6#Z|;+fyR{ zd}nnSYifB8>^gMJ$9=w3cj~FH!&PMbCz2m~inBXc%BuK(@!)unO4nf_x^k3GfM-{S-;t)RF6 zWgr0iHdH{)Va_ftMlI+`zKWKs`BhijpH&1+sA5+(*S3_Vvj)-gzx@ZI{f?MayoIM! z3!h!__6)45MTqc1kbY_~%JyYZ!W3m21t}6p6{)pXllzwX*NfDb*Rk$yu+L~C4QFc0 zsV3XyS{+NG-haIGwl=+oZ*0Fi`kZnNS(y@>#3wgY7D`DORFzJv3i^)^88WHSq|s%@ ziVpdZb#nrVsK_>f!TxaIe|%KFP5ZplGCGIU>yU~YoXzCh3sUwOlEX~vkU_-ZNXbLmRv-X?ZE%;iW3@?^?B^*-sAu1ntKi(EyfTLi^$2@I{2YVYM&;exnuv2 zCESSTWT^T}`jSj&A2keuXg7mRwc0#p6M1PVNK}zuoQm}8ts{>GU;2Q|C}OX$sq4?D zu(I-1G$cd%uOIJKw*M)CE`)on9osWo&6$SR*;uD;q~z8{e~;B=W@=fp&L;^^ayF#f z?Z?6QJ#t|dD`Km1N6NbUDBmrhuwv+8RLK1RKDx`YiUvL=3Yh~Qn`T9s8uLB+_zk%B zvR?hjX_o1_5Qzr>WC;4`(Y~8>O)*^8)|z$ET3X%oBEv!rzs^8`1gj)ckph&!&jExP9L2Qrpux22`hkjg{yw)B ziacj+n095D&8qzJ4xiwDK5ZuHkNUoj`1<;)<=lb{YFFQ8b{V&3 z5mWV{pYv{~+0`#(=r6D9E+Yq<0#W36zUZHqq;G*oqYb*+3gxe=v4j6ADMdcMBNIMf z9%Mhl&NW!I|If4;76=K9yC|w3ERFmMue}LF$w>M-=~a0MPkXpvZ)jV>B7zZB0>4 zx#V*&ek*4BUaZbCK1C%aoKz?PU{7!9iegcRIpL5TVZhP;14Xj{QkgYE<4YBITW-Ci!ITXEP z_8)z>&4#mAzoS2v9Vvw0l8NSvI5_ODA3xHYz5c&Y+6k6ecv1snE&pWEle7M*-GDyCo?tMn5!=f5HxG>N;OYT+6AYLk3#Zs zCph#bm^Zu`ygPW8TIAtuGp5zB{W!j@{p!xMgtPt8%1XNc6jM0ez{mOH_iR&@)bEIQY&-$yqPh zB(ZhDcy)86iDrmQ<@9BJ0fAhy-$al23#>8OzMFha>9(6xE@{!D4(H=4a~-GR(UP;#uuuOnY9a^ifFnrQRNpH|4`qzw?il5H|@g zS`H5X9@mAymzO55M#V>6s_N3OnAvDO#|$LEAR9M33OxheQqy1RvY!L8sn5r{Y$?sD zKp{nNzb9=!(@*GRbnQi_94V2t^7-c_>;VZgO3Rr<-tEsJ@-~BBdc@CQ+`Ww?Szi-l z_o}x-DCEbu+u9;Q)nFKhMSvUrlT=JjU;Hwc;-|A4+3~E;NJDxt(AxqfXrXXH@p-{m zD8#9?+^%tL$yPzihK6}}cfBzt{=|^1?(V_sfT)5Gq4n&#PWHD%!uU-rgIG5Wg@w=U zrZ*2YX0@~9*)O@}0Xx``9yU;@GkwlHROo_(3_Aw2HUIGaZyayRyY0o07@ZR&8SDC5 zYH;`(u^*GsJmf|5SggnTrS%XxFV1$QJ~~G$_!<3K?Sc(garFN7b(L{tvR?u`OCLMt zrFM1sh`rva`iQhE30?)5>?-07`$n0HavttJ86U_!Fxb;T^-to#rxFbSfMx0OS%BYh z7>y(2YVoPBC}eGw+Qbef6AnH?-if-2E*$LkxUK4f6UW$uG?1;o_3YhT9i4RVwKkd zvlvf&IdXpC(A>;#z8{UZyRw{i79T<|F>0@D=kCH5WXE3DJCd+^mayxR%Qr8%dCPw{ z{=8{+D!v-d6cxcMf_e381kHb{&q!|K|U! z|Mal3o+}fcX4`NFVl3Pp+Lc8X(zvTQ_+%=#+GdrxmC2d~c^r2(U*xiw;Uh=_z^3av;JNEr7cRmGOTa;;g;OxvZYEUC*}d^8es2S|6P8az~N6d z4TMgM81BO|%`eDCf(|xT54yt68EYw z*)#NucH23tTntW^qsp=%x_ajr;I`+rTOyq{br4Q<%@8>4`zP~SYn0xb>r;;bSPMZrDTMvKAMp+T z4(fn`o?%l{D((e}MI z&1VT&;_b-sPG;Dk10(eT#q9lyGn4mk?G8gjj5#KxEl?UpoCL$S1#+nRhE-4U$%of+ zgNtV=zEnZBXE{g>hd?Q?!#AqA122rVYH;%(jE}MJ>>Z9l{4L9=0gJTOq!|0vvXd-~ z)aPmTK6qK+T!e5!cL0S=>x?J-P=Q(+ufj=r1aXQ@-<+aZXVg6P7*Ol(b+K22%Tkd# zt=?RCnZ~b+T;i+h9*Q15L-ziZ;6+N3(RntYN%P3Bz-=r0RL9m9b2yni*ayx*_ zMt!(m*;iFfT#>z;f-;RsQ`yq3Qgcs{`tq@VPr~@?B3FMI-jVymP)`s0cO3AFyvhRc zbmvW9v|pm&H!TKZ3R34K494O2wfB=f)-Zf_LN4ZVAeh3qUQFt~yuw%B7SOdPYf8U? zDq_O(t(QRaEFL&~{x`WN1FBO&xz(7H>@}~=@QtVeKyxBt<64XSFOBrPrBmVLq$V&2r)2gM{*}2 z54{(9T>X0;bD<|PmYNL3W|=xo^nxuW8;k?=CK<2(1XeRY{|{eG0($G9U^C(uOJ+CI zY$>4UesApb({-3T*f+5;d7$fp@g(3hzrA`yjEgThURBGl6KTM%b2&tqf`22{&rE_= zS!gjNUoZ@7cF(%w7RALYJLPF$5(w;=$gQ;O6(&skCfniF3F{?K)84k8OT9EBY>wVG zND_w0p;|MLo(b_${(n|75%#0KF2L(Td8fI=xnc{l@xkFAt&ebMXHxb}@SI!!d*n2E z^pJ!>f%oRn&HguXDEkSyjIE7E0Qk-wKa*f7yH-B(1!pOeO<)v-m!))cu_1U<~2*-cO>c zL_^C{V+>ntAExF$N2OOqq^Vb90oZG20&RAc=BRS0@>?wRUb5DuLUdDDKn+jEyTrLg%h(gF2e z7z_FqZ))sL-sd%b$9q!WHzKRpQhjntcw6l75?hdlz}Y{zGdULDi!hz|Ta05h)&pJR zLi)o7b$lkD`n?ahhe^%L%%>-=p-^S&&*NB7u_*>D|LvMQ6+jE!wc9N^cyFS8g-=tcBtXsQqKPSr0~2`icU%W!{7ByiMtqLxPbT=8G>j3 zfbFPnE#}^Ba!_i!RLZpZ7(Rd%%MC!hXkzueMJhhHn6GOcOEQ_Qq2;!gL-oTLlOdPN zwCQ@G+k{L{daYqjy_jLG92LR)XdIdbWEU77H01yJPZp{Hu??o#z)9ztf3-5k8R;AA zt>P&jQf;{N8V8!jP>*dU3Ju^!kZ$9H}^{ElqZzvFs|DjG)E^t|1sU>Vf*c2cueD-Y`!sTCt4>)<)(A z9bo9(ciFmjMViFZaqn^H3@}b664QSB%Q4?U#|CpteYt`7Cm8Fx9Uvcd}G%u7*s1WI0$L4)F&GyIHfE zn2?0!8W4Kv(ZSF71?j{R{DU?bJV6bv{eZr;sU!CD2s8E9*Yyr^2ruL|XzrXe#%Gv; z+^>lYLc|N#vzm>#-0!=B+E$M>8>oq&GI^=fqM#h1DMZ?OQ4RaIVVU>21Z6;x@Dt_- zK?v1W{(7_}Wa=-x!ZeJ(e}6Q>!7b76jXR~dp~aDfK&e@E9feFG5Of9aUH9)K{C#@k zye&Om1CcsY&fXOB^;SS?@zN*&_AWRd#6p95$cGISZ2`?EKUeBek6KE3tY3RoK#v!s zXOo|DAuV@LVQ$x$&MNN!p|{3>h_hF#a2L8I)wRmz($WEaq4buv^Y&;n=|QG!!$KcV zOFbM1`1gSw|Hn?zAhzkgZqP>)(t1>w@2gh+v^Ph1oeMuWjPSivxaCPy;|S5af1Y7c zailRjqUm>KgC1O)gYM`3?xO2p;PQ9gL=DMWhsI}U7)r)Od^D=6jh4g=bc?jlsU^4y zV#lKAbhpZ8#irj%dOp^}F@Xi{7M=QSPwX8ISlUNJHW-HSg@sW@RVK&{Rm{TS;ojVn z!+@NQI+XAy6fdUSxiPchOiS@x9!TeTvq{J*Nq%U6xGRlZii-cxbX`=2t_NFf= zV9f8|G1qhW*`rQXV&qOTY5P=cEJlJ6Izu_XM&`UmzP%`Il<|egCL>g{fnWFLKn)41 zme5qjY2&dBs`79$2aukDll#9J%y2?jUAHcw5Ro?c+BJVag89X`R$1|mLf)V5{qVnmkT;u*x^x11abS&;a*3n`mYIQjfc;S=F&>N_-cU$`Y~2Us+i)7m=Od`b#LxJ%K7`LN$-uI(&*-q~eiQ!*KH8 zH|YTbxLRR3d_sc2Z@p+_B}Xr!iV^nSob>^6et4qyb1_AAKSGE>ugOY96*b<8K z@_iMvQ1h>u1*&WOeJi+DB&kv6;_(7~K|@+|R2^D!JONt*?=?HH%Ss(`3i{b64XFAJL|&dJiTFl}TKd=JLEIKh>sA{@Hk?g5s;UJ{d*f$3~^y z2i|{JB&avIX*7e@$R0rPL9r%h*M-BLdl%&h<4BEE<;37$vbYi6MF`*cS1?0|D5k+<=bs3lIR@0%hw5o z0;;oAv|5wCO;-0e*ve6+pOj;nbf1IjtGLJut~|BMug*>3bd|k(p|aoRCQ*LzqYxW@ zH}VRm?{iw=Y|-pJxBfFq*gKr0R(7*#Kcni_x z=Cv8FO4GQJH)pCl>u${pGZzju5o?YqNw~AA?himDq^mW7C{8XiwR&UGH68TUyOAm1 zp-u2Qsrk35nER5la&sxoXPtsmo>r$?)u~KtH&b#BHr(^?pyBF9m zy3KEc{uG6KnI_AT>p2(SLLBJQ@)gTd6Fz8DHlvUzIVAZ`&={1)5VrM!vrVm3zP#D< z!PIoL9YfCgP<%luOEooVuaqxNR3j+iMjnrI;z=WXFpHO`r^Xck|a(G zI}KRh{FrT|5NBibB{p>?3iagL@B_!!c#)~z4`(`Big_qQH7BO1-N$eR7~4yWk+py? zp}(K;GRZqV&SUlhS{d==n zPT5B%=oPLjUEdjyVdE;@PLJs6H33EQ(IBhDY%>LO4duYw#5^j2({($VMimyW8NR{h zQH>n?a2bb=Th!)=KfQ;ZntYuYI{_p|Ly zMvbzL)^1&Ff8^i#&cHgyad#L>|CVeSK+83-?Bfk2%|~*)cE2nDnt_DP4r@IhB!8Rp zFIvYz?%{YZt%dLJ#GH+nSIurblLY<%419j9u@hGLa~UjpQzY5%GfN(H{V*li=j4DH zZbAm7M@Swd{yrW$|8yp=NZxYxJ&>Oa`II=^ihdTGn4wWo(vQ^pNEgzC4>_ISgR2%? zJ3C|$q1+LPB(J^lD}xqnuFqL2`ZuXI+|HU+J8Lo)|GBhII}GH#iTK?-)64;Bn>1`} zNHl6&Ei6Oo-9nP(Pi0d+_6Jy{vrOuQU>razCRPviY@7I3WI5VnzT^a1JO`WGzOTb3 z>O?pZBv}41ChCh`=boMLY#gLqT&YpBQvEfQ))6l7rSiSHmigd;xxnp^n#?qRpFn4p z!eGMtYd)rR(>=unRVOuG9^pl>h!zp1;k9sy* zhuNdYhLaTXf6So9Mn(}1f=P->TQw2Ixn@g9*oY8QswstS%L5)E_2{=8)Uk&tDZP$6 zf)?7h>lA((`rST0-}XNdNLna)GqdRz5!2R5N7TR#_hk?JY!lBUj!wx4+Te$>Q-YYj zZi7}O8FCR0SqC$uTiSG{SSkgUD|*l1D!_0*oBN3|=~bS0E*kV4{a{gHM4HLl#CVzG z42y1RHVO$< z^zNo6?tngOX_%aW15Cj4EHfOdSwcZAU%|;^XiUw&(Y(0xCq$+3lW971KZh3Z>Y5hlHf1u1!q5Cc)qBaJ9zoaM zZjomyV!tffmaTV+?}$E|(r_JKLdwirAef?6A*&idOckbT5Csg{f*E7TZrJQ(qOblI(#i z`a|vvXOD{5mc_m%wtLf?(dX{36*x+3tV{Oq;rXG|WgH6|f4ApG*R^H2dlyk@CY=!w z3rWlihz0_$bURv*ins^khXP1s(NItNS3npe_=T|r2-($6N9>2c{u7yGXyqonVupR5 z?e}^zylb*=cx>kzQ})c)Z_&F2cJ}MiYlq0HSNJSrhO4i6tjBKHzEpQUv43{q?F2X= zGFyf6z-xPjtsL;L9THPbK{uU#oN>Skyc6=jo|I{uWz?X*n;Q`S{wU)b2+Gu& zzF{#&t-bmP-({lkB{MWO_$qULXAcdzy#-m(g44hIw_$fGJiS`k%7b-xZ<0I87Lwj> zTXRyKwTTy+ZLhuOMKAx}8z`z{)~3TfYxW$HzxVN3t-PlkC+PIf7$Bc5oZ|G(OVVP*LykEQ9nqAmEXj&Vv#a HtH}QcB)-$1 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_002.png new file mode 100644 index 0000000000000000000000000000000000000000..0eb90fb81f317cac5ef6bb43dfefde85c5286ed3 GIT binary patch literal 14674 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 HAVdE@d|P!X literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_003.png new file mode 100644 index 0000000000000000000000000000000000000000..5040e7824cc2314d0d22e2524b7b9ff94f10581b GIT binary patch literal 14771 zcmX|o2RPeN_dgo7i;&n`)QDY0OKX?Jsv1G86jf^PRhrsbMG2*9*Ctl&E%vTeduwae zs6GDa`~Kfwo+nSnbH4Z9bMBd+dv2tz_7f^{W^w`o0xAu46+Hq1Lg>FY>23T!zJW2G z_z!@)l7>Dh{uMxK9YH|ANuZ&ksPALGlSbkLQl08{cMybRs)GPIk-_|`^tmT7^nt4M zQ2r?WrwSJ4AQ}qpC*bu{fWB5}&jZ;MJ}2uqYAuIqc8ij-?q?$=9#zfec4`#6 z+!_jHWcoU;jKzMG8-?VwI^g zOkgdKcZV+Ar4bc=V!T|fB+mr8FIlMboavU~a@&VzeqR!F%d0+lj#Sa`Uoz)76rQm} zFl^cV4)~0r)7kv0Hou-bT^aE{L80L4vy>BLf?;_{!&tD`Fg8J*?C}d)A7M9ttcS?9;_GcGU`i-=TXRc{%Lsc z(em!vEVEJVciI;X6U$hm@(0C7eU zMdJ_M?n4GYWmD6)9-Q?q{cRx56QYHHM^Un2&S7(>rukxOJAn$=BPJ7BCDqE(96P)v=ZW@9cD@b-aw@4`@D#8<*)lYS;uboV%$_=jBpevFKd-Ob)r=5phV;S^VL`0 zKiIyh84A6SHP*|*)T(qhnlEaI0>wYfR+e$*S?;woi0+z7KKJIs0kg?iqL-Gr)y~;M z;MtL+=-fLwhDs3lXPK?u8@7%*p9$u~z4yiW=J!*pWzPY)=4BxTu7KuOA7&fGrDv-T zK7dFjolTEK$uFOkh-RvnlVVt>XhY!ZMAAQ?p zKl*y7E6$ZQ?$)PGud~Md6&FUjvLNI^;bBnJ7F9W9=?@;v{2+H=bzhGf>EFj@Z?yjG2-`c-6h}|^zIGy?q7cYXBy7X$O zgDTrSwj6kojDTo47!(EBxCXW04k=7xA-IM$Sp53M8`JR%6NK?|XjN zBV$)n4!aA3HYreMwRReHA8KhLiGTYJEb)=^v631teP@u!^s|4R#AhRT_r0e~@jNGp z%Z-h&UrYA19=1DV-B8a@-_>UGeF)WzMxn9VAYKLH4MK|uGnAf(p zXBmwrTy%X{I|ki2uEm!+e$)e+SIE8+_VkZhYR|m8bO@>^mx~@|?ep176>s@WPb&iU zemYN1FAiLsZ*^F^RDquW9GNvb@3+5a6ayvgfse9(lk~cd7EFt5J?q7BF{jSZ? zC`UynB9QcyU+*+k4f_rIMxrtlvQD%D25Vu}3BCG9L}#S(eH{8;70vs7n4~5_4z~gV z#LW|c<(43%f+OQwRXq=!SN`Op-0lPKbptrm2G8>ep z-AzOKl?8$DaAK~gtvINput=A7>qk4>E%W7X$F1xL!fV$*!rxrv1prglHJy5OcK@QMZ10$!d1@L`Zt|^wG5VkT zk6cUa7@!3;!Fs+1`fbdKlYyLm7t)|a1`%fr$({28Dnk8Khwif=2@8Z6>bsSiL$pm= z7S{FY7PnfZr9gFIzN_F+p*w_PqHLgS>NL`agk`f0djoCJ z%HWt8KP9EAkX;^)Di?2Y!B8P);%L?49JfNE1%mtA2+8KH1_ZW)vqYzQR~m`MNrLjN;1 zleCs%9v<}B+islWWzc4i3$1bGYBqN%NDIG>#dac`HF0lkwojVEa7pjd!jP>p%7d@$ zG{=Do{vuy$JvPo`eRW<I6(455c7RL=;V57)ars z5vJXfBdjVK4zs{)bDYm!@<=lwRZN-<$0H1RDKM<%z{=976@zR&|069ymd6Y$24O*A zT2l)8M%O?0%{DKfug_|}+cK1>gP?UNRbVl9=1OyS+3v$f_j@0a-RG4`1FL9;*V)K3 z<&{yLA4R@@$h%?!Ef=7WATDDq+o^i~0X?ZQB#4#ANekc@r}JQQ#- z3MzZv<}<1ECLn`-&rbzm632^3iJVyaRI;V-p#S<4&c03xco$m5M4Dk4aQ^#)7nMA= z(1(p19@eN^%q>B~A%M>Pgpj{>y?9tSu4PP|n%J()@e80k5uPqRxG1HI^?C4HRR{=x z!-{Ktjp*f)PQN|6Qq61VUo^BQ1{UeXJu=R`QV8Z*a`pFeG(Fehc;#*s@3KFch$vuA zX|Q9QR%3wbUHp*&MOzxDn~j$ke1b(5^iXMvQ3l$P(u@QX!2D%uUv%u7Z!M7J+cGC+ zfnK5^{-3B)s3+qVy>^flN@Gga#yESi$4fwkRu=$1mbct&*N#X!u1reiy9N+E`mNI6 zgI0AX{MK5bBLIWL{B9XY9UAL&?aoEq|8aE_6bF<3$Ii^Jrs zS<+2Xn-u-*PxM|S7qUa02KuNa%G#K?nChJX+jD=LU&_(j+NR#O1{my!Xh@Wq@DzUMwGCL5Bm>8kOJL#>JK|&7s`0HDWRUsl-Vx&4VRw-+O zzi0McNHNKts!?WSw{~z3CGI9ftzL%*i{eX7dKv}AQ{hmua9sN-Zz)wvwD4VcUjv zMbu^^$&GFi$-QY0m_jp|VcZuegdfB02f2a-%v6Qw(GVN6{q$#MZDd>LLvCHN?BTzN z0l~qq0i|YrzDFI34u%Y}QE%G3#ZPEH*u=e_Djv-QLj|_Tb*!*=(iiJg>tXv7RkfrJ0}Sy*=D1 zl<`t2wG6hwkukXu?+KeWt(oYDw%vB8ASHM+Lc4Sy zGy&j!^*~SJXrRhsvolF8Ix{uL_4FQ8E>QidVZ%;#d=76EeK75afSPSS&QS0YZ|J{!|J^+4L6Z_Ep2H zP4jCk_owmt3eSktuoXu@sL3{Yv5;0C4U&>HB!Cs# z4Sb2elYUq$nl9z@kueYuDJXaovDchThkqz@c0HWaN_xx(Nz^R-#iCrT)P^!!HU!-? z{9UJ_9`u%R4D`sOl>YaKB$2d)Tl%GC>+d}P8i%r3HcaFeg6p)kOU~XpDD`V}^Tu_t zIb4UzsWsU0{zn==wOh9icE8Msm&n)0>E`ErBcZDgKOG)$G~_`P7f>pea@wbPUd}W- z;~+9$tegZ`N%7WbMT(TcOt>yQWAR31slwfth+&?raO$>rq~!GZetqxB$f#Sya;2Ll9yiu?_gscPr?vDh8Fh9?Q@4xpU=iq@an&KaXXADFw_=>E%7{H)^Fsg?BG%N`KjW$$0BDFbPSMcsEd~u?dgXkw zoo2JUW3fj-{;j(Mdkc>bo&m5+55HWA1UU3G1Qnu;O-R84VW6tFk_;`(7lCD)Kp0Nz z{iPL}9WRO{BhIO~lDs`_f5(S4#-Rvvj2J(O@q*uC{I`m% za0Mr?w%NVEr?2Y=mKw5-ZVMB`J?58M3rg%47AjUm5YmkDbRa(>fD94;;T30JfHRJ< zTh9QeSYjDj_m&Xu+EubG&)00dT_o0t7mo_Zn`i#R(iSqdTeRbn7{NPHs|Ys$e1MJK zOu7eG#^<=*GVvR`KpUt`EKh_-IrW_~+0h_N9e<5M&q{c#F$UIBlKXG4PrU}IFu$VMR&BN58p?M z+sqm_%_-HPA@qVV%~5gddu9@4tceCNzc6NN06bya|_y1wM2Lr$bUmHM?t5e6HfJsXM zv|&JeSU#kYIh$Iaj8=2He)d5I!`c>~K7?J)l)9f+lIt5r?uVCla8TvMhbwgMOTV`X zmgQY#X!OoRDkj?BLoM}V{;>g+k_#{H4X&lKxW61>GGKO(Bu(cLC2Yj3kK$#Y934G= zj1WNWSg-T3b_tt1Pgh51HR(Pyz@2;pH{wPdE%n+)b%IGv+4FXCk3#EbfcEZ#Db(nx zMcr>IBsT5l>yBxDon>!~h2nLh>|MblW>OabHUJ71iuR`V4emU;ZAcMqZ5$V`c5_2z z70EcemUt^B>(oGklH=d1cyyEZOeC`V4>lQB5K3DxH?z!SOMyGJC+TAqe)A+nyHbl{ ziXZSQutZ8T35vg;Pcv(0@GTU_jZlnElcm`D5t{Zep~OTG6!tHNaR>hK4Xoq;^V(rx zFsrq}))guX2JeD_i+9}6#Dw1N+Il~wXlQ_(fQ8&*Xs--7+OixlcMB>^?{Y&V?6Z5T zg9I;4UovD%!r}O~q65YX40g;mFfUeFMcl(@z$B3qOfnP{pzT>g;){WYPct|1wM}f2 znassJyU2

ieOdtIGV0`oI&@S}BhvRlVy%$Tj#2jNW>+Od`uQD-0@k0S$ASW?6bkT6{58XLJUgGzKWiqu0UtY) zL7`)*O6FA|lc4hZ7?U<~!8z%(Ji@%utW6b0k$>|A3oWJ{8z$Lwkl}I2_ug7aB@|4# z$#7zY!>V)}S4 z2?%2d3TLqX_T5!6nee@VH11M7UD2+JQ1fZFM@sXQ^C$Nmgi_l z;=af`8{*3Wl$H3VC6&cUfpVRFZc@80KD#3TL?v`>2?bP|*{i;>Ea<}l>7bdqt|wm& z7=^!8sfqkrC>s}!Oz-$Ftq)Pb#~Oo22eY5#n4B`XDWdfa!wfSsf9_?E`B4fzy}!)H zDEJ?4bS#Javj0vE&A7)s#rl+UZ=jaJV23d~-ODICsD7<8>x{rA=zp|J)4T8z@P}Eq z5f`+SmrYp`9jxnpcqZQ45|I7@T$)bp<&lD$|0aom!Qv%WbH5+myw`Dy3Hcwv5PS2? zS^tZmxkxgwh`#2JU6`3tmgRekx8O&2AAAY>9~mh{#>;+p7kpY1ssF6aPoQadVA^Ms z=6{ReTph1|lP=f1O!6iak{GU9B3Gz}MHd(UOS)aVWN)|qPXhnSzJvWG&!Q{57Zv)k zMV3ek_VgE}fhPZRwo8CZbafceBQFxX$4-7D47&|_U7jOF!|*6O8gaLH?<7=ma)Bj` z^4}h{($#v2Z~mg@uwB@V)}L*XxeGUKBTAyN6~HSOBVmULg2p4f4)5#;v|BkmZbn^1 zxN@Xgt?}wfaMxvdx_aU8%M52;X~S1%vI21^egVb!1*p8URQ&o-(-6N6E<`V`o5yV0 zBD8$IK5S+RoxTo9A)dblR_riQ`VZ|AKzqAkd}C|W)Xss-Q^$cONIp zmA?Ga20`_?>*N#E!y^AJU#HcAyAEh;7HT7GrAyn=y; zT4?F%yIe|sa#S*ys1*9o{RAt#%Nwb5G|AiZ0|KHklfkCOmwT%BjJ*e!Rbi*j!Jar{ z#N0_yDv52Y%zvyvhA8yxOSNQuK=(w?DuDc^YhKAJ?BRDldL`QD^HO&?F;e^8*B7tu zJAnRc(+aO+wko~rMbjDW+g3s;gOnNRebQ@}GY#-D3i4m6a6XjWn>e{BNfA=UqWieB z-3vbL)~5C}1P`G9>iI3omhZ>B`Tsn@UNU70sl(XUTYJ68Lb)NApHjkcIPA#5XEN*r zgQh;7BN?Iu8(BSHL?M8JLFj24b6w6XPp*?j3RMTb7$l&XKI+{ynZ>ZLR?dYgdh4~O zCA|uMT<@ND1r-Z1|6~Em9(b+qWdW3rI}b;yc?$L z5HOkl>jf~?Z^%}zp6A1_={}8^FkxB0zY9J*Oqz6;`Rr%DvFY_;sIJfzZ)wsU7_K@5 zKXB3`^8FE--ZJ|<^mA5V7K;w4cts~Rq+QJvphelJgP3yuB003spR;;<{x;E9-leiP z)!<63x&x_fP3*;(3f3jFeO^&7@PuF)tta{QbJ@sCI=Vl&(}0IYtWLGA$JZ3xBAMF| zS*SQP#gZ%(J`UM_(EM_O&&+xDd1QHnu^S(|`OgP55h6ril=i;7OdESZ+X-_`d}^3P z^T9O^^E0;aJ^*1H`vGJ|2lTrI=pLi(sWkU`-cJ zOZNZsazSF9Wv8_u_e=7c40V0u1^Rf{Aib&a@W9@5^QB`id_dBAHqkYCb~S&w zkkvxscF5C7M$B&+!$dWk754NWyR|rb*A#cg%qfLdRsi|oywD2|bR(c!x;c6X{^Po!{hq)td?ggV`H^CCf42pKD0#0=vnvSZ421^Q;T_;B^H8 zs2W-JUdffi_C$I}xIgnzy{(y8CXdTv~<{ z@SkAvdBseZeG#r^n)=g|q{*W+Q0mXq4|QR5eiVSLRE4hn;wO)pzPY|#*yUtTjnC?1 z4#=}@dVFj(`*ngj0iIM(8*m5jqpfNF_%&|Y%71>XqpcQ0K?fb2S8M`A{|0BVxK%Gm zE0>(~B)=PhadN5#W4&}^9!7K*6CHE%&YMQUdo04M7*p23w`(J^lm4=PNdVr2(UYFC z;$7Brx+Pfew#MU8-mA37Lwz13zL{B08ai8bta$iHLeKuKiy0Stzu-*HO7oMggqM=V z`xZZy!^^{Onf%Ly840~J{SS|{`)~Kr3yq;(%#CF&7>c$5wOkcsjnkDOdOmn~*_y7_ z?fiVzJ-qlu2~^M^QE`kdfu#djk8XE&g;RJ_yoHuza(LSr*O~YA^{|WB$>V(mq5h}k zmDC+Q7Stq&-R|zrJ06D}PHjYKXl|DC#u!?h82PMSJ^Tg5@%(00SY zTiyD%_QKG)z7?EKU%Mbs1VO`A_Yq{`E=-0MKmVIjj^DiB_@MH-Bh2w z772?c^k7VKGXJnWUErTGmH_g~QapZ8IIk#$A5;kLA%qoQJn<7K*PpA^RSNh2hbX>l z9W~pWfim4}5x%i3k4P+>6S9IQHbQuDEq@rnqIU70_O$#aq4R%n4c^%)dyqt~kV<@v zAtfdZifiuXN2$(Qqt}23gEoClW6Ic&QqEm){0f3_mkVK>ne603&6yDs+*;p0MF9i- zddAkkZL9(F>o92}WGEqMBNBp>`N@#r(WzigF9^i<t;07vz%R=2IPyJyK~Qz8&}B zTbHiK3pQ*;ayKO&cj1BrAC$^nNTK`*>8*XPlj~9 zjbO@UZERO3K`>oL*?-MN75`uYje^5%ij(5UqjMHYe8rQAhG@tJ^8pHSnUt~-T(P(# z`g->7i`01&Q!*r;4FWvOyf(*wYG+%vXCaOD1d-!`(F%0DM*3x=@V>*~nI2%R=Pdm9i1qhM};b8dZaf18y4y>Ixb zVzmf%Bz;gnQiH1G8`rJxsA3W1N6SRHGoW!ecFn{%ev7iZWcScEApWD!3qlM0_&+t5 z1}vE58Qxv~^7df4EXhdLB`bl(OM%4Es+ASBE#F}RB()Kqrbas3(sjSQ^gmUhhn^EB zkq~|5(~UJvKKH5tiIPHvOnx!ysXooreaYT1_Pt%t!Dd-pxc^zY=PRS-<2BsZFIpqM zoEbcXWm8G}hej8BH=fH@R%u?c)urli7xhU@p}8Gf2k^ccR5Y4FYHU_%Wh~9L$iIap zo&F)h!1+HL5CITjZ+h_OFfVAXcmzZl=^1LOWI_!Q39AykQ)TmzaDwgkx6;^Y?}J;Z zj`!i7B`oAqw}@={@Z~)A=REtOyFt)C@nF>hBPhjZshUze6gz0v!BshXuc2D;%s?EI zb;=O%&wk?x{Dge$f25k4axAz#JvG#g5$d6!V@FIuN3`8%^}W)39z-YN()cM`qnl+} zD=SWlA|cP~^ceo&Q`KN{qWq!6t)p}!zcV@&4Q`0xG2;j0Utl}xTuXuSiX1&QsNK|0 zPpm^#)F<*hB0`lVTib;r<153#_+RAY!iBMbnGOMj65;A|qsv7EY=l12cS zV~!F-2c~4-e+qGTNzldFw`j3KQCt@1Dx|0QXp-uwG9DwI{BUVrnVwnaaC*A^ZLnz0 z*omng`?iV6g%_`acyRf&@KcMo9Cmkrs>KrmuFRUSqptG=!P>^!r6^(E3LqFqIC<_L z0wO{$B7P^&!=;UnX@-sEhl~%RrNk5HO0f0l0P4R39qj@zW8>mdt6&$!*We55P@X|8 zf`X4*D{;kbhhffZ2PFt0v53U?WS@i>@3e6nd*sYPcV)_J!W1!+{VeCX4?Z8049K%( zo+v1MZhhZh_wf;9tsgtC0u{)^2sRQ!qI1Wk=mXuSGvE_I`6o39M|Z?lTMoW3OYa8gS^CUV)C@hN(?=EQs z@Ttz+mhF+neflQaBi&*lE68oVz#{A#GVU}?A`H^lGPz&Oz0553xA~#{qNy*WFx`M# zkB_d3j`XKS>(0Tp`FY>B=5Fuw;kyVU7_2LVH#@D17m3FGW1dYiK5#5#O6;mFD z6GmjAQv1U=v4V{E3JTOj`AE&lOyN9#Xwd3Ob~0kLSkP)D%^`k7YAu!Vpaw0I>SBVZ zO@v&UIoX7BjxskDPxa&^)JFPg-mc}N5tATHa7YXc(CJcMjG1km5|wkSoc1kW35B1E zYBVZ^@ywwi5EE3p>Wtz8g<4(Tb?J;ox1J5)Tn`N(VAq|bj57J=Qm2KiGs@Z^Qn-PZ zqT*wxkhQ!t+HzFoUxS!n`Kw5ccja2@I~Q@1ZKI;rD$8mLoJc%!zaaF&IVSl6aqdP| z4)hn|_aLEqZoIGl9*U@qjxaUVd~+I7L3SKx;cfOiqI#aA)E96+z_&k~ zQ_jQth;xjM^iUwfttjgsA!wl;cGzJh?_rg0^;n2G-R?yv(~CX&p*!tOZ-UwJGxFPc zLT)^H4c)I$_ztHECvMtF`rAOEYy{$7v`(M!8V;scB?I3&E2|G+OtsuA>dtxNK!iU* z`%@>Wz36lOk!!2v1-;N5TaK|o7@bhIF`_;iT>plcc;!Wg!e#6qO_5q5nvs~`;Vq#7 znJ-e?-}7FdDuyBO$2s(Z9k+kDnyBH+hAhY{9%qexRJ19gy(VNlphO(+_qCx^HkfLE zk0n?pUvQ`3$@cO<8-?0sPZL$AbaaLzJD2wlDpC8)UG~4P<2Vtuko-uy_a-xkKY;72 zHx9{h|4vZUh>&_ee+4pq5Mgfct@+g1moJjZI;C5XYhWEHFJJb2^FRtVtm;6$%Ct$& zdK=IVYh68HpRU=Rru((GC%?)dq-V@nz$!FW!4fYO+Fjm0uy8gep}*J=tp^gCrVgRVjP-Gxi%xu2&V2l(s+ zMCryALSv69-@(eG^xMWvs(6J7=49}QPNMr?saG1YNC|Fw|e=njl{U?h^9C0 zkaE>(3z6^`K<=S1bJ&BJ97gcM-N|II0O{}*m8cGnAhOB4uHl@m#Q9=iqe{v;l%kuE z5KMITBb1`Wf9GUMd%LOCnVu`4Kb&O37}l|*gu^!uKR1L@%Tqk(Ve8Pt+-4BI^p5u- z29atOd|F|Bu%%cUB>??$e~dC>3#N z^ZaOEx!|*XNfsJ;ELo!R{?8sE`gpo{Qmbh0>8?C|Y?&}I<0BFxULs=OQiF!1o5R8- z;S6A0`*VY*4#tu4+i@}-2$g69Y`#*ch%RfgP66v4qeM}MWTb%WbEqL)iC5|E{qQgU za4^s1^Z{3knCYXUMXl$aXNY2CNj-FvX0XH{WFBJYDp1~+fpR8tUFN=G7x+mu z!=!~bX`U4R??A24pck})a>VTt+ux5Jg~m0%*j5`Csjg`Tt8J-eU|XBc_R_UAkypoG zKK|r$>x{HE*k9>LX=0bcHygHkveeR;Cxaupg`p59R4n4mOckDc-dlca(Pycyb8R|K zw}LMu+i}D+Ggm54gstJYuW|YDE8D94&bdb^st_>pgJ5}-Z5yikTPIWmEFEX}-qi_} zU0QQPJ@H}BY2*c2N-hs!0zpbrYU0guyiv^%S8WjQQ=loedPP10y@l7uQ4vIOR;a02 zBPm&lsQ7-?y1OwxG~FnKGUwh^+{MKFw#332HtI1u@W=NZJ3e1+UKxV6R;*Jz@$Pdh zgp9hDhKea=w2I;oi%PCYR=!jhnb8?@uG+)T$Kbv&vLOixLhGk>NrE0p zJ-nKq&l5YLX5bbeq$8(?e~#kS#2c|K7JKSjs#4`b5k0Yz6*U!W?3iLuXk;5d|I)#B zjf7^VOD)*+qFY%1+M%O`gA6K&kx3XAw={Sf)=CM+V7E|hK66sm)!(csm|${Ed8jlA zQ6)h@su<%Azf*V0+)_`0#mT13t z1qaL*Z8p4-HkoWG(ZJCT`Iw6GGuquVCU>H)F{KhTxLn_ZQx9GQ{u+gnP3Z{Y+iB_& zREbgR9Csw~%|xT^B_evw7$imX!!H!$4CzyzbMq6wYYNX_A;~s5d6DH^K^}t>N(oD9WJ{FRizD&4b-owpJ(7Bg`U+-;W|)|nEWN2WaR-Rc@}_jMx61e$0R@22Y}gzR!g zfNUNlPqYJ9EU9{;jZJwoQM95n;^McyE-q%+UsX_dLu4-$3N}U}nM}4$bcU+Y<4q1X z8do-L%akqZqn+yS)dd1?MMN9_Tw+|(=0w~)CbcgS&ivCuD=Pj}=$g{;bf(+`m$NYB z`o9415=d@?ESWFOB@ ziIsT3W8=7N2;T8FIS`o0I*9%%X7_=Ew$DR`GY0#lHzUcu8)7ny z!g$mp|KF7{j_`yJL1H4KKW=4as$h$@UI0mAM#=$7+g92cUO~W}~@jdUt6Rf$gd-&cBt+?P^{$vhXPjd3) zbeGKrZ|g<=Y2W46#6=^`Mc*-J)pF8Eq(ii|ssLHeTLZ{*3?4*iL(z(qdyt9~eysW; zbE0EO`~5Yz`rusqrLTXkiGVN=CcBHjVzK+~sEVv?%K!V;0ULjh_s(!rN{jyu=KE}o z@B@!TZe9Fwbj;sQ;K%k*vXH2q9~3g=fM~W9X6ZOvv)=Lyb*594@!4thTL4wA_T1A_ zSZ|nX?q}}@X~z%14Y`Gbwk7Q`DmOfJHe&o8myO-)vO9eztO_=!cRoLi-)9gE^X?1s z7AOiksvBR-iI>gYjikt-p(jm@dU*>C;rN1Shivdg1$J@k$D<+G86R@hDb>G?f|#;T zNZE3afZST(ai3v$N#neemYS1|L}7m4RjS^RWU-p#N=0U#;B+!+ka);w|t_wfxM z)CPXqB|6DPvrg4HFx72p@6`FceljEOMD|XX!0s_TG9rPLOjr=$yGwTE zbL6*EM*LNr-jlV>_1Z%-Szll2%7a76;kET0i=dU;#B~Y%DinH^QIXTGZjX2(;}HaA z+f*ElS0B$V-&pnn)MSuC(Qtk{w~&Z+1kxpE!DD3w27>-QjVhzjZUfSBAqVUX6Z9`a z^A+;xwOMJPp-cLtNkIG^h~&7Kr1Mln1HMchy9MPV;Ele0lR7P4Y{(QX^G5gO38jWP z82}E9+rEVm76C8E1DR4haenL$EFm;U$&!Agn1tz`z{CsmrPlDH2qoa9$ zdCSi$)q%m$`Rc^Kj7t^iAO(yGoyD7(w8rGUU`!anCf<;3xBv8d-jtOz75 zOBBihKTkWBwrVjxCmu$t;V3<>d4 zD28AwxrbIvmRrqTQG*^a3ww~XzMRLFeX_WJTu~)eRoR*2{Y-LMGYXnBZ_CD!YZy0n zs6?m;<6SeccAJ+exCloR&fVf^Jy#&8#osKGG}P;c1!`CJC}}Ce?v1~`gVE1_qQ8EH z;4AGjZT0q8;*oC4g75a8lz(ghLa_3bl80yXN2Y zN79IOAl@pdp7B_QX|S#<=hyqk$&e@{>r?w%n{xv1I#|cY%o&D1$K!&ky8)xs>o+95 Xx0u_ls?0zH_?L#Nwo0jzCHnsXc_=~J literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_004.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_004.png new file mode 100644 index 0000000000000000000000000000000000000000..505c7125251d245aed0a5da5379c583a48233eef GIT binary patch literal 14797 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 Wj#w?28t(g<0C`#E7iH3h{{IhEL2ZQq literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_005.png new file mode 100644 index 0000000000000000000000000000000000000000..4e09cfd2983f92c28e91f80291a52b3cc7dcf59d GIT binary patch literal 14580 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_009.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_009.png new file mode 100644 index 0000000000000000000000000000000000000000..c409ba8946b6e610463c4c3d1c8b9f57965b3994 GIT binary patch literal 14230 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_010.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_010.png new file mode 100644 index 0000000000000000000000000000000000000000..5496ff643ff02a068d2774d53b495b345557ef1c GIT binary patch literal 14799 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 z zUH=vgUEmRaXjmx#z?6c-H*|gr=Dx3i_5SmauJw!Rad*WBl-UL@f?kBHglCbu9cuwy zD3AX*@6%q+Hh)MG_c*DmE1#))jE=FB%fUd2W8$#UX%JF7(mX-vwonAiIFy3;FO*#N zo8ppw!@BxT?@rNhj!8Cki2z#Danp^0N3sPm8PdQ{p` z*EhmP0P<4m+Lp12l|d?U*qqAoBxFf4FsSTtbjP-;+XjPls)#YkK2LT!s(R8z_UX{^ zO2z!;g_TD|#3}{mohj-Yf?wn)p_@4IiS6PTMW-i<-siS`k(2&*ug(pib}mG^WQ4$H zJ4y^hc(Z@oUA8KKw6HVZ_%@0X?do4+WsCU_AQcqaZ?16Gu!hr9JXKdv8B(!SsV?tA z)8iWSJ$QJK$a2TN%323NXPE#D`kv{}-i4(7!0|)X*zPtq=9?$#Zn)yyjL?at%9TGE zO9|gaX-(UFm!kTD7|j(C{B+32t~(A{l}Nois8D^FCl?6!IV^fz8PZ=06ykS!L)Owf z6p-MQwe#e>s|Wlu*MfqYHUQ}81qQpj9=UihuaWCs2DqU%`pu$(=X}V5I-^Ls*qPJ> zpJ3FVWg9(1>01u*0yHvq5JWo|+^Jvat;~P?S~-S1CGX_vWl!oG+AW2xrLI?du-^}R zAC6N~Qx<;#Z!Otg*su6RnRt|itlBKIJ=4%oaNkWG=!L#9_xxh1`gWmqH!2H4p)_YNS2+MEX)qHsnqlRb(mrutH*D z@7dGZlaBMI1R*zAWXN*NqM6T(nSdPnz^8a9AIno504kCdmjEF5BJ^*XiYLA`mAhgb z8SnCQLUpL`GOct~zu7rO2et%ZO;0Y75xbl?()40Fa_!Znknvw<;(`uRJxwQx=3c zS{`T%yBiAY)yXr`*4cbi0Mg>mxCcN)bTj~kprsE7y_2n@ziq)%(nGU&y(V<`BMt!Y z8XReMk!3_BfkLrhPV9~!?3t!wA1nC|5DR6btk1`Cu{0xxtY3r|nG|&({Xs|_TuwtM z5gg5ewTgvzJnjMsNu^AuyXx)Tpc@!^2xbGvu|!Kq0>!=Wj>sJNCq`{rWU%nBQsM5C zM0ewRFUF9)HBFSYQJc z&RB}>>vc0Ru2#o2q%C4OJX~9DuUm86XUNqOEvi0}0;rw|+=mW;C@3+}F|t&04iuJd+zv5OQ^yp%{%a2*rRp7x$DXhIuAinkqvczt(F{;84_*uVJP5R zUj-?`SlAxv>YZ;FqtfBk<@aJu0o9^PMC^qRdNdZ#BoNrhYyFhL1SB zSI`?!J>+&b3}l>pmjf9eMq+xluXGe@l$%DD;+apYFMj!w)|p+XgP!+K2l0QI05#R856YEMVgC=+sew=c literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_013.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_013.png new file mode 100644 index 0000000000000000000000000000000000000000..6b233cf3741b3e6597550e5dffced4dce1c1eddf GIT binary patch literal 14403 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 T26sPzfR6`iI;v$V7NP$K)0r)i literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_014.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_014.png new file mode 100644 index 0000000000000000000000000000000000000000..64134f61ad9bcf15b1b58a0830322ab547c63b20 GIT binary patch literal 14719 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_015.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_015.png new file mode 100644 index 0000000000000000000000000000000000000000..1829af3cffe70b25014c559648775bda3db34356 GIT binary patch literal 14791 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 Sj=h-)&`{NVRH|$h^8Wxh^nNe^ literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_000.png new file mode 100644 index 0000000000000000000000000000000000000000..90b61d3bf9c6459030e755178ea014b2d3748f3a GIT binary patch literal 7343 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_001.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_001.png new file mode 100644 index 0000000000000000000000000000000000000000..2fd9f6018a8fdf20a1781cd35b988dfa54b649c5 GIT binary patch literal 6748 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_002.png new file mode 100644 index 0000000000000000000000000000000000000000..58075aed6ba42aabafee4851a8f38015043675a0 GIT binary patch literal 5764 zcmd5=i93|<*B_cP_L=O7EFsJkNoCEN>{57;<*_6ri9wRkOk{0ggwn!LW-w`n?DdpX zDj5t}OR2_Igd)p(`+ncw`@Vm|>$+TXJxvLkc>v9HG~( zFFs;4-JcfT8D=mm`=Vd%^@{NT9|Xo$C z^wY`A38!BCTy6h@qBcC1(pHYn=7%?`-?6r_a=4aL)4PF`$>0@N_ejOGN3_~G*SBz| zYAmmGn-*Z&X9m-@Y(dUIdSX3i1t*47%e|(PX0J#fvrgmyZ3Vp5M%}|rA1tWp-#cZI zG;hv_v>i#hnCOO-@k(OV#L>9;QV(;eN5fdrhop%nI$1zmTq+BK>VkEXF}m;XIQy1Y2|vmP&Ig3RCPz;l3kf#WgG90CT0KFqvT z23v3N?Jw57{ow#N>=knbJg@wjnKB2zn_2^?vL?iK-WJ}4#UrNB`Tgv69$rklFLT1B zK9EO#Wz`VtdVn(5jmcTtpzA)QEBQlPc^$&gRW=+9=hNpj6@I&AE*h9X{*NisEII?Y z<8jf7C00{yAL3zsfZI1l>fuzzot$sH$t?9|n?c?hS9fGNBO$v;e~|GQ#lyl)rOAv& zSJl(U0!e|@ODR2E+kx0O$KR1Gp~(GtTc{*PzwllC>hfjh)DL2^@LN@H-^Mv)w|g*m zwCYOF+=mQCsdC2w-w>G9W%6n~e$~0Y9ShfKS}!NE1!!KrdGyD}S;vc%=(>YPvJ0Fc zRZSz&9qu#OU-jH{2Irxp!5Mv+H3rXxDoj*X-KxQa64r8xgTy6c7=Le+W7@6coGq`~ zK+#cD^6yinftALzf4i^;(hb-9nP5c0Af%1y(3S>7q{ob z7)@(MBPwoHbTEKAAldvdGtV-%z`YEVH=p@KIQtVYD_3f}<}_<|pB#?TQb5YyQP22e z`TmEv1(XmfwzryrR2S0>4z46Xvx^(7pv6!_qi0vv4?bg5(Tv@_%60M9Q9wMN8O`7S zwEA&CCwau(h1o3eb{7w6tadM~oW6tJky$gWc<7fs09fhx^1B&-dsgKs*|Fc|*D9s< zAmwhqKFOruD6ecL7#G3@Y@a>QG7;s)(D*EuVzW#zFiS!@YAB8TXVlJ@BvIxHD`hI- zCw(!(?N zSLI|IO#SQYK`QXI$5*IDh&{U51d0g#w)ad75)yiB<;3%M_0)sDg`jvBI{DqMz{HAE zIDx%OlgvI)=qH!zGKO;*lizJ(swehta*L>=-(0(crL1isr@zmYwu7=W?|APpO?O1W ztyOm$ga$FRp%-^j3WN0kGqw_=a>;6N@WxKf%J0}W#%L_Zc<#^iUGy;wjc|5ZMb`$< zk*ZOa9ngreElaL{bc>P#y1)_JefjuxuWR-ON$aow*=BE)Q$_o>% zY*K934=+`Lj*HYGY~vy2R+YBvco67T2S4_o5kPAtqmV78tk~P_q;((V{NNj)v^q5| z6n9xc#r#r}7xM9TkfF|vbBH2+aNg_M&}P6y@0ybrs;Ayuqsv5X;vwl?Jo8Z7mEV@8 z{T-7|$pgqd2LkgeHd9;!Vu|h?A;XI(q`c2nmxHO`1Wc=*qN-W3R_Q#7x zahYHo4~d0|{|c80&bB=2?9SZb zG;xmDX1`XT#h;PT_EuU~-(yvpeFx8;3AqPlg2 z>dAP>fn;^4C=1j-21V=N585<8sZb%wLvo=FAE~~jh<81H!`UY0q5?ifi>WG}de}!@E_T?kLnYAA2bEu^11jhkyIfvZZec zBQ}AtU}p}oCJt=>tB8bzN3RARdLFff42b3Yz$7ATGe^Szr=@}jssA<#8Sh}mXBU%N z2O?fO61;!4ihpd{w3HgMrLE> z5En?kRNXZmJc^-3ucQQwctLb6{SpV9fhB~aeKq`wL;S2|zFFQDmq!ZF^=vI=60r-F z0P!o;$*;#>yIxFM5zl!t?p=CCPKkac@R!^i1~#hBsakX>{H_XuE2iKk>qlZVYo|)l zlD3bu;7lO9v}yD~%tTQ7?8)DUxLR9)R;lpg8J*Ig*S!AT!u!QO^)u*KGa2of?>(V! z86O?Tc3k@j1L^nco8TEs>IrXqhuC8 zRkLXOiF38O5jC#{{K1YS#Uu&xfMR-M(-8lhB*!S-N%ntH4b@JhVB zTi79DAOB6U17?s9R1$Yrqhc?hRl}-z^)^NPPzv?$!xJnJ_Wt>8*H$p_OzgWW&g2Pk zn5>zkz23B_SIxvl%z3o+tD)JVFc01@lKJs(ai^1V_2kzl%K5*Va0o zDEKX#As}_(=r|xd`S)R$^v+#K+Tk*%!&%}SqVkOOjxFec>wvb_*PDwrORLk}=xf_P z9Rmtg!*eO(vZ$DALl)I4YVN+s|1CVXHjj5-am_~k+p4oAIri-zpM7%IO0)tR&EF-t zZI1^;AH>EdPvVS`{tfazMmL{0!K?{rbn`hP@NKkBzJ_pG<_h_qpvBU$iM%joj{k6AZ2cx%E$j6o7BB>{y%Cv&Zr3i%e4-XHPeAQ^8Jpw8u-ElErV* z$ZMa^T$#$vl2RjOd2vgLm{9%MG6@9;V~L_Hlq;(p2m*cJ%_^344n0&6!BTr&JGr&+-iF0_1W#g`q2fda^E!4|8;kB zCYLjegL^91u1pRIJl*-EC0u4i{+jNscVN~&?zD67r68F5^h6V!G8W|LU_+94bgHsA zT9Y14NT=p_Io|faX#TIX>qSD?>^OIied+(BDGy>f`OzV)*4Hl;EAdNeJVS4mW;rDn6A+uh$uXK{dT(5K578auqjS`a&Lc|aw zLf3tS?e%k{uQW&`*cdFmP2`tzIRvwc>A&nf8pGPY0qt%)v01;I0nXqzg>UH+g%>OA z`(B!X&`mU-ALjQ=YD`k5H?q7a?y+FYhaX3()uX;V!L<9>BUU++J}f3nulHP}`!LnVANkdL8$XSk0TbN{3YF zsui?_2es2B?S#HbbLgpnq~c)Ch3*>pW&4Y3Fo}1277kX~IbGiEEI^YB9(v>$#?%GG z+%o;Z%3c#VkK*RN?>vs9zYuKYKmf+97S0mFHm;~%Vk~o1PXu}6Ohn}z0=&ruDZ#571 z*tZ-IB=uyg80qqkWiyK2qOViD+2tM_o>TLf<4=PtL#I~vU1UTDwe8CWIh}>_XS0`n>RWdI6%8H$Gx31VXIVAS zaoSM3gSlWRNbSwH_5|-el|Kur0STmrt6m#%z!75%!}Es|-3B(oVeit6_JKCP7ahoE zKe)@`u+w**Py{!=`V(G__v|8Z2z za$8M=>FS9DOlV47t6P>@A|v{y;#3hqF084&lXDk~<77pqSIGeuPw5%h9n0(Q zuKm*4j=e^=A*v!>Be&>=8c>uCLs8`}3Q-ZOgC($=$VG-L+fjcnQgEzqA$`Jr@#-8TT2aR!sZKSa~m?<|)xrktyLVWm7Q%K~i zYYi4lDNZYR%#6>R{={Zgey5p%JF7@d+Z~wpV3mQxdCygnEaMABku&ZKh8GqEs{lMkKMZSP?3Iz9QxyMw|cSs+DxpP z5h9>pYnYPBFmwxg)@SD(6xO@1pmC1-sXz+pXCzG4=z+mWkEV65;K`g|agl#_aPjoa zwfD!tT~}dj(hSx$NvZJ3&aGGS0`~epG$pzCo_gzm1J@eUzKsjbmezK&aW&R{M&TZo zkVwca0-BUtaqrxhuAN^d7GJoXH2Cu%)UQ7(q>kGlgX74vKGIS^w!F!x;AiH#+@@PbK@Cst&Fm^bg-y2^G*IQ D2H=In literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_003.png new file mode 100644 index 0000000000000000000000000000000000000000..cd38cc3d50d5156de487e3fc329340fbc28e4887 GIT binary patch literal 5715 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_004.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_004.png new file mode 100644 index 0000000000000000000000000000000000000000..d9d9861f8d3eef37490728ab14477ded5d85b5cf GIT binary patch literal 5439 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_005.png new file mode 100644 index 0000000000000000000000000000000000000000..607797191ebaa3a1742bd48129189bc1146c6cd6 GIT binary patch literal 3968 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_006.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_006.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea7f416609cd3a33e1875d3fc88707b25953596 GIT binary patch literal 4932 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_007.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_007.png new file mode 100644 index 0000000000000000000000000000000000000000..1f36f2f6d8d14233f97667e649b7d5360ef98357 GIT binary patch literal 4949 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_008.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_008.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f6e1ae577a506256144823468cc9792d730e93 GIT binary patch literal 4749 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 K;92b+miE7OY4N-O literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_009.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_009.png new file mode 100644 index 0000000000000000000000000000000000000000..0241d12f9641c6d76ee6103d9687df490b993c8c GIT binary patch literal 3582 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_012.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_012.png new file mode 100644 index 0000000000000000000000000000000000000000..ebd2a259f175f9ac8daa5de7587424ccac983139 GIT binary patch literal 5506 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 Q_^AqVuysCCWfO4We;WO}cmMzZ literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_013.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_013.png new file mode 100644 index 0000000000000000000000000000000000000000..0dce88c80146f24c8857d56983294aac94d7e5b3 GIT binary patch literal 7164 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 a{_<(1=LJ*xrH_YV5JO!vok}eN>3;yvSKg!m literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_015.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_015.png new file mode 100644 index 0000000000000000000000000000000000000000..298798d0e0b8d5e89f1529954293a9c8dbb5d0bc GIT binary patch literal 5477 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%0Ds zmM#+GYS!YB=TCYdO7&Yd>ygH&Qv}gGRwMq{E@wU1L;+OnRtn2i{e=))m_zv~js84z z7b^A;;l*VlNxTIU@Z6aCCPyw34Bd+VeS3&j)Z?cL|6%*~TlHP=&S5T(~bJw)1QPoY>Rh4B`!J&ZBLKKCs%IP^kl6sD6zmi@!BXp#jtICr#kkw-X zjtf*4gArUnq=KT*dpr*Yx`-*O`8-?z_GC{mAvQGe=mn+tJ0NL3D-d~Rhv({)unc*N ztg#fc`I1xDJXdx$0RN>;hK%$XQCsQTIk=JWBuj=O_ru|!KY7Z!Dg*&VpRT{vNQS)@ z(2r5869a3elfBX(XM?bX8-~hi0%q6zo`0yeyLq8&P}Q^&%;tljl?Zfw!#YR!w7K^Q zx0g+!kWcT*DIJlW&VwyF#(IwxT0G!M}@Y+Av7w|j#e=lH0y|H)xo{8=u+otIa zA}WJ&*Iz^N<&8%wE{)RQuqFW!6ipoPLko`$hVvwg9k1hzs-@PLn*D~c&Xr=Hd=GkcbGc6J3|Xw}}(cG;sszkxJ~l2J(n_acJ7aOUZ`of6;DewhR&U zkXMoJ-oYAtNx1)EA;S{ie={8;K3o-~Q;Y<>#6O=lWf(iMYCKI+`x8|S67vCEeAV&F z*yMx!PD86{Ss&l7f;k(ETyI8Me z6_hw09zfn@kjsm^C015B*ko%upH6)GfNFGb02v9oA`MQscUTRj!NYo0^%_76L z-tC3yX6%{`D}^X-2eR2xv_4mm8TcsPf`D)PmS3cAY4;ZYq$ zgV)x-Sw9Mx3((W&PrW}e4kvB*ReRNDa6{?5zOn)C^s6I1NwbR4qB6H-0?f^bV@w8$ZSF67Ac?@RSDj zK9+hj;_Mt{+sOo??XE8bB>vssjKFOE)y;_7T>bKLgGT_RDI?t<^QAW+fb}Y>v+bx{ zkdC|}Io6@oarX|YHq+bcPyQIW?Z!boS~TsQqy+8ZdC>6^fgn#|(`2PwM!AJMS8C#r zjmdE7egjH}eZB{r5pBEqXfM%4CRRhca8WLQo&O*<^BZfo;}Nr$&2S(4%DygKKRJ#b1~;0UVo)98`Fbwmn93i z>oEBu6aIR$^L_IblL|@19aJ^_T?oR)D(FYH=hOM#FU<56G-?E4z-OuxbEx4Q8BD|Y zP=cPp*oF#k5c7~stuNeeeRc$if`1K1I(M&l7m8QOATUn$(rr0V*U#e}O1Y)6mza>K z+qCuh9T*-{*jv&F!H!(&4xEP9l|0R&b~B|iSKSu1(?neAJcufC2u$Iz?=RNU+q%TN zN6TPp2F8Zvr{*UUDpbt)w1ow|W~v+i7Ff#J8J)TAlOV-eMxhJ# zcN_4`br9xlbZS_9VKjH|KQ${HHs|gfSZH}KcBGx$JT+$&ZNb9p)Wq_K(A)z(1V-B& z(PwI@e#85oIP3OV9R-$!)i=gN+u`=aA`mt-#90^D?&#k6)B@bz6RlKzE!c=7Y0V;q z4JDV&t1Y}bA57ZtbcZlTp8fp%PkXTqQ$KmE4}jA9z+LMx7k%2xan}}vZW}GOZ5Kuj zw!UAeCv?Um8ep#fKRzkjZjdv?D<2yD(Kxd3q(kU6WwL3?O&z=WmyEqyv>ho_dL7rN`E!yfc|gidVX^}JDu(BtE#5W{x=0(GPgCWL;BqO4<9*b AbpQYW literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_016.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_016.png new file mode 100644 index 0000000000000000000000000000000000000000..ec6d474410ba825bbc7b3f5399b43c4d6bfb26e3 GIT binary patch literal 5638 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 NfUOB?}4) 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 G!u}6AuP2cJ literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_018.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_018.png new file mode 100644 index 0000000000000000000000000000000000000000..ad94c31ffd94661098376c600f91daf399475193 GIT binary patch literal 6480 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_019.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_019.png new file mode 100644 index 0000000000000000000000000000000000000000..898d834f4bcf448f68d647a131867f39a51eeb6f GIT binary patch literal 5555 zcmd5=i93{S+aE$>AN!JO?AxG7MVqn46xqg&2i>wXBrV1=sn8&MDO1_X^M2p^z5l^C$1%rs+}Ckm*L7a!dH#Oq@4V9vI6Fv+sfuAR z7)i&ywr&`V0O9u^D*|TXPG?iWAav5&(E|&9@z|jA7>q)gqb<=R)_<;Ow#LIw*4~xa zl#rl@_mXiX%G-Uh^bZ+dUH|r-ZLeH!|3ep5;WvdtW92mlCQJ>3O(9&SsTa??`p3uS z@YWMaA_7<|ylA3V?tRCrxCD%lGoGL*AcVh=fIul;<#a1`i~zku6|5Y@SwR#hyArSq8YpRn5u{-8tSx042e4KcxLO2{ zN!%iYBj>xx=n3Hy5NHi9!AeySYqyw%j2A=u@Z^>>9 zT3PA4?SG$uBj2yo$`OU9^h>e}weSHP}Y?Y~W^` zuz|j{&DIH}In`@Nz05}5ve{eBs0;1he*1Q*o;-E3$f;gGih^a5%5>kRAwLh2oHzQ6 zP!0T`PdpsCKHcSk61-@|(=>}=JH%D>>-Mxe*!|lrSw_g2#pPaZwA1@>9QlXB%L{u@ z)is{w@s=x%<{|fFOYtn(;LJQB)bh-(dFFNJ)sTqHn4jn0WhNkRj~z7^M@L&qt&tfqkB&DmRq2z?H65( zK?2qVNYO68ZQ-Z)uSB@O%PtzMIqxqIjYRRRQsT78V;5GqgYf8gu)}xO!W#w{Crjo_ zzAEu1MssyHE@yy5HJ8v$K&0$x&wiP#h&}yMoi8IU31^i&Q0|wpg3bouEQNnQ;eK~3 zpL4;$bN$(o8$dGelD5y`#Z&yslQ^%zTV1ca>I1AX@QSeAwuBjm@EKvXZ{IrR!UR+;`s&?gG+$yxN=JeOcUmaNICxJ=FZc04$gO(I7EHmSON#PjM zBfQdRMTT*e*IAkS-5ps7dCagjZWtgBoT`eDa6_U&5;Q4U;a@8HbI&8SnYVKVxdBqr{3#!B#+OK!AbKMV(#(wg- zEjG1Z1fF91J$+y(I-BCkTX&VR88}Cos;6M50Q+$&-+LfVyA>2w(8>cH2Q54n){I1m z=di!koQE>R;f_j&w8J&xq}*KAy%B@)6SmNou-x4@KA^9Z{<=rP!5!@VqYq5QXBn=o zml*LYZ8GE)RhRxvOoX#o93AjLb#>m_WL#u3-eB}O>&@^?{&RQoqiX!~wz{z}VerO5SFrW{0C?rDfGH+~sT{@+afSedM zwBrmUm%0D7k@c;vK)z?X0WU*t$xqJN&PC=kO3tXnKC|h)X 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_020.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_020.png new file mode 100644 index 0000000000000000000000000000000000000000..3ee32b1798bfe8f196c037dafc8b7936b5078795 GIT binary patch literal 5778 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_023.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_023.png new file mode 100644 index 0000000000000000000000000000000000000000..e07998326f39d11b3a8ecd6c5a896b06557ceb92 GIT binary patch literal 4819 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 R{x6k~y^V|Yb*q5W{{~(UFAe|z literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_024.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_024.png new file mode 100644 index 0000000000000000000000000000000000000000..5c5700ca193343e331143dde4d7a54a3f9f9894e GIT binary patch literal 4784 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_026.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_026.png new file mode 100644 index 0000000000000000000000000000000000000000..4488f28adf33974f84139eb2b9a47dbf9874bb20 GIT binary patch literal 3534 zcmeHK`&ZHl76=3Q&5@MJ2cm|O7LE9*DXd-JPJ$zn8X|!i%lxuG?VsR1=bn4cz4x5^IiGVM=iUkn z3D|3Vz!(Gq?F|a_`x*oSJN%(gL%oMeV^j17Nc9c60M$!2^zQ}wyu2Vkp9>kWiW#3m zd#d@op!Y+C<_&d=c3fz)K=?ixB6SpYYx{=v z&TRdyN2;uw7?BpOCQnh0q~Xr=NtKmRXYt(qeZsbr(;nxmTxi<2^^w_C`6!L}cntDq zSVaMLbBwYhgiWf_N<2NTR|V2!H}b=DuH{yGKD6$OUTc44 zRwc^?kBBnO(Q;>a%>d2I=pS|H)Tl6ho&Fcyr|SaG)d>2CvS@7i+4<0^{0YkV<6--b zR(dBXT+_I8#QZw(qi~UOB3!q}pf%^9S300XKJqBl3fx-yro(dHbdO5T9DDb;*4dOZ zy^2CAhc$j9sb8y~({n`qTXLmB8!+dZMrM>GnR7&ZY|T0Bc+$pZptMN-G5hu3Pzy|U zFjwoom3wu(Nx&oSWd$W1Lq_nz77|PN&m@@4rjV5f>{LU(LZ^I|jvlieaf9zIcF(_f`EnjkrY1;%R$J z)~V8H|Ad(Io*xb5irX}~dh2NkS7`a#ifkavJoT39N~>$EI{J#pwsu+2D$;6Y{1~zW zhTv{EgR8CA&dlC;GI26=JhVru@OE-HLvRlI)ZxbZVVZy`m7KTJiJN*1QT|gNmmE28 zV$sn3d(sT(`u0Ahm&EHHZs6A^d4u_Y^p=L-+wY6##xm0n)XG}=mz64Zz=zM2NsBc} z)b_=@ylxT^#w#8Z?~_h>56muQ4mF01N7HO$VlxiR?g8w9tdxk)6C#{|HuH*l+mKGL z<7lXH1Y?O~H}w961#A=^BI7$IL|a^gO&SC?n^ekLq@0n1cbwgox65G}WVvf|I!opH zs=sYTG$o0?8r%Kev>mx#I&AR~kW(9|M9J_-lthjyXmYlwc%8H}!Ye=$c|k9 zkDWKgA4E(sBJ?U|kVoZl+Ffm3rwP`HaM)svf-=-aa4 zk-Wi1WEXs6b(nx`rLtz=z9z~y*j0<( z?QaxVf>LytZX1zL1EDwIbCk}lLk<&BRvQZ|i74jGmx=8{GkcTiM)<1h#jL%P*$0>X z?*-&M(`wVz-+sUvCe9A8D!xE*00H7nc;}WL&U+V|b-|!BPuE%KeYCroq%l8%`U$`} zaI53ab(E9F(1jmbvh2YSw0VWM&6ZNpyXg#`KF#fSdDVDl@G?YcL6y3fJ7q;-39$n1 zDsh5Y4wTXPLo326wUJi-#gAEnF0rx0cIlAhX4fkADHDnL7aSTvzQO`AzhjW@&Oflh zV=NGy=}`a-u>lM1gwbahcqa^jUkQT%!4OtBi&q9>#^AXrZb$%n2LM`uWJfTB&mb*b zv4tXz!JrYa*^3Y$1uPsHJBz@C>BqyYzYBoAg|O~cS7PuDf58xJG7@2kX9j@1yPFRK zuWygw^+~f`AiIq0_Q>wk?Cz1>&ANMQ{_pkGfjx_A9aFAY$LJq4P>_F!Uz;z9^Ktx=Lp6Cf}sS^C@q9uV?jD7O+XP45C|Gd zzypU8s?wxLl&BkqU0*V=2ZH8cC2XP&oDjFp8EFP9h>2n6CazKXd9 z0)gfKd11$Zk)W_dGVpx^ ze3kluORjePzV4JI6!jQY5p|Llg@$wm+q1WsHr9uI85vO_?O#iqc(!MQX558Hs;rEF5(O1c8Z=KoB@gAH?8#DhGK8 zg2LtJ0pajRAd0Zebto4Y5Y_{R>7jVQP_$VoOb7x9%VdK`>YaeVu$eXjvQShcUWw!X zK>p9j|Ei5>!!D_+?mH%R+^$jpL(4qZLJ|%nh(G_z`;oD_FzkpN@YDuuxglp)ykdT6 z6Z;*hwHJLDIW0xkJKic zxHnZaMJx)#4riq!@pHZ93-23MZ*olrnH2w)P~g?w;fZbB5YVG-%=sk<+)gE=zUutiQz>&EVUIP@<3wpBOBZ5q@W4dCd@WL|}PnuT&Yb2F!c`&NiUx5-4WtGJoiDLNLO4-4vv_@IxCh6oIEEitztz;8x7Ayi z;2rJ=Y(F_(b7Dl3IQv0_*W6=~L?9PnoP0$fXXAQhwMn1+5 zckg8i5FIZOx04AynKkp`1--8>*tgpS@inw9pl~ry>+v4HsENl_)mLn&Y3@$lVF*gv z#U_$rK>F~HoSpQX&DiJh!o3K}hdu+^6KTJ1-mapXq_SdLP$)Ve zyg1P_hS2k=u|pzBxEFVgJyD;=btY&QUW`K~-K`vP!lBjmMe8M@X#XQS1Kr`}ch{R- z#u#=%@+GsKlDH3omz)DD;|J=7ZOUc@%+<9qE4CMK?XgAYn79NMs zHf~_+^vPEaQ1sP&t%oBm%kQi`iq+!imFhoux1;g*WJUY(sw=hp`F>?(voX6SKdBF% zqR>+?8qt#7C(7;V|4jY9%IvcH*b>{3eb99%i9?^o7p`facM0YdKxa9+s*fvB=-+1j zxXdT92r7@kq%A_hL;zqo1;gLEdXKznE=VMJO`~_C@#Q(7&b0<=A~M>q98FDYh??@4_bQSM~HHq3I3Gy0=wWeSTI{ulDa`X#G zOZ(mvSIX>bM=*=dyG2A0=Nw&ccphiiX@Z~EP2~^! z6z9Ddl?TXaL+R7t(g_cCtMufA`m*@4duHa`&adb-CnegdS~r-Xg`F9>0_(O!Wv( zA>TR9@P$m2Wbh1feztj#H;(qKOlTiWKcGDwW zDy$o>kXj}>H~~zBIs;0_;QOLo$g4c#buQZ7xqFKe0@Q)mA;zY`K7MwVDZ}wY}ES$=cW-psz&CZ5# z&n2)P=%0ZxYv!9SY+k$l{bNtBe6A|+b!ELcc$49J34QQcJ0FT{c1?to^ZCU;>6fT@rp|#_}8hJ`h zyH!(KAD!9<6pww8(enh+f*ajab3@1m4Z-Hv4o(fq9Gh78iBo;VosB&5o9FAPiNMN4 z@93fmt+kJVXl;D?xTYWsd#f3T+?}hZGb^xbIRenKQ~13KB9JM<9r`zpaRRA=y$o@| z#07{KE-yQ?T9u1Vjg{9PykM6tzV_cyeG>nOC8tQC0+^b1aaMwHhhMmCX2(pb<}uwj znktFAmv?7^t8AvmOsZCfNZ50~O*&Ty2C_J~&Bc5%K|OermmP8uf*VlH;f7%^X7b~# zM^PqG&BhQQ#%2KsPbTA#wcj%7!ql{r1QCWEAEIn#jt5=+GP+p~z3in>khcTV3a2?`qZ35k#?_&*<*6`(_$4sFs z>zLN%pNdk69{PYtHgN%J71)V9K7aozdWQ3F&**T)qjfu@)41XV`*fw?m0l#h2wLFq z41`s^iLiJ<0ZQxB_F|30)GJ0T0l#R0w$@?Hv8dxfzaSe_(% z_~J|?U3rSucVL4j$9vq3iDXu7i7Z*x3Vq6|Sm#}F+YdI#knk+h!=nM`&`jrqt{jW+ zT+J;Ng56C3Wa%5isVgX&*5s&BYG5M3iYQ}0R0j~HfkB~&gmU*V5y>x(N*lZ@i?Fg8 z$ErAgdqG(*18WBw;0K2(`3;lM$x6OzqcYbLc^nRzk+boQ!(r6!uTs1dS^S7(9}EJb zVK7z`omEQNb}`+#Us!zUev-w@SHk87j22~?eWSFW0no|nh^z0qQtwct%UoD)oytW$ zLYCV7zRa#PD4>f^xf7N5(S-7w#x$Ci!mno*y50>wMqZP~w@P75&F_X4eQi@Uzw_oMEtE>ZF}!Jpiev^PO0fsoK{#TaM?pG@z95W40+N zz;dpj=)&e$0MMh4Bm$%|KWN~N7IBVBc}OsuOG3LGk4j~Bi2~wWbZGE*7O3ZRUo}R{ za%Peo)DzwxobLD@aO`s?GK?pLc*pY*H)4AfVX$gR6k4p@y^x0OJA<>dy|#t0;R0Gn zl_*tamo0EE7oB{#Mz$UoagGN#cjhhJu(TvQ1pdWRFKO*SSu2N!QYa2soI-wOavsoP zstYEkZM-dajNy}s!=K}ys@yMFyU`bX2-ER-lUl>Ib0n{ zw)j|sd>SO`4)n;GEqwS+-L8n6u)KNyMUH{G+R?j&zY94Rm2z%SmlL#>OxzgPDqU4J zsl)X{ghcS=uUNK%I&x%)*~53BGD4(segTR;hi6?^*yGoh-?M{A%pEE+p^M zuXFyMLYn?LcE|wiUM;C7QtFlA>guMzGcjNlGOp(SW*&Q}s z$C*9T6kjpdJ6a7+-a~#*to?NA)ZofUKPh@+Xt3}!JH%eadRV z`r_leisuhgzKnmRJ6vA5UMGcXMB&se!P;E~8MdM22R)!>5!k^nC3%LjnsCk#NY1*v z;rNInJ{2egjR^d_&y16j?F5>TVoQ#_wr-x}4EyzzA7@^MU00q!H#ySzwJ78rn@{(L z?Bd;@mMj?6c-|W2DQ(|IB#rbKt5C?9Stp(^Abu#yCgLz(cUz@j)?Bc%0B#);a>eQ} zp)I8%^XK3m273OA$EnM#o>Vp?2~EM@_DVmOFo|BWxpwky<|OAI$51HDq4NR zS%5m{+H}u+(H6t3Nw4Y|r$CqUhj*3vD|f%ZscH|ld8T)%I?mfWYUYC`2uNk*fJ}b? zwJ7vyg8K_NwWgZxwc=B@Fsf!syv(`SH}#!b`L^^=hyc|PWvRMJ{^bx-+c;PpWH+G^ z)np%PXY-lc{2VXPvG6*r-8KmjJXN(n*ErF?ZwNaWnhxxg3;3-i4P`7tcW_nC@;9tG zk9(~yeGEyE*qRsPOcVJuQZlK;2E!V?JDX+r?f@6E{lF?HMPmOlEhmb9Li?^R*(k-d zo&56x>v~3b-DW`0ZT%eG1R&)k+*m0ftN*CS`rP+0udxhK{#5TOypo|4%3l+UM`C7u zBiH1X2`5&w0vOtV39>9cbE8~;U$IRA0k!#ow!@T5M9BM6k);vMCQr|5mBX;I2wE_C z!fG+h2(XIzn^uln_e@&~)%R&3lV>eQW8QRYPq6Bp(=LYVj2rC&sxhRGMpb$+?K0X- zGZIsGpw$fPkm9X`*iQG+&3jCs7UU^3)vq&44J=vi)tU8@@DC#mLiRcI+cljejCQLs z*Vo=>lVvX`aAxFKZTH4?cT^25OS*--YZx zF@ru%PxO4$y)aLzkQ6+jdvW83hf>6@xf$?(eVaLX_xr?0>4w|d#@th#5o<@~^y24w z6&j5Xd@D%;R98;2M52Ovz;(5O&WIbbb(bzWZkK!P){|cQWki7}X_9gAV2Aw&-dw>`{sprXOv3;G literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_028.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_028.png new file mode 100644 index 0000000000000000000000000000000000000000..1b9e24d5e4ddb99957c5a4556db31338d93a8297 GIT binary patch literal 5388 zcmeHK`8!nY8z1Ay5E+a;vX*63wk#ROFoP>HF3b*rKsc`$8(f1x zn2>)i*a>jv?!B~7@CF29uGql95ef5n2!SB_t{CXq+;LecI(jUP<&GEN=GH^lz%Q&D z5YgI}7UI8tM@s{z^mU}y4W!or#Nn5JfWx8pOW9LxGetG|qpMY;&n4w=uhnRg7GD?a zw)J4PRWIzG&&(@F+= zmbBP`K#3SaovZAVv*6?uH7aPpjEm=Lu&S7$YyO<9+;5uT78E0s<$}B*v#p**}(cA#ui~ePk2IuZ%L< zF=5v}=NtHCnf+|S(^l*XfAO5B_q^$PczcN(O<}m}KKGtMp;T>GD;D4%duW^;Thlh% zmn-$5FkH0x`1pO+>Ztcst5vciyuXq|_l!tu_VYupejdJE=B6$V3hm#v2($j&EI(dO zwm`d84q|8SUU?;}z>B8fZpVa1m(bT7=`E32QEcBu23p9Aj)ub~U}$9bI=1ZRSYRrH z4rS-yV+)5LalcjHWNfA&s1A(Wa5;R0HIICe!SfVTbS-c+TeZ`E$38+rR}z0RwmC3F z`YSi-^r}+M2clU^J+yx&qs|Yf7=M>EOF2VI9`Qhwspqg zDBMW^znTI0o9{aU7&%k3^GvL0m3&z3eiH%JI(3s?<-$^~0TS{AT_D6lofM_-lEsWZ zZ8fA-alenfb7qurNUlGBMmUl!}f{rA1Rp-1D2%-b{ z^ypl2y+x?tpuF7@$NME*s5G&jl?m|Y@|l$3`e=cI{uHJib11mHG}505_+gbfVGN=A z0baCFyX`o7P~-JsKKL(PrkQ{)zw9A6XEK!P7vpKxM)I4(E^V^Oo*WAz*SDwzSBm2| z(f2&tN#9uJ?{@mo4bcf^p)FY92GLJ&^2|xo^e7AaY#%FeI2N5AUu!RuLeq@nCU53` z=2|WZbz(BNI%B;Y$YXhnBVb5D7??*uBjFa;`L&@xZ`wbO5#tU$jNS5ZbU{-BopZFI zHG5W-Ywl2!jIw)*V%+KsfEfCdxg5W!Ro_cegBfuFTYl-QjR?nLH_*8ka$;TZ-9uF| z=mengd8NS15dmOn;mY5-wF$7Lm7b<8Yvi_n4NHNOwoKa&fzPVYANQd+IPz81p?4cc%vO1}Gx$!q#P+Nf z_ZUh0ef`7`5TI&U zOBcw`9{$Y0QdGIH&aEZ3>`bsvm@oPVBG|iQvy3sBWCAMCrS)RtIYDi}jjhvv;q${4 z$=PszYP-h^#B3gv3HHPs?V7_U74`iQmV!8Icwjdj@*D&|$L2HXe1Pve=SP#o-{Kk+ z`jv%uZdeIY9#JWp^*%ghxI|} z_?!d_)E*}5ks`)wn&n57dG5#TBC>&irI@2dmZyC#Sj)5Xm-!4M*WU4(@hU&-H|1k7 zjf7z*>rH$x2~FvUI{dJ<~Fu;)Y?;WkrRD&EvoXIL-8sP*ky< zakP=hAJg~%eKFQ<^!R{!kHcMz+D^CSL9z+3K>c}Jy_oOZThZHkr%Mbase{H$vR7Zu zQ3h>sN+A@PgRlq(`)}CT-U(o9F%=`43lo}z3Q)BQ`RywlaXbMiwu)iKGTRBNR>|2i zA8k94<^{N{fU?)Athq}t#$F>L$?07DAc61j&BTVQOF5i2N8bgq zEi4lZ);*@iY3szLq9#TR9zWu{T2d^ zOYwCQg5jht`k(jGVzJ==ar?H@1`88rV7X2hPDYhZ$#`VWri<9kNSEHAO}Df&Wn2Oe z5RqCMBd&a^#CcnRFIF#8P&O6RI75OXjSU+t*pp<(tGocImBO?3Hkk6!^o>wMIGY z1SCrBg0^H|_;6&QKszGPAKT-Q6A3D0LfMUGFN=RA@j9w(*ttHX20qMy#vK9btr(5` zFLY7eoGB!?^1$n-upC}v6@7kR-JE=+oMXdIwa#1BmrV;q!rr5Eh|~*j$E)Q$Mn`a_ z-u^owlEnEdo6i(65>xePf!U2P3EFel)LWsibUmkrmpZ!%*>C$(bLqVuT{v2 z@Xr~Rs!EX&Ehfzi;#?AVJpv6`=JV~tPGEk9lAaibLhLp7I@3}j;MUO_?hU|%c)!B| z1$a&V+2j!9=UK9XV*^j=;zvCbu((rzEaqInjK5M@En|I_knTuw! z1)dtUQzs?d`AgFYijcdD-yR)B{?)en-B%B~W`Di*{D)W#Cweg%N}@ zvDY0t0zq4sJGG?rDf=60Wj^~G{R_qjWkV~$A;zcJXgCN#Q35dITk~9)fvx#;DS)Js z@Zm2+nN6mN+!F7Yd#M%r2wE^M zh-;}V#}y38PP$0bGt}x0Zt_N?5g6$unblM2^O8AmGWKFe7)G|BFVjVZmj^kF1`{s! zNt2SzgYxmG6806ln`b24cjlV+ZDEYX^B*E0VA^sOeRGh*zTZAN|8JEVSor!+=ynE) z29Moj9gYN9Dt=qlkpshpo%a=kgNh<0MU>|nL*|xUMrE8o! z{_T<(>TL=)`E<8*^44CIv}15us5!Y(I_jM&3>)06!Y1_CqbxWf`&H(oYH?kON2bmX zYs`SO!yF7J={;>TBzbS5WSBv|N3sZRYg@emCr5VM{bauvY^}B@i~dZyN5_A=_{ro)O@*%Tr<2S3w=*6+gb=fb@*S;T7GMi*(C)rh z9Tes{z*&<7lj1X!5(U)4@QFp2%~rs?y7*i5x4J&Ki!fDU_9yD4E_wTk>}q=>K}2fo zqbv~SU7h3Puvn6zZ##=+gN0j!j6Vm3dc4huFl` zv{5UBN^b1tjC74uzjz-9%BMn|_KFcF_GyMvxJ3qN0^{3qzBsC;V*W>70V$&O)AwY zrp@YuoAK&Y<5PA66o91+!)^SF!9FoiZ^E~R+1)V|T+HmvT$ER4)Z05<(@HAw&EjAc zuJ?gCgzhLS42l)^iF!3I%AFiRNn#T)U$_5V2Ei%eKH#99oWf6a05<skGsyIKD`;;^|j1-yfHVDiUYoiG=Ni%c@0sD6iT-3~R*5gs&UxIL;iQP2H((+a*4yh2LEp4uDbLJEXmxrI7Crjbyoy2rpL3N1A8Q#PN z#qAoidV;5}r&HH=gLEk^SsrE~(sAA;RH zmUlo05dUHbq2AI@lz^ed3m`;3Gr&oxHdeX$W7Kc0D{D zpPaNlZ%!41#sk1u=wExNRxm3F8sDo2;Ya|0pb%XEk)Bn8HxU4aN__x;1))g*EW4ph66x48bO0a-hv)y( zLe6_$rOY0pRf@<8rxRP3npyYSu|v=T0|2pTsD5TTWm0w|RCa4ZBqJIfcT_sN=VCS? z1NLP_;C)$Ldj6G_30V~xNwe18BgFZ~9cRpjZK{lxKzEG*#6O&zgSX+eY9oz~lU)K^ z-C?8ux__O|Uk2t=W2NQZHsI7Yx)s{|iJ>iIYU8H=hZ8%Ya+}F~0CqaR$6=|dz;wYs z&c%sX66a9jkQ2AGbs;fjo(uKX2M~RePCAns-}cPvWMinVlLmcA{!63*GbrdaiV=!w|oy@B`KqcHKLU z0|@rxXe7vxiZwM(BA|6}wcW(?A?;>?nGJRo?ea@Na6SKlBnMoAYd5 zB_-W*Uf`P^!_~;I-J$`z^PW}G^mAwHUD3@2K25rdQLlHukS~sflk^=~T4wk2(R0@9 zwZEHovu4+_UwoL^gUIzuus)1Q>->V7O8TPUGFq<}1U(F|$*dKJ-ls-zPD-lCc73#r z|3U#jbwlG#5#KjPhA`c7CJbZG-H>5iqiu7YYoT-7$%Mt7=%B^!yP*;}GpcG}>Rw_C znn&yMV5&ZG$6jy+%@F~CdCP17R*89=5ZXqndrO_P97~>zRG*sTpaIEH6K=9k&}{B3 zqI%YFM3eAugDmtvbK1eDcQW@!tN7&{RaB6?=!YojgyLj_V%`{R=4)4FJ3Dcl#X zaGclZ%Rz!I)xVeL^sVWBbx@!hDJQVd$-y?3z4j435WJ}vv=fVzOLS1 z`KSZd=aA~6n_6k_rh7diT<+QLA}2ifM?KJ~O9*30V{Am>m+y$wjTK({3_2Sg-?v{E{}rpL5Iwmm^pR70F;sC6pC1`8sS^) zDwXQTwVK6m_O^^_H%o=~=D$Wde`C3-hY#h(oTImzBrZOcC)jIAxk@YPEJuTcA$e#! zhi0o44P*r9mV`+Vqd2t2Ot8akz2#nm{oYknn3%X)Ez3VkL5o}jnmFOuYcSf9h_T8C zbS!QDsie?gaM()gd=b0s%!L$1LjvKu51h|U8-q{+anTriR1P5~`fYfWjU~~-K8}mJ zt$C*SmL4Qra-i<~KIvWJ$%iZu#uxmSE^qO&FTVXVj!AqE4E?oO&=a<=85r3a_5K9NF2 zr6;AWr1l0sT+?%v`EJSqqLR`qG1^#hQg-i5YI7))k{>rRuYE$wL=3ow2QbC-rCpCc z|3J;;vStRe#`Y(1$-PdXaj@~fe{)+&ZG5XIRbVE2zgyx(AWQ|gf{vs?I#o+yDSyii zMuor8&b_7E03^Q+7ax=#)WQh=TG74;Tya+fS)x&MY$va|);&DZ%VXFQFjj8l|p^&+b!VoqT^r)n@n+e zOUh6R$o??Fx+{VDLuJsjT}+-Xiy(xacZwq0;thw_BEOnE*tYH1NHx0i00tIi*%d=Y zf~QI)A2^vZR!n~St3Kr8cCBO85}%Xrd^{`OMAsR(9mmnZ5WbThuR^rCJYGGb>ah6D zuyBVt^YMOR@DM#{5uD0Lj!2RUqT3&sFf~`FBiZWf72no4{wZn!l~QmHv6&0VcXZf~w!N^G5(-oIcVe&Hk3aG*~1WHt#~ zDZCbPpe`Z+Tl+)gSyhBS1d9WkX%EoNgzs^T) zCqGn-aqga43~%lK;kGCg*4IvnUfdps%Yq$7@!`A&EPJ=?>XzF|k$e`@j4{RK3g@3#zCaOFR70u)QU-M4gmW(WI4vFd zBNrh_yjGGn1H%`(-bH^+6A1fqeGG~JnK$vDceR=bEwI6P{gD^?&dn9B3QlR7O$FgU zIb24kI*jSLX8cW(OpTo>41yL}2xH>2Z(+sj=|UpPREW>3-~WAG=sooYJ22#-?;sb$ z^b{@rMsWZs&hmooP;Y6}#?N##bLhHsdY)jpGg-FCCyz>iHI)EkzB9tCY!M~r0}{3j zd1H0G)=L@Vf~_y|lmPI${_4n=K&+98$q{ zAAcH*s223C)u^EZyZrSxJj?dDK1woUMV8+cE~u~_UoANwpSSVQv>FvH^NGg9%84fhZihP#pJLL-4DUgiY|G`v>=v|^yp3AQ^t>mR4g*|#Z zyqK@m5Tx7tjnO#J#kcB`WGIv%10EKfqftvY6I!;!|9ltPCm`1mjlA)`>MAA?hIk#Jts{{$>z)6o!6mhJ3lOWq^j;e%+ z%Th9AgWe9er)dL7xb*G%Gu3f_WY8rM6dUCI4X8FAY?+xj_ovs=eKjd(0C|ejl)fXP zq+Kq95yOhmpFCOv!bJeD{q>hS5>b2d`)J;_4tb0rmXP>M=G5KX)2y&a&9~&{UD5Fh zgdiK{309p|7q%tbsO`pqk-`$D*Xy@v8v>lwQgs?rm7ZILT9BQp5rXU(e=LFhg>x#` zjA7ql!l8X;9Fp!;nK;zYK(O8|fClL$uq{97IEd4usydr|l#q@6E0dmorqshXAkiK! zO_z^$u}@h%^HHvB2IYP%0AUWm`Y>Dr!Z+QxuX5oJ?6mR6_a4-fDKE;6)7puPlnEl7 z?)F)wG>mABdsfWRS2?7&!+TJ*^CPiIGb-6d5zSX8H5P&L%_ z_X$RmzRHq=lTb^oPo&W=ArsrVKBVi}b0;7h9$O(|pR>75KgmzJk&GOv(rm6cJ<(u|0SwOL+2Tvi-2o?!tC${HSPMKI=hI?+oQfG5Y1hGhr0tx)ivjZC`7o#Z1rM zOz>d1P673cbkkM~dCL2)r4=DFxOJC@-lmsTmai zb(m$LUq2g`ms&tZG64hrPGtwq)tcFt#WTr83`q@O)v<)w^0sCHpay7LCAHhQOMuwy zXlM6iW^{h-t}eclk?X7giSWS*C`gtp-t#@Re=`}GMlH^Kq@wYkt)k#ZI`5Pp zE0`58YrcVXDMinYn6`6Y)+xgv>g(z7z1>BYsggMr`fzE^jujY=L#R5v4crp)-Mx7n zEKz(&D0$!2SoUh6`gQzV^)x{c<-9lfmj#qL zyR;7GNzno!FN$VkU%I{0q>4aMWrN)S;hG8~tKPT@S(fdvg z5IdaqvvJ1&ch#&W&;L$e8|Y|oD{FMJ6Oo#AFT%|2IS<5!F|f~<2y5PWMQ&BuB4GZe zo=Glj&R=j5c~l3#!kqU+W2{t?>|Om+u$=jInM!?Z77aGnv-kF9;sozb#xKQxE?Myz zjHflq!r*#k_YJN5UZvDoc2C)vuVYf1ZF9~ZV^g9g=W8r(p}AouHcKWcZmWFi{83fr zL8XeG^ATyEe`)%d=TXqMl8i5Wy=$q#E1AMg28kU*elMqZjnwgfpdxrwU7}t$QF!2H zeiZJPqh}}cfis0kwhUNXcG=uAZMXb$9BZ-oO*)%6UN&X0-0_>*v&Ja zQ@(S0ad-QCtWS@Gcd+2^xKgS0PdYQfhgN&?M-LR&@?+R^C|vEgD4Q*B#DBgb0(R^z zHggHR8l)N$p1OF&(ZoS+yKdmmCIch}$6QL)eu|F%OFBcs?%moyYYiNFPJ-Yc3ae{! z_Vkj?)dQ+DP^0vhYPmLqc;q_`u<;eAUiw%u#=+>&OqH^qHHi>r&FW4dSlUUCte{~i7s0|uFW z|Dq2rx_9sEXJfG6tG~hfG?01k3yR=lE7;%W!(ZNC_=Qj!>uZ6h%A1QZZ5^sMJKZgd z-4h){5W5}7&ww&sRGY_XUC3JMqO%S@(m*ii)Sr8l_1m`J9Y--3PCenHqj^iebA{eh zQ$)~ZS2?xsFL@w&$znebv^VcK3{?z>mM2(-T+2wsy0t-ckvAyzZvv6C&B3=STZT^1 z7KL0+Y~W9NSFLUl!yfPTpEQPizhu6Ez^m&C=gX?Ie8^Z+`StH1+H~K!K_|(r;o3mY z8{_z?;mv3J!DZc?Q(*~>^w?Di-r5)6rQPT6hZ+ks({o`7DbR~<86d^I!MJfJ2Kn)* z)BgFx%WI+R#3JLg&1#nSgECWnY9bt%nbCzWo$YCE5$Pt;J;NlZY*L^A%{z;0sJ+X! zY?)yNugvv>IkYaiW{^>hPMY-BP-$axV42p-v92Ak4O#u=EA>WjshLEsyv^OmVP;+| zF5KOm$7;LTA(qJ%?Xr-(Q)ptSg%`_)zfOuPsCq=Hi~SKn`;nRxByS0mLxfX2jx#E5 zBkgZz9*6F?ghA|b3Ph4Y|Am8MMI?LYPB$H&RD(SBv2$7bQ@AG_ZwAGz{z8R27qDCB(9dA1j7N(!JO)_uyKGiP0fm$bgp&Ww9g$QSU< ze}M$WwMW;UD`Nb%hK7I>Y1C@UV5C|CVpn&+eTQ+DXCv9r;FILL>FUE`-z5-sy7YKh zdi(8XEk%X+%P|+JguTqm=Csd=5khkEaOx2UYEIAQ zEdMzrBsiMY?{+1eSVTbRe_FLTBpQOuXB4IkLnWG9Spfpth>h zc$2Eb5`8!OEIdT$AsjtdH0XBQK1ZLN%>OE%&EF47kE6x1Yb9kz-A}lAVfd3tk#atu zgELbOoH2a}$t$*C+#J^2JT~p8#6}Kx32g5hnM_@Xoz*D1t)7zK`)ZI zpRGf4g%q^~DlgRudq2(FzEo^|G*ZG}PZKowV}t&6dsXR$jN-+3 zSP*z+@G#kw&ReDPwy}?oI%mu!vFvB4y}x(ltRQyU1vb-Zy$PgengtZp!PjcNL-&Vv z(~R_3+vhSNGuQDm68RD0uCi#Gxkg0oZ2++joab8%9W$Ch0>Xozlk!v^%>O&N)SP3` zANI4o#RvS!@%FBl43IoNA-s~&rV<$5HPP*zjx3wD;D#aa+?cAuI&h2RKN)yQ7%Iv{ zfS|mnV*Swr=?Nkve0#5^sGE}r(Q8d*o|D~VQ^CAWPNIa-^LBOEn7%dNRQtm!YZg)Ia^o69b9Gi1@+TN> z?s0983XnWAaY9PuSQW8yP@kdwZ!WLbzbL)M|fGX z*WHT!{w0nxRhcpmA-NN1dJ+(WMk-*wpT|AkR~qleoG&@wBDyv3Su&9chE9C?)U%4o z-udcZw@5SDQu`n~^&rO*mpT)Mb{e<+B`TjDd_IFcC}T}!(j`8kseUE2`^l4Ed7AZP z7};0>#|Y{LyzQS4i$-Su?OP6c==XcqIA86p3la<&N&8;kBY=ye7OGSCthZOIB7IL< zpFFX7%ld9Ql4e5aR|F#INht7VF21!(h#gTY zuYAAine{W-_wkiA&QDj<>F`(6VWayZdHT&^RMPT%bAbcX=qxqylKt)_9A?|pW+~?lvVa3Ee!;IbJ9%A-4C(%VH3JGIKYsk`^T13Rzu3LO@e{8ScW?& zt3Ys;{b;t;Gr!W1^3Rz~USIs5YwKLn{>~DZ>VfB~AO4%JD?PFP=eAOLUP;eoEQShn z&KpDAzP8}RWQRR}(U%@ED9uQG!^C5#*bX9%Gq}BGZ2NAu^K*I3ZR)Aj=eOCiFtqB= zEaL61N?!@2>$l~Ou)U4+`pF4+C1hlwr@nv{)WizETil+1A#T0a@tU)@=hH1uQ?ZJUNtpZb z9z8c4T)k(726yKiSJ;q2wi9zYs&O=*`EDW*ndg;#=G~R580E5FM7-2*Q_4q>;b)QI z^}WzlP%8@DCHXJ@f)58P7~k%5%Lm*=A+55c3<4YTb={2u&6fpgKGnv zQC=a^UeqcV@w#$YYaqlrO5)2Jy$^#*T#ne!nodi`J7;a6Wx}oN1%v7G>m=T%gy^3c z4kG*{1#}e42LhY4P~#p8s`gS|8@6GR?;Q-S6FF(@`u?hEbwQ3|5_VunVx?6<`X@(O z2z^v(-K9;e!?n3R!kSz8XTxLms~0qHo(2P@U!Vow0s(I_`v%C|9NbzqtWAzhfhl9TRBd?~U2;QG;SL*_yTkOkX{NMkMx?_!7IS#P$VTH%#hdq?r-M`d6dqv~ zJh$S5{A_FHdtP7j4}>=xKKM^1sSj#sk&CP52m~%O(j!^dyaSQE_M)t3qp=5O3>0Q= zlJB?WMLB^Vx?B2)SDO)vgS`qgGS|Boi8FT{X9WlTT*)30NV{ejE%{&3jSSd%5z-`I z^!w*^fn@{>;F*mZFDx;t-_QGGL&#sKf|gP7-E}2gePc&8nFC#B;am`<+(^u!pux+g z!6?^q-;y>MRHTX?&+V+ByR&Wh(01vCq#tB)M_|6+-wrBMm(R4pYv(@~xvBK<@J;6A zP8Y=bqZW7jPx^&7wex0oIfA>V9uJpxL()b&+xAziSMc$iao8EY8{WkU1MAHAdAZB( z7YFd>vKNVMm-1c(y;gphJ`AG7s$>)d8>K}_ytG{}>1H58tXH+>$HRy>tv&7;8iAd% zCX=#0sHJdIVpTIlf~mFH5Odp&!bW--XxYKjE>HIQ)@{Dbr6=xS#|r``rk{(}RXEBT z!u3fxs%01ZBYGS1Es7k@0o}U1C^d>*3;d2%<>!5k07l9-G&1|f3l?cpd(B$XVq4C7 z$IK;k$eGl-*S^8;>Yn%f>1e-G1{wJX^WXIVAFmZQ(xpT-i;r-vDXoU4M`DNgbGuQf%)~%W@ql$%K!1D}T&H?$||9GcF!B98v*ntP1>H+_-9RFp+r-#>>)S@_< zNeZ$#TRgs1h`$PSF1_{%4ruDuCU3J!m};oq{kFRM3;OAtaNn973q^`kQ_4mQJG`zM ztykA514#eIZVyP0+zpAj8KT+nD?*>##hA?33;hm@{aBdaEvN%XZ_s*FIb~itAL4gL zGnS(dJfNBN*s<&j6Spv$3$~SN17rl}M)vNucTgKg?LwbpYKk;m?6P0KQd#fPI|{3E znGA%MeSG>A*^Ay<7v&868$9z)!@Okqp{Fj{_N8EBPOja)ya2z}#7qQ6BkY~k2DHq& zsKZ;|hCihVmz;zZWE4_5uGSremhq&x|FqTFbXF*$rE8FJ^KE&Ebzqw^8Mdi(9CAS! z#n~s>-(_Ii1VayV3^wDjiRJ0${+xZz`L(N-vJh*lkCsn(Kr=iGf^5cuEF5K1Pdn{4 z1eK#n+Y9GTY4-V50j1eTS}M~3t6RjS#c*P~+o26eFLpwfYrhai?m2J{MNB!Ge$RL; zQ)&$@^Kg3`%m7-i^k-u&?-(Fx=iEV;(=_*?wwS@cC;xfI&k!% zvY7=$QG+Mp1D`_uk4Ec`#qc!(Dx@s^?=9^PJRy|}emnkwRVU9NY3VPLeltF_3As!9 zAT8_p#t~Y!{M;SG07__L>>)*&xq;P~Y)clEX(`Ipqg;u{^1M84i}&Mw_&nU*ThpWX z<`ZLPdLokxpN$T-uz8Lx>2t=4Pi=q@#p4#CHjSgc`P4%E=Bw}WBL@e4Q;!R3x*^t{ zbJcb6&4S0h#|W;d=GzNP=2gA6Veyz6F_W-T$fg^w>w}MXNuQ=$9e`5CzzKWZ@50B3 z==Z3u$XH_AT@T)LBv#{^PL3OylH4|1oO zgoA+UXFvR^mTh!LcP~=>Rpfj-As4STa&VF$aIcwX2WqflxOaB1>O+$6?hOI?!t*5sw5;CG}5?(3~TCbki9{ttOw!BhH zU7z8@*Qj6m^y4Wu`BdOaE&^^3<1*ab%y;hGLztW^JlpM{E+9O4jT(-7t zC((=A^8nrV(Y_w6poH;8>YmnH3D6pA_;3~4FWO3Z#&RTsj?pHC{xe0=Y#Bi4NN4~)K0=(i*+t*p97?CX88KEf{eciDK-ik@^kd5;%zB2@RDIY z$J5z#jxyDq`VlUWhRBS|mkdWC?s=yOs!_E5GigA@zSB3D6(lQXRm`X%h59C%*C>_a z`$yOEI>dUY^T)m#IP~cOeHF5K#|fNESZaod&ayZ_%ldw_9$p2iLyjIP&5!a0W_xO+ z3ZCph-Z1TL-XB6lv0oI(FhcN`uxBNtIU$2AI(ke@#kjx6L9DT`A9p#x>GIEzNpUtE zO?#)3tu6d64oXjXV#bmUE6WTVh2HN}Z2N?xnj`nMlUJA*#8Q?Duasnr-kIdfg zH;bSNx&}fT6t0VGx?9jzmdPKC9bUB@)v}z=?JV( zs#lEi_J7{Bs9g;*lJ33ACc#fT)~3-9A_ku*pX?4f^?!)Cbvsg*KIr%R75zOQs`(<7 zodFC*YtvEG=yl)MUNseNblDoM*v;#=X4VjMo6+XC(o}v(Ak|*IIPtW35l?KC@ERZU zT<|L_6BG{;a}3;14K;^-PK1snG(X4BI}};B8@;csS<@!iSgf&6dcD|I1s*}-FQX@b zu+mHu`bgnDuAc&yl3O@xv7>rE-RUBFVWDxk=c zwqC@R<)DF>3QQOMG4QEUcrS$&YSB>t453FExZJQEra#@M=9;%GhYYeal;^z0x_*() zokNe|B9!ZLl()7$=FQO1U6cnF5vDK?)RJx0<4+RmJFZv+I476}P zmqRy{Hgv};Em^bcYKWaujUL)RU|{|yt^SBnge7g}XxgiG?aN@lh|uZtl76sWM6W2+ zocyaw@E==-?#}1m*M|y!u(*hascB6@$I=khPQla0)6UmgP?28F4U>TrgoE2kO}Fml z&UsfKOmX83@I=|G(LM0>!-w2MG2h&h3f61UrwSarPAjIcSd6>FuooQ6Bcx#H{wMyz zWLRt=v4sy1fu!yI`zjF#aifk{xX3(y)0%F}!nrAjrd>;>xruThVtIcKj}2_uzj!Yb zfU}ISm;1~T#x><~O%O?uw9AYb3idr2dz&(Mh1~1=(oN%QjXbYWIH$-7oC@8~>Ru?q@KahlNTV_&9gYU$FWaWjw-y&D@?mVf=ajt}* zoxo~mb$r-uw)<4rs%hJsJf2u}BB(r=8F5Y%sQzchwRH|s5Bsh~-Z==$&9ttx_{$MI zZLhZ8D+}j)iDje=WT#d>Lxppi8S)voR83J_!=tv})nVL|9SE6{pP1Y@PfcAe2K-Pr zS!!C5M0c?rkuMN3ozE)eL?58e-riD_#=XW9jq;DH@WvDGf0sLnC+{VAGr;SyQg^w0z>ym={Ds=wq6yLi%vj{$_bKCzK~P^L6G_`TwyCn@28V1?Y3q*Qs*bl8vu*}HaTc07lUZ3vcUQJ_gOzY>^eoL7RW zXcOKTyA-A~GxliB#*~8UP~9%|JSe?-+Atjc(RR%eE`yuF2j;&Vt#FdLOuY)E;w%aI zl28f5ygH0ux|MRax72YTy#GTaZ9by3pbkhUuBmk`AiioL4lAAz3Z-{ixIpZ9QNf@L zflc6ylM7dHn+L|d^+CL)?=@O(1XidLKgg_CZpZh|+TH%tIVcc1hr^zyaI%zt9hi_Y zWCM345V-;+pb~n`uP{r-`RkR+CAu-D*!IFL=S33ZYXIq+@l)rU5OJen!>V0g@y8(LAAwqhprVIzh6#ybkX@abQ%40-bCNmpWaFGE?D^;yG z?lPKrblAn#jE}m}AH^4K7SFS#cam@r*LzDn;Y>%o3wr(ry?j8?pd`1kmZ1c&eO z?+WCSXLPw`sLmR0U$!u(QLhI?kYt(zOknRYOl^);m)c{@e%OOI&e!1hXl{sQ&Ib?Z)#h!U z5}il_CnoZ^xb5In4^V`psg<2mrrnGWqf(v#GnK_oYol;kSMe9R>lX~a#oo@fAC#%u!ssxOrZ>Z;+y6BWzAo${g?y$}gMdmc{+g5a- zgfvkAgc7N9)_8!lVL*aT^2hh15*|z@{&_@}-MC}dErVv3Qmvji>s6^#{R18@J-b}SRW>ng)8~uSScjf4mLoY8Mx~PTxRugfG#Mb_BQ)goU4>QHX(D*ks zHqq382fRcXoPK$OX}9$)FDTjsbB;3cVQ?TjZN$U83ku`*zmPbj__EmmFM4@-BdO>5 zZ{ImOn?E%^t5qHKjalr;e8pV6#^gtxzSmcFu2e1)rW~lQ2CV#?yjJ9AOKes2{M&OY zt`LQwb~iT@%smR{>SPbwwGzS46qRz8h?rT{P-wz`CzIeMUu&x8%lSJKi^K2s3SDd? zba4m^8r1mDSNbq_#6$8u&wUNt@3o&?2t0zFM!&FZcv@n$HM#@2`QqBFl4dT`oV2$X z4Y+%({>GO3eMc*S^Gm3A`l%Q9-|_hHwTHL-Pey3C@BHGpk(Fu_-ueNMN6vk|lUCr>iiYy$~+)#Ov{}Y<+#^qL&*5eO-=Qt)M5lyT;&H-y!(K*eVvN|Z zlhWWv8Y`bE<#Zmx+KT(rFgO5DM=AF{wja8fD)=u09Rx+&OVEIMsn&`B+1PGJrTdX% z0kY}V?^dP|<>hyWLzg!3{@Fo6R>zV>r|Y0|cv*hqTi($#2!Lxj@g9YF`R mAirpk?0k%<#{WywKM=8{44E{ewn2N!p}VDPa+9Qu!T%3K+e?H1 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_031.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_031.png new file mode 100644 index 0000000000000000000000000000000000000000..8f48632d3037a5c2b9a99cd9d23f3b2f0fc2132c GIT binary patch literal 5216 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_000.png new file mode 100644 index 0000000000000000000000000000000000000000..50c95e362e0b114f06a31399f54c3a5a5e58ebee GIT binary patch literal 7939 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 VuN#k3rTvzPc+ycTJlUZVzL3eyoU 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_003.png new file mode 100644 index 0000000000000000000000000000000000000000..e0761f19ac24e08a5c3b63cad3a4ef5fb53ca015 GIT binary patch literal 7096 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_005.png new file mode 100644 index 0000000000000000000000000000000000000000..5f8b4a28bc6fcba67f8cb302204d75da30c10a2d GIT binary patch literal 6992 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 at6i-n>Sb3R7{&Mm0T}6<=~dlwjrkvHFhBqR literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_007.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_007.png new file mode 100644 index 0000000000000000000000000000000000000000..974117ea391b43f105ae58b646f3869aa25f6204 GIT binary patch literal 7029 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_008.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_008.png new file mode 100644 index 0000000000000000000000000000000000000000..3dd6fd0e94674d849fe34cce63ad2f7f124d9b86 GIT binary patch literal 6964 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 RRPUsEH;JQt)(`F9KBipgeo)E@oKui8~ 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 MhUNy9dPv;=01hqq9RL6T literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_010.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_010.png new file mode 100644 index 0000000000000000000000000000000000000000..9c5f468d0719d22aa121268dd95d55ed9775b65b GIT binary patch literal 7912 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 LKhrALgoOVOo_|6e literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_011.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_011.png new file mode 100644 index 0000000000000000000000000000000000000000..8258b3b8b9ef298c04c3a1f883f0878baa6e8737 GIT binary patch literal 8103 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 Gum1;--1-dw literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_012.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_012.png new file mode 100644 index 0000000000000000000000000000000000000000..053b340afede7de66bbab0d84c1bc738b4dd9fd4 GIT binary patch literal 8046 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 JrG`!T{{R&+{`dd@ literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_013.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_013.png new file mode 100644 index 0000000000000000000000000000000000000000..ca6953cea4c7e342ebe0619ac8fff0bbb2e409c9 GIT binary patch literal 7843 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_000.png new file mode 100644 index 0000000000000000000000000000000000000000..57e81e040ed2f7213288ba322a9ca5368fff417b GIT binary patch literal 2292 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 aqZ0fK5#oYAEch!bWNYncReb^Z=l=jg>%-ds literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_002.png new file mode 100644 index 0000000000000000000000000000000000000000..6f33c2f428a04e369c7bba52f0747a72c6f72002 GIT binary patch literal 5175 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 F-vQtedhGxJ literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_002.png new file mode 100644 index 0000000000000000000000000000000000000000..b783a7751da1f1ad8c520d1279d98413481b9863 GIT binary patch literal 4005 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_003.png new file mode 100644 index 0000000000000000000000000000000000000000..5bea63daae724929620d756bab9712deca5ba7c5 GIT binary patch literal 3904 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_005.png new file mode 100644 index 0000000000000000000000000000000000000000..43ad84913a0e9e76ed57addbfb79d2de5b733e74 GIT binary patch literal 3669 zcmeHK`&W|L8isGsP;&%LQ1Zg5lR4fn6)mrHLDIZbdeqED#Z1REWz0}egsB`U1ZP>< zq=}=avGGb?vb5CWpk&RYWf*FLfen+2Mjn(zbH4c>&JX7Y_gZ`HXYKXw%X-%Py!+Yg zqhTatLyRE=0x=FceCRj?0(JVk!}YTiXlFhe#unY+aaW~yBtZwjdzg~7r9Quu+{*~09el)d6y%ZQ|aAB0FS5O)&7ZHo! zZV5Ep0Y{(XUkYPjk#qM)5Nsynt%gkSPMJ60(xD&Kc8QiJybU~ms)Or~4i9s>kcU?)fi0N4Z^-spKG`6vK`-S8tY3EQD8@tI$?1~Zv` zty|!T)SXztgwyr?1_(sVG6V`_z+h1ociilu0PxHPOQhB^D62`xP!P}9D zn2Z}wt6^}s6P*cRc>+Mg@5e2#L7=Q;69jf7kdV-E!r`JR7Au&CZXUi#`)0!Z-%4%F z^F+NLec1|KTWKz$EA}$*V@qmHCS?uJO;KodvpRK7{zijFqbW=;>mDII7jgYD&QhC#X*((pq_{B+U7fTZ_x(dHY%$d7uDv}LBIL>QDU5B(eK?M&HokKR0M5E;pQ+^J zE}zf&a6rKJ^k6}_lx2^k_;mg>H#fR`QVM6A-s_-q5E~M9$)+9Xcil9jTT#*t)^F? zkWpSj*ZAA6BXz!f{QkUyMl8H6-`S;}UZWE2?(h$AY5ab-#v#M3na_bPRC)+Y-g;Nr zW>?sQwVAxAfzLH-m$Xe{&SY=R(0dAHoe|hpZ-b1oEtUrGB^%v|G?kDMdzsniAkn8# z3VbFQ=g4!&sBSr+TNGA}#$HzDs$NAe*IW8RD~ub__;n*LS@f)Hh$-fKuaoWRJoef|CmkkUK`)WpvTM1=q^$Rr(w1o z&qey@#&!;=o>cTMyG&>EK?RF?fhsmqEvFWUXO?+F;_?qee&`G|S8+#gF{XXUF`N;x z_xainjE_^3J%0yJG*(e9hn=n6^Da>b29~?Q=x@+P=s~t^+{{c%!OJN%KkTFD-J#ir z3qZr*`kiLI-f>JuuO)giw;@<}QtP*kDqmw$XJjwte*3U}(eb<^_&VwRN$=!bU8q&B zo7i#H=i{<=hs<{#Zpfl1RcZsSR<3n~)6PjsR!qCh4d9JCw8lT>Q1Sz$E6YVe3af2s zsZklt`K28&_wT*xMw0hV3mm-77WZvR<@sJc*cc2>AL86hjf zRKpe%(fUnws*?9Y`SJse+~1XY4@{emlKW3)+1kv3!_h9jV~G?fSD7>+?N7^h8pfe} zzKG{773S6TOkYUsCWhezsKlu^LDAuZJTK?o?CcbpcvdFV%Y6zcZ_}Q-dOKlUG_1=3 zCE4+95sV7&oJ7<)I{`{x`rCU&jTOH%FVw0o^AF$cX*iw{B_99+nTr1nhqpB8@ zsd~6Gy=q*TcP$KL)vUC$l^9pO$XzN(&B=G|;dXwSpY!w|m@ayNE&n{ySMdA2Cxs?u zM-)OnFX=VILwjWHwn%Pa8@?WMb6(2B6ed@I1|y>tF}_Dm_H#}X&DBd$qQP<^C;DZ8 z4f-9wRk;|6M*W(w7H;S1zvA`v4ObgKzmCy>Gj*f1i zw=e)K81x|q-9N+Nr$G=HY77N-fmY+vsR#h(1^|w=KNmq*rl5fPo4D^!cL8v}NNVqOI8_Xnt&LsKOD+KoF4y+(pg5O2Jg3iY+Ee(#a y2R+TM`CF#gQV?ujXOo@H+}Tvt|E}Sv&o>igBGjTrnVLV}24hnf#0eD@bO25iXy literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_006.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_006.png new file mode 100644 index 0000000000000000000000000000000000000000..cc8f7d57ed845bcd7e44584a431f9ea89d081ed2 GIT binary patch literal 3668 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 P3c;ekjtLhK&)@h5<=iMp literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_009.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_009.png new file mode 100644 index 0000000000000000000000000000000000000000..6dd0dbc44d0bbdc8aec098cb8c57c9a2d1abb3b9 GIT binary patch literal 3746 zcmeHK>o?ok8vaR@(2}&q7*rbVF>OalJL_mmOH$Y4Rt6ztFtlYz<8mTLln7d-=>(lA zS|vF>I_@HECukE%OUt-4mYF0BB~-_~2u(sRa&o?$f8cyLU+lH^+H39gzWd$lS|8&dp(rQZN1quZHVW_$1W*K>PqzxlPy*2~iUc0kS0 zpM{S|ul9u|e4Svb)h02b+Fe`NqndY$%?a&rbcEbR6{(PMczhhCRdzu^Kvq_#!Seu+ zt-hmC|A{X_V0c;q>l#QOT5OBLoJJc_0np8>5O^MHzg{=B(JxpZ3O|_*=;_CUq2U4O zf+KlA+#h?uaHvNfE57OAXL|bJK^O|i{{nQ=Jhc3uU^ogR2SDK0P%O{p0F}pD(c3M(3-~V0{*U4k??e#0sH8hqXWOL1 zR{UnE%8LJob|JfFy{>%K+bIPzTji9Sm8{Nc3xz;@FeH7{3!7?1 zQ)n)0XT8&gPLW(9w;Bui-L5%Bujt>-=MI|=uLvk|IR$WMS3e;u+omF zG&T>td#d!L8Lp7p`J>xw!Lxnm>3xgCsP9I#7!>k+K0*{bnQe#Cm|fIfNjrU5(>#7O zB5JxQncm0zYh{wD&Ia-AJ$T&s;noYXt49s-nU#v3wU{`WEsb2m zB&r4P6J6gKsjS*6VXKc|?9cSNqo^N71kcJ@E`JUtbJgFcE94`b&Z#BV9Wv2%y|9SP z>T}RJe#Hz)_>9Zr%{=$f)D^-csm_bXG>BWZl3N)yw9kLzo66e?OU#X+Vk!#~AR3O9 zZDO!C8v2V=ywkS(rrd5nHikIG|4l(C_-_=kO}Saw@jy8c8T;)l+FHPWE!2F49p!3*4lGS-6 zr~37CEdz+dci2ybha&N{i`WV>vO!q87AI2dome7y1ad`$GHh!WV$QDRWAcLHV9NG| zkiRQ39sePjV!p7K_>UoHoWs8?<0eITvwvEg!X|cQ97}Z5`l<}_k*?Yv`NjcAOBiGF zcqAXQu|k`JAsyoIoW07dvRrI`;F;nPi?X_@GUnQ^$_FO*Wh$hqo`b}n>Ns&ncPYM! z(y^BD4&F<{2^<)PE`lFbDgTN+Copnc&t8j^DA@bdF_Ly&(~JV%gX&4~HMJC1?l@@P zW$45X1~R^6KG5^wyyWsF@t)i?o}t5*Lfb%)5o0w=O_x1DH`%u8-|KR7$eR4}_n)E- zlqq}qeI&$qT7-)#S?MF}JYp$+^J5K5-rTQ>s4f*PWIKG^Sjg^Ds4Raf%?#h-^^H1~ z?tH4|#oz}c2$|1$odh%S4q9yC!Q=N%W`5DiSP9}I#5Zsz9PVK>gA@BoBQniSTRM6W z-f|R#mCg(|K97m4MMk9d&&HFm0`vtXY}KDK?J2olk395P8`Se8QODh3V`m4!+ok17 z;X-N45+w56>Imcb=KWdvl~Nv`5~9wb?EvGmFtSW*jpMd^OKL<w(V-i_F7~L4>7kA5rz1$l}rvrG8DXh+X<3qjyfDG6$hWmu-BE_ z4|${wo|8cSjhswF$C^wb-Y9~?DVX>TS2rJi{20z+s}6weP?$$=Zqr_Rf^IrJA>zE@ z_kg&<&ySq}nd!vyTHI=xzkA3oCc8Y@)z1HH1!{|z4Gf3NAM#UmpH9Hn>yjta{kwvH E1Ez@MTmS$7 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_010.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_010.png new file mode 100644 index 0000000000000000000000000000000000000000..67271ba33f518b78e2d806d5d912ca89366d3d15 GIT binary patch literal 3871 zcmeH~jZ@Ou9>!5gNyC?I({|SuimmNMvun3fX~j$x2 z1Gaj%Y$$lp&OM80V^$H}NRuXu4#-hTMDhX!NRR;LuKKB#AB!e|8yj7r?jgu4($BUA z4TM4LpiwZNqcn*9-=NTh8}V1R(P&bC2N=@*Xh>QgE_|mw4Cb?c?Rd?WH5~r(F;Ki{ z)h=uYJO$)bKqcVffZYO10^laF;DAd4F#!Ms;sl^hU@83jcv8w(Uu4g3c^p8guT>}2 zvKU@$!-r&z0({{r=e?BEdEC1+>sBPcYB*$>&_q;r%7zK|%XXr>7M72dys(rl41qci z!NMi?+h{AKTS5)yC0O77fxAPKCcmcLTOy9h6UoufW#@S^1^C9%bW+7a91)2X1Mq7L z*f#njg95H2);WCQj&p(vd%8rO#=;3l6S{;=RlPdpD`_nk(U)q3e%T0C?tpK_JXY#A z(JOA7K-rZFu+jL=Bbee(S#TAWa=wrU%8W!&aZ+X{I zM}9`NGX5+gRI#DiD{)YcW9ljsDR|w=%}RZz5Kf3WR0OKY+Jw4oNdCd_A4<&K56NQ1 z_%!B`N~vN@po#!0Q-FEZ-M{$zZm{)$^C|8wz9QQi5pR44{5zPZ&Cb6HaK~iW#PpRb ztX0+~fbQeVS3DN+p1tp}iAofl+NNVR4q!381oStB%)xVklx1 zx4*pBz|8wt10viAOhaY7ZghVX`GRmYYnk3zzzEQSXU%W(X7Mh~M^T60I}*4>>LsZu zcw&p$p;!3LgeQB-Y-+sk*DLJLzI&=SrA$*#a&G>nLA3&BoI#5(yzN@ZdLlkQmto8s zMHR3It65XcP4lPY&G0=61U@;9L!=OlD~Uig=GOcw{5qa+=ex=VUg3+xE3-glpy!U8 zhg)45R3|#9wR4O3*B_VbQVZTm4~u$T#C-!`gCO|(<;$$qyH6@EO_kXoa3Tt?6{U&~ z&b17i!&e&V?D!tbbotW;-Y?*rO;=2)X+WXe$)kznC`$5^7@3?k^6mM82b5jYUeVYz z&IKuVN%&~W{E)iZSU(;N;xiUHbldQ1YpuXq-FBuys3!?cfuy|(A!L5E+8xJ4wazmb z%|9TT1eLrd)#O0-%0Gtd*blB|y{>odqn1h#t3g!|yV6|f$$;?QT&=`B{^Lb{c;Yc88qGU^#_Y}6h^W{{XHD7{})ZF`kG%(Rx<;aQ59Lm>?p$ahw}emT(MW5>)J++ zm)O5~gny;1x%w57@4EhDf-e0w1eYHZKUoRx>CrXNiX zf|%!)4jpV|WF0&il9si3wx$iuHtI+frr3_MFC`qbvEkNR5nB$)CGqT0|!t3uk_?|IfddR!-OPiada^ht@67C8Hq+gu1ns0ftFv>o?g z%^hmMyEMRdbJ+i~$L+|FwBHP=8rV}0cU*Rj#|`NjdwUYs6of@q(WF1M+(?7Y*s_%) zQU=;*+xow|8Bo-|TAK7{Ks4-8fkN`9eNdZAJ8Vdu(dSl$c-xh3B7W8b8`_TK&lK`< zpwlo|bHE_%SlV8@(gVt(dnk9TtxZTew$DDtX40CJHCNVHSxb;*9X*2Q8yyOFwf%S@ N5#do`+|abk{|5tcXpjH^ literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_011.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_011.png new file mode 100644 index 0000000000000000000000000000000000000000..db8acd36e0f646eee966e2e29bb4e10b4157c697 GIT binary patch literal 3754 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_014.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_014.png new file mode 100644 index 0000000000000000000000000000000000000000..8ffdab77042522b3b5ba2fda40f31d2175ee743a GIT binary patch literal 3546 zcmeHK`%{xw8ct%k1;r?W)nG(h6c;fS%M^4W0jU(h5X3?Vn?zud#fV%#AY785jg{)k zxb1?v3IP`Zb7i+#G?k?^mGw+;v-e;b9 z-uJwxnSf7ThuDgMKp^W72)6<9j}fgCk9Zi)FKr?xe)TQ`f)T`N8s7*5CH*i3)j)JQ{$EYK<*ONxVbo zO4||Ea3Ren=EH3Nzh#crdWUpMJ+SRL^;z~i>rN}0x7T4Nh^E`bGU zLN<*Yp8IGQ6b9dyNeqBOVf$f-h+Tg;zcG{}x(P<};hVD3PI!mmaCxz7;Jy!i!+F7O1)~X|7$r7UpAbI9)D)Er;@P; zpKfTWxJy$D&gQ5AgT0U}!~Q__EpZ$-{G#ZFeIAILg(*D}sr4$*xD3)j&;icnMDUf{82tGuZXzT4%= zvfZmEYsqgYXUh|yY#>48C37kOVJ@atCR7cgv(>`j2XFUl48h`NhRGb@e|Bye5c=$^ z#SR?oVaX5f9+Ok6g%WLcu(U{P8U-wYHkziMU7jt|AEvR_j{}22SqAJe=PQH_7~z7Q z%n^&m@CvE_p83(GnMlrhz?Acay*sqh8BU9^o_X?-<6FxX7=ngX%nXWu4$PuRm_yP^ zeRP1uis27Y`u|(zx=9r3`a4 z<3+>FxIGaZk+pK?Yr;r;>FsWFrZJ6{d`5(Gl4Se@Rrr_dfuKemw-+Z!)!esO zyK1tgk4xRdeA>eJtE$al7*L;CdRO6`2=>p>VSnS+)2XdfGP?#;y5o^!OrA`CBX@zX zp0|-1LILW`H}9ylTMSgXM_F(f#NA=->$azh?9EGjbSanJ-ml6>374;v%tI)_D_J+w zeZiPxNW$eUn8P)_t)}$+drvOBui=jy29`sVy8Yto48AI>B~|=l!C*-LadCo(%PU#S zIDKDC!P!04mIeFznn`o(X7V7`d#(qtD3(C71Ny3YCiBuGUU?zNz?1p11M-6TFY#x= zwqCJR>M6lQ4P_elnMt$wZ01+Y@wSzoL$$hPRW9EelAoY07mux*F3JHp^WKtbjA~a^xg}8M z+PwQuO2rojl;hWH1@sl#D|@qzOu74VG{fTK9PAcQL;Roin-1sc!|EMde`Np`tw5=! z$KNz@EdWMn^ruh7sUN2EgmtFaOI(jZQ2ooy6D;Ny&5K%v1et~APZVEd6jUZOSUEJ+k}5W4OFysTzhK+&`T6X7Muqa5$@gf0CD`40mm(O_|W|_oE6>&PpPO^2Q6{( z&fb>VVQo$5C6FX%TRczWtSZJFoV=Y@HA?q1=fvWzU28)lN+W(O?KxI`FLH@fEMwYY z9)!1B`?0^RZ$w0D$9s#$ive2%$^W!4^1=(Ai1JRGVG|qh>NkzfduC{&i3}H=91^p5 zxtiDMVbY!ryf3bUtBR%2Y+LBPKvYF*MQakp09v8;l8r4P?xa%zXp}t+Le#dpnMzcp zYD0lqb*249>2|M2=9dJryf=tXS8)meW54N^uSma!vW#JTHz7+-LY#%Arf;d~Je#+w ztzj_z1gTMaqKbPLfQ2gxZam9{)$ihv?`7H@h%&VE0Ub=bndBo;rKNm_ScM)5YZony ztwD=fmO2Qze1+TzR^2)M5K^HOxAElOpCA|frQgU zKi61>UoYs$6WZU~$K$*iO!R6Q+giKuVD={z439&aY@@KJMOdYS=2oAhMb{ReX_(Q$ z#Dc-yVszUGO7o`;m?+QJ@rEky+H}IAxVmEg@tVnYMQP8VF0(a(-yBl(AgT^KKgZbt z2r{pxybN(vkc4Q>OdzpDLFz_pT?8(6B#Fz@l;RiZ{bI59jhp^5mfZeIv}TCf;b8hD z5%HL0Qla#nNN|9_#qvTI+w4~(ilh>viCT;J&8K0<$3@D*g#2S@4T_dk0bYnaQTMor zZl3z2QJPN)y|b2>RL7qpc$CQIiYJ}tsLDWHd}Si7_>t+AcF?ewnZ;6I)~*mgQ&~9B z$5x{kHIP66A07z?1 zJxW2o;rt@#+75;?b~s;^4(015GQQq$QprPZ)2L}>!MrID*;PO_{E!8}igrlnpi%Y- z0xVGcpmSsnfioe&lwPhBfvs>SM*#bFrt!cDI@j~i8MT=$mqTP@pfMj=SaZ_`t$7a-H6ks6{7STLZ82sMiW&s^VC z&%FXS#H3cdpTAa_R5E(2fep~Im~1S3B!-oN${RjwLg$X637#NLcw5iHuGOlV|31}u zX4YR~Vl)9Jix5m>g$vu7HestsE(jJymvoqlv=U4{)REXbU z8@yd>WL1>+r<)^Ew?z-uTf1BS2a8S?W3q^o#oGC=T0yr0Cn6sVTz)ok(y}VyqBn2f K)V6W=k$(W~?Lw6R literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_000.png new file mode 100644 index 0000000000000000000000000000000000000000..62e768f4ec0fa26875992e62251527d3ce814c9b GIT binary patch literal 12362 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 FKLD^aFOUEL literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_001.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_001.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4ea258a06ad0b4897216bd1ba8b027d06bbe82 GIT binary patch literal 11620 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 EKV0zBuK)l5 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_002.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1d0d5270909d8f712775b8c20d1e735ff0d6f5 GIT binary patch literal 12032 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_005.png new file mode 100644 index 0000000000000000000000000000000000000000..dd5f82e4b5a9cb03050257a4df0bcea28fdde532 GIT binary patch literal 12200 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 Y;O{jE{rmAjUIPHi^6GNcGUg%w2WV&&!2kdN literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_006.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_006.png new file mode 100644 index 0000000000000000000000000000000000000000..1f04746d0cb976cb125e057d7cd31c1c94632489 GIT binary patch literal 11966 zcmeIY_g53|6E>U#A`k?mBhu6lMG`>iT|)0Q384xqNS6|%_bLb?Na#qf5dzY?6w%NE zNbgNL2!cp|`2O(z2k&psv**mY&+g97*}Z4xzUR7j-s-Smn=~VK!_wT4FBS>GxEy^wdqTOzR8DBj=x)!C*DRGNt5o3)af5O8`ri=i6 z_rLq>_=nU)n`e2`n`2j9uj6%7*b>ImbIcgoe!M$3Hirzq&H*q4gYFvS@ITyD7RmkJ z38|GeodS?A;Vu|}>%Yy&3IXQ;f+M5=;2Z^81^`}I1YyT_qXuC5^*`-213(9%Uq3fj z9{>TMQ%P=ym#RPjR75EvQW3}pu(GE9f5!fQnX?Wg*JfjN$jqIOeU%^$z0M2%jDhT8 zPkDgtRHj~4z4T{#(ZBI|ovM%q;XQ!KAWt2XUgA}k?c7|;I}w1boLIG|q9u=eoho;G64z`3iI|(v-6@=Xrq{|81=vfo+~6at!H(zX`53 zl{I`5s_;$Zc-N3aZ!D*A!hEa+d1;gPd@&Hg75_v_iQP@%p@64VAXXzplE)=2J^j2- z`EL2+^++k+K{$jY|MB|AX|}al$@91-5JSmPLH8ml^v)Z9r@=3ep!MQAjRuQW9u+z! zK?|MPQKy-BkTtJ)=Kvw#*!o+9pYH5hA}dT#bXkzhm0K+D$fH^RsC*GAZ3n`KaMd92Ym;v2?%?APOU*RyzGETmiR6eje3Sq1FW`xPNia2suG zf{SD^zZoXWdQ~Q}<NV_O`hb zmko*ZwSw!+5PJ(APz6lXnKEqF*{v4n9V1x-F+}?v!kt<{=AWJ6JrRhH?)D^D2#?#f zE#-fLi+I%sd>t0bw1OYbjT%|iz>H+-nZiZC-_LOFb=X%te~#RNXJDMwTBmCYvIWwOPRjTlI7Aiii4&*A95*v;$~U(6vBcT)XT_B+ z8E_~go;)<{hg4d}%2SszEwFI-TSm*s*$Cv4t?kw!n@$oSnX2F&AoEF#ughr0S-rE0 z*_e2~{Mgvfav#QHI;$-tQipw+{zrukUgLc10Fd2?U)`wJQjVw z=$Ap9$mE;olsG0gG+M~9>ab*bt(r#m)|YHYNAtIuQ2hEb@=Ltgfjp9g_f4l9}m>XY|sm)G3_cn02f}8z6x|OHQ2@Y8lNP&Bg7Hj2NBJ?E} zgKz(waM>ltBU`;`otr$KN>^7z#?yNpi4S!tq@MBZ$p$t(7nA!p%`2+Yw9O||ipL9c z?|SCuw{HSc?70GZbz+C|%FG$WHW|rqtXu^wyr<}~QD*&MkZq91%Clj{5`}wtCEAkf1&m`v_?bb~IV^=yPUHVA5 zM-OnC9A?crluzm?Z5kdVsb;P=Qkd%8*gyox7#wH3*p#el{6j~3cKjWmU25M%&bTgM zt~s&ePAhjY6j75+%kR#XdRtI8yYJiELe+Ln(e4@+=x~v!#b|-v2%i7v_0;DYz5O^l zoO;pgEFL#=`&jkCq0{9B%#!V^;l3VupM<5R&yVlt{m@8@Z+_6~`Ba;7q)9PKmwbdr zyN$4s_tN;dv#{oe<)xj!4khbOLPhB=VN2|&|EPULDr!z)ArgSnpDcked$uPZ0c#jU zz#WD{pENtlfOeMuP6kP(TP*}E_zw}Dr4~!n;@aVFwU`8p`|4Vviv-d7t|ozZdN!LR ztw1#eQn#$cEHL8uk%;iwa9{d~<3Z1#K?<+af3~FGlKvjnkI|5=|MxB9)9`mWp<+F; zo2e6O4-;Oi3hf}ZJGG?>9`mM%h+t&apC3cyS})aC@(wTV?b^}pT@{8o&d+tf#uB5m zA8y>Wb%E~OLWD>4-zUQdGL+5Y9RL$Vxze$2qm47HfE|m+tUm4?1ZS$0M8mGeEcdi| zm}K0I_ZLv$TPg^BOsL}O;O$&kK0EO0 zKG=BHOEc345z+h#5g|-CUVbEhn$zp+M1T1G6(gD0>yDVj z`s&CrcBRs;((@4`5NZbboOUUF4XL289YD*$@t{*l0eXM)4=Jv}8VR9k^(rXZ$rPiod+q-zi46TW`McCjTAB(t6;FftaP8QH7&hWDlCbi=TD%Z^_ahTV^ z=s8odXCEGi|4N33Aj>z0QA!&hmkT9{iApL@GaF{uGv^TytIJp7X^QZNxE4+9g4)WK zgT3UkvlRNWuMC}s%l??C4sg#3v*Ab-N7#{e5oiB z@Y>a?jHwq~JP)>KIsI4*Zy|T>q5NXMPEwIC6hlnpOdXd~a1KqmZkToC&BFHGzfXqF z^iO6&Sn@SG200v@^@wV<3_0|Dys0&LRUkMEz5Uy)N@12~4NKg?vocX|9{~VVe zBLgc&1`y$QnW=R0w_1CXe`ms1VW1F5wEuY4gHK}9>($!CWm&&es9ob09&riz5&>^~ z^wR@1|4Ha|F^R-fbdhzIBCrDF!Az{m$Taa*Yw@3W%%^?(9;-AnQxiFkZ!gAEf*3aD zk#9eGNk)WysCO93!ts%TyUnzMQcr=q@^)+iCgCUw)uR7o6}$3`THp21V{&Xi&8mu+iWXZKP6mlSdI7?bw!e?M6oxG1#L~s3yk&fiFIvZ|YD4!56o3b~rIAOKBOOago9EGj<)l)t zEKu3OYhK7eNqhL(SHk(1<-qixWs&i^UuRY6*^pLi4(TX~g5M4g#^w}9iwvKZXrEUL zvoqPUqj|izn@hR$AAJ>DdA=oLXLc4VIoUs48|qT16jCd6k^E-%TKY_zL_kXU=-P}7 zHsuDEs>GC7*+p!37&h`Zlxu4bT!_&L_R0P-xy3Y_?Bj3nzzou1BejFq?g(urj6YX# zi~vEm>>al0H_cb8e~x~&iLyz0`8u)P*Ok=ssf*B=I-6a5GAWo)7(AI$yH)?1*zv-p z*au?w!v{8)p_xT^VZ(@i+YGJRcYs;;8&}xGZ2x2A3v5`{Y`_)$c~IE_nVkw8c=GdL z`Rh^DQY1p~!yS6o6~ z2kvdoc>f%QLI(6h%R^%iwp~X6cBclhM|hNy%xsm$H3s-xUr}^DzuCS~tEq!9XNG)a z@IL3PnHWqNjk=wZoU!UR9^6Ak=Dc@D+#Ri6N5W!nkn=B@eSe_N+q_tk&j-LXW8ve2 z^Q0N&UA`A)F(Pa~9Dl)&50nd-*g;Q+0%2q8otfHg>tHm@?s8Xk+M|!-2osn>?wc(R zmd{ord+jNI`2i@PE8j=+B*<7K$$RJ~i6X<`#InD$W7VY?qirna`81EfbkZ|0wleR0 z`nL1rX`3a9AT=&iy{(xVhW&DARjc&W;ovW$DA|%#;8Mc3?1wNXS^f%;)~)0T$F=P8 zk^L_f1;A!!cx92>NS@9qYB8>TRL`qDQ67Jr^0GpU8Z2^twhANZTX-{O0cR{&U4Z1~ zoUAV-ZO-aCZyx#!Q60(0L15;Z#;-B_bE_m+Hdey@+>2zpQR95i#?L>0d|SB=PY>Dz25vrZ;m_{-e|1gPwj;L$2Msd+2wxalDplptWfTIWaS|77k#FzP2TcF z?!;TY5ODmo9qZeEL^~EczDc*wkKWA04jL5RJV4ozsHDVLfLO9tlKeL{Ao`E@-e_29 zW|Y$B&{*Cd5n)2c#2bX+p)7^%gh=(sIqc`_xtR(uAJL7mx%m^o><2`hzwhMd41%U-Jy( zUD)kFC@_P1Gw2V~@Lf5zYRj$Sv)^UZi0VGg0zl?`dA>G#MC+ zD=?e>q-?w<^?r>Xk3NM8!OV{Va+Wipfstzf@JNNiCF_||AN_{wGxgMFS!`cNVs2r- z_1lwY0bCs3^Z)H8G46(emf;(f-RD)e_}tOfoMRu7esg~?y2oUD7d^X9R(oD~_9ma{ zx}o&a7q$b0(AiNY&Ot zmQw5c$+Y=cqG~1tOepJk@p`!9;p-wH*de-zsz6#ISu-WsHY)jLXX_n~Kn%(5a67Xc za{O*oEIfo9!oWG~)4GAz9%7U}af^`!mETV}K30}4Qd4V^>%90{s-J^{Fw~37c51hf zpl#T)@YGsfQFx6J3;)N*<_BMY_7Ns|%^?tFL#wZJtfMyG`Cc!4^kWXUUIqpBEr^GQ zV;|a(z;5E)A4P8^&=gg%qp$YLq>i#DSD}Xi-4g1uEBUVCND60|H-{<4lkyDqU108% zquaHZ2MyKv>XDHjZ}S-)w)##5VAQrv&yYQ8K&oJnHW*t`a6Xfzybf;QAI(ynoBOK0 z<2}TWZy36B3tryTV2|PaWe$JBr|$+vRTLF(MG}cD!Q9P!0O<0@78~-1#;HY~{j28N z6^h>IYk-`^Xy}{RN!?6pFrld92BoO(QmnSx^6+^Tx|_JGlUw!3I9)*`Rib*iqim>PAG#FP(Zicju`~QR z6cjp*FhC#5uJ3To6+H$*4?Wy;krL*!GypSbcBDQ~t|3CR6E;Q#=e|AVy;=6*;-7GiB+!9cBOYMI97O zg1O}t-17ecdJ-_6?4LtGzTlW4x@;P&LPzXJFnZaUDrLo)YLnHwh6f!I(YFy9r<>~r zKsDKFngk!uWnpwv{$lK#n&QV5fUP&lI|7!|D=z)teGRmgPb*O_d-T7}tIC;;X!$IA z!~ak3(_nFKz>q-8xLM%EEiVeFq#FT*JNY)kF>_qR3!T(6XN902{U$g~zxw33p#nW6UZ9i6T~IjBu1|0-N&eI~q# zeGhhEYLQN#D-q-+t2UGA_H=*@|KLaJu z#V%<4XurV>bo(?h_2RcRal9og5M@M8s_WAT3YZir=DAi_Uxy)3yOyT>_e{%MjOj_d zD9>_c=gmhv0k@ebryR3rc*RhbxEnY5-_#oygZv&|HO4w*bGbV8rikgn-e^#A<>$UXDoS{koKlU zA_V*Wh0fO*HF}fRC8BvC!z;oqRHnsVnnpu22o~RbNGM6%qw@JIcK=t-Y5!Np~0(fkmKus`EMlysgSw%BSYMvlh3o5R`lB54UMFwYG#fl!ST$nwKZi${+*8g)=P9j0Kw01lr>k+W0tHa zRA+nLFP3rzZ!1$nu^-N==mte1nq(qTKTarm4JZDPF>{Q<(JX(s@|x~IoN~lgUJ-+b zX+};|tlZ!?3#hqOp?FYoM1uZ=>X=7F(`@oi9Vls^oKgt}%S?<0E$5dC#lA1%unA7S z{iMAdG98uN=t@+v`r#@Z5vj9yTxqtMDsQoYRkr2gj{q@2{IBG)E|b1&&^}^Yb#f%a zwIUHkonLVPtufuKu0s+6DKw~I5>WB*O>vW&T8vJ?7~<8F`kN)VyR75vxaPMpz5U{g zFLn_$Xz}~GoTj?rVS*%mw@^AA$6a!wxfbkMceZaU+vs;FhN$$}YZfPM(kV&uwSR!0 zMBW1QDV|Hl+?o>*ZM_F2w~MwW4ky&|piK1xF5y1iFXE{}?4(Hm$A(>_?g@xz(Gjf@F3n>4|QIB z^Va`OK)m-`rFUJX0}nZCXrwdtAnumD`F+Sj-zY!(=P!R)|A^PzQzH6RU-V*f4EKVs z1BK(ZX0d@;+sWaBDJmggEqlcjBg&!bvW}PTCRYhW8tzl7{InLCjR*J(g(RTOb`9$y zI0cEVO+SxS-y_s`!q;oGiG-Tw5h<*wUiRbHul2ubUg@0pTYrrU@MFGga+G0BwzVeK zIYEEV(XqB4xTfd088_97{sXT0OKu3?SRJ{XOYJ(eTDzR8^iJXd5G&O5? zksFx#!#};L_bJ@>RkPr5#WV~Og$&WS^UVglhHnuhm4@yA+d052j%N^mLXMbIFy*o_{mM4k z95f%aOhP|YEB_&qPZ3Vv@=|>>aa+0=xn;w%M}1QSTIcpO8nH0&pcaBykEH^I&cY^t z5u4t5u%@^pfFJCh$sZ%9{U$ArxVtRC&i22X1%oEn8E_cNr<9`)wb3lGed&H=RQpqJ zD+WW=?Orr7{`0+WF~5D(x$?|9`|ih^(!Kk45fwEBmI)Dz(V}>Zpp?Ckyu>WzjmbDazX7?~^ZZJ5wg~@Eeiuo{H!F=WAf$8m_*MY6?nvH)&3{U)KbJ}<2fhMpY#O@W{lddUR`BU?c zXe$<}7(%S@)Q6fQvAQ_dQ)NIO(`lW#CJlKkC9OtbrBTSef?S8m|WDb5)R z1y^LNg1gBK7T8=V*sp$=ubC+~zCD?3hNiG%1z|_m6*DP?9>yWfi?8KEeBaG}Dw1$i zof~PeBNh?(xGa5SgJ!>AI=DwSW)gC9ZZOMeqLSR)Ly0tB1~raa+&W%cclcL)E;ZtC zf10fD6NkzSTMfJ1LykFnleD#v@*)l3!Nx#Y@j@|4kW}`sn?RhCsYKl8T3@mqt$4#y zeen_iptk>CFTh}fP6sD3_Q>=lT;1*w4x+`HmKVik;&gZkGBTSJEmHT~IG__^ zFGQ&(Uz?@#bF6Gy{!NagR7G|8&D#D_6IE_`a?}-#PlWT35RU%EwYSU)6({Z%4&JbT z6@7`hFV7^%Ov?%a@?~P{vy@wP=Q4OEYH~t87~kRN%K$A~?Ck3VM(E1@u}pUiPL3-d z;T{j8+iMI%5<>-NNcp-VBu`VNK`@Ksy;pHIMU2wxE3`bqY-ajkuEd#%qdi+;d$+c%3eV=QGdR_Y^dIxhdI&SD!hVrP zwmnC>n`3t*kzUlE?P;CeTy~7{I#Ow8nRwc1h2#lg-S~9Ggmovve z4WDaq7+TZo@<_AEvY~uT1swsz-hPr?4sk~`&UNObbNZMvzyri0A_Euy!7D>QQtR$4 zT>De)%He6^n7wHI3jGaarexiiUHAMxjh3(rAze&}jeP9=+QBg-D0oF*=@SAyUORq- zQ~)Vi0!kaSuL@aXl*N!a1Pr;d3eX*Pg-;w>vPNGgq7+)X9G2Xhye6|m|Nii@_c?I4 z?vjuHau{~Y2m0;bFDf*gm{_|wFZC0y1?Jmcux$DGW-_1C!XkE;=G`V+n|kYH#cu*z zlQ$84rtmXwns|3jBDt?R1ep-#F8_LsbL@s=NF-L@!g?uMup`?=A_J#hzi84Af145c z3@d4bQV0)v7AXAb+vU*O(P|81#L(-~#bqy(Y7fJR&?f0nF2))^xfC-N#23a6hce9( zU9Cv$K>KFw%;rZ+_RXCwhb_{JaAT`WUsFjh+PRVQcaak&+iW*10zIApF6WwHv`qc@ zDb3gl+z1=1;#za1*y3mn--`SX=94t^B-7jRMqb$hd+l)!1j);NX~?1iiIt?Lp{9rs1|uhN2FBna#@{T^j(zr)$!W*>76)grxq6 zON%G7$e^CeHhnJ@6FB{aWOu%farXg7%{+hX7jxN!i+Y>mqhGTTqTAJKn`6aSBY5Z> zX-Pvc!|Jr8OU$`HmjbtrKA?{pZC-3cDNxY`;pgR~3{R0ndydHe{QK_Gj`zc#X_bb` zEJsJXC{YkDP^`7NAbUQ&Ie5P166||EpK{MxjXd<@kIU~%oXmFSj|tRTU@oJQSJK(v z?rY(609aGgB*DyqLgCp^Mah{LI9FnrVU-{5w`Zk5$(#ORQM?!Lbdv?UGtyYeY+STh zpd0&k{Oy3kvz~ds;;o6{1(nW=7YFc>_wA<2LCsFAttZn9rEO^KWE}Nb+)B8l6rTl) z{dSR4CgW`K^N}P5T2Nl(~wuT#US=P4ER*U#ERm}1vYehHXqa1K3F3<~Y;1f5vnqP~}PtV!~4qOcTJ-@HrvQ8pv$p5~09X#gfB+1Wo% z7N|Qp+Uc%jW+|U2AXzuRyv$tP2z?3=&}WEcHR`(wxIeprhr=t>wl-6Pm%gR}Khjvi z*FFq(I_~zBuSTtC0cH z&s^w|U>+Hv3cu=*e1gg5nf=yNuZtvdO61~FC*OBxFkFj_!zlWd^x)VNiM8c)??&4G z34^3Jb;J=kjNHmCJKqDP0f*kkN$U2l2Ihq)OHXvWMIW*Paf#=$r7XzVr7-s@8HpmPX~1|^a11{8s2HX2jLt9oJOgo8G4JgL zrp1*nAC0O$-&>|}e`cV-MEdwNb!(w%;SOlJA7ne#z{~lkdXQ;l>n@|YwUrG?J68&0 z@#u0Vfi%A4vB(%F7-60x)y%iN!{Qav<1--pvu9XLJJrrz(LD=({Yzn#lvnqub5~x; zQZ9wOxKB0Lq^qKgZkjAEYVwTbO=r(IAPTzd&<9STK-E$6Q(L8FqEqpFH_l8*e4mlS z$cS)7QV2Nhhz zj0_BmTkK>Fn28loe^F~@wRo(Qiyb(Gx5Q#r+@sI>t}-IHIrxF)tzs>Rt7kpf_>QEL zLJu&ZU2FDg66R!AgjYM+oz|#m|F08s#rwG2(*~erK ze=KY0p&+-$-|WFxbO^OiXeZ;zDVN!TbV zqb(m70ji7b$#Y<+MRdG@Nv@4T_>x4~_`<=d&Xde_Ev4@zITV3|1vCZ%x^Ht7QlBhk z(i`8kn9x4<;3_E3@NhA=SuA;=Jzt*)mO`wVA z?}R9+i@Qur z)tQAR^zf4Co4&DwTRHEP_Emw#y!d z)f5Qm+gwsv&j~iW=}2~oq_p4tp>FRvg8g750CL$&PEF+XShm7$f4|O+z|BLq%7)LeVPp{{S=Na@YU> literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_007.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_007.png new file mode 100644 index 0000000000000000000000000000000000000000..e189a9c73c14c6b8a27d5dbe74ad2286f59d8581 GIT binary patch literal 12202 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 DuE+48 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_008.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_008.png new file mode 100644 index 0000000000000000000000000000000000000000..b913c292fca70110fb8b221225b021fcf1c4d678 GIT binary patch literal 12222 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 CzraTT literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_009.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_009.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4282f1fa3d3b91c5c2e2e1c913fbd2430cf283 GIT binary patch literal 11925 zcmeHtXIE2C^llOiB}kDj9R-AhCej5BP3c4oA@rakMS77Ap$iBq5D<{wdjzDH0HTmc z7my-NkPb?hdh`3=`{I6wd(T>X&04eO%*>fHyFAa{F$jZ)bP!Gm005xV*3vKn0Dxlu z2{k3T$1f_#E0d;n|>$A+S_~V5_LY%)=*xykY9J1P%nyJ_V2)SMsE-w^=zMjuLAlLTV_aJE#Opo57k(&psrg z!^4qnY((fGR2n_j4apFz*YR{te__EXO80uig1JGF^hx40zL|-og8h^Lf*I2b@Uhl_$`+wZbVW4tK&ndo1VDP-nYnPIbImYc#P%6q z|H#12?@n~{R#lArZz_#@M!IVZRXLT9)nww<%SxhAUOXylM)Iq_NB?r@%|y$(6qz)v*r!vK zIPu$FnaA678z^iy{yO>OI9BFb`@G-a#{7QHWx!h@|DhcoOLPQ(L+1Kq;ObCr|9-&! z<%`p!oe;n2dS^*-i^f0tQ7cJTO6uk&eJwsPzJ2^9@~dKxOdDIPE{0!G}3y{<|t=#gMf4Y>?UmX#r#T$ z;zMjfO<3)0_ss-o0GLGZbWrU9jotlG)7yk zh_RY?SE?=dcSOS`!s5B)?`Z?#Jf1?Sg@T0DL|olEM{DZbEoNjEj8NvWB)zFLOi!Qg zb(P}Sk%!4#@-8zN|1kMbes9f^wV*FkWxxKV@}& zxo+Ozk}0I(ovcz>hX*xsymT}DEc4G|78cR0=ih`iz8P_)b7_$CvVAo#uK8ef_*W5| zxS5_X!W*LcY$Ax?&G}~a3*yPa#!jBwUmnfIUK&2dCaFw2+ub6)xt5gA(V% zLvBeZVRRu;U0cBVW=Y=J_r6=%XU4lF?OL`|OG9&vpZhWQkmY#5?y)J z$=3v)yLCaQhYidn275+5Ve;vOgI#i8yQ(2;h^d3)mFravJ$=qVvxF~L2Q{VU_|!2$ zha_QZ+x@(yKRYA3l3Ut_7wv|$Dw2Cfs)L;RG5^4>t$)9mkPmks1;Mya_`0jZBcfyf zQeaAN8H;1asOv<|xMUr_XFtwb=j$tX+?Z@VYHnI`4uab(%I~!7v^%ic$MAcsdG{y@ zh0+WqK48XsET%epyR|IMGa|AWYAi>op0mw2c!l>Kjpy<$#-4HH z`9g-KDqGkktU7IO>|HIfv4&zGQT^_UXmR?ajy=vPS$$ zQ@{J==RW*7{`JOn#Miut@!g)xwIS&r>;xhos+ke*a(4VTf9lf<_DJm4@AkZl^=uFg z^T3x|Q?h=)zoi)h&DgpW#UPlq(B&IfofaQy&d$)>`Y;rmz<FTGC>x2V=qnu}ivztKG`(u?`m=u*%ov$`6v2-0_`u}7^jMhIfzX)_F0Hz=bdZu*?Bl`YV3-b zSTq3DE$%HXdz;Cb2O?*aB$UOB@0B|dh=~m~bQBu{_b<;9ia&S|1H;DBKE2mywDV@= zw?B{S>VC(<3o=vGwid=TMHzGRJ~$v+p?KPi%C~YR9f6`NL*TH7!49+ZxJq=lY;izzeQwSGNk^~htM(z6OQQ|6)6uJQg*n{>47PV)`%wD0 zcoyBnN@eCzBGMJpG9$1$#7H<9wU>?z<3{ty`t2^=wQuQ9Et6t*qcvp7N#YIm+G#tQ zO#zzC=#PH90Z6&^RDDb@!N)cX_r5yO(#u(Y$omIQ~!b*)GYj@aB`0ky2XU`xt|y*%e2J zj(wLYPldM$MU&{zlvZKV^LSLLdUp*)TvBynTiMNvqW*8<4_M+1Rfa#A%lT&=$_uxKH% zyQcRG1IOod2s*!Tdrkq=B%0Cd%c!Ar929FY#QeJG37n{UG2*$R^p@D)Rt1 zGOtPAmtFETzfq!)D}e2h)uSWX{;fhAQryH?dh`jk8IW~EghjbNDyXMYrO!DAj7>owl>H1cJ0{1J(0J@p{rXXkBjuKOZb^OsCADB&Z`4c;(df9?J(lj zuUcUcaED$lX6ef>Du}`(EUGgEhw3!^bd^q@t027JHu9>N`Hs$tjci011?5$H!-qVV zQEHtM1`nXnP|&qPdcNR*Wg_mN+@yLoH#B9-BN}bOTGz@zrw%}I?!+e5#$M&SFZ-J9 zRd5Dbz_nK)jVO2$c94^ka?LgpBBr<*_w_w>*-b1`bckBy8mjJh*^2h9%zaSMIPn0Z z8HB*LR`7VKIh^k z1Ysi;ahChcDw5X_+I9{x{fA0o`#k8fLr)KrO^v&4h5rhy+WgP?ma7s5Uf}brMBota z0$X~!(XbIZPWwKAJQ@pCf74tF-DTq#Ue;C^K2HilAW3I**m=4nA#g7#{XtWO`8$#kLv#(0)R><6%u%bEfk&xs`qsU_F`xDWJiiHwAjH9| zF$-4yD(Le>A>COdTzBB9y8)Dyd2jaCTo5=#l-p~;@@GQ$zcN{UcfLoV#5hI71s{lJ8js1hL>;Am{sFSR)B;IK=-f?IctotLYZOq*^OR1m}V%*yOpt)zDG(y_Cvlgdk^Ym@}Q? zwv<@ol7VQaomiRDmcL)PtP5+W-bj9arFm1Q5+F2p>2~zfC%X%P8X>_xOFg8OHvazh(}DcQntZSWG1V2?Lc-zJv}E=jyMasToSr^AAlkUjW!z1Q#;pIwPOO3L zu|Q>8b5(3mS7i=755&S|z>aF?8^Oj=l=CO<-19>_V0(5eZlJw)X4`rSQ>{*^Oq$|Ib)AYDr1?=P0q%a8Zo-F!&DN{&lMZqT9Xzz_|H(`3!^oxPPoYv=21u~sHh zeq!07LiIoESRXdjvIuszg`fvtKBxa5r>l>VP^IhQIa2D&fmSYO{>XsO9Z+kAZRWM?OqNAW%r5@<` zh4~*JpGs~F<#xZmk$|kD`R@bB$Y_ad3wxI7pl*G+xgWkVsV*1Q~(wR;XD z1+Jf*CU@EN=tK}m@TxJ!M=$%{`O7%GRIhRh1A%xqWbE~>$s2(XSULvHa)=xqMTspK-V)z4B2F%mxc#jf_lo3wgz~&5lumhvvcH zF-OG?z%_dTK`~2S*fUJukkN1as>0G(vfGa7erN2VDp04@HE-`DrHBXGp<%sO`xw2{ z6%~1pBCaI_(Q>i={%L~4?clTH)pJ+hBYxlca1fQ{exTVSw5X!L{J6PZP6KMfw@8sE>w?tSr3+ zfHurQ_8Pc+aT0wkxrRGa?03WGdI7<@x@0;$@@?XtsXo?ta{tUEWlPOn1aSv!FFtNa zmWC?~FoU{`ES4{rMeg6l;pqMop1B{zZxJr#S4FQQik1TI_^*8q8PUDfj_`!#01?eN6111iQ1;tZCj&!1A~#Hg66{z-Afx9M!%QXb zL<&rw6$=(O+^qBldRU+#Ib2s`Nok_)i&jMa9+a+UPE`*r6NQ)mOdWMRT792ZFoPqK z64liJq>p0?1f$A6>8P-46;Ohi-n7Sn$BYY-3heP14oab`(}270qP3dM(Zj+E68;uW zXiY-i#K?X19f3`|VF{K2vx4YE!iB1q9%qpMRH8|h44#fthWTe`&r7$ z8fx*PI57f(6>ERG`<+>bA|i?`*s!*+I@^DazUX1ntt^d^pCi&DR*%6f+CB!nv;^X$ z;}~c>5X6=uyX2&Y+%X7+;2#*p?-E~b+XQPhx7>O7RNo;K$HGQbtmy4de@IZ0j6TfQ z5qTR2x>9kOTO2XGeN_Ulv7_Vj{k4R3WO0NZ3K_9v`27m&7CmW6a^uO9~TYW>zR z{8!osfbQWGHU_fs%pb8T5q9|E#=Pq&A*-xEKE0TjQ~pDs7zI>3iBGH}#QNt>XN?N3 z8A#?d##(8(n|y3e7>5JfKsz0m7X_2Gb`QV$lcrt&B;%tfilGEf761LF%)36p1ySdp zD|4|p(0^EU2u#aX0mN54Bel87VvT)f{Z_nHw(3T$h;8zXKo++GLX9oyq{6c0B^P#C z3-NGl30P4wAZ#Phrsb{Dru8X2|7AX>$lDCi{*5t)Rn4+n=1bL!_}h+2X8~uXGgf2i zu!`;{W_RfDd1aLesWHS+%GE-JCs7WpEajyjT>N16$Nj2AxDbejK*aoP#g2U@buA8G zMRgS#8^h5uP~jQH9pUelZd7<~v$vj$C9B5n$`!(dt`W*;Hg)4BD11loY@2M&f(3oa zP$`Bmq6)EVwyU$UBE)uoIo=v%ADPZxdFBL@hz2#m;I2WucYL;ItdUq-3K#(9vvDTM zCv@>Dgw&BS&}Fn-&xw`w{WD*6etKkW9(gg(hTu;E?R(+xs|d|NFt&-e8{(XI(Mp&e znykPRfNjUEYWHP3R5M``yp3d~y7%-rNJ(_tMoGzHk%&SuV~GcFjl_BMUT1 zm9R7m+V;#20K;bQ3_vZi;y}ZYqiDY1-3l6Y*c9d6h#Zqe%T~4^KcYI zwe^4%L5Kn2ZoVrv>FVToFypNF#J7Z&;$64LlTrrQg46J@%I!Lxb_Q;RKR3xCKROOS z^b!2X5(*aKRK}BePvD@+(aba}#$B~=x2BN*b-Ex%zeP+u7;9Iv+}1g)XG+@H_b`r# zEG=S}@TmOHMu#YRuYbQyiSA=$ZYwMBM$blu3xIT^l0;>kK-KR1qwPVbd@a0zB@B=s zQ2f)c3Fg5D_l*>KO~-S>Q?80ucd1%q3muCGx|x7vpvoa37gp}GGwXc+baL=PoYwRd zy;O2EsEQ@0e_-c)k-ej2j?5Ih0MT*+xzv^XU7c@3Z7Iry=kw&%=CmczZR2C}>M95V zDwIr$>Ho+1+~??0{ii|slZFnEQVEn!G4waHSK@-vSP_}IqZs&t{j06o^1?^{P=Fot z2piQM!3%ksamWBFeSutJt&y|Wp#=B-WOw59wv)Ah@yxvYqup~Fv!sK*^w+4Fy62e)g7%k*) z-1%Waf~(gK(?n03Q4v@ie(oaRrWs>+1`jP0f#;mCE0su^p>9Tn&mg24_o|7M6@t~o zI!L=|NAP(L@Jdcp260qHRd2yQGRsoetYZbdK z$dW6VEw#Qp+Q}Fy1k$HWt}Gs-mh?3>PAf0$h*`2sOOaSr7H6(&J*@KL)qO{0m_Evd z#3$Y#-I8?r^F<`}U?Q1x;{PsEb@~j2^)Q($o*B#JB)ck|aO#rzZt_nS0%;$$+>U1L zgq}<^d9I{*{XX6EeX=Ug5Y#P+jN%=we+xDap-B=UtG%> zB@`1j1jHud`+}IfV`lyFE({Ln;O+w#Sk`J-LMm zD15nXtFT%djgu48`(-OTS)=}SaR2MyJG@4DaQ!N7zFJfm>n&Gf;*7DA5?|7`wzG-Q zoTgT(vc%{v zZ#|?kW!W>Kfe^_v1xXExwbJ=*?~QRf(`K)=2fik2dQ3O)yN5NO89z>`VulopB6v?aFN%dyKV$-VV2d{*{Le5?SbpZ;iwm>F)WkniG8(U^LBs6~QLL^A6QE zaj@!Ek88`d2Gz4Hgv`K4*j>~hIb3y>*}b#^QxH*MCs)c$(@Y!=J(!8JmH zhjLVZ8s0zOk4zq1Ungm(-Q6=Gzh`bzZ57l<#KGotu0z)0LIGrkuXx(y*BFX>Qcb`Y zUDYbaQ?fMpiK{T0j*G2w&t2eoi3Q3 zjHVyiQM>

s3r>o>cf7*)!r8l?NVr(RG1&qxel6bZYmg#?aZrz4TCWGn% zZG_1rmX%o--9N8op~ru|n2var=VJ?&n0l#@aL99Ux0+UDIUK|n_@{G%>|YN& zb4xa`Ck?}`I+l+rJ1zt5@GV>OpQ}55G7}YllYjG>?X-mp>~AV zL)6pIX&(Q;!mgQ-0h^WeOfNNYT zc%4_r-ctj6w!8IegOY6iuiu$?zgHt<_h;X~3^1ZD2~VVd?%{_s!7V-NV}y=9R`q+E z>|peahOP%cz=kO*j(+l!&bGR7F;?I!U&z_fn&^`^YJ=-=E}#E0*mchqHr^=j_9n)f z2>BbCVsY#hiLF&R6-Z%Bnle%5pBQVe7uFF}L~Vc@7IZyOj7?Fg<5KckovU{keJ+iQ zp{M(7cmd(gOJds&I$0}rEw-g?fi~!J9l9&SuF3S8-`+Hr!w9MBj;n#CGFbmY;ie&S zPd>k@C2Qni=I{QDr~fFP!i&W{{>*n8lmF+x(@0wODz;WAP9FFB4$h7oQ3*0Yk6Ur} zqhwwoWvGS{)r0P@YF;mU2^CZ zg4>l?=cL+T$cSh9Mv0N->GlgSldf~RxaUaDkjej7JirE;a0ej#!PLl|Vc4$_WzXN= zjul>v$z3_dugQ1?z-z>!PH zcGJqN7Og>t76bDe(PIu6a&L8E&Hyy_lawlXIT=OA^%C*R>-1;@q(}LfH_KSm#x}h! zlG9#MHtKW;PtfJX`CX>Qs{C8A6U>dx z3fz3NCaliLqP?=Bkrtp`6&ZiFT!FG;oXD>90E_!|?F!~xd&m(^y23Z+K|Ly~-+tM} z-Y(Tl9%nNAxW|*{4Qq8-esM5~8tG{_n03xLnjzi!ko88z?$)>f^rL zT7HY1n+(%7iC(oVRTlpjFgBNWQE1kl!{rNLV?aYC#YC@3s>A3?6!=GfK0IrkEP0eq zIb5GzzGlmjYSjB<90s}0sVgwIO+iI37DzVhD=-huB8!dchR5zt)}h4hAmkffm8ne60mWgD0ATzkw&$SEDYplVGE)54 zqTxH7>P^lF>YN6jpJaM|yZtpVy|p^@3cfa$S_<@?b{|rSyGu?xZ-uVS38ZKHd`L2u3@OS{^NuI~w7cJ7}Hzp3X` zaKoqoH)TL*Yn_>FoqyGjMP567H4=ZCyE-EpHmaoa{xSt{V6KziQRA^pGz4MIAuhsLmZROOFe3qIYf z9sCmGkz|($wr~*m^0y3Wiws&IP;0*gkT`Qpb9xS)N^+pZtk$k!kEV7qu-f*~>vwL1bfD}?+mF$%f2^1+;Wv`66Qh(0U-i8q;~)Y7`tq( z8jOYwn$tJSG7(S{noq19IT-yOQnl(A5n1$BoB>hV3jJx9C-bGO5E+b{z_tp{fQ+vU6Ykg3gf`o zr;qUpIo`I02J~^XOza5VW)mhi1p(gT*D%ZQ^5{F0VH;isJd5^yp@3U@NL3+Pyn+>q zskcTe-Ne2Z{6YLfqZ>{ZSW@#kk@)F@_V0PQ!qTvEJCs`?&1quQBcSe)>Bvfb)bB2x zjeDUVKaghQhx{Js!~n(=h8R?K?9iJA1*Dq3nE z$k#dH#+QL;8YwCv`ZR}Z-0`(=65BJS-XC?UwqlR(E8=T_U@9kv&d;Uh@|dRct1k&F zleb6tNqe)lWf|q3Mv4ZraTJo~hOyI!1&qVbnWiH!+;}(Qd*xd$r%lU5nZwM(vFB1s zZSLBzU+Y^S3posN-BPF%D)*`X*-N_00=XZ*N0I6iMXo|TCoawXnQ)iwC^N5x_XgL^ z-GoBJH*zQI-%-F)$x5j%_cr|D@|wjJyrZ20*OtDmvr2&se=<(`Q(uAD1WfxEaI%Xe zi_j1HdL+u)tF&q~%a%$5`7y;$>r`X$;+OU$=X;83nR#hHqYpdF?QT-rP|RJ^ z_hWfz2-wNFQ`8y>Pg`1m3y2d&d>=ayp0D3*H_Qdt4HcKLr9MOO$LlLhG(z(?(o2Ks zBfPvltGtaVd5xnwGmZ+$6^KXYk2*^P*zKW;XiM$8XbHi=_zHU5tde!6+FhkY6 z=lKFE3}ou`ETGc)pW}5R8*lw`Pw=y*dNcpz!+V-MIfb&Xa(|g_8kfItc1mMobEwwM z7_3=iCMqHMN&GK=Tt(v4LM!S?{z0+AcUuHuIW-Zn14^N>o2-BQhNh0>zQHV}hrEMK zjeUT(A_7e-5pOr*

Oc#5MHyPG|Xz?QrVU0Qaiqrh&iAyZ1P;?Q4vV0VGFj0Ceb@ z?pLT;zdpCBkGMP3y2;H+2hM?`$%Vf*lgw?QAXOLu19rCZqK8Bj y0#FW&05pgi6VO2oCWjrGSj;KW;vemQj8{(D+rkb-y{W zx?pd+aQo$``t6ykhmKi8QBjM{_{L?6jmCvP*&zu93Zx=QhWqBnDfyf~NCg090U#0{ zV5M9Z0QFocf9N9{02cuJ1H_8#kASuxFVr^KurC29*8x~D!UiyqC+Bda080V^gbo0# zu%G~xWfMSz!MJDuDnJN;i$?K*0f-TQFkJw4fwo_?|1C*_Rci4jAmR;Hv4J76B#@0U z90Z8t%XsrH1Ax`=5+4nqh?E5a6q8gkvat4G&BFPA(yT@Gww-#_{uxqQDjnRWH2-#W z_(0S(QXF7vKfpTazBfs*eI+@(ND9s;b4I}o$hBj?JuNFEAbHJZhu7wx7pTMfz=R0{ zfjGN8{r-2PgqkF>b0ukCn)s&*B)BJARNpIyr!HTz=|y(v z+lP*yth)w(IyDgoY7f~J(Utauo)h32C+0t#WdPTa@=8=K;ql#!;H{g5QP>(Scjp)R zw1!0^ri3O3gsky?6Nl}lkndGSJIv9(o~}?~oR21JFNe2Tdq@wE3&rjJoO4KRlUmh@ zG72}Ubf;gh>;eBxwWW849`?_CBRmkYX4p_KbIDjbw*$m$kRmg5=YQ|~${BhP1aew# z7Y;gWp65(6%ABJTiZkjZXlfgtSr&>zKH71w6rT|aGTRlDRRPwrrZ2A9xkv+t1^8b_ZrzE`!44NOO`@gi zPK!(+cG4kgoc0;-`Nb*R;D?dY5#i^_i)__a|56wt~n)2*vG0HTllo8;dmlS zI>QLrM7K#7MOM?e|Le4pTjZeb&x=IPPa`7{M6569v*;o_gH>eIP1d|I3JPBAH_f(_ zR6F8VmnT&7+yXuU5L(2*H(dIai{hF;l7W1$1~8G%hF$f^s=8_KK58>vC#(s!Z5uEjMMQ3yTU#EZ0pnOw`9qwiWhTArKKo zLdBYcYp=-~2s72ex~(`IRdJmfys|70bd9ikJ0MxrUReiv=CA0tIy@TDu@n$>Bsjfb z+(&h_(?7>Mtvh#gQx%x#t)#55`xqQFXiuo%gd8`7>#Cob$hdaBdmcpi+PlX7KlT`NiR1pbP=&;G{Y}gC_lIw zldbsc+tRr}58dc!AxBXSJSMJm@P2P`TIM#_qutiPG_pd0VDF6*i_(KS+JPr&0qcik zedz;P8EnPU&y1aJNYl5FdCE9$j>^B^A0)=4I2Npy;SE+#|$a=-&@JdD_@#a7 ztH9&D@+zbDkUXv~M`hBS?}GbjvE;(0d=|D2pY2D~3*UqYbU3Ydi`%_`#qUw+x2=J%ei7MDNLTmM-L*-b_{syZ2VaZHb@zB8Hxa={si7Ah&zB|rHH z#^l65Eh`L&luzkBcr&?9EWF-%o;RDA5@+wuMqx=2%=VDDqM_kRQq$sc`JmQA%zON= z*?D4isA&Ns$=DxMXJuTU`t`-*pz^BE?R{{%5V=cBpPb3O>2vefOzdK= zwrtO0=z|{$(i$V*Anjb`r*5oDy`$b0I2=hTWCwFEX9GAR{#8&udq?gg=${jJudlkYn2Wofd>6mmN`iSd1*$7uJO4}>%4r`C z&kG{!$h(%ORlicz)vUf9O1r%fo8QQ&Wi}dl*0EEwn;i^e?Yh!~Yz6eRYeoJd;&Akh z6>!>Ce@`XTQ26wCUwGgDJa6^I^XF%(avBT7IhmQu;|Jo?uRPQTGQ|W?Cb0rZIiXd9 znO6X<7reM_Jo@5CD0R-E)6;`ESEGI9eubxbIo{MQx=UcE_lo2viYJ6UgDtM-qXgII zQOX#l$u681lA#Gk0Qj5?D+sEk(5tOdy3%0nX{nZ+^}#|&B89>_kC7ysTGd2md|kih z-f_~w&&>OSoi@ycnvS9@hVx+(bbgR)Wg` zZKc0_>i7 zb9Z6qxr6hs5c+lg@4#v?>M%_)i;w3KL?Q~DXb5g>D%~-B%g`VLVru-x?EfK?~oy{hF#2{-u#IB?d}GN?O3%7x@)@9g!bcN z3jDE87a^4Q<&=-QoS!;QTc44AXSu5+)M*(9;cedksg?{0&%m(GPwa-3m=*h0hRkJ0 z^u#_I3TgQ;zgAHgizjw|0>%SU+xavE7>m-e)Z~T*9FF;!&?JZ zgTuX!E-~6ALnCh`G0aw8N|+xm`zdiCGg~FJ zMLHCHJN9>4rel3R+luSwSOX1ioVqS_I}Jgifdt^@&nEk_>$h3AbII+ebTEJ~X(s5hz!c5-6^cm9VLwa;&^zd>){{#r3r<`@|0GmWS*ZgAv#FwJ@5A zs{{eo=A!0-C#@t;-ahWNXW!!_k-5J-O(up0a{hY-;yiw45fzk+lS+d}hY&sE;K)B! zt1wB9`+Z9lF;77pq=l(K4GsQV2VAcbg<2p{}d>7TX z0BG)Tweu_1{g54NG;vW&<$-vMdeEoW0dJP@&Ktf}`sPa_k>eSu+IQo2m%*+QGH8?c zx6)}6kFqhU{f0t5vEsmDTJ^mPx4G?HT;_!_`bHtv;80>Cr(D#X*T3h?RHuyFnoWxp zpx9#)IeZ|ZB+r+5;SXJMQle9OrA26^U$LZx;qTKR?%#=lV=7-M^B=&lwy;8q?euT4 zKwY37G+JZsof|A4o|S?6=(AmM?{Rf-lE!dlej22u$>*mj|*<(X@t6T znh|O9zo$Lj^+$gDEx%!SBn8aFo)NXLX~PzsCjOX;Xd1j+KqhtB=cfX`! zA;C+-t@+Vh_X-2sVh9N9mSk6T&)cGX3!d!&Elj>>a^NVA=?>Gvl{j4P78)iRHwU1t zLju79NR!-5Qa1Fb!a}zLkx)I0izNvGN)`0;hPh{jMbuT)!qTv?Ik(UVPy?YS8XeIj!V?q zZ!`SWYFVMvexT{fKwSOenOW<(Rfs!XLowTG3{q1HL`ei^soR$Pa@wtV5e7@kg@8c(VMKN#V0(%!C8aWY6eOV4xa(ltL2F_SBTZ`@t- z_Uk@(QyCvW93;wID63{eV$B)v5o2I#>Z-cu6K9rh0%dVda%3pGO9_hjj%15L& z_ATG;J2oYJ(0%#O)i{cwB;jGa`fCL#T)5+ouf=fl&Yaj&^vOE_0cSC6%peReBv_TAFOH?dIoJIj%$e zB=!-QVt=spI!bRPZrV|kNrLDFq)H7h?x*hF^aFy0i@TJIj&DmfJnz4repJG`4vyM^ z&6v4xAZ)}Uu^yVE16M)GKx-!L5Vf!Y@k*Iw@`X}BpVB&liC2^Wwc4EX(# zu7JT&uHQLBhg7+4F8@zQedgARtkx;Y?>o{=bPo*d8lg(jLw`xuJ*dDz$?VN!F9q2t z@(T;Etgdi7KCA%Z#=mPk8I?Xh$R{2dE62h%mpPG#*K9z4goI@{MJ09WBY%*)_tnpf z<)^HzgFwzSH%b(wLvw|XuF4mVaMoac{ijb+=|lbVK%-wdXjBd;r^{qeboQsyhC2jT zN3={e^B-4qM+FXy%Pgm(uq$1Qg~Wx!Ok_mrapwmxBc~`2O(7`sL9DptsF=p^AU^Dg z(?q#h+D%FN3+NRH*Adt2a{D?ojqav5-q#{y7|H&r=La>SyQPx8D`W3#sXXqPccp%M zTB@Fe5h(5<#bGk2>r#efP1j974Tvzdl*{#B#oV~)?X$`(=~5cFCJ}G9^|^8%jAv(e zMtCI`Z<0{t=jYGH%&<371$C(2S!ZAYzQ8a*WZuK>R@txgAMwFgeA=7;pzF=n3G=b? zKSK;jj@G?-fHN;*IE6BiNj7NDJw69i);l)zNY#|Tc-qmnx9?jsO|^Mb=l5ucr!S}h zdMCNiCmGC9GX2pfC#p0bY^mUg9nnlPOd zOI*0w>J0lWbdeveU2?JaUZw{vDebe+vM_%8E!jaLBRfF2O-?1Txl3wWI4-QszS@g_ zcU->KOu+gjVG#)YPuHiTm7&4R`rt^E`;7N`Nu4HNE`DuCB)|(lZsV-zqs^MK;%~X9 zs~5jR?xcK1I-Y+QofX??XPhj@LY2m?!Uw{hCJ}d&&-SVsFnqQ}XIu^pRA8XaT$#_bs7DKMP!R11RrdM9&krNzcu z=912kz2Dj=oa1^tWY)9aZ9@XWQ)NTn@|?~BN4040E=t#8eu?b$XPcfuD>n#%Fnn?! zyiZV-t@tcZ$UiQR@fdAo!Dft5y2vK8ascR+y215KdbRdh8?OX-tQ_%F&ceDco(nTb zjKTQ2E4jH`SKxCAHjED!840i0zG7RH^yy_5W{{?(+^K)F=9R(}+*bJ0gh-dSKp!5B z_gyGKLJ$J(RP*Vb2sB9va0WmFhs$@$%$*#})CIA*RoFi12AI;MsJu%=!ro+EwIM7%*$?}}_cHB_HPM9J%5d>L- zBs*}^WVD)g7dn}&SM~iSBxji$rYQN4Rp^cz#y>>>hs|zK%wjfgiV# z`NWZ`h$3MWbGVsos^yY*g@~{%WT&F7>$VVuS8PR7CJaQ}g+$UBly4)DHT<&|dh>DED4zX}M%WDp zcN6^g0i|Z^vOIxB3AAMC<8MO(9K|BTXV1fSPCL3}An0uWVl7J4bB?OTqjFn>ArZm` zy~*{2nwDMz_kGAd)=B_oCBN$dV!9@9{O`n~9m{Z25m*|9447c6uS~r#@nUOeq=~xc zH>E7ZTDXTF$0DShXoizSuP;rz^zlR_{GZNJr7%?vi zYyd@>5xfH-?vkFr0>+)!1QNJt`?Z3;&m*8J9{IMW^Cm`S0PIutSHOv~$z0;WuQB`s z`fuOapaIy^eN7yZ=HBI>2ZVX|lQp)DypwVl%~Kxs>{TQ${W8{cb+g-z1Bg@fZ5RuqY8#m;j;4&5JMF#5 zP|0smyp`ouY2(E$EGjz5L()1`NZxWJ32b{Z-A8y)?v+lZL3cZr!*b~iwv-5)^<*XV z+(kEZn?48fatOjoz|!;{EpkJ;nm&CGSpXO*$7T?mEbjCYtbQa|EZp{M0*{J0FjrI^eb~12`@4?UJ*{8IazHF8f=_NKb)PtE z15%c0VWcGXWwGMAk^jrMM?go*vLoAKJ;>ep&aGqF>(gs#)N>FNfH~P5^8`#ke0gj$ z(OCA!Qk%bR`_=mN`d(?%=FXEa{CE^7g5vL0U!&DR!qIXmAdZ<@Ohhv~LIwxUr&N4W z^Kmb9da&E;rI|Y$t@Zkp+|Wx3+k8oNlkt)*Dq4mb2k#Ge z?W!mYDpLXBjxbqP886v@iOq1{c$T~zz3u<=e)ghxBsszuoZlIT7wcn!_p;Ix!Jj_Y zXnMTprnLRRUNFyAnBwrgkMF`skHob5ENBm8S`F0_3w6|zHG4is_eR}E#&4Xo%V`g- z_1XzTKDALJc-x6g>lfgAgiFg&b`nje8&Bk}a~efk`MI%5Lh>1NS(vB5#LuwE&%h$$ zx`;2%I+pi6vYvi)2gDi>+x(kj$xQs*?lsbXqQevzMwP(>0An28LAHp@w2ePPJvLzIM><;3)n=7S%<_!5iO22wRvaHI^f=@Z@tZ ziG(*Y&Bd7<>0a}jX9v{8Q7PMN`-D^+*E)!NZ}I^`$v(?!m{gM}HaM!t7)05A&Iv>= zA}JU*YC@(u`D$#Mge z_f%inkyl-Nyd@roHdil39t{%&u4JIJ!D<@nd)_9?Kb&S3rnQU#adHag{&8em=sqmw ztJB$ryYM>0wM?fMW|KV3@xj3yDyk|~E>7RC=?${|R-aOv+n58&q;VDxU5Xk5vS*m| z`HgV7M_&t`_CNLL{zj)fsUH*Qjh57*z{YLo)|g7F1Tm3b1%m#R*eSn(ksLoB5m?1R ziI_${zs^cs)$;YubXu{)GLN?1up|_{*L(%L$RxemiID5*OeUL_#}DWFQ+tJ}DiWcb zd1`rKN_4sLujpy@*P5Z)sJA^a>Ws&10~k5{oj?S?0rjW^4}?O2h*#M>N%XYdE`ov)&h_nUz7L_$MH*<Ht zm%MdjzCSc;?T8^33c)u%nSMcL{adcBcd#Pr1Oyi*fs7`@*il!tBjkO7ae}y>#3MSS zZuOxr=7*tH@4~xZy5%)oLn)MmS^#)hUI?8*Vot!SS=9#N7l6P`_3tbmn(@JJM+m!m z0K1AKqlELo+KTDNS;!tIk*p+pI&tA{S(s$zZGW-hR@unCl`9-Wv6p(luo7X2dPvrh zVd;$LEa5y@+`4;ZAD`-6GYZ}_O_o_I`}|~bGiSFBW`EI03U_OaBUZfkS{%7{7Z54G z9JPDG%~eo`B`^QZCc0iL=@t=1tLKfhzIIUWTcE4by75YlZwvif? z{y{;0f7#h*NW%3$*6ZnMIysE+NltD!WQQ*g0+A1C^y9$^jq7W;#S0P!?C_WC z7x8lKm%XAOHtDNm8T!=9p`xp<`){p*M5HwJ_~rxcexIeH-!PJTR6NH(M*E*vcxk!5 zorC5@6OV<;ttk=x4=I+@;RW#Off(OXIkaczyZ4lncDlKbwOqcWiDp;LyX&yVY;*mO0R&|(uYmEW0&d+ShO{(k@3bw8BY^7{gX=j~Nb>g0Q^E9TkQ z=E(eqFfwD)0yKHNiNB6ZFX0OLdv-?vfTZ)kUVv)>;Tp{}u}eF6B*ouW_k%KA&lf+3 zx?#)tVFdNUuB;6{rkuw)C{c4lR8oTgTNed?cVAqCq<95een;iWKfdNZCh#%qEB&O`*$f| zh>hvPP?^n%?R_#pgm}u^Oy@_M)|m5?pbq`?tBbHJ&9@%;qz$X(pe}qu2F#9-Qw0%1 z({!^cBMrXosD+c+NC!- zW#C*=x-{=e%<(ow7D|qlsJ$on*)8oG7E9KES3@5zHl zp~6ry)#5!uCXwk_KggEwY66`{^C~dT?uLmyb6A(a=L$h>Vq%i)qm8j#)VrOBw!>kr!G^)=&jk~GDC#9w=vJ|KfasuV6_-s55`8X^T5N3`<| zak}Q?Iy)8k*5*jr3u40PAJGG0XTF_ho7mcqhR50cqz!eIbzey8^he{5DGxMY1~S5& zMjNq#vEy&xcEmGt+mgRR@m?1BHpOBJZ%c;dIaTpQ-99M0WfeD8b*q(fU%5qCKwBF& z4cdQs&+^(#``pt;fkx2Me$=i_iA5FmYApUBtSe4ok_E#vZ_7} z^59Stsqn>{oV)&F*PSsvAJ~$3(d>1#mozn^PZR7ds)24OWNFf(Z%;pksHo`%VK?yiUFda<;D$r?JQRGZp}M%ti@T+4|uE;2HT zw8i154EmJ8`_xk_$)#yd=G)0O2Rg@F;`Z)jo;viPS36ckE&JX#oLUFL{_K15XDe;A z80$j>^)Ebw@zf4I5l%8Kru%eTY~YDMAyK$grXo1|1W-{biBuoI!`33ic@C1k4Nqz& zi@h*{%b5wmXby{MW9hK4@~7pcxCC#0TZO%*>4K0vi44j(j)`Wl^s*6ITe*!KY_T>l z?QrvZyQC5~xRFrWprNboS$8Peo_Xe=hp02^h{x61Fdsaa!hJ&Uf;&Z>(XdOaswK&s z9vOHs@T>qb$SjJK%<6c-Lu^DBN@b3m7P*fLO-^%O>AJAA;cupH9WxSpd#Yc?KEUna zgb4{h5%*aC=}C!ZqKoOhPp*dwLaC^1BI)32-7ar2U<7P)+{1fdJe5YzR{KJmhsJa+ zcf2mCK~N&wM!{R<^3dn)2Wv04j*&qq< z0EqB@xItMJ24Hz+jK@eBBR!qp?DTziCqiUzx$@d%Y;coY`Mv1G`c33EpJ#{JQM>P& zh=5o1ad;DzSA^qyVW9DODqDiN)swl{#8IZ!*Vo=zcRtfClF2RrN`|sOItl8}(){D- zRE|(#PN@>&A3l)WTkWGylGAMeoE0Qm#DA$Sc~rpGxmgTP=HP(BG_Pk!-0$j*|K0Qx zbai$ABrrvnDO?uQlJAMeVeE0>u!I5%RZKYmfn2lOuKN49K-TLgELiW5{D-Sn z*Xv_*E|EyCac*i}bLh?>&w%4zs@g&fB;Hf)aOO_QM&fL`aiO)6vjLil%T|l(bl>cj-+{TPvk-8y@R-Wxf=c+sG{j?je`{=N2{9k z5_JlNMCH5>V%F1I#sSq?RcP~f?P)j*O|`bS8xme;Rus(q)ZfXM3#71B4lu^TD=3utmYa(>` zjSwbL5E!o;d{oC#Y4oT27Y;MU6cA>J68532tsEw1c^xAwqR{wO&M&!l1KDQ088qcw zHRvzHFVz0k?l||OC}7zqJTWvR?Oh`tkxDTQgiyBlU~WjKPXIxv+9y>%YY``Fx{y34 zWef~k`;p?sycQ@!c&cY_mb4gMlMiYXmj>Yl?(-*L2 zL}=<-llkKc93IMibI%MRXi<5kW4Tr*wsbY7dnCw0W-hvcsOR9N>H?AOxQ|an?HwH| z^UYAH97@NT!fLyG;~*(6ZC&o-{bw?7yJ>=wGuG^wMV;rREtQzi6(9;#$=7Be+BjBA z;ea>@><>y-m|O3H1@w;BOy();mz$C25rwVME2dO$iZ&GU^dE1s zg1OSBf5Z}!BW*+n`t}9Geb(*BVUNoUR`G^hrqMp3_-ai(Y?X4ev=0ZR9Z%diYPzzX zl`7i(_*IXz=93jgBcW-c{4l-9Iv~FY_KyyBY1@k{>8tLj{2TMM>K)GV@DF^Ds6{5V zS_&Yv#{`SJ-?H^`0-I3e0p#2|@=5>>)=Cz8u0bY;B_1COUyToWixtu5nyE&3uxT@R zdMI8J72I^cYkNN>AM?5TgTsfW$ID{MYOQT_gN6WOMZLz3XTN|}VH!5C+n$47PS%1oYqHmJK5eg&K4-LAwZJDMkBOpjQCrLSuu5EHf zO+AgzJ-~0jFjnY_?uY{`jz!0jsV0~*FB>Bb4r`g6eMxXM8PQ9Urd?F%TDD6IYtOGy zjp3se7iC;&DnheL!9RhZ%<@H{`BK#9-yJx(jeyFP++9>SzpRJNTVR^JO_pZLvLsOC z)sj%pPb2fUM%9Bj&$MPlHyV(SXk-0;@0=AB%delE4U6jn8_So(zF!D(f0AOgT?EFE zn|02JuiHL?JWi~7wM)rmqS7WGCOrrd6Nmed1q5v#b=wIFy@tCzI2ZOxMf(svG+I<% zhLk$Ue72yXbQ-MG9wehCk3fC|vPS>yvPQE%1q+6!j-FUKPE~(O0rkljZcZ}}Mb?3M zK4={c7rF+{ymD+5%PVXIvSxcIXDvpb+zJSJGKE&n9SW!ERUZh%^a9-GTB^upYa-nF zfhMC;<9B%cEr6IzUg3Oltzlc9pd8C4Ae-stxS-@XL9wjkXI}8sI$)6^*>wq1)GMIr z$)1^+8gelUNT5hXC{Ff>5|(h-mrid5->QY~~s=%CW8(m|?9?=v8P=rX4rt~79 z^d>#@BK^znn|Wux|G$6Vo!QylJNKNq_wL?v&hzXOsjaC-0cHdP000UNb!A-u04VU^ zNlJ`w@ePRc#9xTqpK9on;*SrcZzBKzc7TSmlD>~QE{7x?qSDaonlAU2`lqE&lrqUD zhOS`y?oZ42bPQhxb9FZF)>gHiZ0=r=Z&z&-gnojkSnC+V-@ZyG9JtG+o+OdS4i4@5 z>An{*xAN`HxZZ@p#L|4#R@=h*8AW47Ma9kfuRYmy4^MBYPq%ph+F*ht-n)pm+4s5e zx7zGPmK}HStqH0?zzaq_t2}K07y#b~@&Z7GI)L`19{u~g_M(!}Wn50M z0mP)Qf1c=EPAHju;gykl2{hQDOaKkk7`&Se&Uoe1tW+Zg;ND?;pL3U14bjiP8zXtI zp~y_^9{bNOiMbkPzkL3LJ0)S#SeYC+cEI=CH_&$B{PiiU%ymMYK}WD zd!;yWr~Su}beV{(^wgklfiM|J6qoWSuAaaP$N4^2-Q>s)m%B|w$*~@Vkr*1>_1(9P zhoHCJSgD}opf1ezS6hupl?Pc!;HRMsFI`hco1bN&VS!y4~^LFeM{xG})t;^#{xEJIjSm9yD8; zHaji0P><$JAiT1VTg*y}2u)o+MooT6-ezC!+aI$Q3?rw~`q_Wv;6ftAkw62?8NG{L zS(nH)3yuJ26goT1qTWR|tV|H%1ZeT&VwW@nnpdhQb(8V&;I4=TXkO0VyrNad26r;P z%LD9jymyOi|I$}cqo;iUh%BLiUa#a(RWGSHzL2wgUlIF`QciK%zO#aCn)?4bJ6r<^mTw(;H8;j7UuZ|5e(K9-Gbw2<5R504h+2s1WcPbGa z-Vp+ku4#WGH?$Q^Bw85BU>=4ggLZbNY#qvF`T_Z=)kT0(#|QUhFq@{oIZNy(BS%r{ zQ`%g=M3^bO$-_@>p9#*Q)j6oA)6}^dcwR^1@_p?5Q9`ZtZM~^Rd!o}$J}fVggfHkX(XLdr1D!#L^O%I zob%3eNa>Le9XyYyM%sv#B_}kBSddj+Lgp-!-j80wF)K(3=Jjt@9ai{d(6{6S<74*0 z0L6XK6S7xsp5fm;EfGT+L&R5+G9vU#c}zLDKfiZhKs-E6`^JNnLdEJK_<`f{cN-J0412FPXuDRKJ|~NG5@(4iu=alq~mv6nnLs69ExhT(tKqLIriuEOR>N2 zI$Qtn^`SEf3*+v#HoA}oriysJ0mhJ`I?h<9kTZFRbz6EHv->|Oa|)EowZR4;lCq8p zIo4?5GHF_qtIhCB^Psc&;Zugihcxy@WTp`qBIj&}A!9em7K$!=0UR8?T=qhQv!rk= zyuQWi-Gb69ZQD6>YP9!8PQtov0uPp|?5nT6wq2e!t3L<%=BX0U4BrSHkpl!Z zvuf$sZ6Al&^^8Sfo}>E*V&V813xL^$v$_UhoFPUHMnU~8JmioeYV5Z z_&kMJ)gx&SR5+QD1uD?y4GkFK z1&tw%aN@kb&j{=23aP@g8y*(ASY7t=R`c?#=nf?2Eass5yxh+uXMIBDT)`yTtm1;o00I=s+6& zIsAa9-c7?kKWOw0V2AREMvc4JAyh$_xkE9!8;5b%Mq$|M1X4qjbZ>z&fSo~)K!9|60gW!zV`wragAJxbPI3LF_9jRipl?9;R zA3weJ{SCuQ3*Fx`CR)I(w{|ScwFKae_p@te5t_S0-NgVp7C6!$Ra#&6 zmT1ZiJM-t2`*3UZ<@F!m(Hfy?8nYs$5M|!P(u#;DhdY(lw~el^N;O-!a6%l=Wl=Rf z)b|e#ULiu?Nm$^RbJ>v8hfOk+P6)A`;kk8XcMkdztAHgMR=&IA^8_`kxv`C|f!mh# zAdIf|vaf1l3gy@$E!+;o0N?y%a9vM4H(O@3kjP>YquNO*Z>+W<84I@atfVrOKN^gP zFLsi(d`_(qTuUhEV5LMvlx>&MB{C<&UZhO3Yfza+uxGFtSDfEz={Fc7DG+| z2CLift_?7$mAU_`Qkk=2|1;IqRAO)LAHN42701$^+*NObVOs%*u=tY*y46Z#nc_rU zD6s&KC)5g_6L?l5sL42OlX#jwsF49zZnE)%jIgd7)!B?zH+>1`#3`>uXfz`?>{e+GubQwFC~FE*fjW3N@SqR63gR(M5WY!xta6)p5_yR=%Z*D50Ct?K9UVkN$oN6V};Ju)IBHV*CqfPK6Z4 zphZ7IXO|1LJytPEzN0%o?ov$=HJ^SZ@T@;D%w@2+aCdgMf63$khQmB7^^d#!f@MZ@ zV0VKbW`f6%0`AjOq_BKg{=Q&zw5^&uGVSt%yp@l=c3zc?LQr4cn8?o;2a5gK{ESOo zEptkn9CE=Y1&?cVl_XIZP3}Oc#rz#C>cAdO*7S)BtZ&$LBZE7x^=DR$KFi-s;Q%1G zT9p{NwLH2*Q?0@2Si67453j5E>@qH!x{R$hSoyST8vVYJieN*DDE5O*d(_EwVEm~ElP?*zb9kCx7lp>2!WhI~;J$&ie1h7aNrQ}5L?!i1 z;fx>${;lFCfft7h>A}`K)3pTYI#hqRjLKEvg}#6Od{>;MEmwnG+!oN$n~h+cZ{+M@ zj#|sjxkqzp6uN^eGq=0aSMk#-QCK6iJ5+Z}T@qd0cloOQ| zL<2#fi!@DK;LEAyHS6gw(yw(3BxoP;CzSqa zcpdcfNw4e6fYMZhaZy!Eqz)a20GrI0@u#wzRf|?_^&92#Jpba84D0pLUExQ)30!*Y zFeVEbU(3z&V%~mDhaYv1U)-@Pqp^xqHeADzo6gW5Z#c}#Uh}L<3{H0XT#W@hAKF=8d*X4+d!sOo865bz9L56z9z%nQ~mQ{K4z zTh}IJEE#aA1jZ;g$`*PUywCawZm+#(cJK@3(fQcvF3WA;LBLngsD)*!60i}HN4uC) z9QIt*sGOib`?To80BLz=aEj9ifR_`$=U$v?_GZt&PW5^;o=AVl|AgnHa3rV{6<%wQTC>OST?pcUQ zOrzF@?Tv|2nrtn%?6lYV+a|P(DBvsCX4bjei1_+xgI`cvl{Rg~PW`#bzn2%n*-Zyz zV9Wp?2bt-ALnMr*HDKW6S2nc#>`JSc(k=OUp#7;wcZ0C;k3s-aptxS2m<|aoJ|As& z1^}(+f4-60C`=4BWcwpz%=ujc zH5@yd>LNvx9@BR3anw9!b(M+Cc$Xb}>X2Z)9_xzbvhNjG}$ zHSkFKS`1p_y%x56XHn+d#3yb~zEd^|;cM+D7MS-KIejC=+t80GoM3f4gvwrIIUh7> zj{Q;s(0O|lO<`Tk6x^auV>>t}%)#k7a<&djyzuqz^f3PDP{pGA;L;t+J(WdvoF0Q6@w zX6ijX>c8?a-{nzRGNZHf&7|CFZ?-o2xoqe4Hen$fvJyftz22@craH`qc5?o4A`kfByB(DDq7os!0e`IaTYIO(aDe8vEe_>;k@$QmYIVGlP8Ys*E8fQ(E zn&K&76k=Txs3O=L?_d3I9{YX68P1~JUJce~L;2fHXY{kts*|On-uwgzRBsznR|cMl zZW#uemETXRQml>h6j6I#>cR5D+OlTL@PyB5s^hb7+Ev*w3|AplY7s)wYM|(^20LjB z{MN8N>D^zEq=PUJj7BhKIvS1@eXb>pE(uI^7}u^FQ%b$KEnoLLeX{k>#`WK%p2#EK z1bxeO1mTk`?~@Bi3PzhGok72_QA*vcH;EcvHCe6NHtDLLJoz==(m)Z|26eOZo*1kP z`!H~%`(!NK&^}L8&8W3iZ^PTt*Ssxre?FMxJ-DvtV$MiJfmhpr)!*rY!TJpJHLi#s z-Lz%sXY6w{woG659%*YO{hvE+!+ZYzeSFqwOuFCOCu;PG5e&v%jFZm&FDAn{6Ey?9 zVKG!-uH^&gcnV(Jvr?-+0s6hBpR^)(W-!_|mIn$?)aQaGR-3d>H+)NW+8arLgnYCk zt>p6CcjK|a7yM7Vm+w#W?BJ3pNGKvj?UYOzyIpuOmUVm zQV?*VL5QGhki~Id;q8Zq+P$xx*^5;4T4QRjn5}$`+^V&x)Q0u~wy1k0jZ$Foo!xoC zgrKDOjSuNDX!tOM|Lk29J3&Q0LgJ#n)$p->&g1To+eLle1Q;mEgeiAL080qB$HdK% zMtg;$bw;m?A73t*k8oUi+h^Ys0)d$EWkvNVmDrH<&Kz7OB^xXA2fiR0N5Pk$SEL-Q z5}NWgcY+kYGC#rU=R)(%z|GW-5+quzIFbK*p_odjW$La~5g3P({ml3106P#*ToW@W z>uHst`}7Dtm>^0RW$+>XEJF#7sN@$8?QP&;CfXqBRwr_*SPlJ(;zfPgzK$Wj_3B#3;jqT9op zSYJ0sUUhN2k0_dUw0_S~BE`(38BSo2&!6`!WX@A`uO-A_^-$duYt1`AfwamVLV>Yd z0UQ3(&T>|G(L-0|I*w~o*2m2s33B-?2@s^1nBe8IH~AYvmMV#%Eh5XyVH5G~jQ;|~ zp|j5{P3^!S(Qwe6Fxian~K#MjDxV>xRzgzLb zDc!Vo#{&Ogq9TDg+&j3EY(K+tyt+^?f}9u}&YF-XKer$(?? zK6p4#dbzZW1Z(R)g$a_i(?E>T0Wut@2$)9@i;A~Wf1a-@gq?QIcMA?c^uk_Hp%Dmy z?+wK9f|0vs2JClG`Nkz{IXJBF(X-JxgXpW@8D^G7MW5FgVXKHDLV9KQ?XXZ~-xTPhGN7(}>KT$>5{#{iQ{>ywXQz;|{s;$Rh z^6#I$bpa3+leLTn7J}d_3rzd#v)@tM|1%$Tg%>^~!GDE?HOSDIMv2*vjS~O*_wUEn z6Qo{l-5hsG_p=e8um1Ak-KRgi4$}E8dKvUTwo*+M7gKe@@Dr~89Mq5r1kho6-5DWs zt{=YI`P6xxkN;24-;I@9VbYxnlNQ^~fmg)dcf>ZN@E#|IPi5){@4TY7am#HIr@gCd zdAUVs+bU&qEdzL=E;-CpLI__P-`$vPSTJCD?4!VB3II11wv!}3k#(8SYdIx=3*Fh$ zeQXYRu~(;K>@yP;@+G`;$wnxaX-*M1OsmdCL&CbiTPSb% zJG|Tem2CT13!UG$n0a%5z=b^ab=Ww+9YP0`M5XZM!F@BMkUml_K!1qmHv(7zFIkov z3;a$=u>r8NSm#Yg&ic$J49hM65ly%1yHYArz8r~W1d^FBnPToYAL@r3eyb14_T7zY zW8}aCG=>nBkF@ifyCZ()KxnGuudf2q}w2}+0 zYzeaTb;;?WQe*{y3Ftaku)=L`irr@vI%TW0IzPDG;ayY@sTX$IJ0E&x5kz7s zoitjPtg;0cw=5d#QgvmTpcKFI+CB_n;!NC6%pD|Rc?JvzcfC2l1wn-bYlBlomdC1X z=HU)kf+yY%`nt5UdeMLKQ*v{J2vEOFV-i!&AM<0l1L2~NWran%>N4`)@GfeHyzK}e z=Rptf<z#z!n6%jRj&!2AT`a20>2l|8nwOWg_Simkea&(I%e4&Hg9Q|*?k3(_?eP$ zGJ5CDb>DsKL=J&z7q11}`!iXz-3n(&AGzpc+?ndgm}J6G*NmFHk?Y2|vNF#niZe}6hX3BdMBz9KPl13qw=BXER z_jN{dA9AS}_q@9lZBD|Y)Z<4G`9$4k{FtHE?Tu4;VaFD3W^nSZX7lc+jl1A|-UQNz zG_JP`^t}OxV?%_-mx}bW2KW_(t%)b@LvoTn|J$J-7JZuK!IyA_O1sIYov&Vv_*ET~ zh({gtF%I6sbW~_YXZNOqg#cGOFa7yWp%^AJMW7+AdMk~urYOtHj)=1w<~M%oF9>xy z-*@Xi@%(=D@&PU`U;Dt!Ki?v&)zA|jj~THhL&}b&JT`q$>4guF0?~Vo0xHIKj-E?gQ;^cixNl;f+J8uiQ3H3yR1IL4 z=)xBy21E!3P1G+mHP*%F>&Dg^?vTxW?sDV-?OlD#+s4#JdEbMr^_QFM!wtlYn1O^O zewGvvyzt!^hX7|D94%TLO|dAmmW=?>KN)$oplr;(VS&$7rh0f3a$y z2rIR1raQ^UE*dA7{4m{vw2ct@0psmqIO6*VZB(%m-=NFRT;ZLPC^_7 z1ptwEqnTwgC;0XoQ$N_e>#-Dh)?|TU+RfkzebLer-UMn;t8vZk4rnEEn6g&)sqR}9 zzY(Km5A8M5emSqHT<9;Es`w@sbJ(FV%&X8<6$_!K!2Cxz#Fvl@OjvlojZ62@!=u4G z5%5vvjVNwQv-dPC?3>Y);D#*9x&+Jf!BLw0r4c^oFAFHj{Qlil4(w0A$!Xyk(IyAe`;b)v-oz z<*(dums~p6ZWV&c;G6l1#@$=&-o@t@J1UvFUGO1RGYnR7ctUxW^5zGvRR$;j5i@E& z*;-DO5b}=X>i5HIp1+L)HwJlzG~8e4K>TNu3Wr@^p~tpH8kVnBjCxW=NFN?CsTN^n zOF7UnieiM%#m5|i>5(W5YNFkui`J~BL1=_SkPcHAS7k>X{UxV&Xog80Eqbf!--=dX zY}t%W4l)?ww@v!;x#RaLEN?kHGu-yd=`Ux>M${>Sm@_X$i^PB!L9LEy%a9OY!BY+_ zm#gchr(GKT?|QXec>j4GA2fHxrS()XpaYzXa=aVH!MMUfWCU7tk;n@vP{D{$0QHl; zc%pE4o-8D_oF2*}_Q=9i_Z{f;gU-9oS?DAd`6}6 zoDv>@&>PEngDc0ne)yiT&ehL+c3zmAU)4@m{nArJYoG|lq`6+54RyTOyV+vsz6 z@lj+;v^d~-M^wYUwHuYJeLhrYa%1Wu)_F|k>`XM`lgNch$g`G;y$p%BsW<=9a%_nQ z%O2dpg9epm8G5^=p4m+cXVCy(6JbpWZZaJvg9ezJ*wzlwXB7*TW&9=<4Fa!1+Vrjcc zcft>fweSJP(;XjRuBJZyhyn?V6{<5Sr&gO42|V=wWDPPC_G-IFwy)+fFx-0aS)p3B zj`Q1CBaz!fBiho6xYQx0n%zVB8K{OU^^CbKIvRtOd9!bOAD=5N3Sxm*j~ldLvHjF^#U$v~0CHANz3U zAj%A9lXq^Wu>4OSNJn7|yR402M_vnJ)wZYUHJh6zMnPgl$He5*Dj=Ezwgy;?@5N#L zZE<^_CcoXM3GI7-rpj7W;@R9#Z<- z;<0tlpZ;4rLKr?Cd`_tyg$TwT{?5+z(u%%cxqII)iP0e^toNJPVj{NK=*gK!&&I4F zSf2&u?{$&Ue-e+_FaCh>Dm;$YF99p#o_D8=IB41=)aX8C?E2(ryfV+SpN8c&GCX%M zuzHlstL<6pGJo9Bf1(?F51vsVFt4A0pyW>k6H~y~?2_u$qEm<&A8->1DI4eRcNpft zaMd}|*E^6isbC0&zNW4cW7mhGoFA6@{LM`3f=P@?NIux7hve0x)o0_a96A0a5${G| zlpspnn0c3X2mkdD+U~7&7_H-F=#MzBzn0ci~Z#($vIQ6X`2xZJ0pb|M!>}Qq+5ySY^ z;MjK2MzN`?0iE=TNs`<*C(c3{vz1zDK*29D%AGg>(K+o1TjP1N(}E|N>l}9I0cwC< zOic&X>pHM68dauWBQGJ6$|)c_Qu~}@aP%HDvsO;QXH0~}-)!0@?3AFL;~e4Srp8`=J)|LPMTFHn@Lj1cLktt%tVL@Klc4O7NZCo-v zj#7wVHRJ1PRC=3mv+rDhtR#$~ZR90C#-t;P&Y&g_vZ0?)pZ@oN<5ay8sot1pUC)%u z5NUSydK68UbHqBvn(5M)OKDta0>nL7`}pL8k#FxTwWGPF`OKCJI|Zz8A-0Vnr0Y4T za!mfAUI#l6&)V9_g*R5=L-@&*%=&JXnHIJbcW+v@-mk=8Y1z*Mgz-jK&tU$w)VR*K zc~(sJnbJP~2xUQwsu}lmKq;UVpHWDvnYk^?FnS70uP-W25$(pT$!TIARI4@41#7uK zJ+qqFj&41z`E*KrTK=tGOYVu+HKBi-lmMtuDUw*s-CtMV8lsc&fVQ+H)Q0EI7}70? zk#Sr`C%9&pmGQF5)qi4k{$spc>!KCTI+!KkTRDU!+l$`q^2~&vdyq+Ewsw&SZr;(y zzopyv98cLokr=&Uj*uAQQdP^brIcgtqXLEel_3XnpP{+lTkdM#N#4qgn=!?!^{)hx zJ`*?1ZEe1{2$CoM{z1Nn@4dzqa)0!ZGXAQR+F=s6G*aqEf$msx$S!LH)7&`!#<*O| z9NQmU3OEHVy4ha7+QQ(#3n&GjsnAHKNr!IBzdsTy{7 z2rK5{p!^>a?omSa6A$+^o$KsvFZ*e1Ga(VZG!}c8&4>9V)h2b1^mT5}1!+uUbP&?- zIVP&?0^mwfr`hb5){hv2CwwUUS?n|NA0F_XCvxFc8VuQ#{{ z7xYg2RKFDJw=$gd3q8(U}wo!DcO`5_9u5NohsAZUlpYuP-Kva+VdRBqpSepg_ zyrb!bNCrti6n99bw5wTsHci3)Ao&BDV7NBTX2H_5?JJq)@tSo^vrL=s(BJ8t zZc54PXXWF^6kiN3x7GqqCv)i+0{`_p|LicCNKo%p){{48Tl*1NKO9AC&u~KZ>lBo^ z0)&5P7k$d>8D{Wco?K8iZyCsdlX-HT%N9lcW%`Zf_8V~Z555@l(r;2|MSiddam6?F zYGkwAY2Ums^vjngOUXs~eVq;5Xe3K6Z9K#`F|LIIN;jY{TK3lzfa*DvipBiCYj66& zo6HV2Mad%DWMp;lyUJGFIa!vsh21zQl|@=dRjaxp*0sDcBGrL!LCsprDPZr&o2t;O zs19HaqG!b7ITlZ6#&+Gq0-Ns52mscY+eO)de#SBrYbKHIvNF}PskPtuj1$!NVb0XZ^L^u{xe$em$Ca-uRD2X}MvN|)C# z^FkAG*$<%zRl4Gj+86#Mn5nNHj7=a5D4@epM~+06Li$(dlcB$t70FXPkc!H{l@M|* ziYQ2ck&3n#*-kK|V-rp$#uB(S<%q_-V=~4>M388rBnw;Z*&S(B96(ob&i)cO#DYwV ziAx~Hgo|g)d{i z+9&n%vs3s-=~@kxIl%?ATt13wQ9E{RiHn{5$hx>o&p96%p-JTN@iL9a&{!|ncs4P1 zas-<%{*VGk`GCTOqwO(4vK4dT8_dG&BToBwhpOCOOW%{ZYXLo>ba$|FiT5m34)`ZS zJvtez_dXU;Z%S=aa*$b~czYYV*can>|Rhk3FJk3FUF@lmoPPJq|}q2|K? zG&5hfah`zP!T0A}PnSXIyrpoR0+9=Mj&c+9YZYni;*xW3Gpk@Z0V><)#i8lsQ;#K@ z=bjy7(e=NL66qd$Hx}i3lTl zWf(R$$!Q(2a>pDNxh8;9&R6-E4r!m23#T*k1qsTcmm@LRPC=F(LPd!auYkr(?R}rE zhmAdiOrLHF`5fN^(Q7&Xr0nu3kV#bUw=+f1$&C_`5eeM?3KY*(K;^x)&3!IR^O&di zz3AiWA_ogO#zR#;Oflq`(e zz2#9|@#)&AC?8I4)&zXYmph_O{9W-Yf!+=2w)`2Yt4J-p=(OE%^v)di#|G;s14?6o zN45|1_q`VzTmB5;6Rl~M{yX8H`w$m6uN(cgD4%1WvqV}9IMSG5`(-+bCg$RNAUetmS1 z^hP=(K3r&G#K*J2!S*pnt$(iF@!M2|!|%_e5TP`FY)R`XP(rf3wtz{?5EZn zgs%YBuLUT?sOSUiDYwYLwP$AicuiNvbU^S^bG1v>X5LHmvP!sT=)I@~xo(Hj{+19} z2>K%;xX&40^pdw0J;yr`t?Gnaq0NX7b;-WrI}pk~j(>R#jj|hdfEowY5cNcjw=w4;woNyuSW?rpjEuAqnrFQE9+L;bJlbiQ4FAmjQY$xQ+O&Phv zwbW)0Q|z)ImlHP?Dhs~H6qyU1Rxndt{+!ITnYB?rRs^gn;9E2#`TXt&SgOXbcnDHc zWCs5&KTOdcIY8yi!oS!R$zsk}BCFqChRe>~bNd&k=?&)PDMJ>7th}`a|JcC{*;Ebv zahVyx-DLCQh_hqfxV1bfIqEzo0RJ1528G2H6M?V|C5G4j6x7w1;bO%az-s14uR43J z?}LdZS^+7@7o4S(m8H@d;efA+#Lczm&G>(4Z$6PhY*|)To-q;z#_pVKyZiP z?(TsQxV&}m5BGogzNwn(nlq<*PW9>Pe)>5*VH)a+L||Gl001CTR+7^K0D!RnZhYK_ z5ij3pw+DgaBBQK>|8RZ8H~#_vFawn3q;)(^4l?lKDY|Aqr_3~|A{=$)bmVw)l4EV9 z9^rGaXA1#B!1MrLRRW&qlCFXw^b73;;|o9CVXxNjr9Lul$4nFfSQ=7fAep#x@`X=W8UXMF5dDGx z1)zvk00LA~HL`Ob#sG+9><6Kg3kYCUD;m*c2Y>*u0pNqk(*(4|J=fW0f6xP<+yp#` zF?Ik_nVi#=0xSgt5V`;!gbf7%oksu>0fSJ0fDmB-2o=EppmgjLm?7lhn{6HR|E+@d zL8*;QNVLp@V&q$5DIhy@6c!+nKU+pI8}Ojv1>XP2Wwn(COuOWV*FCkSG6FSaernf+ z4}JaXCIPT?9%7sJIhZEcy^(V22&T|rJp|~tJ+I{?7eu}#XSCN?eH1|OhUf<|exF<- zl=JZX6=P+-F&`sySdYL$82ylpE;Hjd+LdDkAdlHjm#~+@5$Hpc5Zf?fq+1@eD)7XZ zUIz7M1AaR%5;NWINGM{T(X)55dixw?o>GKAzXYx)<&#YBB(naqL7$xUQmZX0j4rnV z_l{TH%wh{6+EY*SO!P&S%WKTAdbFF%yiigI)=6eOesm3%``T0IbR|O{yz8dm*?f}63on^Pf%Zu$hVNwT&5Cxi? zWa?$v(S`j9Cd}P5kE)!)1rX6Z*PuItr<0?_=(Fd z)my9>R0(PKgc>6jcZH^eGyEJFp?e>bM;M`PspgEP632y9lS?JdR7+tEJc3w#K|#g= zGvdV2{ZT~?uEe9DwJ{59e_GN7eLI__ZxVHcHHd(IJB`tyt#uJcBPWxFvaZKlha6sB zCW8lU@;F*7C_dbvy8EW~YQo2)%wd?Q%d|)J5zBGt>HB>O9Wkj@n@*K`&z?>?&(T>jlH~dK@942f zVm)V%cZ1wcPVSzI4m}Y2_+Oob$<#|g(i`}z;h@000^N%=yY;IvF;=NEtbGXHfHHbPmVgmT?F$R#9|6e0#tCc zUIP{-eSUxKxm_!Q)9i4tJ%7gfiZHZ8jhw7gO*T9Bj%_^Zi;k}DhK;|wPQ2b>QCZ2n zrY8JOTT}Yv(zNydU~gZv;Aq`Z0v=HHH{;9Nsxr`Pw*H9~^H6(rJ=T*?s=@1{!{t$K1Bl&T6XZHwCAt+u~#hU6piw#TL zhGX|Jj6XC<&M=bH^gD>dS@H7&E&l3oDeJ^b`Hmr7T`AAOKIX_J;Ob zQmkqvulq0!I~io;ok`X45No>yG3kH*o{EhF2 z*Dgyg*rE%~`fYAAz%*TvUqNJhf2Ck7qtaEB8Qa%EBboU$ggOdaKhHd%*7B`{YTlL; zqdl3wZ@c5;*E3f>9Xm@4wcCGhC+Pc7b zD?U@JZzEI)g1jkoX8vlY{wz5DNai36QY6I356skWj?=`8P?6-xh5unu2al|N;jtxkPG@*(krpTP4uh#u9u}AJhod9{pHGpL;vabqZ3XTEcNd8c2c-t;gTPDBJ_f> zuIs^0KKiU4abX^h0&xJlVI>He*bl1`aLDrVifswGO8be7!Q z3YW5(y8b5B|JJ!OqU=Yen9!mFhubY(%pF!@i$?ph@jhqZZL;rI5C7$?Rd%HN)x?v& z48-wKCWIJ0)~((gzLPUh@qYF8rDDeKhU&i`UW`(ViKVC=KeV>^@Uui_QLnc;xXUG4#<9T;`75{Nev9FV#%MaXzq{uB;_9~WY#ONn^cS|x zXB|z=%ANa`ySK-`O|<<`^<0!qk;LJ;JylrbD2rqPz*M{HFYYo=V7_ToJT2V6)^Xu{ zC`JEbYxyusvc6zRZD6k1U*kwsp<=bnZe}4M{5+O#9Wb>d(?tsxSZ=7=yS8cWIrn@f zEL==tH9rFT431BXA543>-|O?r;coU%K+Rl;msG^l0>G3hOBWcf;Gz5PsyE_DqN1y} zhi7zAdNTZ}i8UD;=v;5^M6oibN2mc|B51iQgr==FDW2ZhKYfNF6&iu! zt4@yMUTmXCR&@v+s3bf>r67ty$ZhP+oFC^jw~Z?t(@K}|O}h}X&GK<1P@b-p9HAdn zYBvY(eVSSC@)iEQf%DZKq27s1;MnR|*Z85akXio?7c1pRcu?OEu~+H&3-kz>7i~sR zx@)^2u~~4FVZV!JdGcg_DnkB~OE(-?UUAV**S~alIWR$WnWiO2hT4}RoMU+XgoqRE z8L^*t0B-m+zhjEATY4$ZE9&0p=qB`XCH^-z)M!u@g!yNX_1)j=Ot+fJq&_LPq6?dA zDwAu?5o-$*gby=8d~GwwgFhjH69J$+m81{B#h`MWsqMzlHnSn2s2UvQX+Dy@Wjf`} zny$P5+)b>)JOF;~dkT-aK-Wse?&|RiLfDfa{7B(qLxRrt$G**cJT2J=wqXPWg+1>` zS5hl=QB65!b8|cnEe5J2K(3fP5;FAsXI*~riDBEt$FvPUjwW{mA06I4M{bM`Tcx$l3BzWm@Z!$GIZ5#gAr#1ysd6QG_qb}aj*|Z6As)78&oE~@ z4Kj6NI#Q}6f)dwl^R|LbEdmW2?P}Jbo1wQ4J5p+>FWrX^<*Sz&RCh=`-oEuoWVMlm z@2;e_75i35dFglUHr}Z3X4`R>k2KJN5_OHCyO{_Q4ZK+k5D<}5%sgn3GTvfL!S6HK#ZTzt%bEKJ?9VO1+eA``(dl_LAj%To`Gm6i)ctEUD`1!$MtHTn&yl?Zf z)0!Ex2 zDP}UwRaum-EfR%v{_$<24w6b#wc){n-F`f)v$7&dy>!7b*bL2+XG|q_eNXL*Jeeph zLXBzn!tD%M)jq!eqj0dbV%S#|Ff#lbs-dZQ-5VbmV_a#`UpJZrI9(LRl-Q;$Bsn2f zrmA#6lrfEF`9U?8aQX38rNL6~`^l=oH)_hNZy2cmvIao=3ZyjOIt>llh0fbK>cgy0 z#C)jPtw96`_u3ba1w#}9Ymf)I4Ar!P2G8d@r2W?l+YXI?h~Joq82BqTT~}o5rdod@ z>vbAM<)`;+ks{RRA=3*|3<&bgD50BpK0~_+zmOl&w*`_Fur#dM;V%b&PuITBMIA}5 zCE;Uo&@ZtD{?P0kjlRXJ0DPxKr?>SXN_nTtiLp{l>QZ0W{%$2FBOi*jYe%)7=t=oY z-o{Ih^9W8>d$wD+YX=6w9|vrBbJn|#YhUGA!Q#oPv$-s34%f)WS>IhtHnUk@MM@Qd z46BEpx#LzG5H>V=-~D65n=a3)nDe~F0~u)|?-y^s)?t|LFv$16yroic*>}~TwxcCsZGlao(r9^hE8DI>X^mC5My3z>KE6#*qY)Ae9oyBSn;^bOkkI@ zo+fq5{jjn1aHe?KjLlZ&jSagFoAhW+(A#V2z><0kD6+ zzAQb7Ne6i;?S}knlrXBW`6&R9n~yv3m%XGT)lt0D1L60`6=3S zA%Ro@(@HKFE>ZV(^WcJRDy?GExvj`t19_C`E9-44<{YM$B#)hN9VJ&zdgwaUq#q7_sG{*6D zH=5^sH`I?n?zc^6C88CKR}y#_&s}|mFEpU|%|PpvfDL{IOb{I5p~v&V@4do%?_Ilg z1eiMi5txFClBc2gAa;A`N(Ef+iOiQfF?K^b2}2p+T(cOZ)F$M)dtNXvY;F0R)Mll< z5)MIFYV71bKl~ByC*jrWTUaCZzG z5$xTPe$48Kd#zq!&`s9Xl8>3(0xr#(Mas`@D@O_;^mnApFyZH+7l8hB+Ei_sv*DSv zd$ke^WzC*A5W;;|Z+-_wTn5P+Fic2}AK@122Ru!X4?L|3k21cSY2^#;)Vj0J-fdeA zgxA~N4_){?`f=&gRBfEdN{{h_C(JMTZ@x73J=YC;%1Dj4s{ed) zf8u+Q{8c_(R-gL!G?7P89Pl6Az#wdSZEsBDyDBMzB69{+T%?zAE7cG~1u<2qiZIL0@I`^UE`$6o_=EOoNBFh}I|;+GptH?T{$b!@yN zNupQ(Yka)x%S3F7<3=nC3kwI2e_L(bpW|ORy1^0xEk09Le!l1{Jd-40`xJBf*IfP{ zC1oMM@qIdL^oU=EsQ)lmq?><~9qlkKlM>kV_m*h!;&%)-Ec%4=jaZ~C9U|ZG8C)O`&uoC=eI8m>cLKNRHe0<&5Kljlx z*Fgve{8K(K%C@f7&vjrw3$%+UBg*3!x+XL5b4Qp^&Xl(}uE)=-CN0Hl+B z#tnfH{Ztcv7$GPokz>-?ux2Lo+z1R7(qi^M3JhzWCE;tKQw@##rpHFNXV~5Hgq0#P z9v`g~%R62D9%$S9x4MdNw~z?3Pn9YgSkIw>Zru)J+*b_6IvVHugIkL)$2xQ?4=KhD ziB&4sjN!-=30Z4U`Edl(u<_UQbWhSPBWXVN#~vURRTb05lQQXMV?g4JJP<*gtLmbo z$!6giR+e#K>8M*6%Hu0`b&Zwl>Po7F8ZNg*E3^ClU7L6s+gSFsXig_Dm7V@Ix$33XXa@1}eca zSELQkq0bv1CsSykUp5EDmr^Xq2E@?8di=iXOJ@#bzMP(tz{s)=!jOA}+L)%L41i2q z1V;ST1s)9Mn%cIaTz~-^-|=UFl%>(SwuYVkSwr{iPo8{iYW*C&C^A;4q`YdfL>K(9bB*4d;zvZ+bqV@74 ze?5T0Q8`e4T#vr>bVk4j2us3o+u=6>s7hLuV~!_>DQ_QxLw6e|9MW;Yo&{367L#{- z23O+hC_jiA-GxNTJ>x&vtm#-LbiZ>ovVZ}(Q%LFE9Jy%XlX-01WcHbl)0$Eb#6lur z%D!DuCS`#`7O=tGU;->n?C;pr#MA7^eyQ7rwwXXUZe82S%o2M5`n&K?o17-LOFZe} zT*$Y!!4agL#bUZhfBQSxIwSs%1?_K7I{NTow0Xzs9-*UWV8ke&~SVu=^zkVh1uAB>L;c9d{8OVX8|!P3kEHrTa+6}M<$pjhWNk`+(It{TmjBKJqpE0My9yOL z3Q-)t4xC^3+r6;();!uBsC5tyAAW!`xz%xp#MvcnIqkbBv&N~S?kF{5vC9Fc$bw(APmAc$*`~zeZkTicklo`@I>B53@IcAL9e2VWKj=aMa zU1X@>q(2P9x*@*uX?*kHdQea@NkL0yDn^}pPfsC9-Wh>e*l(HJIP^e{-Y8-v(3qDo z9Mz!m?U*xS>SDaB79F)h!O6RNEa=sl4Q{n|W5|CcUNcegwu$z1YMuM;V5oq^Izgxl zVW=!{8uDjt+87(xwPh>eOJmMtX-*a$1LQzoCT^VfaxUpm#T_|1)>-7klK)x9nyBF_ z@p+O*qhp%;E}%K4GPUbq2Gl&i@D|RxEw5A#rUtwm^PGTBwuT-iHtMxah4~ zwF)JXrgq5%{u=h)k&N&73l(O$faZ<|bvi%EalbM<0hCU?3N4(LnEe~u9aYdU;*gF7 zuFsKLPxuwVvV){hXo}gO9+x$s{X&}v{d)8Fnb`0{w5A3_mV9D%y?+bT8D&cr1Y<@v zm{(m_!4Ir*LUYyjQXyC7kK18m8{9v&;TI&&BS(Or34NBzK8)X-Sg46@s_?pVLZSpYg)sBZ6 z-MJb&g$h-wvGpU6kq)Y=iubB=RJdHQV$Q%Ckf@|${V9=b2i4a`7O2bR$n|fz*JkHp z%)!a&Zbj$6@PYl8aPvycf7>_Gb>vn7cb1M80DE$gAz0gB_{&=`5z_RrgQ2e4iQ0`b-!)7CbbTAIvKXb6GO>sn8I0s#!BQ>75rO z|3)_arT;^hJa+j5Cvjb9d?zgBzwmYD%PkN#OpGjvJaIi;n{{F1duf2k}jO=@wAo<-xBzbCKV+J*gmDPH}bxCvBZID z)<3TUPA|+^UJW<)<1i$S>T;YBd$A9Uiw`;5*MCb6Io-}r1LaEt75Q*tRwQulZuD4%KGh3r8~kpuBHdbUv3{_Iapkjb?VnC}A#2OrEH`-iBy?_@;k>`{Z}6XZ;ZX)dWTRXRg#WT zpy@;0J<6VrGA$?irdv4H%JzeEcLdW`Q*3&= z>(|viyv~ShEY>bo2X|4QIZ*7h0 z-y;tT2bCgx7~d}hiM;5{;p5Ck@4mrMrWAqB%v&K&CGc(KTFhH)k%dMhy6P{vyahq_ z6BT)GdR5ctGA&sx1NPObNV_Nj*lP42)+5OiYlVN2Cej8UsY{cwKz|7-uY~-!t%It~ z+WQ}IjNxi-*y@#u#3J}t=R_E5%7VcsYKHu3sgnccLck`ium!NibbfrDq&RC_@%|@e8L9zABlGk@5d@_LnjHsR=WL+__wt`QWUX& zzx`)A-0XGj64QDcI;azi%UM0nTj-5Zw9oUV=%E*wu|>cN*`0eHUYu=B;N|xW(|Vuo zY-KcX(u4E6t-O{?{IpP2B_)5pd9-c|+59G-BPeD*$k5B9h}~MToT_l=8@YW3@i5f^ zQVwz%OjboQ=lnDFjF~D+ATgah|J{A|<7vQW6;2J^!je;e$^Ctgo{P05R9l}qr}d|l zgj|*%?8O<7{*+%rVd+yi-PxO60VS0s)~b^1kkvC zUaas-OI#=w2>FBDKyTRWibgiElMHuy^@`CSWfI&FY{bBz{yYTh+6z?eZ7g*DgbrPW z1>wnychkf0tAr~{@8mHgZ79Dl%HYSW2kVdX?&e>_>T8@EzYYw#&0!TEYLvYnC0mS- znTn3T`?{+WSY%wBOlA<(`-peSQY&$7wZcxk^`v*lZLeSn_Ud5NKmkNd&u%nTy^!I} z(MC`=$%v%s;fZ6R9hZLMxY6|ThtFC;s05{l+X!%);*W1n zRxYkPZKKX(_%n@%w22cdJgDvbjh#cOL<9zm0U3<4`6uQ z$WTB?a{y9QQU<#jzBILGT6njLON)-vWO-2>i^nfrLXa%or{I`F6CN!b81A9nb~pQy@aFC!Jm zTyC&74Wfy={}Jm{s~1Y1bC$`~%Bjt_In~73uF*@mSGk7r$ZLIX1j!6G@zBRmokHo{D z_mLUgBvs!D>@+-$5&jTC`!iRRJssmC?(ALK7|4(KDk11+ zi9-g3U{tQ+UxU0TtMRg9<~Y2J5@(#^4(Z1v-sOkEM@sGvhxX^rnQSsjo3-~Q>We=S zPHRc|;QggKDxVcw?%kJ{v@uORT2E<*5F%1C5-W#QI{TWWbh9dQMso7QFda=0Omf>; z_GFXSxApzPBS!63&4u=xR$Y=W!##R6l05$Q?nlKjw|~~u-+`5a$%rgBFQ4gIY!qQN zh6M6U24UFCy8Bd!qS{^tW#Vwqrq@em)w+KC`_AxHM#+Nwhut&za`P)rPEPmRt2u^u zhr1GQWq<0@WW5m^B}(>vLsrkMSh1i`y!?*~ zebiITSkTN7vWEj>DQ|CY&)qnm3gOk{&Yt%+tE0qIti%EwsC@s{{acIa_{PRJ2Kop@ z(R~mR0e4w^Y>!%HEf?azgk+r(cg!4weqXv;GtMiky1wK_*(6+Jn%hZ7Oc>f3CB^jj zfnJAiZr)X1owVphhP4c(o+m#ljvaDF@Gt8NbBdy?oQ*F-POiU7gAx<^S$wyiiBkZ{ zY~Q`V_%XES32$!6ZMd*?R0eZn^{}9D`jGT*Hl=@mG-xNm+RVKYe1vQ zSyc?c7u-u|1yMp&QkH*zo~oF!((GbA)mH*=_|We{^_9xH+kMji$lI`|%+|hjb?E$N zr}skG;2g$P~>D#JaLIq zkL}%3@f>T4;G_D}+JVm(4%1p)FsiN4^TIJEoyD}YtMgLADQ>TK*9~IiMM?prPDW*G zKxmTHw(-Dh~bk9f~9v>U)m=W%rdnMk|8?{4YlYwFJZP1}GbA>~5 zs3;*6-xp6h9e5;OAa4qCa#+@;aLCxpv?QQCa-z{2Rr3K5LQBq&31=7pZs(OQ!u4DZ zpSX_;rElD*K6hzl?n?J@FeH?J=tELsrnkD8)@m5<(D`ZAsY5t8LUR7hXR&*u`u^f@ zlPF8UBflE3K^g0LbUUggxwwT5ry}G9BF@-gE9H>&|e2nnFH4rTi zb*}Slxjqm9pq!2~4@|dmDWU{2gpA8ba++EC28MZ*f(o-?V z4+XlrNEiDcD*st}q_3 z9}qtwvS-Pf#`>1cly_vEMG&DP6o3)(8fRw&oV0yj&&lZ-t&qm1C{^eRBHi;5I!L;D+ZDK#T0#!#AAg-H~N`@;!sjQO|sr z%c!fnckhJyF@0G zJ|HE^FNmem+UO54p&mIiEdfDzRs8RMJd{Oc%RjNX7uRemcxZX2gytV{#n7$%ID4*T zO9o7UpklEagvpoDVw&R|m@=d^R_ct`Ndp_HP+U61F1_sJEc{U3K*?DNUJ-UBs;MXM zY+z};T;^$|l9ypf{^qz!h2P4iXHBC_OG#7dMCSE`z88o~6us&s0%O~JRvxKtG-WK+ z)|bmVWZ=qZ3{M$9-DZ2R&um-*A-S7_*ihf0P*mWi6FKZL8o7=;;yEOZO+`}VImceD zG*6E|Ea!UW&6ydYC~K0m`Ygm{@3(cNr_>%?%WoNIWFS_QIcUZ zZTk^MqA!Z7jQGcSVb6+$fRr))RahzH%FQZ7UO+Z5n@N4D0I(>1AnsSCSj0d`Kh7pa zleY*cDFZXSOHGEh&eHegrnP?PiJpJ06hD#qQkPNW7ic@&*oMUx*$F(` ze$S?6F8l=Q(T$bJj!6&be-Atpp*BGZyJ@g!gp@khJ0e2QV6Z9SV{v_;iJez_R}h3y z36?wqguAXcz1wi2bq`?OjYV|%rsh`N(4)hF1fFaLj~a6JSv~pPvA8s2N130F;c1}} zYwLjt`0So-mQ=6BwhGh`i%y)PE6w!OwsBrw2h161dRC?GVs1Q)o?#*!i!FxvUsxg# z&p>NH!Z&n@E~^KU4vox%zIr{Jyfntmj#6*BOY7*C$$;OqJuE<_)Flt}uXu2KnTXBLa?E&&tUCrc=v68q z(gS@vd4@QK$EgWs7h(CZ@6gJ%0J)WoR~q{7dahnU97T3Mm{5k&P&|$bB>ycW4F9Pd zhMSCM;@;NftR=RT*3&VrH+qsQUWkO?>6_Am9Ouq)Fn;k)HZ3R9)m>275n8c0lYhS;((U^L6c5@>nX$)+v zToI41%Sb9lkqaFI`oj2D#U(c#A3+|cU|#N1a$9J$DM!l1Kd{dN zjDgM3rfk+o><;SsZ=PLyh_8s*kdTG7{i$lX?oYMcoXh59jlYS~`#xi-zuP+Zq%(Fu zcw89Z9LL%43O`-R2$;fF{>OS!tmA;X!B?WNq!GxL_fb7}`PZu6xC>}kX$mx4tnAQVN$sC33i_~&oJFx@pGsh6_f6|i;L(6pmr zgY4#M*a6xfHbZ#6v&@-a_qY@u_xD8HzTB8ES9(ul2LaBm-vEFk4kj0QUk+@*?azH@7tLICh|DE{% do9Fmml5t7D@QBFv;U58jvb?%ng$y$2{{XpwY*+vQ literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_013.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_013.png new file mode 100644 index 0000000000000000000000000000000000000000..f5b4a065c937ad238cd1f867735be546feed0a6d GIT binary patch literal 12104 zcmeHthc{b){C9*HF-u~v4n(Y0t4eLv7PTc}M^$Ons=a5b=+GjnicmEoNKt#FXenye z-ZW;7nzeuT`#a}3=lLI=C+FOAPwx5L&$#z<->>n0#~B;mVTJNTK_C#T?%i9aAP|l8 ze+MHya3wJGl`n9j^VZTeX9RvBj1QiJK%yYsTbkwpc54|-)$ngAZK3R=I@~(A=h$nq zA5ETXUcB*ssSANb#CP1+sMNf4TSo_Wo-v-^(g)T@;4o>$Ma)ILZ*{rgVs8F?d^3%% z)k|k@?Q{2XYH*gpB(cP-VX|aJeR^MQx~{6Wb|st`mg!wvOT5p191S)GK`}WRII*=` zSF=H|2yie6!%O$y#gCu}rjR0IFU?1l(O&UE(o9*i2M70t%ndGtfeFJ z8VssI17dar0Vh`&h)lWy=Z8WFpa|R*5QGq+00m)&-a%P$z-W|a-UzTUg&*kD^&ak- z7SJ))fklG`fqe-E;T7_4&@~4<`^2< z8;jqDbSQ{A{?RHaith~b8ceFVG8biNvwLaM{+ApA+o^$@Z8Q^QOLxkCb%XFGMftLt znW^Zj$aGUP@9=a)CDhyPo$K5+Q(j(NP2R`?V)*;0$1gZRqlQ831s6#JbM(%}*%bZ6 zZN&8>DL47OF&BO1NN?ZN5%!Ot5DT4<~ zl@^=@(mbN=|8hOJ)bfM;w}td%C!aueSeX5~01mwaOpERoypRjPusVgC^1dlE{WaH_p=jc<2jfnloHq=64Q96s0 zduCGA;$vZYS@A@9nv7|Vi9PR^Jlvw<8uF6XPpV36^QhH91e*x37rWZ?Vsu2&7s-O^ z#CTI#SIXP3m)3jkMYci&7w*zQs*@1SGEc)LE#?adbD%i0+dQXUM=c8VkKE&E^Qt@k z9Z_gF^I0r-l9Lb|`!mt)byAeRVLEfcndeUT&MH|k7cSj9+dC|(qo3($?^?K5@Z#Da z@u8YpuY%X&(mK{H4Cb{aFs6!!TAD6+3M+3C0gGKudR$m@}A%KG)OIL)py%Ms2 zGFnDGLzmi}j5gz#EmRJEC#8##8Ka`Rz565E&KgQ&`Pw_5%CaK~H$t<)EFV9==Q?4nlL7^PHELmWE;4jo)25LLYvlFrUA_a_LUbWnng+ z+ow;7)87(Hb6kf@Se5=k$#RR zmvbJo$5cU90|zJQdCP-Iwe2m#-#RB14lU1wbGt>^S3v19+QK8LlUspZ)F5pogus`Wv`uA&R>wq4!&1MCQn~iiyy65?# zpWmF6*L=uxzdu!EnrSXib^v!2J0^)6gxS^kt$Ewxk{`zeZeHkdU9XxByXiPXi7XWe zuyvqt!`M~`xkqX|N$nL$wYtt$_QD;j*9IaxHk7==*rU*Y>*9fh2<=3R9M5P$_hs{( z=wp9><)~Hbmyd7qn5^BMWmo%$#c%#H*~x8g)=RChz`Z)nqqR}iK5QH|P>Uu$H8Ib( z5F`^L6I%`E{NajI0gefkZsVu^leNA_Ns5Elc+i*sTne-;dUP`UODBQbpk}Rd9Ie-^ zV~J>we9v;Xpc92Y-fiG90rGaexaz+1Fq`9yjNHX$|BQEFyxjsL1 z=W2D>$)QC`aB*@met#&yBr0s~&uIAu7ka!X;@e-!jVU~vUhRfkib|#5s`&jUie=Ro zGH!qPUBhN2mYvB+)Mi($c-r;u3eUh?_c=Nuo_jSdEsv{O&A!Tg@@LcGVCloKtsfFM z`LZvx(QL|b+%n`53U8|m#gNc9WsYb&0ADdn>iCF<7vyQso0c?s2b z6jJ<3?QqF{U@N9vs9&MnHk-=PV|xFzBi*C%pooJ4g$g*$=B$+Gs72r(P-5AL4*`Sf3oxLv& z#TG_7)qdAYOGgHHDol%nAOH0&ty{0PM$ieuKFXM&l%aoe_Bq?^y?-jq<7KQXGu)T= zN#;#Qs`&+(=#r$(Kn6VV%mfQ(Ea5Uz`P@x*XbIDIEmF?E+T@vf2}V$`W}gmPEw*Sl zSV%|F^dh5>UC;x<=H;s1j;rMU7}RdV;qGdcf2yqQ!-0oE65?0ljGb$tz5TJnE~N(v zE@z*8wVoqr&3RoMYNE0I_27i`2dOd^o0lHMhJP#DfsvWqOpaBGOAj4t2cZ7?rZiDQ zb3FDTpRc+N)W3f-Jg1>w^{{g~Vk=H{$5r^Mk~Jbx3^^WB1aM8a86vW|KxuAsJ1>FmW?Pmw`M3nK3U1 zZW-Gf7r!b+60eqkGLrrsr&!pHCUB>&6Y{tt;mO0uAfsBI0`D~^Dh(zto6yn8+0w{~ zQE(k1Mfov=CcYY5!T&voS@=W%$;gJ*10Y7rTm?K#7Wj$hoUFg6@-;g0slt1oYyvmh zPRys^>zYr;)(mU`?CuZ;PFM73Ok!i@gVR_|SOh+O)A>{gBe{UQ#KYHid?3DR#5sXeo^Y(h(xdHv>evJcZ_<9P=xsM)(i5yxo=R z;-p{BG43hf3d=Lf3VXP{@YC5+HKF&PIsD&3x<}CN+W7GJMZ1v4?SCte33D;eKxpC+ ztA9CS3cmV?z#yfJJ0Jjn5|oXd_x#z43N(+Xw6Z&z3f}M)RCxR=AL4SLt)8^c?!D|( zv*4f;nW6}aQX#(IXs92o_L>hfk{S(9ZqtobyJJQf7s+IERkdw*_WBB^LoV7UcGHsY zvqQ21=HgbD69;Ddp2?JSmxI%k!eAe-M`Ch81QlaV!_DjacA5< z-QqxSl=|1-(O?reVV{*J6ChU^baGPnT;8SA)k{(2|CY2;Sx8joOn;s6XEv3?cEN$} zDyN!}7#IPysr?9k9Q`aidmZw~+1pZ}+NVbl%qMDLQlZg!z_74kX9oK3+4j8g6`P z=Hs(xhC!AkV11UOc*ibw;$(z5!k8AJPFf1sLQ8z`Y`$ZM;c*wAy=OVx=> zS?NQ~Q78lTv*YbjEm?gv!7X~}wa0#M3ze7Eo{W&WC9*=cj&_bR-{~5Q%0QOlX1SGx zNs}>5TxzKr`dyA*e#l*kg<_+|aj3NI4c^hZ99&41gJWYwp5*$x1;Nwvn@fP@r}+z| z6r`+eqWEO+-k;HAL-*5nnJhys=275BQW|zc{K`tTYad^$)mqUMiyC!qm@KoA$nJ5` zFDY|D7Gb=FVX3mPPh6gdeM~pF280W$MPLXd`Qgv^=Yc@|w=2;O|Dz9!)&#zGoYkNq zZSGcKe&!+bTD#}9Ja!l&6@`;MEhGH}TP3O!6@no?2#$+Y@S1CNTxu^- zPjw~CH5wBNDE*)Gjf9nbmN=iKrlkL_bEC{Xi_W%h(JT|9w8w*SW`6Y1C7S21JQMAPES_kYY)* zyyM^^baCd74VY$6c^)MmE~U&atnyEe#l>sO5`>PYf5p#6uUXW;UGlIeQ?<~pAt*I> zL}CI8r9+aPI`Pwft3$=rTcP=28$pcHn~El^r%yfgJ{Jm=b%w$~zO=bJS-F6l!> zr6(r&fsIO+GVHqizG!ZduE_EAjk)I*<<~HM+=v;;&A)9TSxSf_a0@_ikIZjir;pK*N7xZ0DJD4sjPuWJme6AVQC3$_{wcY7WNV7k?1e1tF`1kqv{&&&O@)I#z7 z5tPie8EtNO0l!*EfU9!Amw5hsz4}h%-sj?W{DUBQ;JAbl2Ar^L5Z^5f>Og=YDg zlQ}vGvE?^R`^16SlS2-+WVN5M{FU=aj075fQ^AXvqlIZ7N|Bp?mnQ4(OJoMz_lc%w zEus9109&H409;hr`}FBl@x|Z_7d}4$q5BV{Hk=ln6Pr3#%ysHiAkaWk_lv~dWfgoU zrJq_#)NbAbLaqQ1JmtrZpa)Xq^X1T9VM~{Wh(T(M0dn1K%x4(KV;5kSxs53SC!{oOH81?Ag+3Xt zT%!X2{kCy2HJy$%EYjz!`USby!oR$;3vf@_{TjcgNfUG~2(tFtmvku>zK0UJ!ekFq zDtE~KNttU@FR%&srO+_^3Io`A{r0ryo@f9z8a&Rx!rQymDc3ZScelRCPdtTM`e1_x zj5&8Z5}Kz;*mBROOWw4lvMNsW)@sMHZQORbD2oFZBFUb!&3?cOv35^v>z5Hl1)8Pp zl$HH)5KHqcWn-5x$_z0DcKPBbF(n^99`zc5Z^VTPSz_;}AuY$gI*inqNX5?Mye>zz@ zLvMXrpflPuxj5ggOlH?gAOBqH|~JMiS6Sj^;OWXraoKK@I4duLC}B5`hm%eg|j(oq8p8->*U^!;o8=bPReS~eeb%Yh-@vbuwg5AAGLxU0T-J*?8YSZeU zq{NFe`8TzFdxoOHgo|T^oO)$pIIt5c;`)~LEe6wLi?1!FViVCS(tOpoJc>rzx-_MV zl%zpLqyeyE4-rg9VrRri&|*f*jCrwurV;Dp&kQ?UZWJbb;GE!vUlDLnbWy6$tn{)=Y-OD z>$CX#Gl&#ZjE9n4EL&8hUGI*(El@*4pp+G@lz6G}n)HM7%fdxErzlGd7J|dwXDfOe zp^zG}yTMc;g3^k-1tZ`-h6BgcIG+vnph0R7eU%sj&*YRZeg`E3!SzI=A!xVTsgmg% zL1Pp?Qs&fY2B5G22%9nqt5Xn#V^sk=h-+oIbXvmN_Kqtd!YZ=4F2({_F~3+LD8bK_ z7dOdY<`hsNj*0YL9h&SbckUUdAw7ASY#yQDz0f5kpy(drSXuiDP)%RJQWhokdvEn+ z)7Y?1uE{YF{4n$2s*;%QK7&ZeX4DBljr9IcQ~S_e)b#1eQSf+BLh1C3qyry=A(B$N zT2g1I{5w%Q6X~e#<%+=OQl?M$sY|(icZL~C-5d}2NoT?9HLkF#5_9Qn#}~nmn}vU2LT){JFSV5PGTP zKg^WnR|(h@VW!AO!Xr|uef8`k_Gs@N+g9=5rK?b^r1RR(1bYF@*f(2Zcc+0|kh~mz zdi)UxEXQIIaNX~%ve$n&7Dk|0xb*!5KFK{+1N6pJY)VSXPp(xa)xhWlKz>6!Dl>4f643$u0~y3T#N_va}W7Jf9hpWE7#+?zv-63L@Q_1q;% z6!1cCnG+H{McV1`ykOh+PIZpdOpQa#6nlyQpm9zl zbf<4f>u$kKpXRKltzb)ecKt8!RlSQQ$^i{{^nk#rnP>gi4lHA(p$xBkEiON8{OA@W z<~W6kbfajZShu=_c8H)}b%>E$*3~OJ7ty-Z{f}DA?!CpXCRCqB-DN zG+lNUiT`R`<<~`h;s_&hrcV#Hb+$OCGjb zM(J~gwY_9IJ3v#f)=Y;TO~UtQv_p+4=8>gMr-$)?<)(^^iT>ckigbxfEJF%bKrm%~ zL=|auf)9BsHbG%#1=xzwvn{c~33mnFv0YA%1$#-70dPkF{$+3-gqi!v7ER}+OFP<~ zah|CpX(Hy7`8ObPwM#mM*Q?d6pF&JunK z<45*JrlfM?i&SOx8k;m+%fig@eevlFRy0<@yN1Ihwhe2qZoQ5Z;C#l!aAJpfxLdXS zHS>pdiD?`3B=qCWmA&n&hu&XyLhe$1t<`LWj%7`E8p&S;Y@ zK$G#^-7G%R-q7Ce9Q$6AowmNHKDTGW`01jj583_uG_KQ1t&_JT7D)gvd7|2hD6eoYuK6UQs2gXhg}OS!*w zh17?Zt^-b&NS^~2ktf5~2%bbe{XOqie5Y;mCDX^V$A8!`(-8-aan~^a-_ZQh*V!zYS}XH-V+P4F{cEbS%(w{j+nn?QBN^;JYZGnjbLT3{jQ;6Ya==Ba4-EfIHoZq z&|W$6IB+FT)`%J^w@v&Iu8a``SBg!d?6TLLT&~b1-U}*dz<xn`A>Q!MJmPj<%$E8U9OUwwGy^-FC*@e>Q{(GV;_Q63gre2 z*;vg42dYy(LXC4m=K%tFJfNE-9@?>45{19^uR%6^WD!O(=bC;tdrn;X#kbC&rR-Sx zwelV{$0r<2Ze5jN;7eL7PzyZ_C=JI2IvWE*fdD4U%hOd;wzO-ORK1!tKjrI`{`sT3 z!Pj_8?zTwAIhkG-X81^B=n+E&;y`^F{$Y(1>&5e&o?3DY;tH>l7pxdO4 zDJFq3d756fU>KraZb@j&bx!w3N4x_eNuTc+|K+cw!{-xXrNrM>GGp<3iP(yZkHlmU z8F#WBf`jv*R#xs1m(n7g3XPpVF9j42v%pU?8RMC?KT5+;xaU;-o#62FNGDEi@i`}W zCjTkZQIl&MA2eY7SBY)<>1M3@@lHwIx)s|7aw5_59Ogp1kDSgO%XMR2rhmc}ebc#~ zTk}K}NezK*+bf}PrL`WO*R}`v1dk>=QyE9dfcKEJ741vqT%p>)7 zDq4+=b~|38O6Q)V%T;4PZNm&Qd5IcgVI?6ZLB9%2?o@e9pIYiQ4@>pzP;AR{L1Lp- z^}9pX&ae2cE@k& zH8uNs{PXK=A3+Tg0bC6dH^eTH9@ybUjENb1QS}Irl<>fJEBz6F7GGifm1@As*e$yK zlAra}7yp7TC}io~K`?NnYg3Sn<~DbgR&5KL5mNNHoHq{jq+43r#EK~V%@_GpwuUF% zFgHcB2)tZZE|qyITWliH2xZ89`eVzyrroxNmy>>1moClyN@4f>{l!XQz?zTS;WuJ0 zcX-`@9jQ?|-c`GllTdH20mH=EaVx^ianXh`QGvAhC4-er;SO|@KrAjZ6=KwRd*@wM zS~H~(M*k`vBn2wn!Mw@j}V9+*}yXW?Z`=wPbK& z2BhF-7+iEhPDUQGBK2%(tiCoLBpInKEBY+;TJVxhY4j?cUNn)QrZsvMM=#U;v2j=~ zZ;KqByr7J>_SM?uy!2OYfKc{PUL@`i$0_`PxFK;AW=8A~{s zJlI}5+Xs05SsFcB+%5(ASvc9VM~D<9?(>*d6ej?W)v%~1iEyBaQm_WftYb%61(PI1Ede|}`IT(y12OIN(IA=`Akbv-}BZ|nqi zLD=kiisw8h1VLxB)uw*x#j)mJ`Jxe)^*e4xj~1PiPxUAtAahC-thNlotcaIQQr@vg z;khxw74;lme?~t4FMy`)SFO_j2sraA2F!|6fNo47VE85$c?bxPSHt8;#~CM@ zGTzdmPn!1bQLU1(srGc7^>b)Zd*w`JVBJEq94)Y7G=gPGF7bOeVlywXp+Q-_L&@JCZ(xl z_ff6hm0cTIhs2i_pd#~>TveHKR^s6sSKP)bB9GSVHsCvtjjn|{t-%BBw8v}f0?gIzLWypDtj=k!^Cb7k!$_V%63>+BIDO{ zbO(EGeq1VN^wegeEhP|<%#~&C!iF(A*UOsnEHvnA|lj7e0 z@G(K`7w>wKwn-6zuD(fnQSt(h%jwg>CVS7XkfTihsle3W*y_35%$aj@8CY$m-Pnch zjGG5PB(iMyKtu%PZJ@;_>HdfMz&&!jJYK*`lY)#)W*};{xSj?NSvo6ZXUNJu0@7CM zTh)6ny+SbdDf>BFfJr8N>F&>v^_s;YM#5W~@2&Iww(OX1Dp4R(IMaLj3ZKosK*zFG zeYKBw^988YvIW*v>$+E7!;6STM52|35>W!-llgNe&u8-uwYoXTyxkHfXaFShn!iD0 z)ImCop9vQOOvHVEO{5#GMT^EY^OI_$*zONgezCP-SC{J;)le8DaT&1>wXB0m`VSgjOr zq{JH5y)Ou@2c16&5-afG{ zx7Kjc=^KrdP?wGTBdk4$WEz+gWM%dIu1Z051h>zIs-eo?)@Q20dn!&@p?k}BHxHR) zZmafxe`A=SqMnnu!8)cN`W3L-4_8)8o9t{-N@&e(H0IO}%y3~7`?NGjhX^p{Az-~* z<@L^ir3ya$vlXpZamn=h&iB%V>+3wAmQRy_bX$fozyasW7|F%fRkCA%e`3#M?9sar z=+U^@%zR2^)J*ITRKNeP4Z_d!LPx1(fdrBUB`ApbiY`ja!e_sS@|e)Q{G*)Y1h4h` z6%yWcrR~?+V3Ea5@JQ1e2ER*U>#s%S{&+$!3Y3{AVA{w1<14)n?4t(Sd_HI zrd@Sztb6d|Em3Q*EKX#HuZ?T&H^FC?z=*%0B1O@Y&-CHCI>%9Q_%!3Xm$p9joYzdQ z)WsreNExTxTh4zB!kTAG@5(N=b8U+by@e|5au@d-U0nYjUD1kdVEEMB!w+3k+n=cb z)_G=I>$BXJBw-{g-r<|63-iR`c-xBJro7q3(O$eXN+azUaXXTGygWN<4!VC|8)d|Z z^1OObPj|1;uf5SM^r1BIH+b~-?`I~0ATR92?VR}G!u4!$vh1Bt(Qnp|Zd|J>W1Ebr zC^NgFXqErwPw*($Eg_1Jo$0R)g9ehQ#`3k<_ZkXUqQygC8yzs44_i4^FgmLM^u(KN z1kW%fVdO=ZeaV0>gN!Wcp2{Uz$~{duY~_&k)4(m~U)9)8+fV2AC_ejAd)A8z9XpZE zpZF9^7&6?AYxf!qSJ87*E90TEhdx8G=nXH*w+1`vF5Dn*_0ESpYQV)05+33; z;#|fM8t8fKhl@1A=nIc;Y(`wMm?nqP9xENDMI|IzL${jmH7LGvhF4~VX?xc*2{HOyj;D3`plm)f7ZGp$ zJx!O>`OXd6E8Rym7@j-YC8?ZZF$t?-6VpY0J*sn{CAv6)Y&>Yi+5zXC4N4#c@`wp{jrNI>A{qK?|_n-oW4akNDn3V|yel4;_n1u&pqKe=uXfBGs;pLO+Esif?3z4&kD3al^QN}Ds z?-oN(S6>@uZPU zbn_87v)hYGUgJG7srjEpTqh9P!c-)>yv&na;`?;u?fx*>2wdsE3=ivJ{-HvMw*MkcL>Nw3aTLW7cWGh)PU-; zQYqJ!^EjI9g5(kdWv3cDU0(Kfn4K3bYS=$S#5A%XTK2b_SDF!xnZT_`gJf3&6-hH% z?-@9~jj~bvcEbpdp|!!$>#ci`dlJm$Rxsx5h(ehg)N&{yLq!k~1HtfmAX!FyLRO zh(w9}efD(ag=OiB#&Ur$U) z6wzL*qVMxjiErreEsm3EX}<8s*J0aIJXC9x7yexSx#JUhA~ajWd|anN?N*Xw-6bR; zCno;0FBqOCh2177Y!s(kw7RuauO<+K1U}915`U#{fV2>pvi}W$RDoDDKq^4hX42DITblE XoUkPI2R{Nz<3YMQhPO(zuu=a53PjIv literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_014.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_014.png new file mode 100644 index 0000000000000000000000000000000000000000..dc7086e21415d2cb53e826189dab8b77b1e49c91 GIT binary patch literal 12322 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_000.png new file mode 100644 index 0000000000000000000000000000000000000000..57e81e040ed2f7213288ba322a9ca5368fff417b GIT binary patch literal 2292 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 G!~X(Ta#bb( literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_002.png new file mode 100644 index 0000000000000000000000000000000000000000..bce48521a8ad0ef290220fd5498d64fbbee919ff GIT binary patch literal 4286 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 AW&i*H literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_003.png new file mode 100644 index 0000000000000000000000000000000000000000..7374da55a251f194b64e458033f5f9dba184ab5d GIT binary patch literal 4881 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 CA$iLH literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_005.png new file mode 100644 index 0000000000000000000000000000000000000000..57e81e040ed2f7213288ba322a9ca5368fff417b GIT binary patch literal 2292 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 IatciSC%I}Ewg3PC literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_011.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_011.png new file mode 100644 index 0000000000000000000000000000000000000000..77ef12f566381e6c1b33d8bca88ac13db55b27a1 GIT binary patch literal 4807 zcmeHL`8U+<`=1%}WG2)giV!nQp(3(m$ymmctr!f#*fsMECQaFydCI;dDa(V3O4cd6 ztR+geFeBMAiZa$1vVY$F4c~LVKRxer-sgSJeeV0ZU)OcLUiWoh@A%7BCISb=4}w4- z0W(u08xRP5`p*kH0E~o0q)>qmG|0dV2LqmPm{%MKBot|8q>l@BT^Q#Z{B9)JLAh*n z$*3`iX>g^DFX7j&9wd%_@H&O>%4LjE8e~P?(mQeZ*2s9!y+tqdrX_R8@qvYPUyE

hdaiy{|fQ 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_012.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_012.png new file mode 100644 index 0000000000000000000000000000000000000000..8e8994ca6179220f4cc22f376f07e0870cdcb7e3 GIT binary patch literal 4282 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 O&EV||tOF=A?(8adUGQ$Rq+ zeALp>;2lj!qgiH%6%JYN7Ce9c{QB|k@5k!*=l%KA{_*Gk8*j_jo7Ej(ZqLYg(5g{Y z?w7a3#$C2{&*LBOSB=_SXCr^H%HXx(dlOcc)jPNQE|)u4WiPj5<4fiLe^1KyX4qOE z+C8raSmLGxZayZnahLtQU$xh&#qa$zXe#~ekzZ{FELj^>&&m|Cygpg+{^J>Q{XJhV zcU)Vpyzl)>`3Q#%bq}7(ByUM(&pvX>S1$SEL~~hput^7_>cT%9UGrUU&*#D~uZ~T; z_bmrlo-=vRvVGKX?e@oKYj3{q`~I#kVXqC`e&gdZKwVQeyS%=2q`Y2wW0l26TYpwo z7VRBdB$e0Ki@mx%=Z!`JZzSj-68f z^pf?pi`dSq(>H#ce_CkuTCws)^TRjzm27PPv&pRM+VijBVW+>J`lIl{m#OKiuTR}2 zskKknpOtwe{W0n3l5au+Yxdq)_l#Zk1(08Adj7dW{MH27mXEJ$CYeT^o6v${(34T|L6ISo!|fFJy1RJ=Sn>%$F#*aq8|v=zyI)( z8s91Q56V_xRgz;l#Yl zdskn4w^`?7LFwJ6^UMeDK*I!^p^F%G4CPS&LuQ z!C}K4hEeWlXpAO?(Y!EP6p&LAuKNFcAwNI=`*ra@Uw^&+`2+XAsLypfcJKbJX>)yt zw3xse>9}`G<8O6c6{oTl^@{EBk54f*m8O1}7XR+l!C$4U+1yLyS^iAB!23pg$ESSG?e$SV zlKyMgKFVPF$M-rz`u@kS>oRidpFEf>D{uLI`LAWacNVe#o|7P(^RRl~oy+qN?uwsZ znSTCx*}psQuicNW-TK+M?w2Dg%j*T*^{=MyU9|P@<=yi0e|;|hx5xha`TBiLTmLEs z*>mg(b=Yvv>xufBjJ;7@^Z7k~tbM@nO1EERP4vCI7unW-uYK5V`fl%q6S+P2x!4T* zjl4GWZF#M%RX22de+#Vp1*rnfxP?Q9SO3fpVMpZYDei`JHF5U@#6pgPTYT8 zpL2ivuKfjl{qg}08~Ap7@!t1DbnW!lpX1{U9vlB}ZR7sJ_b>3E)epuwpP$Bmc)odG z?8aZu=EPr4=g47dddgSEJ!c>1{#yIj&9d^}mftK-__?y5n`7E(3-5&VEk|DIq{{zV z-;l7gb2IBa3EhoW(KpyxPxBsOz4xKF;{N8YZ29U1`wv@v`g~HP*aF7^lIi1m;p>OnTek{M~xW`o6&TG$P9m&kL2g+ZeDX^ R60pI{;OXk;vd$@?2>_c5_B#Lo literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/nose0/nose0_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/nose0/nose0_003.png new file mode 100644 index 0000000000000000000000000000000000000000..89a7c2a1ff882a99d236a227922bbf538865c377 GIT binary patch literal 2956 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(6kYXuz@(kesf*OvL4h9BpXHOT$ zkczmscOLeJri!;EE@Rrtw2?`ZQCmPe!1@B$5xzGLYaG^s@f!xM1Lf-KZSp;b=j@d` zyZO88qxI(__dJi%E@#_+aW;FMpn}5!mj}z9%$?`iz|hFv^pt}`V1=N-npvTh8jMU$ zPuWJfqoFaH7)JBLXiY>?U;Fph*Wa(p|CjvzTJS-1|GhhRY~<&pU*Tk7dClT| z@3Wx(#$TytE4HMc(~bZAwd-1W<4!lZ5QhzXyKb!P-`eyw=j^YVtb5VVY93jyUGVOp z8~3$?Vpcy3!`5uGXZmMp`B`^!UBtm(N`I;)>IE1NTAff5mQQBQ=05qo^Je~;nw?Ew z9e;c`_@}_sR64;`&F&c2wacd8XCHZEp1v+&=V6mij?b*8H0v0BG-T0UnDtDK@!+k+ zWTBdfM~>)#tK@htB|1lCx0p8IXSCL!1U)Q9MZ2hT; znZG3J)+nlGzcU5e(tE3OpW2_rytn;#+uI2)@81>du%V1;-ow+)_fu=PG<|)<(`NU$ zry=32gHRZ+tHHj`Zox#wU$#`&+ztoi!i)d(m!EO2=ccyi7$6^Dica}O1Y7svSU5Cv%pDpW zdK(U{ik#}mDG(5m*TB#y#n>9US*uw{VZnww42(>sOkAteLfKRu91?djGO=W_h=iS8 z#pBh`aHxoR)Z)>g9!*@M*=e{IAYb?M{;JsfY4g{gffY^r!|wIJ{`|aP-41E7fC%$F zcMe3~_Ih>w>&~gyt{nd?`sZoLjyt!70wT6=J^y9*&iF?8<<9pfd_Vas{dV?Gg%9(A zMRDUE-v`ZK_5bYv-b66kXR@BYrxy+E$*W#`^^uA7{+x=tFP)x#!Exy5ziE=tF$O@~H3c%y<7i zb#VFa`M3Tz$nSb@Zv9l4>-CiE`VX`3)y;kQ^jFRMgZ^*+A9{aXIsSe98R2x1fQa-v zzxI9K^Y`Ul|KDR;@{Wa*43)j&3pQNo!Vwx?Okk3VY*>hC^L}TuKfJQ4Wc|+^5wY6x0@MNSe~bAut0N z*_RJ};uPrM)L0|2RDp?Q8PGLbHqbXG-fikn(FGzXBahRG;BuG4Lma( a$kwpZ*IiJ#)CkxjX7F_Nb6Mw<&;$TljvDa* literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/nose0/nose0_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/nose0/nose0_005.png new file mode 100644 index 0000000000000000000000000000000000000000..c710f6f22e040b46301fd542c73222e2338dd891 GIT binary patch literal 2873 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(6kYXuz@(kesf*OvL4h9CU51uZL zAr*0N?=+rGE8cxHQOkkVjkUyqGo*oU1%qq=BbX0lU1;1pnNwMDX65~@-;(zhdp?=- z{>Yu*^IrdZE`DF)`P1ot92*!K1skWkf7_zQ$ixySq|*-+kYqeK%W|qKr+|P?{wQ}e zG)5D{XkHjC3dkx6uRiVGS5@=z@8k33r{n*9o$>$c$LEhfmG{&$Fg1N;=!^KFxu^8Z zpMO6-_go9DuPLp0ad@@eGwaz*O-NXi?_<7v{xma@@t~C5J=WFpFaFy2XYTy@M^4#G>NwlCd~EtEuko_P9+F)9`McNNy7u`y;y3SN zo+bZjdqYAcZ@Hkw|NH0WT&((SS@)sb|6lgfdZ`~W8UHTTb8$=)FO+Ze@0b6h^MBEo z^yBg6|F-^9D9~p-xJ!J#d<}<<)xSTl?EmGx{=>WQ`TMx<{!F%0ff3;pi(N3@nBbxlv{&Cu)~H~yV8Ue1VjbaXe>`;;V@xkS-mpbjFD+n j$!NHYCI+H2$pe4gZX?}vk1q|twlIUItDnm{r-UW|wl?IP literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_000.png new file mode 100644 index 0000000000000000000000000000000000000000..cab6288d31cf3e1cbfe59cce0d2dd2d5787051e4 GIT binary patch literal 3365 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 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_003.png new file mode 100644 index 0000000000000000000000000000000000000000..9990042afe4fad092ea650626d2b30d9efb4473f GIT binary patch literal 3405 zcmeHK{a2D_7>3uEL|urh4L>qjot))IdDLuz@#f4;*DNx9{(_zTy5n=seV%ikbKTE#?(4p; z`<&WILZL(c3G5>0NnuG9-MN8>;u2G_&c(!jUFO7riSe6K zzo+S*a0_yGcrAL`0Zb7a0Gex!dz|Z)(km`;m_%3d8e$Ww4|fK)#kJw6{3Cu#wC_q% zyWyJ1@#j!QpikCMW>&YIPH%g4VL*w+6Y(qZmpl-zcf%8>&m-+1i0#K>MKvk=e?XzR zdtI^kGA}$eT<{vRS*P^p#d-p1k>&}MkaAMNW06z!wXa| zh-<-4|LXxVQsqB8JEK0LewJA=w^hxG)>BkUrLA3Xg%=jMj`6i#9w488(xIxFYqh zl@5c?&yq8|2(dI;rulH!`O&*L!W&KW@p7xo7*mkKRP3RZ7cu7sW&?0*10(7t`?@oz z5S-y{YZ4YO&623KlhF#bht>G(ZF*TOcwW0(<2l{GdFG`pbwf!}dUQ|5kr-8{F&L93 z)GHp3w>W0T-zAtb;iAJSwrOBmc9KWw4caK(-y77C(ZE5v?lh1`9|+2=5%>A-ZQX*1 zHVgae+Ii#d^bU4s{rTl__N6bLU7jsHoqx}|2v6NXW4x z2r>#rQvTecCQvOA%&>l3-f@<}XmgcYqO{wEN`gex!R+uzpQ*PR(^qBL3x?@(G_ zdsTl(S4^J(|#PU(xayP7~ zJf(OA0Ggc@^c-Ejm4nDYa75M^>xBl2G2jSo)9DYPr&$1?%^K#Hp}0NHl3QU!Ezj25 zV;P5f^~tUtGnM zz_5Qp0i`rosmY#nN+dLpD1P5>N^reN`p55-pcuzNm2K|WXY-h;&>GE{`WBlNnVg+b zt}~OJWV~TI^|%k~+tl$)gnv6q1(3AXC^6y)69YWPHx>zFJzd{;;y0!T zxm4?youO&o%dAK4)eH&4>Ob!}04us^lXP8XsQ6k*Tsm9vqj~YYoueE3atm)DU1t;P zrle!31Nn7yQwQyGGtzbJwZ}#2*s#ZKn&pKv)9vjE&n48nGPZ44@#6#oujrZ>aVWD1 zR83M;N&WSvz(+gI(nm~59Uie;;0)~Jv0*>Rz)Z@{Aff%1hlzc+ZLL<)I{TJ6zO^41 z>=v}{Gz$mU#*f=06jiZ+^Pj@QXkbFi*B`QRV$59Ly9RDLGxF7v(Z9 zKQ)Yw&g}Ac6HOLYVH^yyO!c$Svd(T{DbLMq$&64xtY$wK<=VIFx?6G?4JW`f<2s3q zpXZ`!rF7=8VqT~qn53;`rxf>Y=!|ljdXZumy0CT{YZy@-QBM6qu{bs%&p4T2vQ zH79T&0SC$H-(HL2?m~07Yny!0KqUaQccvhXn~`D(-Go8>D8ym VqCZy_I{!zg#Lda^*W%!#e*-5mE&Tuh literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_004.png b/apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_004.png new file mode 100644 index 0000000000000000000000000000000000000000..3fdc83e95efe2c130b5eef863b4a4ffdcd2a43f0 GIT binary patch literal 2467 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(6kYXuz@(kesf*OvL4h9C!C{Gv1 zkczms*De}1CrY#gYAsMMS->)Pp^#Sqm+TLH5rLhjCflYJO+WLd{M%gF?dJbD1QY}W zcl16Hnase*WX^V4P(WdVph3jURV=Cw2NHHNGO-vjv1tcSUBJR2p=0jQ;NW&3A$66| z6b8oTr)(SoCpaY5_=GkIDI{#T12jOAv3crBuK*?%o@vqw4hqT%8;n9Zy&4)07BRDM zq_FUWEz@%36flU$YhY;XX*hT)L{)>4iS0D+sHLO9JDQM2v&?AWK!vh*UE&72J}LRo z%1H;le_Xr#@#oS@+x7o@pLaiU{c&;q&p>^phrcI2da5*Oj^raLw%4C4ejlFsKK}R3 z^Y?eeUryL7o4+es`_q~4QfrJK{^i@-dwEf@k?{9{^g2MvMgblOydio{=9Z2xK z_UI1I=1@PT{LVQ$^NkE{LxTU`vEu6{1-oD!M< DE5c%7 literal 0 HcmV?d00001 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_005.png new file mode 100644 index 0000000000000000000000000000000000000000..02bf322428039928cd60e117ecfa2810467accd2 GIT binary patch literal 2473 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(6kYXuz@(kesf*OvL4h9C!1Wy;o zkczms*Dm@>CyKNLZfm*_IEgQaX|AIdr)mJ#$^$yG3u-?dmr=Qwlljj$Tv?v~ABTW~ zfS`qvH83>xG#oq?qN>5j#CDojKw*NQLBz~e zEUFF%5_U2&u^2J2X$MbTz``M+WA4!4;C3J(b(PQ*2FB*6Y#ah7I3(8igfmgfyCEMhgeZ%ihL633v0h z*QfXH5BaIu`2BP6{{F`mzb`F+|HnD~d;PhN^Uwc3p6kAMdPV*Dck|z=o|!6hKXF6c z`S$;NKK(fO{?C7z@A+mC`p;+A@sw3QJ<0aEYu0-K1&0S+4*$fjO?Cgx$H?T%*nIVk zZx+*JCbsNNW&LUwL<}O%-dmz(pqa2iE&F@MsDjaO7>?0;YeZO30tP+$SGhDQP;rG*wb+EREVkuBNN+cegTCEf(8*YSFxx% z97y;Hw0hLi(cm3TNTXS1v~UV&_sAG7;?nLsT#VW82!5Ba=Dgn`l~=0Ntj?FAWr&|a8m z;khc1{_5vnFGOT^Xy$3SfkMX|^{adk7_bI#`Qo}D00QN2!(7h=QMQ9A7Q^=W<_HAm zh3?-O032$=4fmkY_@BW5$jK?O&B9Eq(acEm_0%uk z4V>J+OuYtTj^8)EN?Wa*$NGdFW(;n0c$+Zlm-~tO^&51_>5~JtwO>(O+QMB}wmp67 zlP5fTh6h2BH^MpXv(Xb}{@N_J@8?m}*ed&~Poxl>p5*Ii3HR!%;R{%?!zJx%pmjvI zmu%ZwU``@@atCE*82V^X5bE0KT|x`RN{fCByqzmd%JXWObp!ViY1J-O83vcL4vRIH=W0ulvM=R?EdzJ=a$XtCZEQ#bGUkJ| zILEft#~X}~^@gH}M!Sd)wJS`_GBJVD+L-;KzSeh^VBD-xttq$#NP@T1fGW|wZ+@ua zZOh&yJ0+Aw`_^{{1p2_z6f<2imItEHbYt;q7JL=jBL$M&Y^Qty( z&2Afemo8dNOB1IrNz*&1bgMDWor+m38b8;0gs$94_dL+W_&hMB5%jCu6D}7~)NvU@ zY7zQLjCX@8jNW&EtsI8ge~2MDAvjCJRg2cyt%0!WFzHrhQ_T?J?Z`hO`(MWwD;>{2 zl%3@oHxj(^vPCKn5_7Himdbz=4XH@6<&;yT3gz#0REoRj%^3(&G}UKrB6z&RZjigQ z8a!%Rpyqm$32y495k`cUj8<|>RWtnr&Yy_@l;Px!PStBGnupnpMYbq@-KLP>TfA)& zPV$c?vk4VbmUp_50>LL|Nk7qQNx72Wi`cBA5ME9>L&r^`1n=sA_w8}A=F(Aq zr*N@o2-@D^t&S^X*u#-W`;o^>%if_wIQRHMdT zhq8tBXn2_+OT#lv*f^JZ`sG)cwvpco)W0`W!Q^o`c`=4Z^|+ZrT>gH5m&dJKUNNgM zbl|Z^%NNoCT})UBE+=8zoTmW?E_J!1;?0|bJa$8f zPg_g3VUi@Oeq1cNdRD4VZNbWp;OCkhHzMzhiywIZllYQAZV87-Dh5+B@w~d=Aj|P* zY^BYUw$9ta%;=3!YO*VFyz(^>D_skx?&ZYxx~gB1LPOn=Q7`^5Q;rAVu>)_CXD&A2 zKE5Ymk%Jv?FX~Awnzq89>%cK&hB%bRX2e%(;BA^yomX`#aJ^RMj}KOmNlhA7gU0Nq zl(MPHr$*Y$u1;!Nk~EyU(hZBDXYQ8G>_Koe(^Wuy_F#gZggd58uULd*B0c51 zJjaGVPRpJAwPz^*W+)7a{3%r%gzJP!2~5{|e@L-G}ww{O*lFs-p||Wn zDiZAQC?+|wN)rQ)Sh(2!tpSv^7b7x99KfORFI`)0z(6nnFbyQl5ac1@pp#Xe!!PE2Qxs&H~ Q_aP|YyAytFUwq!b08K`&`Tzg` literal 0 HcmV?d00001 From afac04af78d21434f3137017eea3a36e6a161a9c Mon Sep 17 00:00:00 2001 From: djing chan Date: Tue, 27 Feb 2024 20:29:20 +0100 Subject: [PATCH 02/28] Misc improvements in cathash --- .../desktop/components/robohash/Configuration.java | 2 +- .../desktop/components/robohash/HandleFactory.java | 12 ++++++++---- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java index 2ecf734e94..dde2e504cc 100755 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java @@ -35,7 +35,7 @@ public class Configuration { private static final int FACE1_COUNT = 15; private static final int EYES0_COUNT = 15; private static final int NOSE0_COUNT = 5; - private static final int WHISKERS0_COUNT = 6; + private static final int WHISKERS0_COUNT = 7; private final static int BUCKET_COUNT = 9; private final static int FACET_COUNT = 9; diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java index 2bff1004d5..b0289e4382 100755 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java @@ -1,5 +1,8 @@ package bisq.desktop.components.robohash; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class HandleFactory { public Handle calculateHandle(byte[] data) { @@ -10,10 +13,10 @@ static long calculateHandleValue(byte[] data) { if (data.length > 14) throw new IllegalArgumentException(); long val = 0; for (int i = 0; i < data.length; i++) { - int nibble = data[i]; - if (nibble > 0xf) + if (nibble > 15) { // 0xf throw new IllegalArgumentException(String.format("nibble to large @%d: %02X", i, nibble)); + } val <<= 4; val |= nibble; } @@ -22,8 +25,9 @@ static long calculateHandleValue(byte[] data) { } static byte getNibbleAt(long value, int index) { - - if (index < 0 || index > 15) throw new IllegalArgumentException(String.format("index @%d", index)); + if (index < 0 || index > 15) { + throw new IllegalArgumentException(String.format("index @%d", index)); + } long mask = (long) 0xf << (index * 4); long maskedValue = (value & mask); From e710c0a9eaa76a2d8ed15ecb0eef55097c839baf Mon Sep 17 00:00:00 2001 From: axpoems <145597137+axpoems@users.noreply.github.com> Date: Tue, 27 Feb 2024 20:32:39 +0100 Subject: [PATCH 03/28] Remove unused code --- .../components/robohash/Configuration.java | 54 ------------------- 1 file changed, 54 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java index dde2e504cc..9a91c40116 100755 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java @@ -6,27 +6,6 @@ public class Configuration { private final static String ROOT = ""; -// private final static int BUCKET_COLOR = 0; -// -// private static final int COLOR_COUNT = 3; -// private static final int BG_COUNT = 15; -// private static final int BODY_COUNT = 15; -// private static final int FACE_COUNT = 15; -// private static final int MOUTH_COUNT = 15; -// private static final int EYES_COUNT = 15; -// private static final int ACCESSORY_COUNT = 15; -// -// private final static int BUCKET_COUNT = 7; -// private final static int FACET_COUNT = 6; -// -// private final static byte[] BUCKET_SIZES = new byte[]{COLOR_COUNT, BG_COUNT, BODY_COUNT, FACE_COUNT, MOUTH_COUNT, EYES_COUNT, ACCESSORY_COUNT}; -// -// private final static String[] INT_TO_COLOR = new String[]{ -// "dark", -// "green", -// "light", -// }; - private static final int BG0_COUNT = 15; private static final int BG1_COUNT = 31; private static final int EARS0_COUNT = 15; @@ -43,26 +22,8 @@ public class Configuration { private final static byte[] BUCKET_SIZES = new byte[]{BG0_COUNT, BG1_COUNT, EARS0_COUNT, EARS1_COUNT, FACE0_COUNT, FACE1_COUNT, EYES0_COUNT, NOSE0_COUNT, WHISKERS0_COUNT}; -// private final static String[] INT_TO_COLOR = new String[]{ -// "dark", -// "green", -// "light", -// }; - private final static String[] FACET_PATH_TEMPLATES; -// static { -// String postFix = ".png"; -// FACET_PATH_TEMPLATES = new String[]{ -// ROOT + "bg/#BG_ITEM#" + postFix, -// ROOT + "#COLOR#/0_body/#COLOR#_body-#ITEM#" + postFix, -// ROOT + "#COLOR#/1_face/#COLOR#_face-#ITEM#" + postFix, -// ROOT + "#COLOR#/2_mouth/#COLOR#_mouth-#ITEM#" + postFix, -// ROOT + "#COLOR#/3_eyes/#COLOR#_eyes-#ITEM#" + postFix, -// ROOT + "#COLOR#/4_accessory/#COLOR#_accessory-#ITEM#" + postFix, -// }; -// } - static { String postFix = ".png"; FACET_PATH_TEMPLATES = new String[]{ @@ -81,16 +42,8 @@ public class Configuration { public String[] convertToFacetParts(byte[] bucketValues) { if (bucketValues.length != BUCKET_COUNT) throw new IllegalArgumentException(); - //String color = INT_TO_COLOR[bucketValues[BUCKET_COLOR]]; String[] paths = new String[FACET_COUNT]; - //int firstFacetBucket = BUCKET_COLOR + 1; - -// for (int facet = 0; facet < FACET_COUNT; facet++) { -// int bucketValue = bucketValues[firstFacetBucket + facet]; -// paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], color, bucketValue); -// } - for (int facet = 0; facet < FACET_COUNT; facet++) { int bucketValue = bucketValues[facet]; paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], bucketValue); @@ -102,13 +55,6 @@ private String generatePath(String facetPathTemplate, int bucketValue) { return facetPathTemplate.replaceAll("#ITEM#", String.format("%03d", bucketValue)); } - private String generatePath(String facetPathTemplate, String color, int bucketValue) { - return facetPathTemplate - .replaceAll("#COLOR#", color) - .replaceAll("#ITEM#", String.format("%02d", bucketValue + 1)) - .replaceAll("#BG_ITEM#", String.format("%03d", bucketValue)); - } - public byte[] getBucketSizes() { return BUCKET_SIZES; } From a094aee60da084c014af46fce54484e4100578e2 Mon Sep 17 00:00:00 2001 From: axpoems <145597137+axpoems@users.noreply.github.com> Date: Tue, 27 Feb 2024 20:33:34 +0100 Subject: [PATCH 04/28] Add missing license headers --- .../components/robohash/Configuration.java | 17 +++++++++++++++++ .../desktop/components/robohash/Handle.java | 18 +++++++++++++++++- .../components/robohash/HandleFactory.java | 17 +++++++++++++++++ .../desktop/components/robohash/RoboHash.java | 17 +++++++++++++++++ .../robohash/VariableSizeHashing.java | 18 +++++++++++++++++- 5 files changed, 85 insertions(+), 2 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java index 9a91c40116..40cb6e67c8 100755 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java @@ -1,3 +1,20 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + package bisq.desktop.components.robohash; import lombok.extern.slf4j.Slf4j; diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Handle.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Handle.java index 22169d47b6..9689e8e0a3 100755 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Handle.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Handle.java @@ -1,5 +1,21 @@ -package bisq.desktop.components.robohash; +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ +package bisq.desktop.components.robohash; public final class Handle { private final long value; diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java index b0289e4382..5ad0f90d5b 100755 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java @@ -1,3 +1,20 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + package bisq.desktop.components.robohash; import lombok.extern.slf4j.Slf4j; diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/RoboHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/RoboHash.java index a23529e73b..396ee89bcd 100755 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/RoboHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/RoboHash.java @@ -1,3 +1,20 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + package bisq.desktop.components.robohash; import bisq.common.data.ByteArray; diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/VariableSizeHashing.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/VariableSizeHashing.java index ba73562497..ad37fd3fc9 100755 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/VariableSizeHashing.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/VariableSizeHashing.java @@ -1,5 +1,21 @@ -package bisq.desktop.components.robohash; +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ +package bisq.desktop.components.robohash; import java.math.BigInteger; import java.util.UUID; From 0e763d06d966b40d5bc7707dc4cb24c57ca25741 Mon Sep 17 00:00:00 2001 From: axpoems <145597137+axpoems@users.noreply.github.com> Date: Tue, 27 Feb 2024 20:37:39 +0100 Subject: [PATCH 05/28] Refactor: rename robohash to cathash --- .../main/java/bisq/desktop/common/utils/ImageUtil.java | 1 - .../{robohash/RoboHash.java => cathash/CatHash.java} | 6 +++--- .../{robohash => cathash}/Configuration.java | 2 +- .../components/{robohash => cathash}/Handle.java | 2 +- .../{robohash => cathash}/HandleFactory.java | 2 +- .../{robohash => cathash}/VariableSizeHashing.java | 2 +- .../select_offer/TradeWizardSelectOfferView.java | 4 ++-- .../desktop/main/content/chat/BaseChatController.java | 10 +++++----- .../chat/sidebar/ChannelSidebarUserProfile.java | 4 ++-- .../main/content/chat/sidebar/UserProfileSidebar.java | 4 ++-- .../desktop/main/content/components/CitationBlock.java | 5 ++--- .../main/content/components/UserProfileIcon.java | 4 ++-- .../main/content/components/UserProfileSelection.java | 8 ++++---- .../user/user_profile/UserProfileController.java | 4 ++-- .../create/step2/CreateNewProfileStep2Controller.java | 4 ++-- .../create_profile/CreateProfileController.java | 4 ++-- 16 files changed, 32 insertions(+), 34 deletions(-) rename apps/desktop/desktop/src/main/java/bisq/desktop/components/{robohash/RoboHash.java => cathash/CatHash.java} (93%) mode change 100755 => 100644 rename apps/desktop/desktop/src/main/java/bisq/desktop/components/{robohash => cathash}/Configuration.java (98%) mode change 100755 => 100644 rename apps/desktop/desktop/src/main/java/bisq/desktop/components/{robohash => cathash}/Handle.java (96%) mode change 100755 => 100644 rename apps/desktop/desktop/src/main/java/bisq/desktop/components/{robohash => cathash}/HandleFactory.java (98%) mode change 100755 => 100644 rename apps/desktop/desktop/src/main/java/bisq/desktop/components/{robohash => cathash}/VariableSizeHashing.java (98%) mode change 100755 => 100644 diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/common/utils/ImageUtil.java b/apps/desktop/desktop/src/main/java/bisq/desktop/common/utils/ImageUtil.java index d615f8839e..704f056cd8 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/common/utils/ImageUtil.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/common/utils/ImageUtil.java @@ -103,7 +103,6 @@ public static Image composeImage(String[] paths, int width, int height) { graphicsContext2D.clip(); for (String path : paths) { -// graphicsContext2D.drawImage(new Image("images/robohash/" + path), 0, 0, width, height); graphicsContext2D.drawImage(new Image("images/cathash/" + path), 0, 0, width, height); } SnapshotParameters snapshotParameters = new SnapshotParameters(); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/RoboHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java old mode 100755 new mode 100644 similarity index 93% rename from apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/RoboHash.java rename to apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index 396ee89bcd..41513e253e --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/RoboHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.desktop.components.robohash; +package bisq.desktop.components.cathash; import bisq.common.data.ByteArray; import bisq.desktop.common.utils.ImageUtil; @@ -28,7 +28,7 @@ // Derived from https://github.com/neuhalje/android-robohash // Number of combinations: 3 * 15 * 15 * 15 * 15 * 15 * 15 = 34171875 (2 ^ 25) @Slf4j -public class RoboHash { +public class CatHash { private static final int MAX_CACHE_SIZE = 10000; private static final HandleFactory HANDLE_FACTORY = new HandleFactory(); private static final ConcurrentHashMap CACHE = new ConcurrentHashMap<>(); @@ -61,7 +61,7 @@ private static Image imageForHandle(Handle handle, Configuration configuration) long ts = System.currentTimeMillis(); byte[] bucketValues = handle.bucketValues(); String[] paths = configuration.convertToFacetParts(bucketValues); - log.debug("Generated paths for RoboHash image in {} ms", System.currentTimeMillis() - ts); // typically <1ms + log.debug("Generated paths for CatHash image in {} ms", System.currentTimeMillis() - ts); // typically <1ms return ImageUtil.composeImage(paths, configuration.width(), configuration.height()); } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java old mode 100755 new mode 100644 similarity index 98% rename from apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java rename to apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index 40cb6e67c8..f39d4bd72b --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.desktop.components.robohash; +package bisq.desktop.components.cathash; import lombok.extern.slf4j.Slf4j; diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Handle.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java old mode 100755 new mode 100644 similarity index 96% rename from apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Handle.java rename to apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java index 9689e8e0a3..7c057457b4 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/Handle.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.desktop.components.robohash; +package bisq.desktop.components.cathash; public final class Handle { private final long value; diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java old mode 100755 new mode 100644 similarity index 98% rename from apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java rename to apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java index 5ad0f90d5b..ebc868a858 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/HandleFactory.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.desktop.components.robohash; +package bisq.desktop.components.cathash; import lombok.extern.slf4j.Slf4j; diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/VariableSizeHashing.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java old mode 100755 new mode 100644 similarity index 98% rename from apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/VariableSizeHashing.java rename to apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java index ad37fd3fc9..e117b036b9 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/robohash/VariableSizeHashing.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.desktop.components.robohash; +package bisq.desktop.components.cathash; import java.math.BigInteger; import java.util.UUID; diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/trade_wizard/select_offer/TradeWizardSelectOfferView.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/trade_wizard/select_offer/TradeWizardSelectOfferView.java index b087f66933..424faf4e9a 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/trade_wizard/select_offer/TradeWizardSelectOfferView.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/trade_wizard/select_offer/TradeWizardSelectOfferView.java @@ -24,7 +24,7 @@ import bisq.desktop.common.utils.ImageUtil; import bisq.desktop.common.view.View; import bisq.desktop.components.containers.Spacer; -import bisq.desktop.components.robohash.RoboHash; +import bisq.desktop.components.cathash.CatHash; import bisq.desktop.components.table.BisqTableColumn; import bisq.desktop.components.table.BisqTableView; import bisq.desktop.main.content.components.ReputationScoreDisplay; @@ -249,7 +249,7 @@ public void updateItem(final ListItem item, boolean empty) { if (item != null && !empty) { userName.setText(item.getMakerUserName()); item.getAuthorUserProfile().ifPresent(userProfile -> - roboIcon.setImage(RoboHash.getImage(userProfile.getPubKeyHash()))); + roboIcon.setImage(CatHash.getImage(userProfile.getPubKeyHash()))); setGraphic(hBox); } else { setGraphic(null); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/BaseChatController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/BaseChatController.java index f87972a6f2..21d5694cc8 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/BaseChatController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/BaseChatController.java @@ -31,7 +31,7 @@ import bisq.desktop.common.view.Navigation; import bisq.desktop.common.view.NavigationController; import bisq.desktop.components.controls.BisqIconButton; -import bisq.desktop.components.robohash.RoboHash; +import bisq.desktop.components.cathash.CatHash; import bisq.desktop.main.content.chat.sidebar.ChannelSidebar; import bisq.desktop.main.content.chat.sidebar.UserProfileSidebar; import bisq.desktop.main.content.components.chatMessages.ChatMessagesComponent; @@ -147,7 +147,7 @@ protected void selectedChannelChanged(@Nullable ChatChannel privateChatChannel) { if (privateChatChannel instanceof TwoPartyPrivateChatChannel) { TwoPartyPrivateChatChannel twoPartyPrivateChatChannel = (TwoPartyPrivateChatChannel) privateChatChannel; - Image image = RoboHash.getImage(twoPartyPrivateChatChannel.getPeer().getPubKeyHash()); + Image image = CatHash.getImage(twoPartyPrivateChatChannel.getPeer().getPubKeyHash()); ImageView imageView = new ImageView(image); imageView.setFitWidth(35); imageView.setFitHeight(35); @@ -167,13 +167,13 @@ protected void applyPeersIcon(PrivateChatChannel privateChatChannel) { left = bisqEasyOpenTradeChannel.getPeer(); right = bisqEasyOpenTradeChannel.getMediator().get(); } - ImageView leftImageView = new ImageView(RoboHash.getImage(left.getPubKeyHash())); + ImageView leftImageView = new ImageView(CatHash.getImage(left.getPubKeyHash())); leftImageView.setFitWidth(35); leftImageView.setFitHeight(35); Button leftIconButton = BisqIconButton.createIconButton(leftImageView); leftIconButton.setMouseTransparent(true); - ImageView rightImageView = new ImageView(RoboHash.getImage(right.getPubKeyHash())); + ImageView rightImageView = new ImageView(CatHash.getImage(right.getPubKeyHash())); rightImageView.setFitWidth(35); rightImageView.setFitHeight(35); Button rightIconButton = BisqIconButton.createIconButton(rightImageView); @@ -184,7 +184,7 @@ protected void applyPeersIcon(PrivateChatChannel privateChatChannel) { hBox.setAlignment(Pos.CENTER_LEFT); model.getChannelIconNode().set(hBox); } else { - Image image = RoboHash.getImage(bisqEasyOpenTradeChannel.getPeer().getPubKeyHash()); + Image image = CatHash.getImage(bisqEasyOpenTradeChannel.getPeer().getPubKeyHash()); ImageView imageView = new ImageView(image); imageView.setFitWidth(35); imageView.setFitHeight(35); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/ChannelSidebarUserProfile.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/ChannelSidebarUserProfile.java index 35914670b1..d468940888 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/ChannelSidebarUserProfile.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/ChannelSidebarUserProfile.java @@ -18,7 +18,7 @@ package bisq.desktop.main.content.chat.sidebar; import bisq.desktop.components.controls.BisqTooltip; -import bisq.desktop.components.robohash.RoboHash; +import bisq.desktop.components.cathash.CatHash; import bisq.i18n.Res; import bisq.user.banned.BannedUserService; import bisq.user.profile.UserProfile; @@ -93,7 +93,7 @@ public void onActivate() { String userName = userProfile.getUserName(); model.userName.set(isUserProfileBanned() ? Res.get("user.userProfile.userName.banned", userName) : userName); - model.roboHashImage.set(RoboHash.getImage(userProfile.getPubKeyHash())); + model.roboHashImage.set(CatHash.getImage(userProfile.getPubKeyHash())); } @Override diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/UserProfileSidebar.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/UserProfileSidebar.java index 2f7c262f54..01dccc7e35 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/UserProfileSidebar.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/UserProfileSidebar.java @@ -29,7 +29,7 @@ import bisq.desktop.components.containers.Spacer; import bisq.desktop.components.controls.BisqIconButton; import bisq.desktop.components.controls.BisqTooltip; -import bisq.desktop.components.robohash.RoboHash; +import bisq.desktop.components.cathash.CatHash; import bisq.desktop.main.content.components.ReportToModeratorWindow; import bisq.desktop.main.content.components.ReputationScoreDisplay; import bisq.i18n.Res; @@ -129,7 +129,7 @@ public void onActivate() { model.nickName.set(isUserProfileBanned() ? Res.get("user.userProfile.userName.banned", nickName) : nickName); model.nym.set(Res.get("chat.sideBar.userProfile.nym", userProfile.getNym())); model.userProfileIdString.set(Res.get("chat.sideBar.userProfile.id", userProfile.getId())); - model.roboHashNode.set(RoboHash.getImage(userProfile.getPubKeyHash())); + model.roboHashNode.set(CatHash.getImage(userProfile.getPubKeyHash())); model.addressByTransport.set(userProfile.getAddressByTransportDisplayString(26)); model.addressByTransportTooltip.set(userProfile.getAddressByTransportDisplayString()); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/CitationBlock.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/CitationBlock.java index 40c5cac5d7..9a620bbfcb 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/CitationBlock.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/CitationBlock.java @@ -23,7 +23,7 @@ import bisq.desktop.ServiceProvider; import bisq.desktop.components.containers.Spacer; import bisq.desktop.components.controls.BisqIconButton; -import bisq.desktop.components.robohash.RoboHash; +import bisq.desktop.components.cathash.CatHash; import bisq.i18n.Res; import bisq.user.profile.UserProfile; import bisq.user.profile.UserProfileService; @@ -37,7 +37,6 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; -import javafx.scene.text.Text; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.fxmisc.easybind.EasyBind; @@ -93,7 +92,7 @@ private void reply(ChatMessage chatMessage) { userProfileService.findUserProfile(chatMessage.getAuthorUserProfileId()).ifPresent(author -> { model.author = author; model.userName.set(author.getUserName()); - model.roboHashNode.set(RoboHash.getImage(author.getPubKeyHash())); + model.roboHashNode.set(CatHash.getImage(author.getPubKeyHash())); model.citation.set(chatMessage.getText()); model.visible.set(true); }); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileIcon.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileIcon.java index 9fb1c46280..a2e95c8190 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileIcon.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileIcon.java @@ -18,7 +18,7 @@ package bisq.desktop.main.content.components; import bisq.desktop.components.controls.BisqTooltip; -import bisq.desktop.components.robohash.RoboHash; +import bisq.desktop.components.cathash.CatHash; import bisq.user.profile.UserProfile; import javafx.scene.control.Tooltip; import javafx.scene.image.ImageView; @@ -45,7 +45,7 @@ public void setUserProfile(@Nullable UserProfile userProfile) { tooltip = new BisqTooltip(userProfile.getTooltipString()); tooltip.getStyleClass().add("medium-dark-tooltip"); Tooltip.install(this, tooltip); - setImage(RoboHash.getImage(userProfile.getPubKeyHash())); + setImage(CatHash.getImage(userProfile.getPubKeyHash())); } else { setImage(null); if (tooltip != null) { diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileSelection.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileSelection.java index a98654ec9a..5cda57dade 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileSelection.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileSelection.java @@ -31,7 +31,7 @@ import bisq.desktop.common.view.Navigation; import bisq.desktop.components.controls.AutoCompleteComboBox; import bisq.desktop.components.overlay.Popup; -import bisq.desktop.components.robohash.RoboHash; +import bisq.desktop.components.cathash.CatHash; import bisq.i18n.Res; import bisq.user.identity.UserIdentity; import bisq.user.identity.UserIdentityService; @@ -267,7 +267,7 @@ protected void onViewAttached() { if (userIdentity != null) { userName.setText(comboBox.getConverter().toString(selected)); - icon.setImage(RoboHash.getImage(userIdentity.getPubKeyHash())); + icon.setImage(CatHash.getImage(userIdentity.getPubKeyHash())); } } }); @@ -373,7 +373,7 @@ protected void updateItem(ListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - imageView.setImage(RoboHash.getImage(item.userIdentity.getPubKeyHash())); + imageView.setImage(CatHash.getImage(item.userIdentity.getPubKeyHash())); label.setText(item.userIdentity.getUserName()); labelWidthListener = (observable, oldValue, newValue) -> { @@ -463,7 +463,7 @@ public UserProfileSkin(ComboBox control, String description, String pr if (newValue != null) { UserIdentity userIdentity = newValue.userIdentity; if (userIdentity != null) { - imageView.setImage(RoboHash.getImage(userIdentity.getPubKeyHash())); + imageView.setImage(CatHash.getImage(userIdentity.getPubKeyHash())); label.setText(control.getConverter().toString(newValue)); buttonPane.layout(); } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/UserProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/UserProfileController.java index c66d9ed915..2771fedbe9 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/UserProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/UserProfileController.java @@ -26,7 +26,7 @@ import bisq.desktop.common.view.Controller; import bisq.desktop.common.view.Navigation; import bisq.desktop.components.overlay.Popup; -import bisq.desktop.components.robohash.RoboHash; +import bisq.desktop.components.cathash.CatHash; import bisq.i18n.Res; import bisq.network.p2p.services.data.BroadcastResult; import bisq.presentation.formatters.TimeFormatter; @@ -82,7 +82,7 @@ public void onActivate() { model.getNickName().set(userProfile.getNickName()); model.getNymId().set(userProfile.getNym()); model.getProfileId().set(userProfile.getId()); - model.getRoboHash().set(RoboHash.getImage(userProfile.getPubKeyHash())); + model.getRoboHash().set(CatHash.getImage(userProfile.getPubKeyHash())); model.getStatement().set(userProfile.getStatement()); model.getTerms().set(userProfile.getTerms()); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java index 290e950d81..165455bea2 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java @@ -21,7 +21,7 @@ import bisq.desktop.common.threading.UIThread; import bisq.desktop.common.view.InitWithDataController; import bisq.desktop.components.overlay.Popup; -import bisq.desktop.components.robohash.RoboHash; +import bisq.desktop.components.cathash.CatHash; import bisq.desktop.overlay.OverlayController; import bisq.i18n.Res; import bisq.security.pow.ProofOfWork; @@ -90,7 +90,7 @@ public void initWithData(InitData data) { model.setProofOfWork(data.getProofOfWork()); model.getNickName().set(data.getNickName()); model.getNym().set(data.getNym()); - model.getRoboHashImage().set(RoboHash.getImage(data.getPubKeyHash())); + model.getRoboHashImage().set(CatHash.getImage(data.getPubKeyHash())); } @Override diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java index c80a017620..29b91ccd3e 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java @@ -23,7 +23,7 @@ import bisq.desktop.common.view.Controller; import bisq.desktop.common.view.Navigation; import bisq.desktop.components.overlay.Popup; -import bisq.desktop.components.robohash.RoboHash; +import bisq.desktop.components.cathash.CatHash; import bisq.desktop.overlay.OverlayController; import bisq.i18n.Res; import bisq.identity.IdentityService; @@ -198,7 +198,7 @@ private void setPreGenerateState() { private void applyIdentityData(byte[] pubKeyHash, String nym) { model.getNym().set(nym); - model.getRoboHashImage().set(RoboHash.getImage(pubKeyHash)); + model.getRoboHashImage().set(CatHash.getImage(pubKeyHash)); model.getPowProgress().set(0); model.getRoboHashIconVisible().set(true); model.getReGenerateButtonDisabled().set(false); From 383c3e5950bb77af11998c74b37ddbab92935c62 Mon Sep 17 00:00:00 2001 From: axpoems <145597137+axpoems@users.noreply.github.com> Date: Tue, 27 Feb 2024 21:20:00 +0100 Subject: [PATCH 06/28] Add comments to understand better how the handle is encoded --- .../components/cathash/Configuration.java | 5 +-- .../components/cathash/HandleFactory.java | 32 ++++++++++++++++++- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index f39d4bd72b..88d9c8730d 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -57,10 +57,11 @@ public class Configuration { } public String[] convertToFacetParts(byte[] bucketValues) { - if (bucketValues.length != BUCKET_COUNT) throw new IllegalArgumentException(); + if (bucketValues.length != BUCKET_COUNT) { + throw new IllegalArgumentException(); + } String[] paths = new String[FACET_COUNT]; - for (int facet = 0; facet < FACET_COUNT; facet++) { int bucketValue = bucketValues[facet]; paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], bucketValue); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java index ebc868a858..fcb19fa693 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java @@ -26,17 +26,47 @@ public Handle calculateHandle(byte[] data) { return new Handle(calculateHandleValue(data)); } + /** + * Encodes an array of bytes (data) into a single long value, which serves as a compact, unique identifier + * (or "handle") for a set of values. Each byte in the array represents a "nibble" (a 4-bit value), and the function + * ensures that these values, along with the length of the data, are packed into the returned long. + * + * @param data The distributed hash over the buckets + * @return val The composite handle value, which encodes both the sequence of nibbles and the length of the data array + */ static long calculateHandleValue(byte[] data) { - if (data.length > 14) throw new IllegalArgumentException(); + // Check if the input array exceeds the maximum length of 14 bytes. + // This limit ensures that the data can be encoded into a 64-bit long value without overflow. + // Since 8 bits are reserved for length encoding only 56 bits can be used (14 * 4) + // This means that the maximum number of buckets that we can have is 14 + if (data.length > 14) { + throw new IllegalArgumentException(); + } + long val = 0; for (int i = 0; i < data.length; i++) { int nibble = data[i]; + + // Validate that the current nibble does not exceed the maximum value of 15 (0xF), ensuring it's a + // valid 4-bit value. + // Each nibble uses 4 bits, therefore we can only encode 2^4 (0..15) possibilities + // (i.e. max size per bucket is 15, which represent 16 images) if (nibble > 15) { // 0xf throw new IllegalArgumentException(String.format("nibble to large @%d: %02X", i, nibble)); } + + // Shift the current handle value 4 bits to the left to make room for the new nibble. This operation + // progressively builds up the handle value from its constituent nibbles. val <<= 4; + + // Incorporate the current nibble into the lowest 4 bits of the handle value. val |= nibble; } + + // After processing all nibbles, encode the length of the data array into the handle value. + // This is achieved by shifting the length leftward by (14 * 4) bits (56 bits), which positions the length + // information in the upper 8 bits of the 64-bit long value. This ensures the length can be retrieved from the + // handle and also contributes to the uniqueness of the handle. val |= ((long) data.length) << (14 * 4); return val; } From 931c17a8fc7d185e23ada95638240a15530d81c6 Mon Sep 17 00:00:00 2001 From: axpoems <145597137+axpoems@users.noreply.github.com> Date: Tue, 27 Feb 2024 21:33:29 +0100 Subject: [PATCH 07/28] Prepare cathash image set * Remove prefix in file names and leave only number. * Remove duplicated empty images. * Delete a selection of 16 background1. --- .../components/cathash/Configuration.java | 26 +++++++++--------- .../cathash/bg0/{bg0_000.png => 00.png} | Bin .../cathash/bg0/{bg0_001.png => 01.png} | Bin .../cathash/bg0/{bg0_002.png => 02.png} | Bin .../cathash/bg0/{bg0_003.png => 03.png} | Bin .../cathash/bg0/{bg0_004.png => 04.png} | Bin .../cathash/bg0/{bg0_005.png => 05.png} | Bin .../cathash/bg0/{bg0_006.png => 06.png} | Bin .../cathash/bg0/{bg0_007.png => 07.png} | Bin .../cathash/bg0/{bg0_008.png => 08.png} | Bin .../cathash/bg0/{bg0_009.png => 09.png} | Bin .../cathash/bg0/{bg0_010.png => 10.png} | Bin .../cathash/bg0/{bg0_011.png => 11.png} | Bin .../cathash/bg0/{bg0_012.png => 12.png} | Bin .../cathash/bg0/{bg0_013.png => 13.png} | Bin .../cathash/bg0/{bg0_014.png => 14.png} | Bin .../cathash/bg0/{bg0_015.png => 15.png} | Bin .../cathash/bg1/{bg1_030.png => 00.png} | Bin .../cathash/bg1/{bg1_001.png => 01.png} | Bin .../cathash/bg1/{bg1_003.png => 02.png} | Bin .../cathash/bg1/{bg1_014.png => 03.png} | Bin .../cathash/bg1/{bg1_005.png => 04.png} | Bin .../cathash/bg1/{bg1_007.png => 05.png} | Bin .../cathash/bg1/{bg1_009.png => 06.png} | Bin .../cathash/bg1/{bg1_011.png => 07.png} | Bin .../cathash/bg1/{bg1_013.png => 08.png} | Bin .../cathash/bg1/{bg1_029.png => 09.png} | Bin .../cathash/bg1/{bg1_018.png => 10.png} | Bin .../cathash/bg1/{bg1_019.png => 11.png} | Bin .../cathash/bg1/{bg1_022.png => 12.png} | Bin .../cathash/bg1/{bg1_024.png => 13.png} | Bin .../cathash/bg1/{bg1_026.png => 14.png} | Bin .../cathash/bg1/{bg1_028.png => 15.png} | Bin .../resources/images/cathash/bg1/bg1_000.png | Bin 7343 -> 0 bytes .../resources/images/cathash/bg1/bg1_002.png | Bin 5764 -> 0 bytes .../resources/images/cathash/bg1/bg1_004.png | Bin 5439 -> 0 bytes .../resources/images/cathash/bg1/bg1_006.png | Bin 4932 -> 0 bytes .../resources/images/cathash/bg1/bg1_008.png | Bin 4749 -> 0 bytes .../resources/images/cathash/bg1/bg1_010.png | Bin 3568 -> 0 bytes .../resources/images/cathash/bg1/bg1_012.png | Bin 5506 -> 0 bytes .../resources/images/cathash/bg1/bg1_015.png | Bin 5477 -> 0 bytes .../resources/images/cathash/bg1/bg1_016.png | Bin 5638 -> 0 bytes .../resources/images/cathash/bg1/bg1_017.png | Bin 6877 -> 0 bytes .../resources/images/cathash/bg1/bg1_020.png | Bin 5778 -> 0 bytes .../resources/images/cathash/bg1/bg1_021.png | Bin 3911 -> 0 bytes .../resources/images/cathash/bg1/bg1_023.png | Bin 4819 -> 0 bytes .../resources/images/cathash/bg1/bg1_025.png | Bin 3515 -> 0 bytes .../resources/images/cathash/bg1/bg1_027.png | Bin 5402 -> 0 bytes .../resources/images/cathash/bg1/bg1_031.png | Bin 5216 -> 0 bytes .../cathash/ears0/{ears0_000.png => 00.png} | Bin .../cathash/ears0/{ears0_001.png => 01.png} | Bin .../cathash/ears0/{ears0_002.png => 02.png} | Bin .../cathash/ears0/{ears0_003.png => 03.png} | Bin .../cathash/ears0/{ears0_004.png => 04.png} | Bin .../cathash/ears0/{ears0_005.png => 05.png} | Bin .../cathash/ears0/{ears0_006.png => 06.png} | Bin .../cathash/ears0/{ears0_007.png => 07.png} | Bin .../cathash/ears0/{ears0_008.png => 08.png} | Bin .../cathash/ears0/{ears0_009.png => 09.png} | Bin .../cathash/ears0/{ears0_010.png => 10.png} | Bin .../cathash/ears0/{ears0_011.png => 11.png} | Bin .../cathash/ears0/{ears0_012.png => 12.png} | Bin .../cathash/ears0/{ears0_013.png => 13.png} | Bin .../cathash/ears0/{ears0_014.png => 14.png} | Bin .../cathash/ears0/{ears0_015.png => 15.png} | Bin .../cathash/ears1/{ears1_000.png => 00.png} | Bin .../cathash/ears1/{ears1_001.png => 01.png} | Bin .../cathash/ears1/{ears1_002.png => 02.png} | Bin .../cathash/eyes0/{eyes0_000.png => 00.png} | Bin .../cathash/eyes0/{eyes0_001.png => 01.png} | Bin .../cathash/eyes0/{eyes0_002.png => 02.png} | Bin .../cathash/eyes0/{eyes0_003.png => 03.png} | Bin .../cathash/eyes0/{eyes0_004.png => 04.png} | Bin .../cathash/eyes0/{eyes0_005.png => 05.png} | Bin .../cathash/eyes0/{eyes0_006.png => 06.png} | Bin .../cathash/eyes0/{eyes0_007.png => 07.png} | Bin .../cathash/eyes0/{eyes0_008.png => 08.png} | Bin .../cathash/eyes0/{eyes0_009.png => 09.png} | Bin .../cathash/eyes0/{eyes0_010.png => 10.png} | Bin .../cathash/eyes0/{eyes0_011.png => 11.png} | Bin .../cathash/eyes0/{eyes0_012.png => 12.png} | Bin .../cathash/eyes0/{eyes0_013.png => 13.png} | Bin .../cathash/eyes0/{eyes0_014.png => 14.png} | Bin .../cathash/eyes0/{eyes0_015.png => 15.png} | Bin .../cathash/face0/{face0_000.png => 00.png} | Bin .../cathash/face0/{face0_001.png => 01.png} | Bin .../cathash/face0/{face0_002.png => 02.png} | Bin .../cathash/face0/{face0_003.png => 03.png} | Bin .../cathash/face0/{face0_004.png => 04.png} | Bin .../cathash/face0/{face0_005.png => 05.png} | Bin .../cathash/face0/{face0_006.png => 06.png} | Bin .../cathash/face0/{face0_007.png => 07.png} | Bin .../cathash/face0/{face0_008.png => 08.png} | Bin .../cathash/face0/{face0_009.png => 09.png} | Bin .../cathash/face0/{face0_010.png => 10.png} | Bin .../cathash/face0/{face0_011.png => 11.png} | Bin .../cathash/face0/{face0_012.png => 12.png} | Bin .../cathash/face0/{face0_013.png => 13.png} | Bin .../cathash/face0/{face0_014.png => 14.png} | Bin .../cathash/face0/{face0_015.png => 15.png} | Bin .../cathash/face1/{face1_000.png => 00.png} | Bin .../cathash/face1/{face1_001.png => 01.png} | Bin .../cathash/face1/{face1_002.png => 02.png} | Bin .../cathash/face1/{face1_003.png => 03.png} | Bin .../cathash/face1/{face1_004.png => 04.png} | Bin .../cathash/face1/{face1_009.png => 05.png} | Bin .../cathash/face1/{face1_010.png => 06.png} | Bin .../cathash/face1/{face1_011.png => 07.png} | Bin .../cathash/face1/{face1_012.png => 08.png} | Bin .../images/cathash/face1/face1_006.png | Bin 2292 -> 0 bytes .../images/cathash/face1/face1_007.png | Bin 2292 -> 0 bytes .../images/cathash/face1/face1_008.png | Bin 2292 -> 0 bytes .../images/cathash/face1/face1_013.png | Bin 2292 -> 0 bytes .../images/cathash/face1/face1_014.png | Bin 2292 -> 0 bytes .../images/cathash/face1/face1_015.png | Bin 2292 -> 0 bytes .../cathash/nose0/{nose0_000.png => 00.png} | Bin .../cathash/nose0/{nose0_001.png => 01.png} | Bin .../cathash/nose0/{nose0_002.png => 02.png} | Bin .../cathash/nose0/{nose0_003.png => 03.png} | Bin .../cathash/nose0/{nose0_004.png => 04.png} | Bin .../cathash/nose0/{nose0_005.png => 05.png} | Bin .../whiskers0/{whiskers0_000.png => 00.png} | Bin .../{face1/face1_005.png => whiskers0/01.png} | Bin .../whiskers0/{whiskers0_002.png => 02.png} | Bin .../whiskers0/{whiskers0_003.png => 03.png} | Bin .../whiskers0/{whiskers0_004.png => 04.png} | Bin .../whiskers0/{whiskers0_005.png => 05.png} | Bin .../whiskers0/{whiskers0_007.png => 06.png} | Bin .../cathash/whiskers0/whiskers0_001.png | Bin 2292 -> 0 bytes .../cathash/whiskers0/whiskers0_006.png | Bin 2292 -> 0 bytes 130 files changed, 13 insertions(+), 13 deletions(-) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_000.png => 00.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_001.png => 01.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_002.png => 02.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_003.png => 03.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_004.png => 04.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_005.png => 05.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_006.png => 06.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_007.png => 07.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_008.png => 08.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_009.png => 09.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_010.png => 10.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_011.png => 11.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_012.png => 12.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_013.png => 13.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_014.png => 14.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg0/{bg0_015.png => 15.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_030.png => 00.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_001.png => 01.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_003.png => 02.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_014.png => 03.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_005.png => 04.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_007.png => 05.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_009.png => 06.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_011.png => 07.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_013.png => 08.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_029.png => 09.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_018.png => 10.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_019.png => 11.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_022.png => 12.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_024.png => 13.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_026.png => 14.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/bg1/{bg1_028.png => 15.png} (100%) delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_000.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_002.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_004.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_006.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_008.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_010.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_012.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_015.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_016.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_017.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_020.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_021.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_023.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_025.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_027.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_031.png rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_000.png => 00.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_001.png => 01.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_002.png => 02.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_003.png => 03.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_004.png => 04.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_005.png => 05.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_006.png => 06.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_007.png => 07.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_008.png => 08.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_009.png => 09.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_010.png => 10.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_011.png => 11.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_012.png => 12.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_013.png => 13.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_014.png => 14.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears0/{ears0_015.png => 15.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears1/{ears1_000.png => 00.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears1/{ears1_001.png => 01.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/ears1/{ears1_002.png => 02.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_000.png => 00.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_001.png => 01.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_002.png => 02.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_003.png => 03.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_004.png => 04.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_005.png => 05.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_006.png => 06.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_007.png => 07.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_008.png => 08.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_009.png => 09.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_010.png => 10.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_011.png => 11.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_012.png => 12.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_013.png => 13.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_014.png => 14.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/eyes0/{eyes0_015.png => 15.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_000.png => 00.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_001.png => 01.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_002.png => 02.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_003.png => 03.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_004.png => 04.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_005.png => 05.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_006.png => 06.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_007.png => 07.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_008.png => 08.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_009.png => 09.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_010.png => 10.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_011.png => 11.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_012.png => 12.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_013.png => 13.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_014.png => 14.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face0/{face0_015.png => 15.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face1/{face1_000.png => 00.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face1/{face1_001.png => 01.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face1/{face1_002.png => 02.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face1/{face1_003.png => 03.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face1/{face1_004.png => 04.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face1/{face1_009.png => 05.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face1/{face1_010.png => 06.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face1/{face1_011.png => 07.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/face1/{face1_012.png => 08.png} (100%) delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_006.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_007.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_008.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_013.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_014.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_015.png rename apps/desktop/desktop/src/main/resources/images/cathash/nose0/{nose0_000.png => 00.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/nose0/{nose0_001.png => 01.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/nose0/{nose0_002.png => 02.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/nose0/{nose0_003.png => 03.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/nose0/{nose0_004.png => 04.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/nose0/{nose0_005.png => 05.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/{whiskers0_000.png => 00.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/{face1/face1_005.png => whiskers0/01.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/{whiskers0_002.png => 02.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/{whiskers0_003.png => 03.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/{whiskers0_004.png => 04.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/{whiskers0_005.png => 05.png} (100%) rename apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/{whiskers0_007.png => 06.png} (100%) delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_001.png delete mode 100644 apps/desktop/desktop/src/main/resources/images/cathash/whiskers0/whiskers0_006.png diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index 88d9c8730d..44b37be2de 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -24,14 +24,14 @@ public class Configuration { private final static String ROOT = ""; private static final int BG0_COUNT = 15; - private static final int BG1_COUNT = 31; + private static final int BG1_COUNT = 15; private static final int EARS0_COUNT = 15; private static final int EARS1_COUNT = 2; private static final int FACE0_COUNT = 15; - private static final int FACE1_COUNT = 15; + private static final int FACE1_COUNT = 8; private static final int EYES0_COUNT = 15; private static final int NOSE0_COUNT = 5; - private static final int WHISKERS0_COUNT = 7; + private static final int WHISKERS0_COUNT = 6; private final static int BUCKET_COUNT = 9; private final static int FACET_COUNT = 9; @@ -44,15 +44,15 @@ public class Configuration { static { String postFix = ".png"; FACET_PATH_TEMPLATES = new String[]{ - ROOT + "bg0/bg0_#ITEM#" + postFix, - ROOT + "bg1/bg1_#ITEM#" + postFix, - ROOT + "ears0/ears0_#ITEM#" + postFix, - ROOT + "ears1/ears1_#ITEM#" + postFix, - ROOT + "face0/face0_#ITEM#" + postFix, - ROOT + "face1/face1_#ITEM#" + postFix, - ROOT + "eyes0/eyes0_#ITEM#" + postFix, - ROOT + "nose0/nose0_#ITEM#" + postFix, - ROOT + "whiskers0/whiskers0_#ITEM#" + postFix, + ROOT + "bg0/#ITEM#" + postFix, + ROOT + "bg1/#ITEM#" + postFix, + ROOT + "ears0/#ITEM#" + postFix, + ROOT + "ears1/#ITEM#" + postFix, + ROOT + "face0/#ITEM#" + postFix, + ROOT + "face1/#ITEM#" + postFix, + ROOT + "eyes0/#ITEM#" + postFix, + ROOT + "nose0/#ITEM#" + postFix, + ROOT + "whiskers0/#ITEM#" + postFix, }; } @@ -70,7 +70,7 @@ public String[] convertToFacetParts(byte[] bucketValues) { } private String generatePath(String facetPathTemplate, int bucketValue) { - return facetPathTemplate.replaceAll("#ITEM#", String.format("%03d", bucketValue)); + return facetPathTemplate.replaceAll("#ITEM#", String.format("%02d", bucketValue)); } public byte[] getBucketSizes() { diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/00.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_000.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/00.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_001.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/01.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_001.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/01.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/02.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_002.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/02.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/03.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_003.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/03.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_004.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/04.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_004.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/04.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/05.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_005.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/05.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_006.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/06.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_006.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/06.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_007.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/07.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_007.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/07.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_008.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/08.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_008.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/08.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_009.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/09.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_009.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/09.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_010.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/10.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_010.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/10.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_011.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/11.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_011.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/11.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_012.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/12.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_012.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/12.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_013.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/13.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_013.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/13.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_014.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/14.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_014.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/14.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_015.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg0/15.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg0/bg0_015.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg0/15.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_030.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/00.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_030.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/00.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_001.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/01.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_001.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/01.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/02.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_003.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/02.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_014.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/03.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_014.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/03.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/04.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_005.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/04.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_007.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/05.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_007.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/05.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_009.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/06.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_009.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/06.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_011.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/07.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_011.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/07.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_013.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/08.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_013.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/08.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_029.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/09.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_029.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/09.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_018.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/10.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_018.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/10.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_019.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/11.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_019.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/11.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_022.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/12.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_022.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/12.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_024.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/13.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_024.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/13.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_026.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/14.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_026.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/14.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_028.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/15.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_028.png rename to apps/desktop/desktop/src/main/resources/images/cathash/bg1/15.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_000.png deleted file mode 100644 index 90b61d3bf9c6459030e755178ea014b2d3748f3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7343 zcmch6i8s{m+y9u9QOFXqgqR__l4K|A*mq+$vV;#3V#ttYNM*^IJsQ~tV;TF_lw?bm zq4*#&)Ql}m*7UqP&+qyE{(X>Q1Rmj5gW1Y(67 z=~;t73^ISekTbvtDkdcy_+bpa1-FF&p9c`H#~_fP4_r^jHqvdqkhz1qugyT8!`I3x zL|ackIdlo%);3)n7dtFo%{G{SahDhnXg`CNxelE81=m@*%CMxRiOaAQ$vIC8V zx819)b&KFQ4Q7wihA~draY`U>fxzso5M&6aHV8~+*G7Q7}VHmxdt_%nQjh9pj@x$k6c0}_nkPkv%Glf|MpOP*wiMrl&)yS{y<#AWS z_S5)dt9*T*q=Oxd-b#;^sz@Ax-@Jj5a_shM{Y>CAlcS?k4R>m13TC}RGu6bidlz@z z0EAS^{&d&RS49>+xR)0t-RT$~atihX!&FzdiM zU7x2mes2v@-MeON-E9>FM|HIKvOAw2n1HHNRX@OPJ60MXPE&MCx9g%?0(QKG%UHld z;W3gS2i?3dMFvck3PX@vX~WBA|BmLkyO70WM)U8ZOieK(U9}I&A*8`~n#bc2`FTCM z`NByhlRCXN& zkud)|dfqB?l_Pr2>H?5=FSwxVI%;Dh9RBv(vid za}L=@LDk-19y<4Rt}f6fo?6-P0Nh_|D*P=% z_w`D*2iY?j0fK`ohN@Zi8k%Xr=;1T-Nhsf{`KPC&tbYh?IG2rp{+u!%ia5A46kxCM zGMQfG3h8*zH#sWt4Iqjb{?{n8bD~Jrr ziaq_Wv%yV0BtX>O9qm`LJ-0u-lHCZP45S8E9C2W8 zqxIN~b8H>jbxhbc{aIc1{xe|hpHgPpxeU|a z(xNanhCiI&DIT3oSIfY_CgY*9=dH%KO=LRX^R(q>tBtxWNIIg5xXU=f1-n^Le{9nY z+JakEg5UY4lu>1}md6aqbL*ZEmT+&p_*1iiQxV4>$T&aiSSWrz1D}$tnSQDP!1{{~ zArh3H?GUv;w4@Xkfitw<6s?ZhNg+^2=Gs2+`LUXdH1I#G`u7rteOnu!U@k8FcB?wH zc(r^*V6B@){n|w-H6C~zSLcVOXXlN_+w~0(4AfPAi)juGDt|_0jOE7nHkHqr7k@*SdFpf|0_dAOWSfrPR_f*qZ8CFgnf}OB`43C|1$6dzI@hi zt|m4(fDmxIeYet!7(2|c=Bx<_H9CdoiKSRgf0##Ibq-qAF{X+ACYw|qh$N+|@svpd z>00`#c=A4ZiD-+$NnpBVkq7B%;};n)WW+587k)PmT)5xcIhT22@ouUztXi>fx1}RU z6#w3)_IWn%pJ*3nTHCL8mP3QVttHouU(z#L$C{F9_K3yBlMq8YVvGEr`&$a3b}G(S z5EvqR^C4S$lZ=eK*@Wkpx3hsxrnJ~SW+eT&uU6=H7p^@YKl_)aatIHMf@4U$u)3#A|K zq+EUOyu)W!3*?sR{p_2y3Md<01B4B;{ew;%{UvEn)k!I&bnD?u3eM)lyJe=119C-1j^{+QHJH4OK&-TGa`7PPg?~c3a+-w5iPKp5HoD!^sxfL*qcuUp}6s~6oTJ7xS1Hvl-d-ykmzLxk68-LPSN zR_ga~>kbJ*(+n111g)7Z$d!KF7M$qz&cHFi%4 zPD6J}PcXhLf2ydrd-#VNzqn6*AAGuNC305>40+1srN98E39Ua^{dy{4z16+pFzj>f z8d(is!4aQA=^vz|cWQ%YkuuunQ{${8J0e4Sm@9bX{pS)iIDM*^{8T`czWmsWZjNiO zczp_h>k+hn&2u@iR4bj(ox&#^PBa4{iG>T_yD|uJ_GR5N1?|1X!OcBTF6`2-+OR$99z$QFYdn)Ybf+~gZ-uyqRd`-W| zBG&~%K}WYdl0c*-7sQJ=3`PHUXY0a?rJ*+yx7j@0AtEv#A6{XE)~wo&ecIzKO2f}T z9#_Z;gU4~$=lG>g`!NS}_|K{m-jBlYqf8q^LG1hT0Pq=}oD9qXucRV9Jz&8`2#GU) zpZu*we=-|670nZn$$7Eqc(<^Xo)oP`bfoKsmKa;=;BrBn143&2Ok-yEZ^AT{s_L2hOBbufIY4>QIfPdtv0XTJHM(D^n!Ar_8s zAK_({B^m?M^S);3pU$&$bejv^BoBG$v!JYn;H_JPYo$w7%%UrIG1vvx0 zaXuKH5n!fWJx%b_XJ0Tz2z#+Ud!G*kN*>(%Bn7|ibEimnxH!*8R2wmZyB2E*#XDc< zdn7G-pe=?E-Z3;}lm(!X^{P+P#NYc?D6oNDF2^dc+n;lk!JS`(Rm;nqTU7=QBLh_@ z-H8K{{6&&r;X32nVybA{eo8Bb?gRhHVKN77WbQy(E{d7PaXQ=v@{Dhz&%0tH?mweJ zr-`zR@6Sm*8M2&XxQuV#ad6q?%r2JL4aLf-g~20RTSb^FoB)!~OlI-5V#0}{(W-j= z@)+;el`|FW_QXnQ#keZkkq0b zKw`UW0zWB>P~=e1V~nVqW|zM@1#~IojB0<;EW+`O{5e{ef4ul7DZrUhLwxu5q*gD$%<`Hoe?BJMmwoD?afkM2ET=XCEB<66aMP(s~_va^gQp9{8J#4N(-Cmi6LEuG2u-~Y-35D zfLTxLF>?{lsrMrIZ|l2HiZX%DC@T&7-V-v)RYZm@rY46cZ+HO=xhCpaB57WtO+8gEtGTWhmRV(zX9-|BcWxk0z=e<&~loijW<_-cUQ#cb)px& zF9;#)n@pJwiW;9n0?cQcPBTDEfznTW@tX%k+ru3Ecd)Rj4~CRT`uNEVlf@84GfT+d zXvY#aOldJ?u{*$7ceXc5m0l}_JztS2)cb$7!m-gG-i0&_s9@$SW(i=gdryC_XKdNL;@8#F!(1grmY9`7wql z`HT>07UN!NG4G7Y5)6rDHA3W*15ydyKkD{&Z^D36rw5gXn;@JY5q?EHi3^edj==eF zz0HX^Ai5R$@0=pjp-?f1^klT@h#!VeBtf3?R^E@j@$PgSVQCw8BcHnVrT-CO{xpQq z6FARRKkI1~Fy~aL4x;WMBls$iK3`m~41go#8Iiv)LD?U}LC8KF+*QccRf;9{+?A8s zO4gqE)8Kkw!w6`luU}YrR<}CW-A-|2AtNiJCxEIeB^#sMeBcdVu09tOe&N%+A_IZZg3r#$!{!`P7vb4hE^xbNgrE(sN_fnKukz~ z0>%H~#?qyY3MMsVgyL6r9|NtJ{u?7$^}l!B!8;akn(q}I4=DzWQkF=6v6u)laI8P3 z`s-&&4fajyY6s`2{Vn$@;}q%fj}ON^vm7J5{BWYbxuF5WMrSR zjThV;dLxZp{Gw#p3H2*v;AMOb(AwsE$lCaKs(lQ~gH=#?yXcnri~pI;k?rm6=UO3{ zM!5g*9M}f%jO6ak`+gX@LrmL0tb)V+OAm5QK}a)$&k?8jU0ub%7Oc45^np`4^|J@e zKw^0YXN2NAY#+8<#;%@CwDc^t14hkLfKeHFiErNC37N0jQ|Z6bE`4DF|0VBDc^+{Q zN7vd%#llu^9M@_6VK3$t!2BI2=0IM%@i(uv>oP5TnJZ%}_nu&kF_kHLMVl{cy^T4Xm-Lua~BarKH_!7}9X}(ZQ;huLw z$>e=Ff+=BR7##z2O);yncQ;|xPv3s`C-R!H)CTmWl+!mIpt2U>FSWnM19wUiA4I?b zoe_5}FY$g(+T$^YeIED;sm{=|_~G+n@T<4il+zj1m`^0@=h9_WHMYM6jDEW`a<257 zkjwICj{dbz-iwPIM~wlAK-49|g=f8)hc*RwJD6;;#W<(bBn4h>90K8g82X}#DV;2? zw1pTqK-V3c!D;)Zfn%mv;4LgXU(t)17D9}eGYxELT`+wa5O@Yj&THda%Eou*RXA`L zHg=X+O(m%a;A)}(B1YX)ipFtHDf;hLGy0ja*tW?O~~%l0{!F zP+QDuN+d|ZCkv1Xj_ae9BepxWQ`C>}^)1!Lg=x~{LaZU;H|4>IkO{)AVD#xOMW&NY zM&kFaSpy*Zh&v$C$x+00$Mut8N3{L7I{!?1z(eW}on1@d~-LegxFF^F1AG2n%vcEv3f4B5pFhU5k&E@`{5$}am zuOG8*6nYUI)wHhf$Dtw~Sd1T{=f(YM^Z*0z@WX;Otz#R0EcLvrPstg@w$IB|?w-=* z88fEoAhN{ed_Hqd727TZUZt5@PNSJ=6O43gZ+!qw{Q+Z+DzESwYRonLx#zT9&cWdN zJYBDM+y34IXLlivhHF-s`{M+R*MA z)7tY3joH`AZ0h#I$%owrZaw>CA)kI^nKfJK*C zn4fNI)ND*$!y@nayr3#%+MYVPj6aip6L*d?+Z{vYEp0}y-N__Y_oa-LYXO>hsel8E z7s<=pHHXtIsRk8V@<86piQS%pRSQf$cE`*_)oS!Dy25F9?p0h*OV*}Igxny&uFE(c zptFJ-qUY_-Q=X~*FpTJIKUD^FAk}Yh?Iy^9iwj;oonvwUwsU3r_wB8(skX0 zzz^M*)*4N65|~uK`zpKYAy~`W$0?rHKD{)bn0H}`nU7a%1dt;`YK{Sg!$c=caT&cE z7asZik;?1;=B3PqWG|vV(|pUPH!*_CDo*H~kIyyRXM^N9>?v(o_~UIzk6!#eB)Dj0 zs~Jb}JujIB0Fx#D5ouzNzOls+xEz8I(x{&t-*%BT#xmX%wyWe4;DifyHc?6sj)eMT$dL;F^S)kkLrQeMv9@)Wc>+IFBYL%KBH9n-74 zl=`q#2*9hz<)A2Q)8W86jWaPW_+6}sUyN|Msy`fPw93QUMia_B&Dgy0mA6vv7mR;FrMd zO3$rs_R=xZ*KYgknG@2t5EFdnwK@&$qAp-JwYFpL#qXKKX@Q3WmHpi)wa-&+4;vueOT9G^*4(>0TEP6BG=lyryS&u#|*8`HT=qU~N zaL#Fi-!UCGVy$POUytmIe|~)1G@y_0JE#>5LE$Lwtd2Ti1{+EF+w$=|+`$WQmKm}b zo=>FipIc(JwB44PnH$d^u`s`w$I1UzFWnwj>@RmPWYq=yQi9`LlL&F;dq;8j=w9%W zx$2oouku7ps=u%e&r330c9dh3u@(0vtVSL^`+yX{2Z@HS|U{`F5+L242)X zsxTj!mXT!zI>`jf!PeAwM7NP6`fiKgPN$sl12FoiF}O7PdS3wT+fK5*7*I1_i_u@4 z*6+cQ@*N(&lrisB{-gnWQ+k*kZS(X|!Hy9|Nn-tRAeOf#$}LBEVN*0GV27S(w}4$I zKq=3;%S6Ei%iOR4qUGDeEuNg!aMYaa2I@B(%`k@UU1Vt0on&4KXlm6>6fgUW9OBPq zTdlLp7Cl>~iAx+4%z-=;ZOJBG&EqMAnZZ?5G?#cq)E9xFp`6qj)7-7&E2G!u&VLXVOjwkNBy+Y6uy zx_EVh&?jT7X<80JCmoxTvVmxieXT#)7#Zom<=x+Ks8?hZNy`9{2I0lcmq8D$fCBi6 z%Nh#=*Sx$YfIAN8nF2pmCFyh?z+M e{U0uQB0T$UFw)jweh>Hu5(L*b*Q>qd5&vHWsiRZ? diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_002.png deleted file mode 100644 index 58075aed6ba42aabafee4851a8f38015043675a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5764 zcmd5=i93|<*B_cP_L=O7EFsJkNoCEN>{57;<*_6ri9wRkOk{0ggwn!LW-w`n?DdpX zDj5t}OR2_Igd)p(`+ncw`@Vm|>$+TXJxvLkc>v9HG~( zFFs;4-JcfT8D=mm`=Vd%^@{NT9|Xo$C z^wY`A38!BCTy6h@qBcC1(pHYn=7%?`-?6r_a=4aL)4PF`$>0@N_ejOGN3_~G*SBz| zYAmmGn-*Z&X9m-@Y(dUIdSX3i1t*47%e|(PX0J#fvrgmyZ3Vp5M%}|rA1tWp-#cZI zG;hv_v>i#hnCOO-@k(OV#L>9;QV(;eN5fdrhop%nI$1zmTq+BK>VkEXF}m;XIQy1Y2|vmP&Ig3RCPz;l3kf#WgG90CT0KFqvT z23v3N?Jw57{ow#N>=knbJg@wjnKB2zn_2^?vL?iK-WJ}4#UrNB`Tgv69$rklFLT1B zK9EO#Wz`VtdVn(5jmcTtpzA)QEBQlPc^$&gRW=+9=hNpj6@I&AE*h9X{*NisEII?Y z<8jf7C00{yAL3zsfZI1l>fuzzot$sH$t?9|n?c?hS9fGNBO$v;e~|GQ#lyl)rOAv& zSJl(U0!e|@ODR2E+kx0O$KR1Gp~(GtTc{*PzwllC>hfjh)DL2^@LN@H-^Mv)w|g*m zwCYOF+=mQCsdC2w-w>G9W%6n~e$~0Y9ShfKS}!NE1!!KrdGyD}S;vc%=(>YPvJ0Fc zRZSz&9qu#OU-jH{2Irxp!5Mv+H3rXxDoj*X-KxQa64r8xgTy6c7=Le+W7@6coGq`~ zK+#cD^6yinftALzf4i^;(hb-9nP5c0Af%1y(3S>7q{ob z7)@(MBPwoHbTEKAAldvdGtV-%z`YEVH=p@KIQtVYD_3f}<}_<|pB#?TQb5YyQP22e z`TmEv1(XmfwzryrR2S0>4z46Xvx^(7pv6!_qi0vv4?bg5(Tv@_%60M9Q9wMN8O`7S zwEA&CCwau(h1o3eb{7w6tadM~oW6tJky$gWc<7fs09fhx^1B&-dsgKs*|Fc|*D9s< zAmwhqKFOruD6ecL7#G3@Y@a>QG7;s)(D*EuVzW#zFiS!@YAB8TXVlJ@BvIxHD`hI- zCw(!(?N zSLI|IO#SQYK`QXI$5*IDh&{U51d0g#w)ad75)yiB<;3%M_0)sDg`jvBI{DqMz{HAE zIDx%OlgvI)=qH!zGKO;*lizJ(swehta*L>=-(0(crL1isr@zmYwu7=W?|APpO?O1W ztyOm$ga$FRp%-^j3WN0kGqw_=a>;6N@WxKf%J0}W#%L_Zc<#^iUGy;wjc|5ZMb`$< zk*ZOa9ngreElaL{bc>P#y1)_JefjuxuWR-ON$aow*=BE)Q$_o>% zY*K934=+`Lj*HYGY~vy2R+YBvco67T2S4_o5kPAtqmV78tk~P_q;((V{NNj)v^q5| z6n9xc#r#r}7xM9TkfF|vbBH2+aNg_M&}P6y@0ybrs;Ayuqsv5X;vwl?Jo8Z7mEV@8 z{T-7|$pgqd2LkgeHd9;!Vu|h?A;XI(q`c2nmxHO`1Wc=*qN-W3R_Q#7x zahYHo4~d0|{|c80&bB=2?9SZb zG;xmDX1`XT#h;PT_EuU~-(yvpeFx8;3AqPlg2 z>dAP>fn;^4C=1j-21V=N585<8sZb%wLvo=FAE~~jh<81H!`UY0q5?ifi>WG}de}!@E_T?kLnYAA2bEu^11jhkyIfvZZec zBQ}AtU}p}oCJt=>tB8bzN3RARdLFff42b3Yz$7ATGe^Szr=@}jssA<#8Sh}mXBU%N z2O?fO61;!4ihpd{w3HgMrLE> z5En?kRNXZmJc^-3ucQQwctLb6{SpV9fhB~aeKq`wL;S2|zFFQDmq!ZF^=vI=60r-F z0P!o;$*;#>yIxFM5zl!t?p=CCPKkac@R!^i1~#hBsakX>{H_XuE2iKk>qlZVYo|)l zlD3bu;7lO9v}yD~%tTQ7?8)DUxLR9)R;lpg8J*Ig*S!AT!u!QO^)u*KGa2of?>(V! z86O?Tc3k@j1L^nco8TEs>IrXqhuC8 zRkLXOiF38O5jC#{{K1YS#Uu&xfMR-M(-8lhB*!S-N%ntH4b@JhVB zTi79DAOB6U17?s9R1$Yrqhc?hRl}-z^)^NPPzv?$!xJnJ_Wt>8*H$p_OzgWW&g2Pk zn5>zkz23B_SIxvl%z3o+tD)JVFc01@lKJs(ai^1V_2kzl%K5*Va0o zDEKX#As}_(=r|xd`S)R$^v+#K+Tk*%!&%}SqVkOOjxFec>wvb_*PDwrORLk}=xf_P z9Rmtg!*eO(vZ$DALl)I4YVN+s|1CVXHjj5-am_~k+p4oAIri-zpM7%IO0)tR&EF-t zZI1^;AH>EdPvVS`{tfazMmL{0!K?{rbn`hP@NKkBzJ_pG<_h_qpvBU$iM%joj{k6AZ2cx%E$j6o7BB>{y%Cv&Zr3i%e4-XHPeAQ^8Jpw8u-ElErV* z$ZMa^T$#$vl2RjOd2vgLm{9%MG6@9;V~L_Hlq;(p2m*cJ%_^344n0&6!BTr&JGr&+-iF0_1W#g`q2fda^E!4|8;kB zCYLjegL^91u1pRIJl*-EC0u4i{+jNscVN~&?zD67r68F5^h6V!G8W|LU_+94bgHsA zT9Y14NT=p_Io|faX#TIX>qSD?>^OIied+(BDGy>f`OzV)*4Hl;EAdNeJVS4mW;rDn6A+uh$uXK{dT(5K578auqjS`a&Lc|aw zLf3tS?e%k{uQW&`*cdFmP2`tzIRvwc>A&nf8pGPY0qt%)v01;I0nXqzg>UH+g%>OA z`(B!X&`mU-ALjQ=YD`k5H?q7a?y+FYhaX3()uX;V!L<9>BUU++J}f3nulHP}`!LnVANkdL8$XSk0TbN{3YF zsui?_2es2B?S#HbbLgpnq~c)Ch3*>pW&4Y3Fo}1277kX~IbGiEEI^YB9(v>$#?%GG z+%o;Z%3c#VkK*RN?>vs9zYuKYKmf+97S0mFHm;~%Vk~o1PXu}6Ohn}z0=&ruDZ#571 z*tZ-IB=uyg80qqkWiyK2qOViD+2tM_o>TLf<4=PtL#I~vU1UTDwe8CWIh}>_XS0`n>RWdI6%8H$Gx31VXIVAS zaoSM3gSlWRNbSwH_5|-el|Kur0STmrt6m#%z!75%!}Es|-3B(oVeit6_JKCP7ahoE zKe)@`u+w**Py{!=`V(G__v|8Z2z za$8M=>FS9DOlV47t6P>@A|v{y;#3hqF084&lXDk~<77pqSIGeuPw5%h9n0(Q zuKm*4j=e^=A*v!>Be&>=8c>uCLs8`}3Q-ZOgC($=$VG-L+fjcnQgEzqA$`Jr@#-8TT2aR!sZKSa~m?<|)xrktyLVWm7Q%K~i zYYi4lDNZYR%#6>R{={Zgey5p%JF7@d+Z~wpV3mQxdCygnEaMABku&ZKh8GqEs{lMkKMZSP?3Iz9QxyMw|cSs+DxpP z5h9>pYnYPBFmwxg)@SD(6xO@1pmC1-sXz+pXCzG4=z+mWkEV65;K`g|agl#_aPjoa zwfD!tT~}dj(hSx$NvZJ3&aGGS0`~epG$pzCo_gzm1J@eUzKsjbmezK&aW&R{M&TZo zkVwca0-BUtaqrxhuAN^d7GJoXH2Cu%)UQ7(q>kGlgX74vKGIS^w!F!x;AiH#+@@PbK@Cst&Fm^bg-y2^G*IQ D2H=In diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_004.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_004.png deleted file mode 100644 index d9d9861f8d3eef37490728ab14477ded5d85b5cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5439 zcmeHL_g7Qdw}*Ju&|)w!FbEi$h;$SMDG6OVQbIsV7y;2R0wN^>0uiJa=|ln|(pxM@ zFChZb6$Dg3iWH>Qb^&%478WkU zYr2*!EUYqrzt9sPhY*tJ2YvuwZ9{7)_yj{;qghyZwheW)tOK1^C*xkr>iKo~a0(#V ziNuIqxmfMzDNt-nO6*>jRcRJ*_9YL%Rt*xQ|{ev|VdhXgOhXQ063q)FEJv{xLlnDSwPYV#;;K;DHJ5YGV$P1%qP$ZfX z&kDe?T&%ca@7OK(-I2xx6Ku7ObN>~7JB({?U0zaN7lDFP4xuUvZiJOm1txyix`V06N8mFH|A zdMvC&H_rbUQD*uq^tUGyaR15mt^Hln_F|^)Zq)9f7wsD?2)|33Dwcw#f!3ZbD)8OM zIcy|6LKdnNA|3Z0WGk44``N#<{P2yFxs}%W>5Ck=hslY=`d3Z(eUHyw?RVK4Z=1{? z5BVkk^~mk>@}uULIA@X*D=0-2mxceaa404TTP-_Cb09bzRPPoyF)cABpc_>P zIzMV*+Ud(hX`5^>yyt<#*Ae(;S_H20Nv_P&_En#y}@-O>oqImo9j8p97+sLDzl zQPG#j-K)%5wj`ZKVoedgq7^))LG6jRWk>Q~rO4kvE!|zV z*p;Ve;v5HlSO}}4{A{suN7ma0$T6>Zu|FO@FS#U!rjR6Dp^~-UdruXNd10A(!TpOd z3Q5sXy;K_wM1_7gzjikn(ZZ9liRp1+n~Mn66n*e=pF#+%4j_(*bL;Ter)m$_+Esm! zl;8U~qvPU4znzRAjv(1|p!HQt0}84?Q&Xj%%r%YDTs{#7{pvJYp_!6)2f~!1(rGNV4I!?_)3IjpbW&qTtY=Ob+pZA8gyIkIk8HXw zGzNI-a~PnJW9}jHE30C4qk3{raI24%cj|f?%O~`#wVr7sYcT^fyL2{i6~IHXY)+M! zH(AM6la!2p_=m?C5?hQU7V(VBhVkjC*W-D|3}PEUq&jLdsndFzX#g(2f9*Y?Jg3zX zo~4bv!VLP;sN-gp4yDKq#TWHZT893L2PlFEN?bT}{r`z6$w$L=rCXZe>VxZ4g~rrG zeqI0%R3NJM*b{w^7r(Sx4uP1B|E?+k9leH|$*rE6xY9xrfI8?+lXo*iIeZ`7_wj~T zh?XGkI>*z!&N`cN0R!T=TSMH(9^n$gc&o-D=e4h^DaC*9WCla(g{8;bq>e*?a+aSF zafel%8?%mL>xbUGlZNTWU^Dd5nJb^ky@8a5_8CrRd&roIU|%PMtKVE-eqB=}0(_H9 zK4~*&{E?kX`jazIFo&z~@c=S8$gMf1uLDp&J!%kLW9x@e??S9&u{eDSdvd!(ZBnQ6r@ zIbz&3^=!OMEt}t=)A|QEl`&04h(N`%g`R*8q0u=-oGQ)r{)I&G|i@fF|2(lyfjLzG_eR)4|Z(*9)Qw zxoA1$VJ1ag!d_Lctze)-r=4T)$Q7p5c7$EDki_zxGRT7q&kow;X-bJ>Q;*nNPS@Pc zwziT0z%3}1X`-6<{qYU729;U@&*9d%X{$8eXu3XnxwPn|&?On7pW=~MSGACe&j*nQ zY2;QO+ruB%o%SU7Oeq5=)3noxg-D7Qq%|6L_G>^f{znpyoL4yUhE5+%)>XWl7}kF< zU?@es8d`DVQiG}xw*PoD?-R{BlE)7JdFs`(+ol`kC%3aW97Vh%(Q8*paR%vDV5;xw z%r5MXgy?fZPJ%!|{dA(R|JgW!P_>2(cIb-P^rXjZUVxW-kZc|8Dyq1)vwCgPsmJl7 z5%gf#Xm$dh1;pW2{n~z3fF~9?JQhbrJybuP@$0S1fJvKJzG}rsot_s=57!HQx@|Ai zr~(>kGI;(3lgMo7oCptrKk{B|m_hqyR77OKkpoPx&Bu9-qMxKuy%4Wo)NTSak#s2f zrzGT2N&k=sCX{nrgaEdN7H>qx!B%Pa- zAE=Z~sa4xnbIz7cnRGD~$b;o)MVJ-}v8hB5ai#*=iF>4f$c4DSNth-1f5|x~Z2eb9 zFuH=HV034%hbl48O_%I*L?bGCqrRgedTTNpH_*7>AQ_k77332`hu4_}YBkT4Abt?@ zsO8swJKq`iqx=XhbXcaj(^}`Ta69OMiap`ajEu{lq0|QT(trqKIWG%1meh9k`J;)# z8FHbTJ)Q|HGy1XvTfrPAK(oACBgDX>c%yEi9PqbjN?Y8=-J8b#l^DW1aRoiStgA*!KUWCad=dE7P1ontEv-b{CXCuOImP6Xw) zb9gqY4f29IU%s)`*`Q_)=yM02YZ~SWz`l+TAJmr)7#K>?hu4w9_;NW4+J!&>H2nub zhs-3yKmi{X3|C));%u%Jn zNvnUFkEW2I;#KG<6#J-L@5T4*QXfs$I6Z@S7*QEAI{m;mxY;XMSs7jzi*A|Akyl%M ze!UO`n7l~x34@EsU?%P}9bJk* zV*N0Z8mTv0%2KOW&O=Q^)?b(WwVM{(!mzI38{*8MLCFvQWQf2 zy5UjBIi_4g3UZt;cs9xJ-X}mMaW9k>t(Y_jjw`=8@BsFP1R#!9@c_QwGem*Zf?A>V z`sL3T0iHsyE&hOxYU85ZH)UuJ7Npri!IR<6oo+|x``&hO%ss`)vTRwW)^-l=$W0{( z3&7tOauA5V1I|($;C+Gvtx;e&{$V9*QzWQ+3xneHZJ8$8f&6xjk-x|rzQXUyJd@CC zgSowY3?B=-WbjG?U;EuOXv({_X=h}d_VHsmb7>`uDS~AVw#>trw_2=|R9}M9PEKXV zR*$4Wi2jTFN#EucIVawB)U*wMC1~I*_3Op;{Kg5ehcADR`sq}C5gsV|HPGd;|0P8t z3sry>?>@#;*$V3&3rzFlMq*C(@KLYAck{>R@_g-emnnpj?Ob1sdBf|nS<+Mzu7B{p zXI%Cp^>^)e3vYI>j-hHV52%*s(Q9uslfgLc$43nsoWE^^g4CbCG-h{L=IqhM%S~NM zr;kT9%F>0myN#RfZZ5EjtXG~}FJw15D_-pyc(n|$-MS2pU zUXo~|@2AkU{Cv@2-+PlPs*;%K+ugqDVjlISx9s)+8)o=j4!iW`U)huc9>ueK=>)bp zO$>@FDCC=a&E+c~h`aL9ZM-*Tw`u&|1G9=>chBC%wWX4WY|I(Cc}$Z z^D2VOeOGv5zn&6Y({(Vqx7SA~yG3K@p3$xu@-e4iNOc$62h0&xbrqBQRw}j;7n0%z zcUaST!Gf1I`=*-j%w46Hc#tR^xl})s7;EvTYYw6!L7b7JR+W=8Sc$KiT61&qb8C$W zB`Ed@jhsj|qg>AVbWu)>Mps^x6= z8}I3mj+8on0ktY-X`qzIHu^+-AF^RIW7KPYrZKZA)#!=QW|i}fr!4#|)t+U^=xJY9 z=Na?Q`L@H0iELgG^EuWJ`*n;a4J+?^_w!z+lH%sJzjk+&>|L;k#XdCc?Pf}>z55pH zKWxUHrdG0=P)e?j#;wM${}6cJQCi=PW4AS%UW{eF;i*eS6+3^Em{)sno1U|)+G^fg zc(R`1p!E#A^rb8KXtRWa;20An6V1vB7=a@;gd_m}0d`Tp_e6d;`d_hs9rAC6{96nE d<>qj7wgmrDz1wBj9Q-57VyI`PTcwR7{trR_XtV$T diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_006.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_006.png deleted file mode 100644 index 0ea7f416609cd3a33e1875d3fc88707b25953596..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4932 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 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_008.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_008.png deleted file mode 100644 index a0f6e1ae577a506256144823468cc9792d730e93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4749 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 K;92b+miE7OY4N-O diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_010.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_010.png deleted file mode 100644 index 5096c1f451ffd9edd27fa0b8adc2a52b47c3dc36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3568 zcmeHKYc$&l7EjVY{wRWqwzDO)m08beEoD6tuN|f{iKQjgs-RZ4CF&7xLTDOwmTfz< zw4(YLvl5XSMM#IJ*3OpF)r2-eD=X>HctsKkNydKPkNeR*=bn4cJ@@|3J@?%EyXRI# zV!t*sIcNfbK+Gb-L!%%NsOx_fG~DqNl+=)R43HfhaSGg#V(uYg6IV_5oav2R-6BJ5q4B_|V>M_Uj)d+p-1oAGDx7X?pfBdNEw=01 zTU#uj;+p)%+clZ}eSMl2Mu8w4$)*ifht*6bS|KqX_VBV$NDScslouyCqatEdU3z4$NAAI4RZBS8G%#5MNB7cJd~j& z*-7%}GPwiRLa&XB($5@Ltpr@`&~G8SGFT*ta)wn#5G`{!|Gbf&*yz$+HF3@%;GA&) z>1oalF_^LOu`P}DQum~!^rx$zKRUZ{Ba&T=LBThvEp6Sh2`iV)c&HdZR%lIe8tG`=bgWQXnZ_FON9S4zW#k(KkJB&M19QO)C3ezQ0cXAhkxD4wH$cSzi~#Lb@r>~ zg!I^idD35Hp0hs_nk?lvPaKW1owVtwenZz&4VJclNbP^2MHOZrReTW}m6}|#NIg%~ zOHX>V^j;@*g|Z#HUzy8r_i&H=QKU1AJt7TPxg?j#P3Mm1Vh4rYCW61+vxtp8k>&U^ zd4D!vv4CKy|M9T4vy4!O8?oaL=Q%ftwGkV0 z#3d=JBv4>^=gN0ofhyU&0@p~0f4BWc9vw_d+4AhTYul=e?|seG)ZDdZx)iLmXhhw_ zx;bJ0%~1zIvD3LJ-&zVOF?CK8zkf5AIBPRy^ZF_w9xNaqFQGqdM7=GUsU56bipIT8 zkW`uq8sfEYS4QtI&CdAyqCc)@(LCuPygwe6=wjUM(@&_yp0mumac2p$$L6h9_Gi*> zeTh%KGSl3;gCli|FNWve8st(h)9|hjyUA|}Ei%ay@^#|js9PX_(wRa|~n=8uB zA2M*M6ej%e)ts)N==Q{F&4}cXqtm(B_mYM@7_ZQ2`XQr@)43jmw7JvlgzfVGy?$>H zuh6ib(UwY3|2x`167L{UyTzVG(ToMg;ajKq{y4AL)1^V`P|t+i&N68?_K_7c4B*iGpJy~TNX>gU@P(hg;D;T`f=mHzMjruF!y{PEQk7mz#iK=F%-Q6Vdt z%OF(oIm_NeDHT|Dj?1%lebU!*?M{eq&!8xD$({0a0GU&YnkZ^--fEdw62m^YKOk)q zWKSAV)6b9_F?Mk^;wad)T0u+2Q+*~4UB!QFXHQfa8kiqye{T3HJLbe@WLEf;l}}oi z`GFm1fq01i1;Xb-SIt4D+IylpIAin8eqM#FeXHVg#nIG-u3CdmdFV>oJs9#0>Drh#pcNYN6dW(B;JhVXAGwSfJ>5RXc;C1 z!#=o}YlVaxgE7N@p+U;2WdyIcvLhIz6`V;MgF|6vP~N2~>^#Ms~Mmmq&J) gb@$f%&+EHwRNCV0f8Qs)a_5DEM1)~OS-}L#Z;F zl5#kD#2o|z>;1i9;(+CB@>Lq}fS$H-@Pq+Z5-cbU1X4WUaKzg4jNf9xM(r+J#miA= z5PrplbXHrM_BM1O!~V;kKSz-;rKf=5I#bo!N<9VE-{?JaMbqTlv~zFn((L1JBVHbw zS-DG(pA3Zzb=}FGu#cn4&_U2UGNvE)I=5W{K~emRWV8ed1U7*h>Y2F9YC%zSGJ5O( zw_#0sb-2>^+i02e*t*qd+@I!+@;~n;mfn4@{q3~)L}mQ^`masS=BCQ{KbBE{e!RG@ zZgy2X_ZL&)?1M3CoDTz!&LwA!jXuL;-tCWk?t2kRKZiIA@9hCeDti| zQH~(g`R9h4CgS(w=TC#E{(0AD7cy_tK@3ILAk4nmpDzwgukts2jk}|Koc$LMsNcMv z9Bjw=QzE7&6R{$GgL6m`qf?-5@vx?n=HR{O*8}^Rx35EjH(q5p=CA}H0MO@Zw=v~= zlrH|fo;>HC6{iU<2%gQDAAE59V^`^q{)-`cynC-XwK}BpkUxA?%lgG_S@_k| z^VPCwp7p9>$v}0YS^m$Ohy*`o{UNZ$JGP@;0j=XHRaaifCnyOs<|HI1L+WR}4~;cK zS9L$8zA5wfM!~~1ep5VuX1mz2{eMxBKY~n0Yc52SPe)IBH*Bmz)(b$c^a#nO# zQ@_+2Z|Ye6eZ=qR?1ui$$|sk51u+*8!%Fndsdo3Z%wH39jropL(1W9 zCfbI)ZGLyWyo4u4w4s7+efJt0uwp|E8v#UlVy;_qZ``1dqJfsn`)B$?&{ckUPd%}H zK_(V4tV-|V#m;_XMi}i^hLU7m`-PUS?bC11pm~YQ=-QtTHyd_)(>=J=+MAJbeHV~T zs^?|(Hss%5X_Vff5B|}_!&~K~CHzX6>R5-RkQc#i8t-5FdokW=6p9(e`d`77s+@+1 z#^_`Un>5$-u!oC9JcmJ7!?Jn=RT(l}FmwRXRt%&2n4gpcbxQ+75@BU+vtnh@7#|nj zyu+IRs2xqLMOIzjHN|R^S*AHPSpO=77(DUh9qVTnrvSWnDP2gDT>qAP@2X2UkwP#k z_o)AplwDe_S2LF*!ca&?)v^28 zeRT}z#*^Rm!)E-3H%7x=lp5(_bSrtk9LL?KEXGVS&nT%EKHnXy?l;Bq5E%QvaSxrm ztWa?yXdfh@z`pKdo!yD=x7+xJ+~uz}GMwvq{EX<* z*}Y8DPv8_W7`1=+oo)GwOdJ2@sV@~x%by^SK{05t?DsA?_w20`?QdVZ_DYA44$hH`bVlB}6)@hTfC5g`c&IuqIs(Kw1mPhO^X zF8zSboaM%M^A2U*PIzr#ELmcgU-8Mq8nw{Iy)NbWaQ3myW4O~rDIhaZR4fc8j9~WOZ3j{7OVrzBmylt-ocxS6DH_5tOq{l<< zv3wqXwn)$Wj!{-(Q^P2*jjK2mzJsMKoP~4m1lK%p?$-O;k(YFk9$QS}hwFdUrL=xL-|EE;G}hHa z1;El>JI@2#_j(6JSJqU%CI~OpxytauI|gTa`Q?hIxJe`hQPx_^TGyD8BBOy|RRXSm zHIJ6z;fRU_VnQGYMZp}lyK&T5JNF-F)_?&6>*jy~fW-$riyVTw=VX)@ zT_!u-4`u)$G~IiqGa#Q^Grkv+ur|H_;G>@j18+Ox+xR;B=($SVqu$FWMjW7R)x+lL zZBGjfdFh35@tDD41t$$moaHr;Mxc)7R)&`Z?^bcY$1;#v$JL2{QC1x+q&!5F2d->x z`r5P$r=5rVWg2A9#m=`3NfBSk3i)$qk{e9eRLX^qhO(w16dF=t4LEQlQ1Usp+IjoG zYgpX6f%b)Ekt4vpJr6v)t+UL`n{7>Y=B3j89`~~gE6{xuAYY2rxcO836|egZL99>9 z0xs5|+<;LBa>DiNfzao6+{*B=3WSG))8;OC$16dQwJNxFz5BY1I++(Mb64;77Athy z;4j9O4CT?@%~7r;5uCP&NHUges?sH7iEehrS(A;hZbw`?dB4NgamT}e*REGF@qkyN zIXs+PICbv!-3uetse)!`)oAX}Z1ZeG$4*h0u#Trzx#4rGI8-=dox>Y`b9679D@(-n z8$;$xd~xl@0}`SzX#Fwe7V5p{%G<3+KFSsb;SW0*@)*&b+=ET`00bC!w$72b*l@7t zrrFVOE08D*M5}cKT!@=Hf73yp&Kt@b-*$mqHjSTT2*^;u%T$vpCug)Sq>9l5_vbbmtmhW!7i~J4A zyn#+OJ#Vs&F@$W)9gb01Ir5o|tdaub+69vd0o4dX$or{tKuc5$lP6VuD$kM&J(@&( zjw|WR9snA+;C#FevgC6mvGO4%5zfUdPfTjr*2;ZfOl1dkt;0jU(aGI*4Vx(xQd15) zkz{NM)gQ|p60@9aXDWzDZoLnftKmuzHkI(I=meDzUPT`|;SJ}C4KWXC+j@Y*Cyr|) zYxVz(mjn{Gqy=!+1ed?8fQn?=TA^A~3?yC-9&TveCGafr%*KVz z%bP}p5ORj4FT&y^0*G6B#4wfKdc0C`_0~J# zytZvgDz3k*+76&n#3O}Qhl>TRu;pL`{#ti5(KbOb2Kct(!l3vwJ|~70Vepret0gWS ztaH4O%uD3%w&8zKKs5uMI#`iqpQQmy$jIUgcjmNb1Nijz*!CsghZ}C!e^z~bmu03r%gqEk%jI| zyBr2j%|cpNBXBy#cT)=)BPk~$EovF?@i;V{pCgOq= zXAg$D8BqonzSPM7UFzTlG}CdGfK&@WW+8z(DCGhYDf<;Sfw~2PGnbWW3KtiE_UHT1 z$zt-Jv#!kP`m$RY5~dAk9=-TBurm3z=xYE^38 zT$A)^Lq_(|1v>X=E$MXe53VPg7j$8(j_u(NR?z7kBAnKlhsNgQd(R6>T{;k-Aw3fJ zFuVh=?(C5dP@D~4zw$oxvyseiIB?2`Q)Rcu9AnyP1g_piak2KSwCn=`#B8D3;*#L+ zch#KQULG^#;R5>OOa>GBPnk{ct#$+i&7+8 z&zQi#F<g1zb-(&` zGPkzGNWH2BQ2dtW)ZGz6cVj>~?Ef-zCU?-l6wcifzC%4XG}E2QxPjKE;NPLpz{=wp z6b^eNZuMtR-r|JscAtRp5QSh5D^hKNg==bO&hpI}*bO-&|!= zt9&A(0K}s%CugRTe+-0YQxD!ME(+?>dHGXCL9|jjsw0~pY7w#J$s6kOx5cixu#%S9 ze`LUL-D|8$5AMa3!2$3dRe&Ac0gaiTs;dYSm4?xUQL z{~>JLxE7EQS0hfjQO&{U{1fxz#*YBGz^VkznGbMH5==d%(+5zlP62aAxJ#@pr(_HV z6W$sP{ll&yeO16MoJN7+S2}92Dd~T!SBnib6Y^PGeC4&+)VG4GyUhzRxb~Ayx!aF` zL??FZ*}T8zb-x!VUhfWMnzK7F@w#_DIk~d+R`HJ)U2_+M?TZ_DKt*{kO|Z3hm*P>1qK`%50a@ zMhv$X5 Q_^AqVuysCCWfO4We;WO}cmMzZ diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_015.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_015.png deleted file mode 100644 index 298798d0e0b8d5e89f1529954293a9c8dbb5d0bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5477 zcmeHL=Tp;Lw+yMWm__lx72k1jwP6 z2pANk$q^1gAqoNk5djfH2j84KbHCj`;C^`b%$_~7*38;#uk!3?@7wmamV76~Pk=xm zzDrhSjvx?++P@RvVoMT|a%0&GBpP|i8DNh@z%LU7Iw^U{?1FQ=*XpM`L`Cz2lnu{g zBKdb7LCtQyy?}H+tD+UGal|}-2_j1%rQhNaTIk900C#%$UGUrN!X=kP7VlP()+Y{0 z(R+!*A)odVaMCsVq&kx%Yb1yRq5_ZTxO?N9A{dZ~$fEFqA| zMLZG*6I^Uw#E5V}fFUsiC^Z;>qV*n+IY6K?YQAg}HE;xGf?#bah)AJibNtu9e`E09 zI{1Im3#n*`h8K0G{cU`#q_q27ASQb!>tyM0D*J!?8 zW(f9&MlLAK(w#m(O4iGr^w6mDRff_}%!xf2R5(79Igg7Z?>5xqntn!YFb$&Ug*s=e z9ocvnG}|zp^WwvVTl8UbKAR`^V_?*mJo=q(^e;OMSz? zvq0Epnr?E{qFYzz6Qu;FPf0ajkaxFRy?`L5yGGC#2!Q*-F}RjS4$IBM&%ZsMR~ZQ` z2xaQP>k^9`+?6?K?pJ-p9sCo2nz+2Hc^!O!VOD;LhSz!+YpUm`nBF|bRar36ypiB7 z+3x81un6&adT_`rZ|~2c!`F0R#msCx@M@ghPFPdon_soKzu@^ZGA6=fdtwDls0^9; zdd|@fiEgh_={_b>vg>3sT*h|39-JAW!eaBdP_J4qa` zT-_p2M4|inE?#>{f8-vVvv-$H^=M?3WHGg^;AXj)-N@s-g#a8{xH7=lhC^2#hf2jNYWtmCb7#jp5+H ztP6Pon{UMIGMb{g6M~TJXv4pAHVoojW^VWL^XUA5y%;!HJllPt>G=TyG3|U26RONt ztQ3IW9n07sA#)K7ySyo64s0C_9|^EJ2TNiTbL1A8jnwFQO@5 z_LZzV4t=Y?Wpt}=hnRIPZC9kbrdpN0>MDS>fqsCZ>lz17 z5v^Ag^Vt>kDkw;v?VHdC&t^D@A-(vnpv2)&8(3K5Z)bdAXm>Prc|qx!TA}AY52ZaG zi~CoRHx-vqnj%a$@Yw8{&~so3%u~+B$oKKooeRY5jy$%E=i(Q_^6~1Da9iG^;Sgh( z0eHr`CPw%M0U<~S>@Q;4ovwBzxlNr*^?swaG7>5$w)LGGhbceb*`ZJ~+#eNLwlVSaZoM=)_2RHRJZO`S?b4uxFVS376nIB!&dXFYJNX`?6 zz(Ps9*X91|VZ10o5BfWQ!u3f_;tMzA?AcVR?m=25|KV{iEGw`L|7#KUq=qVgA8L@* zgM*Wo9xYp@Q1&)DoecwA+wU5?HlYAXOPNVOW6`la(33R?K>DMzjQo>pKX0CbXi^&D z6KN$~9F-A9+ofoAb|}@nbsazfP4FMj0{NzW3=IXav4KS5&E21wus2xJytJe~`j-c= zGLTcY>GK?gF}6>q{Peupy7dD2K2&IDJ)bTyZN$0}XoHd3)vNzH__2_HIFl;y6rmCQ zBO(TVo~8n6848P=5G=j&2ROh@iXD~M6#Dnk@)_P6br&Pep;q7}-*gs4#GmbG_GBd^ zPH+`uQ}7fpk{%muU9(c>hN4mS$2E>cqgmqyMzbDoZMR0D@x}y}n#L+yhevmQEL`S-}oO~1LAKAjo?XMm)_cMRQmzt>eVLDVh%vb<>GCKuIH?@eXf2irB zh*JdzUc>~tGa2!UwBYj~Bzn@4o)}6b^!yDmIe|4cimAkr^C<2X6Lq}m7Y68sDV~z< z`Eq2@d~Fo4qO?)asbd9XU+BT}Uba_YOCPoxEQ!7q0{aT?$Y}7uq)0!T|3P8YWlz%v z`SzlonsBFTaT^JZb({_0Y@W1XE5vBmWg0#)WJzkkFL;C^A-2Wt7)}#~Q8F{|D;(uN za*~WY>ACOSd$6=rNm6>9La`MsV)AbOhKE-khxPNWJgzMbA#Tc(@1-%1T!;mgf4YL# zd{^O?7$u&em8H(3UL;%3!cwf*50h=x*API{47yNU!U=2HaFQatilow-}XzljOY(md{h;&vsk7;?s zEBC3W>P96;IJtAKVly9Fe7DCJPTqbVLMdtiaNU%(JIP(OMLyq_f`J2V0*fB}E}%yk zPCleHB=4u(vT>>9rb21gD`VIA{N?|Z_I^!25)+N7sZXbrd)p_Aj-RAWX_716nBqG( zucWU87|tc7^%EXaayf+c8TFaTdrKn+w+-Ga2*xV~VC>YZFQS%tuu__2++0P-RO|hM zj@la^hDUixA+Ony>QLVBaXZs4C`L$m^OWFnE+2`}x46AdEW9g`dI3ljA`*UUS=p$P zUMqarAQA}84X?c3FGGt?qd!LEoTl42%;Ehj7c6|B;EF!pl^L$;ApgQ*tdwc*p7p`_ zq3WI1@oEABSn*a}{`TyXJb6CNKV5Ix{+|yQz=YUe@iJ=Ll;SH15D%e_43~2%NhnMo zYV87d+p;ajpL5WVtnC#gU_JY^O+GRHZ*f=02PoRSCU)T6~O3rWC&x+&SuV;6uBlf?_a!!69X6NLebj=BJ38h zo?*P?QV>*@{gLRw-{tOn<>G@8ifuXela$*UWK+kA;dONz8iHg zHac6%56{?sT?%W1!O%2AH%u6{-iBw$7$#s`0hOQyYsJr-(DUS`C)67TZz5n|=>a&| zWPWMX{~~6)uYdIr=g0}ha~nw!Z-x6V+@(y40oeAui93&I>c9f>y~o*yJeHNdK%0Ds zmM#+GYS!YB=TCYdO7&Yd>ygH&Qv}gGRwMq{E@wU1L;+OnRtn2i{e=))m_zv~js84z z7b^A;;l*VlNxTIU@Z6aCCPyw34Bd+VeS3&j)Z?cL|6%*~TlHP=&S5T(~bJw)1QPoY>Rh4B`!J&ZBLKKCs%IP^kl6sD6zmi@!BXp#jtICr#kkw-X zjtf*4gArUnq=KT*dpr*Yx`-*O`8-?z_GC{mAvQGe=mn+tJ0NL3D-d~Rhv({)unc*N ztg#fc`I1xDJXdx$0RN>;hK%$XQCsQTIk=JWBuj=O_ru|!KY7Z!Dg*&VpRT{vNQS)@ z(2r5869a3elfBX(XM?bX8-~hi0%q6zo`0yeyLq8&P}Q^&%;tljl?Zfw!#YR!w7K^Q zx0g+!kWcT*DIJlW&VwyF#(IwxT0G!M}@Y+Av7w|j#e=lH0y|H)xo{8=u+otIa zA}WJ&*Iz^N<&8%wE{)RQuqFW!6ipoPLko`$hVvwg9k1hzs-@PLn*D~c&Xr=Hd=GkcbGc6J3|Xw}}(cG;sszkxJ~l2J(n_acJ7aOUZ`of6;DewhR&U zkXMoJ-oYAtNx1)EA;S{ie={8;K3o-~Q;Y<>#6O=lWf(iMYCKI+`x8|S67vCEeAV&F z*yMx!PD86{Ss&l7f;k(ETyI8Me z6_hw09zfn@kjsm^C015B*ko%upH6)GfNFGb02v9oA`MQscUTRj!NYo0^%_76L z-tC3yX6%{`D}^X-2eR2xv_4mm8TcsPf`D)PmS3cAY4;ZYq$ zgV)x-Sw9Mx3((W&PrW}e4kvB*ReRNDa6{?5zOn)C^s6I1NwbR4qB6H-0?f^bV@w8$ZSF67Ac?@RSDj zK9+hj;_Mt{+sOo??XE8bB>vssjKFOE)y;_7T>bKLgGT_RDI?t<^QAW+fb}Y>v+bx{ zkdC|}Io6@oarX|YHq+bcPyQIW?Z!boS~TsQqy+8ZdC>6^fgn#|(`2PwM!AJMS8C#r zjmdE7egjH}eZB{r5pBEqXfM%4CRRhca8WLQo&O*<^BZfo;}Nr$&2S(4%DygKKRJ#b1~;0UVo)98`Fbwmn93i z>oEBu6aIR$^L_IblL|@19aJ^_T?oR)D(FYH=hOM#FU<56G-?E4z-OuxbEx4Q8BD|Y zP=cPp*oF#k5c7~stuNeeeRc$if`1K1I(M&l7m8QOATUn$(rr0V*U#e}O1Y)6mza>K z+qCuh9T*-{*jv&F!H!(&4xEP9l|0R&b~B|iSKSu1(?neAJcufC2u$Iz?=RNU+q%TN zN6TPp2F8Zvr{*UUDpbt)w1ow|W~v+i7Ff#J8J)TAlOV-eMxhJ# zcN_4`br9xlbZS_9VKjH|KQ${HHs|gfSZH}KcBGx$JT+$&ZNb9p)Wq_K(A)z(1V-B& z(PwI@e#85oIP3OV9R-$!)i=gN+u`=aA`mt-#90^D?&#k6)B@bz6RlKzE!c=7Y0V;q z4JDV&t1Y}bA57ZtbcZlTp8fp%PkXTqQ$KmE4}jA9z+LMx7k%2xan}}vZW}GOZ5Kuj zw!UAeCv?Um8ep#fKRzkjZjdv?D<2yD(Kxd3q(kU6WwL3?O&z=WmyEqyv>ho_dL7rN`E!yfc|gidVX^}JDu(BtE#5W{x=0(GPgCWL;BqO4<9*b AbpQYW diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_016.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_016.png deleted file mode 100644 index ec6d474410ba825bbc7b3f5399b43c4d6bfb26e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5638 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 NfUOB?}4) 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 G!u}6AuP2cJ diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_020.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_020.png deleted file mode 100644 index 3ee32b1798bfe8f196c037dafc8b7936b5078795..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5778 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 R{x6k~y^V|Yb*q5W{{~(UFAe|z diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_025.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_025.png deleted file mode 100644 index 7087201f47d00e47aecdffd5e7e5a011b7bdbc9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3515 zcmeHK`!^eg9+xz29$PEA>WkZCTiaQSc#M{+q$rn_QbI^Y)=Zq1MJ3XB6=`d=l4xh% zAzbTpL{LSkN|d7U$lQ8#B^W{TP(&j)NpZ73;+}JV@IB{yzUO?;=X<{AeBa-n{QbOk z!w$oYjEr`B|I_1=krBZ1Z-(qLXcBL-=>`F!xp@ac43q--KGT4sdV8D;N+2vrpgES2 zrn`u6_&(F?=S&WKkr^;t_@Aw<^ni222U{`&{_KAAbcR1&a^}k}8=6dBE3Zv*)>2z! z{6Mjj#+N~-tDkG0njkUd9y3!vJLh?)8!?kX`JWpUo*3fj6Q2qY1Y&8ANyo6#h1FN{ z+@Nqcj%)xO1~9R&Ph{*xBI^f?06+&Iu;w=`>=*_^ECK*Q*Fd0P-FGkd9U#aE z1i~v0{`waq05ftI1pdebj&rEJWB~vI`#*&v{l7%kUkiKa4+Meo4{bZ%4)u0%ZMW0* z0NEay|GOnIwhw1)td3>V(^wsDP>$EkU_;R|Tg_dIc^{7t4J4kI4L5Yyj_Lip79K!@ zpdaZ$`lW_VELLsxl5bW2xFjb>J$bm8gn*b^tcc^bVp(d<4n&kKBZ5TSsaYePeSR=9 z1AbZ{6!ab!*pG3=0@>>y;%b?u4JejcDtqT*$9xI<$Ou}0ffGc;WF+rzUJ$}wh4kn~ z${gQ&mSbn`R<4YPWeM<-Xk(sIU(lO$g*DiC5yXc|!-a@!bx&AiGaN@a!lx%KjboX2 zMzcs8ltD{8l=orf&j#1V1@haLLD*4V$Eh(nJ2ZUxT|V%nesciFolxQ?RvlnciO`(5 zHFuanQ84p17^1HI$CJ(Ug=@SrL^QU_da{;|PyUg9^#NlK%_g-*FJNsADW>{4pBC4P zij*a-KWNd)uRIF`&iOg3G33dR#!Be#cSf%b5vQB%@q2g&&pM8c_qN4`*r2_LWG0%m zv{;BG?4i7GRttT)&@REQHXFi)w%EH9AeHrurdPyV_niWbl{TXjOu||{SZ2&)uy&Vw zx>cO^%^*1zs8||XjQnf7NB53g)yYN$AOY&ehSa9+*`e@UVNy#1Uv)naF$o#4x*v_3 zSE@(3@V1jrgl(bn+_^g1+uIB{qx2}65yNch*|DHh`<6DZ5Hf*^8x=X(X`&1xL=wtl z%WtL+s9jOz^t_dxVKN%`;TYT}=Ht3q9M@HaNjeQY1(iw!=5@N=WhFa7W0c(0)vSU{ zzngCc`!D()=+k0bzqvqwwMo7}*55#|G&zXDZ@W{5Gt8KzzY`Y0R%bOh-W0vCE(b;* zc*xisi0VbG*$uOV6~HtzM(%wwRMQaAY`D;A6F@9o|q^uJe`hgPPl_s?~5^<#7(-kYbVKgx|=N?8SL?xBpe4 zx|x|+R2W5|Ou+lVd28>d$^6FDp=KEGb@bvtx`aKdlW!_Eu3qV{N+}8NWcuRFy+s;&K40~36e7saKhcx!Bg^XDkBh=|eD|3am<${DSlki|<)xUZ=SWW4_$h+&u{tdqA$oW(?QC%B@(nV8Nhh!19SdqOE{P51 ze$j1$1W9 zea}gM&$6rYX4Rh&5SJ-MHPx2lGHRIHP=#&@=UUiazYgPNI7suUM_M6#b48n=Qd)h2 zCi!qDD4!Jg38hpRcAZACumUfvU9#=Wt0{-oZRiWcn)$+@VE(!+*l;?-isQfi=|yzX zvg*PKl={v{{Im0u?nJA9?e_Y5mNXY|~>Vn*&(sBAWgr`+r zY@Kfp8faQX?XZj*i>(-kKH}WE?oiJ8@w&+S%o-{7yG-$gw!Xo6g^2pId~`ImBjlDv zRMBE%a^k`-5i}h$JxmHYQf0xUoA>s3y?RxhsIf&MXm34S3rm~2>+Jdq9Hhv^V7B`) z&STDvKTaotM=b022=TJ;HLA+4T@~FiWtmohe5O-Wi2tC*J>y+Q$#r#3O~}spL;fcp zHsb>gjS^&wP76n(PBp6d^Xj}POsG?HyjI_j&OK@qiXr+Qr-6Z>g}rbb?bU=e0GMmA s_}-3z#1O3kOoxK@rM<}iBiJU`x$ChNVb(m&@QoRHpZD|NyAf~w7p{?RiU0rr diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_027.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_027.png deleted file mode 100644 index 43e73f48496f370f19d8dc0abb2bbd3fe4537cc1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5402 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 diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_031.png b/apps/desktop/desktop/src/main/resources/images/cathash/bg1/bg1_031.png deleted file mode 100644 index 8f48632d3037a5c2b9a99cd9d23f3b2f0fc2132c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5216 zcmeHL`8!na-)EXMwz3zpj$K4{+4l&MWg?7}HQOLYlo>+FmPFP{k})x5%RZB03gd&2 zWl)wO`%IQ$@I8H>>-p{Z2cGNtoa;K*Ip=+!>w3TM`~A9Kuh%&buh>~~vI(&<$m@W%n!vkJ+Q2}}f@ zWB)$?yB`1I;s4Km@L*+J;%k+lw(L+3`$wbw7whF{d&W~o9w{<>V;7jw^|#i=#P%=F zjy9ULBkf-}<~KtIVFmKOr$O6+jQw(A$JvRud&?3=xRKc&RVeblQ#(=KiSl%c!^d;7 zNB-uZ1uGXeSobhqb;UheGPky}$l3W)=*s8i2V}p)bHPbWgz?lepZrntb|`fxaN|3G2&>mg6FzVg+9&k`` zMxSM?VS1eFTpVMMVZ~%y)VU;Q05);xT!r`vN**2MX~+ zjeJ{^l&vB1aYrF~x?6_~oy} zraT+n2oQL=SENpDyGoz#4WQ;w}J^UJlDRSN%{?q== zvUA;>M5YZ2@@$mOa1?(~TWZ^+!{;U|mHTYOM;oZB15@viO{FX8@M5z%E0mtj&z$TU zkJr(~GAIVi=0x^=&TcxFIE*rz#%_bKcfQ9?)au!nIX!o^&hy$7pMVtekvvKEsgyo9GP?NP=WyB-oy*I%0H&b8ofMJFc0Cg;Dn*aVu+;&x3PBCbsJWE-(AX%CR_yUddow-Y% zSJb>OIHrZ_p~L0MzRX~pZakb3TBOgYwxX5O|9Vi^Yqu@GC7sT25q z^O9MULAphGg;bW-_T21Cbya4xhU$z5t;uEUInlj^>xO7EWx!@_;M>lra#jG-tUuQ@ ziubY9UycD}Fe1~XU0cc4ECFr{zEd-%C%RCw)H2X1$VD6yL9}$*_`!P=Y{g+i%^Hp8 z=en*0Tm(}iQ$j87tWd!QvM^pFvIf0mmvQ^1uxW))T(uH~L$O2W51YNuDQ;|+QFPz@ z^JRMai=AT?KiywCr)}`YJcQdaX%zJ4n9#Ow1x$bsm6DIrf}#EwW6{IU{2K1uor_zw zFcBYpkI?U_EKk3If@^@9f@HK(4xQ(g$2F_!KYGKl*Jiz-n5L=QxtVHBZaV+Qw=bj#@f!LTs_pEkE<()^)kDjRm z{z8Z;xW;-)I;Q)h%=amA)cs6V!$v}QrsxHNP=?AhZ|_)cl93mv#{9wL!p!_)$sEMR z9`5VfiK?UvfPAkV1EJxZ2?EZD4(EGn`4tzeARH1K2&dRct1n8U60pwJb-n@b$?vg> zsL(H&$mNXh*-V7rkiZ%k3DeFu#!fmItK4(}^><|=SKIz~EPvK#PwncgHcIcPWwyI-iy)rI@6SC65}!1vB}#IqHKfFUkgcBjj!o&>#hYm*oJsL`^QHT8kF zS68{P_eAfBKbjt{c{B(qlFD*TYzzDF6f_FNjW@I$CY@;q`SS4vMxN~jc{poX2p4uu z0&$hEFQ`Qd?8X}d73%#G{SdB^#$0hh-LkPP{ABl6lI9;Q0e)^5Lg(VIi&{eLm zOz#sIaMiKba!(qyDcnRL#!bwzqFJjfv4OxR^`de@YouojzNeP6+$y!huffhqy z;^5`Ld{SuWncD@wFVB3Hdp<2-Ey{ZLO9HRO-JgyhxlyI&7Y%QJAHfu;b~cX}du155 zkde+3UN=Kt4f0raqs9N1ShrSfyFf2ad1vXwFZ)yP`sXd2lJJIn?;~8) zSV!hR_ThXv&5K0<61Ox#!>@I|;-gsNp)WOngaHF>S{L|*xN(bixY(2@@vye+%70Sv z!UH5%;re=vuO5%*n%zaREC26u7N3e1L6`M}HiN*q08XGSyfHeuagl3wihul)qnh%l zPm|BPhDi#$TH?+5d|`=b-Qzu*7ZU%eR7WSw-hzz0*!Y@P8nNl|w>4`rQn18deee1c zah2*%@TXoK4nZeix1xezt}R=KyEJmupH|~yHB|Sfk9njqeEDrC%r(dUz4gEouKXPQ z=&RaM$_mcf3uu)+vJ_`6RntwH?!Iy;k7zG}{+*|5N>Ur_u&37+|7Jijl@~koa}iTB z^!Ta2CH@%;T0@~gG-JFmJ<#|TxS5x@521OQEJ2vnutVPAUVKfINL6Vrf0G&afp6yv z>*_vPKt=*8bdi75q0-}AyTR(T^Vv!ty*}l@i%+VvuU81l4Z=T=T${z?LSK7NuJt=#q#4X!Gs zwY?e2%o`*_v~e}U6+wSFspUp=7bWokBbSc91oGO{j(IX5#s=*0B4z9O#w4#taULCk z*3d9{<_fhxkdx@)VPRsLp96BFB>cM@Lqzax=Tv*ZhZ`y0~1PxvSdX=c3pCHN^rqE`HBdJ?FHuc6J?S zzedB8XwHS=#6bw)Il!%nnCR|)ddbVbia2?;;Kml4`YcdfIAc3VwrBEk?9~>T`Z^wv zz__r^lmBY&Lf2nezdnI@H|f?s!{{T1bOy|rAH5ec()0gSwn?)b*Q)yR3QToS8LfHE z0tm#h)DyN+Lq)gdZ`+J(qT*atrUjo0af`#!jYQRH?Zy7|kuaflez(5k+xOE~9B?li zAugu*Cv3^QhSOReG&h3?P-aqmJOAw!DfIA}MdOH5U;63oFYA;*Cl?Bd)8HUUT#GO5 z(f;J`tZoIH3Gt0c4z=Sp1%R>^F#R^pk#~`IllL5KW^Fy&c{h@5di_o$I7swxJu`&5 zxlv4utjIeKnTvIvnqm|l-Cf?m3DK~}<%9`7gp z!MegS%Dld1s7~3pZv5ncvh8KSB5~|m(Zn82AJ7@(-{ByTyoK?M97>kECeT_awyM8CY8$gHmiL*-vV(hd{6*1oOdB_|YHJ!;=LC7r9 zvzQ3F)A_`^CnFLocTQ1u9F#HlwLWZN=wn`EP=c;n%Gvw~Q$|r3L&RK z4fErz8tCD(ORqT>VqL0(=J%edml%bB4;bxDqmLSsg$Y)A93gybo$J z*z(Fgf__lL?$O+_ECe@>_?(Q;G#5mCk4P#xd_nU8A7-*inICF|d!)0%6JdC!qyKbe zu(tk5xpkJ_C=8#1J3m{u9zkKH75ZknomaW>4}+T&vDsg0vHgk4cB2^n4*xJ|`7Q5# zZ;Sf&85!6zZRs$T`YVlL0eCl@&*9b?Khj%-G5K-egZH*Lm&NZ;Q)@r~zFBr%Uw6Cu zEtKx~`a(zD8`Y2n< diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/00.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_000.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/00.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_001.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/01.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_001.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/01.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/02.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_002.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/02.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/03.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_003.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/03.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_004.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/04.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_004.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/04.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/05.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_005.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/05.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_006.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/06.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_006.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/06.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_007.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/07.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_007.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/07.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_008.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/08.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_008.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/08.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_009.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/09.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_009.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/09.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_010.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/10.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_010.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/10.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_011.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/11.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_011.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/11.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_012.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/12.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_012.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/12.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_013.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/13.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_013.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/13.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_014.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/14.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_014.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/14.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_015.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears0/15.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears0/ears0_015.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears0/15.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears1/00.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_000.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears1/00.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_001.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears1/01.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_001.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears1/01.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/ears1/02.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/ears1/ears1_002.png rename to apps/desktop/desktop/src/main/resources/images/cathash/ears1/02.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/00.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_000.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/00.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_001.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/01.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_001.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/01.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/02.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_002.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/02.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/03.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_003.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/03.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_004.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/04.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_004.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/04.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/05.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_005.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/05.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_006.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/06.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_006.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/06.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_007.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/07.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_007.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/07.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_008.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/08.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_008.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/08.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_009.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/09.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_009.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/09.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_010.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/10.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_010.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/10.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_011.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/11.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_011.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/11.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_012.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/12.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_012.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/12.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_013.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/13.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_013.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/13.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_014.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/14.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_014.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/14.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_015.png b/apps/desktop/desktop/src/main/resources/images/cathash/eyes0/15.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/eyes0/eyes0_015.png rename to apps/desktop/desktop/src/main/resources/images/cathash/eyes0/15.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/00.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_000.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/00.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_001.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/01.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_001.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/01.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/02.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_002.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/02.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/03.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_003.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/03.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_004.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/04.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_004.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/04.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_005.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/05.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_005.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/05.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_006.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/06.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_006.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/06.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_007.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/07.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_007.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/07.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_008.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/08.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_008.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/08.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_009.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/09.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_009.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/09.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_010.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/10.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_010.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/10.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_011.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/11.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_011.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/11.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_012.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/12.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_012.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/12.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_013.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/13.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_013.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/13.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_014.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/14.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_014.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/14.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_015.png b/apps/desktop/desktop/src/main/resources/images/cathash/face0/15.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face0/face0_015.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face0/15.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_000.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/00.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_000.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face1/00.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_001.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/01.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_001.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face1/01.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_002.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/02.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_002.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face1/02.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_003.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/03.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_003.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face1/03.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_004.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/04.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_004.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face1/04.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_009.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/05.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_009.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face1/05.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_010.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/06.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_010.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face1/06.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_011.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/07.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_011.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face1/07.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_012.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/08.png similarity index 100% rename from apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_012.png rename to apps/desktop/desktop/src/main/resources/images/cathash/face1/08.png diff --git a/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_006.png b/apps/desktop/desktop/src/main/resources/images/cathash/face1/face1_006.png deleted file mode 100644 index 57e81e040ed2f7213288ba322a9ca5368fff417b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2292 zcmeAS@N?(olHy`uVBq!ia0y~yVAKI&4mO}jWo=(6kYXuz@(kesf*OvL4h9B})t)Yn zAr*0NuP|~lFz_%Pyt)5Nk0;YeZO30tP+$SGhDQP;rG*wb+EREVkuBNN+cegTCEf(8*YSFxx% z97y;Hw0hLi(cm3TNTXS1v~U0;YeZO30tP+$SGhDQP;rG*wb+EREVkuBNN+cegTCEf(8*YSFxx% z97y;Hw0hLi(cm3TNTXS1v~U0;YeZO30tP+$SGhDQP;rG*wb+EREVkuBNN+cegTCEf(8*YSFxx% z97y;Hw0hLi(cm3TNTXS1v~U0;YeZO30tP+$SGhDQP;rG*wb+EREVkuBNN+cegTCEf(8*YSFxx% z97y;Hw0hLi(cm3TNTXS1v~U0;YeZO30tP+$SGhDQP;rG*wb+EREVkuBNN+cegTCEf(8*YSFxx% z97y;Hw0hLi(cm3TNTXS1v~U0;YeZO30tP+$SGhDQP;rG*wb+EREVkuBNN+cegTCEf(8*YSFxx% z97y;Hw0hLi(cm3TNTXS1v~U0;YeZO30tP+$SGhDQP;rG*wb+EREVkuBNN+cegTCEf(8*YSFxx% z97y;Hw0hLi(cm3TNTXS1v~U0;YeZO30tP+$SGhDQP;rG*wb+EREVkuBNN+cegTCEf(8*YSFxx% z97y;Hw0hLi(cm3TNTXS1v~U Date: Wed, 28 Feb 2024 07:31:31 +0700 Subject: [PATCH 08/28] Reduce visibility of methods. Move package scope method up. --- .../components/cathash/HandleFactory.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java index fcb19fa693..456512a006 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java @@ -22,10 +22,19 @@ @Slf4j public class HandleFactory { - public Handle calculateHandle(byte[] data) { + Handle calculateHandle(byte[] data) { return new Handle(calculateHandleValue(data)); } + static byte[] bucketValues(long handle) { + int buckets = getSize(handle); + byte[] values = new byte[buckets]; + for (int i = 0; i < buckets; i++) { + values[buckets - i - 1] = getNibbleAt(handle, i); + } + return values; + } + /** * Encodes an array of bytes (data) into a single long value, which serves as a compact, unique identifier * (or "handle") for a set of values. Each byte in the array represents a "nibble" (a 4-bit value), and the function @@ -34,7 +43,7 @@ public Handle calculateHandle(byte[] data) { * @param data The distributed hash over the buckets * @return val The composite handle value, which encodes both the sequence of nibbles and the length of the data array */ - static long calculateHandleValue(byte[] data) { + private static long calculateHandleValue(byte[] data) { // Check if the input array exceeds the maximum length of 14 bytes. // This limit ensures that the data can be encoded into a 64-bit long value without overflow. // Since 8 bits are reserved for length encoding only 56 bits can be used (14 * 4) @@ -71,7 +80,7 @@ static long calculateHandleValue(byte[] data) { return val; } - static byte getNibbleAt(long value, int index) { + private static byte getNibbleAt(long value, int index) { if (index < 0 || index > 15) { throw new IllegalArgumentException(String.format("index @%d", index)); } @@ -82,16 +91,7 @@ static byte getNibbleAt(long value, int index) { return (byte) (maskedValue >> index * 4); } - static int getSize(long value) { + private static int getSize(long value) { return getNibbleAt(value, 14); } - - public static byte[] bucketValues(long handle) { - int buckets = getSize(handle); - byte[] values = new byte[buckets]; - for (int i = 0; i < buckets; i++) { - values[buckets - i - 1] = getNibbleAt(handle, i); - } - return values; - } } From a6c1209905ccb678f6484a26c4a5e95fd9e8e721 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 07:52:21 +0700 Subject: [PATCH 09/28] Remove Handle and HandleFactory. Use an integer array instead of encoding the data into a long which added limitations and made the code more complicate. --- .../desktop/components/cathash/CatHash.java | 13 +-- .../components/cathash/Configuration.java | 13 +++ .../desktop/components/cathash/Handle.java | 50 ---------- .../components/cathash/HandleFactory.java | 97 ------------------- .../cathash/VariableSizeHashing.java | 13 +++ .../CreateProfileController.java | 4 +- 6 files changed, 32 insertions(+), 158 deletions(-) delete mode 100644 apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java delete mode 100644 apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index 41513e253e..f3458bd635 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -30,7 +30,6 @@ @Slf4j public class CatHash { private static final int MAX_CACHE_SIZE = 10000; - private static final HandleFactory HANDLE_FACTORY = new HandleFactory(); private static final ConcurrentHashMap CACHE = new ConcurrentHashMap<>(); public static Image getImage(byte[] pubKeyHash) { @@ -48,20 +47,16 @@ private static Image getImage(ByteArray pubKeyHash, boolean useCache) { BigInteger bigInteger = new BigInteger(pubKeyHash.getBytes()); Configuration configuration = new Configuration(); VariableSizeHashing hashing = new VariableSizeHashing(configuration.getBucketSizes()); - byte[] data = hashing.createBuckets(bigInteger); - Handle handle = HANDLE_FACTORY.calculateHandle(data); - Image image = imageForHandle(handle, configuration); + int[] integerBuckets = hashing.createIntegerBuckets(bigInteger); + Image image = imageFromIntegerBuckets(integerBuckets, configuration); if (useCache && CACHE.size() < MAX_CACHE_SIZE) { CACHE.put(pubKeyHash, image); } return image; } - private static Image imageForHandle(Handle handle, Configuration configuration) { - long ts = System.currentTimeMillis(); - byte[] bucketValues = handle.bucketValues(); - String[] paths = configuration.convertToFacetParts(bucketValues); - log.debug("Generated paths for CatHash image in {} ms", System.currentTimeMillis() - ts); // typically <1ms + private static Image imageFromIntegerBuckets(int[] integerBuckets, Configuration configuration) { + String[] paths = configuration.integerBucketsToPaths(integerBuckets); return ImageUtil.composeImage(paths, configuration.width(), configuration.height()); } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index 44b37be2de..10afde8a0c 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -56,6 +56,19 @@ public class Configuration { }; } + public String[] integerBucketsToPaths(int[] integerBuckets) { + if (integerBuckets.length != BUCKET_COUNT) { + throw new IllegalArgumentException(); + } + + String[] paths = new String[FACET_COUNT]; + for (int facet = 0; facet < FACET_COUNT; facet++) { + int bucketValue = integerBuckets[facet]; + paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], bucketValue); + } + return paths; + } + public String[] convertToFacetParts(byte[] bucketValues) { if (bucketValues.length != BUCKET_COUNT) { throw new IllegalArgumentException(); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java deleted file mode 100644 index 7c057457b4..0000000000 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.desktop.components.cathash; - -public final class Handle { - private final long value; - - Handle(long v) { - this.value = v; - } - - @Override - protected Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public boolean equals(Object o) { - return super.equals(o); - } - - @Override - public String toString() { - return String.format("%016X", value); - } - - @Override - public int hashCode() { - return (int) value; - } - - public byte[] bucketValues() { - return HandleFactory.bucketValues(this.value); - } -} diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java deleted file mode 100644 index 456512a006..0000000000 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.desktop.components.cathash; - -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class HandleFactory { - - Handle calculateHandle(byte[] data) { - return new Handle(calculateHandleValue(data)); - } - - static byte[] bucketValues(long handle) { - int buckets = getSize(handle); - byte[] values = new byte[buckets]; - for (int i = 0; i < buckets; i++) { - values[buckets - i - 1] = getNibbleAt(handle, i); - } - return values; - } - - /** - * Encodes an array of bytes (data) into a single long value, which serves as a compact, unique identifier - * (or "handle") for a set of values. Each byte in the array represents a "nibble" (a 4-bit value), and the function - * ensures that these values, along with the length of the data, are packed into the returned long. - * - * @param data The distributed hash over the buckets - * @return val The composite handle value, which encodes both the sequence of nibbles and the length of the data array - */ - private static long calculateHandleValue(byte[] data) { - // Check if the input array exceeds the maximum length of 14 bytes. - // This limit ensures that the data can be encoded into a 64-bit long value without overflow. - // Since 8 bits are reserved for length encoding only 56 bits can be used (14 * 4) - // This means that the maximum number of buckets that we can have is 14 - if (data.length > 14) { - throw new IllegalArgumentException(); - } - - long val = 0; - for (int i = 0; i < data.length; i++) { - int nibble = data[i]; - - // Validate that the current nibble does not exceed the maximum value of 15 (0xF), ensuring it's a - // valid 4-bit value. - // Each nibble uses 4 bits, therefore we can only encode 2^4 (0..15) possibilities - // (i.e. max size per bucket is 15, which represent 16 images) - if (nibble > 15) { // 0xf - throw new IllegalArgumentException(String.format("nibble to large @%d: %02X", i, nibble)); - } - - // Shift the current handle value 4 bits to the left to make room for the new nibble. This operation - // progressively builds up the handle value from its constituent nibbles. - val <<= 4; - - // Incorporate the current nibble into the lowest 4 bits of the handle value. - val |= nibble; - } - - // After processing all nibbles, encode the length of the data array into the handle value. - // This is achieved by shifting the length leftward by (14 * 4) bits (56 bits), which positions the length - // information in the upper 8 bits of the 64-bit long value. This ensures the length can be retrieved from the - // handle and also contributes to the uniqueness of the handle. - val |= ((long) data.length) << (14 * 4); - return val; - } - - private static byte getNibbleAt(long value, int index) { - if (index < 0 || index > 15) { - throw new IllegalArgumentException(String.format("index @%d", index)); - } - - long mask = (long) 0xf << (index * 4); - long maskedValue = (value & mask); - - return (byte) (maskedValue >> index * 4); - } - - private static int getSize(long value) { - return getNibbleAt(value, 14); - } -} diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java index e117b036b9..77bd03c477 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java @@ -67,4 +67,17 @@ public byte[] createBuckets(BigInteger hash) { return ret; } + + public int[] createIntegerBuckets(BigInteger input) { + int currentBucket = 0; + int[] result = new int[bucketSizes.length]; + while (currentBucket < bucketSizes.length) { + BigInteger[] divisorReminder = input.divideAndRemainder(BigInteger.valueOf(bucketSizes[currentBucket])); + input = divisorReminder[0]; + long reminder = divisorReminder[1].longValue(); + result[currentBucket] = (int) Math.abs(reminder % bucketSizes[currentBucket]); + currentBucket++; + } + return result; + } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java index 29b91ccd3e..8ab20d28c6 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java @@ -22,8 +22,8 @@ import bisq.desktop.common.threading.UIThread; import bisq.desktop.common.view.Controller; import bisq.desktop.common.view.Navigation; -import bisq.desktop.components.overlay.Popup; import bisq.desktop.components.cathash.CatHash; +import bisq.desktop.components.overlay.Popup; import bisq.desktop.overlay.OverlayController; import bisq.i18n.Res; import bisq.identity.IdentityService; @@ -154,7 +154,7 @@ private CompletableFuture createProofOfWork(byte[] pubKeyHash) { .thenApply(proofOfWork -> { long powDuration = System.currentTimeMillis() - ts; log.info("Proof of work creation completed after {} ms", powDuration); - createSimulatedDelay(powDuration); + //createSimulatedDelay(powDuration); UIThread.run(() -> { model.setProofOfWork(Optional.of(proofOfWork)); String nym = NymIdGenerator.fromHash(pubKeyHash); From 49c3101d71f6a1c5a23ff9680cd3fd3469f80dc9 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 07:54:04 +0700 Subject: [PATCH 10/28] Replace #ITEM# with NUM --- .../components/cathash/Configuration.java | 33 ++++++------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index 10afde8a0c..63066c72dc 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -44,15 +44,15 @@ public class Configuration { static { String postFix = ".png"; FACET_PATH_TEMPLATES = new String[]{ - ROOT + "bg0/#ITEM#" + postFix, - ROOT + "bg1/#ITEM#" + postFix, - ROOT + "ears0/#ITEM#" + postFix, - ROOT + "ears1/#ITEM#" + postFix, - ROOT + "face0/#ITEM#" + postFix, - ROOT + "face1/#ITEM#" + postFix, - ROOT + "eyes0/#ITEM#" + postFix, - ROOT + "nose0/#ITEM#" + postFix, - ROOT + "whiskers0/#ITEM#" + postFix, + ROOT + "bg0/NUM" + postFix, + ROOT + "bg1/NUM" + postFix, + ROOT + "ears0/NUM" + postFix, + ROOT + "ears1/NUM" + postFix, + ROOT + "face0/NUM" + postFix, + ROOT + "face1/NUM" + postFix, + ROOT + "eyes0/NUM" + postFix, + ROOT + "nose0/NUM" + postFix, + ROOT + "whiskers0/NUM" + postFix, }; } @@ -69,21 +69,8 @@ public String[] integerBucketsToPaths(int[] integerBuckets) { return paths; } - public String[] convertToFacetParts(byte[] bucketValues) { - if (bucketValues.length != BUCKET_COUNT) { - throw new IllegalArgumentException(); - } - - String[] paths = new String[FACET_COUNT]; - for (int facet = 0; facet < FACET_COUNT; facet++) { - int bucketValue = bucketValues[facet]; - paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], bucketValue); - } - return paths; - } - private String generatePath(String facetPathTemplate, int bucketValue) { - return facetPathTemplate.replaceAll("#ITEM#", String.format("%02d", bucketValue)); + return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); } public byte[] getBucketSizes() { From 967cc7620e8e7cdf060e01db82440211a44166c8 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 07:58:20 +0700 Subject: [PATCH 11/28] Reduce visibility of methods. Move package scope method up. Use SIZE instead of width()/height() methods --- .../bisq/desktop/components/cathash/CatHash.java | 3 ++- .../components/cathash/Configuration.java | 16 ++++------------ 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index f3458bd635..46e09544ad 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -29,6 +29,7 @@ // Number of combinations: 3 * 15 * 15 * 15 * 15 * 15 * 15 = 34171875 (2 ^ 25) @Slf4j public class CatHash { + private static final int SIZE = 300; private static final int MAX_CACHE_SIZE = 10000; private static final ConcurrentHashMap CACHE = new ConcurrentHashMap<>(); @@ -57,6 +58,6 @@ private static Image getImage(ByteArray pubKeyHash, boolean useCache) { private static Image imageFromIntegerBuckets(int[] integerBuckets, Configuration configuration) { String[] paths = configuration.integerBucketsToPaths(integerBuckets); - return ImageUtil.composeImage(paths, configuration.width(), configuration.height()); + return ImageUtil.composeImage(paths, SIZE, SIZE); } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index 63066c72dc..734c227459 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -56,7 +56,7 @@ public class Configuration { }; } - public String[] integerBucketsToPaths(int[] integerBuckets) { + String[] integerBucketsToPaths(int[] integerBuckets) { if (integerBuckets.length != BUCKET_COUNT) { throw new IllegalArgumentException(); } @@ -69,19 +69,11 @@ public String[] integerBucketsToPaths(int[] integerBuckets) { return paths; } - private String generatePath(String facetPathTemplate, int bucketValue) { - return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); - } - - public byte[] getBucketSizes() { + byte[] getBucketSizes() { return BUCKET_SIZES; } - public int width() { - return 300; - } - - public int height() { - return 300; + private String generatePath(String facetPathTemplate, int bucketValue) { + return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); } } From 4d344c814fec008a699805a234ef3aa43e23ec94 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 08:20:05 +0700 Subject: [PATCH 12/28] Remove VariableSizeHashing Add BucketGenerator Increase *_COUNT values by 1 (was wrong before to use max index) --- ...eSizeHashing.java => BucketGenerator.java} | 62 +++++++------------ .../desktop/components/cathash/CatHash.java | 14 +++-- .../components/cathash/Configuration.java | 49 +++++++-------- 3 files changed, 51 insertions(+), 74 deletions(-) rename apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/{VariableSizeHashing.java => BucketGenerator.java} (50%) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java similarity index 50% rename from apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java rename to apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java index 77bd03c477..525a6da5f2 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java @@ -18,28 +18,22 @@ package bisq.desktop.components.cathash; import java.math.BigInteger; -import java.util.UUID; -/** - * "Hash" a big integer (expected: hash or uuid) into buckets. The goal is to deterministically - * "repack" the randomness of the hash into the bucket. - *

- * Each bucket is defined by a maximum value. The implementation guarantees that the values in bucket n is in the - * range 0..(bucketSize[n]-1). - */ -public class VariableSizeHashing { - private final byte[] bucketSizes; - - public VariableSizeHashing(byte[] bucketSizes) { - this.bucketSizes = bucketSizes; - } - - static BigInteger uuidToBigInteger(UUID uuid) { - return BigInteger.valueOf(uuid.getMostSignificantBits()).shiftLeft(64).add(BigInteger.valueOf(uuid.getLeastSignificantBits())); - } +public class BucketGenerator { + static String[] integerBucketsToPaths(int[] integerBuckets, + int bucketCount, + int facetCount, + String[] facetPathTemplates) { + if (integerBuckets.length != bucketCount) { + throw new IllegalArgumentException(); + } - public byte[] createBuckets(UUID uuid) { - return createBuckets(uuidToBigInteger(uuid)); + String[] paths = new String[facetCount]; + for (int facet = 0; facet < facetCount; facet++) { + int bucketValue = integerBuckets[facet]; + paths[facet] = generatePath(facetPathTemplates[facet], bucketValue); + } + return paths; } /** @@ -47,28 +41,10 @@ public byte[] createBuckets(UUID uuid) { *

* Assumption: the value of hash is (much) larger than `16^bucketSizes.length` and uniformly distributed (random) * - * @param hash Any BigInteger that is to be split up in buckets according to the bucket configuration #bucketSizes. + * @param input Any BigInteger that is to be split up in buckets according to the bucket configuration #bucketSizes. * @return buckets The distributed hash */ - public byte[] createBuckets(BigInteger hash) { - int currentBucket = 0; - byte[] ret = new byte[this.bucketSizes.length]; - - while (currentBucket < this.bucketSizes.length) { - BigInteger[] divisorReminder = hash.divideAndRemainder(BigInteger.valueOf(bucketSizes[currentBucket])); - - hash = divisorReminder[0]; - long reminder = divisorReminder[1].longValue(); - - ret[currentBucket] = (byte) Math.abs(reminder % bucketSizes[currentBucket]); - - currentBucket += 1; - } - - return ret; - } - - public int[] createIntegerBuckets(BigInteger input) { + static int[] createBuckets(BigInteger input, int[] bucketSizes) { int currentBucket = 0; int[] result = new int[bucketSizes.length]; while (currentBucket < bucketSizes.length) { @@ -80,4 +56,8 @@ public int[] createIntegerBuckets(BigInteger input) { } return result; } -} + + private static String generatePath(String facetPathTemplate, int bucketValue) { + return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); + } +} \ No newline at end of file diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index 46e09544ad..5b2be5a5c4 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -46,18 +46,20 @@ private static Image getImage(ByteArray pubKeyHash, boolean useCache) { return CACHE.get(pubKeyHash); } BigInteger bigInteger = new BigInteger(pubKeyHash.getBytes()); - Configuration configuration = new Configuration(); - VariableSizeHashing hashing = new VariableSizeHashing(configuration.getBucketSizes()); - int[] integerBuckets = hashing.createIntegerBuckets(bigInteger); - Image image = imageFromIntegerBuckets(integerBuckets, configuration); + int[] buckets = BucketGenerator.createBuckets(bigInteger, Configuration.getBucketSizes()); + Image image = imageFromBuckets(buckets); if (useCache && CACHE.size() < MAX_CACHE_SIZE) { CACHE.put(pubKeyHash, image); } return image; } - private static Image imageFromIntegerBuckets(int[] integerBuckets, Configuration configuration) { - String[] paths = configuration.integerBucketsToPaths(integerBuckets); + + private static Image imageFromBuckets(int[] integerBuckets) { + String[] paths = BucketGenerator.integerBucketsToPaths(integerBuckets, + Configuration.getBucketCount(), + Configuration.getFacetCount(), + Configuration.getFacetPathTemplates()); return ImageUtil.composeImage(paths, SIZE, SIZE); } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index 734c227459..abac55e6fe 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -21,25 +21,25 @@ @Slf4j public class Configuration { - private final static String ROOT = ""; + private static final String ROOT = ""; - private static final int BG0_COUNT = 15; - private static final int BG1_COUNT = 15; - private static final int EARS0_COUNT = 15; - private static final int EARS1_COUNT = 2; - private static final int FACE0_COUNT = 15; - private static final int FACE1_COUNT = 8; - private static final int EYES0_COUNT = 15; - private static final int NOSE0_COUNT = 5; - private static final int WHISKERS0_COUNT = 6; + private static final int BG0_COUNT = 16; + private static final int BG1_COUNT = 16; + private static final int EARS0_COUNT = 16; + private static final int EARS1_COUNT = 3; + private static final int FACE0_COUNT = 16; + private static final int FACE1_COUNT = 9; + private static final int EYES0_COUNT = 16; + private static final int NOSE0_COUNT = 6; + private static final int WHISKERS0_COUNT = 7; - private final static int BUCKET_COUNT = 9; - private final static int FACET_COUNT = 9; + private static final int BUCKET_COUNT = 9; + private static final int FACET_COUNT = 9; - private final static byte[] BUCKET_SIZES = new byte[]{BG0_COUNT, BG1_COUNT, EARS0_COUNT, EARS1_COUNT, FACE0_COUNT, + private static final int[] BUCKET_SIZES = new int[]{BG0_COUNT, BG1_COUNT, EARS0_COUNT, EARS1_COUNT, FACE0_COUNT, FACE1_COUNT, EYES0_COUNT, NOSE0_COUNT, WHISKERS0_COUNT}; - private final static String[] FACET_PATH_TEMPLATES; + private static final String[] FACET_PATH_TEMPLATES; static { String postFix = ".png"; @@ -56,24 +56,19 @@ public class Configuration { }; } - String[] integerBucketsToPaths(int[] integerBuckets) { - if (integerBuckets.length != BUCKET_COUNT) { - throw new IllegalArgumentException(); - } + static int getBucketCount() { + return BUCKET_COUNT; + } - String[] paths = new String[FACET_COUNT]; - for (int facet = 0; facet < FACET_COUNT; facet++) { - int bucketValue = integerBuckets[facet]; - paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], bucketValue); - } - return paths; + static int getFacetCount() { + return FACET_COUNT; } - byte[] getBucketSizes() { + static int[] getBucketSizes() { return BUCKET_SIZES; } - private String generatePath(String facetPathTemplate, int bucketValue) { - return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); + static String[] getFacetPathTemplates() { + return FACET_PATH_TEMPLATES; } } From ff591306d969064a8ba002c12b57639c1cd2d728 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 09:06:02 +0700 Subject: [PATCH 13/28] Cleanups, Renamings --- .../{Configuration.java => BucketConfig.java} | 51 +++++++-------- .../components/cathash/BucketEncoder.java | 53 ++++++++++++++++ .../components/cathash/BucketGenerator.java | 63 ------------------- .../desktop/components/cathash/CatHash.java | 17 ++--- .../main/java/bisq/common/util/MathUtils.java | 4 ++ 5 files changed, 87 insertions(+), 101 deletions(-) rename apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/{Configuration.java => BucketConfig.java} (60%) create mode 100644 apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketEncoder.java delete mode 100644 apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketConfig.java similarity index 60% rename from apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java rename to apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketConfig.java index abac55e6fe..a63f008649 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketConfig.java @@ -17,11 +17,12 @@ package bisq.desktop.components.cathash; +import bisq.common.util.MathUtils; import lombok.extern.slf4j.Slf4j; @Slf4j -public class Configuration { - private static final String ROOT = ""; +public class BucketConfig { + static final String DIGIT = "#"; private static final int BG0_COUNT = 16; private static final int BG1_COUNT = 16; @@ -33,42 +34,42 @@ public class Configuration { private static final int NOSE0_COUNT = 6; private static final int WHISKERS0_COUNT = 7; - private static final int BUCKET_COUNT = 9; - private static final int FACET_COUNT = 9; - private static final int[] BUCKET_SIZES = new int[]{BG0_COUNT, BG1_COUNT, EARS0_COUNT, EARS1_COUNT, FACE0_COUNT, FACE1_COUNT, EYES0_COUNT, NOSE0_COUNT, WHISKERS0_COUNT}; - private static final String[] FACET_PATH_TEMPLATES; + private static final String[] PATH_TEMPLATES; static { String postFix = ".png"; - FACET_PATH_TEMPLATES = new String[]{ - ROOT + "bg0/NUM" + postFix, - ROOT + "bg1/NUM" + postFix, - ROOT + "ears0/NUM" + postFix, - ROOT + "ears1/NUM" + postFix, - ROOT + "face0/NUM" + postFix, - ROOT + "face1/NUM" + postFix, - ROOT + "eyes0/NUM" + postFix, - ROOT + "nose0/NUM" + postFix, - ROOT + "whiskers0/NUM" + postFix, + PATH_TEMPLATES = new String[]{ + "bg0/" + DIGIT + postFix, + "bg1/" + DIGIT + postFix, + "ears0/" + DIGIT + postFix, + "ears1/" + DIGIT + postFix, + "face0/" + DIGIT + postFix, + "face1/" + DIGIT + postFix, + "eyes0/" + DIGIT + postFix, + "nose0/" + DIGIT + postFix, + "whiskers0/" + DIGIT + postFix }; - } - - static int getBucketCount() { - return BUCKET_COUNT; - } - static int getFacetCount() { - return FACET_COUNT; + long numCombinations = getNumCombinations(); + log.info("Number of combinations: 2^{} = {}", MathUtils.getLog2(numCombinations), numCombinations); } static int[] getBucketSizes() { return BUCKET_SIZES; } - static String[] getFacetPathTemplates() { - return FACET_PATH_TEMPLATES; + static String[] getPathTemplates() { + return PATH_TEMPLATES; + } + + static long getNumCombinations() { + long result = 1; + for (int bucketSize : BUCKET_SIZES) { + result *= bucketSize; + } + return result; } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketEncoder.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketEncoder.java new file mode 100644 index 0000000000..d6288e546e --- /dev/null +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketEncoder.java @@ -0,0 +1,53 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.desktop.components.cathash; + +import java.math.BigInteger; + +public class BucketEncoder { + /** + * @param input A BigInteger input that is to be split up deterministically in buckets according to the bucketSizes array. + * @return buckets + */ + static int[] encode(BigInteger input, int[] bucketSizes) { + int currentBucket = 0; + int[] result = new int[bucketSizes.length]; + while (currentBucket < bucketSizes.length) { + int bucketSize = bucketSizes[currentBucket]; + BigInteger[] divisorReminder = input.divideAndRemainder(BigInteger.valueOf(bucketSize)); + input = divisorReminder[0]; + long reminder = divisorReminder[1].longValue(); + result[currentBucket] = (int) Math.abs(reminder % bucketSize); + currentBucket++; + } + return result; + } + + static String[] toPaths(int[] buckets, String[] pathTemplates) { + String[] paths = new String[buckets.length]; + for (int facet = 0; facet < buckets.length; facet++) { + int bucketValue = buckets[facet]; + paths[facet] = generatePath(pathTemplates[facet], bucketValue); + } + return paths; + } + + private static String generatePath(String pathTemplate, int index) { + return pathTemplate.replaceAll(BucketConfig.DIGIT, String.format("%02d", index)); + } +} \ No newline at end of file diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java deleted file mode 100644 index 525a6da5f2..0000000000 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.desktop.components.cathash; - -import java.math.BigInteger; - -public class BucketGenerator { - static String[] integerBucketsToPaths(int[] integerBuckets, - int bucketCount, - int facetCount, - String[] facetPathTemplates) { - if (integerBuckets.length != bucketCount) { - throw new IllegalArgumentException(); - } - - String[] paths = new String[facetCount]; - for (int facet = 0; facet < facetCount; facet++) { - int bucketValue = integerBuckets[facet]; - paths[facet] = generatePath(facetPathTemplates[facet], bucketValue); - } - return paths; - } - - /** - * Takes the hash value and distributes it over the buckets. - *

- * Assumption: the value of hash is (much) larger than `16^bucketSizes.length` and uniformly distributed (random) - * - * @param input Any BigInteger that is to be split up in buckets according to the bucket configuration #bucketSizes. - * @return buckets The distributed hash - */ - static int[] createBuckets(BigInteger input, int[] bucketSizes) { - int currentBucket = 0; - int[] result = new int[bucketSizes.length]; - while (currentBucket < bucketSizes.length) { - BigInteger[] divisorReminder = input.divideAndRemainder(BigInteger.valueOf(bucketSizes[currentBucket])); - input = divisorReminder[0]; - long reminder = divisorReminder[1].longValue(); - result[currentBucket] = (int) Math.abs(reminder % bucketSizes[currentBucket]); - currentBucket++; - } - return result; - } - - private static String generatePath(String facetPathTemplate, int bucketValue) { - return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); - } -} \ No newline at end of file diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index 5b2be5a5c4..ceb0849b1a 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -26,7 +26,6 @@ import java.util.concurrent.ConcurrentHashMap; // Derived from https://github.com/neuhalje/android-robohash -// Number of combinations: 3 * 15 * 15 * 15 * 15 * 15 * 15 = 34171875 (2 ^ 25) @Slf4j public class CatHash { private static final int SIZE = 300; @@ -45,21 +44,13 @@ private static Image getImage(ByteArray pubKeyHash, boolean useCache) { if (useCache && CACHE.containsKey(pubKeyHash)) { return CACHE.get(pubKeyHash); } - BigInteger bigInteger = new BigInteger(pubKeyHash.getBytes()); - int[] buckets = BucketGenerator.createBuckets(bigInteger, Configuration.getBucketSizes()); - Image image = imageFromBuckets(buckets); + BigInteger input = new BigInteger(pubKeyHash.getBytes()); + int[] buckets = BucketEncoder.encode(input, BucketConfig.getBucketSizes()); + String[] paths = BucketEncoder.toPaths(buckets, BucketConfig.getPathTemplates()); + Image image = ImageUtil.composeImage(paths, SIZE, SIZE); if (useCache && CACHE.size() < MAX_CACHE_SIZE) { CACHE.put(pubKeyHash, image); } return image; } - - - private static Image imageFromBuckets(int[] integerBuckets) { - String[] paths = BucketGenerator.integerBucketsToPaths(integerBuckets, - Configuration.getBucketCount(), - Configuration.getFacetCount(), - Configuration.getFacetPathTemplates()); - return ImageUtil.composeImage(paths, SIZE, SIZE); - } } diff --git a/common/src/main/java/bisq/common/util/MathUtils.java b/common/src/main/java/bisq/common/util/MathUtils.java index da046d4177..16428cf4ec 100644 --- a/common/src/main/java/bisq/common/util/MathUtils.java +++ b/common/src/main/java/bisq/common/util/MathUtils.java @@ -108,4 +108,8 @@ public static long bounded(long lowerBound, long upperBound, long value) { "lowerBound must not be larger than upperBound"); return Math.min(Math.max(value, lowerBound), upperBound); } + + public static double getLog2(long value) { + return Math.log(value) / Math.log(2); + } } From a3d3d214889e267381a66130466dfa9eab552777 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 19:18:54 +0700 Subject: [PATCH 14/28] Remove comment for dev testing --- .../onboarding/create_profile/CreateProfileController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java index 8ab20d28c6..27b3ab1ac1 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java @@ -154,7 +154,7 @@ private CompletableFuture createProofOfWork(byte[] pubKeyHash) { .thenApply(proofOfWork -> { long powDuration = System.currentTimeMillis() - ts; log.info("Proof of work creation completed after {} ms", powDuration); - //createSimulatedDelay(powDuration); + createSimulatedDelay(powDuration); UIThread.run(() -> { model.setProofOfWork(Optional.of(proofOfWork)); String nym = NymIdGenerator.fromHash(pubKeyHash); From 9754d4d70f8eebc0ca7f218f7713228fc425553f Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 07:31:31 +0700 Subject: [PATCH 15/28] Reduce visibility of methods. Move package scope method up. --- .../components/cathash/HandleFactory.java | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java index fcb19fa693..456512a006 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java @@ -22,10 +22,19 @@ @Slf4j public class HandleFactory { - public Handle calculateHandle(byte[] data) { + Handle calculateHandle(byte[] data) { return new Handle(calculateHandleValue(data)); } + static byte[] bucketValues(long handle) { + int buckets = getSize(handle); + byte[] values = new byte[buckets]; + for (int i = 0; i < buckets; i++) { + values[buckets - i - 1] = getNibbleAt(handle, i); + } + return values; + } + /** * Encodes an array of bytes (data) into a single long value, which serves as a compact, unique identifier * (or "handle") for a set of values. Each byte in the array represents a "nibble" (a 4-bit value), and the function @@ -34,7 +43,7 @@ public Handle calculateHandle(byte[] data) { * @param data The distributed hash over the buckets * @return val The composite handle value, which encodes both the sequence of nibbles and the length of the data array */ - static long calculateHandleValue(byte[] data) { + private static long calculateHandleValue(byte[] data) { // Check if the input array exceeds the maximum length of 14 bytes. // This limit ensures that the data can be encoded into a 64-bit long value without overflow. // Since 8 bits are reserved for length encoding only 56 bits can be used (14 * 4) @@ -71,7 +80,7 @@ static long calculateHandleValue(byte[] data) { return val; } - static byte getNibbleAt(long value, int index) { + private static byte getNibbleAt(long value, int index) { if (index < 0 || index > 15) { throw new IllegalArgumentException(String.format("index @%d", index)); } @@ -82,16 +91,7 @@ static byte getNibbleAt(long value, int index) { return (byte) (maskedValue >> index * 4); } - static int getSize(long value) { + private static int getSize(long value) { return getNibbleAt(value, 14); } - - public static byte[] bucketValues(long handle) { - int buckets = getSize(handle); - byte[] values = new byte[buckets]; - for (int i = 0; i < buckets; i++) { - values[buckets - i - 1] = getNibbleAt(handle, i); - } - return values; - } } From f1870ec863b9033ea05113d52d8c4c49f58626f0 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 07:52:21 +0700 Subject: [PATCH 16/28] Remove Handle and HandleFactory. Use an integer array instead of encoding the data into a long which added limitations and made the code more complicate. --- .../desktop/components/cathash/CatHash.java | 13 +-- .../components/cathash/Configuration.java | 13 +++ .../desktop/components/cathash/Handle.java | 50 ---------- .../components/cathash/HandleFactory.java | 97 ------------------- .../cathash/VariableSizeHashing.java | 13 +++ .../CreateProfileController.java | 4 +- 6 files changed, 32 insertions(+), 158 deletions(-) delete mode 100644 apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java delete mode 100644 apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index 41513e253e..f3458bd635 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -30,7 +30,6 @@ @Slf4j public class CatHash { private static final int MAX_CACHE_SIZE = 10000; - private static final HandleFactory HANDLE_FACTORY = new HandleFactory(); private static final ConcurrentHashMap CACHE = new ConcurrentHashMap<>(); public static Image getImage(byte[] pubKeyHash) { @@ -48,20 +47,16 @@ private static Image getImage(ByteArray pubKeyHash, boolean useCache) { BigInteger bigInteger = new BigInteger(pubKeyHash.getBytes()); Configuration configuration = new Configuration(); VariableSizeHashing hashing = new VariableSizeHashing(configuration.getBucketSizes()); - byte[] data = hashing.createBuckets(bigInteger); - Handle handle = HANDLE_FACTORY.calculateHandle(data); - Image image = imageForHandle(handle, configuration); + int[] integerBuckets = hashing.createIntegerBuckets(bigInteger); + Image image = imageFromIntegerBuckets(integerBuckets, configuration); if (useCache && CACHE.size() < MAX_CACHE_SIZE) { CACHE.put(pubKeyHash, image); } return image; } - private static Image imageForHandle(Handle handle, Configuration configuration) { - long ts = System.currentTimeMillis(); - byte[] bucketValues = handle.bucketValues(); - String[] paths = configuration.convertToFacetParts(bucketValues); - log.debug("Generated paths for CatHash image in {} ms", System.currentTimeMillis() - ts); // typically <1ms + private static Image imageFromIntegerBuckets(int[] integerBuckets, Configuration configuration) { + String[] paths = configuration.integerBucketsToPaths(integerBuckets); return ImageUtil.composeImage(paths, configuration.width(), configuration.height()); } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index 44b37be2de..10afde8a0c 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -56,6 +56,19 @@ public class Configuration { }; } + public String[] integerBucketsToPaths(int[] integerBuckets) { + if (integerBuckets.length != BUCKET_COUNT) { + throw new IllegalArgumentException(); + } + + String[] paths = new String[FACET_COUNT]; + for (int facet = 0; facet < FACET_COUNT; facet++) { + int bucketValue = integerBuckets[facet]; + paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], bucketValue); + } + return paths; + } + public String[] convertToFacetParts(byte[] bucketValues) { if (bucketValues.length != BUCKET_COUNT) { throw new IllegalArgumentException(); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java deleted file mode 100644 index 7c057457b4..0000000000 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Handle.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.desktop.components.cathash; - -public final class Handle { - private final long value; - - Handle(long v) { - this.value = v; - } - - @Override - protected Object clone() throws CloneNotSupportedException { - return super.clone(); - } - - @Override - public boolean equals(Object o) { - return super.equals(o); - } - - @Override - public String toString() { - return String.format("%016X", value); - } - - @Override - public int hashCode() { - return (int) value; - } - - public byte[] bucketValues() { - return HandleFactory.bucketValues(this.value); - } -} diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java deleted file mode 100644 index 456512a006..0000000000 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/HandleFactory.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.desktop.components.cathash; - -import lombok.extern.slf4j.Slf4j; - -@Slf4j -public class HandleFactory { - - Handle calculateHandle(byte[] data) { - return new Handle(calculateHandleValue(data)); - } - - static byte[] bucketValues(long handle) { - int buckets = getSize(handle); - byte[] values = new byte[buckets]; - for (int i = 0; i < buckets; i++) { - values[buckets - i - 1] = getNibbleAt(handle, i); - } - return values; - } - - /** - * Encodes an array of bytes (data) into a single long value, which serves as a compact, unique identifier - * (or "handle") for a set of values. Each byte in the array represents a "nibble" (a 4-bit value), and the function - * ensures that these values, along with the length of the data, are packed into the returned long. - * - * @param data The distributed hash over the buckets - * @return val The composite handle value, which encodes both the sequence of nibbles and the length of the data array - */ - private static long calculateHandleValue(byte[] data) { - // Check if the input array exceeds the maximum length of 14 bytes. - // This limit ensures that the data can be encoded into a 64-bit long value without overflow. - // Since 8 bits are reserved for length encoding only 56 bits can be used (14 * 4) - // This means that the maximum number of buckets that we can have is 14 - if (data.length > 14) { - throw new IllegalArgumentException(); - } - - long val = 0; - for (int i = 0; i < data.length; i++) { - int nibble = data[i]; - - // Validate that the current nibble does not exceed the maximum value of 15 (0xF), ensuring it's a - // valid 4-bit value. - // Each nibble uses 4 bits, therefore we can only encode 2^4 (0..15) possibilities - // (i.e. max size per bucket is 15, which represent 16 images) - if (nibble > 15) { // 0xf - throw new IllegalArgumentException(String.format("nibble to large @%d: %02X", i, nibble)); - } - - // Shift the current handle value 4 bits to the left to make room for the new nibble. This operation - // progressively builds up the handle value from its constituent nibbles. - val <<= 4; - - // Incorporate the current nibble into the lowest 4 bits of the handle value. - val |= nibble; - } - - // After processing all nibbles, encode the length of the data array into the handle value. - // This is achieved by shifting the length leftward by (14 * 4) bits (56 bits), which positions the length - // information in the upper 8 bits of the 64-bit long value. This ensures the length can be retrieved from the - // handle and also contributes to the uniqueness of the handle. - val |= ((long) data.length) << (14 * 4); - return val; - } - - private static byte getNibbleAt(long value, int index) { - if (index < 0 || index > 15) { - throw new IllegalArgumentException(String.format("index @%d", index)); - } - - long mask = (long) 0xf << (index * 4); - long maskedValue = (value & mask); - - return (byte) (maskedValue >> index * 4); - } - - private static int getSize(long value) { - return getNibbleAt(value, 14); - } -} diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java index e117b036b9..77bd03c477 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java @@ -67,4 +67,17 @@ public byte[] createBuckets(BigInteger hash) { return ret; } + + public int[] createIntegerBuckets(BigInteger input) { + int currentBucket = 0; + int[] result = new int[bucketSizes.length]; + while (currentBucket < bucketSizes.length) { + BigInteger[] divisorReminder = input.divideAndRemainder(BigInteger.valueOf(bucketSizes[currentBucket])); + input = divisorReminder[0]; + long reminder = divisorReminder[1].longValue(); + result[currentBucket] = (int) Math.abs(reminder % bucketSizes[currentBucket]); + currentBucket++; + } + return result; + } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java index 29b91ccd3e..8ab20d28c6 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java @@ -22,8 +22,8 @@ import bisq.desktop.common.threading.UIThread; import bisq.desktop.common.view.Controller; import bisq.desktop.common.view.Navigation; -import bisq.desktop.components.overlay.Popup; import bisq.desktop.components.cathash.CatHash; +import bisq.desktop.components.overlay.Popup; import bisq.desktop.overlay.OverlayController; import bisq.i18n.Res; import bisq.identity.IdentityService; @@ -154,7 +154,7 @@ private CompletableFuture createProofOfWork(byte[] pubKeyHash) { .thenApply(proofOfWork -> { long powDuration = System.currentTimeMillis() - ts; log.info("Proof of work creation completed after {} ms", powDuration); - createSimulatedDelay(powDuration); + //createSimulatedDelay(powDuration); UIThread.run(() -> { model.setProofOfWork(Optional.of(proofOfWork)); String nym = NymIdGenerator.fromHash(pubKeyHash); From c77eb234f41ee90666e9bfffc20383987c776314 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 07:54:04 +0700 Subject: [PATCH 17/28] Replace #ITEM# with NUM --- .../components/cathash/Configuration.java | 33 ++++++------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index 10afde8a0c..63066c72dc 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -44,15 +44,15 @@ public class Configuration { static { String postFix = ".png"; FACET_PATH_TEMPLATES = new String[]{ - ROOT + "bg0/#ITEM#" + postFix, - ROOT + "bg1/#ITEM#" + postFix, - ROOT + "ears0/#ITEM#" + postFix, - ROOT + "ears1/#ITEM#" + postFix, - ROOT + "face0/#ITEM#" + postFix, - ROOT + "face1/#ITEM#" + postFix, - ROOT + "eyes0/#ITEM#" + postFix, - ROOT + "nose0/#ITEM#" + postFix, - ROOT + "whiskers0/#ITEM#" + postFix, + ROOT + "bg0/NUM" + postFix, + ROOT + "bg1/NUM" + postFix, + ROOT + "ears0/NUM" + postFix, + ROOT + "ears1/NUM" + postFix, + ROOT + "face0/NUM" + postFix, + ROOT + "face1/NUM" + postFix, + ROOT + "eyes0/NUM" + postFix, + ROOT + "nose0/NUM" + postFix, + ROOT + "whiskers0/NUM" + postFix, }; } @@ -69,21 +69,8 @@ public String[] integerBucketsToPaths(int[] integerBuckets) { return paths; } - public String[] convertToFacetParts(byte[] bucketValues) { - if (bucketValues.length != BUCKET_COUNT) { - throw new IllegalArgumentException(); - } - - String[] paths = new String[FACET_COUNT]; - for (int facet = 0; facet < FACET_COUNT; facet++) { - int bucketValue = bucketValues[facet]; - paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], bucketValue); - } - return paths; - } - private String generatePath(String facetPathTemplate, int bucketValue) { - return facetPathTemplate.replaceAll("#ITEM#", String.format("%02d", bucketValue)); + return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); } public byte[] getBucketSizes() { From f3ad8004cb0b83542c8d00ccfbb7f172cd7682c0 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 07:58:20 +0700 Subject: [PATCH 18/28] Reduce visibility of methods. Move package scope method up. Use SIZE instead of width()/height() methods --- .../bisq/desktop/components/cathash/CatHash.java | 3 ++- .../components/cathash/Configuration.java | 16 ++++------------ 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index f3458bd635..46e09544ad 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -29,6 +29,7 @@ // Number of combinations: 3 * 15 * 15 * 15 * 15 * 15 * 15 = 34171875 (2 ^ 25) @Slf4j public class CatHash { + private static final int SIZE = 300; private static final int MAX_CACHE_SIZE = 10000; private static final ConcurrentHashMap CACHE = new ConcurrentHashMap<>(); @@ -57,6 +58,6 @@ private static Image getImage(ByteArray pubKeyHash, boolean useCache) { private static Image imageFromIntegerBuckets(int[] integerBuckets, Configuration configuration) { String[] paths = configuration.integerBucketsToPaths(integerBuckets); - return ImageUtil.composeImage(paths, configuration.width(), configuration.height()); + return ImageUtil.composeImage(paths, SIZE, SIZE); } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index 63066c72dc..734c227459 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -56,7 +56,7 @@ public class Configuration { }; } - public String[] integerBucketsToPaths(int[] integerBuckets) { + String[] integerBucketsToPaths(int[] integerBuckets) { if (integerBuckets.length != BUCKET_COUNT) { throw new IllegalArgumentException(); } @@ -69,19 +69,11 @@ public String[] integerBucketsToPaths(int[] integerBuckets) { return paths; } - private String generatePath(String facetPathTemplate, int bucketValue) { - return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); - } - - public byte[] getBucketSizes() { + byte[] getBucketSizes() { return BUCKET_SIZES; } - public int width() { - return 300; - } - - public int height() { - return 300; + private String generatePath(String facetPathTemplate, int bucketValue) { + return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); } } From 76d06198a191c654dd902a41a34847b557a39b47 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 08:20:05 +0700 Subject: [PATCH 19/28] Remove VariableSizeHashing Add BucketGenerator Increase *_COUNT values by 1 (was wrong before to use max index) --- ...eSizeHashing.java => BucketGenerator.java} | 62 +++++++------------ .../desktop/components/cathash/CatHash.java | 14 +++-- .../components/cathash/Configuration.java | 49 +++++++-------- 3 files changed, 51 insertions(+), 74 deletions(-) rename apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/{VariableSizeHashing.java => BucketGenerator.java} (50%) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java similarity index 50% rename from apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java rename to apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java index 77bd03c477..525a6da5f2 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/VariableSizeHashing.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java @@ -18,28 +18,22 @@ package bisq.desktop.components.cathash; import java.math.BigInteger; -import java.util.UUID; -/** - * "Hash" a big integer (expected: hash or uuid) into buckets. The goal is to deterministically - * "repack" the randomness of the hash into the bucket. - *

- * Each bucket is defined by a maximum value. The implementation guarantees that the values in bucket n is in the - * range 0..(bucketSize[n]-1). - */ -public class VariableSizeHashing { - private final byte[] bucketSizes; - - public VariableSizeHashing(byte[] bucketSizes) { - this.bucketSizes = bucketSizes; - } - - static BigInteger uuidToBigInteger(UUID uuid) { - return BigInteger.valueOf(uuid.getMostSignificantBits()).shiftLeft(64).add(BigInteger.valueOf(uuid.getLeastSignificantBits())); - } +public class BucketGenerator { + static String[] integerBucketsToPaths(int[] integerBuckets, + int bucketCount, + int facetCount, + String[] facetPathTemplates) { + if (integerBuckets.length != bucketCount) { + throw new IllegalArgumentException(); + } - public byte[] createBuckets(UUID uuid) { - return createBuckets(uuidToBigInteger(uuid)); + String[] paths = new String[facetCount]; + for (int facet = 0; facet < facetCount; facet++) { + int bucketValue = integerBuckets[facet]; + paths[facet] = generatePath(facetPathTemplates[facet], bucketValue); + } + return paths; } /** @@ -47,28 +41,10 @@ public byte[] createBuckets(UUID uuid) { *

* Assumption: the value of hash is (much) larger than `16^bucketSizes.length` and uniformly distributed (random) * - * @param hash Any BigInteger that is to be split up in buckets according to the bucket configuration #bucketSizes. + * @param input Any BigInteger that is to be split up in buckets according to the bucket configuration #bucketSizes. * @return buckets The distributed hash */ - public byte[] createBuckets(BigInteger hash) { - int currentBucket = 0; - byte[] ret = new byte[this.bucketSizes.length]; - - while (currentBucket < this.bucketSizes.length) { - BigInteger[] divisorReminder = hash.divideAndRemainder(BigInteger.valueOf(bucketSizes[currentBucket])); - - hash = divisorReminder[0]; - long reminder = divisorReminder[1].longValue(); - - ret[currentBucket] = (byte) Math.abs(reminder % bucketSizes[currentBucket]); - - currentBucket += 1; - } - - return ret; - } - - public int[] createIntegerBuckets(BigInteger input) { + static int[] createBuckets(BigInteger input, int[] bucketSizes) { int currentBucket = 0; int[] result = new int[bucketSizes.length]; while (currentBucket < bucketSizes.length) { @@ -80,4 +56,8 @@ public int[] createIntegerBuckets(BigInteger input) { } return result; } -} + + private static String generatePath(String facetPathTemplate, int bucketValue) { + return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); + } +} \ No newline at end of file diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index 46e09544ad..5b2be5a5c4 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -46,18 +46,20 @@ private static Image getImage(ByteArray pubKeyHash, boolean useCache) { return CACHE.get(pubKeyHash); } BigInteger bigInteger = new BigInteger(pubKeyHash.getBytes()); - Configuration configuration = new Configuration(); - VariableSizeHashing hashing = new VariableSizeHashing(configuration.getBucketSizes()); - int[] integerBuckets = hashing.createIntegerBuckets(bigInteger); - Image image = imageFromIntegerBuckets(integerBuckets, configuration); + int[] buckets = BucketGenerator.createBuckets(bigInteger, Configuration.getBucketSizes()); + Image image = imageFromBuckets(buckets); if (useCache && CACHE.size() < MAX_CACHE_SIZE) { CACHE.put(pubKeyHash, image); } return image; } - private static Image imageFromIntegerBuckets(int[] integerBuckets, Configuration configuration) { - String[] paths = configuration.integerBucketsToPaths(integerBuckets); + + private static Image imageFromBuckets(int[] integerBuckets) { + String[] paths = BucketGenerator.integerBucketsToPaths(integerBuckets, + Configuration.getBucketCount(), + Configuration.getFacetCount(), + Configuration.getFacetPathTemplates()); return ImageUtil.composeImage(paths, SIZE, SIZE); } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java index 734c227459..abac55e6fe 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java @@ -21,25 +21,25 @@ @Slf4j public class Configuration { - private final static String ROOT = ""; + private static final String ROOT = ""; - private static final int BG0_COUNT = 15; - private static final int BG1_COUNT = 15; - private static final int EARS0_COUNT = 15; - private static final int EARS1_COUNT = 2; - private static final int FACE0_COUNT = 15; - private static final int FACE1_COUNT = 8; - private static final int EYES0_COUNT = 15; - private static final int NOSE0_COUNT = 5; - private static final int WHISKERS0_COUNT = 6; + private static final int BG0_COUNT = 16; + private static final int BG1_COUNT = 16; + private static final int EARS0_COUNT = 16; + private static final int EARS1_COUNT = 3; + private static final int FACE0_COUNT = 16; + private static final int FACE1_COUNT = 9; + private static final int EYES0_COUNT = 16; + private static final int NOSE0_COUNT = 6; + private static final int WHISKERS0_COUNT = 7; - private final static int BUCKET_COUNT = 9; - private final static int FACET_COUNT = 9; + private static final int BUCKET_COUNT = 9; + private static final int FACET_COUNT = 9; - private final static byte[] BUCKET_SIZES = new byte[]{BG0_COUNT, BG1_COUNT, EARS0_COUNT, EARS1_COUNT, FACE0_COUNT, + private static final int[] BUCKET_SIZES = new int[]{BG0_COUNT, BG1_COUNT, EARS0_COUNT, EARS1_COUNT, FACE0_COUNT, FACE1_COUNT, EYES0_COUNT, NOSE0_COUNT, WHISKERS0_COUNT}; - private final static String[] FACET_PATH_TEMPLATES; + private static final String[] FACET_PATH_TEMPLATES; static { String postFix = ".png"; @@ -56,24 +56,19 @@ public class Configuration { }; } - String[] integerBucketsToPaths(int[] integerBuckets) { - if (integerBuckets.length != BUCKET_COUNT) { - throw new IllegalArgumentException(); - } + static int getBucketCount() { + return BUCKET_COUNT; + } - String[] paths = new String[FACET_COUNT]; - for (int facet = 0; facet < FACET_COUNT; facet++) { - int bucketValue = integerBuckets[facet]; - paths[facet] = generatePath(FACET_PATH_TEMPLATES[facet], bucketValue); - } - return paths; + static int getFacetCount() { + return FACET_COUNT; } - byte[] getBucketSizes() { + static int[] getBucketSizes() { return BUCKET_SIZES; } - private String generatePath(String facetPathTemplate, int bucketValue) { - return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); + static String[] getFacetPathTemplates() { + return FACET_PATH_TEMPLATES; } } From 49cb0f083586c343e079adbf2c3f8c4249038565 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 09:06:02 +0700 Subject: [PATCH 20/28] Cleanups, Renamings --- .../{Configuration.java => BucketConfig.java} | 51 +++++++-------- .../components/cathash/BucketEncoder.java | 53 ++++++++++++++++ .../components/cathash/BucketGenerator.java | 63 ------------------- .../desktop/components/cathash/CatHash.java | 17 ++--- .../main/java/bisq/common/util/MathUtils.java | 4 ++ 5 files changed, 87 insertions(+), 101 deletions(-) rename apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/{Configuration.java => BucketConfig.java} (60%) create mode 100644 apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketEncoder.java delete mode 100644 apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketConfig.java similarity index 60% rename from apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java rename to apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketConfig.java index abac55e6fe..a63f008649 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/Configuration.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketConfig.java @@ -17,11 +17,12 @@ package bisq.desktop.components.cathash; +import bisq.common.util.MathUtils; import lombok.extern.slf4j.Slf4j; @Slf4j -public class Configuration { - private static final String ROOT = ""; +public class BucketConfig { + static final String DIGIT = "#"; private static final int BG0_COUNT = 16; private static final int BG1_COUNT = 16; @@ -33,42 +34,42 @@ public class Configuration { private static final int NOSE0_COUNT = 6; private static final int WHISKERS0_COUNT = 7; - private static final int BUCKET_COUNT = 9; - private static final int FACET_COUNT = 9; - private static final int[] BUCKET_SIZES = new int[]{BG0_COUNT, BG1_COUNT, EARS0_COUNT, EARS1_COUNT, FACE0_COUNT, FACE1_COUNT, EYES0_COUNT, NOSE0_COUNT, WHISKERS0_COUNT}; - private static final String[] FACET_PATH_TEMPLATES; + private static final String[] PATH_TEMPLATES; static { String postFix = ".png"; - FACET_PATH_TEMPLATES = new String[]{ - ROOT + "bg0/NUM" + postFix, - ROOT + "bg1/NUM" + postFix, - ROOT + "ears0/NUM" + postFix, - ROOT + "ears1/NUM" + postFix, - ROOT + "face0/NUM" + postFix, - ROOT + "face1/NUM" + postFix, - ROOT + "eyes0/NUM" + postFix, - ROOT + "nose0/NUM" + postFix, - ROOT + "whiskers0/NUM" + postFix, + PATH_TEMPLATES = new String[]{ + "bg0/" + DIGIT + postFix, + "bg1/" + DIGIT + postFix, + "ears0/" + DIGIT + postFix, + "ears1/" + DIGIT + postFix, + "face0/" + DIGIT + postFix, + "face1/" + DIGIT + postFix, + "eyes0/" + DIGIT + postFix, + "nose0/" + DIGIT + postFix, + "whiskers0/" + DIGIT + postFix }; - } - - static int getBucketCount() { - return BUCKET_COUNT; - } - static int getFacetCount() { - return FACET_COUNT; + long numCombinations = getNumCombinations(); + log.info("Number of combinations: 2^{} = {}", MathUtils.getLog2(numCombinations), numCombinations); } static int[] getBucketSizes() { return BUCKET_SIZES; } - static String[] getFacetPathTemplates() { - return FACET_PATH_TEMPLATES; + static String[] getPathTemplates() { + return PATH_TEMPLATES; + } + + static long getNumCombinations() { + long result = 1; + for (int bucketSize : BUCKET_SIZES) { + result *= bucketSize; + } + return result; } } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketEncoder.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketEncoder.java new file mode 100644 index 0000000000..d6288e546e --- /dev/null +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketEncoder.java @@ -0,0 +1,53 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.desktop.components.cathash; + +import java.math.BigInteger; + +public class BucketEncoder { + /** + * @param input A BigInteger input that is to be split up deterministically in buckets according to the bucketSizes array. + * @return buckets + */ + static int[] encode(BigInteger input, int[] bucketSizes) { + int currentBucket = 0; + int[] result = new int[bucketSizes.length]; + while (currentBucket < bucketSizes.length) { + int bucketSize = bucketSizes[currentBucket]; + BigInteger[] divisorReminder = input.divideAndRemainder(BigInteger.valueOf(bucketSize)); + input = divisorReminder[0]; + long reminder = divisorReminder[1].longValue(); + result[currentBucket] = (int) Math.abs(reminder % bucketSize); + currentBucket++; + } + return result; + } + + static String[] toPaths(int[] buckets, String[] pathTemplates) { + String[] paths = new String[buckets.length]; + for (int facet = 0; facet < buckets.length; facet++) { + int bucketValue = buckets[facet]; + paths[facet] = generatePath(pathTemplates[facet], bucketValue); + } + return paths; + } + + private static String generatePath(String pathTemplate, int index) { + return pathTemplate.replaceAll(BucketConfig.DIGIT, String.format("%02d", index)); + } +} \ No newline at end of file diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java deleted file mode 100644 index 525a6da5f2..0000000000 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/BucketGenerator.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.desktop.components.cathash; - -import java.math.BigInteger; - -public class BucketGenerator { - static String[] integerBucketsToPaths(int[] integerBuckets, - int bucketCount, - int facetCount, - String[] facetPathTemplates) { - if (integerBuckets.length != bucketCount) { - throw new IllegalArgumentException(); - } - - String[] paths = new String[facetCount]; - for (int facet = 0; facet < facetCount; facet++) { - int bucketValue = integerBuckets[facet]; - paths[facet] = generatePath(facetPathTemplates[facet], bucketValue); - } - return paths; - } - - /** - * Takes the hash value and distributes it over the buckets. - *

- * Assumption: the value of hash is (much) larger than `16^bucketSizes.length` and uniformly distributed (random) - * - * @param input Any BigInteger that is to be split up in buckets according to the bucket configuration #bucketSizes. - * @return buckets The distributed hash - */ - static int[] createBuckets(BigInteger input, int[] bucketSizes) { - int currentBucket = 0; - int[] result = new int[bucketSizes.length]; - while (currentBucket < bucketSizes.length) { - BigInteger[] divisorReminder = input.divideAndRemainder(BigInteger.valueOf(bucketSizes[currentBucket])); - input = divisorReminder[0]; - long reminder = divisorReminder[1].longValue(); - result[currentBucket] = (int) Math.abs(reminder % bucketSizes[currentBucket]); - currentBucket++; - } - return result; - } - - private static String generatePath(String facetPathTemplate, int bucketValue) { - return facetPathTemplate.replaceAll("NUM", String.format("%02d", bucketValue)); - } -} \ No newline at end of file diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index 5b2be5a5c4..ceb0849b1a 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -26,7 +26,6 @@ import java.util.concurrent.ConcurrentHashMap; // Derived from https://github.com/neuhalje/android-robohash -// Number of combinations: 3 * 15 * 15 * 15 * 15 * 15 * 15 = 34171875 (2 ^ 25) @Slf4j public class CatHash { private static final int SIZE = 300; @@ -45,21 +44,13 @@ private static Image getImage(ByteArray pubKeyHash, boolean useCache) { if (useCache && CACHE.containsKey(pubKeyHash)) { return CACHE.get(pubKeyHash); } - BigInteger bigInteger = new BigInteger(pubKeyHash.getBytes()); - int[] buckets = BucketGenerator.createBuckets(bigInteger, Configuration.getBucketSizes()); - Image image = imageFromBuckets(buckets); + BigInteger input = new BigInteger(pubKeyHash.getBytes()); + int[] buckets = BucketEncoder.encode(input, BucketConfig.getBucketSizes()); + String[] paths = BucketEncoder.toPaths(buckets, BucketConfig.getPathTemplates()); + Image image = ImageUtil.composeImage(paths, SIZE, SIZE); if (useCache && CACHE.size() < MAX_CACHE_SIZE) { CACHE.put(pubKeyHash, image); } return image; } - - - private static Image imageFromBuckets(int[] integerBuckets) { - String[] paths = BucketGenerator.integerBucketsToPaths(integerBuckets, - Configuration.getBucketCount(), - Configuration.getFacetCount(), - Configuration.getFacetPathTemplates()); - return ImageUtil.composeImage(paths, SIZE, SIZE); - } } diff --git a/common/src/main/java/bisq/common/util/MathUtils.java b/common/src/main/java/bisq/common/util/MathUtils.java index da046d4177..16428cf4ec 100644 --- a/common/src/main/java/bisq/common/util/MathUtils.java +++ b/common/src/main/java/bisq/common/util/MathUtils.java @@ -108,4 +108,8 @@ public static long bounded(long lowerBound, long upperBound, long value) { "lowerBound must not be larger than upperBound"); return Math.min(Math.max(value, lowerBound), upperBound); } + + public static double getLog2(long value) { + return Math.log(value) / Math.log(2); + } } From 18dc6ee78dbdbfb600426c92a8c6373c86a35537 Mon Sep 17 00:00:00 2001 From: HenrikJannsen Date: Wed, 28 Feb 2024 19:18:54 +0700 Subject: [PATCH 21/28] Remove comment for dev testing --- .../onboarding/create_profile/CreateProfileController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java index 8ab20d28c6..27b3ab1ac1 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java @@ -154,7 +154,7 @@ private CompletableFuture createProofOfWork(byte[] pubKeyHash) { .thenApply(proofOfWork -> { long powDuration = System.currentTimeMillis() - ts; log.info("Proof of work creation completed after {} ms", powDuration); - //createSimulatedDelay(powDuration); + createSimulatedDelay(powDuration); UIThread.run(() -> { model.setProofOfWork(Optional.of(proofOfWork)); String nym = NymIdGenerator.fromHash(pubKeyHash); From dff65a8d0b3b477f775c8d75cba442db4fc06ac4 Mon Sep 17 00:00:00 2001 From: djing chan Date: Wed, 28 Feb 2024 12:56:21 +0700 Subject: [PATCH 22/28] Refactor: Move NymIdGenerator into bisq.user.profile --- .../CreateProfileController.java | 2 +- .../user/{ => profile}/NymIdGenerator.java | 2 +- .../java/bisq/user/profile/UserProfile.java | 1 - .../java/bisq/user/NymIdGeneratorTest.java | 173 ------------------ .../bisq/user/profile/NymIdGeneratorTest.java | 173 ++++++++++++++++++ 5 files changed, 175 insertions(+), 176 deletions(-) rename user/src/main/java/bisq/user/{ => profile}/NymIdGenerator.java (99%) delete mode 100644 user/src/test/java/bisq/user/NymIdGeneratorTest.java create mode 100644 user/src/test/java/bisq/user/profile/NymIdGeneratorTest.java diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java index 27b3ab1ac1..adc524348f 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java @@ -31,8 +31,8 @@ import bisq.security.keys.KeyBundleService; import bisq.security.pow.ProofOfWork; import bisq.security.pow.hashcash.HashCashProofOfWorkService; -import bisq.user.NymIdGenerator; import bisq.user.identity.UserIdentityService; +import bisq.user.profile.NymIdGenerator; import bisq.user.profile.UserProfile; import lombok.Getter; import lombok.extern.slf4j.Slf4j; diff --git a/user/src/main/java/bisq/user/NymIdGenerator.java b/user/src/main/java/bisq/user/profile/NymIdGenerator.java similarity index 99% rename from user/src/main/java/bisq/user/NymIdGenerator.java rename to user/src/main/java/bisq/user/profile/NymIdGenerator.java index 22ffdb9ce0..61a941d192 100644 --- a/user/src/main/java/bisq/user/NymIdGenerator.java +++ b/user/src/main/java/bisq/user/profile/NymIdGenerator.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.user; +package bisq.user.profile; import bisq.common.util.FileUtils; import com.google.common.annotations.VisibleForTesting; diff --git a/user/src/main/java/bisq/user/profile/UserProfile.java b/user/src/main/java/bisq/user/profile/UserProfile.java index 3df90182e1..ee6f03d6dd 100644 --- a/user/src/main/java/bisq/user/profile/UserProfile.java +++ b/user/src/main/java/bisq/user/profile/UserProfile.java @@ -29,7 +29,6 @@ import bisq.network.p2p.services.data.storage.MetaData; import bisq.security.DigestUtil; import bisq.security.pow.ProofOfWork; -import bisq.user.NymIdGenerator; import com.google.common.base.Charsets; import com.google.common.base.Joiner; import com.google.protobuf.InvalidProtocolBufferException; diff --git a/user/src/test/java/bisq/user/NymIdGeneratorTest.java b/user/src/test/java/bisq/user/NymIdGeneratorTest.java deleted file mode 100644 index bbe19e1872..0000000000 --- a/user/src/test/java/bisq/user/NymIdGeneratorTest.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.user; - -import bisq.common.util.StringUtils; -import bisq.security.DigestUtil; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.math.BigInteger; -import java.nio.charset.StandardCharsets; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import static bisq.user.NymIdGenerator.fromHash; -import static bisq.user.NymIdGenerator.read; -import static org.junit.jupiter.api.Assertions.assertEquals; - -@Slf4j -public class NymIdGeneratorTest { - @Test - void testFromHash() { - List adverbs, adjectives, nouns; - - // Min. lists - adverbs = List.of("1"); - adjectives = List.of("2"); - nouns = List.of("3"); - assertEquals("1230", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); - //System.out.println("from hash: "+BigInteger.valueOf(0)); - assertEquals("1231", NymIdGenerator.fromHash(BigInteger.valueOf(1), adverbs, adjectives, nouns)); - assertEquals("1232", NymIdGenerator.fromHash(BigInteger.valueOf(2), adverbs, adjectives, nouns)); - - adverbs = List.of("1"); - adjectives = List.of("2", "3"); - nouns = List.of("4", "5", "6"); - - // util for printing results - /* int combinations = adverbs.size() * adjectives.size() * nouns.size(); - for (int i = 0; i < 2 * combinations; i++) { - BigInteger hashAsBigInteger = BigInteger.valueOf(i); - String result = fromHash(hashAsBigInteger, adverbs, adjectives, nouns); - System.out.println("assertEquals(\"" + result + "\", fromHash(BigInteger.valueOf(" + i + "), adverbs, adjectives, nouns));"); - }*/ - - assertEquals("1240", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); - assertEquals("1241", NymIdGenerator.fromHash(BigInteger.valueOf(1), adverbs, adjectives, nouns)); - assertEquals("1242", NymIdGenerator.fromHash(BigInteger.valueOf(2), adverbs, adjectives, nouns)); - assertEquals("1243", NymIdGenerator.fromHash(BigInteger.valueOf(3), adverbs, adjectives, nouns)); - assertEquals("1244", NymIdGenerator.fromHash(BigInteger.valueOf(4), adverbs, adjectives, nouns)); - assertEquals("1245", NymIdGenerator.fromHash(BigInteger.valueOf(5), adverbs, adjectives, nouns)); - assertEquals("1246", NymIdGenerator.fromHash(BigInteger.valueOf(6), adverbs, adjectives, nouns)); - assertEquals("1247", NymIdGenerator.fromHash(BigInteger.valueOf(7), adverbs, adjectives, nouns)); - assertEquals("1248", NymIdGenerator.fromHash(BigInteger.valueOf(8), adverbs, adjectives, nouns)); - assertEquals("1249", NymIdGenerator.fromHash(BigInteger.valueOf(9), adverbs, adjectives, nouns)); - assertEquals("12410", NymIdGenerator.fromHash(BigInteger.valueOf(10), adverbs, adjectives, nouns)); - assertEquals("12411", NymIdGenerator.fromHash(BigInteger.valueOf(11), adverbs, adjectives, nouns)); - - // With negative numbers - assertEquals("12411", NymIdGenerator.fromHash(BigInteger.valueOf(-11), adverbs, adjectives, nouns)); - assertEquals("12410", NymIdGenerator.fromHash(BigInteger.valueOf(-10), adverbs, adjectives, nouns)); - assertEquals("1249", NymIdGenerator.fromHash(BigInteger.valueOf(-9), adverbs, adjectives, nouns)); - assertEquals("1248", NymIdGenerator.fromHash(BigInteger.valueOf(-8), adverbs, adjectives, nouns)); - assertEquals("1247", NymIdGenerator.fromHash(BigInteger.valueOf(-7), adverbs, adjectives, nouns)); - assertEquals("1246", NymIdGenerator.fromHash(BigInteger.valueOf(-6), adverbs, adjectives, nouns)); - assertEquals("1245", NymIdGenerator.fromHash(BigInteger.valueOf(-5), adverbs, adjectives, nouns)); - assertEquals("1244", NymIdGenerator.fromHash(BigInteger.valueOf(-4), adverbs, adjectives, nouns)); - assertEquals("1243", NymIdGenerator.fromHash(BigInteger.valueOf(-3), adverbs, adjectives, nouns)); - assertEquals("1242", NymIdGenerator.fromHash(BigInteger.valueOf(-2), adverbs, adjectives, nouns)); - assertEquals("1241", NymIdGenerator.fromHash(BigInteger.valueOf(-1), adverbs, adjectives, nouns)); - assertEquals("1240", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); - - adverbs = List.of("1", "2"); - adjectives = List.of("3", "4"); - nouns = List.of("5", "6"); - assertEquals("1350", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); - assertEquals("1360", NymIdGenerator.fromHash(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); - assertEquals("1450", NymIdGenerator.fromHash(BigInteger.valueOf(2000), adverbs, adjectives, nouns)); - assertEquals("1460", NymIdGenerator.fromHash(BigInteger.valueOf(3000), adverbs, adjectives, nouns)); - assertEquals("2350", NymIdGenerator.fromHash(BigInteger.valueOf(4000), adverbs, adjectives, nouns)); - assertEquals("2360", NymIdGenerator.fromHash(BigInteger.valueOf(5000), adverbs, adjectives, nouns)); - assertEquals("2450", NymIdGenerator.fromHash(BigInteger.valueOf(6000), adverbs, adjectives, nouns)); - assertEquals("2460", NymIdGenerator.fromHash(BigInteger.valueOf(7000), adverbs, adjectives, nouns)); - assertEquals("1350", NymIdGenerator.fromHash(BigInteger.valueOf(8000), adverbs, adjectives, nouns)); - assertEquals("1360", NymIdGenerator.fromHash(BigInteger.valueOf(9000), adverbs, adjectives, nouns)); - assertEquals("1450", NymIdGenerator.fromHash(BigInteger.valueOf(10000), adverbs, adjectives, nouns)); - assertEquals("1460", NymIdGenerator.fromHash(BigInteger.valueOf(11000), adverbs, adjectives, nouns)); - assertEquals("2350", NymIdGenerator.fromHash(BigInteger.valueOf(12000), adverbs, adjectives, nouns)); - assertEquals("2360", NymIdGenerator.fromHash(BigInteger.valueOf(13000), adverbs, adjectives, nouns)); - assertEquals("2450", NymIdGenerator.fromHash(BigInteger.valueOf(14000), adverbs, adjectives, nouns)); - assertEquals("2460", NymIdGenerator.fromHash(BigInteger.valueOf(15000), adverbs, adjectives, nouns)); - - //larger inputs - adverbs = List.of("1", "2"); - adjectives = List.of("3", "4"); - nouns = List.of("5", "6"); - assertEquals("1360", NymIdGenerator.fromHash(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); - assertEquals("1451", NymIdGenerator.fromHash(BigInteger.valueOf(2001), adverbs, adjectives, nouns)); - assertEquals("1462", NymIdGenerator.fromHash(BigInteger.valueOf(3002), adverbs, adjectives, nouns)); - assertEquals("2353", NymIdGenerator.fromHash(BigInteger.valueOf(4003), adverbs, adjectives, nouns)); - assertEquals("2364", NymIdGenerator.fromHash(BigInteger.valueOf(5004), adverbs, adjectives, nouns)); - assertEquals("2455", NymIdGenerator.fromHash(BigInteger.valueOf(6005), adverbs, adjectives, nouns)); - assertEquals("2466", NymIdGenerator.fromHash(BigInteger.valueOf(7006), adverbs, adjectives, nouns)); - assertEquals("1357", NymIdGenerator.fromHash(BigInteger.valueOf(8007), adverbs, adjectives, nouns)); - - adverbs = List.of("1", "2", "3"); - adjectives = List.of("3", "4", "5"); - nouns = List.of("5", "6", "7", "8", "9", "10", "11"); - BigInteger input = new BigInteger("test".getBytes(StandardCharsets.UTF_8)); - assertEquals("356748", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); - - input = new BigInteger("test1".getBytes(StandardCharsets.UTF_8)); - assertEquals("2511537", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); - - input = new BigInteger(DigestUtil.RIPEMD160("test".getBytes(StandardCharsets.UTF_8))); - assertEquals("358823", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); - - input = new BigInteger(DigestUtil.RIPEMD160("test1".getBytes(StandardCharsets.UTF_8))); - assertEquals("145726", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); - - // Feed random strings, expect no exceptions - for (int i = 0; i < 100; i++) { - input = new BigInteger(DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8))); - log.debug(NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); - } - - // Use real word lists - // Feed random strings, expect no exceptions - for (int i = 0; i < 3; i++) { - byte[] hash = DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8)); - log.debug(fromHash(hash)); - } - - // Use truncated lists, fill a set and check if we get no duplications - Set set = new HashSet<>(); - adverbs = read("adverbs.txt").subList(0, 5); - adjectives = read("adjectives.txt").subList(0, 5); - nouns = read("nouns.txt").subList(0, 5); - int combinations = adverbs.size() * adjectives.size() * nouns.size() * 1000; - String first = null; - for (int i = 0; i < combinations; i++) { - String result = NymIdGenerator.fromHash(BigInteger.valueOf(i), adverbs, adjectives, nouns); - Assertions.assertFalse(set.contains(result)); - set.add(result); - if (first == null) { - first = result; - } - } - assertEquals(combinations, set.size()); - - // At overflowing our combinations we get the first again - String result = NymIdGenerator.fromHash(BigInteger.valueOf(combinations), adverbs, adjectives, nouns); - Assertions.assertTrue(set.contains(result)); - assertEquals(first, result); - } -} \ No newline at end of file diff --git a/user/src/test/java/bisq/user/profile/NymIdGeneratorTest.java b/user/src/test/java/bisq/user/profile/NymIdGeneratorTest.java new file mode 100644 index 0000000000..ddc6284e0e --- /dev/null +++ b/user/src/test/java/bisq/user/profile/NymIdGeneratorTest.java @@ -0,0 +1,173 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.user.profile; + +import bisq.common.util.StringUtils; +import bisq.security.DigestUtil; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static bisq.user.profile.NymIdGenerator.fromHash; +import static bisq.user.profile.NymIdGenerator.read; +import static org.junit.jupiter.api.Assertions.assertEquals; + +@Slf4j +public class NymIdGeneratorTest { + @Test + void testFromHash() { + List adverbs, adjectives, nouns; + + // Min. lists + adverbs = List.of("1"); + adjectives = List.of("2"); + nouns = List.of("3"); + assertEquals("1230", fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + //System.out.println("from hash: "+BigInteger.valueOf(0)); + assertEquals("1231", fromHash(BigInteger.valueOf(1), adverbs, adjectives, nouns)); + assertEquals("1232", fromHash(BigInteger.valueOf(2), adverbs, adjectives, nouns)); + + adverbs = List.of("1"); + adjectives = List.of("2", "3"); + nouns = List.of("4", "5", "6"); + + // util for printing results + /* int combinations = adverbs.size() * adjectives.size() * nouns.size(); + for (int i = 0; i < 2 * combinations; i++) { + BigInteger hashAsBigInteger = BigInteger.valueOf(i); + String result = fromHash(hashAsBigInteger, adverbs, adjectives, nouns); + System.out.println("assertEquals(\"" + result + "\", fromHash(BigInteger.valueOf(" + i + "), adverbs, adjectives, nouns));"); + }*/ + + assertEquals("1240", fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + assertEquals("1241", fromHash(BigInteger.valueOf(1), adverbs, adjectives, nouns)); + assertEquals("1242", fromHash(BigInteger.valueOf(2), adverbs, adjectives, nouns)); + assertEquals("1243", fromHash(BigInteger.valueOf(3), adverbs, adjectives, nouns)); + assertEquals("1244", fromHash(BigInteger.valueOf(4), adverbs, adjectives, nouns)); + assertEquals("1245", fromHash(BigInteger.valueOf(5), adverbs, adjectives, nouns)); + assertEquals("1246", fromHash(BigInteger.valueOf(6), adverbs, adjectives, nouns)); + assertEquals("1247", fromHash(BigInteger.valueOf(7), adverbs, adjectives, nouns)); + assertEquals("1248", fromHash(BigInteger.valueOf(8), adverbs, adjectives, nouns)); + assertEquals("1249", fromHash(BigInteger.valueOf(9), adverbs, adjectives, nouns)); + assertEquals("12410", fromHash(BigInteger.valueOf(10), adverbs, adjectives, nouns)); + assertEquals("12411", fromHash(BigInteger.valueOf(11), adverbs, adjectives, nouns)); + + // With negative numbers + assertEquals("12411", fromHash(BigInteger.valueOf(-11), adverbs, adjectives, nouns)); + assertEquals("12410", fromHash(BigInteger.valueOf(-10), adverbs, adjectives, nouns)); + assertEquals("1249", fromHash(BigInteger.valueOf(-9), adverbs, adjectives, nouns)); + assertEquals("1248", fromHash(BigInteger.valueOf(-8), adverbs, adjectives, nouns)); + assertEquals("1247", fromHash(BigInteger.valueOf(-7), adverbs, adjectives, nouns)); + assertEquals("1246", fromHash(BigInteger.valueOf(-6), adverbs, adjectives, nouns)); + assertEquals("1245", fromHash(BigInteger.valueOf(-5), adverbs, adjectives, nouns)); + assertEquals("1244", fromHash(BigInteger.valueOf(-4), adverbs, adjectives, nouns)); + assertEquals("1243", fromHash(BigInteger.valueOf(-3), adverbs, adjectives, nouns)); + assertEquals("1242", fromHash(BigInteger.valueOf(-2), adverbs, adjectives, nouns)); + assertEquals("1241", fromHash(BigInteger.valueOf(-1), adverbs, adjectives, nouns)); + assertEquals("1240", fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + + adverbs = List.of("1", "2"); + adjectives = List.of("3", "4"); + nouns = List.of("5", "6"); + assertEquals("1350", fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + assertEquals("1360", fromHash(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); + assertEquals("1450", fromHash(BigInteger.valueOf(2000), adverbs, adjectives, nouns)); + assertEquals("1460", fromHash(BigInteger.valueOf(3000), adverbs, adjectives, nouns)); + assertEquals("2350", fromHash(BigInteger.valueOf(4000), adverbs, adjectives, nouns)); + assertEquals("2360", fromHash(BigInteger.valueOf(5000), adverbs, adjectives, nouns)); + assertEquals("2450", fromHash(BigInteger.valueOf(6000), adverbs, adjectives, nouns)); + assertEquals("2460", fromHash(BigInteger.valueOf(7000), adverbs, adjectives, nouns)); + assertEquals("1350", fromHash(BigInteger.valueOf(8000), adverbs, adjectives, nouns)); + assertEquals("1360", fromHash(BigInteger.valueOf(9000), adverbs, adjectives, nouns)); + assertEquals("1450", fromHash(BigInteger.valueOf(10000), adverbs, adjectives, nouns)); + assertEquals("1460", fromHash(BigInteger.valueOf(11000), adverbs, adjectives, nouns)); + assertEquals("2350", fromHash(BigInteger.valueOf(12000), adverbs, adjectives, nouns)); + assertEquals("2360", fromHash(BigInteger.valueOf(13000), adverbs, adjectives, nouns)); + assertEquals("2450", fromHash(BigInteger.valueOf(14000), adverbs, adjectives, nouns)); + assertEquals("2460", fromHash(BigInteger.valueOf(15000), adverbs, adjectives, nouns)); + + //larger inputs + adverbs = List.of("1", "2"); + adjectives = List.of("3", "4"); + nouns = List.of("5", "6"); + assertEquals("1360", fromHash(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); + assertEquals("1451", fromHash(BigInteger.valueOf(2001), adverbs, adjectives, nouns)); + assertEquals("1462", fromHash(BigInteger.valueOf(3002), adverbs, adjectives, nouns)); + assertEquals("2353", fromHash(BigInteger.valueOf(4003), adverbs, adjectives, nouns)); + assertEquals("2364", fromHash(BigInteger.valueOf(5004), adverbs, adjectives, nouns)); + assertEquals("2455", fromHash(BigInteger.valueOf(6005), adverbs, adjectives, nouns)); + assertEquals("2466", fromHash(BigInteger.valueOf(7006), adverbs, adjectives, nouns)); + assertEquals("1357", fromHash(BigInteger.valueOf(8007), adverbs, adjectives, nouns)); + + adverbs = List.of("1", "2", "3"); + adjectives = List.of("3", "4", "5"); + nouns = List.of("5", "6", "7", "8", "9", "10", "11"); + BigInteger input = new BigInteger("test".getBytes(StandardCharsets.UTF_8)); + assertEquals("356748", fromHash(input, adverbs, adjectives, nouns)); + + input = new BigInteger("test1".getBytes(StandardCharsets.UTF_8)); + assertEquals("2511537", fromHash(input, adverbs, adjectives, nouns)); + + input = new BigInteger(DigestUtil.RIPEMD160("test".getBytes(StandardCharsets.UTF_8))); + assertEquals("358823", fromHash(input, adverbs, adjectives, nouns)); + + input = new BigInteger(DigestUtil.RIPEMD160("test1".getBytes(StandardCharsets.UTF_8))); + assertEquals("145726", fromHash(input, adverbs, adjectives, nouns)); + + // Feed random strings, expect no exceptions + for (int i = 0; i < 100; i++) { + input = new BigInteger(DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8))); + log.debug(fromHash(input, adverbs, adjectives, nouns)); + } + + // Use real word lists + // Feed random strings, expect no exceptions + for (int i = 0; i < 3; i++) { + byte[] hash = DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8)); + log.debug(fromHash(hash)); + } + + // Use truncated lists, fill a set and check if we get no duplications + Set set = new HashSet<>(); + adverbs = read("adverbs.txt").subList(0, 5); + adjectives = read("adjectives.txt").subList(0, 5); + nouns = read("nouns.txt").subList(0, 5); + int combinations = adverbs.size() * adjectives.size() * nouns.size() * 1000; + String first = null; + for (int i = 0; i < combinations; i++) { + String result = fromHash(BigInteger.valueOf(i), adverbs, adjectives, nouns); + Assertions.assertFalse(set.contains(result)); + set.add(result); + if (first == null) { + first = result; + } + } + assertEquals(combinations, set.size()); + + // At overflowing our combinations we get the first again + String result = fromHash(BigInteger.valueOf(combinations), adverbs, adjectives, nouns); + Assertions.assertTrue(set.contains(result)); + assertEquals(first, result); + } +} \ No newline at end of file From 657f301be6fbf765701be35ee11dc1c40791ae3d Mon Sep 17 00:00:00 2001 From: djing chan Date: Wed, 28 Feb 2024 13:06:03 +0700 Subject: [PATCH 23/28] Move mintNymProofOfWork method to UserIdentityService --- .../bisq/desktop_app/DesktopApplicationService.java | 4 ++-- .../create_profile/CreateProfileController.java | 6 +----- .../bisq/rest_api/RestApiApplicationService.java | 4 ++-- .../java/bisq/security/pow/ProofOfWorkService.java | 10 ---------- user/src/main/java/bisq/user/UserService.java | 7 ++++--- .../java/bisq/user/identity/UserIdentityService.java | 12 ++++++++++++ 6 files changed, 21 insertions(+), 22 deletions(-) diff --git a/apps/desktop/desktop-app/src/main/java/bisq/desktop_app/DesktopApplicationService.java b/apps/desktop/desktop-app/src/main/java/bisq/desktop_app/DesktopApplicationService.java index 67495f57b2..18f9629232 100644 --- a/apps/desktop/desktop-app/src/main/java/bisq/desktop_app/DesktopApplicationService.java +++ b/apps/desktop/desktop-app/src/main/java/bisq/desktop_app/DesktopApplicationService.java @@ -126,10 +126,10 @@ public DesktopApplicationService(String[] args, ShutDownHandler shutDownHandler) userService = new UserService(UserService.Config.from(getConfig("user")), persistenceService, + securityService, identityService, networkService, - bondedRolesService, - securityService.getHashCashProofOfWorkService()); + bondedRolesService); settingsService = new SettingsService(persistenceService); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java index adc524348f..2ce06e487a 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java @@ -30,7 +30,6 @@ import bisq.security.DigestUtil; import bisq.security.keys.KeyBundleService; import bisq.security.pow.ProofOfWork; -import bisq.security.pow.hashcash.HashCashProofOfWorkService; import bisq.user.identity.UserIdentityService; import bisq.user.profile.NymIdGenerator; import bisq.user.profile.UserProfile; @@ -51,8 +50,6 @@ public class CreateProfileController implements Controller { protected final CreateProfileView view; protected final UserIdentityService userIdentityService; protected final KeyBundleService keyBundleService; - // We do not support multiple proof of work types - protected final HashCashProofOfWorkService hashCashProofOfWorkService; protected final IdentityService identityService; private final OverlayController overlayController; protected Optional> mintNymProofOfWorkFuture = Optional.empty(); @@ -60,7 +57,6 @@ public class CreateProfileController implements Controller { public CreateProfileController(ServiceProvider serviceProvider) { keyBundleService = serviceProvider.getSecurityService().getKeyBundleService(); - hashCashProofOfWorkService = serviceProvider.getSecurityService().getHashCashProofOfWorkService(); userIdentityService = serviceProvider.getUserService().getUserIdentityService(); identityService = serviceProvider.getIdentityService(); overlayController = OverlayController.getInstance(); @@ -150,7 +146,7 @@ void generateNewKeyPair() { private CompletableFuture createProofOfWork(byte[] pubKeyHash) { long ts = System.currentTimeMillis(); - return hashCashProofOfWorkService.mintNymProofOfWork(pubKeyHash) + return userIdentityService.mintNymProofOfWork(pubKeyHash) .thenApply(proofOfWork -> { long powDuration = System.currentTimeMillis() - ts; log.info("Proof of work creation completed after {} ms", powDuration); diff --git a/apps/rest-api-app/src/main/java/bisq/rest_api/RestApiApplicationService.java b/apps/rest-api-app/src/main/java/bisq/rest_api/RestApiApplicationService.java index c1980fe6d6..3e4e84c8cc 100644 --- a/apps/rest-api-app/src/main/java/bisq/rest_api/RestApiApplicationService.java +++ b/apps/rest-api-app/src/main/java/bisq/rest_api/RestApiApplicationService.java @@ -128,10 +128,10 @@ public RestApiApplicationService(String[] args) { userService = new UserService(UserService.Config.from(getConfig("user")), persistenceService, + securityService, identityService, networkService, - bondedRolesService, - securityService.getHashCashProofOfWorkService()); + bondedRolesService); settingsService = new SettingsService(persistenceService); diff --git a/security/src/main/java/bisq/security/pow/ProofOfWorkService.java b/security/src/main/java/bisq/security/pow/ProofOfWorkService.java index 4da2b719e1..ec548f2fc5 100644 --- a/security/src/main/java/bisq/security/pow/ProofOfWorkService.java +++ b/security/src/main/java/bisq/security/pow/ProofOfWorkService.java @@ -29,8 +29,6 @@ // Borrowed from: https://github.com/bisq-network/bisq @Slf4j public abstract class ProofOfWorkService { - public final static int MINT_NYM_DIFFICULTY = 65536; // Math.pow(2, 16) = 65536; - public ProofOfWorkService() { } @@ -54,14 +52,6 @@ public CompletableFuture mintAsync(String itemId, String ownerId, d return mintAsync(asUtf8Bytes(itemId), getChallenge(itemId, ownerId), difficulty); } - public CompletableFuture mintNymProofOfWork(byte[] pubKeyHash) { - return mintNymProofOfWork(pubKeyHash, MINT_NYM_DIFFICULTY); - } - - public CompletableFuture mintNymProofOfWork(byte[] pubKeyHash, double nymDifficulty) { - return mintAsync(pubKeyHash, null, nymDifficulty); - } - public boolean verify(ProofOfWork proofOfWork, String itemId, String ownerId, diff --git a/user/src/main/java/bisq/user/UserService.java b/user/src/main/java/bisq/user/UserService.java index 9306f2bb75..8bd615ee14 100644 --- a/user/src/main/java/bisq/user/UserService.java +++ b/user/src/main/java/bisq/user/UserService.java @@ -22,7 +22,7 @@ import bisq.identity.IdentityService; import bisq.network.NetworkService; import bisq.persistence.PersistenceService; -import bisq.security.pow.ProofOfWorkService; +import bisq.security.SecurityService; import bisq.user.banned.BannedUserService; import bisq.user.identity.UserIdentityService; import bisq.user.profile.UserProfileService; @@ -58,10 +58,10 @@ public static Config from(com.typesafe.config.Config config) { public UserService(Config config, PersistenceService persistenceService, + SecurityService securityService, IdentityService identityService, NetworkService networkService, - BondedRolesService bondedRolesService, - ProofOfWorkService proofOfWorkService) { + BondedRolesService bondedRolesService) { bannedUserService = new BannedUserService(persistenceService, networkService); @@ -69,6 +69,7 @@ public UserService(Config config, userIdentityService = new UserIdentityService(config.getUserIdentityConfig(), persistenceService, + securityService, identityService, networkService); diff --git a/user/src/main/java/bisq/user/identity/UserIdentityService.java b/user/src/main/java/bisq/user/identity/UserIdentityService.java index 265a57e684..a06931f2c2 100644 --- a/user/src/main/java/bisq/user/identity/UserIdentityService.java +++ b/user/src/main/java/bisq/user/identity/UserIdentityService.java @@ -32,7 +32,9 @@ import bisq.persistence.PersistenceService; import bisq.security.AesSecretKey; import bisq.security.EncryptedData; +import bisq.security.SecurityService; import bisq.security.pow.ProofOfWork; +import bisq.security.pow.hashcash.HashCashProofOfWorkService; import bisq.user.profile.UserProfile; import lombok.Getter; import lombok.ToString; @@ -50,6 +52,8 @@ @Slf4j public class UserIdentityService implements PersistenceClient, Service { + public final static int MINT_NYM_DIFFICULTY = 65536; // Math.pow(2, 16) = 65536; + @Getter @ToString public static final class Config { @@ -69,8 +73,10 @@ public static Config from(com.typesafe.config.Config typeSafeConfig) { private final UserIdentityStore persistableStore = new UserIdentityStore(); @Getter private final Persistence persistence; + private final HashCashProofOfWorkService hashCashProofOfWorkService; private final IdentityService identityService; private final NetworkService networkService; + private final Object lock = new Object(); private final Config config; @Getter @@ -78,10 +84,12 @@ public static Config from(com.typesafe.config.Config typeSafeConfig) { public UserIdentityService(Config config, PersistenceService persistenceService, + SecurityService securityService, IdentityService identityService, NetworkService networkService) { this.config = config; persistence = persistenceService.getOrCreatePersistence(this, DbSubDirectory.PRIVATE, persistableStore); + hashCashProofOfWorkService = securityService.getHashCashProofOfWorkService(); this.identityService = identityService; this.networkService = networkService; } @@ -104,6 +112,10 @@ public CompletableFuture shutdown() { // API /////////////////////////////////////////////////////////////////////////////////////////////////// + public CompletableFuture mintNymProofOfWork(byte[] pubKeyHash) { + return hashCashProofOfWorkService.mint(pubKeyHash, null, MINT_NYM_DIFFICULTY); + } + public CompletableFuture deriveKeyFromPassword(CharSequence password) { return persistableStore.deriveKeyFromPassword(password) .whenComplete((aesKey, throwable) -> { From caf092063c4e978d7398f3515b501f561d21c497 Mon Sep 17 00:00:00 2001 From: djing chan Date: Wed, 28 Feb 2024 13:06:51 +0700 Subject: [PATCH 24/28] Refactor: Move NymIdGenerator into bisq.user.identity --- .../CreateProfileController.java | 2 +- .../{profile => identity}/NymIdGenerator.java | 2 +- .../java/bisq/user/profile/UserProfile.java | 1 + .../user/identity/NymIdGeneratorTest.java | 173 ++++++++++++++++++ .../bisq/user/profile/NymIdGeneratorTest.java | 173 ------------------ 5 files changed, 176 insertions(+), 175 deletions(-) rename user/src/main/java/bisq/user/{profile => identity}/NymIdGenerator.java (99%) create mode 100644 user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java delete mode 100644 user/src/test/java/bisq/user/profile/NymIdGeneratorTest.java diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java index 2ce06e487a..3b9c7af450 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java @@ -30,8 +30,8 @@ import bisq.security.DigestUtil; import bisq.security.keys.KeyBundleService; import bisq.security.pow.ProofOfWork; +import bisq.user.identity.NymIdGenerator; import bisq.user.identity.UserIdentityService; -import bisq.user.profile.NymIdGenerator; import bisq.user.profile.UserProfile; import lombok.Getter; import lombok.extern.slf4j.Slf4j; diff --git a/user/src/main/java/bisq/user/profile/NymIdGenerator.java b/user/src/main/java/bisq/user/identity/NymIdGenerator.java similarity index 99% rename from user/src/main/java/bisq/user/profile/NymIdGenerator.java rename to user/src/main/java/bisq/user/identity/NymIdGenerator.java index 61a941d192..d4e44b8ded 100644 --- a/user/src/main/java/bisq/user/profile/NymIdGenerator.java +++ b/user/src/main/java/bisq/user/identity/NymIdGenerator.java @@ -15,7 +15,7 @@ * along with Bisq. If not, see . */ -package bisq.user.profile; +package bisq.user.identity; import bisq.common.util.FileUtils; import com.google.common.annotations.VisibleForTesting; diff --git a/user/src/main/java/bisq/user/profile/UserProfile.java b/user/src/main/java/bisq/user/profile/UserProfile.java index ee6f03d6dd..93fb14d0d4 100644 --- a/user/src/main/java/bisq/user/profile/UserProfile.java +++ b/user/src/main/java/bisq/user/profile/UserProfile.java @@ -29,6 +29,7 @@ import bisq.network.p2p.services.data.storage.MetaData; import bisq.security.DigestUtil; import bisq.security.pow.ProofOfWork; +import bisq.user.identity.NymIdGenerator; import com.google.common.base.Charsets; import com.google.common.base.Joiner; import com.google.protobuf.InvalidProtocolBufferException; diff --git a/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java b/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java new file mode 100644 index 0000000000..611eb120f5 --- /dev/null +++ b/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java @@ -0,0 +1,173 @@ +/* + * This file is part of Bisq. + * + * Bisq is free software: you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or (at + * your option) any later version. + * + * Bisq is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public + * License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with Bisq. If not, see . + */ + +package bisq.user.identity; + +import bisq.common.util.StringUtils; +import bisq.security.DigestUtil; +import lombok.extern.slf4j.Slf4j; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import static bisq.user.identity.NymIdGenerator.fromHash; +import static bisq.user.identity.NymIdGenerator.read; +import static org.junit.jupiter.api.Assertions.assertEquals; + +@Slf4j +public class NymIdGeneratorTest { + @Test + void testFromHash() { + List adverbs, adjectives, nouns; + + // Min. lists + adverbs = List.of("1"); + adjectives = List.of("2"); + nouns = List.of("3"); + assertEquals("1230", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + //System.out.println("from hash: "+BigInteger.valueOf(0)); + assertEquals("1231", NymIdGenerator.fromHash(BigInteger.valueOf(1), adverbs, adjectives, nouns)); + assertEquals("1232", NymIdGenerator.fromHash(BigInteger.valueOf(2), adverbs, adjectives, nouns)); + + adverbs = List.of("1"); + adjectives = List.of("2", "3"); + nouns = List.of("4", "5", "6"); + + // util for printing results + /* int combinations = adverbs.size() * adjectives.size() * nouns.size(); + for (int i = 0; i < 2 * combinations; i++) { + BigInteger hashAsBigInteger = BigInteger.valueOf(i); + String result = fromHash(hashAsBigInteger, adverbs, adjectives, nouns); + System.out.println("assertEquals(\"" + result + "\", fromHash(BigInteger.valueOf(" + i + "), adverbs, adjectives, nouns));"); + }*/ + + assertEquals("1240", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + assertEquals("1241", NymIdGenerator.fromHash(BigInteger.valueOf(1), adverbs, adjectives, nouns)); + assertEquals("1242", NymIdGenerator.fromHash(BigInteger.valueOf(2), adverbs, adjectives, nouns)); + assertEquals("1243", NymIdGenerator.fromHash(BigInteger.valueOf(3), adverbs, adjectives, nouns)); + assertEquals("1244", NymIdGenerator.fromHash(BigInteger.valueOf(4), adverbs, adjectives, nouns)); + assertEquals("1245", NymIdGenerator.fromHash(BigInteger.valueOf(5), adverbs, adjectives, nouns)); + assertEquals("1246", NymIdGenerator.fromHash(BigInteger.valueOf(6), adverbs, adjectives, nouns)); + assertEquals("1247", NymIdGenerator.fromHash(BigInteger.valueOf(7), adverbs, adjectives, nouns)); + assertEquals("1248", NymIdGenerator.fromHash(BigInteger.valueOf(8), adverbs, adjectives, nouns)); + assertEquals("1249", NymIdGenerator.fromHash(BigInteger.valueOf(9), adverbs, adjectives, nouns)); + assertEquals("12410", NymIdGenerator.fromHash(BigInteger.valueOf(10), adverbs, adjectives, nouns)); + assertEquals("12411", NymIdGenerator.fromHash(BigInteger.valueOf(11), adverbs, adjectives, nouns)); + + // With negative numbers + assertEquals("12411", NymIdGenerator.fromHash(BigInteger.valueOf(-11), adverbs, adjectives, nouns)); + assertEquals("12410", NymIdGenerator.fromHash(BigInteger.valueOf(-10), adverbs, adjectives, nouns)); + assertEquals("1249", NymIdGenerator.fromHash(BigInteger.valueOf(-9), adverbs, adjectives, nouns)); + assertEquals("1248", NymIdGenerator.fromHash(BigInteger.valueOf(-8), adverbs, adjectives, nouns)); + assertEquals("1247", NymIdGenerator.fromHash(BigInteger.valueOf(-7), adverbs, adjectives, nouns)); + assertEquals("1246", NymIdGenerator.fromHash(BigInteger.valueOf(-6), adverbs, adjectives, nouns)); + assertEquals("1245", NymIdGenerator.fromHash(BigInteger.valueOf(-5), adverbs, adjectives, nouns)); + assertEquals("1244", NymIdGenerator.fromHash(BigInteger.valueOf(-4), adverbs, adjectives, nouns)); + assertEquals("1243", NymIdGenerator.fromHash(BigInteger.valueOf(-3), adverbs, adjectives, nouns)); + assertEquals("1242", NymIdGenerator.fromHash(BigInteger.valueOf(-2), adverbs, adjectives, nouns)); + assertEquals("1241", NymIdGenerator.fromHash(BigInteger.valueOf(-1), adverbs, adjectives, nouns)); + assertEquals("1240", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + + adverbs = List.of("1", "2"); + adjectives = List.of("3", "4"); + nouns = List.of("5", "6"); + assertEquals("1350", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + assertEquals("1360", NymIdGenerator.fromHash(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); + assertEquals("1450", NymIdGenerator.fromHash(BigInteger.valueOf(2000), adverbs, adjectives, nouns)); + assertEquals("1460", NymIdGenerator.fromHash(BigInteger.valueOf(3000), adverbs, adjectives, nouns)); + assertEquals("2350", NymIdGenerator.fromHash(BigInteger.valueOf(4000), adverbs, adjectives, nouns)); + assertEquals("2360", NymIdGenerator.fromHash(BigInteger.valueOf(5000), adverbs, adjectives, nouns)); + assertEquals("2450", NymIdGenerator.fromHash(BigInteger.valueOf(6000), adverbs, adjectives, nouns)); + assertEquals("2460", NymIdGenerator.fromHash(BigInteger.valueOf(7000), adverbs, adjectives, nouns)); + assertEquals("1350", NymIdGenerator.fromHash(BigInteger.valueOf(8000), adverbs, adjectives, nouns)); + assertEquals("1360", NymIdGenerator.fromHash(BigInteger.valueOf(9000), adverbs, adjectives, nouns)); + assertEquals("1450", NymIdGenerator.fromHash(BigInteger.valueOf(10000), adverbs, adjectives, nouns)); + assertEquals("1460", NymIdGenerator.fromHash(BigInteger.valueOf(11000), adverbs, adjectives, nouns)); + assertEquals("2350", NymIdGenerator.fromHash(BigInteger.valueOf(12000), adverbs, adjectives, nouns)); + assertEquals("2360", NymIdGenerator.fromHash(BigInteger.valueOf(13000), adverbs, adjectives, nouns)); + assertEquals("2450", NymIdGenerator.fromHash(BigInteger.valueOf(14000), adverbs, adjectives, nouns)); + assertEquals("2460", NymIdGenerator.fromHash(BigInteger.valueOf(15000), adverbs, adjectives, nouns)); + + //larger inputs + adverbs = List.of("1", "2"); + adjectives = List.of("3", "4"); + nouns = List.of("5", "6"); + assertEquals("1360", NymIdGenerator.fromHash(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); + assertEquals("1451", NymIdGenerator.fromHash(BigInteger.valueOf(2001), adverbs, adjectives, nouns)); + assertEquals("1462", NymIdGenerator.fromHash(BigInteger.valueOf(3002), adverbs, adjectives, nouns)); + assertEquals("2353", NymIdGenerator.fromHash(BigInteger.valueOf(4003), adverbs, adjectives, nouns)); + assertEquals("2364", NymIdGenerator.fromHash(BigInteger.valueOf(5004), adverbs, adjectives, nouns)); + assertEquals("2455", NymIdGenerator.fromHash(BigInteger.valueOf(6005), adverbs, adjectives, nouns)); + assertEquals("2466", NymIdGenerator.fromHash(BigInteger.valueOf(7006), adverbs, adjectives, nouns)); + assertEquals("1357", NymIdGenerator.fromHash(BigInteger.valueOf(8007), adverbs, adjectives, nouns)); + + adverbs = List.of("1", "2", "3"); + adjectives = List.of("3", "4", "5"); + nouns = List.of("5", "6", "7", "8", "9", "10", "11"); + BigInteger input = new BigInteger("test".getBytes(StandardCharsets.UTF_8)); + assertEquals("356748", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); + + input = new BigInteger("test1".getBytes(StandardCharsets.UTF_8)); + assertEquals("2511537", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); + + input = new BigInteger(DigestUtil.RIPEMD160("test".getBytes(StandardCharsets.UTF_8))); + assertEquals("358823", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); + + input = new BigInteger(DigestUtil.RIPEMD160("test1".getBytes(StandardCharsets.UTF_8))); + assertEquals("145726", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); + + // Feed random strings, expect no exceptions + for (int i = 0; i < 100; i++) { + input = new BigInteger(DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8))); + log.debug(NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); + } + + // Use real word lists + // Feed random strings, expect no exceptions + for (int i = 0; i < 3; i++) { + byte[] hash = DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8)); + log.debug(fromHash(hash)); + } + + // Use truncated lists, fill a set and check if we get no duplications + Set set = new HashSet<>(); + adverbs = read("adverbs.txt").subList(0, 5); + adjectives = read("adjectives.txt").subList(0, 5); + nouns = read("nouns.txt").subList(0, 5); + int combinations = adverbs.size() * adjectives.size() * nouns.size() * 1000; + String first = null; + for (int i = 0; i < combinations; i++) { + String result = NymIdGenerator.fromHash(BigInteger.valueOf(i), adverbs, adjectives, nouns); + Assertions.assertFalse(set.contains(result)); + set.add(result); + if (first == null) { + first = result; + } + } + assertEquals(combinations, set.size()); + + // At overflowing our combinations we get the first again + String result = NymIdGenerator.fromHash(BigInteger.valueOf(combinations), adverbs, adjectives, nouns); + Assertions.assertTrue(set.contains(result)); + assertEquals(first, result); + } +} \ No newline at end of file diff --git a/user/src/test/java/bisq/user/profile/NymIdGeneratorTest.java b/user/src/test/java/bisq/user/profile/NymIdGeneratorTest.java deleted file mode 100644 index ddc6284e0e..0000000000 --- a/user/src/test/java/bisq/user/profile/NymIdGeneratorTest.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * This file is part of Bisq. - * - * Bisq is free software: you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or (at - * your option) any later version. - * - * Bisq is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public - * License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with Bisq. If not, see . - */ - -package bisq.user.profile; - -import bisq.common.util.StringUtils; -import bisq.security.DigestUtil; -import lombok.extern.slf4j.Slf4j; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.math.BigInteger; -import java.nio.charset.StandardCharsets; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import static bisq.user.profile.NymIdGenerator.fromHash; -import static bisq.user.profile.NymIdGenerator.read; -import static org.junit.jupiter.api.Assertions.assertEquals; - -@Slf4j -public class NymIdGeneratorTest { - @Test - void testFromHash() { - List adverbs, adjectives, nouns; - - // Min. lists - adverbs = List.of("1"); - adjectives = List.of("2"); - nouns = List.of("3"); - assertEquals("1230", fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); - //System.out.println("from hash: "+BigInteger.valueOf(0)); - assertEquals("1231", fromHash(BigInteger.valueOf(1), adverbs, adjectives, nouns)); - assertEquals("1232", fromHash(BigInteger.valueOf(2), adverbs, adjectives, nouns)); - - adverbs = List.of("1"); - adjectives = List.of("2", "3"); - nouns = List.of("4", "5", "6"); - - // util for printing results - /* int combinations = adverbs.size() * adjectives.size() * nouns.size(); - for (int i = 0; i < 2 * combinations; i++) { - BigInteger hashAsBigInteger = BigInteger.valueOf(i); - String result = fromHash(hashAsBigInteger, adverbs, adjectives, nouns); - System.out.println("assertEquals(\"" + result + "\", fromHash(BigInteger.valueOf(" + i + "), adverbs, adjectives, nouns));"); - }*/ - - assertEquals("1240", fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); - assertEquals("1241", fromHash(BigInteger.valueOf(1), adverbs, adjectives, nouns)); - assertEquals("1242", fromHash(BigInteger.valueOf(2), adverbs, adjectives, nouns)); - assertEquals("1243", fromHash(BigInteger.valueOf(3), adverbs, adjectives, nouns)); - assertEquals("1244", fromHash(BigInteger.valueOf(4), adverbs, adjectives, nouns)); - assertEquals("1245", fromHash(BigInteger.valueOf(5), adverbs, adjectives, nouns)); - assertEquals("1246", fromHash(BigInteger.valueOf(6), adverbs, adjectives, nouns)); - assertEquals("1247", fromHash(BigInteger.valueOf(7), adverbs, adjectives, nouns)); - assertEquals("1248", fromHash(BigInteger.valueOf(8), adverbs, adjectives, nouns)); - assertEquals("1249", fromHash(BigInteger.valueOf(9), adverbs, adjectives, nouns)); - assertEquals("12410", fromHash(BigInteger.valueOf(10), adverbs, adjectives, nouns)); - assertEquals("12411", fromHash(BigInteger.valueOf(11), adverbs, adjectives, nouns)); - - // With negative numbers - assertEquals("12411", fromHash(BigInteger.valueOf(-11), adverbs, adjectives, nouns)); - assertEquals("12410", fromHash(BigInteger.valueOf(-10), adverbs, adjectives, nouns)); - assertEquals("1249", fromHash(BigInteger.valueOf(-9), adverbs, adjectives, nouns)); - assertEquals("1248", fromHash(BigInteger.valueOf(-8), adverbs, adjectives, nouns)); - assertEquals("1247", fromHash(BigInteger.valueOf(-7), adverbs, adjectives, nouns)); - assertEquals("1246", fromHash(BigInteger.valueOf(-6), adverbs, adjectives, nouns)); - assertEquals("1245", fromHash(BigInteger.valueOf(-5), adverbs, adjectives, nouns)); - assertEquals("1244", fromHash(BigInteger.valueOf(-4), adverbs, adjectives, nouns)); - assertEquals("1243", fromHash(BigInteger.valueOf(-3), adverbs, adjectives, nouns)); - assertEquals("1242", fromHash(BigInteger.valueOf(-2), adverbs, adjectives, nouns)); - assertEquals("1241", fromHash(BigInteger.valueOf(-1), adverbs, adjectives, nouns)); - assertEquals("1240", fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); - - adverbs = List.of("1", "2"); - adjectives = List.of("3", "4"); - nouns = List.of("5", "6"); - assertEquals("1350", fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); - assertEquals("1360", fromHash(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); - assertEquals("1450", fromHash(BigInteger.valueOf(2000), adverbs, adjectives, nouns)); - assertEquals("1460", fromHash(BigInteger.valueOf(3000), adverbs, adjectives, nouns)); - assertEquals("2350", fromHash(BigInteger.valueOf(4000), adverbs, adjectives, nouns)); - assertEquals("2360", fromHash(BigInteger.valueOf(5000), adverbs, adjectives, nouns)); - assertEquals("2450", fromHash(BigInteger.valueOf(6000), adverbs, adjectives, nouns)); - assertEquals("2460", fromHash(BigInteger.valueOf(7000), adverbs, adjectives, nouns)); - assertEquals("1350", fromHash(BigInteger.valueOf(8000), adverbs, adjectives, nouns)); - assertEquals("1360", fromHash(BigInteger.valueOf(9000), adverbs, adjectives, nouns)); - assertEquals("1450", fromHash(BigInteger.valueOf(10000), adverbs, adjectives, nouns)); - assertEquals("1460", fromHash(BigInteger.valueOf(11000), adverbs, adjectives, nouns)); - assertEquals("2350", fromHash(BigInteger.valueOf(12000), adverbs, adjectives, nouns)); - assertEquals("2360", fromHash(BigInteger.valueOf(13000), adverbs, adjectives, nouns)); - assertEquals("2450", fromHash(BigInteger.valueOf(14000), adverbs, adjectives, nouns)); - assertEquals("2460", fromHash(BigInteger.valueOf(15000), adverbs, adjectives, nouns)); - - //larger inputs - adverbs = List.of("1", "2"); - adjectives = List.of("3", "4"); - nouns = List.of("5", "6"); - assertEquals("1360", fromHash(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); - assertEquals("1451", fromHash(BigInteger.valueOf(2001), adverbs, adjectives, nouns)); - assertEquals("1462", fromHash(BigInteger.valueOf(3002), adverbs, adjectives, nouns)); - assertEquals("2353", fromHash(BigInteger.valueOf(4003), adverbs, adjectives, nouns)); - assertEquals("2364", fromHash(BigInteger.valueOf(5004), adverbs, adjectives, nouns)); - assertEquals("2455", fromHash(BigInteger.valueOf(6005), adverbs, adjectives, nouns)); - assertEquals("2466", fromHash(BigInteger.valueOf(7006), adverbs, adjectives, nouns)); - assertEquals("1357", fromHash(BigInteger.valueOf(8007), adverbs, adjectives, nouns)); - - adverbs = List.of("1", "2", "3"); - adjectives = List.of("3", "4", "5"); - nouns = List.of("5", "6", "7", "8", "9", "10", "11"); - BigInteger input = new BigInteger("test".getBytes(StandardCharsets.UTF_8)); - assertEquals("356748", fromHash(input, adverbs, adjectives, nouns)); - - input = new BigInteger("test1".getBytes(StandardCharsets.UTF_8)); - assertEquals("2511537", fromHash(input, adverbs, adjectives, nouns)); - - input = new BigInteger(DigestUtil.RIPEMD160("test".getBytes(StandardCharsets.UTF_8))); - assertEquals("358823", fromHash(input, adverbs, adjectives, nouns)); - - input = new BigInteger(DigestUtil.RIPEMD160("test1".getBytes(StandardCharsets.UTF_8))); - assertEquals("145726", fromHash(input, adverbs, adjectives, nouns)); - - // Feed random strings, expect no exceptions - for (int i = 0; i < 100; i++) { - input = new BigInteger(DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8))); - log.debug(fromHash(input, adverbs, adjectives, nouns)); - } - - // Use real word lists - // Feed random strings, expect no exceptions - for (int i = 0; i < 3; i++) { - byte[] hash = DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8)); - log.debug(fromHash(hash)); - } - - // Use truncated lists, fill a set and check if we get no duplications - Set set = new HashSet<>(); - adverbs = read("adverbs.txt").subList(0, 5); - adjectives = read("adjectives.txt").subList(0, 5); - nouns = read("nouns.txt").subList(0, 5); - int combinations = adverbs.size() * adjectives.size() * nouns.size() * 1000; - String first = null; - for (int i = 0; i < combinations; i++) { - String result = fromHash(BigInteger.valueOf(i), adverbs, adjectives, nouns); - Assertions.assertFalse(set.contains(result)); - set.add(result); - if (first == null) { - first = result; - } - } - assertEquals(combinations, set.size()); - - // At overflowing our combinations we get the first again - String result = fromHash(BigInteger.valueOf(combinations), adverbs, adjectives, nouns); - Assertions.assertTrue(set.contains(result)); - assertEquals(first, result); - } -} \ No newline at end of file From d4fa397bf747a6b1bba677d0cb8d79de22384024 Mon Sep 17 00:00:00 2001 From: djing chan Date: Wed, 28 Feb 2024 14:03:38 +0700 Subject: [PATCH 25/28] Add solution (counter) of PoW to nym and icon generation --- .../desktop/components/cathash/CatHash.java | 22 ++-- .../TradeWizardSelectOfferView.java | 4 +- .../main/content/chat/BaseChatController.java | 10 +- .../sidebar/ChannelSidebarUserProfile.java | 4 +- .../chat/sidebar/UserProfileSidebar.java | 4 +- .../content/components/CitationBlock.java | 4 +- .../content/components/UserProfileIcon.java | 4 +- .../components/UserProfileSelection.java | 8 +- .../user_profile/UserProfileController.java | 4 +- .../CreateNewProfileStep2Controller.java | 4 +- .../CreateProfileController.java | 22 ++-- .../hashcash/HashCashProofOfWorkService.java | 4 +- .../bisq/user/identity/NymIdGenerator.java | 17 +-- .../user/identity/UserIdentityService.java | 2 +- .../java/bisq/user/profile/UserProfile.java | 2 +- .../user/identity/NymIdGeneratorTest.java | 119 +++++++++--------- 16 files changed, 116 insertions(+), 118 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index ceb0849b1a..fa3068d6c2 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -19,6 +19,7 @@ import bisq.common.data.ByteArray; import bisq.desktop.common.utils.ImageUtil; +import bisq.user.profile.UserProfile; import javafx.scene.image.Image; import lombok.extern.slf4j.Slf4j; @@ -30,26 +31,27 @@ public class CatHash { private static final int SIZE = 300; private static final int MAX_CACHE_SIZE = 10000; - private static final ConcurrentHashMap CACHE = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap CACHE = new ConcurrentHashMap<>(); - public static Image getImage(byte[] pubKeyHash) { - return getImage(new ByteArray(pubKeyHash), true); + public static Image getImage(UserProfile userProfile) { + return getImage(userProfile.getPubKeyHash(), userProfile.getProofOfWork().getCounter(), true); } - public static Image getImage(byte[] pubKeyHash, boolean useCache) { - return getImage(new ByteArray(pubKeyHash), useCache); + public static Image getImage(byte[] pubKeyHash, long powSolution) { + return getImage(pubKeyHash, powSolution, true); } - private static Image getImage(ByteArray pubKeyHash, boolean useCache) { - if (useCache && CACHE.containsKey(pubKeyHash)) { - return CACHE.get(pubKeyHash); + public static Image getImage(byte[] pubKeyHash, long powSolution, boolean useCache) { + BigInteger input = new BigInteger(new ByteArray(pubKeyHash).getBytes()).add(BigInteger.valueOf(powSolution)); + if (useCache && CACHE.containsKey(input)) { + return CACHE.get(input); } - BigInteger input = new BigInteger(pubKeyHash.getBytes()); + int[] buckets = BucketEncoder.encode(input, BucketConfig.getBucketSizes()); String[] paths = BucketEncoder.toPaths(buckets, BucketConfig.getPathTemplates()); Image image = ImageUtil.composeImage(paths, SIZE, SIZE); if (useCache && CACHE.size() < MAX_CACHE_SIZE) { - CACHE.put(pubKeyHash, image); + CACHE.put(input, image); } return image; } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/trade_wizard/select_offer/TradeWizardSelectOfferView.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/trade_wizard/select_offer/TradeWizardSelectOfferView.java index 424faf4e9a..a32c08b4fd 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/trade_wizard/select_offer/TradeWizardSelectOfferView.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/bisq_easy/trade_wizard/select_offer/TradeWizardSelectOfferView.java @@ -23,8 +23,8 @@ import bisq.common.monetary.PriceQuote; import bisq.desktop.common.utils.ImageUtil; import bisq.desktop.common.view.View; -import bisq.desktop.components.containers.Spacer; import bisq.desktop.components.cathash.CatHash; +import bisq.desktop.components.containers.Spacer; import bisq.desktop.components.table.BisqTableColumn; import bisq.desktop.components.table.BisqTableView; import bisq.desktop.main.content.components.ReputationScoreDisplay; @@ -249,7 +249,7 @@ public void updateItem(final ListItem item, boolean empty) { if (item != null && !empty) { userName.setText(item.getMakerUserName()); item.getAuthorUserProfile().ifPresent(userProfile -> - roboIcon.setImage(CatHash.getImage(userProfile.getPubKeyHash()))); + roboIcon.setImage(CatHash.getImage(userProfile))); setGraphic(hBox); } else { setGraphic(null); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/BaseChatController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/BaseChatController.java index 21d5694cc8..4b1a8dae08 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/BaseChatController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/BaseChatController.java @@ -30,8 +30,8 @@ import bisq.desktop.common.threading.UIThread; import bisq.desktop.common.view.Navigation; import bisq.desktop.common.view.NavigationController; -import bisq.desktop.components.controls.BisqIconButton; import bisq.desktop.components.cathash.CatHash; +import bisq.desktop.components.controls.BisqIconButton; import bisq.desktop.main.content.chat.sidebar.ChannelSidebar; import bisq.desktop.main.content.chat.sidebar.UserProfileSidebar; import bisq.desktop.main.content.components.chatMessages.ChatMessagesComponent; @@ -147,7 +147,7 @@ protected void selectedChannelChanged(@Nullable ChatChannel privateChatChannel) { if (privateChatChannel instanceof TwoPartyPrivateChatChannel) { TwoPartyPrivateChatChannel twoPartyPrivateChatChannel = (TwoPartyPrivateChatChannel) privateChatChannel; - Image image = CatHash.getImage(twoPartyPrivateChatChannel.getPeer().getPubKeyHash()); + Image image = CatHash.getImage(twoPartyPrivateChatChannel.getPeer()); ImageView imageView = new ImageView(image); imageView.setFitWidth(35); imageView.setFitHeight(35); @@ -167,13 +167,13 @@ protected void applyPeersIcon(PrivateChatChannel privateChatChannel) { left = bisqEasyOpenTradeChannel.getPeer(); right = bisqEasyOpenTradeChannel.getMediator().get(); } - ImageView leftImageView = new ImageView(CatHash.getImage(left.getPubKeyHash())); + ImageView leftImageView = new ImageView(CatHash.getImage(left)); leftImageView.setFitWidth(35); leftImageView.setFitHeight(35); Button leftIconButton = BisqIconButton.createIconButton(leftImageView); leftIconButton.setMouseTransparent(true); - ImageView rightImageView = new ImageView(CatHash.getImage(right.getPubKeyHash())); + ImageView rightImageView = new ImageView(CatHash.getImage(right)); rightImageView.setFitWidth(35); rightImageView.setFitHeight(35); Button rightIconButton = BisqIconButton.createIconButton(rightImageView); @@ -184,7 +184,7 @@ protected void applyPeersIcon(PrivateChatChannel privateChatChannel) { hBox.setAlignment(Pos.CENTER_LEFT); model.getChannelIconNode().set(hBox); } else { - Image image = CatHash.getImage(bisqEasyOpenTradeChannel.getPeer().getPubKeyHash()); + Image image = CatHash.getImage(bisqEasyOpenTradeChannel.getPeer()); ImageView imageView = new ImageView(image); imageView.setFitWidth(35); imageView.setFitHeight(35); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/ChannelSidebarUserProfile.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/ChannelSidebarUserProfile.java index d468940888..3fec0591aa 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/ChannelSidebarUserProfile.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/ChannelSidebarUserProfile.java @@ -17,8 +17,8 @@ package bisq.desktop.main.content.chat.sidebar; -import bisq.desktop.components.controls.BisqTooltip; import bisq.desktop.components.cathash.CatHash; +import bisq.desktop.components.controls.BisqTooltip; import bisq.i18n.Res; import bisq.user.banned.BannedUserService; import bisq.user.profile.UserProfile; @@ -93,7 +93,7 @@ public void onActivate() { String userName = userProfile.getUserName(); model.userName.set(isUserProfileBanned() ? Res.get("user.userProfile.userName.banned", userName) : userName); - model.roboHashImage.set(CatHash.getImage(userProfile.getPubKeyHash())); + model.roboHashImage.set(CatHash.getImage(userProfile)); } @Override diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/UserProfileSidebar.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/UserProfileSidebar.java index 01dccc7e35..07b66affb8 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/UserProfileSidebar.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/chat/sidebar/UserProfileSidebar.java @@ -26,10 +26,10 @@ import bisq.desktop.ServiceProvider; import bisq.desktop.common.Layout; import bisq.desktop.common.view.Navigation; +import bisq.desktop.components.cathash.CatHash; import bisq.desktop.components.containers.Spacer; import bisq.desktop.components.controls.BisqIconButton; import bisq.desktop.components.controls.BisqTooltip; -import bisq.desktop.components.cathash.CatHash; import bisq.desktop.main.content.components.ReportToModeratorWindow; import bisq.desktop.main.content.components.ReputationScoreDisplay; import bisq.i18n.Res; @@ -129,7 +129,7 @@ public void onActivate() { model.nickName.set(isUserProfileBanned() ? Res.get("user.userProfile.userName.banned", nickName) : nickName); model.nym.set(Res.get("chat.sideBar.userProfile.nym", userProfile.getNym())); model.userProfileIdString.set(Res.get("chat.sideBar.userProfile.id", userProfile.getId())); - model.roboHashNode.set(CatHash.getImage(userProfile.getPubKeyHash())); + model.roboHashNode.set(CatHash.getImage(userProfile)); model.addressByTransport.set(userProfile.getAddressByTransportDisplayString(26)); model.addressByTransportTooltip.set(userProfile.getAddressByTransportDisplayString()); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/CitationBlock.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/CitationBlock.java index 9a620bbfcb..506130a48f 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/CitationBlock.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/CitationBlock.java @@ -21,9 +21,9 @@ import bisq.chat.ChatService; import bisq.chat.Citation; import bisq.desktop.ServiceProvider; +import bisq.desktop.components.cathash.CatHash; import bisq.desktop.components.containers.Spacer; import bisq.desktop.components.controls.BisqIconButton; -import bisq.desktop.components.cathash.CatHash; import bisq.i18n.Res; import bisq.user.profile.UserProfile; import bisq.user.profile.UserProfileService; @@ -92,7 +92,7 @@ private void reply(ChatMessage chatMessage) { userProfileService.findUserProfile(chatMessage.getAuthorUserProfileId()).ifPresent(author -> { model.author = author; model.userName.set(author.getUserName()); - model.roboHashNode.set(CatHash.getImage(author.getPubKeyHash())); + model.roboHashNode.set(CatHash.getImage(author)); model.citation.set(chatMessage.getText()); model.visible.set(true); }); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileIcon.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileIcon.java index a2e95c8190..1fef97f540 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileIcon.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileIcon.java @@ -17,8 +17,8 @@ package bisq.desktop.main.content.components; -import bisq.desktop.components.controls.BisqTooltip; import bisq.desktop.components.cathash.CatHash; +import bisq.desktop.components.controls.BisqTooltip; import bisq.user.profile.UserProfile; import javafx.scene.control.Tooltip; import javafx.scene.image.ImageView; @@ -45,7 +45,7 @@ public void setUserProfile(@Nullable UserProfile userProfile) { tooltip = new BisqTooltip(userProfile.getTooltipString()); tooltip.getStyleClass().add("medium-dark-tooltip"); Tooltip.install(this, tooltip); - setImage(CatHash.getImage(userProfile.getPubKeyHash())); + setImage(CatHash.getImage(userProfile)); } else { setImage(null); if (tooltip != null) { diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileSelection.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileSelection.java index 5cda57dade..7272e6a585 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileSelection.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/components/UserProfileSelection.java @@ -29,9 +29,9 @@ import bisq.desktop.common.observable.FxBindings; import bisq.desktop.common.threading.UIThread; import bisq.desktop.common.view.Navigation; +import bisq.desktop.components.cathash.CatHash; import bisq.desktop.components.controls.AutoCompleteComboBox; import bisq.desktop.components.overlay.Popup; -import bisq.desktop.components.cathash.CatHash; import bisq.i18n.Res; import bisq.user.identity.UserIdentity; import bisq.user.identity.UserIdentityService; @@ -267,7 +267,7 @@ protected void onViewAttached() { if (userIdentity != null) { userName.setText(comboBox.getConverter().toString(selected)); - icon.setImage(CatHash.getImage(userIdentity.getPubKeyHash())); + icon.setImage(CatHash.getImage(userIdentity.getUserProfile())); } } }); @@ -373,7 +373,7 @@ protected void updateItem(ListItem item, boolean empty) { super.updateItem(item, empty); if (item != null && !empty) { - imageView.setImage(CatHash.getImage(item.userIdentity.getPubKeyHash())); + imageView.setImage(CatHash.getImage(item.userIdentity.getUserProfile())); label.setText(item.userIdentity.getUserName()); labelWidthListener = (observable, oldValue, newValue) -> { @@ -463,7 +463,7 @@ public UserProfileSkin(ComboBox control, String description, String pr if (newValue != null) { UserIdentity userIdentity = newValue.userIdentity; if (userIdentity != null) { - imageView.setImage(CatHash.getImage(userIdentity.getPubKeyHash())); + imageView.setImage(CatHash.getImage(userIdentity.getUserProfile())); label.setText(control.getConverter().toString(newValue)); buttonPane.layout(); } diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/UserProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/UserProfileController.java index 2771fedbe9..284850a444 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/UserProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/UserProfileController.java @@ -25,8 +25,8 @@ import bisq.desktop.common.threading.UIThread; import bisq.desktop.common.view.Controller; import bisq.desktop.common.view.Navigation; -import bisq.desktop.components.overlay.Popup; import bisq.desktop.components.cathash.CatHash; +import bisq.desktop.components.overlay.Popup; import bisq.i18n.Res; import bisq.network.p2p.services.data.BroadcastResult; import bisq.presentation.formatters.TimeFormatter; @@ -82,7 +82,7 @@ public void onActivate() { model.getNickName().set(userProfile.getNickName()); model.getNymId().set(userProfile.getNym()); model.getProfileId().set(userProfile.getId()); - model.getRoboHash().set(CatHash.getImage(userProfile.getPubKeyHash())); + model.getRoboHash().set(CatHash.getImage(userProfile)); model.getStatement().set(userProfile.getStatement()); model.getTerms().set(userProfile.getTerms()); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java index 165455bea2..7d1147f4a1 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java @@ -20,8 +20,8 @@ import bisq.desktop.ServiceProvider; import bisq.desktop.common.threading.UIThread; import bisq.desktop.common.view.InitWithDataController; -import bisq.desktop.components.overlay.Popup; import bisq.desktop.components.cathash.CatHash; +import bisq.desktop.components.overlay.Popup; import bisq.desktop.overlay.OverlayController; import bisq.i18n.Res; import bisq.security.pow.ProofOfWork; @@ -90,7 +90,7 @@ public void initWithData(InitData data) { model.setProofOfWork(data.getProofOfWork()); model.getNickName().set(data.getNickName()); model.getNym().set(data.getNym()); - model.getRoboHashImage().set(CatHash.getImage(data.getPubKeyHash())); + model.getRoboHashImage().set(CatHash.getImage(data.getPubKeyHash(), data.getProofOfWork().getCounter())); } @Override diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java index 3b9c7af450..3d5109bea3 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java @@ -33,6 +33,7 @@ import bisq.user.identity.NymIdGenerator; import bisq.user.identity.UserIdentityService; import bisq.user.profile.UserProfile; +import javafx.scene.image.Image; import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.fxmisc.easybind.EasyBind; @@ -140,21 +141,26 @@ void generateNewKeyPair() { model.setKeyPair(Optional.of(keyPair)); byte[] pubKeyHash = DigestUtil.hash(keyPair.getPublic().getEncoded()); model.setPubKeyHash(Optional.of(pubKeyHash)); - // mintNymProofOfWork is executed on a ForkJoinPool thread mintNymProofOfWorkFuture = Optional.of(createProofOfWork(pubKeyHash)); } private CompletableFuture createProofOfWork(byte[] pubKeyHash) { long ts = System.currentTimeMillis(); - return userIdentityService.mintNymProofOfWork(pubKeyHash) + return CompletableFuture.supplyAsync(() -> userIdentityService.mintNymProofOfWork(pubKeyHash)) .thenApply(proofOfWork -> { long powDuration = System.currentTimeMillis() - ts; log.info("Proof of work creation completed after {} ms", powDuration); createSimulatedDelay(powDuration); UIThread.run(() -> { model.setProofOfWork(Optional.of(proofOfWork)); - String nym = NymIdGenerator.fromHash(pubKeyHash); - applyIdentityData(pubKeyHash, nym); + long powSolution = proofOfWork.getCounter(); // For HashCash the solution is the counter as byte array + String nym = NymIdGenerator.generate(pubKeyHash, powSolution); + Image image = CatHash.getImage(pubKeyHash, powSolution); + model.getNym().set(nym); + model.getRoboHashImage().set(image); + model.getPowProgress().set(0); + model.getRoboHashIconVisible().set(true); + model.getReGenerateButtonDisabled().set(false); }); return proofOfWork; }); @@ -191,12 +197,4 @@ private void setPreGenerateState() { model.getPowProgress().set(-1); model.getNym().set(Res.get("onboarding.createProfile.nym.generating")); } - - private void applyIdentityData(byte[] pubKeyHash, String nym) { - model.getNym().set(nym); - model.getRoboHashImage().set(CatHash.getImage(pubKeyHash)); - model.getPowProgress().set(0); - model.getRoboHashIconVisible().set(true); - model.getReGenerateButtonDisabled().set(false); - } } diff --git a/security/src/main/java/bisq/security/pow/hashcash/HashCashProofOfWorkService.java b/security/src/main/java/bisq/security/pow/hashcash/HashCashProofOfWorkService.java index 449b3f6c53..6534478ba1 100644 --- a/security/src/main/java/bisq/security/pow/hashcash/HashCashProofOfWorkService.java +++ b/security/src/main/java/bisq/security/pow/hashcash/HashCashProofOfWorkService.java @@ -50,9 +50,7 @@ public ProofOfWork mint(byte[] payload, } while (numberOfLeadingZeros(hash) <= log2Difficulty); byte[] solution = Longs.toByteArray(counter); - ProofOfWork proofOfWork = new ProofOfWork(payload, counter, challenge, difficulty, solution, - System.currentTimeMillis() - ts); - return proofOfWork; + return new ProofOfWork(payload, counter, challenge, difficulty, solution, System.currentTimeMillis() - ts); } @Override diff --git a/user/src/main/java/bisq/user/identity/NymIdGenerator.java b/user/src/main/java/bisq/user/identity/NymIdGenerator.java index d4e44b8ded..cb35c8e30d 100644 --- a/user/src/main/java/bisq/user/identity/NymIdGenerator.java +++ b/user/src/main/java/bisq/user/identity/NymIdGenerator.java @@ -37,26 +37,27 @@ public class NymIdGenerator { private static final BigInteger MAX_INTEGER = BigInteger.valueOf(Integer.MAX_VALUE); private static final String DEFAULT_SEPARATOR = "-"; - public static String fromHash(byte[] hash) { + public static String generate(byte[] hash, long powSolution) { List adverbs = read("adverbs.txt"); List adjectives = read("adjectives.txt"); List nouns = read("nouns.txt"); - return fromHash(new BigInteger(hash), adverbs, adjectives, nouns, DEFAULT_SEPARATOR); + BigInteger input = new BigInteger(hash).add(BigInteger.valueOf(powSolution)); + return generate(input, adverbs, adjectives, nouns, DEFAULT_SEPARATOR); } @VisibleForTesting - static String fromHash(BigInteger hashAsBigInteger, List adverbs, List adjectives, List nouns) { - return fromHash(hashAsBigInteger, adverbs, adjectives, nouns, ""); + static String generate(BigInteger input, List adverbs, List adjectives, List nouns) { + return generate(input, adverbs, adjectives, nouns, ""); } - static String fromHash(BigInteger hashAsBigInteger, List adverbs, List adjectives, List nouns, String separator) { - hashAsBigInteger = hashAsBigInteger.abs(); + static String generate(BigInteger input, List adverbs, List adjectives, List nouns, String separator) { + input = input.abs(); BigInteger numAdjectives = BigInteger.valueOf(adjectives.size()); BigInteger numNouns = BigInteger.valueOf(nouns.size()); BigInteger appendixNumber = BigInteger.valueOf(1000); - BigInteger adverbIndex = hashAsBigInteger.divide(numAdjectives.multiply(numNouns).multiply(appendixNumber)); - BigInteger remainderHash = hashAsBigInteger.subtract(adverbIndex.multiply(numAdjectives.multiply(numNouns.multiply(appendixNumber)))); + BigInteger adverbIndex = input.divide(numAdjectives.multiply(numNouns).multiply(appendixNumber)); + BigInteger remainderHash = input.subtract(adverbIndex.multiply(numAdjectives.multiply(numNouns.multiply(appendixNumber)))); BigInteger adjectiveIndex = remainderHash.divide(numNouns.multiply(appendixNumber)); BigInteger remainderAdverb = remainderHash.subtract(adjectiveIndex.multiply(numNouns).multiply(appendixNumber)); BigInteger nounsIndex = remainderAdverb.divide(appendixNumber); diff --git a/user/src/main/java/bisq/user/identity/UserIdentityService.java b/user/src/main/java/bisq/user/identity/UserIdentityService.java index a06931f2c2..adb4bc57b8 100644 --- a/user/src/main/java/bisq/user/identity/UserIdentityService.java +++ b/user/src/main/java/bisq/user/identity/UserIdentityService.java @@ -112,7 +112,7 @@ public CompletableFuture shutdown() { // API /////////////////////////////////////////////////////////////////////////////////////////////////// - public CompletableFuture mintNymProofOfWork(byte[] pubKeyHash) { + public ProofOfWork mintNymProofOfWork(byte[] pubKeyHash) { return hashCashProofOfWorkService.mint(pubKeyHash, null, MINT_NYM_DIFFICULTY); } diff --git a/user/src/main/java/bisq/user/profile/UserProfile.java b/user/src/main/java/bisq/user/profile/UserProfile.java index 93fb14d0d4..cc60d29ddc 100644 --- a/user/src/main/java/bisq/user/profile/UserProfile.java +++ b/user/src/main/java/bisq/user/profile/UserProfile.java @@ -149,7 +149,7 @@ public String getId() { public String getNym() { if (nym == null) { - nym = NymIdGenerator.fromHash(getPubKeyHash()); + nym = NymIdGenerator.generate(getPubKeyHash(), proofOfWork.getCounter()); } return nym; } diff --git a/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java b/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java index 611eb120f5..ecea661626 100644 --- a/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java +++ b/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java @@ -29,7 +29,6 @@ import java.util.List; import java.util.Set; -import static bisq.user.identity.NymIdGenerator.fromHash; import static bisq.user.identity.NymIdGenerator.read; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -43,10 +42,10 @@ void testFromHash() { adverbs = List.of("1"); adjectives = List.of("2"); nouns = List.of("3"); - assertEquals("1230", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + assertEquals("1230", NymIdGenerator.generate(BigInteger.valueOf(0), adverbs, adjectives, nouns)); //System.out.println("from hash: "+BigInteger.valueOf(0)); - assertEquals("1231", NymIdGenerator.fromHash(BigInteger.valueOf(1), adverbs, adjectives, nouns)); - assertEquals("1232", NymIdGenerator.fromHash(BigInteger.valueOf(2), adverbs, adjectives, nouns)); + assertEquals("1231", NymIdGenerator.generate(BigInteger.valueOf(1), adverbs, adjectives, nouns)); + assertEquals("1232", NymIdGenerator.generate(BigInteger.valueOf(2), adverbs, adjectives, nouns)); adverbs = List.of("1"); adjectives = List.of("2", "3"); @@ -60,92 +59,92 @@ void testFromHash() { System.out.println("assertEquals(\"" + result + "\", fromHash(BigInteger.valueOf(" + i + "), adverbs, adjectives, nouns));"); }*/ - assertEquals("1240", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); - assertEquals("1241", NymIdGenerator.fromHash(BigInteger.valueOf(1), adverbs, adjectives, nouns)); - assertEquals("1242", NymIdGenerator.fromHash(BigInteger.valueOf(2), adverbs, adjectives, nouns)); - assertEquals("1243", NymIdGenerator.fromHash(BigInteger.valueOf(3), adverbs, adjectives, nouns)); - assertEquals("1244", NymIdGenerator.fromHash(BigInteger.valueOf(4), adverbs, adjectives, nouns)); - assertEquals("1245", NymIdGenerator.fromHash(BigInteger.valueOf(5), adverbs, adjectives, nouns)); - assertEquals("1246", NymIdGenerator.fromHash(BigInteger.valueOf(6), adverbs, adjectives, nouns)); - assertEquals("1247", NymIdGenerator.fromHash(BigInteger.valueOf(7), adverbs, adjectives, nouns)); - assertEquals("1248", NymIdGenerator.fromHash(BigInteger.valueOf(8), adverbs, adjectives, nouns)); - assertEquals("1249", NymIdGenerator.fromHash(BigInteger.valueOf(9), adverbs, adjectives, nouns)); - assertEquals("12410", NymIdGenerator.fromHash(BigInteger.valueOf(10), adverbs, adjectives, nouns)); - assertEquals("12411", NymIdGenerator.fromHash(BigInteger.valueOf(11), adverbs, adjectives, nouns)); + assertEquals("1240", NymIdGenerator.generate(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + assertEquals("1241", NymIdGenerator.generate(BigInteger.valueOf(1), adverbs, adjectives, nouns)); + assertEquals("1242", NymIdGenerator.generate(BigInteger.valueOf(2), adverbs, adjectives, nouns)); + assertEquals("1243", NymIdGenerator.generate(BigInteger.valueOf(3), adverbs, adjectives, nouns)); + assertEquals("1244", NymIdGenerator.generate(BigInteger.valueOf(4), adverbs, adjectives, nouns)); + assertEquals("1245", NymIdGenerator.generate(BigInteger.valueOf(5), adverbs, adjectives, nouns)); + assertEquals("1246", NymIdGenerator.generate(BigInteger.valueOf(6), adverbs, adjectives, nouns)); + assertEquals("1247", NymIdGenerator.generate(BigInteger.valueOf(7), adverbs, adjectives, nouns)); + assertEquals("1248", NymIdGenerator.generate(BigInteger.valueOf(8), adverbs, adjectives, nouns)); + assertEquals("1249", NymIdGenerator.generate(BigInteger.valueOf(9), adverbs, adjectives, nouns)); + assertEquals("12410", NymIdGenerator.generate(BigInteger.valueOf(10), adverbs, adjectives, nouns)); + assertEquals("12411", NymIdGenerator.generate(BigInteger.valueOf(11), adverbs, adjectives, nouns)); // With negative numbers - assertEquals("12411", NymIdGenerator.fromHash(BigInteger.valueOf(-11), adverbs, adjectives, nouns)); - assertEquals("12410", NymIdGenerator.fromHash(BigInteger.valueOf(-10), adverbs, adjectives, nouns)); - assertEquals("1249", NymIdGenerator.fromHash(BigInteger.valueOf(-9), adverbs, adjectives, nouns)); - assertEquals("1248", NymIdGenerator.fromHash(BigInteger.valueOf(-8), adverbs, adjectives, nouns)); - assertEquals("1247", NymIdGenerator.fromHash(BigInteger.valueOf(-7), adverbs, adjectives, nouns)); - assertEquals("1246", NymIdGenerator.fromHash(BigInteger.valueOf(-6), adverbs, adjectives, nouns)); - assertEquals("1245", NymIdGenerator.fromHash(BigInteger.valueOf(-5), adverbs, adjectives, nouns)); - assertEquals("1244", NymIdGenerator.fromHash(BigInteger.valueOf(-4), adverbs, adjectives, nouns)); - assertEquals("1243", NymIdGenerator.fromHash(BigInteger.valueOf(-3), adverbs, adjectives, nouns)); - assertEquals("1242", NymIdGenerator.fromHash(BigInteger.valueOf(-2), adverbs, adjectives, nouns)); - assertEquals("1241", NymIdGenerator.fromHash(BigInteger.valueOf(-1), adverbs, adjectives, nouns)); - assertEquals("1240", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + assertEquals("12411", NymIdGenerator.generate(BigInteger.valueOf(-11), adverbs, adjectives, nouns)); + assertEquals("12410", NymIdGenerator.generate(BigInteger.valueOf(-10), adverbs, adjectives, nouns)); + assertEquals("1249", NymIdGenerator.generate(BigInteger.valueOf(-9), adverbs, adjectives, nouns)); + assertEquals("1248", NymIdGenerator.generate(BigInteger.valueOf(-8), adverbs, adjectives, nouns)); + assertEquals("1247", NymIdGenerator.generate(BigInteger.valueOf(-7), adverbs, adjectives, nouns)); + assertEquals("1246", NymIdGenerator.generate(BigInteger.valueOf(-6), adverbs, adjectives, nouns)); + assertEquals("1245", NymIdGenerator.generate(BigInteger.valueOf(-5), adverbs, adjectives, nouns)); + assertEquals("1244", NymIdGenerator.generate(BigInteger.valueOf(-4), adverbs, adjectives, nouns)); + assertEquals("1243", NymIdGenerator.generate(BigInteger.valueOf(-3), adverbs, adjectives, nouns)); + assertEquals("1242", NymIdGenerator.generate(BigInteger.valueOf(-2), adverbs, adjectives, nouns)); + assertEquals("1241", NymIdGenerator.generate(BigInteger.valueOf(-1), adverbs, adjectives, nouns)); + assertEquals("1240", NymIdGenerator.generate(BigInteger.valueOf(0), adverbs, adjectives, nouns)); adverbs = List.of("1", "2"); adjectives = List.of("3", "4"); nouns = List.of("5", "6"); - assertEquals("1350", NymIdGenerator.fromHash(BigInteger.valueOf(0), adverbs, adjectives, nouns)); - assertEquals("1360", NymIdGenerator.fromHash(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); - assertEquals("1450", NymIdGenerator.fromHash(BigInteger.valueOf(2000), adverbs, adjectives, nouns)); - assertEquals("1460", NymIdGenerator.fromHash(BigInteger.valueOf(3000), adverbs, adjectives, nouns)); - assertEquals("2350", NymIdGenerator.fromHash(BigInteger.valueOf(4000), adverbs, adjectives, nouns)); - assertEquals("2360", NymIdGenerator.fromHash(BigInteger.valueOf(5000), adverbs, adjectives, nouns)); - assertEquals("2450", NymIdGenerator.fromHash(BigInteger.valueOf(6000), adverbs, adjectives, nouns)); - assertEquals("2460", NymIdGenerator.fromHash(BigInteger.valueOf(7000), adverbs, adjectives, nouns)); - assertEquals("1350", NymIdGenerator.fromHash(BigInteger.valueOf(8000), adverbs, adjectives, nouns)); - assertEquals("1360", NymIdGenerator.fromHash(BigInteger.valueOf(9000), adverbs, adjectives, nouns)); - assertEquals("1450", NymIdGenerator.fromHash(BigInteger.valueOf(10000), adverbs, adjectives, nouns)); - assertEquals("1460", NymIdGenerator.fromHash(BigInteger.valueOf(11000), adverbs, adjectives, nouns)); - assertEquals("2350", NymIdGenerator.fromHash(BigInteger.valueOf(12000), adverbs, adjectives, nouns)); - assertEquals("2360", NymIdGenerator.fromHash(BigInteger.valueOf(13000), adverbs, adjectives, nouns)); - assertEquals("2450", NymIdGenerator.fromHash(BigInteger.valueOf(14000), adverbs, adjectives, nouns)); - assertEquals("2460", NymIdGenerator.fromHash(BigInteger.valueOf(15000), adverbs, adjectives, nouns)); + assertEquals("1350", NymIdGenerator.generate(BigInteger.valueOf(0), adverbs, adjectives, nouns)); + assertEquals("1360", NymIdGenerator.generate(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); + assertEquals("1450", NymIdGenerator.generate(BigInteger.valueOf(2000), adverbs, adjectives, nouns)); + assertEquals("1460", NymIdGenerator.generate(BigInteger.valueOf(3000), adverbs, adjectives, nouns)); + assertEquals("2350", NymIdGenerator.generate(BigInteger.valueOf(4000), adverbs, adjectives, nouns)); + assertEquals("2360", NymIdGenerator.generate(BigInteger.valueOf(5000), adverbs, adjectives, nouns)); + assertEquals("2450", NymIdGenerator.generate(BigInteger.valueOf(6000), adverbs, adjectives, nouns)); + assertEquals("2460", NymIdGenerator.generate(BigInteger.valueOf(7000), adverbs, adjectives, nouns)); + assertEquals("1350", NymIdGenerator.generate(BigInteger.valueOf(8000), adverbs, adjectives, nouns)); + assertEquals("1360", NymIdGenerator.generate(BigInteger.valueOf(9000), adverbs, adjectives, nouns)); + assertEquals("1450", NymIdGenerator.generate(BigInteger.valueOf(10000), adverbs, adjectives, nouns)); + assertEquals("1460", NymIdGenerator.generate(BigInteger.valueOf(11000), adverbs, adjectives, nouns)); + assertEquals("2350", NymIdGenerator.generate(BigInteger.valueOf(12000), adverbs, adjectives, nouns)); + assertEquals("2360", NymIdGenerator.generate(BigInteger.valueOf(13000), adverbs, adjectives, nouns)); + assertEquals("2450", NymIdGenerator.generate(BigInteger.valueOf(14000), adverbs, adjectives, nouns)); + assertEquals("2460", NymIdGenerator.generate(BigInteger.valueOf(15000), adverbs, adjectives, nouns)); //larger inputs adverbs = List.of("1", "2"); adjectives = List.of("3", "4"); nouns = List.of("5", "6"); - assertEquals("1360", NymIdGenerator.fromHash(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); - assertEquals("1451", NymIdGenerator.fromHash(BigInteger.valueOf(2001), adverbs, adjectives, nouns)); - assertEquals("1462", NymIdGenerator.fromHash(BigInteger.valueOf(3002), adverbs, adjectives, nouns)); - assertEquals("2353", NymIdGenerator.fromHash(BigInteger.valueOf(4003), adverbs, adjectives, nouns)); - assertEquals("2364", NymIdGenerator.fromHash(BigInteger.valueOf(5004), adverbs, adjectives, nouns)); - assertEquals("2455", NymIdGenerator.fromHash(BigInteger.valueOf(6005), adverbs, adjectives, nouns)); - assertEquals("2466", NymIdGenerator.fromHash(BigInteger.valueOf(7006), adverbs, adjectives, nouns)); - assertEquals("1357", NymIdGenerator.fromHash(BigInteger.valueOf(8007), adverbs, adjectives, nouns)); + assertEquals("1360", NymIdGenerator.generate(BigInteger.valueOf(1000), adverbs, adjectives, nouns)); + assertEquals("1451", NymIdGenerator.generate(BigInteger.valueOf(2001), adverbs, adjectives, nouns)); + assertEquals("1462", NymIdGenerator.generate(BigInteger.valueOf(3002), adverbs, adjectives, nouns)); + assertEquals("2353", NymIdGenerator.generate(BigInteger.valueOf(4003), adverbs, adjectives, nouns)); + assertEquals("2364", NymIdGenerator.generate(BigInteger.valueOf(5004), adverbs, adjectives, nouns)); + assertEquals("2455", NymIdGenerator.generate(BigInteger.valueOf(6005), adverbs, adjectives, nouns)); + assertEquals("2466", NymIdGenerator.generate(BigInteger.valueOf(7006), adverbs, adjectives, nouns)); + assertEquals("1357", NymIdGenerator.generate(BigInteger.valueOf(8007), adverbs, adjectives, nouns)); adverbs = List.of("1", "2", "3"); adjectives = List.of("3", "4", "5"); nouns = List.of("5", "6", "7", "8", "9", "10", "11"); BigInteger input = new BigInteger("test".getBytes(StandardCharsets.UTF_8)); - assertEquals("356748", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); + assertEquals("356748", NymIdGenerator.generate(input, adverbs, adjectives, nouns)); input = new BigInteger("test1".getBytes(StandardCharsets.UTF_8)); - assertEquals("2511537", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); + assertEquals("2511537", NymIdGenerator.generate(input, adverbs, adjectives, nouns)); input = new BigInteger(DigestUtil.RIPEMD160("test".getBytes(StandardCharsets.UTF_8))); - assertEquals("358823", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); + assertEquals("358823", NymIdGenerator.generate(input, adverbs, adjectives, nouns)); input = new BigInteger(DigestUtil.RIPEMD160("test1".getBytes(StandardCharsets.UTF_8))); - assertEquals("145726", NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); + assertEquals("145726", NymIdGenerator.generate(input, adverbs, adjectives, nouns)); // Feed random strings, expect no exceptions for (int i = 0; i < 100; i++) { input = new BigInteger(DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8))); - log.debug(NymIdGenerator.fromHash(input, adverbs, adjectives, nouns)); + log.debug(NymIdGenerator.generate(input, adverbs, adjectives, nouns)); } // Use real word lists // Feed random strings, expect no exceptions for (int i = 0; i < 3; i++) { byte[] hash = DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8)); - log.debug(fromHash(hash)); + log.debug(NymIdGenerator.generate(hash, 0)); } // Use truncated lists, fill a set and check if we get no duplications @@ -156,7 +155,7 @@ void testFromHash() { int combinations = adverbs.size() * adjectives.size() * nouns.size() * 1000; String first = null; for (int i = 0; i < combinations; i++) { - String result = NymIdGenerator.fromHash(BigInteger.valueOf(i), adverbs, adjectives, nouns); + String result = NymIdGenerator.generate(BigInteger.valueOf(i), adverbs, adjectives, nouns); Assertions.assertFalse(set.contains(result)); set.add(result); if (first == null) { @@ -166,7 +165,7 @@ void testFromHash() { assertEquals(combinations, set.size()); // At overflowing our combinations we get the first again - String result = NymIdGenerator.fromHash(BigInteger.valueOf(combinations), adverbs, adjectives, nouns); + String result = NymIdGenerator.generate(BigInteger.valueOf(combinations), adverbs, adjectives, nouns); Assertions.assertTrue(set.contains(result)); assertEquals(first, result); } From 0912c2f17e4bf897fe65bf2da4a4fe5cd98ebe68 Mon Sep 17 00:00:00 2001 From: djing chan Date: Wed, 28 Feb 2024 14:29:20 +0700 Subject: [PATCH 26/28] Combine powSolution with pubKeyHash for input for nym and catHash --- .../desktop/components/cathash/CatHash.java | 6 ++++-- .../bisq/user/identity/NymIdGenerator.java | 19 +++++++++++++------ 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index fa3068d6c2..ccf89f5f41 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -17,9 +17,10 @@ package bisq.desktop.components.cathash; -import bisq.common.data.ByteArray; +import bisq.common.util.ByteArrayUtils; import bisq.desktop.common.utils.ImageUtil; import bisq.user.profile.UserProfile; +import com.google.common.primitives.Longs; import javafx.scene.image.Image; import lombok.extern.slf4j.Slf4j; @@ -42,7 +43,8 @@ public static Image getImage(byte[] pubKeyHash, long powSolution) { } public static Image getImage(byte[] pubKeyHash, long powSolution, boolean useCache) { - BigInteger input = new BigInteger(new ByteArray(pubKeyHash).getBytes()).add(BigInteger.valueOf(powSolution)); + byte[] combined = ByteArrayUtils.concat(Longs.toByteArray(powSolution), pubKeyHash); + BigInteger input = new BigInteger(combined); if (useCache && CACHE.containsKey(input)) { return CACHE.get(input); } diff --git a/user/src/main/java/bisq/user/identity/NymIdGenerator.java b/user/src/main/java/bisq/user/identity/NymIdGenerator.java index cb35c8e30d..b243f0b11f 100644 --- a/user/src/main/java/bisq/user/identity/NymIdGenerator.java +++ b/user/src/main/java/bisq/user/identity/NymIdGenerator.java @@ -17,8 +17,10 @@ package bisq.user.identity; +import bisq.common.util.ByteArrayUtils; import bisq.common.util.FileUtils; import com.google.common.annotations.VisibleForTesting; +import com.google.common.primitives.Longs; import lombok.extern.slf4j.Slf4j; import java.io.IOException; @@ -36,13 +38,18 @@ public class NymIdGenerator { private static final BigInteger MAX_INTEGER = BigInteger.valueOf(Integer.MAX_VALUE); private static final String DEFAULT_SEPARATOR = "-"; + private static final List ADVERBS, ADJECTIVES, NOUNS; - public static String generate(byte[] hash, long powSolution) { - List adverbs = read("adverbs.txt"); - List adjectives = read("adjectives.txt"); - List nouns = read("nouns.txt"); - BigInteger input = new BigInteger(hash).add(BigInteger.valueOf(powSolution)); - return generate(input, adverbs, adjectives, nouns, DEFAULT_SEPARATOR); + static { + ADVERBS = read("adverbs.txt"); + ADJECTIVES = read("adjectives.txt"); + NOUNS = read("nouns.txt"); + } + + public static String generate(byte[] pubKeyHash, long powSolution) { + byte[] combined = ByteArrayUtils.concat(Longs.toByteArray(powSolution), pubKeyHash); + BigInteger input = new BigInteger(combined); + return generate(input, ADVERBS, ADJECTIVES, NOUNS, DEFAULT_SEPARATOR); } @VisibleForTesting From e8232a990f9e1e2bfbdfb15a38525d6c5445f02d Mon Sep 17 00:00:00 2001 From: djing chan Date: Wed, 28 Feb 2024 14:43:45 +0700 Subject: [PATCH 27/28] Add verification of user profiles pow --- user/src/main/java/bisq/user/UserService.java | 2 +- .../bisq/user/profile/UserProfileService.java | 29 ++++++++++++++++--- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/user/src/main/java/bisq/user/UserService.java b/user/src/main/java/bisq/user/UserService.java index 8bd615ee14..16a6c3c9fb 100644 --- a/user/src/main/java/bisq/user/UserService.java +++ b/user/src/main/java/bisq/user/UserService.java @@ -65,7 +65,7 @@ public UserService(Config config, bannedUserService = new BannedUserService(persistenceService, networkService); - userProfileService = new UserProfileService(persistenceService, networkService); + userProfileService = new UserProfileService(persistenceService, securityService, networkService); userIdentityService = new UserIdentityService(config.getUserIdentityConfig(), persistenceService, diff --git a/user/src/main/java/bisq/user/profile/UserProfileService.java b/user/src/main/java/bisq/user/profile/UserProfileService.java index 15b8e67eba..a75b88d280 100644 --- a/user/src/main/java/bisq/user/profile/UserProfileService.java +++ b/user/src/main/java/bisq/user/profile/UserProfileService.java @@ -28,6 +28,8 @@ import bisq.persistence.Persistence; import bisq.persistence.PersistenceClient; import bisq.persistence.PersistenceService; +import bisq.security.SecurityService; +import bisq.security.pow.hashcash.HashCashProofOfWorkService; import lombok.Getter; import lombok.extern.slf4j.Slf4j; @@ -46,10 +48,13 @@ public class UserProfileService implements PersistenceClient, private final NetworkService networkService; @Getter private final Observable numUserProfiles = new Observable<>(); + private final HashCashProofOfWorkService hashCashProofOfWorkService; public UserProfileService(PersistenceService persistenceService, + SecurityService securityService, NetworkService networkService) { persistence = persistenceService.getOrCreatePersistence(this, DbSubDirectory.SETTINGS, persistableStore); + hashCashProofOfWorkService = securityService.getHashCashProofOfWorkService(); this.networkService = networkService; UserNameLookup.setUserProfileService(this); } @@ -143,14 +148,30 @@ public String getUserName(String nym, String nickName) { private void processUserProfileAdded(UserProfile userProfile) { Optional optionalChatUser = findUserProfile(userProfile.getId()); if (optionalChatUser.isEmpty() || !optionalChatUser.get().equals(userProfile)) { - synchronized (persistableStore) { - getUserProfileById().put(userProfile.getId(), userProfile); + if (verifyUserProfile(userProfile)) { + synchronized (persistableStore) { + getUserProfileById().put(userProfile.getId(), userProfile); + } + numUserProfiles.set(getUserProfileById().values().size()); + persist(); } - numUserProfiles.set(getUserProfileById().values().size()); - persist(); } } + private boolean verifyUserProfile(UserProfile userProfile) { + if (!Arrays.equals(userProfile.getProofOfWork().getPayload(), userProfile.getPubKeyHash())) { + log.warn("Payload of proof of work not matching pubKeyHash of user profile {}", userProfile); + return false; + } + + if (!hashCashProofOfWorkService.verify(userProfile.getProofOfWork())) { + log.warn("Proof of work verification of user profile {} failed", userProfile); + return false; + } + + return true; + } + private void processUserProfileRemoved(AuthenticatedData authenticatedData) { DistributedData distributedData = authenticatedData.getDistributedData(); if (distributedData instanceof UserProfile) { From 811457ef1ab3ab54a4feeee4edf7f568d939567a Mon Sep 17 00:00:00 2001 From: djing chan Date: Wed, 28 Feb 2024 14:51:57 +0700 Subject: [PATCH 28/28] Use solution as byte array instead of counter as long --- .../java/bisq/desktop/components/cathash/CatHash.java | 9 ++++----- .../create/step2/CreateNewProfileStep2Controller.java | 2 +- .../create_profile/CreateProfileController.java | 2 +- .../pow/hashcash/HashCashProofOfWorkService.java | 8 ++++++-- .../src/main/java/bisq/user/identity/NymIdGenerator.java | 5 ++--- user/src/main/java/bisq/user/profile/UserProfile.java | 2 +- .../test/java/bisq/user/identity/NymIdGeneratorTest.java | 2 +- 7 files changed, 16 insertions(+), 14 deletions(-) diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java index ccf89f5f41..4af1837820 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/components/cathash/CatHash.java @@ -20,7 +20,6 @@ import bisq.common.util.ByteArrayUtils; import bisq.desktop.common.utils.ImageUtil; import bisq.user.profile.UserProfile; -import com.google.common.primitives.Longs; import javafx.scene.image.Image; import lombok.extern.slf4j.Slf4j; @@ -35,15 +34,15 @@ public class CatHash { private static final ConcurrentHashMap CACHE = new ConcurrentHashMap<>(); public static Image getImage(UserProfile userProfile) { - return getImage(userProfile.getPubKeyHash(), userProfile.getProofOfWork().getCounter(), true); + return getImage(userProfile.getPubKeyHash(), userProfile.getProofOfWork().getSolution(), true); } - public static Image getImage(byte[] pubKeyHash, long powSolution) { + public static Image getImage(byte[] pubKeyHash, byte[] powSolution) { return getImage(pubKeyHash, powSolution, true); } - public static Image getImage(byte[] pubKeyHash, long powSolution, boolean useCache) { - byte[] combined = ByteArrayUtils.concat(Longs.toByteArray(powSolution), pubKeyHash); + public static Image getImage(byte[] pubKeyHash, byte[] powSolution, boolean useCache) { + byte[] combined = ByteArrayUtils.concat(powSolution, pubKeyHash); BigInteger input = new BigInteger(combined); if (useCache && CACHE.containsKey(input)) { return CACHE.get(input); diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java index 7d1147f4a1..51f6d4f369 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/main/content/user/user_profile/create/step2/CreateNewProfileStep2Controller.java @@ -90,7 +90,7 @@ public void initWithData(InitData data) { model.setProofOfWork(data.getProofOfWork()); model.getNickName().set(data.getNickName()); model.getNym().set(data.getNym()); - model.getRoboHashImage().set(CatHash.getImage(data.getPubKeyHash(), data.getProofOfWork().getCounter())); + model.getRoboHashImage().set(CatHash.getImage(data.getPubKeyHash(), data.getProofOfWork().getSolution())); } @Override diff --git a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java index 3d5109bea3..e3984c76fc 100644 --- a/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java +++ b/apps/desktop/desktop/src/main/java/bisq/desktop/overlay/onboarding/create_profile/CreateProfileController.java @@ -153,7 +153,7 @@ private CompletableFuture createProofOfWork(byte[] pubKeyHash) { createSimulatedDelay(powDuration); UIThread.run(() -> { model.setProofOfWork(Optional.of(proofOfWork)); - long powSolution = proofOfWork.getCounter(); // For HashCash the solution is the counter as byte array + byte[] powSolution = proofOfWork.getSolution(); String nym = NymIdGenerator.generate(pubKeyHash, powSolution); Image image = CatHash.getImage(pubKeyHash, powSolution); model.getNym().set(nym); diff --git a/security/src/main/java/bisq/security/pow/hashcash/HashCashProofOfWorkService.java b/security/src/main/java/bisq/security/pow/hashcash/HashCashProofOfWorkService.java index 6534478ba1..c1c2e3ba6e 100644 --- a/security/src/main/java/bisq/security/pow/hashcash/HashCashProofOfWorkService.java +++ b/security/src/main/java/bisq/security/pow/hashcash/HashCashProofOfWorkService.java @@ -57,7 +57,7 @@ public ProofOfWork mint(byte[] payload, public boolean verify(ProofOfWork proofOfWork) { byte[] hash = toSha256Hash(proofOfWork.getPayload(), proofOfWork.getChallenge(), - proofOfWork.getCounter()); + proofOfWork.getSolution()); return numberOfLeadingZeros(hash) > toNumLeadingZeros(proofOfWork.getDifficulty()); } @@ -88,9 +88,13 @@ static int numberOfLeadingZeros(byte[] bytes) { } private static byte[] toSha256Hash(byte[] payload, byte[] challenge, long counter) { + return toSha256Hash(payload, challenge, Longs.toByteArray(counter)); + } + + private static byte[] toSha256Hash(byte[] payload, byte[] challenge, byte[] solution) { byte[] preImage = org.bouncycastle.util.Arrays.concatenate(payload, challenge, - Longs.toByteArray(counter)); + solution); return DigestUtil.sha256(preImage); } diff --git a/user/src/main/java/bisq/user/identity/NymIdGenerator.java b/user/src/main/java/bisq/user/identity/NymIdGenerator.java index b243f0b11f..27776d5f92 100644 --- a/user/src/main/java/bisq/user/identity/NymIdGenerator.java +++ b/user/src/main/java/bisq/user/identity/NymIdGenerator.java @@ -20,7 +20,6 @@ import bisq.common.util.ByteArrayUtils; import bisq.common.util.FileUtils; import com.google.common.annotations.VisibleForTesting; -import com.google.common.primitives.Longs; import lombok.extern.slf4j.Slf4j; import java.io.IOException; @@ -46,8 +45,8 @@ public class NymIdGenerator { NOUNS = read("nouns.txt"); } - public static String generate(byte[] pubKeyHash, long powSolution) { - byte[] combined = ByteArrayUtils.concat(Longs.toByteArray(powSolution), pubKeyHash); + public static String generate(byte[] pubKeyHash, byte[] powSolution) { + byte[] combined = ByteArrayUtils.concat(powSolution, pubKeyHash); BigInteger input = new BigInteger(combined); return generate(input, ADVERBS, ADJECTIVES, NOUNS, DEFAULT_SEPARATOR); } diff --git a/user/src/main/java/bisq/user/profile/UserProfile.java b/user/src/main/java/bisq/user/profile/UserProfile.java index cc60d29ddc..1ad9285199 100644 --- a/user/src/main/java/bisq/user/profile/UserProfile.java +++ b/user/src/main/java/bisq/user/profile/UserProfile.java @@ -149,7 +149,7 @@ public String getId() { public String getNym() { if (nym == null) { - nym = NymIdGenerator.generate(getPubKeyHash(), proofOfWork.getCounter()); + nym = NymIdGenerator.generate(getPubKeyHash(), proofOfWork.getSolution()); } return nym; } diff --git a/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java b/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java index ecea661626..a43e2ca71f 100644 --- a/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java +++ b/user/src/test/java/bisq/user/identity/NymIdGeneratorTest.java @@ -144,7 +144,7 @@ void testFromHash() { // Feed random strings, expect no exceptions for (int i = 0; i < 3; i++) { byte[] hash = DigestUtil.RIPEMD160(StringUtils.createUid().getBytes(StandardCharsets.UTF_8)); - log.debug(NymIdGenerator.generate(hash, 0)); + log.debug(NymIdGenerator.generate(hash, new byte[]{})); } // Use truncated lists, fill a set and check if we get no duplications