Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
a11e661
[Feat] 블러 강도 조정하는 setBlurDensity 메소드 구현 (#120)
cirtuare May 3, 2025
8a3f6fa
[Feat] ACButtonType 프로토콜 구현 (#120)
cirtuare May 3, 2025
c56c4f1
[Feat] 버튼 컴포넌트 ACButton 구현 (#120)
cirtuare May 3, 2025
3395fd0
[Feat] GlassmorphismType 기본 구현 (#120)
cirtuare May 5, 2025
a416145
[Feat] GlassmorphismView 2.0 (#120)
cirtuare May 5, 2025
1c0245c
[Feat] ACButtonType GlassmorphismType 사용하여 수정 (#120)
cirtuare May 5, 2025
772fa8d
[Feat] ACButton GlassmorphismType 사용하여 수정 (#120)
cirtuare May 5, 2025
5616887
[Feat] Glassmorphism Border 구현 (#120)
cirtuare May 5, 2025
001c2f5
[Chore] 기존 글모 관련 메소드 삭제 및 임시 대체 (#120)
cirtuare May 5, 2025
2be1fd9
[Del] 필요없는 코드 삭제 (#120)
cirtuare May 5, 2025
6da0f74
[Feat] GlassButtonType 구현 (#120)
cirtuare May 5, 2025
914899f
[Fix] borderGlassmorphism과 배경 Glassmorphism 분리 (#120)
cirtuare May 5, 2025
8eca619
[Feat] 버튼 상태에 따라 버튼 UI 업데이트 메소드 구현 (#120)
cirtuare May 5, 2025
f28b94d
[Fix] 글라스모피즘 업데이트된 디자인시스템 적용 (#120)
cirtuare May 5, 2025
2059e89
[Chore] ic_progress 에셋 png로 변경 (#120)
cirtuare May 6, 2025
9285b1a
[Chore] DefautlButtonType 추가 (#120)
cirtuare May 6, 2025
9eda4d2
[Feat] GlassButtonState 구현 (#120)
cirtuare May 6, 2025
796db5c
[Fix] updateGlassButtonState 로직 수정 (#120)
cirtuare May 6, 2025
e90d62e
[Chore] 코드 정리 (#120)
cirtuare May 6, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions ACON-iOS/ACON-iOS.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@
74220DD62D3436C2000684BF /* SpotUploadView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74220DD52D3436BE000684BF /* SpotUploadView.swift */; };
742544062D413CCD004F950F /* SpotListCollectionViewFooter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 742544052D413CC6004F950F /* SpotListCollectionViewFooter.swift */; };
743069892D3D2F5A0033178C /* NetworkResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743069882D3D2F540033178C /* NetworkResult.swift */; };
743900912DC50926002F91B1 /* UIVisualEffectView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743900902DC50918002F91B1 /* UIVisualEffectView+.swift */; };
743900932DC75451002F91B1 /* GlassmorphismType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743900922DC7544C002F91B1 /* GlassmorphismType.swift */; };
743900972DC8696A002F91B1 /* GlassButtonType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743900962DC86966002F91B1 /* GlassButtonType.swift */; };
7439FAF22D421A8000864AD0 /* splashLottie.json in Resources */ = {isa = PBXBuildFile; fileRef = 7439FAF12D421A8000864AD0 /* splashLottie.json */; };
745000D72D403F0200262CBE /* lodingLottie.json in Resources */ = {isa = PBXBuildFile; fileRef = 745000D62D403F0200262CBE /* lodingLottie.json */; };
745000D82D403F0200262CBE /* checkLottie.json in Resources */ = {isa = PBXBuildFile; fileRef = 745000D52D403F0200262CBE /* checkLottie.json */; };
Expand Down Expand Up @@ -153,6 +156,7 @@
746F15BD2D3E225E003EA031 /* LocalVerificationService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746F15BC2D3E2258003EA031 /* LocalVerificationService.swift */; };
746F39822D342523003F8498 /* ACSheetDetentType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746F39812D342520003F8498 /* ACSheetDetentType.swift */; };
746FF3C02D3D8669001CDAAC /* ACWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 746FF3BF2D3D8662001CDAAC /* ACWebViewController.swift */; };
747BB6CE2DCA66F000352874 /* GlassButtonState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 747BB6CD2DCA66EB00352874 /* GlassButtonState.swift */; };
747F4FBD2D3D9477003DECBF /* SplashViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 747F4FBC2D3D9470003DECBF /* SplashViewController.swift */; };
747F4FBF2D3D9D44003DECBF /* SplashView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 747F4FBE2D3D9D40003DECBF /* SplashView.swift */; };
747F4FC12D3DC80B003DECBF /* finishedUpload.json in Resources */ = {isa = PBXBuildFile; fileRef = 747F4FC02D3DC80B003DECBF /* finishedUpload.json */; };
Expand Down Expand Up @@ -220,6 +224,8 @@
74D31C7C2D5BF90300B4B2B4 /* AlbumModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74D31C7B2D5BF8FD00B4B2B4 /* AlbumModel.swift */; };
74D31C802D5C025900B4B2B4 /* PhotoCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74D31C7F2D5C025200B4B2B4 /* PhotoCollectionViewCell.swift */; };
74D831922D6878A5003384C6 /* AmplitudeSwift in Frameworks */ = {isa = PBXBuildFile; productRef = 74D831912D6878A5003384C6 /* AmplitudeSwift */; };
74DDBA8B2DC45E3B00BF9824 /* ACButtonType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74DDBA8A2DC45E3400BF9824 /* ACButtonType.swift */; };
74DDBA8D2DC45E4500BF9824 /* ACButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74DDBA8C2DC45E4300BF9824 /* ACButton.swift */; };
74E38D342D69B46F009449D4 /* LocationUtils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74E38D332D69B468009449D4 /* LocationUtils.swift */; };
D61917E92D3E4410001BF0EE /* OnboardingTargetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D61917E82D3E4410001BF0EE /* OnboardingTargetType.swift */; };
D61917EC2D3E484A001BF0EE /* OnboardingRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D61917EB2D3E484A001BF0EE /* OnboardingRequest.swift */; };
Expand Down Expand Up @@ -365,6 +371,9 @@
74220DD52D3436BE000684BF /* SpotUploadView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotUploadView.swift; sourceTree = "<group>"; };
742544052D413CC6004F950F /* SpotListCollectionViewFooter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpotListCollectionViewFooter.swift; sourceTree = "<group>"; };
743069882D3D2F540033178C /* NetworkResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkResult.swift; sourceTree = "<group>"; };
743900902DC50918002F91B1 /* UIVisualEffectView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIVisualEffectView+.swift"; sourceTree = "<group>"; };
743900922DC7544C002F91B1 /* GlassmorphismType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlassmorphismType.swift; sourceTree = "<group>"; };
743900962DC86966002F91B1 /* GlassButtonType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlassButtonType.swift; sourceTree = "<group>"; };
7439FAF12D421A8000864AD0 /* splashLottie.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = splashLottie.json; sourceTree = "<group>"; };
745000D52D403F0200262CBE /* checkLottie.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = checkLottie.json; sourceTree = "<group>"; };
745000D62D403F0200262CBE /* lodingLottie.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = lodingLottie.json; sourceTree = "<group>"; };
Expand Down Expand Up @@ -404,6 +413,7 @@
746F15BC2D3E2258003EA031 /* LocalVerificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocalVerificationService.swift; sourceTree = "<group>"; };
746F39812D342520003F8498 /* ACSheetDetentType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACSheetDetentType.swift; sourceTree = "<group>"; };
746FF3BF2D3D8662001CDAAC /* ACWebViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACWebViewController.swift; sourceTree = "<group>"; };
747BB6CD2DCA66EB00352874 /* GlassButtonState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GlassButtonState.swift; sourceTree = "<group>"; };
747F4FBC2D3D9470003DECBF /* SplashViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashViewController.swift; sourceTree = "<group>"; };
747F4FBE2D3D9D40003DECBF /* SplashView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashView.swift; sourceTree = "<group>"; };
747F4FC02D3DC80B003DECBF /* finishedUpload.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = finishedUpload.json; sourceTree = "<group>"; };
Expand Down Expand Up @@ -468,6 +478,8 @@
74D31C792D5841D100B4B2B4 /* PhotoCollectionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoCollectionViewController.swift; sourceTree = "<group>"; };
74D31C7B2D5BF8FD00B4B2B4 /* AlbumModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumModel.swift; sourceTree = "<group>"; };
74D31C7F2D5C025200B4B2B4 /* PhotoCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhotoCollectionViewCell.swift; sourceTree = "<group>"; };
74DDBA8A2DC45E3400BF9824 /* ACButtonType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACButtonType.swift; sourceTree = "<group>"; };
74DDBA8C2DC45E4300BF9824 /* ACButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ACButton.swift; sourceTree = "<group>"; };
74E38D332D69B468009449D4 /* LocationUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LocationUtils.swift; sourceTree = "<group>"; };
B28431BAB67B99CD7B85C705 /* Pods_ACON_iOS.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_ACON_iOS.framework; sourceTree = BUILT_PRODUCTS_DIR; };
BB785B4E26FA7C11BB85A55D /* Pods-ACON-iOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ACON-iOS.debug.xcconfig"; path = "Target Support Files/Pods-ACON-iOS/Pods-ACON-iOS.debug.xcconfig"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1120,6 +1132,7 @@
748D6F752D2BCAA8007690B4 /* Extensions */ = {
isa = PBXGroup;
children = (
743900902DC50918002F91B1 /* UIVisualEffectView+.swift */,
74BF92162D393B4700B923E3 /* Int+.swift */,
74CDCE552D310B1300E3A21A /* String+.swift */,
151FC0C82DBD5DA0005F4D0D /* Character+.swift */,
Expand Down Expand Up @@ -1180,6 +1193,7 @@
748D6F7A2D2BCCF4007690B4 /* UIComponents */ = {
isa = PBXGroup;
children = (
74DDBA8C2DC45E4300BF9824 /* ACButton.swift */,
746FF3BF2D3D8662001CDAAC /* ACWebViewController.swift */,
749A01022D3A6DFC00CD7A90 /* ACDebouncer.swift */,
150A105B2DA28F2600B0BC9A /* ACTextField.swift */,
Expand All @@ -1195,6 +1209,9 @@
748D6F7B2D2BCCFF007690B4 /* Enums */ = {
isa = PBXGroup;
children = (
747BB6CD2DCA66EB00352874 /* GlassButtonState.swift */,
743900962DC86966002F91B1 /* GlassButtonType.swift */,
743900922DC7544C002F91B1 /* GlassmorphismType.swift */,
74C914D02D64DBAF00BC13E1 /* ImageType.swift */,
746F39812D342520003F8498 /* ACSheetDetentType.swift */,
74205D2E2D40351400D11557 /* SocialType.swift */,
Expand All @@ -1219,6 +1236,7 @@
748D6F832D2BCDE8007690B4 /* Protocols */ = {
isa = PBXGroup;
children = (
74DDBA8A2DC45E3400BF9824 /* ACButtonType.swift */,
748D6F982D2BD549007690B4 /* DummyProtocol.swift */,
);
path = Protocols;
Expand Down Expand Up @@ -1804,6 +1822,7 @@
749A01032D3A6E0100CD7A90 /* ACDebouncer.swift in Sources */,
7462617F2D3F9F1400A4E84F /* GetSpotDetailResponse.swift in Sources */,
15A1471E2D5A7F96003793EE /* LabelBoxWithDeletableButton.swift in Sources */,
743900972DC8696A002F91B1 /* GlassButtonType.swift in Sources */,
745C7E0D2D35A04A0074DBDB /* SearchKeywordCollectionViewCell.swift in Sources */,
748D6FA62D2C3F44007690B4 /* BaseView.swift in Sources */,
74220DD62D3436C2000684BF /* SpotUploadView.swift in Sources */,
Expand All @@ -1823,6 +1842,7 @@
747F4FBF2D3D9D44003DECBF /* SplashView.swift in Sources */,
74C914D32D64E01C00BC13E1 /* PutImageToPresignedURLRequest.swift in Sources */,
7462616F2D3EA48300A4E84F /* GetSearchKeywordResponse.swift in Sources */,
74DDBA8B2DC45E3B00BF9824 /* ACButtonType.swift in Sources */,
156AA72A2D6510E1005B8DCE /* GetNicknameValidityRequest.swift in Sources */,
74D297F82D63467900DDEE31 /* ImageService.swift in Sources */,
15A147212D5B256D003793EE /* LocalVerificationFlowType.swift in Sources */,
Expand Down Expand Up @@ -1864,6 +1884,7 @@
74D31C712D5832D000B4B2B4 /* AlbumViewModel.swift in Sources */,
1547A6F22D33AD4500E96616 /* SpotModel.swift in Sources */,
746261732D3EA78700A4E84F /* GetReiviewVerificationRequest.swift in Sources */,
743900912DC50926002F91B1 /* UIVisualEffectView+.swift in Sources */,
74BF92022D385D8700B923E3 /* MenuCollectionViewCell.swift in Sources */,
74220DD42D34363B000684BF /* SpotUploadViewController.swift in Sources */,
D6FF82F12D380C4D00090233 /* FavoriteCuisineType.swift in Sources */,
Expand All @@ -1882,6 +1903,7 @@
746261792D3EA8DF00A4E84F /* UploadTargetType.swift in Sources */,
D6E816A22D623E0E001E4EBF /* WithdrawalTableViewCell.swift in Sources */,
741A07572D3558FE00778219 /* ReviewFinishedView.swift in Sources */,
743900932DC75451002F91B1 /* GlassmorphismType.swift in Sources */,
1547A88E2D35B13700E96616 /* FilterTagButton.swift in Sources */,
74BBADF62D611B6B003AB16C /* PostReissueResponse.swift in Sources */,
748D6F7E2D2BCD72007690B4 /* StringLiterals.swift in Sources */,
Expand Down Expand Up @@ -1915,6 +1937,7 @@
156D925C2D6536CF0037F8F1 /* CustomAlertTitleAndButtonsView.swift in Sources */,
74BF92132D391FFE00B923E3 /* LocalVerificationFinishedViewController.swift in Sources */,
15AA6D152D68AC09008021C6 /* GetDongRequest.swift in Sources */,
74DDBA8D2DC45E4500BF9824 /* ACButton.swift in Sources */,
746F15B72D3E2083003EA031 /* PostLocalAreaRequest.swift in Sources */,
74BF92142D391FFE00B923E3 /* LocalMapView.swift in Sources */,
D696F1B22D3A7E3400CCD5FF /* CustomAlertView.swift in Sources */,
Expand Down Expand Up @@ -1964,6 +1987,7 @@
74D297F22D63436F00DDEE31 /* GetPresignedURLResponse.swift in Sources */,
1547A88B2D3596B600E96616 /* SpotType.swift in Sources */,
74BF92172D393B4A00B923E3 /* Int+.swift in Sources */,
747BB6CE2DCA66F000352874 /* GlassButtonState.swift in Sources */,
15CF62BD2D575EC00000A10F /* ProfileEditValidMessageView.swift in Sources */,
741429632D5D3CED00B69528 /* SettingTableViewCell.swift in Sources */,
7462616D2D3EA40600A4E84F /* GetSearchKeywordRequest.swift in Sources */,
Expand Down
16 changes: 0 additions & 16 deletions ACON-iOS/ACON-iOS/Global/Extensions/UIView+.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,20 +25,4 @@ extension UIView {
}


// MARK: - blurView subView로 추가

func setBlurView(){
let viewBlurEffect = UIVisualEffectView()
viewBlurEffect.effect = UIBlurEffect(style: .regular)

self.addSubview(viewBlurEffect)
viewBlurEffect.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
viewBlurEffect.topAnchor.constraint(equalTo: self.topAnchor),
viewBlurEffect.leadingAnchor.constraint(equalTo: self.leadingAnchor),
viewBlurEffect.trailingAnchor.constraint(equalTo: self.trailingAnchor),
viewBlurEffect.bottomAnchor.constraint(equalTo: self.bottomAnchor)
])
}

}
33 changes: 33 additions & 0 deletions ACON-iOS/ACON-iOS/Global/Extensions/UIVisualEffectView+.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
//
// UIVisualEffectView+.swift
// ACON-iOS
//
// Created by 이수민 on 5/2/25.
//

import UIKit

extension UIVisualEffectView {

private static var animatorKey: UInt8 = 0

private var blurAnimator: UIViewPropertyAnimator? {
get { return objc_getAssociatedObject(self, &UIVisualEffectView.animatorKey) as? UIViewPropertyAnimator }
set { objc_setAssociatedObject(self, &UIVisualEffectView.animatorKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) }
}

func setBlurDensity(_ density: CGFloat, _ style: UIBlurEffect.Style = .light) {
let clampedDensity = max(0, min(density, 1))

if blurAnimator == nil {
blurAnimator = UIViewPropertyAnimator(duration: 0.5, curve: .linear)
}

blurAnimator?.stopAnimation(true)
blurAnimator?.addAnimations { [weak self] in
self?.effect = UIBlurEffect(style: style)
}
blurAnimator?.fractionComplete = clampedDensity
}

}
141 changes: 141 additions & 0 deletions ACON-iOS/ACON-iOS/Global/Protocols/ACButtonType.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
//
// ACButtonType.swift
// ACON-iOS
//
// Created by 이수민 on 5/2/25.
//

import UIKit

// MARK: - Button Style

protocol ButtonStyleType {

var backgroundColor: UIColor { get }

var glassmorphismType: GlassmorphismType? { get }

var borderGlassmorphismType: GlassmorphismType? { get }

var glassButtonType: GlassButtonType? { get }

var cornerRadius: CGFloat { get }

var borderColor: UIColor { get }

var borderWidth: CGFloat { get }

var textColor: UIColor { get }

var textStyle: ACFontType { get }

}

extension ButtonStyleType {

var backgroundColor: UIColor { return .clear }

var glassmorphismType: GlassmorphismType? { return nil }

var borderGlassmorphismType: GlassmorphismType? { return nil }

var glassButtonType: GlassButtonType? { return nil }

var textColor: UIColor { return .acWhite }

var textStyle: ACFontType { return .b1SB }

var borderColor: UIColor { return .clear }

var borderWidth: CGFloat { return 0 }

var cornerRadius: CGFloat { return 0 }

}


// MARK: - Button Configuration

enum ButtonConfigStyle {

case filled

case plain

}

protocol ConfigButtonStyleType: ButtonStyleType {

var configStyle: ButtonConfigStyle { get }

var imagePlacement: NSDirectionalRectEdge { get }

var imagePadding: CGFloat { get }

var preferredSymbolConfigurationForImage: CGFloat { get }

var titleAlignment: UIButton.Configuration.TitleAlignment { get }

var contentInsets: NSDirectionalEdgeInsets { get }

var showsActivityIndicator: Bool { get }

}


extension ConfigButtonStyleType {

var configStyle: ButtonConfigStyle { return .plain }

var imagePlacement: NSDirectionalRectEdge { return .leading }

var imagePadding: CGFloat { return .zero }

var titleAlignment: UIButton.Configuration.TitleAlignment { return .center }

var showsActivityIndicator: Bool { return false }

}


// MARK: - Acon 2.0 Button Type

/// 글모가 적용된 버튼은 무조건 배경색상이 Clear이며, 배경색도 글모로 정합니다 !

struct GlassButton: ButtonStyleType {

var glassmorphismType: GlassmorphismType?

var borderGlassmorphismType: GlassmorphismType?

var glassButtonType: GlassButtonType?

var textStyle: ACFontType

var textColor: UIColor

var borderWidth: CGFloat

var borderColor: UIColor

var cornerRadius: CGFloat

init(glassmorphismType: GlassmorphismType? = nil,
borderGlassmorphismType: GlassmorphismType? = nil,
buttonType: GlassButtonType) {
self.glassmorphismType = glassmorphismType
self.borderGlassmorphismType = borderGlassmorphismType
self.glassButtonType = buttonType

self.cornerRadius = buttonType.cornerRadius
self.textStyle = buttonType.textStyle
self.textColor = buttonType.textColor
self.borderWidth = buttonType.borderWidth
self.borderColor = buttonType.borderColor
}

}


struct DefaultButton: ButtonStyleType { }

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "ic_progress.svg",
"filename" : "Progress.png",
"idiom" : "universal"
}
],
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading