100Years 1 сар өмнө
parent
commit
0d092d2953

+ 17 - 4
AIEmoji/Business/General/TSAppBtnView/TSAppBtnView.swift

@@ -39,6 +39,16 @@ class TSAppBtnView: TSBaseView {
     var btnFrame:CGRect?
     var isIconVipBlock:(()->Bool)? //vip 图片显示
     var isClickVipBlock:(()->Bool)?  //点击是,是否需要弹出 vip
+    
+    
+    
+    var loading:Bool = false{
+        willSet {
+            if loading != newValue {
+                loadingAnimation(loading: newValue)
+            }
+        }
+    }
     //###################################### Button ######################################
     var button:UIButton = UIButton()
 
@@ -101,6 +111,11 @@ extension TSAppBtnView{
     }
     
     func setVip(vip:Bool) {
+        
+        if loading { //loading,正在显示转圈动画
+            return
+        }
+        
         if vip {
             button.setImage(UIImage(named: "btnImage_vip"), for: .normal)
         }else{
@@ -138,12 +153,10 @@ extension TSAppBtnView{
 //创造按钮
 extension TSAppBtnView{
     
-    func loadingAnimation(loading:Bool) {
+    private func loadingAnimation(loading:Bool) {
         if loading {
             button.setImage(UIImage(named: "generated_loading"), for: .normal)
-            DispatchQueue.main.asyncAfter(deadline: .now()+0.1) {
-                self.button.imageView?.startRotating()
-            }
+            self.button.imageView?.startRotating()
         }else {
             button.imageView?.stopRotating()
             updateVipView()

+ 1 - 1
AIEmoji/Business/TSGenmojiVC/TSGenmojiGennerateVC/TSGenmojiGennerateViewModel.swift

@@ -97,7 +97,7 @@ enum TSProgressState  {
     
     var reloadNewData:Bool{
         switch self {
-        case .success(_),.failed(_),.pending:
+        case .pending,.success(_),.failed(_):
             return true
         default:
             return false

+ 4 - 2
AIEmoji/Business/TSGenmojiVC/TSGenmojiVC/View/TSGenmojiItemCell.swift

@@ -26,6 +26,7 @@ class TSGenmojiItemCell: TSBaseCollectionCell ,TSSimpleConfigurableView {
                     operation.currentActionInfoModelChanged = { [weak self] actionInfoModel in
                         guard let self = self else { return }
                         DispatchQueue.main.async {
+                            print("actionInfoModel.toJSONString()=\(actionInfoModel.toJSONString())")
                             self.updataActionInfoModelView(model: actionInfoModel)
                         }
                     }
@@ -74,10 +75,11 @@ class TSGenmojiItemCell: TSBaseCollectionCell ,TSSimpleConfigurableView {
             guard let self = self else { return }
             if dataModel.upImageURLExpired { //任务已经过期了
                 self.actionHandler(any: "delete_task_expired")
+                delegate?.collectionView(didTrigger: TSSimpleCellEvent(action: .buttonTapped("delete_task_expired"), indexPath: indexPath ?? IndexPath(item: 0, section: 0), data: self.dataModel))
             }else{
                 if kJudgeVipFreeType(vipFreeNumType: .picToPic){ return }
                 TSGeneratePTPOperationQueue.shared.creatOperation(uuid: dataModel.uuid).creatImage(oldModel: dataModel)
-                generateView.setProgress(progress: 0.0)
+                generateView.setProgress(progress: 0)
             }
         }
         return generateView
@@ -119,7 +121,7 @@ class TSGenmojiItemCell: TSBaseCollectionCell ,TSSimpleConfigurableView {
             model.actionStatus = .success
         }
         showImageView.image = nil
-//        dePrint("updataActionInfoModelView model.actionStatus 收到 = \(model.actionStatus)")
+        dePrint("updataActionInfoModelView model.actionStatus 收到 = \(model.actionStatus)")
         switch model.actionStatus {
         case .pending,.running:
             generateView.isHidden = false

+ 22 - 21
AIEmoji/Business/TSPTPGeneratorVC/TSAIPhotoGeneratorBaseVC/TSAIPhotoBrowseVC.swift

@@ -121,8 +121,9 @@ class TSAIPhotoBrowseVC: TSBaseVC {
     
     override func dealThings() {
         // 添加下拉手势
-        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handleDismissPan(_:)))
-        view.addGestureRecognizer(panGesture)
+//        let panGesture = UIPanGestureRecognizer(target: self, action: #selector(handleDismissPan(_:)))
+//        view.addGestureRecognizer(panGesture)
+        addPullDownClosePage()
     }
     @objc func clickSubmitBtn(){
         
@@ -173,25 +174,25 @@ class TSAIPhotoBrowseVC: TSBaseVC {
 
 extension TSAIPhotoBrowseVC {
     // 手势处理方法
-    @objc func handleDismissPan(_ gesture: UIPanGestureRecognizer) {
-        let translation = gesture.translation(in: view)
-        let progress = translation.y / view.bounds.height
-        
-        switch gesture.state {
-        case .changed:
-            view.transform = CGAffineTransform(translationX: 0, y: max(0, translation.y))
-        case .ended:
-            if progress > 0.5 || gesture.velocity(in: view).y > 1000 {
-                dismiss(animated: true)
-            } else {
-                UIView.animate(withDuration: 0.3) {
-                    self.view.transform = .identity
-                }
-            }
-        default:
-            break
-        }
-    }
+//    @objc func handleDismissPan(_ gesture: UIPanGestureRecognizer) {
+//        let translation = gesture.translation(in: view)
+//        let progress = translation.y / view.bounds.height
+//        
+//        switch gesture.state {
+//        case .changed:
+//            view.transform = CGAffineTransform(translationX: 0, y: max(0, translation.y))
+//        case .ended:
+//            if progress > 0.5 || gesture.velocity(in: view).y > 1000 {
+//                dismiss(animated: true)
+//            } else {
+//                UIView.animate(withDuration: 0.3) {
+//                    self.view.transform = .identity
+//                }
+//            }
+//        default:
+//            break
+//        }
+//    }
     func reloadUI() {
 
     }

+ 6 - 1
AIEmoji/Business/TSPTPGeneratorVC/TSPTPGeneratorVC/TSPTPGeneratorVC.swift

@@ -171,7 +171,7 @@ class TSPTPGeneratorVC: TSAIPhotoGeneratorBaseVC {
             if model.actionStatus == .failed{
                 creatOperation(infoModel: model)
             }else if model.response.resultUrl.count > 0 {
-                showSuccess(model: model)
+                upDateView(state: .success(model), model: model)
             }
         }else{
             uploadImageCreatOperation()
@@ -204,6 +204,11 @@ class TSPTPGeneratorVC: TSAIPhotoGeneratorBaseVC {
             }
         }
     }
+    
+    
+    deinit {
+        operation.isShowSuccessView = true
+    }
 }
 extension TSPTPGeneratorVC {
     

+ 11 - 0
AIEmoji/Business/TSPTPGeneratorVC/TSPTPHistoryVC/TSPTPHistoryVC.swift

@@ -16,6 +16,7 @@ class TSPTPHistoryVC: TSBaseVC {
     let collectionViewBtootm:CGFloat = 80
     lazy var collectionView: TSSimpleCollectionView = {
         let identifier = "TSGenmojiItemCell"
+        let headerIdentifier = "TSGenmojiColSectionView"
         
         let itemW = (k_ScreenWidth-32.0-12.0-2.0)/2.0
         let itemH = kGetScaleHeight(originalSize: CGSize(width: 165.0, height: 220.0), width: itemW)
@@ -29,8 +30,10 @@ class TSPTPHistoryVC: TSBaseVC {
         cp.layout.itemSize = CGSize(width: itemW, height: itemH)
         cp.layout.minimumLineSpacing = 12
         cp.layout.minimumInteritemSpacing = 12
+//        cp.layout.headerReferenceSize = CGSizeMake(k_ScreenWidth, kSectionTitleViewH)
         cp.collectionView.contentInset = UIEdgeInsets(top: 16, left: 16, bottom: collectionViewBtootm, right: 16)
         cp.registerCell(TSGenmojiItemCell.self,identifier:identifier)
+//        cp.registerSectionHeader(TSGenmojiColSectionView.self, identifier: headerIdentifier)
         cp.cellIdentifierForItem = { data in
             return identifier
         }
@@ -114,6 +117,14 @@ extension TSPTPHistoryVC: TSSimpleCollectionViewDelegate {
             browseVC.dataModelArray = dataModelArray
             browseVC.currentIndex = dataModelArray.firstIndex(of: selectedModel) ?? 0
             kPresentModalVC(target: self, modelVC: browseVC,transitionStyle: .crossDissolve)
+            
+        case .buttonTapped(let string):
+            if string == "delete_task_expired" {
+                if let model = event.data as? TSActionInfoModel{
+                    TSRMShared.ptpDBHistory.deleteListModel(id: model.id)
+                    updateDataView()
+                }
+            }
         default:
             break
         }

+ 15 - 35
AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/TSPTPInputVC.swift

@@ -107,9 +107,10 @@ class TSPTPInputVC: TSBaseVC {
         let selectStyleView = TSPTPSelectStyleView()
         selectStyleView.currentIndexPath = IndexPath(item: viewModel.selectedStyleIndex, section: 0)
         selectStyleView.dataArray = viewModel.ptpStyleModels
-        selectStyleView.clickHandle = { [weak self] model in
+        selectStyleView.clickHandle = { [weak self] indexPath ,model in
             guard let self = self else { return }
             viewModel.selectedPTPStyleModel = model
+            viewModel.selectedStyleIndex = indexPath.item
             updateVipView()
             updateTextFiledView()
         }
@@ -243,30 +244,6 @@ class TSPTPInputVC: TSBaseVC {
         return cp
     }()
     
-    //###################################### 集合视图 ######################################
-    lazy var collectionView: TSSimpleCollectionView = {
-        let identifier = "TSGenmojiItemCell"
-        
-//        let itemW = (k_ScreenWidth-32.0-12.0-2.0)/2.0
-//        let itemH = kGetScaleHeight(originalSize: CGSize(width: 165.0, height: 293.0), width: itemW)
-        
-        let itemW = kPTPHistoryW
-        let itemH = kPTPHistoryH
-        
-        let layout = UICollectionViewFlowLayout()
-        let cp = TSSimpleCollectionView()
-        cp.layout.itemSize = CGSize(width: itemW, height: itemH)
-        cp.layout.minimumLineSpacing = 12
-        cp.layout.minimumInteritemSpacing = 12
-        cp.collectionView.contentInset = UIEdgeInsets(top: 16, left: 16, bottom: collectionViewBtootm, right: 16)
-        cp.registerCell(TSGenmojiItemCell.self,identifier:identifier)
-        cp.cellIdentifierForItem = { data in
-            return identifier
-        }
-
-        return cp
-    }()
-    
     //###################################### Button ######################################
     lazy var creatBtnView:TSAppBtnView  = {
         let creatBtnView = TSAppBtnView()
@@ -320,6 +297,7 @@ class TSPTPInputVC: TSBaseVC {
         }
         
         setUpCusStackView()
+
     }
     
     override func dealThings() {
@@ -330,7 +308,7 @@ class TSPTPInputVC: TSBaseVC {
         
         TSAIListHintBaseVC.userDefaultsKey = "isFirstUploadImagePTP"
 
-//        // 监听键盘事件
+        // 监听键盘事件
         NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(_:)), name: UIResponder.keyboardWillShowNotification, object: nil)
         NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillHide(_:)), name: UIResponder.keyboardWillHideNotification, object: nil)
         
@@ -353,15 +331,16 @@ class TSPTPInputVC: TSBaseVC {
         //后台生成 UI 任务,刷新 UI界面
         NotificationCenter.default.addObserver(forName: .kGeneratePTPOperationChanged, object: nil, queue: nil) { [weak self] notification in
             guard let self = self else { return }
-            
-            if self.isViewVisible == false {
-                dePrint("TSBaseOperation 视图不可见")
-                return
-            }
-            
+            updateVipView()
             if let userInfo = notification.userInfo as? [String: Any],let state = userInfo["state"] as? TSProgressState {
                 dePrint("TSBaseOperation stateDatauPblished 收到 = \(state)")
-                if state.reloadNewData {
+                
+                if state.isResult {//有结果,一定要刷新
+                    updataCollectionView()
+                }else if self.isViewVisible == false {
+                    dePrint("TSBaseOperation 视图不可见")
+                    return
+                }else if state.reloadNewData {//主要是给pending用,让他再视图中有个位置占着
                     updataCollectionView()
                 }
             }
@@ -379,6 +358,7 @@ class TSPTPInputVC: TSBaseVC {
         collectionComponent.clear()
         collectionComponent.reloadView(with:viewModel.colDataArray)
     }
+
 }
 
 extension TSPTPInputVC {
@@ -520,12 +500,12 @@ extension TSPTPInputVC {
         let isAvailability = TSGeneratePTPOperationQueue.shared.isAvailability
         if viewModel.isCanGennerate,isAvailability {
             creatBtnView.setBtnEnabled(isEnabled: true)
-            creatBtnView.loadingAnimation(loading: false)
+            creatBtnView.loading = false
             dePrint("TSTextGeneralPicVC setCreatBtnEnabled false")
         }else{
             dePrint("TSTextGeneralPicVC setCreatBtnEnabled = \(isAvailability)")
             creatBtnView.setBtnEnabled(isEnabled: false)
-            creatBtnView.loadingAnimation(loading: !isAvailability)
+            creatBtnView.loading = !isAvailability
         }
     }
 

+ 1 - 1
AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/VM/TSPTPInputVM.swift

@@ -17,7 +17,7 @@ class TSPTPInputVM {
         }
     }
     
-    var selectedStyleIndex:Int = 0
+    var selectedStyleIndex:Int = 1
     
     var upLoadImage:UIImage?{
         didSet{

+ 20 - 7
AIEmoji/Business/TSPTPGeneratorVC/TSPTPInputVC/View/TSImageGenerateView.swift

@@ -23,16 +23,23 @@ class TSImageGenerateView:TSBaseView {
         return refreshBtn
     }()
     
-    lazy var blurEffect: UIVisualEffectView = {
-        let blurEffect = createBlurEffectView(style: .dark)
-        blurEffect.alpha = 0.8
-        return blurEffect
-    }()
+//    lazy var blurEffect: UIVisualEffectView = {
+//        let blurEffect = createBlurEffectView(style: .dark)
+//        blurEffect.alpha = 0.8
+//        return blurEffect
+//    }()
+    
+//    lazy var blurEffect: TSDynamicBlurView = {
+//        return TSDynamicBlurView()
+//    }()
     
     private var bgImageURLString:String?
     lazy var bgImageView: UIImageView = {
         let bgImageView = UIImageView.createImageView(contentMode: .scaleAspectFill)
-        bgImageView.addSubview(blurEffect)
+//        bgImageView.addSubview(blurEffect)
+//        blurEffect.snp.makeConstraints { make in
+//            make.edges.equalToSuperview()
+//        }
         return bgImageView
     }()
     
@@ -106,6 +113,12 @@ class TSImageGenerateView:TSBaseView {
             return
         }
         self.bgImageURLString = bgImageURLString
-        bgImageView.setAsyncImage(urlString: self.bgImageURLString,contentMode: .scaleAspectFill)
+        bgImageView.image = nil
+        bgImageView.setAsyncImage(urlString: self.bgImageURLString,contentMode: .scaleAspectFill) { [weak self] image in
+            guard let self = self else { return }
+            if let image = image{
+                bgImageView.image = TSDynamicBlurView.blurred(image: image)
+            }
+        }
     }
 }

+ 11 - 4
AIEmoji/Business/VIewTool/TSGeneratorloadingView.swift

@@ -57,10 +57,14 @@ class TSGeneratorloadingView: TSBaseView {
     
     private var targetView: UIView = UIView()
     
-    lazy var blurEffect: UIVisualEffectView = {
-        let blurEffect = createBlurEffectView(style: .dark)
-        blurEffect.alpha = 0.9
-        return blurEffect
+//    lazy var blurEffect: UIVisualEffectView = {
+//        let blurEffect = createBlurEffectView(style: .dark)
+//        blurEffect.alpha = 0.9
+//        return blurEffect
+//    }()
+    
+    lazy var blurEffect: TSDynamicBlurView = {
+        return TSDynamicBlurView()
     }()
     
     
@@ -92,6 +96,9 @@ class TSGeneratorloadingView: TSBaseView {
     override func creatUI() {
 
         contentView.addSubview(blurEffect)
+        blurEffect.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
         
         contentView.addSubview(imageView)
         imageView.snp.makeConstraints { make in

+ 60 - 0
AIEmoji/Business/VIewTool/TSViewTool.swift

@@ -67,3 +67,63 @@ func kGetScaleHeight(originalSize:CGSize,width:CGFloat) -> CGFloat {
     let height = width/originalScale
     return height
 }
+
+
+import DynamicBlurView  //  pod "DynamicBlurView"
+class TSDynamicBlurView: UIView {
+    
+    public override init(frame: CGRect) {
+        super.init(frame: frame)
+        creatUI()
+    }
+    
+    required public init?(coder: NSCoder) {
+        fatalError("init(coder:) has not been implemented")
+    }
+
+    lazy var blurView: DynamicBlurView = {
+        let blurView = DynamicBlurView()
+        blurView.blurRadius = 16.0
+        blurView.trackingMode = .none // tracking滚动时候会很卡的
+        blurView.iterations = 10
+        blurView.isDeepRendering = true//ture 从 window 截图,false 从父视图截图
+        return blurView
+    }()
+    
+    func creatUI(){
+        self.backgroundColor = "#111111".uiColor.withAlphaComponent(0.5)
+        self.addSubview(blurView)
+        blurView.snp.makeConstraints { make in
+            make.edges.equalToSuperview()
+        }
+    }
+    
+    func refresh(){
+        blurView.refresh()
+    }
+}
+
+extension TSDynamicBlurView {
+    static func blurred(image:UIImage) -> UIImage? {
+//        if let darkenedImage = imageWithBlackTransparency(image, color: "#111111".uiColor.withAlphaComponent(0.5)) {
+//            return darkenedImage.blurred(radius: 16.0, iterations: 10, ratio: 1.0, blendColor: nil, blendMode: .plusLighter)
+//        }
+        return image.blurred(radius: 16.0, iterations: 10, ratio: 1.0, blendColor: nil, blendMode: .plusLighter)
+    }
+    
+    static func imageWithBlackTransparency(_ image: UIImage, color: UIColor) -> UIImage? {
+        let rect = CGRect(origin: .zero, size: image.size)
+        
+        UIGraphicsBeginImageContextWithOptions(image.size, false, image.scale)
+        defer { UIGraphicsEndImageContext() }
+        
+        // 先绘制原图
+        image.draw(in: rect)
+        
+        // 再绘制黑色透明层
+        color.setFill()
+        UIRectFillUsingBlendMode(rect, .multiply)
+        
+        return UIGraphicsGetImageFromCurrentImageContext()
+    }
+}

+ 23 - 3
AIEmoji/Common/Tool/OperationQueue/TSGenerateBaseOperation/TSGeneratePosterOperation.swift

@@ -8,6 +8,7 @@
 import Combine
 import Alamofire
 import ObjectMapper
+import Kingfisher
 class TSGeneratePTPOperationQueue: TSGenerateBaseOperationQueue {
     static let shared:TSGeneratePTPOperationQueue = TSGeneratePTPOperationQueue()
 
@@ -29,6 +30,9 @@ class TSGeneratePTPOperationQueue: TSGenerateBaseOperationQueue {
 
 class TSGeneratePTPOperation: TSGenerateBaseOperation , @unchecked Sendable{
     
+    //是否展示成功后的 View 提醒
+    public var isShowSuccessView:Bool = false
+    
     override var actionInfoDict:[String:Any]{
         return [
             "actionType":"image_create",
@@ -55,6 +59,10 @@ class TSGeneratePTPOperation: TSGenerateBaseOperation , @unchecked Sendable{
     override func handleGenerateSuccess() {
         kPurchaseDefault.useOnceForFree(type: .picToPic)
         
+        if isShowSuccessView == false {
+            return
+        }
+        
         let copyModel = self.currentActionInfoModel.copy()
         if let rootVC = WindowHelper.getCurrentViewController() ,let cyModel = copyModel as? TSActionInfoModel {
             kSaveSuccesswShared.show(atView: rootVC.view,text: "Successfully generated".localized,deadline: 5.0,bottom: kSaveSuccesswShared.getBottom(topY: k_Nav_Height+10)) {
@@ -76,10 +84,10 @@ class TSGeneratePTPOperation: TSGenerateBaseOperation , @unchecked Sendable{
      
      */
     
-    var uploadRequest:Request?
-    var creatRequest:Request?
+    private var uploadRequest:Request?
+    private var creatRequest:Request?
     
-    func createActionInfoModel(generateStyleModel:TSGenerateStyleModel) -> TSActionInfoModel? {
+    private func createActionInfoModel(generateStyleModel:TSGenerateStyleModel) -> TSActionInfoModel? {
 
         guard let upLoadImageUrl = generateStyleModel.upLoadImageUrl else { return nil }
 
@@ -123,6 +131,10 @@ class TSGeneratePTPOperation: TSGenerateBaseOperation , @unchecked Sendable{
             }else{
                 if let string = data as? String {
                     generateStyleModel.upLoadImageUrl = string
+                    if let url = URL(string: string){//上传成功后,就将图片缓存到本地
+                        ImageCache.default.store(upLoadImage, forKey: url.cacheKey)
+                    }
+                    
                     complete(createActionInfoModel(generateStyleModel: generateStyleModel))
                 }else{
                     complete(nil)
@@ -139,7 +151,15 @@ class TSGeneratePTPOperation: TSGenerateBaseOperation , @unchecked Sendable{
         generatingProgress = 0
         stopNetwork = false
         stateDatauPblished = (.start,nil)
+        
+        
+        currentActionInfoModel.status = "running"
+        currentActionInfoModel.actionStatus = .running
+        currentActionInfoModel.percent = 0
+        replaceSaveInfoModel(model: currentActionInfoModel)
+        
         stateDatauPblished = (.progressString(generating(progress: 0.0)),currentActionInfoModel)
+ 
         
         let request = currentActionInfoModel.request
         var prompt = request.prompt

+ 1 - 1
AIEmoji/Res/photo_to_photo_style.json

@@ -4,7 +4,7 @@
         "imageText": "Anime Pro",
         "prompt":"Turn uploaded photos into ghibli style",
         "specialStyle":1,
-        "isVip": false,
+        "isVip": true,
         "advance":true,
     },
     {

+ 1 - 0
Podfile

@@ -23,6 +23,7 @@ target 'AIEmoji' do
 #  pod 'SwiftyMarkdown'
 #  pod "MarkdownKit"
   pod "MXParallaxHeader"
+  pod "DynamicBlurView"
 end
 
 

+ 5 - 1
Podfile.lock

@@ -1,5 +1,6 @@
 PODS:
   - Alamofire (5.10.2)
+  - DynamicBlurView (5.0.3)
   - IQKeyboardCore (1.0.5)
   - IQKeyboardManagerSwift (8.0.0):
     - IQKeyboardManagerSwift/Appearance (= 8.0.0)
@@ -70,6 +71,7 @@ PODS:
 
 DEPENDENCIES:
   - Alamofire
+  - DynamicBlurView
   - IQKeyboardManagerSwift
   - JXPagingView
   - JXSegmentedView
@@ -86,6 +88,7 @@ DEPENDENCIES:
 SPEC REPOS:
   trunk:
     - Alamofire
+    - DynamicBlurView
     - IQKeyboardCore
     - IQKeyboardManagerSwift
     - IQKeyboardNotification
@@ -113,6 +116,7 @@ EXTERNAL SOURCES:
 
 SPEC CHECKSUMS:
   Alamofire: 7193b3b92c74a07f85569e1a6c4f4237291e7496
+  DynamicBlurView: b57e2f6aa33f85b2bcca272265162a3c7c5cc499
   IQKeyboardCore: 28c8bf3bcd8ba5aa1570b318cbc4da94b861711e
   IQKeyboardManagerSwift: 0c6fbbaa2e60739e48d7cf59f25661471a7a3a65
   IQKeyboardNotification: d7382c4466c5a5adef92c7452ebf861b36050088
@@ -135,6 +139,6 @@ SPEC CHECKSUMS:
   SwipeCellKit: 3972254a826da74609926daf59b08d6c72e619ea
   TSSmalCoacopods: 6aa97167f0c76b16fc7d1fd1eb198bb6aece4f68
 
-PODFILE CHECKSUM: 4f653860b88b70f3e7ec03b90aa9ac7a25c03d10
+PODFILE CHECKSUM: 2b99c499d2d0b8510ec7508631defa3f2e7debab
 
 COCOAPODS: 1.16.2