From 7ab063d5c658143b5bce7ca8e5ae9bfc700bb1d8 Mon Sep 17 00:00:00 2001
From: JLChen <551775569@qq.com>
Date: 星期一, 01 二月 2021 18:22:29 +0800
Subject: [PATCH] 2021-02-01 1.更新

---
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m        |   16 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASUtilities.h                                                 |   20 
 EZSDK/EZSDK.xcodeproj/project.pbxproj                                                                                                     |  508 ++---
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m                         |   29 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.m                                           |   31 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h                         |    5 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h                                                    |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h        |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.h                                           |   22 
 EZSDK.IOS/EZSDK.IOS/ApiDefinition.cs                                                                                                      |   27 
 EZSDK/EZSDK/EZ/Venders/Masonry/Masonry.h                                                                                                  |    0 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.m                                                                                   |    8 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m                                                    |   16 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZSettingViewController.m                                    |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m                             |   20 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m                                                                         |   52 
 EZSDK/EZSDK/EZ/Venders/Masonry/ViewController+MASAdditions.m                                                                              |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h                             |    4 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.h                                            |   25 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings      |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.m                                            |   33 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/GlobalKit.h                                                             |   21 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m     |   27 
 EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m                                                                               |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h     |    0 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.m                                                                                         |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/EZMain.storyboard                                                   |    5 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/README.md                                                                                                |  362 ++++
 EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.h                                                                                         |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZDeviceTableViewController.m                                |    6 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h                                                                       |   26 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/README.md                                                    |  362 ++++
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m                                                                       |   67 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m      |   15 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h                                                           |    2 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.m                                                                                       |   31 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.h                                         |    6 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/en.lproj/EZMain.strings                                                        |    8 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m                                                                      |   76 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASLayoutConstraint.h                                                                                      |    0 
 EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.h                                                                                        |   25 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.m                                         |   26 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h                                                                      |   24 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASLayoutConstraint.m                                                                                      |    0 
 EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.m                                                                                        |   33 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m                           |   67 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.h                                                                                       |   22 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m     |   12 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h      |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h                           |   26 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/AppDelegate.m                                                                  |    4 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m                                                           |  167 ++
 EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m                                                                               |    2 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h                                                          |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h                         |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings                                             |   16 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m                                                          |   33 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.h                                   |   12 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.h                                             |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m                         |   34 
 EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceTableViewController.m                                                                            |   11 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.m                                                                                        |   40 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m      |   17 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.m                                   |   33 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.m                                             |    2 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings                                                  |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.h                                                |   31 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h      |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/ViewController+MASAdditions.m                                  |    0 
 EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs                                                                                            |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.h                                       |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.h                                                                         |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.h                                                                                    |    0 
 EZSDK/EZSDK/EZ/Venders/Masonry/ViewController+MASAdditions.h                                                                              |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.m                                       |    8 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/ViewController+MASAdditions.h                                  |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h                                                  |    2 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m                                                  |   15 
 EZSDK/EZSDK/EZ/UIViewControllers/EZSettingViewController.m                                                                                |    5 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.h                                                                                   |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/LICENSE                                                      |   19 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings |   16 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/DeviceListCell.m                                                |    1 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZEditViewController.m                                       |    5 
 EZSDK/EZSDK/EZ/UIViewControllers/EZEditViewController.m                                                                                   |    7 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings                                             |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h                               |   16 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo.xcodeproj/project.pbxproj                                                      |  362 ++--
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m                                                                         |   20 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h               |    2 
 EZSDK/EZSDK/EZ/Venders/Masonry/View+MASShorthandAdditions.h                                                                               |   42 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m                               |   61 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/EZMain.strings                                                   |   10 
 EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASShorthandAdditions.h                                                                            |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/Localizable.strings                                              |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m               |  167 ++
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m                                                  |   17 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.m                                                                               |   33 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZPlaybackViewController.m                                   |    2 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.h                                                                               |   12 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m                                                                     |   34 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h                                                                         |    4 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h                                                                     |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/AddDevice.storyboard                                                |    4 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.h                                            |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.m                                                |   30 
 EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.h                                                                     |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m                 |   25 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.h                                                                                        |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.h                                        |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint+Private.h                                        |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h                 |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.m                                            |   40 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png                                                                  |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m                          |   76 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/LICENSE                                                                                                  |   19 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h                                                                           |   16 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m                                                                           |   61 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h                          |   24 
 EZSDK/EZSDK/EZSDK.h                                                                                                                       |   30 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h                                                                     |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASShorthandAdditions.h                                |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASShorthandAdditions.h                                   |   42 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/Localizable.strings                                                 |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m        |   16 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIView+MJExtension.m                               |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASLayoutConstraint.h                                          |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIView+MJExtension.h                               |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASLayoutConstraint.m                                          |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m                                                                     |   49 
 EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.m                                                                                     |   26 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m                                                    |   16 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h     |    0 
 EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m                                                                     |   17 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png                      |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIView+MJExtension.h                                                                           |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h                                                    |    2 
 EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.h                                                                                     |    6 
 EZSDK/EZSDK/EZSDK.m                                                                                                                       |  272 +-
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h        |    2 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIView+MJExtension.m                                                                           |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m                                                 |   12 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m                             |   52 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h                                                 |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h                                                  |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.h                             |    0 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint+Private.h                                                                                    |    0 
 /dev/null                                                                                                                                 |  142 -
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h                                                                     |    5 
 EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a                                                                                                    |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h                                                 |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h                                                             |    2 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/Masonry.h                                                      |    0 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m                         |   49 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m                                                                     |   29 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m                         |   17 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.h                         |    0 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.h                                                                                            |   31 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h              |    0 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m                                                             |   25 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASUtilities.h                                                                                             |   20 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m              |   33 
 EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m                                                 |   27 
 EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.m                                                                                            |   30 
 Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h                         |    2 
 EZSDK/EZSDK/EZ/Global/GlobalKit.h                                                                                                         |   18 
 167 files changed, 3,342 insertions(+), 1,286 deletions(-)

diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo.xcodeproj/project.pbxproj b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo.xcodeproj/project.pbxproj
index c352e67..b11937e 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo.xcodeproj/project.pbxproj
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo.xcodeproj/project.pbxproj
@@ -49,25 +49,6 @@
 		0D8CF3771BDF1ABA00A50266 /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3761BDF1ABA00A50266 /* ViewController.m */; };
 		0D8CF37A1BDF1ABA00A50266 /* EZMain.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0D8CF3781BDF1ABA00A50266 /* EZMain.storyboard */; };
 		0D8CF37C1BDF1ABA00A50266 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0D8CF37B1BDF1ABA00A50266 /* Assets.xcassets */; };
-		0D8CF3D71BDF516700A50266 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3AD1BDF516700A50266 /* MJRefreshAutoFooter.m */; };
-		0D8CF3D81BDF516700A50266 /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3AF1BDF516700A50266 /* MJRefreshBackFooter.m */; };
-		0D8CF3D91BDF516700A50266 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3B11BDF516700A50266 /* MJRefreshComponent.m */; };
-		0D8CF3DA1BDF516700A50266 /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3B31BDF516700A50266 /* MJRefreshFooter.m */; };
-		0D8CF3DB1BDF516700A50266 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3B51BDF516700A50266 /* MJRefreshHeader.m */; };
-		0D8CF3DC1BDF516700A50266 /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3BA1BDF516700A50266 /* MJRefreshAutoGifFooter.m */; };
-		0D8CF3DD1BDF516700A50266 /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3BC1BDF516700A50266 /* MJRefreshAutoNormalFooter.m */; };
-		0D8CF3DE1BDF516700A50266 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3BE1BDF516700A50266 /* MJRefreshAutoStateFooter.m */; };
-		0D8CF3DF1BDF516700A50266 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3C11BDF516700A50266 /* MJRefreshBackGifFooter.m */; };
-		0D8CF3E01BDF516700A50266 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3C31BDF516700A50266 /* MJRefreshBackNormalFooter.m */; };
-		0D8CF3E11BDF516700A50266 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3C51BDF516700A50266 /* MJRefreshBackStateFooter.m */; };
-		0D8CF3E21BDF516700A50266 /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3C81BDF516700A50266 /* MJRefreshGifHeader.m */; };
-		0D8CF3E31BDF516700A50266 /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3CA1BDF516700A50266 /* MJRefreshNormalHeader.m */; };
-		0D8CF3E41BDF516700A50266 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3CC1BDF516700A50266 /* MJRefreshStateHeader.m */; };
-		0D8CF3E51BDF516700A50266 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0D8CF3CD1BDF516700A50266 /* MJRefresh.bundle */; };
-		0D8CF3E61BDF516700A50266 /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3D01BDF516700A50266 /* MJRefreshConst.m */; };
-		0D8CF3E71BDF516700A50266 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3D21BDF516700A50266 /* UIScrollView+MJExtension.m */; };
-		0D8CF3E81BDF516700A50266 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3D41BDF516700A50266 /* UIScrollView+MJRefresh.m */; };
-		0D8CF3E91BDF516700A50266 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = 0D8CF3D61BDF516700A50266 /* UIView+MJExtension.m */; };
 		0D8CF4A61BDF555600A50266 /* libcrypto.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D8CF4A31BDF555600A50266 /* libcrypto.a */; };
 		0D8CF4A71BDF555600A50266 /* libssl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D8CF4A41BDF555600A50266 /* libssl.a */; };
 		0D8CF4AB1BDF558500A50266 /* VideoToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0D8CF4AA1BDF558500A50266 /* VideoToolbox.framework */; };
@@ -160,6 +141,28 @@
 		49D4B4AE1F6BB99900ADF471 /* libbz2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 49D4B4AD1F6BB99900ADF471 /* libbz2.tbd */; };
 		B95004F125B927D0002D3C58 /* com.hri.hpc.mobile.ios.player.metallib in Resources */ = {isa = PBXBuildFile; fileRef = B95004F025B927D0002D3C58 /* com.hri.hpc.mobile.ios.player.metallib */; };
 		B95004F725B929EF002D3C58 /* Launch Screen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B95004F625B929EF002D3C58 /* Launch Screen.storyboard */; };
+		B9EA4E3825C7E7AB000FFDA2 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = B9EA4E0725C7E7AB000FFDA2 /* LICENSE */; };
+		B9EA4E3925C7E7AB000FFDA2 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E0925C7E7AB000FFDA2 /* UIScrollView+MJRefresh.m */; };
+		B9EA4E3A25C7E7AB000FFDA2 /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E0A25C7E7AB000FFDA2 /* MJRefreshConst.m */; };
+		B9EA4E3B25C7E7AB000FFDA2 /* MJRefresh.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B9EA4E0E25C7E7AB000FFDA2 /* MJRefresh.bundle */; };
+		B9EA4E3C25C7E7AB000FFDA2 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1025C7E7AB000FFDA2 /* UIScrollView+MJExtension.m */; };
+		B9EA4E3D25C7E7AB000FFDA2 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1325C7E7AB000FFDA2 /* NSBundle+MJRefresh.m */; };
+		B9EA4E3E25C7E7AB000FFDA2 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1425C7E7AB000FFDA2 /* UIView+MJExtension.m */; };
+		B9EA4E3F25C7E7AB000FFDA2 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1B25C7E7AB000FFDA2 /* MJRefreshBackGifFooter.m */; };
+		B9EA4E4025C7E7AB000FFDA2 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1C25C7E7AB000FFDA2 /* MJRefreshBackStateFooter.m */; };
+		B9EA4E4125C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E1D25C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.m */; };
+		B9EA4E4225C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2225C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.m */; };
+		B9EA4E4325C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2325C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.m */; };
+		B9EA4E4425C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2425C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.m */; };
+		B9EA4E4525C7E7AB000FFDA2 /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2625C7E7AB000FFDA2 /* MJRefreshNormalHeader.m */; };
+		B9EA4E4625C7E7AB000FFDA2 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2A25C7E7AB000FFDA2 /* MJRefreshStateHeader.m */; };
+		B9EA4E4725C7E7AB000FFDA2 /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2B25C7E7AB000FFDA2 /* MJRefreshGifHeader.m */; };
+		B9EA4E4825C7E7AB000FFDA2 /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2D25C7E7AB000FFDA2 /* MJRefreshFooter.m */; };
+		B9EA4E4925C7E7AB000FFDA2 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E2F25C7E7AB000FFDA2 /* MJRefreshHeader.m */; };
+		B9EA4E4A25C7E7AB000FFDA2 /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E3125C7E7AB000FFDA2 /* MJRefreshBackFooter.m */; };
+		B9EA4E4B25C7E7AB000FFDA2 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E3225C7E7AB000FFDA2 /* MJRefreshAutoFooter.m */; };
+		B9EA4E4C25C7E7AB000FFDA2 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E3425C7E7AB000FFDA2 /* MJRefreshComponent.m */; };
+		B9EA4E4D25C7E7AB000FFDA2 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = B9EA4E3725C7E7AB000FFDA2 /* README.md */; };
 		C437D74524723C1A0012D982 /* EZHubDebugViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C437D74424723C1A0012D982 /* EZHubDebugViewController.m */; };
 		C4404531236AF41400EC470E /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4404530236AF41400EC470E /* NetworkExtension.framework */; };
 		C4404533236AF41400EC470E /* ExternalAccessory.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4404532236AF41400EC470E /* ExternalAccessory.framework */; };
@@ -297,44 +300,6 @@
 		0D8CF3801BDF1ABA00A50266 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
 		0D8CF3851BDF1ABA00A50266 /* EZOpenSDKDemoTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EZOpenSDKDemoTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
 		0D8CF3901BDF1ABA00A50266 /* EZOpenSDKDemoUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EZOpenSDKDemoUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
-		0D8CF3AC1BDF516700A50266 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoFooter.h; sourceTree = "<group>"; };
-		0D8CF3AD1BDF516700A50266 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoFooter.m; sourceTree = "<group>"; };
-		0D8CF3AE1BDF516700A50266 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = "<group>"; };
-		0D8CF3AF1BDF516700A50266 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackFooter.m; sourceTree = "<group>"; };
-		0D8CF3B01BDF516700A50266 /* MJRefreshComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshComponent.h; sourceTree = "<group>"; };
-		0D8CF3B11BDF516700A50266 /* MJRefreshComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshComponent.m; sourceTree = "<group>"; };
-		0D8CF3B21BDF516700A50266 /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = "<group>"; };
-		0D8CF3B31BDF516700A50266 /* MJRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshFooter.m; sourceTree = "<group>"; };
-		0D8CF3B41BDF516700A50266 /* MJRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshHeader.h; sourceTree = "<group>"; };
-		0D8CF3B51BDF516700A50266 /* MJRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshHeader.m; sourceTree = "<group>"; };
-		0D8CF3B91BDF516700A50266 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoGifFooter.h; sourceTree = "<group>"; };
-		0D8CF3BA1BDF516700A50266 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoGifFooter.m; sourceTree = "<group>"; };
-		0D8CF3BB1BDF516700A50266 /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoNormalFooter.h; sourceTree = "<group>"; };
-		0D8CF3BC1BDF516700A50266 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoNormalFooter.m; sourceTree = "<group>"; };
-		0D8CF3BD1BDF516700A50266 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoStateFooter.h; sourceTree = "<group>"; };
-		0D8CF3BE1BDF516700A50266 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoStateFooter.m; sourceTree = "<group>"; };
-		0D8CF3C01BDF516700A50266 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackGifFooter.h; sourceTree = "<group>"; };
-		0D8CF3C11BDF516700A50266 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackGifFooter.m; sourceTree = "<group>"; };
-		0D8CF3C21BDF516700A50266 /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackNormalFooter.h; sourceTree = "<group>"; };
-		0D8CF3C31BDF516700A50266 /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackNormalFooter.m; sourceTree = "<group>"; };
-		0D8CF3C41BDF516700A50266 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackStateFooter.h; sourceTree = "<group>"; };
-		0D8CF3C51BDF516700A50266 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackStateFooter.m; sourceTree = "<group>"; };
-		0D8CF3C71BDF516700A50266 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshGifHeader.h; sourceTree = "<group>"; };
-		0D8CF3C81BDF516700A50266 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshGifHeader.m; sourceTree = "<group>"; };
-		0D8CF3C91BDF516700A50266 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshNormalHeader.h; sourceTree = "<group>"; };
-		0D8CF3CA1BDF516700A50266 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshNormalHeader.m; sourceTree = "<group>"; };
-		0D8CF3CB1BDF516700A50266 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshStateHeader.h; sourceTree = "<group>"; };
-		0D8CF3CC1BDF516700A50266 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshStateHeader.m; sourceTree = "<group>"; };
-		0D8CF3CD1BDF516700A50266 /* MJRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJRefresh.bundle; sourceTree = "<group>"; };
-		0D8CF3CE1BDF516700A50266 /* MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefresh.h; sourceTree = "<group>"; };
-		0D8CF3CF1BDF516700A50266 /* MJRefreshConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshConst.h; sourceTree = "<group>"; };
-		0D8CF3D01BDF516700A50266 /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = "<group>"; };
-		0D8CF3D11BDF516700A50266 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJExtension.h"; sourceTree = "<group>"; };
-		0D8CF3D21BDF516700A50266 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJExtension.m"; sourceTree = "<group>"; };
-		0D8CF3D31BDF516700A50266 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefresh.h"; sourceTree = "<group>"; };
-		0D8CF3D41BDF516700A50266 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = "<group>"; };
-		0D8CF3D51BDF516700A50266 /* UIView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MJExtension.h"; sourceTree = "<group>"; };
-		0D8CF3D61BDF516700A50266 /* UIView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MJExtension.m"; sourceTree = "<group>"; };
 		0D8CF4521BDF555500A50266 /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = "<group>"; };
 		0D8CF4541BDF555500A50266 /* asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1.h; sourceTree = "<group>"; };
 		0D8CF4551BDF555500A50266 /* asn1_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1_mac.h; sourceTree = "<group>"; };
@@ -599,6 +564,48 @@
 		49D4B4AD1F6BB99900ADF471 /* libbz2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libbz2.tbd; path = usr/lib/libbz2.tbd; sourceTree = SDKROOT; };
 		B95004F025B927D0002D3C58 /* com.hri.hpc.mobile.ios.player.metallib */ = {isa = PBXFileReference; lastKnownFileType = "archive.metal-library"; path = com.hri.hpc.mobile.ios.player.metallib; sourceTree = "<group>"; };
 		B95004F625B929EF002D3C58 /* Launch Screen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "Launch Screen.storyboard"; sourceTree = "<group>"; };
+		B9EA4E0725C7E7AB000FFDA2 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
+		B9EA4E0925C7E7AB000FFDA2 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = "<group>"; };
+		B9EA4E0A25C7E7AB000FFDA2 /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = "<group>"; };
+		B9EA4E0B25C7E7AB000FFDA2 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJExtension.h"; sourceTree = "<group>"; };
+		B9EA4E0C25C7E7AB000FFDA2 /* MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefresh.h; sourceTree = "<group>"; };
+		B9EA4E0D25C7E7AB000FFDA2 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+MJRefresh.h"; sourceTree = "<group>"; };
+		B9EA4E0E25C7E7AB000FFDA2 /* MJRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJRefresh.bundle; sourceTree = "<group>"; };
+		B9EA4E0F25C7E7AB000FFDA2 /* UIView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MJExtension.h"; sourceTree = "<group>"; };
+		B9EA4E1025C7E7AB000FFDA2 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJExtension.m"; sourceTree = "<group>"; };
+		B9EA4E1125C7E7AB000FFDA2 /* MJRefreshConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshConst.h; sourceTree = "<group>"; };
+		B9EA4E1225C7E7AB000FFDA2 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefresh.h"; sourceTree = "<group>"; };
+		B9EA4E1325C7E7AB000FFDA2 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+MJRefresh.m"; sourceTree = "<group>"; };
+		B9EA4E1425C7E7AB000FFDA2 /* UIView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MJExtension.m"; sourceTree = "<group>"; };
+		B9EA4E1825C7E7AB000FFDA2 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackGifFooter.h; sourceTree = "<group>"; };
+		B9EA4E1925C7E7AB000FFDA2 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackStateFooter.h; sourceTree = "<group>"; };
+		B9EA4E1A25C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackNormalFooter.h; sourceTree = "<group>"; };
+		B9EA4E1B25C7E7AB000FFDA2 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackGifFooter.m; sourceTree = "<group>"; };
+		B9EA4E1C25C7E7AB000FFDA2 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackStateFooter.m; sourceTree = "<group>"; };
+		B9EA4E1D25C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackNormalFooter.m; sourceTree = "<group>"; };
+		B9EA4E1F25C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoStateFooter.h; sourceTree = "<group>"; };
+		B9EA4E2025C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoNormalFooter.h; sourceTree = "<group>"; };
+		B9EA4E2125C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoGifFooter.h; sourceTree = "<group>"; };
+		B9EA4E2225C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoStateFooter.m; sourceTree = "<group>"; };
+		B9EA4E2325C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoGifFooter.m; sourceTree = "<group>"; };
+		B9EA4E2425C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoNormalFooter.m; sourceTree = "<group>"; };
+		B9EA4E2625C7E7AB000FFDA2 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshNormalHeader.m; sourceTree = "<group>"; };
+		B9EA4E2725C7E7AB000FFDA2 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshStateHeader.h; sourceTree = "<group>"; };
+		B9EA4E2825C7E7AB000FFDA2 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshGifHeader.h; sourceTree = "<group>"; };
+		B9EA4E2925C7E7AB000FFDA2 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshNormalHeader.h; sourceTree = "<group>"; };
+		B9EA4E2A25C7E7AB000FFDA2 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshStateHeader.m; sourceTree = "<group>"; };
+		B9EA4E2B25C7E7AB000FFDA2 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshGifHeader.m; sourceTree = "<group>"; };
+		B9EA4E2D25C7E7AB000FFDA2 /* MJRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshFooter.m; sourceTree = "<group>"; };
+		B9EA4E2E25C7E7AB000FFDA2 /* MJRefreshComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshComponent.h; sourceTree = "<group>"; };
+		B9EA4E2F25C7E7AB000FFDA2 /* MJRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshHeader.m; sourceTree = "<group>"; };
+		B9EA4E3025C7E7AB000FFDA2 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoFooter.h; sourceTree = "<group>"; };
+		B9EA4E3125C7E7AB000FFDA2 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackFooter.m; sourceTree = "<group>"; };
+		B9EA4E3225C7E7AB000FFDA2 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoFooter.m; sourceTree = "<group>"; };
+		B9EA4E3325C7E7AB000FFDA2 /* MJRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshHeader.h; sourceTree = "<group>"; };
+		B9EA4E3425C7E7AB000FFDA2 /* MJRefreshComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshComponent.m; sourceTree = "<group>"; };
+		B9EA4E3525C7E7AB000FFDA2 /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = "<group>"; };
+		B9EA4E3625C7E7AB000FFDA2 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = "<group>"; };
+		B9EA4E3725C7E7AB000FFDA2 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
 		C437D74324723C1A0012D982 /* EZHubDebugViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EZHubDebugViewController.h; sourceTree = "<group>"; };
 		C437D74424723C1A0012D982 /* EZHubDebugViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EZHubDebugViewController.m; sourceTree = "<group>"; };
 		C4404530236AF41400EC470E /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = System/Library/Frameworks/NetworkExtension.framework; sourceTree = SDKROOT; };
@@ -876,6 +883,7 @@
 		0D8CF3A91BDF516700A50266 /* Venders */ = {
 			isa = PBXGroup;
 			children = (
+				B9EA4E0625C7E7AA000FFDA2 /* MJRefresh */,
 				C4A41D7C23D6E4DC00D59722 /* Toast */,
 				0D9ACAD31C7EE4D100B4DE97 /* UIKit+AFNetworking */,
 				0D2E4B991C7DB2E200CA948A /* AFNetworking */,
@@ -889,102 +897,8 @@
 				0DCE0BAF1BE1C9A9000EA68A /* Masonry */,
 				0D8CF4D11BDF898800A50266 /* UITableView-FDTemplateLayoutCell */,
 				0D8CF44F1BDF555500A50266 /* openssl */,
-				0D8CF3AA1BDF516700A50266 /* MJRefresh */,
 			);
 			path = Venders;
-			sourceTree = "<group>";
-		};
-		0D8CF3AA1BDF516700A50266 /* MJRefresh */ = {
-			isa = PBXGroup;
-			children = (
-				0D8CF3AB1BDF516700A50266 /* Base */,
-				0D8CF3B61BDF516700A50266 /* Custom */,
-				0D8CF3CD1BDF516700A50266 /* MJRefresh.bundle */,
-				0D8CF3CE1BDF516700A50266 /* MJRefresh.h */,
-				0D8CF3CF1BDF516700A50266 /* MJRefreshConst.h */,
-				0D8CF3D01BDF516700A50266 /* MJRefreshConst.m */,
-				0D8CF3D11BDF516700A50266 /* UIScrollView+MJExtension.h */,
-				0D8CF3D21BDF516700A50266 /* UIScrollView+MJExtension.m */,
-				0D8CF3D31BDF516700A50266 /* UIScrollView+MJRefresh.h */,
-				0D8CF3D41BDF516700A50266 /* UIScrollView+MJRefresh.m */,
-				0D8CF3D51BDF516700A50266 /* UIView+MJExtension.h */,
-				0D8CF3D61BDF516700A50266 /* UIView+MJExtension.m */,
-			);
-			path = MJRefresh;
-			sourceTree = "<group>";
-		};
-		0D8CF3AB1BDF516700A50266 /* Base */ = {
-			isa = PBXGroup;
-			children = (
-				0D8CF3AC1BDF516700A50266 /* MJRefreshAutoFooter.h */,
-				0D8CF3AD1BDF516700A50266 /* MJRefreshAutoFooter.m */,
-				0D8CF3AE1BDF516700A50266 /* MJRefreshBackFooter.h */,
-				0D8CF3AF1BDF516700A50266 /* MJRefreshBackFooter.m */,
-				0D8CF3B01BDF516700A50266 /* MJRefreshComponent.h */,
-				0D8CF3B11BDF516700A50266 /* MJRefreshComponent.m */,
-				0D8CF3B21BDF516700A50266 /* MJRefreshFooter.h */,
-				0D8CF3B31BDF516700A50266 /* MJRefreshFooter.m */,
-				0D8CF3B41BDF516700A50266 /* MJRefreshHeader.h */,
-				0D8CF3B51BDF516700A50266 /* MJRefreshHeader.m */,
-			);
-			path = Base;
-			sourceTree = "<group>";
-		};
-		0D8CF3B61BDF516700A50266 /* Custom */ = {
-			isa = PBXGroup;
-			children = (
-				0D8CF3B71BDF516700A50266 /* Footer */,
-				0D8CF3C61BDF516700A50266 /* Header */,
-			);
-			path = Custom;
-			sourceTree = "<group>";
-		};
-		0D8CF3B71BDF516700A50266 /* Footer */ = {
-			isa = PBXGroup;
-			children = (
-				0D8CF3B81BDF516700A50266 /* Auto */,
-				0D8CF3BF1BDF516700A50266 /* Back */,
-			);
-			path = Footer;
-			sourceTree = "<group>";
-		};
-		0D8CF3B81BDF516700A50266 /* Auto */ = {
-			isa = PBXGroup;
-			children = (
-				0D8CF3B91BDF516700A50266 /* MJRefreshAutoGifFooter.h */,
-				0D8CF3BA1BDF516700A50266 /* MJRefreshAutoGifFooter.m */,
-				0D8CF3BB1BDF516700A50266 /* MJRefreshAutoNormalFooter.h */,
-				0D8CF3BC1BDF516700A50266 /* MJRefreshAutoNormalFooter.m */,
-				0D8CF3BD1BDF516700A50266 /* MJRefreshAutoStateFooter.h */,
-				0D8CF3BE1BDF516700A50266 /* MJRefreshAutoStateFooter.m */,
-			);
-			path = Auto;
-			sourceTree = "<group>";
-		};
-		0D8CF3BF1BDF516700A50266 /* Back */ = {
-			isa = PBXGroup;
-			children = (
-				0D8CF3C01BDF516700A50266 /* MJRefreshBackGifFooter.h */,
-				0D8CF3C11BDF516700A50266 /* MJRefreshBackGifFooter.m */,
-				0D8CF3C21BDF516700A50266 /* MJRefreshBackNormalFooter.h */,
-				0D8CF3C31BDF516700A50266 /* MJRefreshBackNormalFooter.m */,
-				0D8CF3C41BDF516700A50266 /* MJRefreshBackStateFooter.h */,
-				0D8CF3C51BDF516700A50266 /* MJRefreshBackStateFooter.m */,
-			);
-			path = Back;
-			sourceTree = "<group>";
-		};
-		0D8CF3C61BDF516700A50266 /* Header */ = {
-			isa = PBXGroup;
-			children = (
-				0D8CF3C71BDF516700A50266 /* MJRefreshGifHeader.h */,
-				0D8CF3C81BDF516700A50266 /* MJRefreshGifHeader.m */,
-				0D8CF3C91BDF516700A50266 /* MJRefreshNormalHeader.h */,
-				0D8CF3CA1BDF516700A50266 /* MJRefreshNormalHeader.m */,
-				0D8CF3CB1BDF516700A50266 /* MJRefreshStateHeader.h */,
-				0D8CF3CC1BDF516700A50266 /* MJRefreshStateHeader.m */,
-			);
-			path = Header;
 			sourceTree = "<group>";
 		};
 		0D8CF44F1BDF555500A50266 /* openssl */ = {
@@ -1398,6 +1312,111 @@
 			name = Category;
 			sourceTree = "<group>";
 		};
+		B9EA4E0625C7E7AA000FFDA2 /* MJRefresh */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E0725C7E7AB000FFDA2 /* LICENSE */,
+				B9EA4E0825C7E7AB000FFDA2 /* MJRefresh */,
+				B9EA4E3725C7E7AB000FFDA2 /* README.md */,
+			);
+			path = MJRefresh;
+			sourceTree = "<group>";
+		};
+		B9EA4E0825C7E7AB000FFDA2 /* MJRefresh */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E0925C7E7AB000FFDA2 /* UIScrollView+MJRefresh.m */,
+				B9EA4E0A25C7E7AB000FFDA2 /* MJRefreshConst.m */,
+				B9EA4E0B25C7E7AB000FFDA2 /* UIScrollView+MJExtension.h */,
+				B9EA4E0C25C7E7AB000FFDA2 /* MJRefresh.h */,
+				B9EA4E0D25C7E7AB000FFDA2 /* NSBundle+MJRefresh.h */,
+				B9EA4E0E25C7E7AB000FFDA2 /* MJRefresh.bundle */,
+				B9EA4E0F25C7E7AB000FFDA2 /* UIView+MJExtension.h */,
+				B9EA4E1025C7E7AB000FFDA2 /* UIScrollView+MJExtension.m */,
+				B9EA4E1125C7E7AB000FFDA2 /* MJRefreshConst.h */,
+				B9EA4E1225C7E7AB000FFDA2 /* UIScrollView+MJRefresh.h */,
+				B9EA4E1325C7E7AB000FFDA2 /* NSBundle+MJRefresh.m */,
+				B9EA4E1425C7E7AB000FFDA2 /* UIView+MJExtension.m */,
+				B9EA4E1525C7E7AB000FFDA2 /* Custom */,
+				B9EA4E2C25C7E7AB000FFDA2 /* Base */,
+			);
+			path = MJRefresh;
+			sourceTree = "<group>";
+		};
+		B9EA4E1525C7E7AB000FFDA2 /* Custom */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E1625C7E7AB000FFDA2 /* Footer */,
+				B9EA4E2525C7E7AB000FFDA2 /* Header */,
+			);
+			path = Custom;
+			sourceTree = "<group>";
+		};
+		B9EA4E1625C7E7AB000FFDA2 /* Footer */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E1725C7E7AB000FFDA2 /* Back */,
+				B9EA4E1E25C7E7AB000FFDA2 /* Auto */,
+			);
+			path = Footer;
+			sourceTree = "<group>";
+		};
+		B9EA4E1725C7E7AB000FFDA2 /* Back */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E1825C7E7AB000FFDA2 /* MJRefreshBackGifFooter.h */,
+				B9EA4E1925C7E7AB000FFDA2 /* MJRefreshBackStateFooter.h */,
+				B9EA4E1A25C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.h */,
+				B9EA4E1B25C7E7AB000FFDA2 /* MJRefreshBackGifFooter.m */,
+				B9EA4E1C25C7E7AB000FFDA2 /* MJRefreshBackStateFooter.m */,
+				B9EA4E1D25C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.m */,
+			);
+			path = Back;
+			sourceTree = "<group>";
+		};
+		B9EA4E1E25C7E7AB000FFDA2 /* Auto */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E1F25C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.h */,
+				B9EA4E2025C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.h */,
+				B9EA4E2125C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.h */,
+				B9EA4E2225C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.m */,
+				B9EA4E2325C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.m */,
+				B9EA4E2425C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.m */,
+			);
+			path = Auto;
+			sourceTree = "<group>";
+		};
+		B9EA4E2525C7E7AB000FFDA2 /* Header */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E2625C7E7AB000FFDA2 /* MJRefreshNormalHeader.m */,
+				B9EA4E2725C7E7AB000FFDA2 /* MJRefreshStateHeader.h */,
+				B9EA4E2825C7E7AB000FFDA2 /* MJRefreshGifHeader.h */,
+				B9EA4E2925C7E7AB000FFDA2 /* MJRefreshNormalHeader.h */,
+				B9EA4E2A25C7E7AB000FFDA2 /* MJRefreshStateHeader.m */,
+				B9EA4E2B25C7E7AB000FFDA2 /* MJRefreshGifHeader.m */,
+			);
+			path = Header;
+			sourceTree = "<group>";
+		};
+		B9EA4E2C25C7E7AB000FFDA2 /* Base */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E2D25C7E7AB000FFDA2 /* MJRefreshFooter.m */,
+				B9EA4E2E25C7E7AB000FFDA2 /* MJRefreshComponent.h */,
+				B9EA4E2F25C7E7AB000FFDA2 /* MJRefreshHeader.m */,
+				B9EA4E3025C7E7AB000FFDA2 /* MJRefreshAutoFooter.h */,
+				B9EA4E3125C7E7AB000FFDA2 /* MJRefreshBackFooter.m */,
+				B9EA4E3225C7E7AB000FFDA2 /* MJRefreshAutoFooter.m */,
+				B9EA4E3325C7E7AB000FFDA2 /* MJRefreshHeader.h */,
+				B9EA4E3425C7E7AB000FFDA2 /* MJRefreshComponent.m */,
+				B9EA4E3525C7E7AB000FFDA2 /* MJRefreshFooter.h */,
+				B9EA4E3625C7E7AB000FFDA2 /* MJRefreshBackFooter.h */,
+			);
+			path = Base;
+			sourceTree = "<group>";
+		};
 		C484622D241789AD0003F8C4 /* Views */ = {
 			isa = PBXGroup;
 			children = (
@@ -1576,9 +1595,11 @@
 				B95004F125B927D0002D3C58 /* com.hri.hpc.mobile.ios.player.metallib in Resources */,
 				4975E88E1F60E44500A00CDF /* Localizable.strings in Resources */,
 				0D8CF37C1BDF1ABA00A50266 /* Assets.xcassets in Resources */,
+				B9EA4E3825C7E7AB000FFDA2 /* LICENSE in Resources */,
 				0D5FCB791BE0EC8E004E5734 /* AddDevice.storyboard in Resources */,
+				B9EA4E4D25C7E7AB000FFDA2 /* README.md in Resources */,
 				C49DA95D21E450250078FFD0 /* EZSupportViewController.xib in Resources */,
-				0D8CF3E51BDF516700A50266 /* MJRefresh.bundle in Resources */,
+				B9EA4E3B25C7E7AB000FFDA2 /* MJRefresh.bundle in Resources */,
 				0D8CF37A1BDF1ABA00A50266 /* EZMain.storyboard in Resources */,
 				B95004F725B929EF002D3C58 /* Launch Screen.storyboard in Resources */,
 				C4A41D8423D6EE5F00D59722 /* EZVideoTalkViewcontroller.xib in Resources */,
@@ -1612,23 +1633,18 @@
 				0DF582BE1BE84E1400242E99 /* EZRecordCell.m in Sources */,
 				0D9ACAEC1C7EE4D100B4DE97 /* UIRefreshControl+AFNetworking.m in Sources */,
 				0DCE0C011BE22761000EA68A /* NSArray+DDKit.m in Sources */,
-				0D8CF3DD1BDF516700A50266 /* MJRefreshAutoNormalFooter.m in Sources */,
 				0D8CF4DD1BDF898800A50266 /* UITableView+FDTemplateLayoutCellDebug.m in Sources */,
 				0DCE0BE51BE20571000EA68A /* EZQRView.m in Sources */,
-				0D8CF3E01BDF516700A50266 /* MJRefreshBackNormalFooter.m in Sources */,
-				0D8CF3D81BDF516700A50266 /* MJRefreshBackFooter.m in Sources */,
 				0D9ACAE81C7EE4D100B4DE97 /* UIAlertView+AFNetworking.m in Sources */,
+				B9EA4E4A25C7E7AB000FFDA2 /* MJRefreshBackFooter.m in Sources */,
 				0DCE0C381BE2279F000EA68A /* UIButton+WebCache.m in Sources */,
 				0DCE0C351BE2279F000EA68A /* SDWebImageDownloaderOperation.m in Sources */,
 				0D9ACAE61C7EE4D100B4DE97 /* AFNetworkActivityIndicatorManager.m in Sources */,
 				0DCE0BCB1BE1C9A9000EA68A /* MASCompositeConstraint.m in Sources */,
 				0DCE0BCF1BE1C9A9000EA68A /* MASViewAttribute.m in Sources */,
-				0D8CF3E61BDF516700A50266 /* MJRefreshConst.m in Sources */,
-				0D8CF3E71BDF516700A50266 /* UIScrollView+MJExtension.m in Sources */,
 				0DD500081BFC647100A9629C /* UIImageView+EzvizOpenSDK.m in Sources */,
-				0D8CF3DA1BDF516700A50266 /* MJRefreshFooter.m in Sources */,
+				B9EA4E4B25C7E7AB000FFDA2 /* MJRefreshAutoFooter.m in Sources */,
 				0DCE0BCC1BE1C9A9000EA68A /* MASConstraint.m in Sources */,
-				0D8CF3E21BDF516700A50266 /* MJRefreshGifHeader.m in Sources */,
 				C48E4B4723331F7C00F57F6D /* EZLocationAlertVCViewController.m in Sources */,
 				0DCE0C3A1BE2279F000EA68A /* UIImage+MultiFormat.m in Sources */,
 				0DCE0BD81BE1CB74000EA68A /* EZWifiInfoViewController.m in Sources */,
@@ -1639,24 +1655,23 @@
 				0D50150F1BF8B77500F13269 /* MWTapDetectingImageView.m in Sources */,
 				49AF550A1F442A1E007362EA /* EZLocalRealPlayViewController.m in Sources */,
 				0DCE0BAE1BE1C975000EA68A /* EZWifiTipsViewController.m in Sources */,
-				0D8CF3D71BDF516700A50266 /* MJRefreshAutoFooter.m in Sources */,
 				0D2E4BB41C7DB2E200CA948A /* AFURLResponseSerialization.m in Sources */,
 				0DCE0BD11BE1C9A9000EA68A /* NSArray+MASAdditions.m in Sources */,
 				0D8CF3771BDF1ABA00A50266 /* ViewController.m in Sources */,
 				0D50151C1BF8BC7900F13269 /* EZMessagePlaybackViewController.m in Sources */,
 				0DCE0C3E1BE2279F000EA68A /* UIView+WebCacheOperation.m in Sources */,
-				0D8CF3E91BDF516700A50266 /* UIView+MJExtension.m in Sources */,
 				0DCE0C021BE22761000EA68A /* NSDate+DDKit.m in Sources */,
 				0DCF6CF61BE8961A004B180A /* MessageListCell.m in Sources */,
 				0DCE0C091BE22761000EA68A /* UISegmentedControl+DDKit.m in Sources */,
 				0D5FCB7C1BE0EF32004E5734 /* EZAddByQRCodeViewController.m in Sources */,
+				B9EA4E3C25C7E7AB000FFDA2 /* UIScrollView+MJExtension.m in Sources */,
 				0D0C43D51BE72C2500039D44 /* Aspects.m in Sources */,
 				49D4B40D1F66A44000ADF471 /* EZDdnsDeviceTableViewController.m in Sources */,
+				B9EA4E4625C7E7AB000FFDA2 /* MJRefreshStateHeader.m in Sources */,
 				C48462262417883B0003F8C4 /* UIAlertController+TextField.m in Sources */,
-				0D8CF3DB1BDF516700A50266 /* MJRefreshHeader.m in Sources */,
-				0D8CF3DF1BDF516700A50266 /* MJRefreshBackGifFooter.m in Sources */,
 				0DFC6AE71BF20C87005FACFE /* EZSettingViewController.m in Sources */,
 				0D50150E1BF8B77500F13269 /* MWPhotoBrowser.m in Sources */,
+				B9EA4E4425C7E7AB000FFDA2 /* MJRefreshAutoNormalFooter.m in Sources */,
 				C49DA95E21E450250078FFD0 /* EZSupportViewController.m in Sources */,
 				0DCE0C301BE2279F000EA68A /* NSData+ImageContentType.m in Sources */,
 				0D2E4BB01C7DB2E200CA948A /* AFNetworkReachabilityManager.m in Sources */,
@@ -1668,7 +1683,6 @@
 				C480646B22C45CFD003C9607 /* EZCustomTableView.m in Sources */,
 				0D9ACAE91C7EE4D100B4DE97 /* UIButton+AFNetworking.m in Sources */,
 				C484622C2417899F0003F8C4 /* EZEncryptCameraCell.m in Sources */,
-				0D8CF3E81BDF516700A50266 /* UIScrollView+MJRefresh.m in Sources */,
 				496D11381DF9832F00468C51 /* Toast+UIView.m in Sources */,
 				0D9ACAE71C7EE4D100B4DE97 /* UIActivityIndicatorView+AFNetworking.m in Sources */,
 				0DCE0C071BE22761000EA68A /* UIImageView+DDKit.m in Sources */,
@@ -1676,22 +1690,25 @@
 				0D5FCB7F1BE0EFAA004E5734 /* EZDeviceTableViewController.m in Sources */,
 				0D2E4BB31C7DB2E200CA948A /* AFURLRequestSerialization.m in Sources */,
 				492E5B4220C69FA600D333EE /* EZAPConfigResultViewController.m in Sources */,
+				B9EA4E3D25C7E7AB000FFDA2 /* NSBundle+MJRefresh.m in Sources */,
 				0DC582D21BFF006B00D5BF02 /* NSDate-Utilities.m in Sources */,
 				0DCFC11E1BF18DD800EE1FA3 /* HIKLoadViewItem+configPath.m in Sources */,
 				49AF550D1F44423B007362EA /* EZLocalCameraListViewController.m in Sources */,
 				C437D74524723C1A0012D982 /* EZHubDebugViewController.m in Sources */,
 				0D8CF4D01BDF696900A50266 /* GlobalKit.m in Sources */,
-				0D8CF3D91BDF516700A50266 /* MJRefreshComponent.m in Sources */,
 				0DF582B71BE83F1A00242E99 /* EZPlaybackViewController.m in Sources */,
 				492E5B3F20C531AD00D333EE /* EZAPWiFiConfigViewController.m in Sources */,
 				0D120D8F1C2158B7008B585B /* EZEditViewController.m in Sources */,
 				0D6CD2821BF9FF2500F82B7F /* EZMessagePhotoViewController.m in Sources */,
+				B9EA4E4125C7E7AB000FFDA2 /* MJRefreshBackNormalFooter.m in Sources */,
+				B9EA4E4725C7E7AB000FFDA2 /* MJRefreshGifHeader.m in Sources */,
 				49AF55051F43EA18007362EA /* EZLocalDeviceListViewController.m in Sources */,
 				0D6570711C2AABC900D76123 /* EZDeviceUpgradeViewController.m in Sources */,
+				B9EA4E4225C7E7AB000FFDA2 /* MJRefreshAutoStateFooter.m in Sources */,
 				0D0C43DC1BE7407200039D44 /* UINavigationController+EZOpenSDK.m in Sources */,
 				0DCE0C361BE2279F000EA68A /* SDWebImageManager.m in Sources */,
+				B9EA4E4325C7E7AB000FFDA2 /* MJRefreshAutoGifFooter.m in Sources */,
 				0DCE0C041BE22761000EA68A /* UIButton+DDKit.m in Sources */,
-				0D8CF3DE1BDF516700A50266 /* MJRefreshAutoStateFooter.m in Sources */,
 				C4A41D8223D6E7B200D59722 /* EZVideoTalkViewcontroller.mm in Sources */,
 				0DCFC11B1BF18DD800EE1FA3 /* HIKLoadPercentView.m in Sources */,
 				0D2E4BAE1C7DB2E200CA948A /* AFHTTPRequestOperationManager.m in Sources */,
@@ -1706,29 +1723,30 @@
 				0D8CF4DA1BDF898800A50266 /* UITableView+FDIndexPathHeightCache.m in Sources */,
 				0DCE0C081BE22761000EA68A /* UILabel+DDKit.m in Sources */,
 				0D5015121BF8B77500F13269 /* UIImage+MWPhotoBrowser.m in Sources */,
-				0D8CF3E31BDF516700A50266 /* MJRefreshNormalHeader.m in Sources */,
 				0D90A06B1CABC6A100E78C64 /* EZPlayDemoViewController.m in Sources */,
 				0DCE0C3C1BE2279F000EA68A /* UIImageView+HighlightedWebCache.m in Sources */,
+				B9EA4E3925C7E7AB000FFDA2 /* UIScrollView+MJRefresh.m in Sources */,
 				0D77A3361BE0F38D00B4AD0A /* EZDeviceResultViewController.m in Sources */,
 				0D5015191BF8B7FF00F13269 /* DALabeledCircularProgressView.m in Sources */,
 				0D50150C1BF8B77500F13269 /* MWGridViewController.m in Sources */,
 				0DCE0C0B1BE22761000EA68A /* UIViewController+DDKit.m in Sources */,
 				0D77A3331BE0F30000B4AD0A /* EZLivePlayViewController.m in Sources */,
-				0D8CF3E41BDF516700A50266 /* MJRefreshStateHeader.m in Sources */,
 				0D2E4BB11C7DB2E200CA948A /* AFSecurityPolicy.m in Sources */,
 				0D9ACAEA1C7EE4D100B4DE97 /* UIImageView+AFNetworking.m in Sources */,
 				0DCE0BD01BE1C9A9000EA68A /* MASViewConstraint.m in Sources */,
 				0D5015111BF8B77500F13269 /* MWZoomingScrollView.m in Sources */,
+				B9EA4E3E25C7E7AB000FFDA2 /* UIView+MJExtension.m in Sources */,
 				0D50150A1BF8B77500F13269 /* MWCaptionView.m in Sources */,
 				0D5015101BF8B77500F13269 /* MWTapDetectingView.m in Sources */,
-				0D8CF3E11BDF516700A50266 /* MJRefreshBackStateFooter.m in Sources */,
 				0D50150D1BF8B77500F13269 /* MWPhoto.m in Sources */,
 				0DCE0BAB1BE1C1EE000EA68A /* EZDeviceRestartTipsViewController.m in Sources */,
 				0DCE0C331BE2279F000EA68A /* SDWebImageDecoder.m in Sources */,
 				0D7877B41C048C6300286888 /* DemoAPITableViewController.m in Sources */,
 				0DCE0BCD1BE1C9A9000EA68A /* MASConstraintMaker.m in Sources */,
 				0D8CF4DB1BDF898800A50266 /* UITableView+FDKeyedHeightCache.m in Sources */,
+				B9EA4E4925C7E7AB000FFDA2 /* MJRefreshHeader.m in Sources */,
 				0D4815561D911AE50003993C /* EZCameraTableViewController.m in Sources */,
+				B9EA4E4525C7E7AB000FFDA2 /* MJRefreshNormalHeader.m in Sources */,
 				0DCFC11C1BF18DD800EE1FA3 /* HIKLoadView.m in Sources */,
 				0DCE0BD41BE1C9A9000EA68A /* ViewController+MASAdditions.m in Sources */,
 				0DCE0C031BE22761000EA68A /* NSString+DDKit.m in Sources */,
@@ -1738,13 +1756,17 @@
 				0D0C43D81BE72F5400039D44 /* UIViewController+EZBackPop.m in Sources */,
 				0DCE0C3B1BE2279F000EA68A /* UIImage+WebP.m in Sources */,
 				0D2E4BAF1C7DB2E200CA948A /* AFHTTPSessionManager.m in Sources */,
-				0D8CF3DC1BDF516700A50266 /* MJRefreshAutoGifFooter.m in Sources */,
 				0DCE0BDB1BE1F17B000EA68A /* EZWifiConfigViewController.m in Sources */,
 				C4846229241789750003F8C4 /* EZOfflineCameraCell.m in Sources */,
 				0DCE0C061BE22761000EA68A /* UIImage+DDKit.m in Sources */,
 				C484622324176DFD0003F8C4 /* EZOnlineCameraCell.m in Sources */,
+				B9EA4E4825C7E7AB000FFDA2 /* MJRefreshFooter.m in Sources */,
+				B9EA4E3F25C7E7AB000FFDA2 /* MJRefreshBackGifFooter.m in Sources */,
 				0D5015181BF8B7FF00F13269 /* DACircularProgressView.m in Sources */,
+				B9EA4E4025C7E7AB000FFDA2 /* MJRefreshBackStateFooter.m in Sources */,
 				0DCE0C0A1BE22761000EA68A /* UIView+DDKit.m in Sources */,
+				B9EA4E4C25C7E7AB000FFDA2 /* MJRefreshComponent.m in Sources */,
+				B9EA4E3A25C7E7AB000FFDA2 /* MJRefreshConst.m in Sources */,
 				0D8CF3741BDF1ABA00A50266 /* AppDelegate.m in Sources */,
 				0D8CF3711BDF1ABA00A50266 /* main.m in Sources */,
 				0DF582BB1BE84AA600242E99 /* DDCollectionViewFlowLayout.m in Sources */,
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/AppDelegate.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/AppDelegate.m
index 55ac7dd..c37c00a 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/AppDelegate.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/AppDelegate.m
@@ -30,9 +30,9 @@
     
 //    [EZOPENSDK initLibWithAppKey:@"0311c3f70a854aacb5a099f2bfbef986"];
     [EZOPENSDK initLibWithAppKey:@"1aa98a90489b4838b966b57018b4b04b"];
-    
+//    NSLog(@"LanguageIsChinese :%s", LanguageIsChinese ? "YES":"NO");
+//    NSLog(@"NSStringFromClass :%@", NSStringFromClass(EZOPENSDK));
     [EZHCNetDeviceSDK initSDK];
-    
     [EZOPENSDK enableP2P:YES];
     
     NSLog(@"EZOpenSDK Version = %@", [EZOPENSDK getVersion]);
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/AddDevice.storyboard b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/AddDevice.storyboard
index 73c5bf2..bf1eb84 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/AddDevice.storyboard
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/AddDevice.storyboard
@@ -45,7 +45,7 @@
                                             <constraint firstAttribute="width" constant="220" id="z1o-th-eJT"/>
                                         </constraints>
                                     </imageView>
-                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SAq-8X-VZA">
+                                    <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="SAq-8X-VZA">
                                         <rect key="frame" x="22" y="566" width="64" height="30"/>
                                         <constraints>
                                             <constraint firstAttribute="width" constant="64" id="0id-Ux-Cgq"/>
@@ -912,7 +912,7 @@
     <inferredMetricsTieBreakers>
         <segue reference="9TP-S2-hhI"/>
         <segue reference="MFl-yy-ZsP"/>
-        <segue reference="ikM-Zn-H8f"/>
+        <segue reference="VYk-37-nb6"/>
     </inferredMetricsTieBreakers>
     <resources>
         <image name="addDevice_success" width="320" height="185"/>
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/EZMain.storyboard b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/EZMain.storyboard
index 4c47933..c27e14f 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/EZMain.storyboard
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/EZMain.storyboard
@@ -1196,14 +1196,14 @@
                                             <action selector="localButtonClicked:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="ghH-Hn-KkG"/>
                                         </connections>
                                     </button>
-                                    <button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WYB-ca-Ox6">
+                                    <button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="WYB-ca-Ox6">
                                         <rect key="frame" x="323" y="20" width="32" height="32"/>
                                         <state key="normal" image="cloud"/>
                                         <connections>
                                             <action selector="clickCloudBtn:" destination="uBF-Yq-Qo0" eventType="touchUpInside" id="Ft8-PW-PT5"/>
                                         </connections>
                                     </button>
-                                    <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="浜戝瓨鍌�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wXb-RI-dLd">
+                                    <label hidden="YES" opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="浜戝瓨鍌�" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="wXb-RI-dLd">
                                         <rect key="frame" x="319" y="52" width="40" height="16"/>
                                         <fontDescription key="fontDescription" type="system" pointSize="13"/>
                                         <color key="textColor" white="0.66666666669999997" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@@ -2486,6 +2486,7 @@
         <segue reference="q2I-Q5-CUY"/>
         <segue reference="vdt-wN-aOY"/>
     </inferredMetricsTieBreakers>
+    <color key="tintColor" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
     <resources>
         <image name="StreamStudio" width="24" height="24"/>
         <image name="StreamStudio-2" width="24" height="24"/>
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/Localizable.strings b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/Localizable.strings
index 2ab611f..0e4e516 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/Localizable.strings
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Base.lproj/Localizable.strings
@@ -104,7 +104,7 @@
 "wifi_add_device_title"="Step 3, add device.";
 "wifi_connecting_net"="Connecting to Wi-Fi. Please wait.";
 "wifi_register_server"="Register Server";
-"wifi_bind_account"="缁戝畾浣犵殑璐︽埛";
+"wifi_bind_account"="Bind your account";
 "wifi_already_configed"="The Wi-Fi is configured.";
 "wifi_registering_server"="Registering the server.";
 "wifi_bind_account_result"="Link to your account to finish.";
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/GlobalKit.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/GlobalKit.h
index c42c20c..f498ff8 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/GlobalKit.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Global/GlobalKit.h
@@ -8,22 +8,13 @@
 
 #import <Foundation/Foundation.h>
 
-#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
-#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
+//#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
+//#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
+////涓枃璧板浗鍐咃紝 涓嶆槸涓枃璧版捣澶�
+#define EZOPENSDK LanguageIsChinese ? [EZOpenSDK class] : [EZGlobalSDK class]
 
-
-//涓枃璧板浗鍐咃紝 涓嶆槸涓枃璧版捣澶�
-
-
-#ifdef LanguageIsChinese
-
-#define EZOPENSDK [EZOpenSDK class]
-
-#else
-
-#define EZOPENSDK [EZGlobalSDK class]
-
-#endif
+//2021-02-01 涓嶈�冭檻娴峰鍏�
+#define LanguageIsChinese true
 
 @interface GlobalKit : NSObject
 
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/DeviceListCell.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/DeviceListCell.m
index dd8051f..25db7e2 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/DeviceListCell.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/TableViewCells/DeviceListCell.m
@@ -41,6 +41,7 @@
 //            [self.cameraImageView sd_setImageWithURL:[NSURL URLWithString:url]];
 //        }
 //    }];
+//    [EZOPENSDK cap]
     
     self.messageButton.hidden = NO;
     self.settingButton.hidden = NO;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZDeviceTableViewController.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZDeviceTableViewController.m
index aba9ff6..431da2e 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZDeviceTableViewController.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZDeviceTableViewController.m
@@ -105,12 +105,12 @@
                 //            self.navigationItem.rightBarButtonItem = self.addButton;
             }];
         }else{
-            [EZOPENSDK getAreaList:^(NSArray *areaList, NSError *error) {
+            [[EZGlobalSDK class] getAreaList:^(NSArray *areaList, NSError *error) {
                 EZAreaInfo *areaInfo = areaList.firstObject;
-                [EZOPENSDK openLoginPage:[NSString stringWithFormat:@"%ld",(long)areaInfo.id]
+                [[EZGlobalSDK class] openLoginPage:[NSString stringWithFormat:@"%ld",(long)areaInfo.id]
                               completion:^(EZAccessToken *accessToken) {
                     [[GlobalKit shareKit] setAccessToken:accessToken.accessToken];
-                    [EZOPENSDK setAccessToken:accessToken.accessToken];
+                    [[EZGlobalSDK class] setAccessToken:accessToken.accessToken];
                     [self addRefreshKit];
                     //                                            self.navigationItem.rightBarButtonItem = self.addButton;
                 }];
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZEditViewController.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZEditViewController.m
index 4ff4eb8..2954b7e 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZEditViewController.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZEditViewController.m
@@ -23,8 +23,7 @@
     // Do any additional setup after loading the view.
     
     self.title = NSLocalizedString(@"device_modify_name_title", @"淇敼璁惧鍚嶇О");
-    
-//    self.deviceNameTextField.text = self.cameraInfo.deviceName;
+    self.deviceNameTextField.text = self.deviceInfo.deviceName;
 //    
 //    self.deviceNameTextField.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 30)];
 //    self.deviceNameTextField.leftViewMode = UITextFieldViewModeAlways;
@@ -91,7 +90,7 @@
                       NSLog(@"error = %@",error);
                       if(!error)
                       {
-//                          self.cameraInfo.deviceName = self.deviceNameTextField.text;
+                          self.deviceInfo.deviceName = self.deviceNameTextField.text;
                           [self.navigationController popViewControllerAnimated:YES];
                       }
                   }];
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZPlaybackViewController.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZPlaybackViewController.m
index f1957be..0dc8782 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZPlaybackViewController.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZPlaybackViewController.m
@@ -559,7 +559,7 @@
         
         NSLog(@"GetStreamFetchType:%d", [self.player getStreamFetchType]);
         
-        [self showStreamFetchType];
+//        [self showStreamFetchType];
     }
     else if (messageCode == PLAYER_PLAYBACK_STOP)
     {
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZSettingViewController.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZSettingViewController.m
index eafa0f0..1b4e1c4 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZSettingViewController.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/UIViewControllers/EZSettingViewController.m
@@ -186,7 +186,7 @@
             make.centerY.mas_equalTo(cell.contentView.mas_centerY);
             make.height.mas_equalTo(@20);
         }];
-//        self.nameLabel.text = self.cameraInfo.deviceName;
+        self.nameLabel.text = self.deviceInfo.deviceName;
     }
     else if (indexPath.section == 1)
     {
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.m
deleted file mode 100644
index 97ed06f..0000000
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.m
+++ /dev/null
@@ -1,139 +0,0 @@
-//
-//  MJRefreshStateHeader.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshStateHeader.h"
-
-@interface MJRefreshStateHeader()
-{
-    /** 鏄剧ず涓婁竴娆″埛鏂版椂闂寸殑label */
-    __weak UILabel *_lastUpdatedTimeLabel;
-    /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-    __weak UILabel *_stateLabel;
-}
-/** 鎵�鏈夌姸鎬佸搴旂殑鏂囧瓧 */
-@property (strong, nonatomic) NSMutableDictionary *stateTitles;
-@end
-
-@implementation MJRefreshStateHeader
-#pragma mark - 鎳掑姞杞�
-- (NSMutableDictionary *)stateTitles
-{
-    if (!_stateTitles) {
-        self.stateTitles = [NSMutableDictionary dictionary];
-    }
-    return _stateTitles;
-}
-
-- (UILabel *)stateLabel
-{
-    if (!_stateLabel) {
-        [self addSubview:_stateLabel = [UILabel label]];
-    }
-    return _stateLabel;
-}
-
-- (UILabel *)lastUpdatedTimeLabel
-{
-    if (!_lastUpdatedTimeLabel) {
-        [self addSubview:_lastUpdatedTimeLabel = [UILabel label]];
-    }
-    return _lastUpdatedTimeLabel;
-}
-
-#pragma mark - 鍏叡鏂规硶
-- (void)setTitle:(NSString *)title forState:(MJRefreshState)state
-{
-    if (title == nil) return;
-    self.stateTitles[@(state)] = title;
-    self.stateLabel.text = self.stateTitles[@(self.state)];
-}
-
-#pragma mark key鐨勫鐞�
-- (void)setLastUpdatedTimeKey:(NSString *)lastUpdatedTimeKey
-{
-    [super setLastUpdatedTimeKey:lastUpdatedTimeKey];
-    
-    NSDate *lastUpdatedTime = [[NSUserDefaults standardUserDefaults] objectForKey:lastUpdatedTimeKey];
-    
-    // 濡傛灉鏈塨lock
-    if (self.lastUpdatedTimeText) {
-        self.lastUpdatedTimeLabel.text = self.lastUpdatedTimeText(lastUpdatedTime);
-        return;
-    }
-    
-    if (lastUpdatedTime) {
-        // 1.鑾峰緱骞存湀鏃�
-        NSCalendar *calendar = [NSCalendar currentCalendar];
-        NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute;
-        NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:lastUpdatedTime];
-        NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]];
-        
-        // 2.鏍煎紡鍖栨棩鏈�
-        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
-        if ([cmp1 day] == [cmp2 day]) { // 浠婂ぉ
-            formatter.dateFormat = [NSString stringWithFormat:@"%@ HH:mm",NSLocalizedString(@"message_today", @"浠婂ぉ")];
-        } else if ([cmp1 year] == [cmp2 year]) { // 浠婂勾
-            formatter.dateFormat = @"MM-dd HH:mm";
-        } else {
-            formatter.dateFormat = @"yyyy-MM-dd HH:mm";
-        }
-        NSString *time = [formatter stringFromDate:lastUpdatedTime];
-        
-        // 3.鏄剧ず鏃ユ湡
-        self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@",NSLocalizedString(@"ui_last_update", @"鏈�鍚庢洿鏂帮細"), time];
-    } else {
-        self.lastUpdatedTimeLabel.text = NSLocalizedString(@"ui_last_update_empty", @"鏈�鍚庢洿鏂帮細鏃犺褰�");
-    }
-}
-
-#pragma mark - 瑕嗙洊鐖剁被鐨勬柟娉�
-- (void)prepare
-{
-    [super prepare];
-    
-    // 鍒濆鍖栨枃瀛�
-    [self setTitle:MJRefreshHeaderIdleText forState:MJRefreshStateIdle];
-    [self setTitle:MJRefreshHeaderPullingText forState:MJRefreshStatePulling];
-    [self setTitle:MJRefreshHeaderRefreshingText forState:MJRefreshStateRefreshing];
-}
-
-- (void)placeSubviews
-{
-    [super placeSubviews];
-    
-    if (self.stateLabel.hidden) return;
-    
-    if (self.lastUpdatedTimeLabel.hidden) {
-        // 鐘舵��
-        self.stateLabel.frame = self.bounds;
-    } else {
-        // 鐘舵��
-        self.stateLabel.mj_x = 0;
-        self.stateLabel.mj_y = 0;
-        self.stateLabel.mj_w = self.mj_w;
-        self.stateLabel.mj_h = self.mj_h * 0.5;
-        
-        // 鏇存柊鏃堕棿
-        self.lastUpdatedTimeLabel.mj_x = 0;
-        self.lastUpdatedTimeLabel.mj_y = self.stateLabel.mj_h;
-        self.lastUpdatedTimeLabel.mj_w = self.mj_w;
-        self.lastUpdatedTimeLabel.mj_h = self.mj_h - self.lastUpdatedTimeLabel.mj_y;
-    }
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    // 璁剧疆鐘舵�佹枃瀛�
-    self.stateLabel.text = self.stateTitles[@(state)];
-    
-    // 閲嶆柊璁剧疆key锛堥噸鏂版樉绀烘椂闂达級
-    self.lastUpdatedTimeKey = self.lastUpdatedTimeKey;
-}
-@end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/LICENSE b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/LICENSE
new file mode 100644
index 0000000..11bf234
--- /dev/null
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
similarity index 77%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
index 5aac4f6..71ea478 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
@@ -13,8 +13,11 @@
 @property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
 
 /** 褰撳簳閮ㄦ帶浠跺嚭鐜板灏戞椂灏辫嚜鍔ㄥ埛鏂�(榛樿涓�1.0锛屼篃灏辨槸搴曢儴鎺т欢瀹屽叏鍑虹幇鏃讹紝鎵嶄細鑷姩鍒锋柊) */
-@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("璇蜂娇鐢╝utomaticallyChangeAlpha灞炴��");
+@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("璇蜂娇鐢╰riggerAutomaticallyRefreshPercent灞炴��");
 
 /** 褰撳簳閮ㄦ帶浠跺嚭鐜板灏戞椂灏辫嚜鍔ㄥ埛鏂�(榛樿涓�1.0锛屼篃灏辨槸搴曢儴鎺т欢瀹屽叏鍑虹幇鏃讹紝鎵嶄細鑷姩鍒锋柊) */
 @property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
+
+/** 鏄惁姣忎竴娆℃嫋鎷藉彧鍙戜竴娆¤姹� */
+@property (assign, nonatomic, getter=isOnlyRefreshPerDrag) BOOL onlyRefreshPerDrag;
 @end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
similarity index 79%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
index fd1687f..207df04 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
@@ -9,6 +9,8 @@
 #import "MJRefreshAutoFooter.h"
 
 @interface MJRefreshAutoFooter()
+/** 涓�涓柊鐨勬嫋鎷� */
+@property (assign, nonatomic, getter=isOneNewPan) BOOL oneNewPan;
 @end
 
 @implementation MJRefreshAutoFooter
@@ -53,6 +55,9 @@
     
     // 璁剧疆涓洪粯璁ょ姸鎬�
     self.automaticallyRefresh = YES;
+    
+    // 榛樿鏄綋offset杈惧埌鏉′欢灏卞彂閫佽姹傦紙鍙繛缁級
+    self.onlyRefreshPerDrag = NO;
 }
 
 - (void)scrollViewContentSizeDidChange:(NSDictionary *)change
@@ -89,7 +94,8 @@
     
     if (self.state != MJRefreshStateIdle) return;
     
-    if (_scrollView.panGestureRecognizer.state == UIGestureRecognizerStateEnded) {// 鎵嬫澗寮�
+    UIGestureRecognizerState panState = _scrollView.panGestureRecognizer.state;
+    if (panState == UIGestureRecognizerStateEnded) {// 鎵嬫澗寮�
         if (_scrollView.mj_insetT + _scrollView.mj_contentH <= _scrollView.mj_h) {  // 涓嶅涓�涓睆骞�
             if (_scrollView.mj_offsetY >= - _scrollView.mj_insetT) { // 鍚戜笂鎷�
                 [self beginRefreshing];
@@ -99,7 +105,18 @@
                 [self beginRefreshing];
             }
         }
+    } else if (panState == UIGestureRecognizerStateBegan) {
+        self.oneNewPan = YES;
     }
+}
+
+- (void)beginRefreshing
+{
+    if (!self.isOneNewPan && self.isOnlyRefreshPerDrag) return;
+    
+    [super beginRefreshing];
+    
+    self.oneNewPan = NO;
 }
 
 - (void)setState:(MJRefreshState)state
@@ -107,9 +124,13 @@
     MJRefreshCheckState
     
     if (state == MJRefreshStateRefreshing) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [self executeRefreshingCallback];
-        });
+        [self executeRefreshingCallback];
+    } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
+        if (MJRefreshStateRefreshing == oldState) {
+            if (self.endRefreshingCompletionBlock) {
+                self.endRefreshingCompletionBlock();
+            }
+        }
     }
 }
 
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h
similarity index 100%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
similarity index 85%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
index c3d0db6..71b9579 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
@@ -31,7 +31,7 @@
     // 濡傛灉姝e湪鍒锋柊锛岀洿鎺ヨ繑鍥�
     if (self.state == MJRefreshStateRefreshing) return;
     
-    _scrollViewOriginalInset = self.scrollView.contentInset;
+    _scrollViewOriginalInset = self.scrollView.mj_inset;
     
     // 褰撳墠鐨刢ontentOffset
     CGFloat currentOffsetY = self.scrollView.mj_offsetY;
@@ -95,17 +95,21 @@
                 if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
             } completion:^(BOOL finished) {
                 self.pullingPercent = 0.0;
+                
+                if (self.endRefreshingCompletionBlock) {
+                    self.endRefreshingCompletionBlock();
+                }
             }];
         }
         
         CGFloat deltaH = [self heightForContentBreakView];
         // 鍒氬埛鏂板畬姣�
-        if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.totalDataCount != self.lastRefreshCount) {
+        if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.mj_totalDataCount != self.lastRefreshCount) {
             self.scrollView.mj_offsetY = self.scrollView.mj_offsetY;
         }
     } else if (state == MJRefreshStateRefreshing) {
         // 璁板綍鍒锋柊鍓嶇殑鏁伴噺
-        self.lastRefreshCount = self.scrollView.totalDataCount;
+        self.lastRefreshCount = self.scrollView.mj_totalDataCount;
         
         [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
             CGFloat bottom = self.mj_h + self.scrollViewOriginalInset.bottom;
@@ -121,30 +125,6 @@
         }];
     }
 }
-
-#pragma mark - 鍏叡鏂规硶
-- (void)endRefreshing
-{
-    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [super endRefreshing];
-        });
-    } else {
-        [super endRefreshing];
-    }
-}
-
-- (void)noticeNoMoreData
-{
-    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [super noticeNoMoreData];
-        });
-    } else {
-        [super noticeNoMoreData];
-    }
-}
-
 #pragma mark - 绉佹湁鏂规硶
 #pragma mark 鑾峰緱scrollView鐨勫唴瀹� 瓒呭嚭 view 鐨勯珮搴�
 - (CGFloat)heightForContentBreakView
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
similarity index 76%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
index 943d405..46e1068 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
@@ -12,9 +12,10 @@
 #import "UIView+MJExtension.h"
 #import "UIScrollView+MJExtension.h"
 #import "UIScrollView+MJRefresh.h"
+#import "NSBundle+MJRefresh.h"
 
 /** 鍒锋柊鎺т欢鐨勭姸鎬� */
-typedef enum {
+typedef NS_ENUM(NSInteger, MJRefreshState) {
     /** 鏅�氶棽缃姸鎬� */
     MJRefreshStateIdle = 1,
     /** 鏉惧紑灏卞彲浠ヨ繘琛屽埛鏂扮殑鐘舵�� */
@@ -25,10 +26,14 @@
     MJRefreshStateWillRefresh,
     /** 鎵�鏈夋暟鎹姞杞藉畬姣曪紝娌℃湁鏇村鐨勬暟鎹簡 */
     MJRefreshStateNoMoreData
-} MJRefreshState;
+};
 
 /** 杩涘叆鍒锋柊鐘舵�佺殑鍥炶皟 */
-typedef void (^MJRefreshComponentRefreshingBlock)();
+typedef void (^MJRefreshComponentRefreshingBlock)(void);
+/** 寮�濮嬪埛鏂板悗鐨勫洖璋�(杩涘叆鍒锋柊鐘舵�佸悗鐨勫洖璋�) */
+typedef void (^MJRefreshComponentbeginRefreshingCompletionBlock)(void);
+/** 缁撴潫鍒锋柊鍚庣殑鍥炶皟 */
+typedef void (^MJRefreshComponentEndRefreshingCompletionBlock)(void);
 
 /** 鍒锋柊鎺т欢鐨勫熀绫� */
 @interface MJRefreshComponent : UIView
@@ -43,6 +48,7 @@
 @property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock;
 /** 璁剧疆鍥炶皟瀵硅薄鍜屽洖璋冩柟娉� */
 - (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action;
+
 /** 鍥炶皟瀵硅薄 */
 @property (weak, nonatomic) id refreshingTarget;
 /** 鍥炶皟鏂规硶 */
@@ -53,10 +59,17 @@
 #pragma mark - 鍒锋柊鐘舵�佹帶鍒�
 /** 杩涘叆鍒锋柊鐘舵�� */
 - (void)beginRefreshing;
+- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock;
+/** 寮�濮嬪埛鏂板悗鐨勫洖璋�(杩涘叆鍒锋柊鐘舵�佸悗鐨勫洖璋�) */
+@property (copy, nonatomic) MJRefreshComponentbeginRefreshingCompletionBlock beginRefreshingCompletionBlock;
+/** 缁撴潫鍒锋柊鐨勫洖璋� */
+@property (copy, nonatomic) MJRefreshComponentEndRefreshingCompletionBlock endRefreshingCompletionBlock;
 /** 缁撴潫鍒锋柊鐘舵�� */
 - (void)endRefreshing;
+- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock;
 /** 鏄惁姝e湪鍒锋柊 */
-- (BOOL)isRefreshing;
+@property (assign, nonatomic, readonly, getter=isRefreshing) BOOL refreshing;
+//- (BOOL)isRefreshing;
 /** 鍒锋柊鐘舵�� 涓�鑸氦缁欏瓙绫诲唴閮ㄥ疄鐜� */
 @property (assign, nonatomic) MJRefreshState state;
 
@@ -89,5 +102,6 @@
 @end
 
 @interface UILabel(MJRefresh)
-+ (instancetype)label;
++ (instancetype)mj_label;
+- (CGFloat)mj_textWith;
 @end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
similarity index 74%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
index 1b6ea27..6661ba6 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
@@ -9,8 +9,6 @@
 
 #import "MJRefreshComponent.h"
 #import "MJRefreshConst.h"
-#import "UIView+MJExtension.h"
-#import "UIScrollView+MJRefresh.h"
 
 @interface MJRefreshComponent()
 @property (strong, nonatomic) UIPanGestureRecognizer *pan;
@@ -39,9 +37,9 @@
 
 - (void)layoutSubviews
 {
-    [super layoutSubviews];
-    
     [self placeSubviews];
+    
+    [super layoutSubviews];
 }
 
 - (void)placeSubviews{}
@@ -60,14 +58,14 @@
         // 璁剧疆瀹藉害
         self.mj_w = newSuperview.mj_w;
         // 璁剧疆浣嶇疆
-        self.mj_x = 0;
+        self.mj_x = -_scrollView.mj_insetL;
         
         // 璁板綍UIScrollView
         _scrollView = (UIScrollView *)newSuperview;
         // 璁剧疆姘歌繙鏀寔鍨傜洿寮圭哀鏁堟灉
         _scrollView.alwaysBounceVertical = YES;
         // 璁板綍UIScrollView鏈�寮�濮嬬殑contentInset
-        _scrollViewOriginalInset = _scrollView.contentInset;
+        _scrollViewOriginalInset = _scrollView.mj_inset;
         
         // 娣诲姞鐩戝惉
         [self addObservers];
@@ -97,7 +95,7 @@
 - (void)removeObservers
 {
     [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentOffset];
-    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];;
+    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];
     [self.pan removeObserver:self forKeyPath:MJRefreshKeyPathPanState];
     self.pan = nil;
 }
@@ -133,6 +131,16 @@
     self.refreshingAction = action;
 }
 
+- (void)setState:(MJRefreshState)state
+{
+    _state = state;
+    
+    // 鍔犲叆涓婚槦鍒楃殑鐩殑鏄瓑setState:鏂规硶璋冪敤瀹屾瘯銆佽缃畬鏂囧瓧鍚庡啀鍘诲竷灞�瀛愭帶浠�
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [self setNeedsLayout];
+    });
+}
+
 #pragma mark 杩涘叆鍒锋柊鐘舵��
 - (void)beginRefreshing
 {
@@ -144,16 +152,35 @@
     if (self.window) {
         self.state = MJRefreshStateRefreshing;
     } else {
-        self.state = MJRefreshStateWillRefresh;
-        // 鍒锋柊(棰勯槻浠庡彟涓�涓帶鍒跺櫒鍥炲埌杩欎釜鎺у埗鍣ㄧ殑鎯呭喌锛屽洖鏉ヨ閲嶆柊鍒锋柊涓�涓�)
-        [self setNeedsDisplay];
+        // 棰勯槻姝e湪鍒锋柊涓椂锛岃皟鐢ㄦ湰鏂规硶浣垮緱header inset鍥炵疆澶辫触
+        if (self.state != MJRefreshStateRefreshing) {
+            self.state = MJRefreshStateWillRefresh;
+            // 鍒锋柊(棰勯槻浠庡彟涓�涓帶鍒跺櫒鍥炲埌杩欎釜鎺у埗鍣ㄧ殑鎯呭喌锛屽洖鏉ヨ閲嶆柊鍒锋柊涓�涓�)
+            [self setNeedsDisplay];
+        }
     }
+}
+
+- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock
+{
+    self.beginRefreshingCompletionBlock = completionBlock;
+    
+    [self beginRefreshing];
 }
 
 #pragma mark 缁撴潫鍒锋柊鐘舵��
 - (void)endRefreshing
 {
-    self.state = MJRefreshStateIdle;
+    dispatch_async(dispatch_get_main_queue(), ^{
+        self.state = MJRefreshStateIdle;
+    });
+}
+
+- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock
+{
+    self.endRefreshingCompletionBlock = completionBlock;
+    
+    [self endRefreshing];
 }
 
 #pragma mark 鏄惁姝e湪鍒锋柊
@@ -208,12 +235,15 @@
         if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) {
             MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self);
         }
+        if (self.beginRefreshingCompletionBlock) {
+            self.beginRefreshingCompletionBlock();
+        }
     });
 }
 @end
 
 @implementation UILabel(MJRefresh)
-+ (instancetype)label
++ (instancetype)mj_label
 {
     UILabel *label = [[self alloc] init];
     label.font = MJRefreshLabelFont;
@@ -223,4 +253,24 @@
     label.backgroundColor = [UIColor clearColor];
     return label;
 }
-@end
\ No newline at end of file
+
+- (CGFloat)mj_textWith {
+    CGFloat stringWidth = 0;
+    CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT);
+    if (self.text.length > 0) {
+#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
+        stringWidth =[self.text
+                      boundingRectWithSize:size
+                      options:NSStringDrawingUsesLineFragmentOrigin
+                      attributes:@{NSFontAttributeName:self.font}
+                      context:nil].size.width;
+#else
+        
+        stringWidth = [self.text sizeWithFont:self.font
+                             constrainedToSize:size
+                                 lineBreakMode:NSLineBreakByCharWrapping].width;
+#endif
+    }
+    return stringWidth;
+}
+@end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
similarity index 83%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
index e25628f..272f270 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
@@ -25,6 +25,6 @@
 /** 蹇界暐澶氬皯scrollView鐨刢ontentInset鐨刡ottom */
 @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
 
-/** 鑷姩鏍规嵁鏈夋棤鏁版嵁鏉ユ樉绀哄拰闅愯棌锛堟湁鏁版嵁灏辨樉绀猴紝娌℃湁鏁版嵁闅愯棌锛� */
-@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden;
+/** 鑷姩鏍规嵁鏈夋棤鏁版嵁鏉ユ樉绀哄拰闅愯棌锛堟湁鏁版嵁灏辨樉绀猴紝娌℃湁鏁版嵁闅愯棌銆傞粯璁ゆ槸NO锛� */
+@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden MJRefreshDeprecated("涓嶅缓璁娇鐢ㄦ灞炴�э紝寮�鍙戣�呰鑷鎺у埗footer鐨勬樉绀哄拰闅愯棌銆傚熀浜庡畨鍏ㄨ�冭檻锛屽湪鏈潵鐨勬煇浜涚増鏈灞炴�у彲鑳戒綔搴�");
 @end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
similarity index 77%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
index 9403e54..efecb5f 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
@@ -8,6 +8,7 @@
 //
 
 #import "MJRefreshFooter.h"
+#include "UIScrollView+MJRefresh.h"
 
 @interface MJRefreshFooter()
 
@@ -36,8 +37,8 @@
     // 璁剧疆鑷繁鐨勯珮搴�
     self.mj_h = MJRefreshFooterHeight;
     
-    // 榛樿鏄嚜鍔ㄩ殣钘�
-    self.automaticallyHidden = YES;
+    // 榛樿涓嶄細鑷姩闅愯棌
+    self.automaticallyHidden = NO;
 }
 
 - (void)willMoveToSuperview:(UIView *)newSuperview
@@ -47,7 +48,7 @@
     if (newSuperview) {
         // 鐩戝惉scrollView鏁版嵁鐨勫彉鍖�
         if ([self.scrollView isKindOfClass:[UITableView class]] || [self.scrollView isKindOfClass:[UICollectionView class]]) {
-            [self.scrollView setReloadDataBlock:^(NSInteger totalDataCount) {
+            [self.scrollView setMj_reloadDataBlock:^(NSInteger totalDataCount) {
                 if (self.isAutomaticallyHidden) {
                     self.hidden = (totalDataCount == 0);
                 }
@@ -59,7 +60,9 @@
 #pragma mark - 鍏叡鏂规硶
 - (void)endRefreshingWithNoMoreData
 {
-    self.state = MJRefreshStateNoMoreData;
+    dispatch_async(dispatch_get_main_queue(), ^{
+        self.state = MJRefreshStateNoMoreData;
+    });
 }
 
 - (void)noticeNoMoreData
@@ -69,6 +72,13 @@
 
 - (void)resetNoMoreData
 {
-    self.state = MJRefreshStateIdle;
+    dispatch_async(dispatch_get_main_queue(), ^{
+        self.state = MJRefreshStateIdle;
+    });
+}
+
+- (void)setAutomaticallyHidden:(BOOL)automaticallyHidden
+{
+    _automaticallyHidden = automaticallyHidden;
 }
 @end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.h
similarity index 100%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
similarity index 73%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
index 7f7e2c2..7b7249c 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
@@ -10,7 +10,7 @@
 #import "MJRefreshHeader.h"
 
 @interface MJRefreshHeader()
-
+@property (assign, nonatomic) CGFloat insetTDelta;
 @end
 
 @implementation MJRefreshHeader
@@ -54,12 +54,20 @@
     
     // 鍦ㄥ埛鏂扮殑refreshing鐘舵��
     if (self.state == MJRefreshStateRefreshing) {
+        // 鏆傛椂淇濈暀
+        if (self.window == nil) return;
+        
         // sectionheader鍋滅暀瑙e喅
+        CGFloat insetT = - self.scrollView.mj_offsetY > _scrollViewOriginalInset.top ? - self.scrollView.mj_offsetY : _scrollViewOriginalInset.top;
+        insetT = insetT > self.mj_h + _scrollViewOriginalInset.top ? self.mj_h + _scrollViewOriginalInset.top : insetT;
+        self.scrollView.mj_insetT = insetT;
+        
+        self.insetTDelta = _scrollViewOriginalInset.top - insetT;
         return;
     }
     
     // 璺宠浆鍒颁笅涓�涓帶鍒跺櫒鏃讹紝contentInset鍙兘浼氬彉
-    _scrollViewOriginalInset = self.scrollView.contentInset;
+     _scrollViewOriginalInset = self.scrollView.mj_inset;
     
     // 褰撳墠鐨刢ontentOffset
     CGFloat offsetY = self.scrollView.mj_offsetY;
@@ -105,39 +113,35 @@
         
         // 鎭㈠inset鍜宱ffset
         [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
-            self.scrollView.mj_insetT -= self.mj_h;
+            self.scrollView.mj_insetT += self.insetTDelta;
             
             // 鑷姩璋冩暣閫忔槑搴�
             if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
         } completion:^(BOOL finished) {
             self.pullingPercent = 0.0;
+            
+            if (self.endRefreshingCompletionBlock) {
+                self.endRefreshingCompletionBlock();
+            }
         }];
     } else if (state == MJRefreshStateRefreshing) {
-        [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
-            // 澧炲姞婊氬姩鍖哄煙
-            CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
-            self.scrollView.mj_insetT = top;
-            
-            // 璁剧疆婊氬姩浣嶇疆
-            self.scrollView.mj_offsetY = - top;
-        } completion:^(BOOL finished) {
-            [self executeRefreshingCallback];
-        }];
+         dispatch_async(dispatch_get_main_queue(), ^{
+            [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
+                CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
+                // 澧炲姞婊氬姩鍖哄煙top
+                self.scrollView.mj_insetT = top;
+                // 璁剧疆婊氬姩浣嶇疆
+                CGPoint offset = self.scrollView.contentOffset;
+                offset.y = -top;
+                [self.scrollView setContentOffset:offset animated:NO];
+            } completion:^(BOOL finished) {
+                [self executeRefreshingCallback];
+            }];
+         });
     }
 }
 
 #pragma mark - 鍏叡鏂规硶
-- (void)endRefreshing
-{
-    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [super endRefreshing];
-        });
-    } else {
-        [super endRefreshing];
-    }
-}
-
 - (NSDate *)lastUpdatedTime
 {
     return [[NSUserDefaults standardUserDefaults] objectForKey:self.lastUpdatedTimeKey];
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
similarity index 88%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
index 4c96286..6a127e6 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
@@ -9,6 +9,8 @@
 #import "MJRefreshAutoStateFooter.h"
 
 @interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter
+@property (weak, nonatomic, readonly) UIImageView *gifView;
+
 /** 璁剧疆state鐘舵�佷笅鐨勫姩鐢诲浘鐗噄mages 鍔ㄧ敾鎸佺画鏃堕棿duration*/
 - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
 - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
similarity index 89%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
index 0ab312e..2507138 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
@@ -9,7 +9,9 @@
 #import "MJRefreshAutoGifFooter.h"
 
 @interface MJRefreshAutoGifFooter()
-@property (weak, nonatomic) UIImageView *gifView;
+{
+    __unsafe_unretained UIImageView *_gifView;
+}
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鍥剧墖 */
 @property (strong, nonatomic) NSMutableDictionary *stateImages;
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鏃堕棿 */
@@ -64,16 +66,26 @@
 }
 
 #pragma mark - 瀹炵幇鐖剁被鐨勬柟娉�
+- (void)prepare
+{
+    [super prepare];
+    
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = 20;
+}
+
 - (void)placeSubviews
 {
     [super placeSubviews];
+    
+    if (self.gifView.constraints.count) return;
     
     self.gifView.frame = self.bounds;
     if (self.isRefreshingTitleHidden) {
         self.gifView.contentMode = UIViewContentModeCenter;
     } else {
         self.gifView.contentMode = UIViewContentModeRight;
-        self.gifView.mj_w = self.mj_w * 0.5 - 90;
+        self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5;
     }
 }
 
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
similarity index 100%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
similarity index 81%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
index 76be140..dae9060 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
@@ -31,7 +31,7 @@
     self.loadingView = nil;
     [self setNeedsLayout];
 }
-#pragma makr - 閲嶅啓鐖剁被鐨勬柟娉�
+#pragma mark - 閲嶅啓鐖剁被鐨勬柟娉�
 - (void)prepare
 {
     [super prepare];
@@ -43,13 +43,15 @@
 {
     [super placeSubviews];
     
+    if (self.loadingView.constraints.count) return;
+    
     // 鍦堝湀
-    CGFloat arrowCenterX = self.mj_w * 0.5;
+    CGFloat loadingCenterX = self.mj_w * 0.5;
     if (!self.isRefreshingTitleHidden) {
-        arrowCenterX -= 100;
+        loadingCenterX -= self.stateLabel.mj_textWith * 0.5 + self.labelLeftInset;
     }
-    CGFloat arrowCenterY = self.mj_h * 0.5;
-    self.loadingView.center = CGPointMake(arrowCenterX, arrowCenterY);
+    CGFloat loadingCenterY = self.mj_h * 0.5;
+    self.loadingView.center = CGPointMake(loadingCenterX, loadingCenterY);
 }
 
 - (void)setState:(MJRefreshState)state
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
similarity index 85%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
index 956188b..9fe7915 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
@@ -9,6 +9,8 @@
 #import "MJRefreshAutoFooter.h"
 
 @interface MJRefreshAutoStateFooter : MJRefreshAutoFooter
+/** 鏂囧瓧璺濈鍦堝湀銆佺澶寸殑璺濈 */
+@property (assign, nonatomic) CGFloat labelLeftInset;
 /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
 @property (weak, nonatomic, readonly) UILabel *stateLabel;
 
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
similarity index 74%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
index ccbc602..d16547d 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
@@ -11,7 +11,7 @@
 @interface MJRefreshAutoStateFooter()
 {
     /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-    __weak UILabel *_stateLabel;
+    __unsafe_unretained UILabel *_stateLabel;
 }
 /** 鎵�鏈夌姸鎬佸搴旂殑鏂囧瓧 */
 @property (strong, nonatomic) NSMutableDictionary *stateTitles;
@@ -30,7 +30,7 @@
 - (UILabel *)stateLabel
 {
     if (!_stateLabel) {
-        [self addSubview:_stateLabel = [UILabel label]];
+        [self addSubview:_stateLabel = [UILabel mj_label]];
     }
     return _stateLabel;
 }
@@ -56,10 +56,13 @@
 {
     [super prepare];
     
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = MJRefreshLabelLeftInset;
+    
     // 鍒濆鍖栨枃瀛�
-    [self setTitle:MJRefreshAutoFooterIdleText forState:MJRefreshStateIdle];
-    [self setTitle:MJRefreshAutoFooterRefreshingText forState:MJRefreshStateRefreshing];
-    [self setTitle:MJRefreshAutoFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterIdleText] forState:MJRefreshStateIdle];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterRefreshingText] forState:MJRefreshStateRefreshing];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
     
     // 鐩戝惉label
     self.stateLabel.userInteractionEnabled = YES;
@@ -70,6 +73,8 @@
 {
     [super placeSubviews];
     
+    if (self.stateLabel.constraints.count) return;
+    
     // 鐘舵�佹爣绛�
     self.stateLabel.frame = self.bounds;
 }
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
similarity index 88%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
index 10d92e4..b29af86 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
@@ -9,6 +9,8 @@
 #import "MJRefreshBackStateFooter.h"
 
 @interface MJRefreshBackGifFooter : MJRefreshBackStateFooter
+@property (weak, nonatomic, readonly) UIImageView *gifView;
+
 /** 璁剧疆state鐘舵�佷笅鐨勫姩鐢诲浘鐗噄mages 鍔ㄧ敾鎸佺画鏃堕棿duration*/
 - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
 - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
similarity index 91%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
index ce18b53..fa97c72 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
@@ -9,7 +9,9 @@
 #import "MJRefreshBackGifFooter.h"
 
 @interface MJRefreshBackGifFooter()
-@property (weak, nonatomic) UIImageView *gifView;
+{
+    __unsafe_unretained UIImageView *_gifView;
+}
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鍥剧墖 */
 @property (strong, nonatomic) NSMutableDictionary *stateImages;
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鏃堕棿 */
@@ -64,6 +66,14 @@
 }
 
 #pragma mark - 瀹炵幇鐖剁被鐨勬柟娉�
+- (void)prepare
+{
+    [super prepare];
+    
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = 20;
+}
+
 - (void)setPullingPercent:(CGFloat)pullingPercent
 {
     [super setPullingPercent:pullingPercent];
@@ -79,12 +89,14 @@
 {
     [super placeSubviews];
     
+    if (self.gifView.constraints.count) return;
+    
     self.gifView.frame = self.bounds;
     if (self.stateLabel.hidden) {
         self.gifView.contentMode = UIViewContentModeCenter;
     } else {
         self.gifView.contentMode = UIViewContentModeRight;
-        self.gifView.mj_w = self.mj_w * 0.5 - 90;
+        self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5;
     }
 }
 
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
similarity index 100%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
similarity index 81%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
index ab0f47e..30e5ecf 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
@@ -7,10 +7,11 @@
 //
 
 #import "MJRefreshBackNormalFooter.h"
+#import "NSBundle+MJRefresh.h"
 
 @interface MJRefreshBackNormalFooter()
 {
-    __weak UIImageView *_arrowView;
+    __unsafe_unretained UIImageView *_arrowView;
 }
 @property (weak, nonatomic) UIActivityIndicatorView *loadingView;
 @end
@@ -20,8 +21,7 @@
 - (UIImageView *)arrowView
 {
     if (!_arrowView) {
-        UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
-        UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
+        UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]];
         [self addSubview:_arrowView = arrowView];
     }
     return _arrowView;
@@ -45,7 +45,7 @@
     self.loadingView = nil;
     [self setNeedsLayout];
 }
-#pragma makr - 閲嶅啓鐖剁被鐨勬柟娉�
+#pragma mark - 閲嶅啓鐖剁被鐨勬柟娉�
 - (void)prepare
 {
     [super prepare];
@@ -57,17 +57,26 @@
 {
     [super placeSubviews];
     
-    // 绠ご
-    self.arrowView.mj_size = self.arrowView.image.size;
+    // 绠ご鐨勪腑蹇冪偣
     CGFloat arrowCenterX = self.mj_w * 0.5;
     if (!self.stateLabel.hidden) {
-        arrowCenterX -= 100;
+        arrowCenterX -= self.labelLeftInset + self.stateLabel.mj_textWith * 0.5;
     }
     CGFloat arrowCenterY = self.mj_h * 0.5;
-    self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
+    CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
+    
+    // 绠ご
+    if (self.arrowView.constraints.count == 0) {
+        self.arrowView.mj_size = self.arrowView.image.size;
+        self.arrowView.center = arrowCenter;
+    }
     
     // 鍦堝湀
-    self.loadingView.frame = self.arrowView.frame;
+    if (self.loadingView.constraints.count == 0) {
+        self.loadingView.center = arrowCenter;
+    }
+    
+    self.arrowView.tintColor = self.stateLabel.textColor;
 }
 
 - (void)setState:(MJRefreshState)state
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
similarity index 84%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
index 2d02b2e..99b1483 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
@@ -9,6 +9,8 @@
 #import "MJRefreshBackFooter.h"
 
 @interface MJRefreshBackStateFooter : MJRefreshBackFooter
+/** 鏂囧瓧璺濈鍦堝湀銆佺澶寸殑璺濈 */
+@property (assign, nonatomic) CGFloat labelLeftInset;
 /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
 @property (weak, nonatomic, readonly) UILabel *stateLabel;
 /** 璁剧疆state鐘舵�佷笅鐨勬枃瀛� */
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
similarity index 65%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
index d75460e..cc784d0 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
@@ -11,7 +11,7 @@
 @interface MJRefreshBackStateFooter()
 {
     /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-    __weak UILabel *_stateLabel;
+    __unsafe_unretained UILabel *_stateLabel;
 }
 /** 鎵�鏈夌姸鎬佸搴旂殑鏂囧瓧 */
 @property (strong, nonatomic) NSMutableDictionary *stateTitles;
@@ -30,7 +30,7 @@
 - (UILabel *)stateLabel
 {
     if (!_stateLabel) {
-        [self addSubview:_stateLabel = [UILabel label]];
+        [self addSubview:_stateLabel = [UILabel mj_label]];
     }
     return _stateLabel;
 }
@@ -52,17 +52,22 @@
 {
     [super prepare];
     
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = MJRefreshLabelLeftInset;
+    
     // 鍒濆鍖栨枃瀛�
-    [self setTitle:MJRefreshBackFooterIdleText forState:MJRefreshStateIdle];
-    [self setTitle:MJRefreshBackFooterPullingText forState:MJRefreshStatePulling];
-    [self setTitle:MJRefreshBackFooterRefreshingText forState:MJRefreshStateRefreshing];
-    [self setTitle:MJRefreshBackFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterIdleText] forState:MJRefreshStateIdle];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterPullingText] forState:MJRefreshStatePulling];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterRefreshingText] forState:MJRefreshStateRefreshing];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
 }
 
 - (void)placeSubviews
 {
     [super placeSubviews];
     
+    if (self.stateLabel.constraints.count) return;
+    
     // 鐘舵�佹爣绛�
     self.stateLabel.frame = self.bounds;
 }
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
similarity index 88%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
index 560c847..ce3ed42 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
@@ -9,6 +9,8 @@
 #import "MJRefreshStateHeader.h"
 
 @interface MJRefreshGifHeader : MJRefreshStateHeader
+@property (weak, nonatomic, readonly) UIImageView *gifView;
+
 /** 璁剧疆state鐘舵�佷笅鐨勫姩鐢诲浘鐗噄mages 鍔ㄧ敾鎸佺画鏃堕棿duration*/
 - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
 - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
similarity index 82%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
index aa2ddd5..f8bcc9b 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
@@ -9,7 +9,9 @@
 #import "MJRefreshGifHeader.h"
 
 @interface MJRefreshGifHeader()
-@property (weak, nonatomic) UIImageView *gifView;
+{
+    __unsafe_unretained UIImageView *_gifView;
+}
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鍥剧墖 */
 @property (strong, nonatomic) NSMutableDictionary *stateImages;
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鏃堕棿 */
@@ -64,6 +66,14 @@
 }
 
 #pragma mark - 瀹炵幇鐖剁被鐨勬柟娉�
+- (void)prepare
+{
+    [super prepare];
+    
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = 20;
+}
+
 - (void)setPullingPercent:(CGFloat)pullingPercent
 {
     [super setPullingPercent:pullingPercent];
@@ -81,12 +91,21 @@
 {
     [super placeSubviews];
     
+    if (self.gifView.constraints.count) return;
+    
     self.gifView.frame = self.bounds;
     if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) {
         self.gifView.contentMode = UIViewContentModeCenter;
     } else {
         self.gifView.contentMode = UIViewContentModeRight;
-        self.gifView.mj_w = self.mj_w * 0.5 - 90;
+        
+        CGFloat stateWidth = self.stateLabel.mj_textWith;
+        CGFloat timeWidth = 0.0;
+        if (!self.lastUpdatedTimeLabel.hidden) {
+            timeWidth = self.lastUpdatedTimeLabel.mj_textWith;
+        }
+        CGFloat textWidth = MAX(stateWidth, timeWidth);
+        self.gifView.mj_w = self.mj_w * 0.5 - textWidth * 0.5 - self.labelLeftInset;
     }
 }
 
@@ -107,6 +126,8 @@
             self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue];
             [self.gifView startAnimating];
         }
+    } else if (state == MJRefreshStateIdle) {
+        [self.gifView stopAnimating];
     }
 }
 @end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
similarity index 100%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
similarity index 77%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
index 6e6dc57..32d8de7 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
@@ -7,10 +7,11 @@
 //
 
 #import "MJRefreshNormalHeader.h"
+#import "NSBundle+MJRefresh.h"
 
 @interface MJRefreshNormalHeader()
 {
-    __weak UIImageView *_arrowView;
+    __unsafe_unretained UIImageView *_arrowView;
 }
 @property (weak, nonatomic) UIActivityIndicatorView *loadingView;
 @end
@@ -20,8 +21,7 @@
 - (UIImageView *)arrowView
 {
     if (!_arrowView) {
-        UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
-        UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
+        UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]];
         [self addSubview:_arrowView = arrowView];
     }
     return _arrowView;
@@ -46,7 +46,7 @@
     [self setNeedsLayout];
 }
 
-#pragma makr - 閲嶅啓鐖剁被鐨勬柟娉�
+#pragma mark - 閲嶅啓鐖剁被鐨勬柟娉�
 - (void)prepare
 {
     [super prepare];
@@ -58,17 +58,32 @@
 {
     [super placeSubviews];
     
-    // 绠ご
-    self.arrowView.mj_size = self.arrowView.image.size;
+    // 绠ご鐨勪腑蹇冪偣
     CGFloat arrowCenterX = self.mj_w * 0.5;
     if (!self.stateLabel.hidden) {
-        arrowCenterX -= 100;
+        CGFloat stateWidth = self.stateLabel.mj_textWith;
+        CGFloat timeWidth = 0.0;
+        if (!self.lastUpdatedTimeLabel.hidden) {
+            timeWidth = self.lastUpdatedTimeLabel.mj_textWith;
+        }
+        CGFloat textWidth = MAX(stateWidth, timeWidth);
+        arrowCenterX -= textWidth / 2 + self.labelLeftInset;
     }
     CGFloat arrowCenterY = self.mj_h * 0.5;
-    self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
+    CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
     
+    // 绠ご
+    if (self.arrowView.constraints.count == 0) {
+        self.arrowView.mj_size = self.arrowView.image.size;
+        self.arrowView.center = arrowCenter;
+    }
+        
     // 鍦堝湀
-    self.loadingView.frame = self.arrowView.frame;
+    if (self.loadingView.constraints.count == 0) {
+        self.loadingView.center = arrowCenter;
+    }
+    
+    self.arrowView.tintColor = self.stateLabel.textColor;
 }
 
 - (void)setState:(MJRefreshState)state
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
similarity index 88%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
index 5909532..1f3dbc4 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
@@ -16,6 +16,8 @@
 @property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel;
 
 #pragma mark - 鐘舵�佺浉鍏�
+/** 鏂囧瓧璺濈鍦堝湀銆佺澶寸殑璺濈 */
+@property (assign, nonatomic) CGFloat labelLeftInset;
 /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
 @property (weak, nonatomic, readonly) UILabel *stateLabel;
 /** 璁剧疆state鐘舵�佷笅鐨勬枃瀛� */
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m
new file mode 100644
index 0000000..ca78b52
--- /dev/null
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m
@@ -0,0 +1,167 @@
+//
+//  MJRefreshStateHeader.m
+//  MJRefreshExample
+//
+//  Created by MJ Lee on 15/4/24.
+//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
+//
+
+#import "MJRefreshStateHeader.h"
+
+@interface MJRefreshStateHeader()
+{
+    /** 鏄剧ず涓婁竴娆″埛鏂版椂闂寸殑label */
+    __unsafe_unretained UILabel *_lastUpdatedTimeLabel;
+    /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
+    __unsafe_unretained UILabel *_stateLabel;
+}
+/** 鎵�鏈夌姸鎬佸搴旂殑鏂囧瓧 */
+@property (strong, nonatomic) NSMutableDictionary *stateTitles;
+@end
+
+@implementation MJRefreshStateHeader
+#pragma mark - 鎳掑姞杞�
+- (NSMutableDictionary *)stateTitles
+{
+    if (!_stateTitles) {
+        self.stateTitles = [NSMutableDictionary dictionary];
+    }
+    return _stateTitles;
+}
+
+- (UILabel *)stateLabel
+{
+    if (!_stateLabel) {
+        [self addSubview:_stateLabel = [UILabel mj_label]];
+    }
+    return _stateLabel;
+}
+
+- (UILabel *)lastUpdatedTimeLabel
+{
+    if (!_lastUpdatedTimeLabel) {
+        [self addSubview:_lastUpdatedTimeLabel = [UILabel mj_label]];
+    }
+    return _lastUpdatedTimeLabel;
+}
+
+#pragma mark - 鍏叡鏂规硶
+- (void)setTitle:(NSString *)title forState:(MJRefreshState)state
+{
+    if (title == nil) return;
+    self.stateTitles[@(state)] = title;
+    self.stateLabel.text = self.stateTitles[@(self.state)];
+}
+
+#pragma mark - 鏃ュ巻鑾峰彇鍦�9.x涔嬪悗鐨勭郴缁熶娇鐢╟urrentCalendar浼氬嚭寮傚父銆傚湪8.0涔嬪悗浣跨敤绯荤粺鏂癆PI銆�
+- (NSCalendar *)currentCalendar {
+    if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
+        return [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
+    }
+    return [NSCalendar currentCalendar];
+}
+
+#pragma mark key鐨勫鐞�
+- (void)setLastUpdatedTimeKey:(NSString *)lastUpdatedTimeKey
+{
+    [super setLastUpdatedTimeKey:lastUpdatedTimeKey];
+    
+    // 濡傛灉label闅愯棌浜嗭紝灏变笉鐢ㄥ啀澶勭悊
+    if (self.lastUpdatedTimeLabel.hidden) return;
+    
+    NSDate *lastUpdatedTime = [[NSUserDefaults standardUserDefaults] objectForKey:lastUpdatedTimeKey];
+    
+    // 濡傛灉鏈塨lock
+    if (self.lastUpdatedTimeText) {
+        self.lastUpdatedTimeLabel.text = self.lastUpdatedTimeText(lastUpdatedTime);
+        return;
+    }
+    
+    if (lastUpdatedTime) {
+        // 1.鑾峰緱骞存湀鏃�
+        NSCalendar *calendar = [self currentCalendar];
+        NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute;
+        NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:lastUpdatedTime];
+        NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]];
+        
+        // 2.鏍煎紡鍖栨棩鏈�
+        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+        BOOL isToday = NO;
+        if ([cmp1 day] == [cmp2 day]) { // 浠婂ぉ
+            formatter.dateFormat = @" HH:mm";
+            isToday = YES;
+        } else if ([cmp1 year] == [cmp2 year]) { // 浠婂勾
+            formatter.dateFormat = @"MM-dd HH:mm";
+        } else {
+            formatter.dateFormat = @"yyyy-MM-dd HH:mm";
+        }
+        NSString *time = [formatter stringFromDate:lastUpdatedTime];
+        
+        // 3.鏄剧ず鏃ユ湡
+        self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@%@",
+                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText],
+                                          isToday ? [NSBundle mj_localizedStringForKey:MJRefreshHeaderDateTodayText] : @"",
+                                          time];
+    } else {
+        self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@",
+                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText],
+                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderNoneLastDateText]];
+    }
+}
+
+#pragma mark - 瑕嗙洊鐖剁被鐨勬柟娉�
+- (void)prepare
+{
+    [super prepare];
+    
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = MJRefreshLabelLeftInset;
+    
+    // 鍒濆鍖栨枃瀛�
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderIdleText] forState:MJRefreshStateIdle];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderPullingText] forState:MJRefreshStatePulling];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderRefreshingText] forState:MJRefreshStateRefreshing];
+}
+
+- (void)placeSubviews
+{
+    [super placeSubviews];
+    
+    if (self.stateLabel.hidden) return;
+    
+    BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0;
+    
+    if (self.lastUpdatedTimeLabel.hidden) {
+        // 鐘舵��
+        if (noConstrainsOnStatusLabel) self.stateLabel.frame = self.bounds;
+    } else {
+        CGFloat stateLabelH = self.mj_h * 0.5;
+        // 鐘舵��
+        if (noConstrainsOnStatusLabel) {
+            self.stateLabel.mj_x = 0;
+            self.stateLabel.mj_y = 0;
+            self.stateLabel.mj_w = self.mj_w;
+            self.stateLabel.mj_h = stateLabelH;
+        }
+        
+        // 鏇存柊鏃堕棿
+        if (self.lastUpdatedTimeLabel.constraints.count == 0) {
+            self.lastUpdatedTimeLabel.mj_x = 0;
+            self.lastUpdatedTimeLabel.mj_y = stateLabelH;
+            self.lastUpdatedTimeLabel.mj_w = self.mj_w;
+            self.lastUpdatedTimeLabel.mj_h = self.mj_h - self.lastUpdatedTimeLabel.mj_y;
+        }
+    }
+}
+
+- (void)setState:(MJRefreshState)state
+{
+    MJRefreshCheckState
+    
+    // 璁剧疆鐘舵�佹枃瀛�
+    self.stateLabel.text = self.stateTitles[@(state)];
+    
+    // 閲嶆柊璁剧疆key锛堥噸鏂版樉绀烘椂闂达級
+    self.lastUpdatedTimeKey = self.lastUpdatedTimeKey;
+}
+@end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh.bundle/arrow@2x.png b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png
similarity index 100%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh.bundle/arrow@2x.png
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png
Binary files differ
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings
new file mode 100644
index 0000000..a75f6b1
--- /dev/null
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings
Binary files differ
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings
new file mode 100644
index 0000000..0a36d7e
--- /dev/null
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings
Binary files differ
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings
new file mode 100644
index 0000000..7924bba
--- /dev/null
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings
@@ -0,0 +1,16 @@
+"MJRefreshHeaderIdleText" = "涓嬫媺鍙互鍒锋柊";
+"MJRefreshHeaderPullingText" = "楝嗛枊绔嬪嵆鍒锋柊";
+"MJRefreshHeaderRefreshingText" = "姝e湪鍒锋柊鏁告摎涓�...";
+
+"MJRefreshAutoFooterIdleText" = "榛炴搳鎴栦笂鎷夊姞杓夋洿澶�";
+"MJRefreshAutoFooterRefreshingText" = "姝e湪鍔犺級鏇村鐨勬暩鎿�...";
+"MJRefreshAutoFooterNoMoreDataText" = "宸茬稉鍏ㄩ儴鍔犺級瀹岀暍";
+
+"MJRefreshBackFooterIdleText" = "涓婃媺鍙互鍔犺級鏇村";
+"MJRefreshBackFooterPullingText" = "楝嗛枊绔嬪嵆鍔犺級鏇村";
+"MJRefreshBackFooterRefreshingText" = "姝e湪鍔犺級鏇村鐨勬暩鎿�...";
+"MJRefreshBackFooterNoMoreDataText" = "宸茬稉鍏ㄩ儴鍔犺級瀹岀暍";
+
+"MJRefreshHeaderLastTimeText" = "鏈�寰屾洿鏂帮細";
+"MJRefreshHeaderDateTodayText" = "浠婂ぉ";
+"MJRefreshHeaderNoneLastDateText" = "鐒¤閷�";
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.h
similarity index 100%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefresh.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.h
similarity index 87%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.h
index 71622d2..4a72021 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.h
@@ -3,6 +3,9 @@
 #import <UIKit/UIKit.h>
 #import <objc/message.h>
 
+// 寮卞紩鐢�
+#define MJWeakSelf __weak typeof(self) weakSelf = self;
+
 // 鏃ュ織杈撳嚭
 #ifdef DEBUG
 #define MJRefreshLog(...) NSLog(__VA_ARGS__)
@@ -26,11 +29,8 @@
 // 瀛椾綋澶у皬
 #define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14]
 
-// 鍥剧墖璺緞
-#define MJRefreshSrcName(file) [@"MJRefresh.bundle" stringByAppendingPathComponent:file]
-#define MJRefreshFrameworkSrcName(file) [@"Frameworks/MJRefresh.framework/MJRefresh.bundle" stringByAppendingPathComponent:file]
-
 // 甯搁噺
+UIKIT_EXTERN const CGFloat MJRefreshLabelLeftInset;
 UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight;
 UIKIT_EXTERN const CGFloat MJRefreshFooterHeight;
 UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration;
@@ -56,6 +56,10 @@
 UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText;
 UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText;
 
+UIKIT_EXTERN NSString *const MJRefreshHeaderLastTimeText;
+UIKIT_EXTERN NSString *const MJRefreshHeaderDateTodayText;
+UIKIT_EXTERN NSString *const MJRefreshHeaderNoneLastDateText;
+
 // 鐘舵�佹鏌�
 #define MJRefreshCheckState \
 MJRefreshState oldState = self.state; \
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.m
new file mode 100644
index 0000000..7c0733e
--- /dev/null
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/MJRefreshConst.m
@@ -0,0 +1,33 @@
+//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
+//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+#import <UIKit/UIKit.h>
+
+const CGFloat MJRefreshLabelLeftInset = 25;
+const CGFloat MJRefreshHeaderHeight = 54.0;
+const CGFloat MJRefreshFooterHeight = 44.0;
+const CGFloat MJRefreshFastAnimationDuration = 0.25;
+const CGFloat MJRefreshSlowAnimationDuration = 0.4;
+
+NSString *const MJRefreshKeyPathContentOffset = @"contentOffset";
+NSString *const MJRefreshKeyPathContentInset = @"contentInset";
+NSString *const MJRefreshKeyPathContentSize = @"contentSize";
+NSString *const MJRefreshKeyPathPanState = @"state";
+
+NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey";
+
+NSString *const MJRefreshHeaderIdleText = @"MJRefreshHeaderIdleText";
+NSString *const MJRefreshHeaderPullingText = @"MJRefreshHeaderPullingText";
+NSString *const MJRefreshHeaderRefreshingText = @"MJRefreshHeaderRefreshingText";
+
+NSString *const MJRefreshAutoFooterIdleText = @"MJRefreshAutoFooterIdleText";
+NSString *const MJRefreshAutoFooterRefreshingText = @"MJRefreshAutoFooterRefreshingText";
+NSString *const MJRefreshAutoFooterNoMoreDataText = @"MJRefreshAutoFooterNoMoreDataText";
+
+NSString *const MJRefreshBackFooterIdleText = @"MJRefreshBackFooterIdleText";
+NSString *const MJRefreshBackFooterPullingText = @"MJRefreshBackFooterPullingText";
+NSString *const MJRefreshBackFooterRefreshingText = @"MJRefreshBackFooterRefreshingText";
+NSString *const MJRefreshBackFooterNoMoreDataText = @"MJRefreshBackFooterNoMoreDataText";
+
+NSString *const MJRefreshHeaderLastTimeText = @"MJRefreshHeaderLastTimeText";
+NSString *const MJRefreshHeaderDateTodayText = @"MJRefreshHeaderDateTodayText";
+NSString *const MJRefreshHeaderNoneLastDateText = @"MJRefreshHeaderNoneLastDateText";
\ No newline at end of file
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h
new file mode 100644
index 0000000..01df06c
--- /dev/null
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h
@@ -0,0 +1,16 @@
+//
+//  NSBundle+MJRefresh.h
+//  MJRefreshExample
+//
+//  Created by MJ Lee on 16/6/13.
+//  Copyright 漏 2016骞� 灏忕爜鍝�. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface NSBundle (MJRefresh)
++ (instancetype)mj_refreshBundle;
++ (UIImage *)mj_arrowImage;
++ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value;
++ (NSString *)mj_localizedStringForKey:(NSString *)key;
+@end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m
new file mode 100644
index 0000000..c155ad4
--- /dev/null
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m
@@ -0,0 +1,61 @@
+//
+//  NSBundle+MJRefresh.m
+//  MJRefreshExample
+//
+//  Created by MJ Lee on 16/6/13.
+//  Copyright 漏 2016骞� 灏忕爜鍝�. All rights reserved.
+//
+
+#import "NSBundle+MJRefresh.h"
+#import "MJRefreshComponent.h"
+
+@implementation NSBundle (MJRefresh)
++ (instancetype)mj_refreshBundle
+{
+    static NSBundle *refreshBundle = nil;
+    if (refreshBundle == nil) {
+        // 杩欓噷涓嶄娇鐢╩ainBundle鏄负浜嗛�傞厤pod 1.x鍜�0.x
+        refreshBundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[MJRefreshComponent class]] pathForResource:@"MJRefresh" ofType:@"bundle"]];
+    }
+    return refreshBundle;
+}
+
++ (UIImage *)mj_arrowImage
+{
+    static UIImage *arrowImage = nil;
+    if (arrowImage == nil) {
+        arrowImage = [[UIImage imageWithContentsOfFile:[[self mj_refreshBundle] pathForResource:@"arrow@2x" ofType:@"png"]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+    }
+    return arrowImage;
+}
+
++ (NSString *)mj_localizedStringForKey:(NSString *)key
+{
+    return [self mj_localizedStringForKey:key value:nil];
+}
+
++ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value
+{
+    static NSBundle *bundle = nil;
+    if (bundle == nil) {
+        // 锛坕OS鑾峰彇鐨勮瑷�瀛楃涓叉瘮杈冧笉绋冲畾锛夌洰鍓嶆鏋跺彧澶勭悊en銆亃h-Hans銆亃h-Hant涓夌鎯呭喌锛屽叾浠栨寜鐓х郴缁熼粯璁ゅ鐞�
+        NSString *language = [NSLocale preferredLanguages].firstObject;
+        if ([language hasPrefix:@"en"]) {
+            language = @"en";
+        } else if ([language hasPrefix:@"zh"]) {
+            if ([language rangeOfString:@"Hans"].location != NSNotFound) {
+                language = @"zh-Hans"; // 绠�浣撲腑鏂�
+            } else { // zh-Hant\zh-HK\zh-TW
+                language = @"zh-Hant"; // 绻侀珨涓枃
+            }
+        } else {
+            language = @"en";
+        }
+        
+        // 浠嶮JRefresh.bundle涓煡鎵捐祫婧�
+        bundle = [NSBundle bundleWithPath:[[NSBundle mj_refreshBundle] pathForResource:language ofType:@"lproj"]];
+    }
+    value = [bundle localizedStringForKey:key value:value table:nil];
+    return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil];
+}
+@end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
similarity index 93%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
index 734110f..dd70d08 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
@@ -10,6 +10,8 @@
 #import <UIKit/UIKit.h>
 
 @interface UIScrollView (MJExtension)
+@property (readonly, nonatomic) UIEdgeInsets mj_inset;
+
 @property (assign, nonatomic) CGFloat mj_insetT;
 @property (assign, nonatomic) CGFloat mj_insetB;
 @property (assign, nonatomic) CGFloat mj_insetL;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
similarity index 63%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
index 6a13f5f..045c1b3 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
@@ -10,54 +10,94 @@
 #import "UIScrollView+MJExtension.h"
 #import <objc/runtime.h>
 
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunguarded-availability-new"
+
 @implementation UIScrollView (MJExtension)
+
+static BOOL gt_ios_11_;
++ (void)load
+{
+    // 缂撳瓨鍒ゆ柇鍊�
+    gt_ios_11_ = [[[UIDevice currentDevice] systemVersion] compare:@"11.0" options:NSNumericSearch] != NSOrderedAscending;
+}
+
+- (UIEdgeInsets)mj_inset
+{
+#ifdef __IPHONE_11_0
+    if (gt_ios_11_) {
+        return self.adjustedContentInset;
+    }
+#endif
+    return self.contentInset;
+}
 
 - (void)setMj_insetT:(CGFloat)mj_insetT
 {
     UIEdgeInsets inset = self.contentInset;
     inset.top = mj_insetT;
+#ifdef __IPHONE_11_0
+    if (gt_ios_11_) {
+        inset.top -= (self.adjustedContentInset.top - self.contentInset.top);
+    }
+#endif
     self.contentInset = inset;
 }
 
 - (CGFloat)mj_insetT
 {
-    return self.contentInset.top;
+    return self.mj_inset.top;
 }
 
 - (void)setMj_insetB:(CGFloat)mj_insetB
 {
     UIEdgeInsets inset = self.contentInset;
     inset.bottom = mj_insetB;
+#ifdef __IPHONE_11_0
+    if (gt_ios_11_) {
+        inset.bottom -= (self.adjustedContentInset.bottom - self.contentInset.bottom);
+    }
+#endif
     self.contentInset = inset;
 }
 
 - (CGFloat)mj_insetB
 {
-    return self.contentInset.bottom;
+    return self.mj_inset.bottom;
 }
 
 - (void)setMj_insetL:(CGFloat)mj_insetL
 {
     UIEdgeInsets inset = self.contentInset;
     inset.left = mj_insetL;
+#ifdef __IPHONE_11_0
+    if (gt_ios_11_) {
+        inset.left -= (self.adjustedContentInset.left - self.contentInset.left);
+    }
+#endif
     self.contentInset = inset;
 }
 
 - (CGFloat)mj_insetL
 {
-    return self.contentInset.left;
+    return self.mj_inset.left;
 }
 
 - (void)setMj_insetR:(CGFloat)mj_insetR
 {
     UIEdgeInsets inset = self.contentInset;
     inset.right = mj_insetR;
+#ifdef __IPHONE_11_0
+    if (gt_ios_11_) {
+        inset.right -= (self.adjustedContentInset.right - self.contentInset.right);
+    }
+#endif
     self.contentInset = inset;
 }
 
 - (CGFloat)mj_insetR
 {
-    return self.contentInset.right;
+    return self.mj_inset.right;
 }
 
 - (void)setMj_offsetX:(CGFloat)mj_offsetX
@@ -108,3 +148,4 @@
     return self.contentSize.height;
 }
 @end
+#pragma clang diagnostic pop
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h
new file mode 100644
index 0000000..17d4715
--- /dev/null
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h
@@ -0,0 +1,26 @@
+//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
+//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+//  UIScrollView+MJRefresh.h
+//  MJRefreshExample
+//
+//  Created by MJ Lee on 15/3/4.
+//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
+//  缁橲crollView澧炲姞涓嬫媺鍒锋柊銆佷笂鎷夊埛鏂扮殑鍔熻兘
+
+#import <UIKit/UIKit.h>
+#import "MJRefreshConst.h"
+
+@class MJRefreshHeader, MJRefreshFooter;
+
+@interface UIScrollView (MJRefresh)
+/** 涓嬫媺鍒锋柊鎺т欢 */
+@property (strong, nonatomic) MJRefreshHeader *mj_header;
+@property (strong, nonatomic) MJRefreshHeader *header MJRefreshDeprecated("浣跨敤mj_header");
+/** 涓婃媺鍒锋柊鎺т欢 */
+@property (strong, nonatomic) MJRefreshFooter *mj_footer;
+@property (strong, nonatomic) MJRefreshFooter *footer MJRefreshDeprecated("浣跨敤mj_footer");
+
+#pragma mark - other
+- (NSInteger)mj_totalDataCount;
+@property (copy, nonatomic) void (^mj_reloadDataBlock)(NSInteger totalDataCount);
+@end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
similarity index 69%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
index b87a88c..b1b9942 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
@@ -30,50 +30,71 @@
 
 #pragma mark - header
 static const char MJRefreshHeaderKey = '\0';
-- (void)setHeader:(MJRefreshHeader *)header
+- (void)setMj_header:(MJRefreshHeader *)mj_header
 {
-    if (header != self.header) {
+    if (mj_header != self.mj_header) {
         // 鍒犻櫎鏃х殑锛屾坊鍔犳柊鐨�
-        [self.header removeFromSuperview];
-        [self addSubview:header];
+        [self.mj_header removeFromSuperview];
+        [self insertSubview:mj_header atIndex:0];
         
         // 瀛樺偍鏂扮殑
-        [self willChangeValueForKey:@"header"]; // KVO
+        [self willChangeValueForKey:@"mj_header"]; // KVO
         objc_setAssociatedObject(self, &MJRefreshHeaderKey,
-                                 header, OBJC_ASSOCIATION_ASSIGN);
-        [self didChangeValueForKey:@"header"]; // KVO
+                                 mj_header, OBJC_ASSOCIATION_ASSIGN);
+        [self didChangeValueForKey:@"mj_header"]; // KVO
     }
 }
 
-- (MJRefreshHeader *)header
+- (MJRefreshHeader *)mj_header
 {
     return objc_getAssociatedObject(self, &MJRefreshHeaderKey);
 }
 
 #pragma mark - footer
 static const char MJRefreshFooterKey = '\0';
-- (void)setFooter:(MJRefreshFooter *)footer
+- (void)setMj_footer:(MJRefreshFooter *)mj_footer
 {
-    if (footer != self.footer) {
+    if (mj_footer != self.mj_footer) {
         // 鍒犻櫎鏃х殑锛屾坊鍔犳柊鐨�
-        [self.footer removeFromSuperview];
-        [self addSubview:footer];
+        [self.mj_footer removeFromSuperview];
+        [self insertSubview:mj_footer atIndex:0];
         
         // 瀛樺偍鏂扮殑
-        [self willChangeValueForKey:@"footer"]; // KVO
+        [self willChangeValueForKey:@"mj_footer"]; // KVO
         objc_setAssociatedObject(self, &MJRefreshFooterKey,
-                                 footer, OBJC_ASSOCIATION_ASSIGN);
-        [self didChangeValueForKey:@"footer"]; // KVO
+                                 mj_footer, OBJC_ASSOCIATION_ASSIGN);
+        [self didChangeValueForKey:@"mj_footer"]; // KVO
     }
 }
 
-- (MJRefreshFooter *)footer
+- (MJRefreshFooter *)mj_footer
 {
     return objc_getAssociatedObject(self, &MJRefreshFooterKey);
 }
 
+#pragma mark - 杩囨湡
+- (void)setFooter:(MJRefreshFooter *)footer
+{
+    self.mj_footer = footer;
+}
+
+- (MJRefreshFooter *)footer
+{
+    return self.mj_footer;
+}
+
+- (void)setHeader:(MJRefreshHeader *)header
+{
+    self.mj_header = header;
+}
+
+- (MJRefreshHeader *)header
+{
+    return self.mj_header;
+}
+
 #pragma mark - other
-- (NSInteger)totalDataCount
+- (NSInteger)mj_totalDataCount
 {
     NSInteger totalCount = 0;
     if ([self isKindOfClass:[UITableView class]]) {
@@ -93,21 +114,21 @@
 }
 
 static const char MJRefreshReloadDataBlockKey = '\0';
-- (void)setReloadDataBlock:(void (^)(NSInteger))reloadDataBlock
+- (void)setMj_reloadDataBlock:(void (^)(NSInteger))mj_reloadDataBlock
 {
-    [self willChangeValueForKey:@"reloadDataBlock"]; // KVO
-    objc_setAssociatedObject(self, &MJRefreshReloadDataBlockKey, reloadDataBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
-    [self didChangeValueForKey:@"reloadDataBlock"]; // KVO
+    [self willChangeValueForKey:@"mj_reloadDataBlock"]; // KVO
+    objc_setAssociatedObject(self, &MJRefreshReloadDataBlockKey, mj_reloadDataBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
+    [self didChangeValueForKey:@"mj_reloadDataBlock"]; // KVO
 }
 
-- (void (^)(NSInteger))reloadDataBlock
+- (void (^)(NSInteger))mj_reloadDataBlock
 {
     return objc_getAssociatedObject(self, &MJRefreshReloadDataBlockKey);
 }
 
 - (void)executeReloadDataBlock
 {
-    !self.reloadDataBlock ? : self.reloadDataBlock(self.totalDataCount);
+    !self.mj_reloadDataBlock ? : self.mj_reloadDataBlock(self.mj_totalDataCount);
 }
 @end
 
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIView+MJExtension.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIView+MJExtension.h
similarity index 100%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIView+MJExtension.h
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIView+MJExtension.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIView+MJExtension.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIView+MJExtension.m
similarity index 100%
rename from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIView+MJExtension.m
rename to Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefresh/UIView+MJExtension.m
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.m
deleted file mode 100644
index 91e04f3..0000000
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.m
+++ /dev/null
@@ -1,28 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-#import <UIKit/UIKit.h>
-
-const CGFloat MJRefreshHeaderHeight = 54.0;
-const CGFloat MJRefreshFooterHeight = 44.0;
-const CGFloat MJRefreshFastAnimationDuration = 0.25;
-const CGFloat MJRefreshSlowAnimationDuration = 0.4;
-
-NSString *const MJRefreshKeyPathContentOffset = @"contentOffset";
-NSString *const MJRefreshKeyPathContentInset = @"contentInset";
-NSString *const MJRefreshKeyPathContentSize = @"contentSize";
-NSString *const MJRefreshKeyPathPanState = @"state";
-
-NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey";
-
-NSString *const MJRefreshHeaderIdleText = @"涓嬫媺鍙互鍒锋柊";
-NSString *const MJRefreshHeaderPullingText = @"鏉惧紑绔嬪嵆鍒锋柊";
-NSString *const MJRefreshHeaderRefreshingText = @"姝e湪鍒锋柊鏁版嵁涓�...";
-
-NSString *const MJRefreshAutoFooterIdleText = @"鐐瑰嚮鎴栦笂鎷夊姞杞芥洿澶�";
-NSString *const MJRefreshAutoFooterRefreshingText = @"姝e湪鍔犺浇鏇村鐨勬暟鎹�...";
-NSString *const MJRefreshAutoFooterNoMoreDataText = @"宸茬粡鍏ㄩ儴鍔犺浇瀹屾瘯";
-
-NSString *const MJRefreshBackFooterIdleText = @"涓婃媺鍙互鍔犺浇鏇村";
-NSString *const MJRefreshBackFooterPullingText = @"鏉惧紑绔嬪嵆鍔犺浇鏇村";
-NSString *const MJRefreshBackFooterRefreshingText = @"姝e湪鍔犺浇鏇村鐨勬暟鎹�...";
-NSString *const MJRefreshBackFooterNoMoreDataText = @"宸茬粡鍏ㄩ儴鍔犺浇瀹屾瘯";
\ No newline at end of file
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/README.md b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/README.md
new file mode 100644
index 0000000..8bf7874
--- /dev/null
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/README.md
@@ -0,0 +1,362 @@
+![(logo)](http://images.cnitblog.com/blog2015/497279/201505/051004492043385.png)
+## MJRefresh
+* An easy way to use pull-to-refresh
+
+## Contents
+* Getting Started
+    * [Features銆怱upport what kinds of controls to refresh銆慮(#Support_what_kinds_of_controls_to_refresh)
+    * [Installation銆怘ow to use MJRefresh銆慮(#How_to_use_MJRefresh)
+    * [Who's using銆怣ore than hundreds of Apps are using MJRefresh銆慮(#More_than_hundreds_of_Apps_are_using_MJRefresh)
+    * [Classes銆怲he Class Structure Chart of MJRefresh銆慮(#The_Class_Structure_Chart_of_MJRefresh)
+* Comment API
+	* [MJRefreshComponent.h](#MJRefreshComponent.h)
+	* [MJRefreshHeader.h](#MJRefreshHeader.h)
+	* [MJRefreshFooter.h](#MJRefreshFooter.h)
+	* [MJRefreshAutoFooter.h](#MJRefreshAutoFooter.h)
+* Examples
+    * [Reference](#Reference)
+    * [The drop-down refresh 01-Default](#The_drop-down_refresh_01-Default)
+    * [The drop-down refresh 02-Animation image](#The_drop-down_refresh_02-Animation_image)
+    * [The drop-down refresh 03-Hide the time](#The_drop-down_refresh_03-Hide_the_time)
+    * [The drop-down refresh 04-Hide status and time](#The_drop-down_refresh_04-Hide_status_and_time)
+    * [The drop-down refresh 05-DIY title](#The_drop-down_refresh_05-DIY_title)
+    * [The drop-down refresh 06-DIY the control of refresh](#The_drop-down_refresh_06-DIY_the_control_of_refresh)
+    * [The pull to refresh 01-Default](#The_pull_to_refresh_01-Default)
+    * [The pull to refresh 02-Animation image](#The_pull_to_refresh_02-Animation_image)
+    * [The pull to refresh 03-Hide the title of refresh status](#The_pull_to_refresh_03-Hide_the_title_of_refresh_status)
+    * [The pull to refresh 04-All loaded](#The_pull_to_refresh_04-All_loaded)
+    * [The pull to refresh 05-DIY title](#The_pull_to_refresh_05-DIY_title)
+    * [The pull to refresh 06-Hidden After loaded](#The_pull_to_refresh_06-Hidden_After_loaded)
+    * [The pull to refresh 07-Automatic back of the pull01](#The_pull_to_refresh_07-Automatic_back_of_the_pull01)
+    * [The pull to refresh 08-Automatic back of the pull02](#The_pull_to_refresh_08-Automatic_back_of_the_pull02)
+    * [The pull to refresh 09-DIY the control of refresh(Automatic refresh)](#The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh))
+    * [The pull to refresh 10-DIY the control of refresh(Automatic back)](#The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back))
+    * [UICollectionView01-The pull and drop-down refresh](#UICollectionView01-The_pull_and_drop-down_refresh)
+    * [UIWebView01-The drop-down refresh](#UIWebView01-The_drop-down_refresh)
+* [Hope](#Hope)
+
+## <a id="Support_what_kinds_of_controls_to_refresh"></a>Support what kinds of controls to refresh
+* `UIScrollView`銆乣UITableView`銆乣UICollectionView`銆乣UIWebView`
+
+## <a id="How_to_use_MJRefresh"></a>How to use MJRefresh
+* Installation with CocoaPods锛歚pod 'MJRefresh'`
+* Manual import锛�
+    * Drag All files in the `MJRefresh` folder to project
+    * Import the main file锛歚#import "MJRefresh.h"`
+
+```objc
+Base                        Custom
+MJRefresh.bundle            MJRefresh.h
+MJRefreshConst.h            MJRefreshConst.m
+UIScrollView+MJExtension.h  UIScrollView+MJExtension.m
+UIScrollView+MJRefresh.h    UIScrollView+MJRefresh.m
+UIView+MJExtension.h        UIView+MJExtension.m
+```
+
+## <a id="More_than_hundreds_of_Apps_are_using_MJRefresh"></a>More than hundreds of Apps are using MJRefresh
+<img src="http://images0.cnblogs.com/blog2015/497279/201506/141212365041650.png" width="200" height="300">
+* More information of App can focus on锛歔M浜嗕釜J-鍗氬鍥璢(http://www.cnblogs.com/mjios/p/4409853.html)
+
+## <a id="The_Class_Structure_Chart_of_MJRefresh"></a>The Class Structure Chart of MJRefresh
+![](http://images0.cnblogs.com/blog2015/497279/201506/132232456139177.png)
+- `The class of red text` in the chart锛歒ou can use them directly
+    - The drop-down refresh control types
+        - Normal锛歚MJRefreshNormalHeader`
+        - Gif锛歚MJRefreshGifHeader`
+    - The pull to refresh control types
+        - Auto refresh
+            - Normal锛歚MJRefreshAutoNormalFooter`
+            - Gif锛歚MJRefreshAutoGifFooter`
+        - Auto Back
+            - Normal锛歚MJRefreshBackNormalFooter`
+            - Gif锛歚MJRefreshBackGifFooter`
+- `The class of non-red text` in the chart锛欶or inheritance锛宼o use DIY the control of refresh
+- About how to DIY the control of refresh锛孻ou can refer the Class in below Chart<br>
+<img src="http://images0.cnblogs.com/blog2015/497279/201506/141358159107893.png" width="30%" height="30%">
+
+## <a id="MJRefreshComponent.h"></a>MJRefreshComponent.h
+```objc
+/** The Base Class of refresh control */
+@interface MJRefreshComponent : UIView
+#pragma mark -  Control the state of Refresh 
+
+/** BeginRefreshing */
+- (void)beginRefreshing;
+/** EndRefreshing */
+- (void)endRefreshing; 
+/** IsRefreshing */
+- (BOOL)isRefreshing;
+
+#pragma mark - Other
+/** According to the drag ratio to change alpha automatically */
+@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
+@end
+```
+
+## <a id="MJRefreshHeader.h"></a>MJRefreshHeader.h
+```objc
+@interface MJRefreshHeader : MJRefreshComponent
+/** Creat header */
++ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
+/** Creat header */
++ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
+
+/** This key is used to storage the time that the last time of drown-down successfully */
+@property (copy, nonatomic) NSString *lastUpdatedTimeKey;
+/** The last time of drown-down successfully */
+@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime;
+
+/** Ignored scrollView contentInset top */
+@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop;
+@end
+```
+
+## <a id="MJRefreshFooter.h"></a>MJRefreshFooter.h
+```objc
+@interface MJRefreshFooter : MJRefreshComponent
+/** Creat footer */
++ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
+/** Creat footer */
++ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
+
+/** NoticeNoMoreData */
+- (void)noticeNoMoreData;
+/** ResetNoMoreData锛圕lear the status of NoMoreData 锛� */
+- (void)resetNoMoreData;
+
+/** Ignored scrollView contentInset bottom */
+@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
+
+/** Automaticlly show or hidden by the count of data锛圫how-have data锛孒idden- no data锛� */
+@property (assign, nonatomic) BOOL automaticallyHidden;
+@end
+```
+
+## <a id="MJRefreshAutoFooter.h"></a>MJRefreshAutoFooter.h
+```objc
+@interface MJRefreshAutoFooter : MJRefreshFooter
+/** Is Automatically Refresh(Default is Yes) */
+@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
+
+/** When there is much at the bottom of the control is automatically refresh(Default is 1.0锛孖s at the bottom of the control appears in full, will refresh automatically) */
+@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
+@end
+```
+
+## <a id="Reference"></a>Reference
+```objc
+* Due to there are more functions of this framework锛孌on't write specific text describe its usage
+* You can directly reference examples MJTableViewController銆丮JCollectionViewController銆丮JWebViewController锛孧ore intuitive and fast.
+```
+<img src="http://images0.cnblogs.com/blog2015/497279/201506/141345470048120.png" width="30%" height="30%">
+
+## <a id="The_drop-down_refresh_01-Default"></a>The drop-down refresh 01-Default
+
+```objc
+self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+   //Call this Block When enter the refresh status automatically 
+}];
+鎴�
+// Set the callback锛圤nce you enter the refresh status锛宼hen call the action of target锛宼hat is call [self loadNewData]锛�
+self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
+
+// Enter the refresh status immediately
+[self.tableView.header beginRefreshing];
+```
+![(涓嬫媺鍒锋柊01-鏅��)](http://images0.cnblogs.com/blog2015/497279/201506/141204343486151.gif)
+
+## <a id="The_drop-down_refresh_02-Animation_image"></a>The drop-down refresh 02-Animation image
+```objc
+// Set the callback锛堜竴Once you enter the refresh status锛宼hen call the action of target锛宼hat is call [self loadNewData]锛�
+MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
+// Set the ordinary state of animated images
+[header setImages:idleImages forState:MJRefreshStateIdle];
+// Set the pulling state of animated images锛圗nter the status of refreshing as soon as loosen锛�
+[header setImages:pullingImages forState:MJRefreshStatePulling];
+// Set the refreshing state of animated images
+[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
+// Set header
+self.tableView.mj_header = header;
+```
+![(涓嬫媺鍒锋柊02-鍔ㄧ敾鍥剧墖)](http://images0.cnblogs.com/blog2015/497279/201506/141204402238389.gif)
+
+## <a id="The_drop-down_refresh_03-Hide_the_time"></a>The drop-down refresh 03-Hide the time
+```objc
+// Hide the time
+header.lastUpdatedTimeLabel.hidden = YES;
+```
+![(涓嬫媺鍒锋柊03-闅愯棌鏃堕棿)](http://images0.cnblogs.com/blog2015/497279/201506/141204456132944.gif)
+
+## <a id="The_drop-down_refresh_04-Hide_status_and_time"></a>The drop-down refresh 04-Hide status and time
+```objc
+// Hide the time
+header.lastUpdatedTimeLabel.hidden = YES;
+
+// Hide the status
+header.stateLabel.hidden = YES;
+```
+![(涓嬫媺鍒锋柊04-闅愯棌鐘舵�佸拰鏃堕棿0)](http://images0.cnblogs.com/blog2015/497279/201506/141204508639539.gif)
+
+## <a id="The_drop-down_refresh_05-DIY_title"></a>The drop-down refresh 05-DIY title
+```objc
+// Set title
+[header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];
+[header setTitle:@"Release to refresh" forState:MJRefreshStatePulling];
+[header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing];
+
+// Set font
+header.stateLabel.font = [UIFont systemFontOfSize:15];
+header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];
+
+// Set textColor
+header.stateLabel.textColor = [UIColor redColor];
+header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
+```
+![(涓嬫媺鍒锋柊05-鑷畾涔夋枃瀛�)](http://images0.cnblogs.com/blog2015/497279/201506/141204563633593.gif)
+
+## <a id="The_drop-down_refresh_06-DIY_the_control_of_refresh"></a>The drop-down refresh 06-DIY the control of refresh
+```objc
+self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
+// Implementation reference to MJDIYHeader.h鍜孧JDIYHeader.m
+```
+![(涓嬫媺鍒锋柊06-鑷畾涔夊埛鏂版帶浠�)](http://images0.cnblogs.com/blog2015/497279/201506/141205019261159.gif)
+
+## <a id="The_pull_to_refresh_01-Default"></a>The pull to refresh 01-Default
+```objc
+self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
+    //Call this Block When enter the refresh status automatically
+}];
+鎴�
+// Set the callback锛圤nce you enter the refresh status锛宼hen call the action of target锛宼hat is call [self loadMoreData]锛�
+self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+```
+![(涓婃媺鍒锋柊01-榛樿)](http://images0.cnblogs.com/blog2015/497279/201506/141205090047696.gif)
+
+## <a id="The_pull_to_refresh_02-Animation_image"></a>The pull to refresh 02-Animation image
+```objc
+// Set the callback锛圤nce you enter the refresh status锛宼hen call the action of target锛宼hat is call [self loadMoreData]锛�
+MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+
+// Set the refresh image
+[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
+
+// Set footer
+self.tableView.mj_footer = footer;
+```
+![(涓婃媺鍒锋柊02-鍔ㄧ敾鍥剧墖)](http://images0.cnblogs.com/blog2015/497279/201506/141205141445793.gif)
+
+## <a id="The_pull_to_refresh_03-Hide_the_title_of_refresh_status"></a>The pull to refresh 03-Hide the title of refresh status
+```objc
+// Hide the title of refresh status
+footer.refreshingTitleHidden = YES;
+// If does have not above method锛宼hen use footer.stateLabel.hidden = YES;
+```
+![(涓婃媺鍒锋柊03-闅愯棌鍒锋柊鐘舵�佺殑鏂囧瓧)](http://images0.cnblogs.com/blog2015/497279/201506/141205200985774.gif)
+
+## <a id="The_pull_to_refresh_04-All_loaded"></a>The pull to refresh 04-All loaded
+```objc
+//Become the status of NoMoreData
+[footer noticeNoMoreData];
+```
+![(涓婃媺鍒锋柊04-鍏ㄩ儴鍔犺浇瀹屾瘯)](http://images0.cnblogs.com/blog2015/497279/201506/141205248634686.gif)
+
+## <a id="The_pull_to_refresh_05-DIY_title"></a>The pull to refresh 05-DIY title
+```objc
+// Set title
+[footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle];
+[footer setTitle:@"Loading more ..." forState:MJRefreshStateRefreshing];
+[footer setTitle:@"No more data" forState:MJRefreshStateNoMoreData];
+
+// Set font
+footer.stateLabel.font = [UIFont systemFontOfSize:17];
+
+// Set textColor
+footer.stateLabel.textColor = [UIColor blueColor];
+```
+![(涓婃媺鍒锋柊05-鑷畾涔夋枃瀛�)](http://images0.cnblogs.com/blog2015/497279/201506/141205295511153.gif)
+
+## <a id="The_pull_to_refresh_06-Hidden_After_loaded"></a>The pull to refresh 06-Hidden After loaded
+```objc
+//Hidden current control of the pull to refresh
+self.tableView.mj_footer.hidden = YES;
+```
+![(涓婃媺鍒锋柊06-鍔犺浇鍚庨殣钘�)](http://images0.cnblogs.com/blog2015/497279/201506/141205343481821.gif)
+
+## <a id="The_pull_to_refresh_07-Automatic_back_of_the_pull01"></a>The pull to refresh 07-Automatic back of the pull01
+```objc
+self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+```
+![(涓婃媺鍒锋柊07-鑷姩鍥炲脊鐨勪笂鎷�01)](http://images0.cnblogs.com/blog2015/497279/201506/141205392239231.gif)
+
+## <a id="The_pull_to_refresh_08-Automatic_back_of_the_pull02"></a>The pull to refresh 08-Automatic back of the pull02
+```objc
+MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+
+// Set the normal state of the animated image
+[footer setImages:idleImages forState:MJRefreshStateIdle];
+//  Set the pulling state of animated images锛圗nter the status of refreshing as soon as loosen锛�
+[footer setImages:pullingImages forState:MJRefreshStatePulling];
+// Set the refreshing state of animated images
+[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
+
+// Set footer
+self.tableView.mj_footer = footer;
+```
+![(涓婃媺鍒锋柊07-鑷姩鍥炲脊鐨勪笂鎷�02)](http://images0.cnblogs.com/blog2015/497279/201506/141205441443628.gif)
+
+## <a id="The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh)"></a>The pull to refresh 09-DIY the control of refresh(Automatic refresh)
+```objc
+self.tableView.mj_footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+// Implementation reference to MJDIYAutoFooter.h鍜孧JDIYAutoFooter.m
+```
+![(涓婃媺鍒锋柊09-鑷畾涔夊埛鏂版帶浠�(鑷姩鍒锋柊))](http://images0.cnblogs.com/blog2015/497279/201506/141205500195866.gif)
+
+## <a id="The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back)"></a>The pull to refresh 10-DIY the control of refresh(Automatic back)
+```objc
+self.tableView.mj_footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+// Implementation reference to MJDIYBackFooter.h鍜孧JDIYBackFooter.m
+```
+![(涓婃媺鍒锋柊10-鑷畾涔夊埛鏂版帶浠�(鑷姩鍥炲脊))](http://images0.cnblogs.com/blog2015/497279/201506/141205560666819.gif)
+
+## <a id="UICollectionView01-The_pull_and_drop-down_refresh"></a>UICollectionView01-The pull and drop-down refresh
+```objc
+// The drop-down refresh
+self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+   //Call this Block When enter the refresh status automatically 
+}];
+
+// The pull to refresh
+self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
+   //Call this Block When enter the refresh status automatically
+}];
+```
+![(UICollectionView01-涓婁笅鎷夊埛鏂�)](http://images0.cnblogs.com/blog2015/497279/201506/141206021603758.gif)
+
+## <a id="UIWebView01-The_drop-down_refresh"></a>UIWebView01-The drop-down refresh
+```objc
+//Add the control of The drop-down refresh
+self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+   //Call this Block When enter the refresh status automatically
+}];
+```
+![(UICollectionView01-涓婁笅鎷夊埛鏂�)](http://images0.cnblogs.com/blog2015/497279/201506/141206080514524.gif)
+
+## Remind
+* ARC
+* iOS>=6.0
+* iPhone \ iPad screen anyway
+
+## <a id="Hope"></a>Hope
+* If you find bug when used锛孒ope you can Issues me锛孴hank you or try to download the latest code of this framework to see the BUG has been fixed or not锛�
+* If you find the function is not enough when used锛孒ope you can Issues me锛孖 very much to add more useful function to this framework 锛孴hank you !
+* If you want to contribute code for MJRefresh锛宲lease Pull Requests me
+*  If you use MJRefresh in your develop app锛孒ope you can go to[CocoaControls](https://www.cocoacontrols.com/controls/mjrefresh)to add the iTunes path
+ of you app锛孖 Will install your app锛宎nd according to the usage of many app锛宼o be a better design and improve to MJRefresh锛孴hank you !
+   * StepO1锛圵eChat is just an Example锛孍xplore鈥淵our app name itunes鈥濓級
+![(step01)](http://ww4.sinaimg.cn/mw1024/800cdf9ctw1eq0viiv5rsj20sm0ea41t.jpg)
+   * StepO2
+![(step02)](http://ww2.sinaimg.cn/mw1024/800cdf9ctw1eq0vilejxlj20tu0me7a0.jpg)
+   * StepO3
+![(step03)](http://ww1.sinaimg.cn/mw1024/800cdf9ctw1eq0viocpo5j20wc0dc0un.jpg)
+   * StepO4
+![(step04)](http://ww3.sinaimg.cn/mw1024/800cdf9ctw1eq0vir137xj20si0gewgu.jpg)
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.h
deleted file mode 100644
index 9f6dc53..0000000
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-//  UIScrollView+MJRefresh.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/3/4.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//  缁橲crollView澧炲姞涓嬫媺鍒锋柊銆佷笂鎷夊埛鏂扮殑鍔熻兘
-
-#import <UIKit/UIKit.h>
-
-@class MJRefreshHeader, MJRefreshFooter;
-
-@interface UIScrollView (MJRefresh)
-/** 涓嬫媺鍒锋柊鎺т欢 */
-@property (strong, nonatomic) MJRefreshHeader *header;
-/** 涓婃媺鍒锋柊鎺т欢 */
-@property (strong, nonatomic) MJRefreshFooter *footer;
-
-#pragma mark - other
-- (NSInteger)totalDataCount;
-@property (copy, nonatomic) void (^reloadDataBlock)(NSInteger totalDataCount);
-@end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.h
old mode 100644
new mode 100755
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.m
old mode 100644
new mode 100755
index fd1e8c8..2002a40
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASCompositeConstraint.m
@@ -97,7 +97,7 @@
 
 #pragma mark - Animator proxy
 
-#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
 
 - (MASConstraint *)animator {
     for (MASConstraint *constraint in self.childConstraints) {
@@ -129,6 +129,12 @@
     }
 }
 
+- (void)setInset:(CGFloat)inset {
+    for (MASConstraint *constraint in self.childConstraints) {
+        constraint.inset = inset;
+    }
+}
+
 - (void)setOffset:(CGFloat)offset {
     for (MASConstraint *constraint in self.childConstraints) {
         constraint.offset = offset;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint+Private.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint+Private.h
old mode 100644
new mode 100755
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.h
old mode 100644
new mode 100755
index a4b7a78..3eaa8a1
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.h
@@ -27,6 +27,13 @@
 /**
  *	Modifies the NSLayoutConstraint constant,
  *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
+ */
+- (MASConstraint * (^)(CGFloat inset))inset;
+
+/**
+ *	Modifies the NSLayoutConstraint constant,
+ *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
  *  NSLayoutAttributeWidth, NSLayoutAttributeHeight
  */
 - (MASConstraint * (^)(CGSize offset))sizeOffset;
@@ -66,17 +73,17 @@
 /**
  *	Sets the NSLayoutConstraint priority to MASLayoutPriorityLow
  */
-- (MASConstraint * (^)())priorityLow;
+- (MASConstraint * (^)(void))priorityLow;
 
 /**
  *	Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium
  */
-- (MASConstraint * (^)())priorityMedium;
+- (MASConstraint * (^)(void))priorityMedium;
 
 /**
  *	Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh
  */
-- (MASConstraint * (^)())priorityHigh;
+- (MASConstraint * (^)(void))priorityHigh;
 
 /**
  *	Sets the constraint relation to NSLayoutRelationEqual
@@ -127,7 +134,14 @@
 - (MASConstraint *)centerY;
 - (MASConstraint *)baseline;
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASConstraint *)firstBaseline;
+- (MASConstraint *)lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 - (MASConstraint *)leftMargin;
 - (MASConstraint *)rightMargin;
@@ -159,6 +173,13 @@
 /**
  *	Modifies the NSLayoutConstraint constant,
  *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
+ */
+- (void)setInset:(CGFloat)inset;
+
+/**
+ *	Modifies the NSLayoutConstraint constant,
+ *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
  *  NSLayoutAttributeWidth, NSLayoutAttributeHeight
  */
 - (void)setSizeOffset:(CGSize)sizeOffset;
@@ -178,7 +199,7 @@
 
 // NSLayoutConstraint Installation support
 
-#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
 /**
  *  Whether or not to go through the animator proxy when modifying the constraint
  */
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.m
old mode 100644
new mode 100755
index 8497912..52de590
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraint.m
@@ -62,21 +62,21 @@
 
 #pragma mark - MASLayoutPriority proxies
 
-- (MASConstraint * (^)())priorityLow {
+- (MASConstraint * (^)(void))priorityLow {
     return ^id{
         self.priority(MASLayoutPriorityDefaultLow);
         return self;
     };
 }
 
-- (MASConstraint * (^)())priorityMedium {
+- (MASConstraint * (^)(void))priorityMedium {
     return ^id{
         self.priority(MASLayoutPriorityDefaultMedium);
         return self;
     };
 }
 
-- (MASConstraint * (^)())priorityHigh {
+- (MASConstraint * (^)(void))priorityHigh {
     return ^id{
         self.priority(MASLayoutPriorityDefaultHigh);
         return self;
@@ -88,6 +88,13 @@
 - (MASConstraint * (^)(MASEdgeInsets))insets {
     return ^id(MASEdgeInsets insets){
         self.insets = insets;
+        return self;
+    };
+}
+
+- (MASConstraint * (^)(CGFloat))inset {
+    return ^id(CGFloat inset){
+        self.inset = inset;
         return self;
     };
 }
@@ -208,7 +215,18 @@
     return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline];
 }
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASConstraint *)firstBaseline {
+    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
+}
+- (MASConstraint *)lastBaseline {
+    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
+}
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 - (MASConstraint *)leftMargin {
     return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
@@ -258,13 +276,15 @@
 
 - (void)setInsets:(MASEdgeInsets __unused)insets { MASMethodNotImplemented(); }
 
+- (void)setInset:(CGFloat __unused)inset { MASMethodNotImplemented(); }
+
 - (void)setSizeOffset:(CGSize __unused)sizeOffset { MASMethodNotImplemented(); }
 
 - (void)setCenterOffset:(CGPoint __unused)centerOffset { MASMethodNotImplemented(); }
 
 - (void)setOffset:(CGFloat __unused)offset { MASMethodNotImplemented(); }
 
-#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
 
 - (MASConstraint *)animator { MASMethodNotImplemented(); }
 
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.h
old mode 100644
new mode 100755
index 7e31858..d9b58f4
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.h
@@ -1,5 +1,5 @@
 //
-//  MASConstraintBuilder.h
+//  MASConstraintMaker.h
 //  Masonry
 //
 //  Created by Jonas Budelmann on 20/07/13.
@@ -22,7 +22,14 @@
     MASAttributeCenterY = 1 << NSLayoutAttributeCenterY,
     MASAttributeBaseline = 1 << NSLayoutAttributeBaseline,
     
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+    
+    MASAttributeFirstBaseline = 1 << NSLayoutAttributeFirstBaseline,
+    MASAttributeLastBaseline = 1 << NSLayoutAttributeLastBaseline,
+    
+#endif
+    
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
     
     MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin,
     MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin,
@@ -60,7 +67,14 @@
 @property (nonatomic, strong, readonly) MASConstraint *centerY;
 @property (nonatomic, strong, readonly) MASConstraint *baseline;
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+@property (nonatomic, strong, readonly) MASConstraint *firstBaseline;
+@property (nonatomic, strong, readonly) MASConstraint *lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 @property (nonatomic, strong, readonly) MASConstraint *leftMargin;
 @property (nonatomic, strong, readonly) MASConstraint *rightMargin;
@@ -114,7 +128,7 @@
 /**
  *	initialises the maker with a default view
  *
- *	@param	view	any MASConstrait are created with this view as the first item
+ *	@param	view	any MASConstraint are created with this view as the first item
  *
  *	@return	a new MASConstraintMaker
  */
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.m
old mode 100644
new mode 100755
index 78f93ec..f11492a
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASConstraintMaker.m
@@ -1,5 +1,5 @@
 //
-//  MASConstraintBuilder.m
+//  MASConstraintMaker.m
 //  Masonry
 //
 //  Created by Jonas Budelmann on 20/07/13.
@@ -78,7 +78,10 @@
     __unused MASAttribute anyAttribute = (MASAttributeLeft | MASAttributeRight | MASAttributeTop | MASAttributeBottom | MASAttributeLeading
                                           | MASAttributeTrailing | MASAttributeWidth | MASAttributeHeight | MASAttributeCenterX
                                           | MASAttributeCenterY | MASAttributeBaseline
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+                                          | MASAttributeFirstBaseline | MASAttributeLastBaseline
+#endif
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
                                           | MASAttributeLeftMargin | MASAttributeRightMargin | MASAttributeTopMargin | MASAttributeBottomMargin
                                           | MASAttributeLeadingMargin | MASAttributeTrailingMargin | MASAttributeCenterXWithinMargins
                                           | MASAttributeCenterYWithinMargins
@@ -101,7 +104,14 @@
     if (attrs & MASAttributeCenterY) [attributes addObject:self.view.mas_centerY];
     if (attrs & MASAttributeBaseline) [attributes addObject:self.view.mas_baseline];
     
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+    
+    if (attrs & MASAttributeFirstBaseline) [attributes addObject:self.view.mas_firstBaseline];
+    if (attrs & MASAttributeLastBaseline) [attributes addObject:self.view.mas_lastBaseline];
+    
+#endif
+    
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
     
     if (attrs & MASAttributeLeftMargin) [attributes addObject:self.view.mas_leftMargin];
     if (attrs & MASAttributeRightMargin) [attributes addObject:self.view.mas_rightMargin];
@@ -182,7 +192,20 @@
     };
 }
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASConstraint *)firstBaseline {
+    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
+}
+
+- (MASConstraint *)lastBaseline {
+    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
+}
+
+#endif
+
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 - (MASConstraint *)leftMargin {
     return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASLayoutConstraint.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASLayoutConstraint.h
old mode 100644
new mode 100755
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASLayoutConstraint.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASLayoutConstraint.m
old mode 100644
new mode 100755
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASUtilities.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASUtilities.h
old mode 100644
new mode 100755
index 1b237b1..1dbfd93
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASUtilities.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASUtilities.h
@@ -8,7 +8,9 @@
 
 #import <Foundation/Foundation.h>
 
-#if TARGET_OS_IPHONE
+
+
+#if TARGET_OS_IPHONE || TARGET_OS_TV
 
     #import <UIKit/UIKit.h>
     #define MAS_VIEW UIView
@@ -49,13 +51,15 @@
  *
  *  MASAttachKeys(view1, view2);
  */
-#define MASAttachKeys(...)                                                    \
-    NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__);     \
-    for (id key in keyPairs.allKeys) {                                        \
-        id obj = keyPairs[key];                                               \
-        NSAssert([obj respondsToSelector:@selector(setMas_key:)],             \
-                 @"Cannot attach mas_key to %@", obj);                        \
-        [obj setMas_key:key];                                                 \
+#define MASAttachKeys(...)                                                        \
+    {                                                                             \
+        NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__);     \
+        for (id key in keyPairs.allKeys) {                                        \
+            id obj = keyPairs[key];                                               \
+            NSAssert([obj respondsToSelector:@selector(setMas_key:)],             \
+                     @"Cannot attach mas_key to %@", obj);                        \
+            [obj setMas_key:key];                                                 \
+        }                                                                         \
     }
 
 /**
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.h
old mode 100644
new mode 100755
index f8eb700..601c25d
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.h
@@ -1,5 +1,5 @@
 //
-//  MASAttribute.h
+//  MASViewAttribute.h
 //  Masonry
 //
 //  Created by Jonas Budelmann on 21/07/13.
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.m
old mode 100644
new mode 100755
index 7131025..e573e8b
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewAttribute.m
@@ -1,5 +1,5 @@
 //
-//  MASAttribute.m
+//  MASViewAttribute.m
 //  Masonry
 //
 //  Created by Jonas Budelmann on 21/07/13.
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.h
old mode 100644
new mode 100755
index 5c78f7a..ec390d1
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.h
@@ -1,5 +1,5 @@
 //
-//  MASConstraint.h
+//  MASViewConstraint.h
 //  Masonry
 //
 //  Created by Jonas Budelmann on 20/07/13.
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.m
old mode 100644
new mode 100755
index b0f3650..173eec1
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/MASViewConstraint.m
@@ -1,5 +1,5 @@
 //
-//  MASConstraint.m
+//  MASViewConstraint.m
 //  Masonry
 //
 //  Created by Jonas Budelmann on 20/07/13.
@@ -86,7 +86,7 @@
 - (void)setLayoutConstant:(CGFloat)layoutConstant {
     _layoutConstant = layoutConstant;
 
-#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
     if (self.useAnimator) {
         [self.layoutConstraint.animator setConstant:layoutConstant];
     } else {
@@ -175,6 +175,7 @@
             NSMutableArray *children = NSMutableArray.new;
             for (id attr in attribute) {
                 MASViewConstraint *viewConstraint = [self copy];
+                viewConstraint.layoutRelation = relation;
                 viewConstraint.secondViewAttribute = attr;
                 [children addObject:viewConstraint];
             }
@@ -211,7 +212,7 @@
 
 #pragma mark - Animator proxy
 
-#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
 
 - (MASConstraint *)animator {
     self.useAnimator = YES;
@@ -253,6 +254,10 @@
     }
 }
 
+- (void)setInset:(CGFloat)inset {
+    [self setInsets:(MASEdgeInsets){.top = inset, .left = inset, .bottom = inset, .right = inset}];
+}
+
 - (void)setOffset:(CGFloat)offset {
     self.layoutConstant = offset;
 }
@@ -288,28 +293,21 @@
 #pragma mark - MASConstraint
 
 - (void)activate {
-    if ([self supportsActiveProperty] && self.layoutConstraint) {
-        if (self.hasBeenInstalled) {
-            return;
-        }
-        self.layoutConstraint.active = YES;
-        [self.firstViewAttribute.view.mas_installedConstraints addObject:self];
-    } else {
-        [self install];
-    }
+    [self install];
 }
 
 - (void)deactivate {
-    if ([self supportsActiveProperty]) {
-        self.layoutConstraint.active = NO;
-        [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
-    } else {
-        [self uninstall];
-    }
+    [self uninstall];
 }
 
 - (void)install {
     if (self.hasBeenInstalled) {
+        return;
+    }
+    
+    if ([self supportsActiveProperty] && self.layoutConstraint) {
+        self.layoutConstraint.active = YES;
+        [self.firstViewAttribute.view.mas_installedConstraints addObject:self];
         return;
     }
     
@@ -387,6 +385,12 @@
 }
 
 - (void)uninstall {
+    if ([self supportsActiveProperty]) {
+        self.layoutConstraint.active = NO;
+        [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
+        return;
+    }
+    
     [self.installedView removeConstraint:self.layoutConstraint];
     self.layoutConstraint = nil;
     self.installedView = nil;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/Masonry.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/Masonry.h
old mode 100644
new mode 100755
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.h
old mode 100644
new mode 100755
index 83be23d..587618d
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.h
@@ -25,7 +25,7 @@
  *
  *  @return Array of created MASConstraints
  */
-- (NSArray *)mas_makeConstraints:(void (^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_makeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 /**
  *  Creates a MASConstraintMaker with each view in the callee.
@@ -36,7 +36,7 @@
  *
  *  @return Array of created/updated MASConstraints
  */
-- (NSArray *)mas_updateConstraints:(void (^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_updateConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 /**
  *  Creates a MASConstraintMaker with each view in the callee.
@@ -47,7 +47,7 @@
  *
  *  @return Array of created/updated MASConstraints
  */
-- (NSArray *)mas_remakeConstraints:(void (^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_remakeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 /**
  *  distribute with fixed spacing
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.m
old mode 100644
new mode 100755
index 2988683..831d8cd
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASAdditions.m
@@ -48,12 +48,12 @@
     if (axisType == MASAxisTypeHorizontal) {
         MAS_VIEW *prev;
         for (int i = 0; i < self.count; i++) {
-            MAS_VIEW *v = [self objectAtIndex:i];
+            MAS_VIEW *v = self[i];
             [v mas_makeConstraints:^(MASConstraintMaker *make) {
                 if (prev) {
                     make.width.equalTo(prev);
                     make.left.equalTo(prev.mas_right).offset(fixedSpacing);
-                    if (i == (CGFloat)self.count - 1) {//last one
+                    if (i == self.count - 1) {//last one
                         make.right.equalTo(tempSuperView).offset(-tailSpacing);
                     }
                 }
@@ -68,12 +68,12 @@
     else {
         MAS_VIEW *prev;
         for (int i = 0; i < self.count; i++) {
-            MAS_VIEW *v = [self objectAtIndex:i];
+            MAS_VIEW *v = self[i];
             [v mas_makeConstraints:^(MASConstraintMaker *make) {
                 if (prev) {
                     make.height.equalTo(prev);
                     make.top.equalTo(prev.mas_bottom).offset(fixedSpacing);
-                    if (i == (CGFloat)self.count - 1) {//last one
+                    if (i == self.count - 1) {//last one
                         make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                     }                    
                 }
@@ -97,21 +97,20 @@
     if (axisType == MASAxisTypeHorizontal) {
         MAS_VIEW *prev;
         for (int i = 0; i < self.count; i++) {
-            MAS_VIEW *v = [self objectAtIndex:i];
+            MAS_VIEW *v = self[i];
             [v mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.width.equalTo(@(fixedItemLength));
                 if (prev) {
-                    CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
-                    make.width.equalTo(@(fixedItemLength));
-                    if (i == (CGFloat)self.count - 1) {//last one
+                    if (i == self.count - 1) {//last one
                         make.right.equalTo(tempSuperView).offset(-tailSpacing);
                     }
                     else {
+                        CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                         make.right.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
                     }
                 }
                 else {//first one
                     make.left.equalTo(tempSuperView).offset(leadSpacing);
-                    make.width.equalTo(@(fixedItemLength));
                 }
             }];
             prev = v;
@@ -120,21 +119,20 @@
     else {
         MAS_VIEW *prev;
         for (int i = 0; i < self.count; i++) {
-            MAS_VIEW *v = [self objectAtIndex:i];
+            MAS_VIEW *v = self[i];
             [v mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.height.equalTo(@(fixedItemLength));
                 if (prev) {
-                    CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
-                    make.height.equalTo(@(fixedItemLength));
-                    if (i == (CGFloat)self.count - 1) {//last one
+                    if (i == self.count - 1) {//last one
                         make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                     }
                     else {
+                        CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                         make.bottom.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
                     }
                 }
                 else {//first one
                     make.top.equalTo(tempSuperView).offset(leadSpacing);
-                    make.height.equalTo(@(fixedItemLength));
                 }
             }];
             prev = v;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASShorthandAdditions.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSArray+MASShorthandAdditions.h
old mode 100644
new mode 100755
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.h
old mode 100644
new mode 100755
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m
old mode 100644
new mode 100755
index 3d10ac2..ab539a2
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m
@@ -44,7 +44,12 @@
             @(NSLayoutAttributeCenterY)  : @"centerY",
             @(NSLayoutAttributeBaseline) : @"baseline",
             
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+            @(NSLayoutAttributeFirstBaseline) : @"firstBaseline",
+            @(NSLayoutAttributeLastBaseline) : @"lastBaseline",
+#endif
+            
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
             @(NSLayoutAttributeLeftMargin)           : @"leftMargin",
             @(NSLayoutAttributeRightMargin)          : @"rightMargin",
             @(NSLayoutAttributeTopMargin)            : @"topMargin",
@@ -66,7 +71,7 @@
     static dispatch_once_t once;
     static NSDictionary *descriptionMap;
     dispatch_once(&once, ^{
-#if TARGET_OS_IPHONE
+#if TARGET_OS_IPHONE || TARGET_OS_TV
         descriptionMap = @{
             @(MASLayoutPriorityDefaultHigh)      : @"high",
             @(MASLayoutPriorityDefaultLow)       : @"low",
@@ -106,16 +111,16 @@
 
     [description appendFormat:@" %@", [self.class descriptionForObject:self.firstItem]];
     if (self.firstAttribute != NSLayoutAttributeNotAnAttribute) {
-        [description appendFormat:@".%@", [self.class.layoutAttributeDescriptionsByValue objectForKey:@(self.firstAttribute)]];
+        [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.firstAttribute)]];
     }
 
-    [description appendFormat:@" %@", [self.class.layoutRelationDescriptionsByValue objectForKey:@(self.relation)]];
+    [description appendFormat:@" %@", self.class.layoutRelationDescriptionsByValue[@(self.relation)]];
 
     if (self.secondItem) {
         [description appendFormat:@" %@", [self.class descriptionForObject:self.secondItem]];
     }
     if (self.secondAttribute != NSLayoutAttributeNotAnAttribute) {
-        [description appendFormat:@".%@", [self.class.layoutAttributeDescriptionsByValue objectForKey:@(self.secondAttribute)]];
+        [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.secondAttribute)]];
     }
     
     if (self.multiplier != 1) {
@@ -131,7 +136,7 @@
     }
 
     if (self.priority != MASLayoutPriorityRequired) {
-        [description appendFormat:@" ^%@", [self.class.layoutPriorityDescriptionsByValue objectForKey:@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
+        [description appendFormat:@" ^%@", self.class.layoutPriorityDescriptionsByValue[@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
     }
 
     [description appendString:@">"];
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.h
old mode 100644
new mode 100755
index 94e3050..f7343d2
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.h
@@ -32,7 +32,14 @@
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline;
 @property (nonatomic, strong, readonly) MASViewAttribute *(^mas_attribute)(NSLayoutAttribute attr);
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_firstBaseline;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_leftMargin;
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_rightMargin;
@@ -42,6 +49,16 @@
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_trailingMargin;
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_centerXWithinMargins;
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_centerYWithinMargins;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuide API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0));
 
 #endif
 
@@ -67,7 +84,7 @@
  *
  *  @return Array of created MASConstraints
  */
-- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 /**
  *  Creates a MASConstraintMaker with the callee view.
@@ -78,7 +95,7 @@
  *
  *  @return Array of created/updated MASConstraints
  */
-- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 /**
  *  Creates a MASConstraintMaker with the callee view.
@@ -89,6 +106,6 @@
  *
  *  @return Array of created/updated MASConstraints
  */
-- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 @end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.m
old mode 100644
new mode 100755
index acfaa52..4fa07b4
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.m
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASAdditions.m
@@ -87,7 +87,18 @@
     };
 }
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASViewAttribute *)mas_firstBaseline {
+    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeFirstBaseline];
+}
+- (MASViewAttribute *)mas_lastBaseline {
+    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLastBaseline];
+}
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 - (MASViewAttribute *)mas_leftMargin {
     return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeftMargin];
@@ -123,6 +134,26 @@
 
 #endif
 
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+- (MASViewAttribute *)mas_safeAreaLayoutGuide {
+    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideTop {
+    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeTop];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideBottom {
+    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideLeft {
+    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeLeft];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideRight {
+    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeRight];
+}
+
+#endif
+
 #pragma mark - associated properties
 
 - (id)mas_key {
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASShorthandAdditions.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASShorthandAdditions.h
old mode 100644
new mode 100755
index 5553912..1c19a94
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASShorthandAdditions.h
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/View+MASShorthandAdditions.h
@@ -29,7 +29,14 @@
 @property (nonatomic, strong, readonly) MASViewAttribute *baseline;
 @property (nonatomic, strong, readonly) MASViewAttribute *(^attribute)(NSLayoutAttribute attr);
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *firstBaseline;
+@property (nonatomic, strong, readonly) MASViewAttribute *lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 @property (nonatomic, strong, readonly) MASViewAttribute *leftMargin;
 @property (nonatomic, strong, readonly) MASViewAttribute *rightMargin;
@@ -39,6 +46,15 @@
 @property (nonatomic, strong, readonly) MASViewAttribute *trailingMargin;
 @property (nonatomic, strong, readonly) MASViewAttribute *centerXWithinMargins;
 @property (nonatomic, strong, readonly) MASViewAttribute *centerYWithinMargins;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0));
 
 #endif
 
@@ -67,7 +83,14 @@
 MAS_ATTR_FORWARD(centerY);
 MAS_ATTR_FORWARD(baseline);
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+MAS_ATTR_FORWARD(firstBaseline);
+MAS_ATTR_FORWARD(lastBaseline);
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 MAS_ATTR_FORWARD(leftMargin);
 MAS_ATTR_FORWARD(rightMargin);
@@ -80,19 +103,28 @@
 
 #endif
 
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+MAS_ATTR_FORWARD(safeAreaLayoutGuideTop);
+MAS_ATTR_FORWARD(safeAreaLayoutGuideBottom);
+MAS_ATTR_FORWARD(safeAreaLayoutGuideLeft);
+MAS_ATTR_FORWARD(safeAreaLayoutGuideRight);
+
+#endif
+
 - (MASViewAttribute *(^)(NSLayoutAttribute))attribute {
     return [self mas_attribute];
 }
 
-- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block {
+- (NSArray *)makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
     return [self mas_makeConstraints:block];
 }
 
-- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block {
+- (NSArray *)updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
     return [self mas_updateConstraints:block];
 }
 
-- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block {
+- (NSArray *)remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
     return [self mas_remakeConstraints:block];
 }
 
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/ViewController+MASAdditions.h b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/ViewController+MASAdditions.h
old mode 100644
new mode 100755
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/ViewController+MASAdditions.m b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/Masonry/ViewController+MASAdditions.m
old mode 100644
new mode 100755
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/en.lproj/EZMain.strings b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/en.lproj/EZMain.strings
index 6eb2c5e..39b9b39 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/en.lproj/EZMain.strings
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/en.lproj/EZMain.strings
@@ -1,19 +1,19 @@
 
 "0SD-HE-m6y.text" = "9:00";
-"4Eh-hh-84T.normalTitle" = "Two-Way Audio";
+"4Eh-hh-84T.normalTitle" = "Intercom";
 "4ol-dw-GX9.normalTitle" = "Update";
 "68c-It-TWh.text" = "00:00";
 "6Za-cr-nzm.title" = "Cancel";
 "6yZ-4A-Vvl.title" = "Delete";
 "8Y3-zX-Cnw.text" = "Device Name";
-"9VU-hP-zCR.normalTitle" = "API Demo";
+"9VU-hP-zCR.normalTitle" = "API D";
 "9VV-np-Xv9.text" = "123456789";
 "AUI-sk-GM6.text" = "PIR Event Occurred";
 "Bu9-Qz-3Ij.normalTitle" = "Video in SD Card";
 "E3a-LC-jG1.normalTitle" = "Cloud Storage";
 "EOh-Lf-fJU.title" = "Item";
 "ESG-x4-J8R.text" = "00:00";
-"EWl-dl-v7z.normalTitle" = "LAN Demo";
+"EWl-dl-v7z.normalTitle" = "LAN D";
 "F62-D9-UTh.segmentTitles[0]" = "Me";
 "F62-D9-UTh.segmentTitles[1]" = "Share";
 "IqR-oy-XmU.text" = "  00:00";
@@ -34,7 +34,7 @@
 "es2-2O-C6T.normalTitle" = "Record";
 "fUI-tR-jyG.normalTitle" = "PTZ";
 "oq1-TQ-afe.text" = "PIR Event";
-"p2R-3f-bRm.normalTitle" = "Internet Demo";
+"p2R-3f-bRm.normalTitle" = "Internet D";
 "pg3-8C-ucI.text" = "No data.";
 "r1W-d8-Rg7.placeholder" = "Input the device name.";
 "ruu-Hg-3Tx.text" = "00:00";
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/EZMain.strings b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/EZMain.strings
index ecf56fa..3f48d05 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/EZMain.strings
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/EZMain.strings
@@ -20,7 +20,7 @@
 /* Class = "UILabel"; text = "璁惧鍚�"; ObjectID = "8Y3-zX-Cnw"; */
 "8Y3-zX-Cnw.text" = "璁惧鍚�";
 
-/* Class = "UIButton"; normalTitle = "鎺ュ彛璋冪敤Demo"; ObjectID = "9VU-hP-zCR"; */
+/* Class = "UIButton"; normalTitle = "鎺ュ彛璋冪敤D"; ObjectID = "9VU-hP-zCR"; */
 "9VU-hP-zCR.normalTitle" = "璺宠浆娴嬭瘯";
 
 /* Class = "UILabel"; text = "123456789"; ObjectID = "9VV-np-Xv9"; */
@@ -41,8 +41,8 @@
 /* Class = "UILabel"; text = "00:00"; ObjectID = "ESG-x4-J8R"; */
 "ESG-x4-J8R.text" = "00:00";
 
-/* Class = "UIButton"; normalTitle = "灞�鍩熺綉Demo"; ObjectID = "EWl-dl-v7z"; */
-"EWl-dl-v7z.normalTitle" = "灞�鍩熺綉Demo";
+/* Class = "UIButton"; normalTitle = "灞�鍩熺綉D"; ObjectID = "EWl-dl-v7z"; */
+"EWl-dl-v7z.normalTitle" = "灞�鍩熺綉D";
 
 /* Class = "UISegmentedControl"; F62-D9-UTh.segmentTitles[0] = "鎴戠殑"; ObjectID = "F62-D9-UTh"; */
 "F62-D9-UTh.segmentTitles[0]" = "鎴戠殑";
@@ -104,8 +104,8 @@
 /* Class = "UILabel"; text = "浜轰綋鎰熷簲浜嬩欢"; ObjectID = "oq1-TQ-afe"; */
 "oq1-TQ-afe.text" = "浜轰綋鎰熷簲浜嬩欢";
 
-/* Class = "UIButton"; normalTitle = "浜掕仈缃慏emo"; ObjectID = "p2R-3f-bRm"; */
-"p2R-3f-bRm.normalTitle" = "浜掕仈缃慏emo";
+/* Class = "UIButton"; normalTitle = "浜掕仈缃慏"; ObjectID = "p2R-3f-bRm"; */
+"p2R-3f-bRm.normalTitle" = "浜掕仈缃慏";
 
 /* Class = "UILabel"; text = "绌虹┖濡備篃"; ObjectID = "pg3-8C-ucI"; */
 "pg3-8C-ucI.text" = "绌虹┖濡備篃";
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/Localizable.strings b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/Localizable.strings
index a071eab..2de8646 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/Localizable.strings
+++ b/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/zh-Hans.lproj/Localizable.strings
@@ -1,6 +1,6 @@
 /* 
   Localizable.strings
-  EZOpenSDKDemo
+  EZOpenSDK
 
   Created by linyong on 2017/9/7.
   Copyright 漏 2017骞� Ezviz. All rights reserved.
diff --git a/EZSDK.IOS/EZSDK.IOS/ApiDefinition.cs b/EZSDK.IOS/EZSDK.IOS/ApiDefinition.cs
index a0652ef..c0c1ae3 100644
--- a/EZSDK.IOS/EZSDK.IOS/ApiDefinition.cs
+++ b/EZSDK.IOS/EZSDK.IOS/ApiDefinition.cs
@@ -15,20 +15,35 @@
 		[Export("initLibWithAppKey:globalAppKey:")]
 		bool InitLibWithAppKey(string appKey, string globalAppKey);
 
-		// +(void)playBackVideo:(NSObject *)deviceInfo;
+		// +(void)setEZAccessToken:(NSString *)accessToken;
 		[Static]
-		[Export("playBackVideo:")]
-		void PlayBackVideo(NSObject deviceInfo);
+		[Export("setEZAccessToken:")]
+		void SetEZAccessToken(string accessToken);
+
+		// +(void)go2EZvizMonitor;
+		[Static]
+		[Export("go2EZvizMonitor")]
+		void Go2EZvizMonitor();
+
+		// +(void)addEzvizMonitor;
+		[Static]
+		[Export("addEzvizMonitor")]
+		void AddEzvizMonitor();
 
 		// +(void)Play:(NSObject *)deviceInfo;
 		[Static]
 		[Export("Play:")]
 		void Play(NSObject deviceInfo);
 
-		// +(void)go2EZvizMonitor;
+		// +(void)setting:(NSObject *)deviceInfo;
 		[Static]
-		[Export("go2EZvizMonitor")]
-		void Go2EZvizMonitor();
+		[Export("setting:")]
+		void Setting(NSObject deviceInfo);
+
+		// +(void)playBackVideo:(NSObject *)deviceInfo;
+		[Static]
+		[Export("playBackVideo:")]
+		void PlayBackVideo(NSObject deviceInfo);
 	}
 }
 
diff --git a/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a b/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
index 70644fb..c6ec33e 100644
--- a/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
+++ b/EZSDK.IOS/EZSDK.IOS/Library/libEZSDK.a
Binary files differ
diff --git a/EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs b/EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs
index 41c209a..af36ac9 100644
--- a/EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs
+++ b/EZSDK.IOS/EZSDK.IOS/Properties/AssemblyInfo.cs
@@ -25,7 +25,7 @@
 // The form "{Major}.{Minor}.*" will automatically update the build and revision,
 // and "{Major}.{Minor}.{Build}.*" will update just the revision.
 
-[assembly: AssemblyVersion("1.0.5")]
+[assembly: AssemblyVersion("1.0.6")]
 
 // The following attributes are used to specify the signing key for the assembly,
 // if desired. See the Mono documentation for more information about signing.
diff --git a/EZSDK/EZSDK.xcodeproj/project.pbxproj b/EZSDK/EZSDK.xcodeproj/project.pbxproj
index ff93deb..8359177 100644
--- a/EZSDK/EZSDK.xcodeproj/project.pbxproj
+++ b/EZSDK/EZSDK.xcodeproj/project.pbxproj
@@ -17,24 +17,6 @@
 		B9BC999F25C0FFBD00C024FE /* DALabeledCircularProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97DF25C0FFB600C024FE /* DALabeledCircularProgressView.m */; };
 		B9BC99A025C0FFBD00C024FE /* DACircularProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97E025C0FFB600C024FE /* DACircularProgressView.m */; };
 		B9BC99A125C0FFBD00C024FE /* DDCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97E525C0FFB600C024FE /* DDCollectionViewFlowLayout.m */; };
-		B9BC99A225C0FFBD00C024FE /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97E725C0FFB600C024FE /* UIScrollView+MJRefresh.m */; };
-		B9BC99A325C0FFBD00C024FE /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97E825C0FFB600C024FE /* MJRefreshConst.m */; };
-		B9BC99A425C0FFBD00C024FE /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97ED25C0FFB600C024FE /* UIScrollView+MJExtension.m */; };
-		B9BC99A525C0FFBD00C024FE /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97F025C0FFB600C024FE /* UIView+MJExtension.m */; };
-		B9BC99A625C0FFBD00C024FE /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97F725C0FFB600C024FE /* MJRefreshBackGifFooter.m */; };
-		B9BC99A725C0FFBD00C024FE /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97F825C0FFB600C024FE /* MJRefreshBackStateFooter.m */; };
-		B9BC99A825C0FFBD00C024FE /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97F925C0FFB600C024FE /* MJRefreshBackNormalFooter.m */; };
-		B9BC99A925C0FFBD00C024FE /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97FE25C0FFB600C024FE /* MJRefreshAutoStateFooter.m */; };
-		B9BC99AA25C0FFBD00C024FE /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC97FF25C0FFB600C024FE /* MJRefreshAutoGifFooter.m */; };
-		B9BC99AB25C0FFBD00C024FE /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980025C0FFB600C024FE /* MJRefreshAutoNormalFooter.m */; };
-		B9BC99AC25C0FFBD00C024FE /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980225C0FFB600C024FE /* MJRefreshNormalHeader.m */; };
-		B9BC99AD25C0FFBD00C024FE /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980625C0FFB600C024FE /* MJRefreshStateHeader.m */; };
-		B9BC99AE25C0FFBD00C024FE /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980725C0FFB600C024FE /* MJRefreshGifHeader.m */; };
-		B9BC99AF25C0FFBD00C024FE /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980925C0FFB600C024FE /* MJRefreshFooter.m */; };
-		B9BC99B025C0FFBD00C024FE /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980B25C0FFB600C024FE /* MJRefreshHeader.m */; };
-		B9BC99B125C0FFBD00C024FE /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980D25C0FFB600C024FE /* MJRefreshBackFooter.m */; };
-		B9BC99B225C0FFBD00C024FE /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC980E25C0FFB600C024FE /* MJRefreshAutoFooter.m */; };
-		B9BC99B325C0FFBD00C024FE /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC981025C0FFB600C024FE /* MJRefreshComponent.m */; };
 		B9BC99B425C0FFBD00C024FE /* UIView+Toast.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC981525C0FFB600C024FE /* UIView+Toast.m */; };
 		B9BC99B525C0FFBD00C024FE /* MWPhotoBrowser.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC981B25C0FFB700C024FE /* MWPhotoBrowser.m */; };
 		B9BC99B625C0FFBD00C024FE /* MWCaptionView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC981C25C0FFB700C024FE /* MWCaptionView.m */; };
@@ -45,16 +27,6 @@
 		B9BC99BB25C0FFBD00C024FE /* MWTapDetectingView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC982425C0FFB700C024FE /* MWTapDetectingView.m */; };
 		B9BC99BC25C0FFBD00C024FE /* MWGridViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC982625C0FFB700C024FE /* MWGridViewController.m */; };
 		B9BC99BD25C0FFBD00C024FE /* MWGridCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC982925C0FFB700C024FE /* MWGridCell.m */; };
-		B9BC99BE25C0FFBD00C024FE /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC982E25C0FFB700C024FE /* NSLayoutConstraint+MASDebugAdditions.m */; };
-		B9BC99BF25C0FFBD00C024FE /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983725C0FFB700C024FE /* ViewController+MASAdditions.m */; };
-		B9BC99C025C0FFBD00C024FE /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983B25C0FFB700C024FE /* MASCompositeConstraint.m */; };
-		B9BC99C125C0FFBD00C024FE /* MASConstraintMaker.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983C25C0FFB700C024FE /* MASConstraintMaker.m */; };
-		B9BC99C225C0FFBD00C024FE /* MASLayoutConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983D25C0FFB700C024FE /* MASLayoutConstraint.m */; };
-		B9BC99C325C0FFBD00C024FE /* NSArray+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983E25C0FFB700C024FE /* NSArray+MASAdditions.m */; };
-		B9BC99C425C0FFBD00C024FE /* View+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC983F25C0FFB700C024FE /* View+MASAdditions.m */; };
-		B9BC99C525C0FFBD00C024FE /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984225C0FFB700C024FE /* MASConstraint.m */; };
-		B9BC99C625C0FFBD00C024FE /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984425C0FFB700C024FE /* MASViewConstraint.m */; };
-		B9BC99C725C0FFBD00C024FE /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984525C0FFB700C024FE /* MASViewAttribute.m */; };
 		B9BC99C825C0FFBD00C024FE /* UIView+DDKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984825C0FFB700C024FE /* UIView+DDKit.m */; };
 		B9BC99C925C0FFBD00C024FE /* UISegmentedControl+DDKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984925C0FFB700C024FE /* UISegmentedControl+DDKit.m */; };
 		B9BC99CA25C0FFBD00C024FE /* UIImageView+DDKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC984C25C0FFB700C024FE /* UIImageView+DDKit.m */; };
@@ -112,7 +84,6 @@
 		B9BC99FE25C0FFBD00C024FE /* HIKLoadPercentView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991125C0FFBA00C024FE /* HIKLoadPercentView.m */; };
 		B9BC99FF25C0FFBD00C024FE /* HIKLoadViewItem.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991425C0FFBA00C024FE /* HIKLoadViewItem.m */; };
 		B9BC9A0025C0FFBD00C024FE /* HIKLoadView.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991525C0FFBA00C024FE /* HIKLoadView.m */; };
-		B9BC9A0125C0FFBD00C024FE /* EZPlayDemoViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991825C0FFBA00C024FE /* EZPlayDemoViewController.m */; };
 		B9BC9A0225C0FFBD00C024FE /* DeviceListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991D25C0FFBA00C024FE /* DeviceListCell.m */; };
 		B9BC9A0325C0FFBD00C024FE /* CameraListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991E25C0FFBA00C024FE /* CameraListCell.m */; };
 		B9BC9A0425C0FFBD00C024FE /* MessageListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC991F25C0FFBA00C024FE /* MessageListCell.m */; };
@@ -152,8 +123,26 @@
 		B9BC9A2725C0FFBD00C024FE /* EZAddByQRCodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC996625C0FFBB00C024FE /* EZAddByQRCodeViewController.m */; };
 		B9BC9A2825C0FFBD00C024FE /* EZPlaybackViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */; };
 		B9BC9A2925C0FFBD00C024FE /* GlobalKit.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC997025C0FFBB00C024FE /* GlobalKit.m */; };
-		B9BC9A2A25C0FFBD00C024FE /* DemoAPITableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = B9BC997225C0FFBB00C024FE /* DemoAPITableViewController.m */; };
 		B9BC9A2B25C0FFBD00C024FE /* libEZOpenSDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B9BC999A25C0FFBD00C024FE /* libEZOpenSDK.a */; };
+		B9EA4E8525C7E806000FFDA2 /* UIScrollView+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E5625C7E805000FFDA2 /* UIScrollView+MJRefresh.m */; };
+		B9EA4E8625C7E806000FFDA2 /* MJRefreshConst.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E5725C7E805000FFDA2 /* MJRefreshConst.m */; };
+		B9EA4E8725C7E806000FFDA2 /* UIScrollView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E5D25C7E805000FFDA2 /* UIScrollView+MJExtension.m */; };
+		B9EA4E8825C7E806000FFDA2 /* NSBundle+MJRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6025C7E805000FFDA2 /* NSBundle+MJRefresh.m */; };
+		B9EA4E8925C7E806000FFDA2 /* UIView+MJExtension.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6125C7E805000FFDA2 /* UIView+MJExtension.m */; };
+		B9EA4E8A25C7E806000FFDA2 /* MJRefreshBackGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6825C7E806000FFDA2 /* MJRefreshBackGifFooter.m */; };
+		B9EA4E8B25C7E806000FFDA2 /* MJRefreshBackStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6925C7E806000FFDA2 /* MJRefreshBackStateFooter.m */; };
+		B9EA4E8C25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6A25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m */; };
+		B9EA4E8D25C7E806000FFDA2 /* MJRefreshAutoStateFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E6F25C7E806000FFDA2 /* MJRefreshAutoStateFooter.m */; };
+		B9EA4E8E25C7E806000FFDA2 /* MJRefreshAutoGifFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7025C7E806000FFDA2 /* MJRefreshAutoGifFooter.m */; };
+		B9EA4E8F25C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7125C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m */; };
+		B9EA4E9025C7E806000FFDA2 /* MJRefreshNormalHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7325C7E806000FFDA2 /* MJRefreshNormalHeader.m */; };
+		B9EA4E9125C7E806000FFDA2 /* MJRefreshStateHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7725C7E806000FFDA2 /* MJRefreshStateHeader.m */; };
+		B9EA4E9225C7E806000FFDA2 /* MJRefreshGifHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7825C7E806000FFDA2 /* MJRefreshGifHeader.m */; };
+		B9EA4E9325C7E806000FFDA2 /* MJRefreshFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7A25C7E806000FFDA2 /* MJRefreshFooter.m */; };
+		B9EA4E9425C7E806000FFDA2 /* MJRefreshHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7C25C7E806000FFDA2 /* MJRefreshHeader.m */; };
+		B9EA4E9525C7E806000FFDA2 /* MJRefreshBackFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7E25C7E806000FFDA2 /* MJRefreshBackFooter.m */; };
+		B9EA4E9625C7E806000FFDA2 /* MJRefreshAutoFooter.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E7F25C7E806000FFDA2 /* MJRefreshAutoFooter.m */; };
+		B9EA4E9725C7E806000FFDA2 /* MJRefreshComponent.m in Sources */ = {isa = PBXBuildFile; fileRef = B9EA4E8125C7E806000FFDA2 /* MJRefreshComponent.m */; };
 /* End PBXBuildFile section */
 
 /* Begin PBXCopyFilesBuildPhase section */
@@ -189,44 +178,6 @@
 		B9BC97E225C0FFB600C024FE /* DACircularProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DACircularProgressView.h; sourceTree = "<group>"; };
 		B9BC97E425C0FFB600C024FE /* DDCollectionViewFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDCollectionViewFlowLayout.h; sourceTree = "<group>"; };
 		B9BC97E525C0FFB600C024FE /* DDCollectionViewFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DDCollectionViewFlowLayout.m; sourceTree = "<group>"; };
-		B9BC97E725C0FFB600C024FE /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = "<group>"; };
-		B9BC97E825C0FFB600C024FE /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = "<group>"; };
-		B9BC97E925C0FFB600C024FE /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJExtension.h"; sourceTree = "<group>"; };
-		B9BC97EA25C0FFB600C024FE /* MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefresh.h; sourceTree = "<group>"; };
-		B9BC97EB25C0FFB600C024FE /* MJRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJRefresh.bundle; sourceTree = "<group>"; };
-		B9BC97EC25C0FFB600C024FE /* UIView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MJExtension.h"; sourceTree = "<group>"; };
-		B9BC97ED25C0FFB600C024FE /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJExtension.m"; sourceTree = "<group>"; };
-		B9BC97EE25C0FFB600C024FE /* MJRefreshConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshConst.h; sourceTree = "<group>"; };
-		B9BC97EF25C0FFB600C024FE /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefresh.h"; sourceTree = "<group>"; };
-		B9BC97F025C0FFB600C024FE /* UIView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MJExtension.m"; sourceTree = "<group>"; };
-		B9BC97F425C0FFB600C024FE /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackGifFooter.h; sourceTree = "<group>"; };
-		B9BC97F525C0FFB600C024FE /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackStateFooter.h; sourceTree = "<group>"; };
-		B9BC97F625C0FFB600C024FE /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackNormalFooter.h; sourceTree = "<group>"; };
-		B9BC97F725C0FFB600C024FE /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackGifFooter.m; sourceTree = "<group>"; };
-		B9BC97F825C0FFB600C024FE /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackStateFooter.m; sourceTree = "<group>"; };
-		B9BC97F925C0FFB600C024FE /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackNormalFooter.m; sourceTree = "<group>"; };
-		B9BC97FB25C0FFB600C024FE /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoStateFooter.h; sourceTree = "<group>"; };
-		B9BC97FC25C0FFB600C024FE /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoNormalFooter.h; sourceTree = "<group>"; };
-		B9BC97FD25C0FFB600C024FE /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoGifFooter.h; sourceTree = "<group>"; };
-		B9BC97FE25C0FFB600C024FE /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoStateFooter.m; sourceTree = "<group>"; };
-		B9BC97FF25C0FFB600C024FE /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoGifFooter.m; sourceTree = "<group>"; };
-		B9BC980025C0FFB600C024FE /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoNormalFooter.m; sourceTree = "<group>"; };
-		B9BC980225C0FFB600C024FE /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshNormalHeader.m; sourceTree = "<group>"; };
-		B9BC980325C0FFB600C024FE /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshStateHeader.h; sourceTree = "<group>"; };
-		B9BC980425C0FFB600C024FE /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshGifHeader.h; sourceTree = "<group>"; };
-		B9BC980525C0FFB600C024FE /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshNormalHeader.h; sourceTree = "<group>"; };
-		B9BC980625C0FFB600C024FE /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshStateHeader.m; sourceTree = "<group>"; };
-		B9BC980725C0FFB600C024FE /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshGifHeader.m; sourceTree = "<group>"; };
-		B9BC980925C0FFB600C024FE /* MJRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshFooter.m; sourceTree = "<group>"; };
-		B9BC980A25C0FFB600C024FE /* MJRefreshComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshComponent.h; sourceTree = "<group>"; };
-		B9BC980B25C0FFB600C024FE /* MJRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshHeader.m; sourceTree = "<group>"; };
-		B9BC980C25C0FFB600C024FE /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoFooter.h; sourceTree = "<group>"; };
-		B9BC980D25C0FFB600C024FE /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackFooter.m; sourceTree = "<group>"; };
-		B9BC980E25C0FFB600C024FE /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoFooter.m; sourceTree = "<group>"; };
-		B9BC980F25C0FFB600C024FE /* MJRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshHeader.h; sourceTree = "<group>"; };
-		B9BC981025C0FFB600C024FE /* MJRefreshComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshComponent.m; sourceTree = "<group>"; };
-		B9BC981125C0FFB600C024FE /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = "<group>"; };
-		B9BC981225C0FFB600C024FE /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = "<group>"; };
 		B9BC981425C0FFB600C024FE /* UIView+Toast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Toast.h"; sourceTree = "<group>"; };
 		B9BC981525C0FFB600C024FE /* UIView+Toast.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Toast.m"; sourceTree = "<group>"; };
 		B9BC981725C0FFB600C024FE /* MWTapDetectingImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWTapDetectingImageView.h; sourceTree = "<group>"; };
@@ -250,31 +201,7 @@
 		B9BC982925C0FFB700C024FE /* MWGridCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MWGridCell.m; sourceTree = "<group>"; };
 		B9BC982A25C0FFB700C024FE /* UIImage+MWPhotoBrowser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+MWPhotoBrowser.h"; sourceTree = "<group>"; };
 		B9BC982B25C0FFB700C024FE /* MWZoomingScrollView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MWZoomingScrollView.h; sourceTree = "<group>"; };
-		B9BC982D25C0FFB700C024FE /* MASCompositeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASCompositeConstraint.h; sourceTree = "<group>"; };
-		B9BC982E25C0FFB700C024FE /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = "<group>"; };
-		B9BC982F25C0FFB700C024FE /* MASConstraint+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MASConstraint+Private.h"; sourceTree = "<group>"; };
-		B9BC983025C0FFB700C024FE /* MASLayoutConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASLayoutConstraint.h; sourceTree = "<group>"; };
-		B9BC983125C0FFB700C024FE /* NSArray+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASShorthandAdditions.h"; sourceTree = "<group>"; };
-		B9BC983225C0FFB700C024FE /* MASConstraintMaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraintMaker.h; sourceTree = "<group>"; };
-		B9BC983325C0FFB700C024FE /* View+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASAdditions.h"; sourceTree = "<group>"; };
-		B9BC983425C0FFB700C024FE /* NSArray+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+MASAdditions.h"; sourceTree = "<group>"; };
-		B9BC983525C0FFB700C024FE /* MASUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASUtilities.h; sourceTree = "<group>"; };
-		B9BC983625C0FFB700C024FE /* MASViewAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewAttribute.h; sourceTree = "<group>"; };
-		B9BC983725C0FFB700C024FE /* ViewController+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "ViewController+MASAdditions.m"; sourceTree = "<group>"; };
-		B9BC983825C0FFB700C024FE /* MASViewConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASViewConstraint.h; sourceTree = "<group>"; };
-		B9BC983925C0FFB700C024FE /* MASConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASConstraint.h; sourceTree = "<group>"; };
-		B9BC983A25C0FFB700C024FE /* NSLayoutConstraint+MASDebugAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSLayoutConstraint+MASDebugAdditions.h"; sourceTree = "<group>"; };
-		B9BC983B25C0FFB700C024FE /* MASCompositeConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASCompositeConstraint.m; sourceTree = "<group>"; };
-		B9BC983C25C0FFB700C024FE /* MASConstraintMaker.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraintMaker.m; sourceTree = "<group>"; };
-		B9BC983D25C0FFB700C024FE /* MASLayoutConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASLayoutConstraint.m; sourceTree = "<group>"; };
-		B9BC983E25C0FFB700C024FE /* NSArray+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+MASAdditions.m"; sourceTree = "<group>"; };
-		B9BC983F25C0FFB700C024FE /* View+MASAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "View+MASAdditions.m"; sourceTree = "<group>"; };
-		B9BC984025C0FFB700C024FE /* View+MASShorthandAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "View+MASShorthandAdditions.h"; sourceTree = "<group>"; };
 		B9BC984125C0FFB700C024FE /* Masonry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Masonry.h; sourceTree = "<group>"; };
-		B9BC984225C0FFB700C024FE /* MASConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASConstraint.m; sourceTree = "<group>"; };
-		B9BC984325C0FFB700C024FE /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ViewController+MASAdditions.h"; sourceTree = "<group>"; };
-		B9BC984425C0FFB700C024FE /* MASViewConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewConstraint.m; sourceTree = "<group>"; };
-		B9BC984525C0FFB700C024FE /* MASViewAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewAttribute.m; sourceTree = "<group>"; };
 		B9BC984825C0FFB700C024FE /* UIView+DDKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+DDKit.m"; sourceTree = "<group>"; };
 		B9BC984925C0FFB700C024FE /* UISegmentedControl+DDKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UISegmentedControl+DDKit.m"; sourceTree = "<group>"; };
 		B9BC984A25C0FFB700C024FE /* DDKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DDKit.h; sourceTree = "<group>"; };
@@ -473,14 +400,12 @@
 		B9BC991525C0FFBA00C024FE /* HIKLoadView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HIKLoadView.m; sourceTree = "<group>"; };
 		B9BC991625C0FFBA00C024FE /* Toast+UIView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Toast+UIView.h"; sourceTree = "<group>"; };
 		B9BC991725C0FFBA00C024FE /* EZStartPushParameter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStartPushParameter.h; sourceTree = "<group>"; };
-		B9BC991825C0FFBA00C024FE /* EZPlayDemoViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EZPlayDemoViewController.m; sourceTree = "<group>"; };
 		B9BC991A25C0FFBA00C024FE /* CameraListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CameraListCell.h; sourceTree = "<group>"; };
 		B9BC991B25C0FFBA00C024FE /* DeviceListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DeviceListCell.h; sourceTree = "<group>"; };
 		B9BC991C25C0FFBA00C024FE /* MessageListCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MessageListCell.h; sourceTree = "<group>"; };
 		B9BC991D25C0FFBA00C024FE /* DeviceListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DeviceListCell.m; sourceTree = "<group>"; };
 		B9BC991E25C0FFBA00C024FE /* CameraListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CameraListCell.m; sourceTree = "<group>"; };
 		B9BC991F25C0FFBA00C024FE /* MessageListCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MessageListCell.m; sourceTree = "<group>"; };
-		B9BC992125C0FFBA00C024FE /* DemoAPITableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DemoAPITableViewController.h; sourceTree = "<group>"; };
 		B9BC992225C0FFBA00C024FE /* EZOpenSDK+EZPrivateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EZOpenSDK+EZPrivateHeader.h"; sourceTree = "<group>"; };
 		B9BC992425C0FFBA00C024FE /* EZWifiInfoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZWifiInfoViewController.h; sourceTree = "<group>"; };
 		B9BC992525C0FFBA00C024FE /* EZCalendarViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZCalendarViewController.h; sourceTree = "<group>"; };
@@ -552,11 +477,9 @@
 		B9BC996925C0FFBB00C024FE /* EZEncryptCameraCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZEncryptCameraCell.h; sourceTree = "<group>"; };
 		B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EZPlaybackViewController.m; sourceTree = "<group>"; };
 		B9BC996B25C0FFBB00C024FE /* EZOfflineCameraCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZOfflineCameraCell.h; sourceTree = "<group>"; };
-		B9BC996D25C0FFBB00C024FE /* EZPlayDemoViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZPlayDemoViewController.h; sourceTree = "<group>"; };
 		B9BC996E25C0FFBB00C024FE /* PrefixHeader.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PrefixHeader.pch; sourceTree = "<group>"; };
 		B9BC997025C0FFBB00C024FE /* GlobalKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GlobalKit.m; sourceTree = "<group>"; };
 		B9BC997125C0FFBB00C024FE /* GlobalKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GlobalKit.h; sourceTree = "<group>"; };
-		B9BC997225C0FFBB00C024FE /* DemoAPITableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DemoAPITableViewController.m; sourceTree = "<group>"; };
 		B9BC997625C0FFBC00C024FE /* EZConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZConstants.h; sourceTree = "<group>"; };
 		B9BC997725C0FFBC00C024FE /* EZHCNetDeviceSDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZHCNetDeviceSDK.h; sourceTree = "<group>"; };
 		B9BC997825C0FFBC00C024FE /* EZStreamPlayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStreamPlayer.h; sourceTree = "<group>"; };
@@ -593,6 +516,48 @@
 		B9BC999825C0FFBD00C024FE /* EZSADPDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZSADPDeviceInfo.h; sourceTree = "<group>"; };
 		B9BC999925C0FFBD00C024FE /* EZStorageInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EZStorageInfo.h; sourceTree = "<group>"; };
 		B9BC999A25C0FFBD00C024FE /* libEZOpenSDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libEZOpenSDK.a; sourceTree = "<group>"; };
+		B9EA4E5425C7E805000FFDA2 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
+		B9EA4E5625C7E805000FFDA2 /* UIScrollView+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJRefresh.m"; sourceTree = "<group>"; };
+		B9EA4E5725C7E805000FFDA2 /* MJRefreshConst.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshConst.m; sourceTree = "<group>"; };
+		B9EA4E5825C7E805000FFDA2 /* UIScrollView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJExtension.h"; sourceTree = "<group>"; };
+		B9EA4E5925C7E805000FFDA2 /* MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefresh.h; sourceTree = "<group>"; };
+		B9EA4E5A25C7E805000FFDA2 /* NSBundle+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSBundle+MJRefresh.h"; sourceTree = "<group>"; };
+		B9EA4E5B25C7E805000FFDA2 /* MJRefresh.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = MJRefresh.bundle; sourceTree = "<group>"; };
+		B9EA4E5C25C7E805000FFDA2 /* UIView+MJExtension.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+MJExtension.h"; sourceTree = "<group>"; };
+		B9EA4E5D25C7E805000FFDA2 /* UIScrollView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+MJExtension.m"; sourceTree = "<group>"; };
+		B9EA4E5E25C7E805000FFDA2 /* MJRefreshConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshConst.h; sourceTree = "<group>"; };
+		B9EA4E5F25C7E805000FFDA2 /* UIScrollView+MJRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+MJRefresh.h"; sourceTree = "<group>"; };
+		B9EA4E6025C7E805000FFDA2 /* NSBundle+MJRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSBundle+MJRefresh.m"; sourceTree = "<group>"; };
+		B9EA4E6125C7E805000FFDA2 /* UIView+MJExtension.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+MJExtension.m"; sourceTree = "<group>"; };
+		B9EA4E6525C7E805000FFDA2 /* MJRefreshBackGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackGifFooter.h; sourceTree = "<group>"; };
+		B9EA4E6625C7E805000FFDA2 /* MJRefreshBackStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackStateFooter.h; sourceTree = "<group>"; };
+		B9EA4E6725C7E805000FFDA2 /* MJRefreshBackNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackNormalFooter.h; sourceTree = "<group>"; };
+		B9EA4E6825C7E806000FFDA2 /* MJRefreshBackGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackGifFooter.m; sourceTree = "<group>"; };
+		B9EA4E6925C7E806000FFDA2 /* MJRefreshBackStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackStateFooter.m; sourceTree = "<group>"; };
+		B9EA4E6A25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackNormalFooter.m; sourceTree = "<group>"; };
+		B9EA4E6C25C7E806000FFDA2 /* MJRefreshAutoStateFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoStateFooter.h; sourceTree = "<group>"; };
+		B9EA4E6D25C7E806000FFDA2 /* MJRefreshAutoNormalFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoNormalFooter.h; sourceTree = "<group>"; };
+		B9EA4E6E25C7E806000FFDA2 /* MJRefreshAutoGifFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoGifFooter.h; sourceTree = "<group>"; };
+		B9EA4E6F25C7E806000FFDA2 /* MJRefreshAutoStateFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoStateFooter.m; sourceTree = "<group>"; };
+		B9EA4E7025C7E806000FFDA2 /* MJRefreshAutoGifFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoGifFooter.m; sourceTree = "<group>"; };
+		B9EA4E7125C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoNormalFooter.m; sourceTree = "<group>"; };
+		B9EA4E7325C7E806000FFDA2 /* MJRefreshNormalHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshNormalHeader.m; sourceTree = "<group>"; };
+		B9EA4E7425C7E806000FFDA2 /* MJRefreshStateHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshStateHeader.h; sourceTree = "<group>"; };
+		B9EA4E7525C7E806000FFDA2 /* MJRefreshGifHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshGifHeader.h; sourceTree = "<group>"; };
+		B9EA4E7625C7E806000FFDA2 /* MJRefreshNormalHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshNormalHeader.h; sourceTree = "<group>"; };
+		B9EA4E7725C7E806000FFDA2 /* MJRefreshStateHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshStateHeader.m; sourceTree = "<group>"; };
+		B9EA4E7825C7E806000FFDA2 /* MJRefreshGifHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshGifHeader.m; sourceTree = "<group>"; };
+		B9EA4E7A25C7E806000FFDA2 /* MJRefreshFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshFooter.m; sourceTree = "<group>"; };
+		B9EA4E7B25C7E806000FFDA2 /* MJRefreshComponent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshComponent.h; sourceTree = "<group>"; };
+		B9EA4E7C25C7E806000FFDA2 /* MJRefreshHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshHeader.m; sourceTree = "<group>"; };
+		B9EA4E7D25C7E806000FFDA2 /* MJRefreshAutoFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshAutoFooter.h; sourceTree = "<group>"; };
+		B9EA4E7E25C7E806000FFDA2 /* MJRefreshBackFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshBackFooter.m; sourceTree = "<group>"; };
+		B9EA4E7F25C7E806000FFDA2 /* MJRefreshAutoFooter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshAutoFooter.m; sourceTree = "<group>"; };
+		B9EA4E8025C7E806000FFDA2 /* MJRefreshHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshHeader.h; sourceTree = "<group>"; };
+		B9EA4E8125C7E806000FFDA2 /* MJRefreshComponent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MJRefreshComponent.m; sourceTree = "<group>"; };
+		B9EA4E8225C7E806000FFDA2 /* MJRefreshFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshFooter.h; sourceTree = "<group>"; };
+		B9EA4E8325C7E806000FFDA2 /* MJRefreshBackFooter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MJRefreshBackFooter.h; sourceTree = "<group>"; };
+		B9EA4E8425C7E806000FFDA2 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -644,15 +609,11 @@
 				B9BC97D425C0FFB600C024FE /* Venders */,
 				B9BC990225C0FFBA00C024FE /* CustomUI */,
 				B9BC991725C0FFBA00C024FE /* EZStartPushParameter.h */,
-				B9BC991825C0FFBA00C024FE /* EZPlayDemoViewController.m */,
 				B9BC991925C0FFBA00C024FE /* TableViewCells */,
 				B9BC992225C0FFBA00C024FE /* EZOpenSDK+EZPrivateHeader.h */,
 				B9BC992325C0FFBA00C024FE /* UIViewControllers */,
-				B9BC996D25C0FFBB00C024FE /* EZPlayDemoViewController.h */,
 				B9BC996E25C0FFBB00C024FE /* PrefixHeader.pch */,
 				B9BC996F25C0FFBB00C024FE /* Global */,
-				B9BC997225C0FFBB00C024FE /* DemoAPITableViewController.m */,
-				B9BC992125C0FFBA00C024FE /* DemoAPITableViewController.h */,
 			);
 			path = EZ;
 			sourceTree = "<group>";
@@ -660,10 +621,10 @@
 		B9BC97D425C0FFB600C024FE /* Venders */ = {
 			isa = PBXGroup;
 			children = (
+				B9EA4E5325C7E805000FFDA2 /* MJRefresh */,
 				B9BC97D525C0FFB600C024FE /* UITableView-FDTemplateLayoutCell */,
 				B9BC97DE25C0FFB600C024FE /* DACircularProgress */,
 				B9BC97E325C0FFB600C024FE /* DDCollectionViewFlowLayout */,
-				B9BC97E625C0FFB600C024FE /* MJRefresh */,
 				B9BC981325C0FFB600C024FE /* Toast */,
 				B9BC981625C0FFB600C024FE /* MWPhotoBrowser */,
 				B9BC982C25C0FFB700C024FE /* Masonry */,
@@ -713,99 +674,6 @@
 			path = DDCollectionViewFlowLayout;
 			sourceTree = "<group>";
 		};
-		B9BC97E625C0FFB600C024FE /* MJRefresh */ = {
-			isa = PBXGroup;
-			children = (
-				B9BC97E725C0FFB600C024FE /* UIScrollView+MJRefresh.m */,
-				B9BC97E825C0FFB600C024FE /* MJRefreshConst.m */,
-				B9BC97E925C0FFB600C024FE /* UIScrollView+MJExtension.h */,
-				B9BC97EA25C0FFB600C024FE /* MJRefresh.h */,
-				B9BC97EB25C0FFB600C024FE /* MJRefresh.bundle */,
-				B9BC97EC25C0FFB600C024FE /* UIView+MJExtension.h */,
-				B9BC97ED25C0FFB600C024FE /* UIScrollView+MJExtension.m */,
-				B9BC97EE25C0FFB600C024FE /* MJRefreshConst.h */,
-				B9BC97EF25C0FFB600C024FE /* UIScrollView+MJRefresh.h */,
-				B9BC97F025C0FFB600C024FE /* UIView+MJExtension.m */,
-				B9BC97F125C0FFB600C024FE /* Custom */,
-				B9BC980825C0FFB600C024FE /* Base */,
-			);
-			path = MJRefresh;
-			sourceTree = "<group>";
-		};
-		B9BC97F125C0FFB600C024FE /* Custom */ = {
-			isa = PBXGroup;
-			children = (
-				B9BC97F225C0FFB600C024FE /* Footer */,
-				B9BC980125C0FFB600C024FE /* Header */,
-			);
-			path = Custom;
-			sourceTree = "<group>";
-		};
-		B9BC97F225C0FFB600C024FE /* Footer */ = {
-			isa = PBXGroup;
-			children = (
-				B9BC97F325C0FFB600C024FE /* Back */,
-				B9BC97FA25C0FFB600C024FE /* Auto */,
-			);
-			path = Footer;
-			sourceTree = "<group>";
-		};
-		B9BC97F325C0FFB600C024FE /* Back */ = {
-			isa = PBXGroup;
-			children = (
-				B9BC97F425C0FFB600C024FE /* MJRefreshBackGifFooter.h */,
-				B9BC97F525C0FFB600C024FE /* MJRefreshBackStateFooter.h */,
-				B9BC97F625C0FFB600C024FE /* MJRefreshBackNormalFooter.h */,
-				B9BC97F725C0FFB600C024FE /* MJRefreshBackGifFooter.m */,
-				B9BC97F825C0FFB600C024FE /* MJRefreshBackStateFooter.m */,
-				B9BC97F925C0FFB600C024FE /* MJRefreshBackNormalFooter.m */,
-			);
-			path = Back;
-			sourceTree = "<group>";
-		};
-		B9BC97FA25C0FFB600C024FE /* Auto */ = {
-			isa = PBXGroup;
-			children = (
-				B9BC97FB25C0FFB600C024FE /* MJRefreshAutoStateFooter.h */,
-				B9BC97FC25C0FFB600C024FE /* MJRefreshAutoNormalFooter.h */,
-				B9BC97FD25C0FFB600C024FE /* MJRefreshAutoGifFooter.h */,
-				B9BC97FE25C0FFB600C024FE /* MJRefreshAutoStateFooter.m */,
-				B9BC97FF25C0FFB600C024FE /* MJRefreshAutoGifFooter.m */,
-				B9BC980025C0FFB600C024FE /* MJRefreshAutoNormalFooter.m */,
-			);
-			path = Auto;
-			sourceTree = "<group>";
-		};
-		B9BC980125C0FFB600C024FE /* Header */ = {
-			isa = PBXGroup;
-			children = (
-				B9BC980225C0FFB600C024FE /* MJRefreshNormalHeader.m */,
-				B9BC980325C0FFB600C024FE /* MJRefreshStateHeader.h */,
-				B9BC980425C0FFB600C024FE /* MJRefreshGifHeader.h */,
-				B9BC980525C0FFB600C024FE /* MJRefreshNormalHeader.h */,
-				B9BC980625C0FFB600C024FE /* MJRefreshStateHeader.m */,
-				B9BC980725C0FFB600C024FE /* MJRefreshGifHeader.m */,
-			);
-			path = Header;
-			sourceTree = "<group>";
-		};
-		B9BC980825C0FFB600C024FE /* Base */ = {
-			isa = PBXGroup;
-			children = (
-				B9BC980925C0FFB600C024FE /* MJRefreshFooter.m */,
-				B9BC980A25C0FFB600C024FE /* MJRefreshComponent.h */,
-				B9BC980B25C0FFB600C024FE /* MJRefreshHeader.m */,
-				B9BC980C25C0FFB600C024FE /* MJRefreshAutoFooter.h */,
-				B9BC980D25C0FFB600C024FE /* MJRefreshBackFooter.m */,
-				B9BC980E25C0FFB600C024FE /* MJRefreshAutoFooter.m */,
-				B9BC980F25C0FFB600C024FE /* MJRefreshHeader.h */,
-				B9BC981025C0FFB600C024FE /* MJRefreshComponent.m */,
-				B9BC981125C0FFB600C024FE /* MJRefreshFooter.h */,
-				B9BC981225C0FFB600C024FE /* MJRefreshBackFooter.h */,
-			);
-			path = Base;
-			sourceTree = "<group>";
-		};
 		B9BC981325C0FFB600C024FE /* Toast */ = {
 			isa = PBXGroup;
 			children = (
@@ -846,31 +714,7 @@
 		B9BC982C25C0FFB700C024FE /* Masonry */ = {
 			isa = PBXGroup;
 			children = (
-				B9BC982D25C0FFB700C024FE /* MASCompositeConstraint.h */,
-				B9BC982E25C0FFB700C024FE /* NSLayoutConstraint+MASDebugAdditions.m */,
-				B9BC982F25C0FFB700C024FE /* MASConstraint+Private.h */,
-				B9BC983025C0FFB700C024FE /* MASLayoutConstraint.h */,
-				B9BC983125C0FFB700C024FE /* NSArray+MASShorthandAdditions.h */,
-				B9BC983225C0FFB700C024FE /* MASConstraintMaker.h */,
-				B9BC983325C0FFB700C024FE /* View+MASAdditions.h */,
-				B9BC983425C0FFB700C024FE /* NSArray+MASAdditions.h */,
-				B9BC983525C0FFB700C024FE /* MASUtilities.h */,
-				B9BC983625C0FFB700C024FE /* MASViewAttribute.h */,
-				B9BC983725C0FFB700C024FE /* ViewController+MASAdditions.m */,
-				B9BC983825C0FFB700C024FE /* MASViewConstraint.h */,
-				B9BC983925C0FFB700C024FE /* MASConstraint.h */,
-				B9BC983A25C0FFB700C024FE /* NSLayoutConstraint+MASDebugAdditions.h */,
-				B9BC983B25C0FFB700C024FE /* MASCompositeConstraint.m */,
-				B9BC983C25C0FFB700C024FE /* MASConstraintMaker.m */,
-				B9BC983D25C0FFB700C024FE /* MASLayoutConstraint.m */,
-				B9BC983E25C0FFB700C024FE /* NSArray+MASAdditions.m */,
-				B9BC983F25C0FFB700C024FE /* View+MASAdditions.m */,
-				B9BC984025C0FFB700C024FE /* View+MASShorthandAdditions.h */,
 				B9BC984125C0FFB700C024FE /* Masonry.h */,
-				B9BC984225C0FFB700C024FE /* MASConstraint.m */,
-				B9BC984325C0FFB700C024FE /* ViewController+MASAdditions.h */,
-				B9BC984425C0FFB700C024FE /* MASViewConstraint.m */,
-				B9BC984525C0FFB700C024FE /* MASViewAttribute.m */,
 			);
 			path = Masonry;
 			sourceTree = "<group>";
@@ -1180,70 +1024,70 @@
 				B9BC994925C0FFBB00C024FE /* EZDeviceTableViewController.m */,
 				B9BC996025C0FFBB00C024FE /* EZLivePlayViewController.h */,
 				B9BC993925C0FFBA00C024FE /* EZLivePlayViewController.m */,
+				B9BC993325C0FFBA00C024FE /* EZSettingViewController.h */,
+				B9BC995825C0FFBB00C024FE /* EZSettingViewController.m */,
+				B9BC994025C0FFBB00C024FE /* EZPlaybackViewController.h */,
+				B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */,
+				B9BC994625C0FFBB00C024FE /* EZEditViewController.h */,
+				B9BC996525C0FFBB00C024FE /* EZEditViewController.m */,
 				B9BC992425C0FFBA00C024FE /* EZWifiInfoViewController.h */,
+				B9BC995525C0FFBB00C024FE /* EZWifiInfoViewController.m */,
 				B9BC992525C0FFBA00C024FE /* EZCalendarViewController.h */,
+				B9BC995425C0FFBB00C024FE /* EZCalendarViewController.m */,
+				B9BC994B25C0FFBB00C024FE /* EZLocalCameraListViewController.h */,
+				B9BC992E25C0FFBA00C024FE /* EZLocalCameraListViewController.m */,
+				B9BC995725C0FFBB00C024FE /* EZLocalDeviceListViewController.h */,
+				B9BC993425C0FFBA00C024FE /* EZLocalDeviceListViewController.m */,
+				B9BC995025C0FFBB00C024FE /* EZCameraTableViewController.h */,
 				B9BC992625C0FFBA00C024FE /* EZCameraTableViewController.m */,
+				B9BC993025C0FFBA00C024FE /* EZWifiTipsViewController.h */,
+				B9BC994A25C0FFBB00C024FE /* EZWifiTipsViewController.m */,
+				B9BC994F25C0FFBB00C024FE /* EZWifiConfigViewController.h */,
 				B9BC992725C0FFBA00C024FE /* EZWifiConfigViewController.m */,
 				B9BC992825C0FFBA00C024FE /* VideoTalk */,
+				B9BC994E25C0FFBB00C024FE /* EZMessagePlaybackViewController.h */,
 				B9BC992B25C0FFBA00C024FE /* EZMessagePlaybackViewController.m */,
+				B9BC994D25C0FFBB00C024FE /* EZMultiChannelRealPlayVC.h */,
 				B9BC992C25C0FFBA00C024FE /* EZMultiChannelRealPlayVC.m */,
+				B9BC994C25C0FFBB00C024FE /* EZDeviceUpgradeViewController.h */,
 				B9BC992D25C0FFBA00C024FE /* EZDeviceUpgradeViewController.m */,
-				B9BC992E25C0FFBA00C024FE /* EZLocalCameraListViewController.m */,
 				B9BC994825C0FFBB00C024FE /* UIViewController+EZBackPop.h */,
-				B9BC993025C0FFBA00C024FE /* EZWifiTipsViewController.h */,
 				B9BC993125C0FFBA00C024FE /* UIViewController+EZBackPop.m */,
 				B9BC993225C0FFBA00C024FE /* EZDdnsDeviceTableViewController.h */,
-				B9BC993325C0FFBA00C024FE /* EZSettingViewController.h */,
-				B9BC993425C0FFBA00C024FE /* EZLocalDeviceListViewController.m */,
+				B9BC995925C0FFBB00C024FE /* EZDdnsDeviceTableViewController.m */,
+				B9BC995625C0FFBB00C024FE /* EZDeviceResultViewController.h */,
 				B9BC993525C0FFBA00C024FE /* EZDeviceResultViewController.m */,
 				B9BC993625C0FFBA00C024FE /* UIAlertController+TextField.h */,
+				B9BC996325C0FFBB00C024FE /* UIAlertController+TextField.m */,
+				B9BC996225C0FFBB00C024FE /* EZMessagePhotoViewController.h */,
 				B9BC993725C0FFBA00C024FE /* EZMessagePhotoViewController.m */,
+				B9BC996125C0FFBB00C024FE /* EZDeviceRestartTipsViewController.h */,
 				B9BC993825C0FFBA00C024FE /* EZDeviceRestartTipsViewController.m */,
+				B9BC995F25C0FFBB00C024FE /* EZLocalRealPlayViewController.h */,
 				B9BC993A25C0FFBA00C024FE /* EZLocalRealPlayViewController.m */,
 				B9BC993B25C0FFBA00C024FE /* EZMessageListViewController.h */,
+				B9BC995E25C0FFBB00C024FE /* EZMessageListViewController.m */,
 				B9BC993C25C0FFBB00C024FE /* UINavigationController+EZOpenSDK.h */,
+				B9BC995D25C0FFBB00C024FE /* UINavigationController+EZOpenSDK.m */,
+				B9BC995C25C0FFBB00C024FE /* EZInputSerialViewController.h */,
 				B9BC993D25C0FFBB00C024FE /* EZInputSerialViewController.m */,
+				B9BC995B25C0FFBB00C024FE /* EZLocationAlertVCViewController.m */,
 				B9BC993E25C0FFBB00C024FE /* EZLocationAlertVCViewController.h */,
+				B9BC995A25C0FFBB00C024FE /* EZAPConfigResultViewController.h */,
 				B9BC993F25C0FFBB00C024FE /* EZAPConfigResultViewController.m */,
-				B9BC994025C0FFBB00C024FE /* EZPlaybackViewController.h */,
+				B9BC994725C0FFBB00C024FE /* EZOnlineCameraCell.h */,
 				B9BC994125C0FFBB00C024FE /* EZOfflineCameraCell.m */,
+				B9BC996925C0FFBB00C024FE /* EZEncryptCameraCell.h */,
 				B9BC994225C0FFBB00C024FE /* EZEncryptCameraCell.m */,
+				B9BC996B25C0FFBB00C024FE /* EZOfflineCameraCell.h */,
+				B9BC996425C0FFBB00C024FE /* EZOnlineCameraCell.m */,
+				B9BC996825C0FFBB00C024FE /* EZHubDebugViewController.h */,
 				B9BC994325C0FFBB00C024FE /* EZHubDebugViewController.m */,
+				B9BC996725C0FFBB00C024FE /* EZAPWiFiConfigViewController.h */,
 				B9BC994425C0FFBB00C024FE /* EZAPWiFiConfigViewController.m */,
 				B9BC994525C0FFBB00C024FE /* EZAddByQRCodeViewController.h */,
-				B9BC994625C0FFBB00C024FE /* EZEditViewController.h */,
-				B9BC994725C0FFBB00C024FE /* EZOnlineCameraCell.h */,
-				B9BC994A25C0FFBB00C024FE /* EZWifiTipsViewController.m */,
-				B9BC994B25C0FFBB00C024FE /* EZLocalCameraListViewController.h */,
-				B9BC994C25C0FFBB00C024FE /* EZDeviceUpgradeViewController.h */,
-				B9BC994D25C0FFBB00C024FE /* EZMultiChannelRealPlayVC.h */,
-				B9BC994E25C0FFBB00C024FE /* EZMessagePlaybackViewController.h */,
-				B9BC994F25C0FFBB00C024FE /* EZWifiConfigViewController.h */,
-				B9BC995025C0FFBB00C024FE /* EZCameraTableViewController.h */,
-				B9BC995125C0FFBB00C024FE /* Support */,
-				B9BC995425C0FFBB00C024FE /* EZCalendarViewController.m */,
-				B9BC995525C0FFBB00C024FE /* EZWifiInfoViewController.m */,
-				B9BC995625C0FFBB00C024FE /* EZDeviceResultViewController.h */,
-				B9BC995725C0FFBB00C024FE /* EZLocalDeviceListViewController.h */,
-				B9BC995825C0FFBB00C024FE /* EZSettingViewController.m */,
-				B9BC995925C0FFBB00C024FE /* EZDdnsDeviceTableViewController.m */,
-				B9BC995A25C0FFBB00C024FE /* EZAPConfigResultViewController.h */,
-				B9BC995B25C0FFBB00C024FE /* EZLocationAlertVCViewController.m */,
-				B9BC995C25C0FFBB00C024FE /* EZInputSerialViewController.h */,
-				B9BC995D25C0FFBB00C024FE /* UINavigationController+EZOpenSDK.m */,
-				B9BC995E25C0FFBB00C024FE /* EZMessageListViewController.m */,
-				B9BC995F25C0FFBB00C024FE /* EZLocalRealPlayViewController.h */,
-				B9BC996125C0FFBB00C024FE /* EZDeviceRestartTipsViewController.h */,
-				B9BC996225C0FFBB00C024FE /* EZMessagePhotoViewController.h */,
-				B9BC996325C0FFBB00C024FE /* UIAlertController+TextField.m */,
-				B9BC996425C0FFBB00C024FE /* EZOnlineCameraCell.m */,
-				B9BC996525C0FFBB00C024FE /* EZEditViewController.m */,
 				B9BC996625C0FFBB00C024FE /* EZAddByQRCodeViewController.m */,
-				B9BC996725C0FFBB00C024FE /* EZAPWiFiConfigViewController.h */,
-				B9BC996825C0FFBB00C024FE /* EZHubDebugViewController.h */,
-				B9BC996925C0FFBB00C024FE /* EZEncryptCameraCell.h */,
-				B9BC996A25C0FFBB00C024FE /* EZPlaybackViewController.m */,
-				B9BC996B25C0FFBB00C024FE /* EZOfflineCameraCell.h */,
+				B9BC995125C0FFBB00C024FE /* Support */,
 			);
 			path = UIViewControllers;
 			sourceTree = "<group>";
@@ -1334,6 +1178,111 @@
 			path = modules;
 			sourceTree = "<group>";
 		};
+		B9EA4E5325C7E805000FFDA2 /* MJRefresh */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E5425C7E805000FFDA2 /* LICENSE */,
+				B9EA4E5525C7E805000FFDA2 /* MJRefresh */,
+				B9EA4E8425C7E806000FFDA2 /* README.md */,
+			);
+			path = MJRefresh;
+			sourceTree = "<group>";
+		};
+		B9EA4E5525C7E805000FFDA2 /* MJRefresh */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E5625C7E805000FFDA2 /* UIScrollView+MJRefresh.m */,
+				B9EA4E5725C7E805000FFDA2 /* MJRefreshConst.m */,
+				B9EA4E5825C7E805000FFDA2 /* UIScrollView+MJExtension.h */,
+				B9EA4E5925C7E805000FFDA2 /* MJRefresh.h */,
+				B9EA4E5A25C7E805000FFDA2 /* NSBundle+MJRefresh.h */,
+				B9EA4E5B25C7E805000FFDA2 /* MJRefresh.bundle */,
+				B9EA4E5C25C7E805000FFDA2 /* UIView+MJExtension.h */,
+				B9EA4E5D25C7E805000FFDA2 /* UIScrollView+MJExtension.m */,
+				B9EA4E5E25C7E805000FFDA2 /* MJRefreshConst.h */,
+				B9EA4E5F25C7E805000FFDA2 /* UIScrollView+MJRefresh.h */,
+				B9EA4E6025C7E805000FFDA2 /* NSBundle+MJRefresh.m */,
+				B9EA4E6125C7E805000FFDA2 /* UIView+MJExtension.m */,
+				B9EA4E6225C7E805000FFDA2 /* Custom */,
+				B9EA4E7925C7E806000FFDA2 /* Base */,
+			);
+			path = MJRefresh;
+			sourceTree = "<group>";
+		};
+		B9EA4E6225C7E805000FFDA2 /* Custom */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E6325C7E805000FFDA2 /* Footer */,
+				B9EA4E7225C7E806000FFDA2 /* Header */,
+			);
+			path = Custom;
+			sourceTree = "<group>";
+		};
+		B9EA4E6325C7E805000FFDA2 /* Footer */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E6425C7E805000FFDA2 /* Back */,
+				B9EA4E6B25C7E806000FFDA2 /* Auto */,
+			);
+			path = Footer;
+			sourceTree = "<group>";
+		};
+		B9EA4E6425C7E805000FFDA2 /* Back */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E6525C7E805000FFDA2 /* MJRefreshBackGifFooter.h */,
+				B9EA4E6625C7E805000FFDA2 /* MJRefreshBackStateFooter.h */,
+				B9EA4E6725C7E805000FFDA2 /* MJRefreshBackNormalFooter.h */,
+				B9EA4E6825C7E806000FFDA2 /* MJRefreshBackGifFooter.m */,
+				B9EA4E6925C7E806000FFDA2 /* MJRefreshBackStateFooter.m */,
+				B9EA4E6A25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m */,
+			);
+			path = Back;
+			sourceTree = "<group>";
+		};
+		B9EA4E6B25C7E806000FFDA2 /* Auto */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E6C25C7E806000FFDA2 /* MJRefreshAutoStateFooter.h */,
+				B9EA4E6D25C7E806000FFDA2 /* MJRefreshAutoNormalFooter.h */,
+				B9EA4E6E25C7E806000FFDA2 /* MJRefreshAutoGifFooter.h */,
+				B9EA4E6F25C7E806000FFDA2 /* MJRefreshAutoStateFooter.m */,
+				B9EA4E7025C7E806000FFDA2 /* MJRefreshAutoGifFooter.m */,
+				B9EA4E7125C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m */,
+			);
+			path = Auto;
+			sourceTree = "<group>";
+		};
+		B9EA4E7225C7E806000FFDA2 /* Header */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E7325C7E806000FFDA2 /* MJRefreshNormalHeader.m */,
+				B9EA4E7425C7E806000FFDA2 /* MJRefreshStateHeader.h */,
+				B9EA4E7525C7E806000FFDA2 /* MJRefreshGifHeader.h */,
+				B9EA4E7625C7E806000FFDA2 /* MJRefreshNormalHeader.h */,
+				B9EA4E7725C7E806000FFDA2 /* MJRefreshStateHeader.m */,
+				B9EA4E7825C7E806000FFDA2 /* MJRefreshGifHeader.m */,
+			);
+			path = Header;
+			sourceTree = "<group>";
+		};
+		B9EA4E7925C7E806000FFDA2 /* Base */ = {
+			isa = PBXGroup;
+			children = (
+				B9EA4E7A25C7E806000FFDA2 /* MJRefreshFooter.m */,
+				B9EA4E7B25C7E806000FFDA2 /* MJRefreshComponent.h */,
+				B9EA4E7C25C7E806000FFDA2 /* MJRefreshHeader.m */,
+				B9EA4E7D25C7E806000FFDA2 /* MJRefreshAutoFooter.h */,
+				B9EA4E7E25C7E806000FFDA2 /* MJRefreshBackFooter.m */,
+				B9EA4E7F25C7E806000FFDA2 /* MJRefreshAutoFooter.m */,
+				B9EA4E8025C7E806000FFDA2 /* MJRefreshHeader.h */,
+				B9EA4E8125C7E806000FFDA2 /* MJRefreshComponent.m */,
+				B9EA4E8225C7E806000FFDA2 /* MJRefreshFooter.h */,
+				B9EA4E8325C7E806000FFDA2 /* MJRefreshBackFooter.h */,
+			);
+			path = Base;
+			sourceTree = "<group>";
+		};
 /* End PBXGroup section */
 
 /* Begin PBXNativeTarget section */
@@ -1390,32 +1339,27 @@
 			isa = PBXSourcesBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				B9BC99AB25C0FFBD00C024FE /* MJRefreshAutoNormalFooter.m in Sources */,
-				B9BC99AF25C0FFBD00C024FE /* MJRefreshFooter.m in Sources */,
 				B9BC99D225C0FFBD00C024FE /* UIButton+DDKit.m in Sources */,
-				B9BC99A425C0FFBD00C024FE /* UIScrollView+MJExtension.m in Sources */,
+				B9EA4E9325C7E806000FFDA2 /* MJRefreshFooter.m in Sources */,
 				B9BC99F125C0FFBD00C024FE /* UIImageView+WebCache.m in Sources */,
 				B9BC99DA25C0FFBD00C024FE /* AFURLResponseSerialization.m in Sources */,
 				B9BC99D525C0FFBD00C024FE /* UIRefreshControl+AFNetworking.m in Sources */,
 				B9BC99D425C0FFBD00C024FE /* UIProgressView+AFNetworking.m in Sources */,
-				B9BC99AA25C0FFBD00C024FE /* MJRefreshAutoGifFooter.m in Sources */,
 				B9BC9A0025C0FFBD00C024FE /* HIKLoadView.m in Sources */,
+				B9EA4E8D25C7E806000FFDA2 /* MJRefreshAutoStateFooter.m in Sources */,
 				B9BC99E225C0FFBD00C024FE /* AFSecurityPolicy.m in Sources */,
-				B9BC99C025C0FFBD00C024FE /* MASCompositeConstraint.m in Sources */,
 				B9BC99F025C0FFBD00C024FE /* NSData+ImageContentType.m in Sources */,
 				B9BC99B425C0FFBD00C024FE /* UIView+Toast.m in Sources */,
 				B9BC99C925C0FFBD00C024FE /* UISegmentedControl+DDKit.m in Sources */,
-				B9BC99C325C0FFBD00C024FE /* NSArray+MASAdditions.m in Sources */,
-				B9BC99C625C0FFBD00C024FE /* MASViewConstraint.m in Sources */,
 				B9BC99DB25C0FFBD00C024FE /* AFHTTPSessionManager.m in Sources */,
 				B9BC99D325C0FFBD00C024FE /* UIAlertView+AFNetworking.m in Sources */,
 				B9BC99EA25C0FFBD00C024FE /* UIImage+GIF.m in Sources */,
-				B9BC99C725C0FFBD00C024FE /* MASViewAttribute.m in Sources */,
-				B9BC99A925C0FFBD00C024FE /* MJRefreshAutoStateFooter.m in Sources */,
 				B9BC99E825C0FFBD00C024FE /* UIImageView+HighlightedWebCache.m in Sources */,
+				B9EA4E8C25C7E806000FFDA2 /* MJRefreshBackNormalFooter.m in Sources */,
 				B9BC9A2125C0FFBD00C024FE /* EZLocationAlertVCViewController.m in Sources */,
 				B9BC99D025C0FFBD00C024FE /* UIViewController+DDKit.m in Sources */,
 				B9BC99F625C0FFBD00C024FE /* Aspects.m in Sources */,
+				B9EA4E8925C7E806000FFDA2 /* UIView+MJExtension.m in Sources */,
 				B9BC99FA25C0FFBD00C024FE /* Toast+UIView.m in Sources */,
 				B9BC9A1525C0FFBD00C024FE /* EZAPConfigResultViewController.m in Sources */,
 				B9BC9A1025C0FFBD00C024FE /* EZMessagePhotoViewController.m in Sources */,
@@ -1426,39 +1370,36 @@
 				B9BC9A2625C0FFBD00C024FE /* EZEditViewController.m in Sources */,
 				B9BC9A2525C0FFBD00C024FE /* EZOnlineCameraCell.m in Sources */,
 				B9BC999B25C0FFBD00C024FE /* UITableView+FDTemplateLayoutCell.m in Sources */,
-				B9BC9A0125C0FFBD00C024FE /* EZPlayDemoViewController.m in Sources */,
-				B9BC99BF25C0FFBD00C024FE /* ViewController+MASAdditions.m in Sources */,
 				B9BC9A0325C0FFBD00C024FE /* CameraListCell.m in Sources */,
+				B9EA4E9025C7E806000FFDA2 /* MJRefreshNormalHeader.m in Sources */,
+				B9EA4E8825C7E806000FFDA2 /* NSBundle+MJRefresh.m in Sources */,
+				B9EA4E8725C7E806000FFDA2 /* UIScrollView+MJExtension.m in Sources */,
 				B9BC9A0225C0FFBD00C024FE /* DeviceListCell.m in Sources */,
-				B9BC99C225C0FFBD00C024FE /* MASLayoutConstraint.m in Sources */,
 				B9BC9A1825C0FFBD00C024FE /* EZHubDebugViewController.m in Sources */,
 				B9BC9A2325C0FFBD00C024FE /* EZMessageListViewController.m in Sources */,
-				B9BC99AC25C0FFBD00C024FE /* MJRefreshNormalHeader.m in Sources */,
 				B9BC99B725C0FFBD00C024FE /* MWZoomingScrollView.m in Sources */,
+				B9EA4E8A25C7E806000FFDA2 /* MJRefreshBackGifFooter.m in Sources */,
 				B9BC99B625C0FFBD00C024FE /* MWCaptionView.m in Sources */,
 				B9BC9A0B25C0FFBD00C024FE /* EZDeviceUpgradeViewController.m in Sources */,
 				B9BC9A0C25C0FFBD00C024FE /* EZLocalCameraListViewController.m in Sources */,
 				B9BC99B525C0FFBD00C024FE /* MWPhotoBrowser.m in Sources */,
-				B9BC99C125C0FFBD00C024FE /* MASConstraintMaker.m in Sources */,
 				B9BC99CD25C0FFBD00C024FE /* NSArray+DDKit.m in Sources */,
 				B9BC999D25C0FFBD00C024FE /* UITableView+FDTemplateLayoutCellDebug.m in Sources */,
 				B9BC999E25C0FFBD00C024FE /* UITableView+FDIndexPathHeightCache.m in Sources */,
 				B9BC99F325C0FFBD00C024FE /* UIButton+WebCache.m in Sources */,
-				B9BC99A825C0FFBD00C024FE /* MJRefreshBackNormalFooter.m in Sources */,
 				B9BC99B925C0FFBD00C024FE /* MWTapDetectingImageView.m in Sources */,
 				B9BC99DE25C0FFBD00C024FE /* AFHTTPRequestOperationManager.m in Sources */,
-				B9BC99AE25C0FFBD00C024FE /* MJRefreshGifHeader.m in Sources */,
 				B9BC999F25C0FFBD00C024FE /* DALabeledCircularProgressView.m in Sources */,
 				B9BC99B825C0FFBD00C024FE /* UIImage+MWPhotoBrowser.m in Sources */,
 				B9BC99E025C0FFBD00C024FE /* AFHTTPRequestOperation.m in Sources */,
 				B9BC99CB25C0FFBD00C024FE /* UILabel+DDKit.m in Sources */,
 				B9BC99F925C0FFBD00C024FE /* UIImageView+EzvizOpenSDK.m in Sources */,
 				B9BC9A2425C0FFBD00C024FE /* UIAlertController+TextField.m in Sources */,
+				B9EA4E9625C7E806000FFDA2 /* MJRefreshAutoFooter.m in Sources */,
 				B9BC9A1225C0FFBD00C024FE /* EZLivePlayViewController.m in Sources */,
 				B9BC99ED25C0FFBD00C024FE /* SDWebImagePrefetcher.m in Sources */,
 				B9BC99A025C0FFBD00C024FE /* DACircularProgressView.m in Sources */,
 				B9BC99CE25C0FFBD00C024FE /* NSString+DDKit.m in Sources */,
-				B9BC99A625C0FFBD00C024FE /* MJRefreshBackGifFooter.m in Sources */,
 				B9BC9A0825C0FFBD00C024FE /* EZVideoTalkViewcontroller.mm in Sources */,
 				B9BC9A0925C0FFBD00C024FE /* EZMessagePlaybackViewController.m in Sources */,
 				B9BC956225C0FC6C00C024FE /* DeviceInfo.m in Sources */,
@@ -1468,9 +1409,7 @@
 				B9BC99BC25C0FFBD00C024FE /* MWGridViewController.m in Sources */,
 				B9BC99EB25C0FFBD00C024FE /* UIImage+MultiFormat.m in Sources */,
 				B9BC99F225C0FFBD00C024FE /* UIView+WebCacheOperation.m in Sources */,
-				B9BC99C425C0FFBD00C024FE /* View+MASAdditions.m in Sources */,
 				B9BC9A1425C0FFBD00C024FE /* EZInputSerialViewController.m in Sources */,
-				B9BC99C525C0FFBD00C024FE /* MASConstraint.m in Sources */,
 				B9BC99DD25C0FFBD00C024FE /* AFURLSessionManager.m in Sources */,
 				B9BC9A1A25C0FFBD00C024FE /* EZDeviceTableViewController.m in Sources */,
 				B9BC99D625C0FFBD00C024FE /* AFNetworkActivityIndicatorManager.m in Sources */,
@@ -1482,11 +1421,8 @@
 				B9BC9A2825C0FFBD00C024FE /* EZPlaybackViewController.m in Sources */,
 				B9BC9A1C25C0FFBD00C024FE /* EZSupportViewController.m in Sources */,
 				B9BC92FF25C0FC3500C024FE /* EZSDK.m in Sources */,
-				B9BC99A525C0FFBD00C024FE /* UIView+MJExtension.m in Sources */,
 				B9BC99BA25C0FFBD00C024FE /* MWPhoto.m in Sources */,
-				B9BC99BE25C0FFBD00C024FE /* NSLayoutConstraint+MASDebugAdditions.m in Sources */,
 				B9BC9A1D25C0FFBD00C024FE /* EZCalendarViewController.m in Sources */,
-				B9BC99B125C0FFBD00C024FE /* MJRefreshBackFooter.m in Sources */,
 				B9BC9A2925C0FFBD00C024FE /* GlobalKit.m in Sources */,
 				B9BC99E625C0FFBD00C024FE /* SDWebImageManager.m in Sources */,
 				B9BC99EC25C0FFBD00C024FE /* SDWebImageCompat.m in Sources */,
@@ -1494,42 +1430,44 @@
 				B9BC9A1B25C0FFBD00C024FE /* EZWifiTipsViewController.m in Sources */,
 				B9BC99D925C0FFBD00C024FE /* UIActivityIndicatorView+AFNetworking.m in Sources */,
 				B9BC9A0725C0FFBD00C024FE /* EZWifiConfigViewController.m in Sources */,
-				B9BC99AD25C0FFBD00C024FE /* MJRefreshStateHeader.m in Sources */,
 				B9BC9A1325C0FFBD00C024FE /* EZLocalRealPlayViewController.m in Sources */,
 				B9BC9A2725C0FFBD00C024FE /* EZAddByQRCodeViewController.m in Sources */,
 				B9BC99FC25C0FFBD00C024FE /* NSDate-Utilities.m in Sources */,
 				B9BC9A0425C0FFBD00C024FE /* MessageListCell.m in Sources */,
-				B9BC99B025C0FFBD00C024FE /* MJRefreshHeader.m in Sources */,
+				B9EA4E8525C7E806000FFDA2 /* UIScrollView+MJRefresh.m in Sources */,
 				B9BC99DF25C0FFBD00C024FE /* AFURLRequestSerialization.m in Sources */,
 				B9BC99E925C0FFBD00C024FE /* SDWebImageDownloader.m in Sources */,
-				B9BC99A725C0FFBD00C024FE /* MJRefreshBackStateFooter.m in Sources */,
 				B9BC99FF25C0FFBD00C024FE /* HIKLoadViewItem.m in Sources */,
 				B9BC99D125C0FFBD00C024FE /* NSDate+DDKit.m in Sources */,
-				B9BC99B225C0FFBD00C024FE /* MJRefreshAutoFooter.m in Sources */,
 				B9BC9A1625C0FFBD00C024FE /* EZOfflineCameraCell.m in Sources */,
 				B9BC99CC25C0FFBD00C024FE /* UIColor+DDKit.m in Sources */,
 				B9BC99DC25C0FFBD00C024FE /* AFURLConnectionOperation.m in Sources */,
 				B9BC99E525C0FFBD00C024FE /* MKAnnotationView+WebCache.m in Sources */,
 				B9BC9A0F25C0FFBD00C024FE /* EZDeviceResultViewController.m in Sources */,
 				B9BC99E425C0FFBD00C024FE /* UIImage+WebP.m in Sources */,
+				B9EA4E8E25C7E806000FFDA2 /* MJRefreshAutoGifFooter.m in Sources */,
 				B9BC99FB25C0FFBD00C024FE /* EZRecordCell.m in Sources */,
 				B9BC9A0625C0FFBD00C024FE /* EZCameraTableViewController.m in Sources */,
-				B9BC9A2A25C0FFBD00C024FE /* DemoAPITableViewController.m in Sources */,
+				B9EA4E8625C7E806000FFDA2 /* MJRefreshConst.m in Sources */,
 				B9BC99FD25C0FFBD00C024FE /* HIKLoadViewItem+configPath.m in Sources */,
 				B9BC99E325C0FFBD00C024FE /* MBProgressHUD.m in Sources */,
-				B9BC99B325C0FFBD00C024FE /* MJRefreshComponent.m in Sources */,
+				B9EA4E8F25C7E806000FFDA2 /* MJRefreshAutoNormalFooter.m in Sources */,
 				B9BC99BB25C0FFBD00C024FE /* MWTapDetectingView.m in Sources */,
 				B9BC99F725C0FFBD00C024FE /* EZQRView.m in Sources */,
 				B9BC9A1F25C0FFBD00C024FE /* EZSettingViewController.m in Sources */,
+				B9EA4E9725C7E806000FFDA2 /* MJRefreshComponent.m in Sources */,
 				B9BC9A2025C0FFBD00C024FE /* EZDdnsDeviceTableViewController.m in Sources */,
-				B9BC99A325C0FFBD00C024FE /* MJRefreshConst.m in Sources */,
 				B9BC99CF25C0FFBD00C024FE /* UIImage+DDKit.m in Sources */,
-				B9BC99A225C0FFBD00C024FE /* UIScrollView+MJRefresh.m in Sources */,
 				B9BC9A0D25C0FFBD00C024FE /* UIViewController+EZBackPop.m in Sources */,
+				B9EA4E9525C7E806000FFDA2 /* MJRefreshBackFooter.m in Sources */,
 				B9BC9A2225C0FFBD00C024FE /* UINavigationController+EZOpenSDK.m in Sources */,
 				B9BC99E725C0FFBD00C024FE /* SDWebImageDecoder.m in Sources */,
+				B9EA4E9225C7E806000FFDA2 /* MJRefreshGifHeader.m in Sources */,
 				B9BC99EE25C0FFBD00C024FE /* SDImageCache.m in Sources */,
 				B9BC99D725C0FFBD00C024FE /* UIImageView+AFNetworking.m in Sources */,
+				B9EA4E9125C7E806000FFDA2 /* MJRefreshStateHeader.m in Sources */,
+				B9EA4E9425C7E806000FFDA2 /* MJRefreshHeader.m in Sources */,
+				B9EA4E8B25C7E806000FFDA2 /* MJRefreshBackStateFooter.m in Sources */,
 				B9BC99A125C0FFBD00C024FE /* DDCollectionViewFlowLayout.m in Sources */,
 				B9BC9A1E25C0FFBD00C024FE /* EZWifiInfoViewController.m in Sources */,
 				B9BC9A1925C0FFBD00C024FE /* EZAPWiFiConfigViewController.m in Sources */,
diff --git a/EZSDK/EZSDK/EZ/DemoAPITableViewController.h b/EZSDK/EZSDK/EZ/DemoAPITableViewController.h
deleted file mode 100644
index 0fb3bfe..0000000
--- a/EZSDK/EZSDK/EZ/DemoAPITableViewController.h
+++ /dev/null
@@ -1,13 +0,0 @@
-//
-//  DemoAPITableViewController.h
-//  EZOpenSDKDemo
-//
-//  Created by DeJohn Dong on 15/11/24.
-//  Copyright 漏 2015骞� Ezviz. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface DemoAPITableViewController : UITableViewController
-
-@end
diff --git a/EZSDK/EZSDK/EZ/DemoAPITableViewController.m b/EZSDK/EZSDK/EZ/DemoAPITableViewController.m
deleted file mode 100644
index 8165aec..0000000
--- a/EZSDK/EZSDK/EZ/DemoAPITableViewController.m
+++ /dev/null
@@ -1,210 +0,0 @@
-//
-//  DemoAPITableViewController.m
-//  EZOpenSDKDemo
-//
-//  Created by DeJohn Dong on 15/11/24.
-//  Copyright 漏 2015骞� Ezviz. All rights reserved.
-//
-
-#import <AVFoundation/AVFoundation.h>
-#import "DemoAPITableViewController.h"
-
-#import "DDKit.h"
-#import "EZLeaveMessage.h"
-#import "EZDeviceInfo.h"
-#import "EZUserInfo.h"
-#import "EZAccessToken.h"
-#import "EZStorageInfo.h"
-#import "EZCameraInfo.h"
-#import "EZDetectorInfo.h"
-#import "EZLivePlayViewController.h"
-#import "EZPlayDemoViewController.h"
-#import "MBProgressHUD.h"
-#import "EZAreaInfo.h"
-#import "GlobalKit.h"
-
-@interface DemoAPITableViewController ()
-{
-    NSInteger _i;
-    NSString *_cameraId;
-}
-
-@property (nonatomic, strong) NSMutableArray *apis;
-@property (nonatomic, strong) NSMutableArray *columns;
-@property (nonatomic, strong) NSMutableArray *videoList;
-@property (nonatomic, strong) NSMutableArray *favorites;
-@property (nonatomic, strong) NSMutableArray *leaveList;
-@property (nonatomic, strong) AVAudioPlayer *audioPlayer;
-
-@end
-
-@implementation DemoAPITableViewController
-
-- (void)dealloc
-{
-    NSLog(@"%@ dealloc", self.class);
-}
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    
-    self.title = @"DemoAPI";
-    
-    if(!_apis)
-        _apis = [NSMutableArray new];
-    
-    if(!_columns)
-        _columns = [NSMutableArray new];
-    
-    if(!_videoList)
-        _videoList = [NSMutableArray new];
-    
-    if(!_favorites)
-        _favorites = [NSMutableArray new];
-    
-    if (!_leaveList) {
-        _leaveList = [NSMutableArray new];
-    }
-    
-    [_apis removeAllObjects];
-    [_apis addObjectsFromArray:@[NSLocalizedString(@"api_mirror_test", @"闀滃儚缈昏浆鎺ュ彛娴嬭瘯")]];
-    
-    // Uncomment the following line to preserve selection between presentations.
-    // self.clearsSelectionOnViewWillAppear = NO;
-    
-    // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
-    // self.navigationItem.rightBarButtonItem = self.editButtonItem;
-    
-    //鍒ゆ柇鏈湴淇濆瓨鐨刟ccessToken锛岀劧鍚庡悜SDK璁剧疆AccessToken銆�
-    if([EZOPENSDK isLogin])
-    {
-    }
-    else
-    {
-        if(LanguageIsChinese){
-            [EZOPENSDK openLoginPage:^(EZAccessToken *accessToken) {
-            }];
-        }else{
-            
-            [EZOPENSDK getAreaList:^(NSArray *areaList, NSError *error) {
-                EZAreaInfo *areaInfo = areaList.firstObject;
-                [EZOPENSDK openLoginPage:[NSString stringWithFormat:@"%ld",(long)areaInfo.id]
-                              completion:^(EZAccessToken *accessToken) {
-                }];
-            }];
-        }
-        
-        return;
-    }
-}
-
-- (void)didReceiveMemoryWarning {
-    [super didReceiveMemoryWarning];
-    // Dispose of any resources that can be recreated.
-}
-
-#pragma mark - Table view data source
-
-- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
-    return 1;
-}
-
-- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
-    return self.apis.count;
-}
-
-- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
-    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"DemoAPICell" forIndexPath:indexPath];
-    
-    // Configure the cell...
-    cell.textLabel.text = _apis[indexPath.row];
-    
-    return cell;
-}
-
-- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
-    [tableView deselectRowAtIndexPath:indexPath animated:YES];
-    if ([indexPath row] == 0)
-    {
-        __block MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
-        hud.labelText = NSLocalizedString(@"api_getting_device_list", @"姝e湪鑾峰彇鐢ㄦ埛璁惧鍒楄〃...");
-        [EZOPENSDK getDeviceList:0
-                        pageSize:10
-                      completion:^(NSArray *deviceList, NSInteger totalCount, NSError *error) {
-            if (error)
-            {
-                hud.labelText = [NSString stringWithFormat:@"%@锛�%d锛�",NSLocalizedString(@"api_get_device_list_fail",@"璁惧鍒楄〃鑾峰彇澶辫触"), (int)error.code];
-                [hud hide:YES afterDelay:0.5];
-                return;
-            }
-            for (EZDeviceInfo *deviceInfo in deviceList)
-            {
-                if (deviceInfo.cameraNum > 0 && deviceInfo.status == 1) {
-                    NSString *deviceSerial = deviceInfo.deviceSerial;
-                    EZCameraInfo *cameraInfo = [deviceInfo.cameraInfo firstObject];
-                    hud.labelText = NSLocalizedString(@"api_flip_over",@"姝e湪鎿嶄綔璁惧閫氶亾鐢婚潰缈昏浆...");
-                    [EZOPENSDK controlVideoFlip:deviceSerial
-                                       cameraNo:cameraInfo.cameraNo
-                                        command:EZDisplayCommandCenter
-                                         result:^(NSError *error) {
-                        hud.labelText = [NSString stringWithFormat:@"%@锛歟rror code is %d",NSLocalizedString(@"api_flip_over_result",@"鐢婚潰缈昏浆缁撴灉"), (int)error.code];
-                        [hud hide:YES afterDelay:0.5];
-                    }];
-                    break;
-                }
-            }
-        }];
-    }
-}
-
-/*
- // Override to support conditional editing of the table view.
- - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath {
- // Return NO if you do not want the specified item to be editable.
- return YES;
- }
- */
-
-/*
- // Override to support editing the table view.
- - (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath {
- if (editingStyle == UITableViewCellEditingStyleDelete) {
- // Delete the row from the data source
- [tableView deleteRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
- } else if (editingStyle == UITableViewCellEditingStyleInsert) {
- // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
- }
- }
- */
-
-/*
- // Override to support rearranging the table view.
- - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath {
- }
- */
-
-/*
- // Override to support conditional rearranging of the table view.
- - (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath {
- // Return NO if you do not want the item to be re-orderable.
- return YES;
- }
- */
-
-#pragma mark - Navigation
-
-// In a storyboard-based application, you will often want to do a little preparation before navigation
-- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
-    // Get the new view controller using [segue destinationViewController].
-    // Pass the selected object to the new view controller.
-}
-
-- (IBAction)checkCancel:(id)sender {
-    __weak typeof(self) weakSelf = self;
-    [EZOPENSDK openChangePasswordPage:^(NSInteger resultCode) {
-        NSLog(@"resultCode = %d", (int)resultCode);
-        [weakSelf.navigationController popViewControllerAnimated:YES];
-    }];
-}
-
-@end
diff --git a/EZSDK/EZSDK/EZ/EZPlayDemoViewController.h b/EZSDK/EZSDK/EZ/EZPlayDemoViewController.h
deleted file mode 100644
index 46be435..0000000
--- a/EZSDK/EZSDK/EZ/EZPlayDemoViewController.h
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-//  EZPlayDemoViewController.h
-//  EZOpenSDKDemo
-//
-//  Created by DeJohn Dong on 16/3/30.
-//  Copyright 漏 2016骞� Ezviz. All rights reserved.
-//
-
-//#import "ViewController.h"
-#import <UIKit/UIKit.h>
-
-@interface EZPlayDemoViewController : UIViewController
-
-@property (nonatomic, strong) NSArray *cameraList;
-
-@end
diff --git a/EZSDK/EZSDK/EZ/EZPlayDemoViewController.m b/EZSDK/EZSDK/EZ/EZPlayDemoViewController.m
deleted file mode 100644
index 87199d0..0000000
--- a/EZSDK/EZSDK/EZ/EZPlayDemoViewController.m
+++ /dev/null
@@ -1,109 +0,0 @@
-//
-//  EZPlayDemoViewController.m
-//  EZOpenSDKDemo
-//
-//  Created by DeJohn Dong on 16/3/30.
-//  Copyright 漏 2016骞� Ezviz. All rights reserved.
-//
-
-#import "EZPlayDemoViewController.h"
-
-#import "EZPlayer.h"
-
-
-@interface EZPlayDemoViewController ()<EZPlayerDelegate> {
-    EZPlayer *_player1;
-    EZPlayer *_player2;
-    EZPlayer *_player3;
-    EZPlayer *_player4;
-}
-
-@property (nonatomic, weak) IBOutlet UIView *playerView1;
-@property (nonatomic, weak) IBOutlet UIView *playerView2;
-@property (nonatomic, weak) IBOutlet UIView *playerView3;
-@property (nonatomic, weak) IBOutlet UIView *playerView4;
-
-
-@end
-
-@implementation EZPlayDemoViewController
-
-- (void)dealloc
-{
-    [EZOPENSDK releasePlayer:_player1];
-    [EZOPENSDK releasePlayer:_player2];
-    [EZOPENSDK releasePlayer:_player3];
-    [EZOPENSDK releasePlayer:_player4];
-}
-
-- (void)viewDidLoad {
-    [super viewDidLoad];
-    // Do any additional setup after loading the view.
-//    if (!_player1)
-//    {
-//        _player1 = [EZOPENSDK createPlayerWithCameraId:_cameraList[0]];
-//    }
-//    [_player1 setPlayerView:_playerView1];
-//    _player1.delegate = self;
-//    [_player1 startRealPlay];
-//    
-//    if (!_player2)
-//    {
-//        _player2 = [EZOPENSDK createPlayerWithCameraId:_cameraList[1]];
-//    }
-//    [_player2 setPlayerView:_playerView2];
-//    _player2.delegate = self;
-//    [_player2 startRealPlay];
-//    
-//    if (!_player3)
-//    {
-//        _player3 = [EZOPENSDK createPlayerWithCameraId:_cameraList[2]];
-//    }
-//    [_player3 setPlayerView:_playerView3];
-//    _player3.delegate = self;
-//    [_player3 startRealPlay];
-    
-//    if (!_player4)
-//    {
-//        _player4 = [EZOPENSDK createPlayerWithCameraId:_cameraList[3]];
-//    }
-//    [_player4 setPlayerView:_playerView4];
-//    _player4.delegate = self;
-//    [_player4 startRealPlay];
-}
-
-- (void)didReceiveMemoryWarning {
-    [super didReceiveMemoryWarning];
-    // Dispose of any resources that can be recreated.
-}
-
-/*
-#pragma mark - Navigation
-
-// In a storyboard-based application, you will often want to do a little preparation before navigation
-- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
-    // Get the new view controller using [segue destinationViewController].
-    // Pass the selected object to the new view controller.
-}
-*/
-
-#pragma mark - PlayerDelegate Methods
-
-- (void)player:(EZPlayer *)player didPlayFailed:(NSError *)error
-{
-    NSLog(@"player = %@, error = %@",player, error);
-}
-
-- (void)player:(EZPlayer *)player didReceivedMessage:(NSInteger)messageCode
-{
-    NSLog(@"player = %@, messageCode = %d", player, (int)messageCode);
-}
-
-#pragma mark - Action Methods
-
-- (IBAction)tapTouch:(id)sender
-{
-    
-}
-
-@end
diff --git a/EZSDK/EZSDK/EZ/Global/GlobalKit.h b/EZSDK/EZSDK/EZ/Global/GlobalKit.h
index b7c4e15..a462dd7 100644
--- a/EZSDK/EZSDK/EZ/Global/GlobalKit.h
+++ b/EZSDK/EZSDK/EZ/Global/GlobalKit.h
@@ -8,21 +8,15 @@
 
 #import <Foundation/Foundation.h>
 
-#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
-#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
+//#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
+//#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
 
+////涓枃璧板浗鍐咃紝 涓嶆槸涓枃璧版捣澶�
+#define EZOPENSDK LanguageIsChinese ? [EZOpenSDK class] : [EZGlobalSDK class]
 
-//涓枃璧板浗鍐咃紝 涓嶆槸涓枃璧版捣澶�
+//2021-02-01 涓嶈�冭檻娴峰鍏堬紝榛樿鍥藉唴
+#define LanguageIsChinese true
 
-#ifdef LanguageIsChinese
-
-#define EZOPENSDK [EZOpenSDK class]
-
-#else
-
-#define EZOPENSDK [EZGlobalSDK class]
-
-#endif
 
 
 @interface GlobalKit : NSObject
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceTableViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceTableViewController.m
index aba9ff6..222b769 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceTableViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZDeviceTableViewController.m
@@ -43,9 +43,17 @@
 
 @implementation EZDeviceTableViewController
 
+-(void)viewWillDisappear:(BOOL)animated
+{
+    //    self.navigationController.navigationBarHidden = YES;//2021-02-01 娣诲姞闅愯棌navigationBarHidden
+}
+
 - (void)viewDidLoad
 {
     [super viewDidLoad];
+    
+    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(0, -60)
+     forBarMetrics:UIBarMetricsDefault];
     
     // Uncomment the following line to preserve selection between presentations.
     // self.clearsSelectionOnViewWillAppear = NO;
@@ -66,6 +74,9 @@
 - (void)viewWillAppear:(BOOL)animated
 {
     [super viewWillAppear:animated];
+    
+    //    self.navigationController.navigationBarHidden = NO;//2021-02-01
+    
     if (_needRefresh)
     {
         _needRefresh = NO;
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZEditViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZEditViewController.m
index 4ff4eb8..1ba9a72 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZEditViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZEditViewController.m
@@ -23,9 +23,8 @@
     // Do any additional setup after loading the view.
     
     self.title = NSLocalizedString(@"device_modify_name_title", @"淇敼璁惧鍚嶇О");
-    
-//    self.deviceNameTextField.text = self.cameraInfo.deviceName;
-//    
+    self.deviceNameTextField.text = self.deviceInfo.deviceName;
+//
 //    self.deviceNameTextField.leftView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 10, 30)];
 //    self.deviceNameTextField.leftViewMode = UITextFieldViewModeAlways;
 //    [self.deviceNameTextField dd_addSeparatorWithType:ViewSeparatorTypeVerticalSide];
@@ -91,7 +90,7 @@
                       NSLog(@"error = %@",error);
                       if(!error)
                       {
-//                          self.cameraInfo.deviceName = self.deviceNameTextField.text;
+                          self.deviceInfo.deviceName = self.deviceNameTextField.text;
                           [self.navigationController popViewControllerAnimated:YES];
                       }
                   }];
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
index ad5c353..a86a6a8 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZLivePlayViewController.m
@@ -223,11 +223,13 @@
 
 - (void)viewDidAppear:(BOOL)animated {
     [super viewDidAppear:animated];
+//    self.navigationController.navigationBarHidden = NO;//2021-02-01
     self.ptzViewContraint.constant = self.bottomView.frame.size.height;
     self.talkViewContraint.constant = self.ptzViewContraint.constant;
 }
 
 - (void)viewWillDisappear:(BOOL)animated {
+//    self.navigationController.navigationBarHidden = YES;//2021-02-01 娣诲姞闅愯棌navigationBarHidden
     [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(hideQualityView) object:nil];
     //缁撴潫鏈湴褰曞儚
     if(self.localRecordButton.selected)
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m
index f1957be..0dc8782 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZPlaybackViewController.m
@@ -559,7 +559,7 @@
         
         NSLog(@"GetStreamFetchType:%d", [self.player getStreamFetchType]);
         
-        [self showStreamFetchType];
+//        [self showStreamFetchType];
     }
     else if (messageCode == PLAYER_PLAYBACK_STOP)
     {
diff --git a/EZSDK/EZSDK/EZ/UIViewControllers/EZSettingViewController.m b/EZSDK/EZSDK/EZ/UIViewControllers/EZSettingViewController.m
index eafa0f0..31aab9b 100644
--- a/EZSDK/EZSDK/EZ/UIViewControllers/EZSettingViewController.m
+++ b/EZSDK/EZSDK/EZ/UIViewControllers/EZSettingViewController.m
@@ -142,6 +142,7 @@
 
 - (void)viewWillAppear:(BOOL)animated {
     [super viewWillAppear:animated];
+//    self.navigationController.navigationBarHidden = NO;//2021-02-01
     [self.tableView reloadData];
 }
 
@@ -150,7 +151,7 @@
         [_timer invalidate];
         _timer = nil;
     }
-
+//    self.navigationController.navigationBarHidden = YES;//2021-02-01 娣诲姞闅愯棌navigationBarHidden
     [super viewWillDisappear:animated];
 }
 
@@ -186,7 +187,7 @@
             make.centerY.mas_equalTo(cell.contentView.mas_centerY);
             make.height.mas_equalTo(@20);
         }];
-//        self.nameLabel.text = self.cameraInfo.deviceName;
+        self.nameLabel.text = self.deviceInfo.deviceName;
     }
     else if (indexPath.section == 1)
     {
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshAutoFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshAutoFooter.h
deleted file mode 100644
index 5aac4f6..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshAutoFooter.h
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-//  MJRefreshAutoFooter.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshFooter.h"
-
-@interface MJRefreshAutoFooter : MJRefreshFooter
-/** 鏄惁鑷姩鍒锋柊(榛樿涓篩ES) */
-@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
-
-/** 褰撳簳閮ㄦ帶浠跺嚭鐜板灏戞椂灏辫嚜鍔ㄥ埛鏂�(榛樿涓�1.0锛屼篃灏辨槸搴曢儴鎺т欢瀹屽叏鍑虹幇鏃讹紝鎵嶄細鑷姩鍒锋柊) */
-@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("璇蜂娇鐢╝utomaticallyChangeAlpha灞炴��");
-
-/** 褰撳簳閮ㄦ帶浠跺嚭鐜板灏戞椂灏辫嚜鍔ㄥ埛鏂�(榛樿涓�1.0锛屼篃灏辨槸搴曢儴鎺т欢瀹屽叏鍑虹幇鏃讹紝鎵嶄細鑷姩鍒锋柊) */
-@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshAutoFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshAutoFooter.m
deleted file mode 100644
index fd1687f..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshAutoFooter.m
+++ /dev/null
@@ -1,133 +0,0 @@
-//
-//  MJRefreshAutoFooter.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshAutoFooter.h"
-
-@interface MJRefreshAutoFooter()
-@end
-
-@implementation MJRefreshAutoFooter
-
-#pragma mark - 鍒濆鍖�
-- (void)willMoveToSuperview:(UIView *)newSuperview
-{
-    [super willMoveToSuperview:newSuperview];
-    
-    if (newSuperview) { // 鏂扮殑鐖舵帶浠�
-        if (self.hidden == NO) {
-            self.scrollView.mj_insetB += self.mj_h;
-        }
-        
-        // 璁剧疆浣嶇疆
-        self.mj_y = _scrollView.mj_contentH;
-    } else { // 琚Щ闄や簡
-        if (self.hidden == NO) {
-            self.scrollView.mj_insetB -= self.mj_h;
-        }
-    }
-}
-
-#pragma mark - 杩囨湡鏂规硶
-- (void)setAppearencePercentTriggerAutoRefresh:(CGFloat)appearencePercentTriggerAutoRefresh
-{
-    self.triggerAutomaticallyRefreshPercent = appearencePercentTriggerAutoRefresh;
-}
-
-- (CGFloat)appearencePercentTriggerAutoRefresh
-{
-    return self.triggerAutomaticallyRefreshPercent;
-}
-
-#pragma mark - 瀹炵幇鐖剁被鐨勬柟娉�
-- (void)prepare
-{
-    [super prepare];
-    
-    // 榛樿搴曢儴鎺т欢100%鍑虹幇鏃舵墠浼氳嚜鍔ㄥ埛鏂�
-    self.triggerAutomaticallyRefreshPercent = 1.0;
-    
-    // 璁剧疆涓洪粯璁ょ姸鎬�
-    self.automaticallyRefresh = YES;
-}
-
-- (void)scrollViewContentSizeDidChange:(NSDictionary *)change
-{
-    [super scrollViewContentSizeDidChange:change];
-    
-    // 璁剧疆浣嶇疆
-    self.mj_y = self.scrollView.mj_contentH;
-}
-
-- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change
-{
-    [super scrollViewContentOffsetDidChange:change];
-    
-    if (self.state != MJRefreshStateIdle || !self.automaticallyRefresh || self.mj_y == 0) return;
-    
-    if (_scrollView.mj_insetT + _scrollView.mj_contentH > _scrollView.mj_h) { // 鍐呭瓒呰繃涓�涓睆骞�
-        // 杩欓噷鐨刜scrollView.mj_contentH鏇挎崲鎺塻elf.mj_y鏇翠负鍚堢悊
-        if (_scrollView.mj_offsetY >= _scrollView.mj_contentH - _scrollView.mj_h + self.mj_h * self.triggerAutomaticallyRefreshPercent + _scrollView.mj_insetB - self.mj_h) {
-            // 闃叉鎵嬫澗寮�鏃惰繛缁皟鐢�
-            CGPoint old = [change[@"old"] CGPointValue];
-            CGPoint new = [change[@"new"] CGPointValue];
-            if (new.y <= old.y) return;
-            
-            // 褰撳簳閮ㄥ埛鏂版帶浠跺畬鍏ㄥ嚭鐜版椂锛屾墠鍒锋柊
-            [self beginRefreshing];
-        }
-    }
-}
-
-- (void)scrollViewPanStateDidChange:(NSDictionary *)change
-{
-    [super scrollViewPanStateDidChange:change];
-    
-    if (self.state != MJRefreshStateIdle) return;
-    
-    if (_scrollView.panGestureRecognizer.state == UIGestureRecognizerStateEnded) {// 鎵嬫澗寮�
-        if (_scrollView.mj_insetT + _scrollView.mj_contentH <= _scrollView.mj_h) {  // 涓嶅涓�涓睆骞�
-            if (_scrollView.mj_offsetY >= - _scrollView.mj_insetT) { // 鍚戜笂鎷�
-                [self beginRefreshing];
-            }
-        } else { // 瓒呭嚭涓�涓睆骞�
-            if (_scrollView.mj_offsetY >= _scrollView.mj_contentH + _scrollView.mj_insetB - _scrollView.mj_h) {
-                [self beginRefreshing];
-            }
-        }
-    }
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    if (state == MJRefreshStateRefreshing) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [self executeRefreshingCallback];
-        });
-    }
-}
-
-- (void)setHidden:(BOOL)hidden
-{
-    BOOL lastHidden = self.isHidden;
-    
-    [super setHidden:hidden];
-    
-    if (!lastHidden && hidden) {
-        self.state = MJRefreshStateIdle;
-        
-        self.scrollView.mj_insetB -= self.mj_h;
-    } else if (lastHidden && !hidden) {
-        self.scrollView.mj_insetB += self.mj_h;
-        
-        // 璁剧疆浣嶇疆
-        self.mj_y = _scrollView.mj_contentH;
-    }
-}
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshBackFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshBackFooter.m
deleted file mode 100644
index c3d0db6..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshBackFooter.m
+++ /dev/null
@@ -1,166 +0,0 @@
-//
-//  MJRefreshBackFooter.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshBackFooter.h"
-
-@interface MJRefreshBackFooter()
-@property (assign, nonatomic) NSInteger lastRefreshCount;
-@property (assign, nonatomic) CGFloat lastBottomDelta;
-@end
-
-@implementation MJRefreshBackFooter
-
-#pragma mark - 鍒濆鍖�
-- (void)willMoveToSuperview:(UIView *)newSuperview
-{
-    [super willMoveToSuperview:newSuperview];
-    
-    [self scrollViewContentSizeDidChange:nil];
-}
-
-#pragma mark - 瀹炵幇鐖剁被鐨勬柟娉�
-- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change
-{
-    [super scrollViewContentOffsetDidChange:change];
-    
-    // 濡傛灉姝e湪鍒锋柊锛岀洿鎺ヨ繑鍥�
-    if (self.state == MJRefreshStateRefreshing) return;
-    
-    _scrollViewOriginalInset = self.scrollView.contentInset;
-    
-    // 褰撳墠鐨刢ontentOffset
-    CGFloat currentOffsetY = self.scrollView.mj_offsetY;
-    // 灏鹃儴鎺т欢鍒氬ソ鍑虹幇鐨刼ffsetY
-    CGFloat happenOffsetY = [self happenOffsetY];
-    // 濡傛灉鏄悜涓嬫粴鍔ㄥ埌鐪嬩笉瑙佸熬閮ㄦ帶浠讹紝鐩存帴杩斿洖
-    if (currentOffsetY <= happenOffsetY) return;
-    
-    CGFloat pullingPercent = (currentOffsetY - happenOffsetY) / self.mj_h;
-    
-    // 濡傛灉宸插叏閮ㄥ姞杞斤紝浠呰缃畃ullingPercent锛岀劧鍚庤繑鍥�
-    if (self.state == MJRefreshStateNoMoreData) {
-        self.pullingPercent = pullingPercent;
-        return;
-    }
-    
-    if (self.scrollView.isDragging) {
-        self.pullingPercent = pullingPercent;
-        // 鏅�� 鍜� 鍗冲皢鍒锋柊 鐨勪复鐣岀偣
-        CGFloat normal2pullingOffsetY = happenOffsetY + self.mj_h;
-        
-        if (self.state == MJRefreshStateIdle && currentOffsetY > normal2pullingOffsetY) {
-            // 杞负鍗冲皢鍒锋柊鐘舵��
-            self.state = MJRefreshStatePulling;
-        } else if (self.state == MJRefreshStatePulling && currentOffsetY <= normal2pullingOffsetY) {
-            // 杞负鏅�氱姸鎬�
-            self.state = MJRefreshStateIdle;
-        }
-    } else if (self.state == MJRefreshStatePulling) {// 鍗冲皢鍒锋柊 && 鎵嬫澗寮�
-        // 寮�濮嬪埛鏂�
-        [self beginRefreshing];
-    } else if (pullingPercent < 1) {
-        self.pullingPercent = pullingPercent;
-    }
-}
-
-- (void)scrollViewContentSizeDidChange:(NSDictionary *)change
-{
-    [super scrollViewContentSizeDidChange:change];
-    
-    // 鍐呭鐨勯珮搴�
-    CGFloat contentHeight = self.scrollView.mj_contentH + self.ignoredScrollViewContentInsetBottom;
-    // 琛ㄦ牸鐨勯珮搴�
-    CGFloat scrollHeight = self.scrollView.mj_h - self.scrollViewOriginalInset.top - self.scrollViewOriginalInset.bottom + self.ignoredScrollViewContentInsetBottom;
-    // 璁剧疆浣嶇疆鍜屽昂瀵�
-    self.mj_y = MAX(contentHeight, scrollHeight);
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    // 鏍规嵁鐘舵�佹潵璁剧疆灞炴��
-    if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
-        // 鍒锋柊瀹屾瘯
-        if (MJRefreshStateRefreshing == oldState) {
-            [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
-                self.scrollView.mj_insetB -= self.lastBottomDelta;
-                
-                // 鑷姩璋冩暣閫忔槑搴�
-                if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
-            } completion:^(BOOL finished) {
-                self.pullingPercent = 0.0;
-            }];
-        }
-        
-        CGFloat deltaH = [self heightForContentBreakView];
-        // 鍒氬埛鏂板畬姣�
-        if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.totalDataCount != self.lastRefreshCount) {
-            self.scrollView.mj_offsetY = self.scrollView.mj_offsetY;
-        }
-    } else if (state == MJRefreshStateRefreshing) {
-        // 璁板綍鍒锋柊鍓嶇殑鏁伴噺
-        self.lastRefreshCount = self.scrollView.totalDataCount;
-        
-        [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
-            CGFloat bottom = self.mj_h + self.scrollViewOriginalInset.bottom;
-            CGFloat deltaH = [self heightForContentBreakView];
-            if (deltaH < 0) { // 濡傛灉鍐呭楂樺害灏忎簬view鐨勯珮搴�
-                bottom -= deltaH;
-            }
-            self.lastBottomDelta = bottom - self.scrollView.mj_insetB;
-            self.scrollView.mj_insetB = bottom;
-            self.scrollView.mj_offsetY = [self happenOffsetY] + self.mj_h;
-        } completion:^(BOOL finished) {
-            [self executeRefreshingCallback];
-        }];
-    }
-}
-
-#pragma mark - 鍏叡鏂规硶
-- (void)endRefreshing
-{
-    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [super endRefreshing];
-        });
-    } else {
-        [super endRefreshing];
-    }
-}
-
-- (void)noticeNoMoreData
-{
-    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [super noticeNoMoreData];
-        });
-    } else {
-        [super noticeNoMoreData];
-    }
-}
-
-#pragma mark - 绉佹湁鏂规硶
-#pragma mark 鑾峰緱scrollView鐨勫唴瀹� 瓒呭嚭 view 鐨勯珮搴�
-- (CGFloat)heightForContentBreakView
-{
-    CGFloat h = self.scrollView.frame.size.height - self.scrollViewOriginalInset.bottom - self.scrollViewOriginalInset.top;
-    return self.scrollView.contentSize.height - h;
-}
-
-#pragma mark 鍒氬ソ鐪嬪埌涓婃媺鍒锋柊鎺т欢鏃剁殑contentOffset.y
-- (CGFloat)happenOffsetY
-{
-    CGFloat deltaH = [self heightForContentBreakView];
-    if (deltaH > 0) {
-        return deltaH - self.scrollViewOriginalInset.top;
-    } else {
-        return - self.scrollViewOriginalInset.top;
-    }
-}
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshComponent.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshComponent.h
deleted file mode 100644
index 943d405..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshComponent.h
+++ /dev/null
@@ -1,93 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-//  MJRefreshComponent.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/3/4.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//  鍒锋柊鎺т欢鐨勫熀绫�
-
-#import <UIKit/UIKit.h>
-#import "MJRefreshConst.h"
-#import "UIView+MJExtension.h"
-#import "UIScrollView+MJExtension.h"
-#import "UIScrollView+MJRefresh.h"
-
-/** 鍒锋柊鎺т欢鐨勭姸鎬� */
-typedef enum {
-    /** 鏅�氶棽缃姸鎬� */
-    MJRefreshStateIdle = 1,
-    /** 鏉惧紑灏卞彲浠ヨ繘琛屽埛鏂扮殑鐘舵�� */
-    MJRefreshStatePulling,
-    /** 姝e湪鍒锋柊涓殑鐘舵�� */
-    MJRefreshStateRefreshing,
-    /** 鍗冲皢鍒锋柊鐨勭姸鎬� */
-    MJRefreshStateWillRefresh,
-    /** 鎵�鏈夋暟鎹姞杞藉畬姣曪紝娌℃湁鏇村鐨勬暟鎹簡 */
-    MJRefreshStateNoMoreData
-} MJRefreshState;
-
-/** 杩涘叆鍒锋柊鐘舵�佺殑鍥炶皟 */
-typedef void (^MJRefreshComponentRefreshingBlock)();
-
-/** 鍒锋柊鎺т欢鐨勫熀绫� */
-@interface MJRefreshComponent : UIView
-{
-    /** 璁板綍scrollView鍒氬紑濮嬬殑inset */
-    UIEdgeInsets _scrollViewOriginalInset;
-    /** 鐖舵帶浠� */
-    __weak UIScrollView *_scrollView;
-}
-#pragma mark - 鍒锋柊鍥炶皟
-/** 姝e湪鍒锋柊鐨勫洖璋� */
-@property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock;
-/** 璁剧疆鍥炶皟瀵硅薄鍜屽洖璋冩柟娉� */
-- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action;
-/** 鍥炶皟瀵硅薄 */
-@property (weak, nonatomic) id refreshingTarget;
-/** 鍥炶皟鏂规硶 */
-@property (assign, nonatomic) SEL refreshingAction;
-/** 瑙﹀彂鍥炶皟锛堜氦缁欏瓙绫诲幓璋冪敤锛� */
-- (void)executeRefreshingCallback;
-
-#pragma mark - 鍒锋柊鐘舵�佹帶鍒�
-/** 杩涘叆鍒锋柊鐘舵�� */
-- (void)beginRefreshing;
-/** 缁撴潫鍒锋柊鐘舵�� */
-- (void)endRefreshing;
-/** 鏄惁姝e湪鍒锋柊 */
-- (BOOL)isRefreshing;
-/** 鍒锋柊鐘舵�� 涓�鑸氦缁欏瓙绫诲唴閮ㄥ疄鐜� */
-@property (assign, nonatomic) MJRefreshState state;
-
-#pragma mark - 浜ょ粰瀛愮被鍘昏闂�
-/** 璁板綍scrollView鍒氬紑濮嬬殑inset */
-@property (assign, nonatomic, readonly) UIEdgeInsets scrollViewOriginalInset;
-/** 鐖舵帶浠� */
-@property (weak, nonatomic, readonly) UIScrollView *scrollView;
-
-#pragma mark - 浜ょ粰瀛愮被浠幓瀹炵幇
-/** 鍒濆鍖� */
-- (void)prepare NS_REQUIRES_SUPER;
-/** 鎽嗘斁瀛愭帶浠秄rame */
-- (void)placeSubviews NS_REQUIRES_SUPER;
-/** 褰搒crollView鐨刢ontentOffset鍙戠敓鏀瑰彉鐨勬椂鍊欒皟鐢� */
-- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change NS_REQUIRES_SUPER;
-/** 褰搒crollView鐨刢ontentSize鍙戠敓鏀瑰彉鐨勬椂鍊欒皟鐢� */
-- (void)scrollViewContentSizeDidChange:(NSDictionary *)change NS_REQUIRES_SUPER;
-/** 褰搒crollView鐨勬嫋鎷界姸鎬佸彂鐢熸敼鍙樼殑鏃跺�欒皟鐢� */
-- (void)scrollViewPanStateDidChange:(NSDictionary *)change NS_REQUIRES_SUPER;
-
-
-#pragma mark - 鍏朵粬
-/** 鎷夋嫿鐨勭櫨鍒嗘瘮(浜ょ粰瀛愮被閲嶅啓) */
-@property (assign, nonatomic) CGFloat pullingPercent;
-/** 鏍规嵁鎷栨嫿姣斾緥鑷姩鍒囨崲閫忔槑搴� */
-@property (assign, nonatomic, getter=isAutoChangeAlpha) BOOL autoChangeAlpha MJRefreshDeprecated("璇蜂娇鐢╝utomaticallyChangeAlpha灞炴��");
-/** 鏍规嵁鎷栨嫿姣斾緥鑷姩鍒囨崲閫忔槑搴� */
-@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
-@end
-
-@interface UILabel(MJRefresh)
-+ (instancetype)label;
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshComponent.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshComponent.m
deleted file mode 100644
index 1b6ea27..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshComponent.m
+++ /dev/null
@@ -1,226 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-//  MJRefreshComponent.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/3/4.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshComponent.h"
-#import "MJRefreshConst.h"
-#import "UIView+MJExtension.h"
-#import "UIScrollView+MJRefresh.h"
-
-@interface MJRefreshComponent()
-@property (strong, nonatomic) UIPanGestureRecognizer *pan;
-@end
-
-@implementation MJRefreshComponent
-#pragma mark - 鍒濆鍖�
-- (instancetype)initWithFrame:(CGRect)frame
-{
-    if (self = [super initWithFrame:frame]) {
-        // 鍑嗗宸ヤ綔
-        [self prepare];
-        
-        // 榛樿鏄櫘閫氱姸鎬�
-        self.state = MJRefreshStateIdle;
-    }
-    return self;
-}
-
-- (void)prepare
-{
-    // 鍩烘湰灞炴��
-    self.autoresizingMask = UIViewAutoresizingFlexibleWidth;
-    self.backgroundColor = [UIColor clearColor];
-}
-
-- (void)layoutSubviews
-{
-    [super layoutSubviews];
-    
-    [self placeSubviews];
-}
-
-- (void)placeSubviews{}
-
-- (void)willMoveToSuperview:(UIView *)newSuperview
-{
-    [super willMoveToSuperview:newSuperview];
-    
-    // 濡傛灉涓嶆槸UIScrollView锛屼笉鍋氫换浣曚簨鎯�
-    if (newSuperview && ![newSuperview isKindOfClass:[UIScrollView class]]) return;
-    
-    // 鏃х殑鐖舵帶浠剁Щ闄ょ洃鍚�
-    [self removeObservers];
-    
-    if (newSuperview) { // 鏂扮殑鐖舵帶浠�
-        // 璁剧疆瀹藉害
-        self.mj_w = newSuperview.mj_w;
-        // 璁剧疆浣嶇疆
-        self.mj_x = 0;
-        
-        // 璁板綍UIScrollView
-        _scrollView = (UIScrollView *)newSuperview;
-        // 璁剧疆姘歌繙鏀寔鍨傜洿寮圭哀鏁堟灉
-        _scrollView.alwaysBounceVertical = YES;
-        // 璁板綍UIScrollView鏈�寮�濮嬬殑contentInset
-        _scrollViewOriginalInset = _scrollView.contentInset;
-        
-        // 娣诲姞鐩戝惉
-        [self addObservers];
-    }
-}
-
-- (void)drawRect:(CGRect)rect
-{
-    [super drawRect:rect];
-    
-    if (self.state == MJRefreshStateWillRefresh) {
-        // 棰勯槻view杩樻病鏄剧ず鍑烘潵灏辫皟鐢ㄤ簡beginRefreshing
-        self.state = MJRefreshStateRefreshing;
-    }
-}
-
-#pragma mark - KVO鐩戝惉
-- (void)addObservers
-{
-    NSKeyValueObservingOptions options = NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld;
-    [self.scrollView addObserver:self forKeyPath:MJRefreshKeyPathContentOffset options:options context:nil];
-    [self.scrollView addObserver:self forKeyPath:MJRefreshKeyPathContentSize options:options context:nil];
-    self.pan = self.scrollView.panGestureRecognizer;
-    [self.pan addObserver:self forKeyPath:MJRefreshKeyPathPanState options:options context:nil];
-}
-
-- (void)removeObservers
-{
-    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentOffset];
-    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];;
-    [self.pan removeObserver:self forKeyPath:MJRefreshKeyPathPanState];
-    self.pan = nil;
-}
-
-- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
-{
-    // 閬囧埌杩欎簺鎯呭喌灏辩洿鎺ヨ繑鍥�
-    if (!self.userInteractionEnabled) return;
-    
-    // 杩欎釜灏辩畻鐪嬩笉瑙佷篃闇�瑕佸鐞�
-    if ([keyPath isEqualToString:MJRefreshKeyPathContentSize]) {
-        [self scrollViewContentSizeDidChange:change];
-    }
-    
-    // 鐪嬩笉瑙�
-    if (self.hidden) return;
-    if ([keyPath isEqualToString:MJRefreshKeyPathContentOffset]) {
-        [self scrollViewContentOffsetDidChange:change];
-    } else if ([keyPath isEqualToString:MJRefreshKeyPathPanState]) {
-        [self scrollViewPanStateDidChange:change];
-    }
-}
-
-- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change{}
-- (void)scrollViewContentSizeDidChange:(NSDictionary *)change{}
-- (void)scrollViewPanStateDidChange:(NSDictionary *)change{}
-
-#pragma mark - 鍏叡鏂规硶
-#pragma mark 璁剧疆鍥炶皟瀵硅薄鍜屽洖璋冩柟娉�
-- (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action
-{
-    self.refreshingTarget = target;
-    self.refreshingAction = action;
-}
-
-#pragma mark 杩涘叆鍒锋柊鐘舵��
-- (void)beginRefreshing
-{
-    [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
-        self.alpha = 1.0;
-    }];
-    self.pullingPercent = 1.0;
-    // 鍙姝e湪鍒锋柊锛屽氨瀹屽叏鏄剧ず
-    if (self.window) {
-        self.state = MJRefreshStateRefreshing;
-    } else {
-        self.state = MJRefreshStateWillRefresh;
-        // 鍒锋柊(棰勯槻浠庡彟涓�涓帶鍒跺櫒鍥炲埌杩欎釜鎺у埗鍣ㄧ殑鎯呭喌锛屽洖鏉ヨ閲嶆柊鍒锋柊涓�涓�)
-        [self setNeedsDisplay];
-    }
-}
-
-#pragma mark 缁撴潫鍒锋柊鐘舵��
-- (void)endRefreshing
-{
-    self.state = MJRefreshStateIdle;
-}
-
-#pragma mark 鏄惁姝e湪鍒锋柊
-- (BOOL)isRefreshing
-{
-    return self.state == MJRefreshStateRefreshing || self.state == MJRefreshStateWillRefresh;
-}
-
-#pragma mark 鑷姩鍒囨崲閫忔槑搴�
-- (void)setAutoChangeAlpha:(BOOL)autoChangeAlpha
-{
-    self.automaticallyChangeAlpha = autoChangeAlpha;
-}
-
-- (BOOL)isAutoChangeAlpha
-{
-    return self.isAutomaticallyChangeAlpha;
-}
-
-- (void)setAutomaticallyChangeAlpha:(BOOL)automaticallyChangeAlpha
-{
-    _automaticallyChangeAlpha = automaticallyChangeAlpha;
-    
-    if (self.isRefreshing) return;
-    
-    if (automaticallyChangeAlpha) {
-        self.alpha = self.pullingPercent;
-    } else {
-        self.alpha = 1.0;
-    }
-}
-
-#pragma mark 鏍规嵁鎷栨嫿杩涘害璁剧疆閫忔槑搴�
-- (void)setPullingPercent:(CGFloat)pullingPercent
-{
-    _pullingPercent = pullingPercent;
-    
-    if (self.isRefreshing) return;
-    
-    if (self.isAutomaticallyChangeAlpha) {
-        self.alpha = pullingPercent;
-    }
-}
-
-#pragma mark - 鍐呴儴鏂规硶
-- (void)executeRefreshingCallback
-{
-    dispatch_async(dispatch_get_main_queue(), ^{
-        if (self.refreshingBlock) {
-            self.refreshingBlock();
-        }
-        if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) {
-            MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self);
-        }
-    });
-}
-@end
-
-@implementation UILabel(MJRefresh)
-+ (instancetype)label
-{
-    UILabel *label = [[self alloc] init];
-    label.font = MJRefreshLabelFont;
-    label.textColor = MJRefreshLabelTextColor;
-    label.autoresizingMask = UIViewAutoresizingFlexibleWidth;
-    label.textAlignment = NSTextAlignmentCenter;
-    label.backgroundColor = [UIColor clearColor];
-    return label;
-}
-@end
\ No newline at end of file
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshFooter.h
deleted file mode 100644
index e25628f..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshFooter.h
+++ /dev/null
@@ -1,30 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-//  MJRefreshFooter.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/3/5.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//  涓婃媺鍒锋柊鎺т欢
-
-#import "MJRefreshComponent.h"
-
-@interface MJRefreshFooter : MJRefreshComponent
-/** 鍒涘缓footer */
-+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
-/** 鍒涘缓footer */
-+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
-
-/** 鎻愮ず娌℃湁鏇村鐨勬暟鎹� */
-- (void)endRefreshingWithNoMoreData;
-- (void)noticeNoMoreData MJRefreshDeprecated("浣跨敤endRefreshingWithNoMoreData");
-
-/** 閲嶇疆娌℃湁鏇村鐨勬暟鎹紙娑堥櫎娌℃湁鏇村鏁版嵁鐨勭姸鎬侊級 */
-- (void)resetNoMoreData;
-
-/** 蹇界暐澶氬皯scrollView鐨刢ontentInset鐨刡ottom */
-@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
-
-/** 鑷姩鏍规嵁鏈夋棤鏁版嵁鏉ユ樉绀哄拰闅愯棌锛堟湁鏁版嵁灏辨樉绀猴紝娌℃湁鏁版嵁闅愯棌锛� */
-@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden;
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshFooter.m
deleted file mode 100644
index 9403e54..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshFooter.m
+++ /dev/null
@@ -1,74 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-//  MJRefreshFooter.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/3/5.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshFooter.h"
-
-@interface MJRefreshFooter()
-
-@end
-
-@implementation MJRefreshFooter
-#pragma mark - 鏋勯�犳柟娉�
-+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock
-{
-    MJRefreshFooter *cmp = [[self alloc] init];
-    cmp.refreshingBlock = refreshingBlock;
-    return cmp;
-}
-+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action
-{
-    MJRefreshFooter *cmp = [[self alloc] init];
-    [cmp setRefreshingTarget:target refreshingAction:action];
-    return cmp;
-}
-
-#pragma mark - 閲嶅啓鐖剁被鐨勬柟娉�
-- (void)prepare
-{
-    [super prepare];
-    
-    // 璁剧疆鑷繁鐨勯珮搴�
-    self.mj_h = MJRefreshFooterHeight;
-    
-    // 榛樿鏄嚜鍔ㄩ殣钘�
-    self.automaticallyHidden = YES;
-}
-
-- (void)willMoveToSuperview:(UIView *)newSuperview
-{
-    [super willMoveToSuperview:newSuperview];
-    
-    if (newSuperview) {
-        // 鐩戝惉scrollView鏁版嵁鐨勫彉鍖�
-        if ([self.scrollView isKindOfClass:[UITableView class]] || [self.scrollView isKindOfClass:[UICollectionView class]]) {
-            [self.scrollView setReloadDataBlock:^(NSInteger totalDataCount) {
-                if (self.isAutomaticallyHidden) {
-                    self.hidden = (totalDataCount == 0);
-                }
-            }];
-        }
-    }
-}
-
-#pragma mark - 鍏叡鏂规硶
-- (void)endRefreshingWithNoMoreData
-{
-    self.state = MJRefreshStateNoMoreData;
-}
-
-- (void)noticeNoMoreData
-{
-    [self endRefreshingWithNoMoreData];
-}
-
-- (void)resetNoMoreData
-{
-    self.state = MJRefreshStateIdle;
-}
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshHeader.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshHeader.m
deleted file mode 100644
index 7f7e2c2..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshHeader.m
+++ /dev/null
@@ -1,145 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-//  MJRefreshHeader.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/3/4.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshHeader.h"
-
-@interface MJRefreshHeader()
-
-@end
-
-@implementation MJRefreshHeader
-#pragma mark - 鏋勯�犳柟娉�
-+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock
-{
-    MJRefreshHeader *cmp = [[self alloc] init];
-    cmp.refreshingBlock = refreshingBlock;
-    return cmp;
-}
-+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action
-{
-    MJRefreshHeader *cmp = [[self alloc] init];
-    [cmp setRefreshingTarget:target refreshingAction:action];
-    return cmp;
-}
-
-#pragma mark - 瑕嗙洊鐖剁被鐨勬柟娉�
-- (void)prepare
-{
-    [super prepare];
-    
-    // 璁剧疆key
-    self.lastUpdatedTimeKey = MJRefreshHeaderLastUpdatedTimeKey;
-    
-    // 璁剧疆楂樺害
-    self.mj_h = MJRefreshHeaderHeight;
-}
-
-- (void)placeSubviews
-{
-    [super placeSubviews];
-    
-    // 璁剧疆y鍊�(褰撹嚜宸辩殑楂樺害鍙戠敓鏀瑰彉浜嗭紝鑲畾瑕侀噸鏂拌皟鏁碮鍊硷紝鎵�浠ユ斁鍒皃laceSubviews鏂规硶涓缃畒鍊�)
-    self.mj_y = - self.mj_h - self.ignoredScrollViewContentInsetTop;
-}
-
-- (void)scrollViewContentOffsetDidChange:(NSDictionary *)change
-{
-    [super scrollViewContentOffsetDidChange:change];
-    
-    // 鍦ㄥ埛鏂扮殑refreshing鐘舵��
-    if (self.state == MJRefreshStateRefreshing) {
-        // sectionheader鍋滅暀瑙e喅
-        return;
-    }
-    
-    // 璺宠浆鍒颁笅涓�涓帶鍒跺櫒鏃讹紝contentInset鍙兘浼氬彉
-    _scrollViewOriginalInset = self.scrollView.contentInset;
-    
-    // 褰撳墠鐨刢ontentOffset
-    CGFloat offsetY = self.scrollView.mj_offsetY;
-    // 澶撮儴鎺т欢鍒氬ソ鍑虹幇鐨刼ffsetY
-    CGFloat happenOffsetY = - self.scrollViewOriginalInset.top;
-    
-    // 濡傛灉鏄悜涓婃粴鍔ㄥ埌鐪嬩笉瑙佸ご閮ㄦ帶浠讹紝鐩存帴杩斿洖
-    // >= -> >
-    if (offsetY > happenOffsetY) return;
-    
-    // 鏅�� 鍜� 鍗冲皢鍒锋柊 鐨勪复鐣岀偣
-    CGFloat normal2pullingOffsetY = happenOffsetY - self.mj_h;
-    CGFloat pullingPercent = (happenOffsetY - offsetY) / self.mj_h;
-    
-    if (self.scrollView.isDragging) { // 濡傛灉姝e湪鎷栨嫿
-        self.pullingPercent = pullingPercent;
-        if (self.state == MJRefreshStateIdle && offsetY < normal2pullingOffsetY) {
-            // 杞负鍗冲皢鍒锋柊鐘舵��
-            self.state = MJRefreshStatePulling;
-        } else if (self.state == MJRefreshStatePulling && offsetY >= normal2pullingOffsetY) {
-            // 杞负鏅�氱姸鎬�
-            self.state = MJRefreshStateIdle;
-        }
-    } else if (self.state == MJRefreshStatePulling) {// 鍗冲皢鍒锋柊 && 鎵嬫澗寮�
-        // 寮�濮嬪埛鏂�
-        [self beginRefreshing];
-    } else if (pullingPercent < 1) {
-        self.pullingPercent = pullingPercent;
-    }
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    // 鏍规嵁鐘舵�佸仛浜嬫儏
-    if (state == MJRefreshStateIdle) {
-        if (oldState != MJRefreshStateRefreshing) return;
-        
-        // 淇濆瓨鍒锋柊鏃堕棿
-        [[NSUserDefaults standardUserDefaults] setObject:[NSDate date] forKey:self.lastUpdatedTimeKey];
-        [[NSUserDefaults standardUserDefaults] synchronize];
-        
-        // 鎭㈠inset鍜宱ffset
-        [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
-            self.scrollView.mj_insetT -= self.mj_h;
-            
-            // 鑷姩璋冩暣閫忔槑搴�
-            if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
-        } completion:^(BOOL finished) {
-            self.pullingPercent = 0.0;
-        }];
-    } else if (state == MJRefreshStateRefreshing) {
-        [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
-            // 澧炲姞婊氬姩鍖哄煙
-            CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
-            self.scrollView.mj_insetT = top;
-            
-            // 璁剧疆婊氬姩浣嶇疆
-            self.scrollView.mj_offsetY = - top;
-        } completion:^(BOOL finished) {
-            [self executeRefreshingCallback];
-        }];
-    }
-}
-
-#pragma mark - 鍏叡鏂规硶
-- (void)endRefreshing
-{
-    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [super endRefreshing];
-        });
-    } else {
-        [super endRefreshing];
-    }
-}
-
-- (NSDate *)lastUpdatedTime
-{
-    return [[NSUserDefaults standardUserDefaults] objectForKey:self.lastUpdatedTimeKey];
-}
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
deleted file mode 100644
index 4c96286..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-//  MJRefreshAutoGifFooter.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshAutoStateFooter.h"
-
-@interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter
-/** 璁剧疆state鐘舵�佷笅鐨勫姩鐢诲浘鐗噄mages 鍔ㄧ敾鎸佺画鏃堕棿duration*/
-- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
-- (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
deleted file mode 100644
index 0ab312e..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
+++ /dev/null
@@ -1,104 +0,0 @@
-//
-//  MJRefreshAutoGifFooter.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshAutoGifFooter.h"
-
-@interface MJRefreshAutoGifFooter()
-@property (weak, nonatomic) UIImageView *gifView;
-/** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鍥剧墖 */
-@property (strong, nonatomic) NSMutableDictionary *stateImages;
-/** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鏃堕棿 */
-@property (strong, nonatomic) NSMutableDictionary *stateDurations;
-@end
-
-@implementation MJRefreshAutoGifFooter
-#pragma mark - 鎳掑姞杞�
-- (UIImageView *)gifView
-{
-    if (!_gifView) {
-        UIImageView *gifView = [[UIImageView alloc] init];
-        [self addSubview:_gifView = gifView];
-    }
-    return _gifView;
-}
-
-- (NSMutableDictionary *)stateImages
-{
-    if (!_stateImages) {
-        self.stateImages = [NSMutableDictionary dictionary];
-    }
-    return _stateImages;
-}
-
-- (NSMutableDictionary *)stateDurations
-{
-    if (!_stateDurations) {
-        self.stateDurations = [NSMutableDictionary dictionary];
-    }
-    return _stateDurations;
-}
-
-#pragma mark - 鍏叡鏂规硶
-- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state
-{
-    if (images == nil) return;
-    
-    self.stateImages[@(state)] = images;
-    self.stateDurations[@(state)] = @(duration);
-    
-    /* 鏍规嵁鍥剧墖璁剧疆鎺т欢鐨勯珮搴� */
-    UIImage *image = [images firstObject];
-    if (image.size.height > self.mj_h) {
-        self.mj_h = image.size.height;
-    }
-}
-
-- (void)setImages:(NSArray *)images forState:(MJRefreshState)state
-{
-    [self setImages:images duration:images.count * 0.1 forState:state];
-}
-
-#pragma mark - 瀹炵幇鐖剁被鐨勬柟娉�
-- (void)placeSubviews
-{
-    [super placeSubviews];
-    
-    self.gifView.frame = self.bounds;
-    if (self.isRefreshingTitleHidden) {
-        self.gifView.contentMode = UIViewContentModeCenter;
-    } else {
-        self.gifView.contentMode = UIViewContentModeRight;
-        self.gifView.mj_w = self.mj_w * 0.5 - 90;
-    }
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    // 鏍规嵁鐘舵�佸仛浜嬫儏
-    if (state == MJRefreshStateRefreshing) {
-        NSArray *images = self.stateImages[@(state)];
-        if (images.count == 0) return;
-        [self.gifView stopAnimating];
-        
-        self.gifView.hidden = NO;
-        if (images.count == 1) { // 鍗曞紶鍥剧墖
-            self.gifView.image = [images lastObject];
-        } else { // 澶氬紶鍥剧墖
-            self.gifView.animationImages = images;
-            self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue];
-            [self.gifView startAnimating];
-        }
-    } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
-        [self.gifView stopAnimating];
-        self.gifView.hidden = YES;
-    }
-}
-@end
-
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
deleted file mode 100644
index 76be140..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
+++ /dev/null
@@ -1,67 +0,0 @@
-//
-//  MJRefreshAutoNormalFooter.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshAutoNormalFooter.h"
-
-@interface MJRefreshAutoNormalFooter()
-@property (weak, nonatomic) UIActivityIndicatorView *loadingView;
-@end
-
-@implementation MJRefreshAutoNormalFooter
-#pragma mark - 鎳掑姞杞藉瓙鎺т欢
-- (UIActivityIndicatorView *)loadingView
-{
-    if (!_loadingView) {
-        UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle];
-        loadingView.hidesWhenStopped = YES;
-        [self addSubview:_loadingView = loadingView];
-    }
-    return _loadingView;
-}
-
-- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle
-{
-    _activityIndicatorViewStyle = activityIndicatorViewStyle;
-    
-    self.loadingView = nil;
-    [self setNeedsLayout];
-}
-#pragma makr - 閲嶅啓鐖剁被鐨勬柟娉�
-- (void)prepare
-{
-    [super prepare];
-    
-    self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
-}
-
-- (void)placeSubviews
-{
-    [super placeSubviews];
-    
-    // 鍦堝湀
-    CGFloat arrowCenterX = self.mj_w * 0.5;
-    if (!self.isRefreshingTitleHidden) {
-        arrowCenterX -= 100;
-    }
-    CGFloat arrowCenterY = self.mj_h * 0.5;
-    self.loadingView.center = CGPointMake(arrowCenterX, arrowCenterY);
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    // 鏍规嵁鐘舵�佸仛浜嬫儏
-    if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
-        [self.loadingView stopAnimating];
-    } else if (state == MJRefreshStateRefreshing) {
-        [self.loadingView startAnimating];
-    }
-}
-
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
deleted file mode 100644
index 956188b..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
+++ /dev/null
@@ -1,20 +0,0 @@
-//
-//  MJRefreshAutoStateFooter.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/6/13.
-//  Copyright 漏 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshAutoFooter.h"
-
-@interface MJRefreshAutoStateFooter : MJRefreshAutoFooter
-/** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-@property (weak, nonatomic, readonly) UILabel *stateLabel;
-
-/** 璁剧疆state鐘舵�佷笅鐨勬枃瀛� */
-- (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
-
-/** 闅愯棌鍒锋柊鐘舵�佺殑鏂囧瓧 */
-@property (assign, nonatomic, getter=isRefreshingTitleHidden) BOOL refreshingTitleHidden;
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
deleted file mode 100644
index ccbc602..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
+++ /dev/null
@@ -1,87 +0,0 @@
-//
-//  MJRefreshAutoStateFooter.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/6/13.
-//  Copyright 漏 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshAutoStateFooter.h"
-
-@interface MJRefreshAutoStateFooter()
-{
-    /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-    __weak UILabel *_stateLabel;
-}
-/** 鎵�鏈夌姸鎬佸搴旂殑鏂囧瓧 */
-@property (strong, nonatomic) NSMutableDictionary *stateTitles;
-@end
-
-@implementation MJRefreshAutoStateFooter
-#pragma mark - 鎳掑姞杞�
-- (NSMutableDictionary *)stateTitles
-{
-    if (!_stateTitles) {
-        self.stateTitles = [NSMutableDictionary dictionary];
-    }
-    return _stateTitles;
-}
-
-- (UILabel *)stateLabel
-{
-    if (!_stateLabel) {
-        [self addSubview:_stateLabel = [UILabel label]];
-    }
-    return _stateLabel;
-}
-
-#pragma mark - 鍏叡鏂规硶
-- (void)setTitle:(NSString *)title forState:(MJRefreshState)state
-{
-    if (title == nil) return;
-    self.stateTitles[@(state)] = title;
-    self.stateLabel.text = self.stateTitles[@(self.state)];
-}
-
-#pragma mark - 绉佹湁鏂规硶
-- (void)stateLabelClick
-{
-    if (self.state == MJRefreshStateIdle) {
-        [self beginRefreshing];
-    }
-}
-
-#pragma mark - 閲嶅啓鐖剁被鐨勬柟娉�
-- (void)prepare
-{
-    [super prepare];
-    
-    // 鍒濆鍖栨枃瀛�
-    [self setTitle:MJRefreshAutoFooterIdleText forState:MJRefreshStateIdle];
-    [self setTitle:MJRefreshAutoFooterRefreshingText forState:MJRefreshStateRefreshing];
-    [self setTitle:MJRefreshAutoFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
-    
-    // 鐩戝惉label
-    self.stateLabel.userInteractionEnabled = YES;
-    [self.stateLabel addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(stateLabelClick)]];
-}
-
-- (void)placeSubviews
-{
-    [super placeSubviews];
-    
-    // 鐘舵�佹爣绛�
-    self.stateLabel.frame = self.bounds;
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    if (self.isRefreshingTitleHidden && state == MJRefreshStateRefreshing) {
-        self.stateLabel.text = nil;
-    } else {
-        self.stateLabel.text = self.stateTitles[@(state)];
-    }
-}
-@end
\ No newline at end of file
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
deleted file mode 100644
index 10d92e4..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-//  MJRefreshBackGifFooter.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshBackStateFooter.h"
-
-@interface MJRefreshBackGifFooter : MJRefreshBackStateFooter
-/** 璁剧疆state鐘舵�佷笅鐨勫姩鐢诲浘鐗噄mages 鍔ㄧ敾鎸佺画鏃堕棿duration*/
-- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
-- (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
deleted file mode 100644
index ab0f47e..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
+++ /dev/null
@@ -1,111 +0,0 @@
-//
-//  MJRefreshBackNormalFooter.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshBackNormalFooter.h"
-
-@interface MJRefreshBackNormalFooter()
-{
-    __weak UIImageView *_arrowView;
-}
-@property (weak, nonatomic) UIActivityIndicatorView *loadingView;
-@end
-
-@implementation MJRefreshBackNormalFooter
-#pragma mark - 鎳掑姞杞藉瓙鎺т欢
-- (UIImageView *)arrowView
-{
-    if (!_arrowView) {
-        UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
-        UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
-        [self addSubview:_arrowView = arrowView];
-    }
-    return _arrowView;
-}
-
-
-- (UIActivityIndicatorView *)loadingView
-{
-    if (!_loadingView) {
-        UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle];
-        loadingView.hidesWhenStopped = YES;
-        [self addSubview:_loadingView = loadingView];
-    }
-    return _loadingView;
-}
-
-- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle
-{
-    _activityIndicatorViewStyle = activityIndicatorViewStyle;
-    
-    self.loadingView = nil;
-    [self setNeedsLayout];
-}
-#pragma makr - 閲嶅啓鐖剁被鐨勬柟娉�
-- (void)prepare
-{
-    [super prepare];
-    
-    self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
-}
-
-- (void)placeSubviews
-{
-    [super placeSubviews];
-    
-    // 绠ご
-    self.arrowView.mj_size = self.arrowView.image.size;
-    CGFloat arrowCenterX = self.mj_w * 0.5;
-    if (!self.stateLabel.hidden) {
-        arrowCenterX -= 100;
-    }
-    CGFloat arrowCenterY = self.mj_h * 0.5;
-    self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
-    
-    // 鍦堝湀
-    self.loadingView.frame = self.arrowView.frame;
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    // 鏍规嵁鐘舵�佸仛浜嬫儏
-    if (state == MJRefreshStateIdle) {
-        if (oldState == MJRefreshStateRefreshing) {
-            self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI);
-            [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
-                self.loadingView.alpha = 0.0;
-            } completion:^(BOOL finished) {
-                self.loadingView.alpha = 1.0;
-                [self.loadingView stopAnimating];
-                
-                self.arrowView.hidden = NO;
-            }];
-        } else {
-            self.arrowView.hidden = NO;
-            [self.loadingView stopAnimating];
-            [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
-                self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI);
-            }];
-        }
-    } else if (state == MJRefreshStatePulling) {
-        self.arrowView.hidden = NO;
-        [self.loadingView stopAnimating];
-        [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
-            self.arrowView.transform = CGAffineTransformIdentity;
-        }];
-    } else if (state == MJRefreshStateRefreshing) {
-        self.arrowView.hidden = YES;
-        [self.loadingView startAnimating];
-    } else if (state == MJRefreshStateNoMoreData) {
-        self.arrowView.hidden = YES;
-        [self.loadingView stopAnimating];
-    }
-}
-
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
deleted file mode 100644
index 2d02b2e..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
+++ /dev/null
@@ -1,19 +0,0 @@
-//
-//  MJRefreshBackStateFooter.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/6/13.
-//  Copyright 漏 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshBackFooter.h"
-
-@interface MJRefreshBackStateFooter : MJRefreshBackFooter
-/** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-@property (weak, nonatomic, readonly) UILabel *stateLabel;
-/** 璁剧疆state鐘舵�佷笅鐨勬枃瀛� */
-- (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
-
-/** 鑾峰彇state鐘舵�佷笅鐨則itle */
-- (NSString *)titleForState:(MJRefreshState)state;
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
deleted file mode 100644
index d75460e..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
+++ /dev/null
@@ -1,77 +0,0 @@
-//
-//  MJRefreshBackStateFooter.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/6/13.
-//  Copyright 漏 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshBackStateFooter.h"
-
-@interface MJRefreshBackStateFooter()
-{
-    /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-    __weak UILabel *_stateLabel;
-}
-/** 鎵�鏈夌姸鎬佸搴旂殑鏂囧瓧 */
-@property (strong, nonatomic) NSMutableDictionary *stateTitles;
-@end
-
-@implementation MJRefreshBackStateFooter
-#pragma mark - 鎳掑姞杞�
-- (NSMutableDictionary *)stateTitles
-{
-    if (!_stateTitles) {
-        self.stateTitles = [NSMutableDictionary dictionary];
-    }
-    return _stateTitles;
-}
-
-- (UILabel *)stateLabel
-{
-    if (!_stateLabel) {
-        [self addSubview:_stateLabel = [UILabel label]];
-    }
-    return _stateLabel;
-}
-
-#pragma mark - 鍏叡鏂规硶
-- (void)setTitle:(NSString *)title forState:(MJRefreshState)state
-{
-    if (title == nil) return;
-    self.stateTitles[@(state)] = title;
-    self.stateLabel.text = self.stateTitles[@(self.state)];
-}
-
-- (NSString *)titleForState:(MJRefreshState)state {
-  return self.stateTitles[@(state)];
-}
-
-#pragma mark - 閲嶅啓鐖剁被鐨勬柟娉�
-- (void)prepare
-{
-    [super prepare];
-    
-    // 鍒濆鍖栨枃瀛�
-    [self setTitle:MJRefreshBackFooterIdleText forState:MJRefreshStateIdle];
-    [self setTitle:MJRefreshBackFooterPullingText forState:MJRefreshStatePulling];
-    [self setTitle:MJRefreshBackFooterRefreshingText forState:MJRefreshStateRefreshing];
-    [self setTitle:MJRefreshBackFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
-}
-
-- (void)placeSubviews
-{
-    [super placeSubviews];
-    
-    // 鐘舵�佹爣绛�
-    self.stateLabel.frame = self.bounds;
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    // 璁剧疆鐘舵�佹枃瀛�
-    self.stateLabel.text = self.stateTitles[@(state)];
-}
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h
deleted file mode 100644
index 560c847..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h
+++ /dev/null
@@ -1,15 +0,0 @@
-//
-//  MJRefreshGifHeader.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshStateHeader.h"
-
-@interface MJRefreshGifHeader : MJRefreshStateHeader
-/** 璁剧疆state鐘舵�佷笅鐨勫姩鐢诲浘鐗噄mages 鍔ㄧ敾鎸佺画鏃堕棿duration*/
-- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
-- (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m
deleted file mode 100644
index aa2ddd5..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-//  MJRefreshGifHeader.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshGifHeader.h"
-
-@interface MJRefreshGifHeader()
-@property (weak, nonatomic) UIImageView *gifView;
-/** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鍥剧墖 */
-@property (strong, nonatomic) NSMutableDictionary *stateImages;
-/** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鏃堕棿 */
-@property (strong, nonatomic) NSMutableDictionary *stateDurations;
-@end
-
-@implementation MJRefreshGifHeader
-#pragma mark - 鎳掑姞杞�
-- (UIImageView *)gifView
-{
-    if (!_gifView) { 
-        UIImageView *gifView = [[UIImageView alloc] init]; 
-        [self addSubview:_gifView = gifView]; 
-    } 
-    return _gifView; 
-}
-
-- (NSMutableDictionary *)stateImages 
-{ 
-    if (!_stateImages) { 
-        self.stateImages = [NSMutableDictionary dictionary]; 
-    } 
-    return _stateImages; 
-}
-
-- (NSMutableDictionary *)stateDurations 
-{ 
-    if (!_stateDurations) { 
-        self.stateDurations = [NSMutableDictionary dictionary]; 
-    } 
-    return _stateDurations; 
-}
-
-#pragma mark - 鍏叡鏂规硶
-- (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state 
-{ 
-    if (images == nil) return; 
-    
-    self.stateImages[@(state)] = images; 
-    self.stateDurations[@(state)] = @(duration); 
-    
-    /* 鏍规嵁鍥剧墖璁剧疆鎺т欢鐨勯珮搴� */ 
-    UIImage *image = [images firstObject]; 
-    if (image.size.height > self.mj_h) { 
-        self.mj_h = image.size.height; 
-    } 
-}
-
-- (void)setImages:(NSArray *)images forState:(MJRefreshState)state 
-{ 
-    [self setImages:images duration:images.count * 0.1 forState:state]; 
-}
-
-#pragma mark - 瀹炵幇鐖剁被鐨勬柟娉�
-- (void)setPullingPercent:(CGFloat)pullingPercent
-{
-    [super setPullingPercent:pullingPercent];
-    NSArray *images = self.stateImages[@(MJRefreshStateIdle)];
-    if (self.state != MJRefreshStateIdle || images.count == 0) return;
-    // 鍋滄鍔ㄧ敾
-    [self.gifView stopAnimating];
-    // 璁剧疆褰撳墠闇�瑕佹樉绀虹殑鍥剧墖
-    NSUInteger index =  images.count * pullingPercent;
-    if (index >= images.count) index = images.count - 1;
-    self.gifView.image = images[index];
-}
-
-- (void)placeSubviews
-{
-    [super placeSubviews];
-    
-    self.gifView.frame = self.bounds;
-    if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) {
-        self.gifView.contentMode = UIViewContentModeCenter;
-    } else {
-        self.gifView.contentMode = UIViewContentModeRight;
-        self.gifView.mj_w = self.mj_w * 0.5 - 90;
-    }
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    // 鏍规嵁鐘舵�佸仛浜嬫儏
-    if (state == MJRefreshStatePulling || state == MJRefreshStateRefreshing) {
-        NSArray *images = self.stateImages[@(state)];
-        if (images.count == 0) return;
-        
-        [self.gifView stopAnimating];
-        if (images.count == 1) { // 鍗曞紶鍥剧墖
-            self.gifView.image = [images lastObject];
-        } else { // 澶氬紶鍥剧墖
-            self.gifView.animationImages = images;
-            self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue];
-            [self.gifView startAnimating];
-        }
-    }
-}
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
deleted file mode 100644
index 6e6dc57..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
+++ /dev/null
@@ -1,112 +0,0 @@
-//
-//  MJRefreshNormalHeader.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshNormalHeader.h"
-
-@interface MJRefreshNormalHeader()
-{
-    __weak UIImageView *_arrowView;
-}
-@property (weak, nonatomic) UIActivityIndicatorView *loadingView;
-@end
-
-@implementation MJRefreshNormalHeader
-#pragma mark - 鎳掑姞杞藉瓙鎺т欢
-- (UIImageView *)arrowView
-{
-    if (!_arrowView) {
-        UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
-        UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
-        [self addSubview:_arrowView = arrowView];
-    }
-    return _arrowView;
-}
-
-- (UIActivityIndicatorView *)loadingView
-{
-    if (!_loadingView) {
-        UIActivityIndicatorView *loadingView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:self.activityIndicatorViewStyle];
-        loadingView.hidesWhenStopped = YES;
-        [self addSubview:_loadingView = loadingView];
-    }
-    return _loadingView;
-}
-
-#pragma mark - 鍏叡鏂规硶
-- (void)setActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)activityIndicatorViewStyle
-{
-    _activityIndicatorViewStyle = activityIndicatorViewStyle;
-    
-    self.loadingView = nil;
-    [self setNeedsLayout];
-}
-
-#pragma makr - 閲嶅啓鐖剁被鐨勬柟娉�
-- (void)prepare
-{
-    [super prepare];
-    
-    self.activityIndicatorViewStyle = UIActivityIndicatorViewStyleGray;
-}
-
-- (void)placeSubviews
-{
-    [super placeSubviews];
-    
-    // 绠ご
-    self.arrowView.mj_size = self.arrowView.image.size;
-    CGFloat arrowCenterX = self.mj_w * 0.5;
-    if (!self.stateLabel.hidden) {
-        arrowCenterX -= 100;
-    }
-    CGFloat arrowCenterY = self.mj_h * 0.5;
-    self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
-    
-    // 鍦堝湀
-    self.loadingView.frame = self.arrowView.frame;
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    // 鏍规嵁鐘舵�佸仛浜嬫儏
-    if (state == MJRefreshStateIdle) {
-        if (oldState == MJRefreshStateRefreshing) {
-            self.arrowView.transform = CGAffineTransformIdentity;
-            
-            [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
-                self.loadingView.alpha = 0.0;
-            } completion:^(BOOL finished) {
-                // 濡傛灉鎵ц瀹屽姩鐢诲彂鐜颁笉鏄痠dle鐘舵�侊紝灏辩洿鎺ヨ繑鍥烇紝杩涘叆鍏朵粬鐘舵��
-                if (self.state != MJRefreshStateIdle) return;
-                
-                self.loadingView.alpha = 1.0;
-                [self.loadingView stopAnimating];
-                self.arrowView.hidden = NO;
-            }];
-        } else {
-            [self.loadingView stopAnimating];
-            self.arrowView.hidden = NO;
-            [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
-                self.arrowView.transform = CGAffineTransformIdentity;
-            }];
-        }
-    } else if (state == MJRefreshStatePulling) {
-        [self.loadingView stopAnimating];
-        self.arrowView.hidden = NO;
-        [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
-            self.arrowView.transform = CGAffineTransformMakeRotation(0.000001 - M_PI);
-        }];
-    } else if (state == MJRefreshStateRefreshing) {
-        self.loadingView.alpha = 1.0; // 闃叉refreshing -> idle鐨勫姩鐢诲畬姣曞姩浣滄病鏈夎鎵ц
-        [self.loadingView startAnimating];
-        self.arrowView.hidden = YES;
-    }
-}
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h
deleted file mode 100644
index 5909532..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//
-//  MJRefreshStateHeader.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshHeader.h"
-
-@interface MJRefreshStateHeader : MJRefreshHeader
-#pragma mark - 鍒锋柊鏃堕棿鐩稿叧
-/** 鍒╃敤杩欎釜block鏉ュ喅瀹氭樉绀虹殑鏇存柊鏃堕棿鏂囧瓧 */
-@property (copy, nonatomic) NSString *(^lastUpdatedTimeText)(NSDate *lastUpdatedTime);
-/** 鏄剧ず涓婁竴娆″埛鏂版椂闂寸殑label */
-@property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel;
-
-#pragma mark - 鐘舵�佺浉鍏�
-/** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-@property (weak, nonatomic, readonly) UILabel *stateLabel;
-/** 璁剧疆state鐘舵�佷笅鐨勬枃瀛� */
-- (void)setTitle:(NSString *)title forState:(MJRefreshState)state;
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.m
deleted file mode 100644
index 97ed06f..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.m
+++ /dev/null
@@ -1,139 +0,0 @@
-//
-//  MJRefreshStateHeader.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/4/24.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "MJRefreshStateHeader.h"
-
-@interface MJRefreshStateHeader()
-{
-    /** 鏄剧ず涓婁竴娆″埛鏂版椂闂寸殑label */
-    __weak UILabel *_lastUpdatedTimeLabel;
-    /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-    __weak UILabel *_stateLabel;
-}
-/** 鎵�鏈夌姸鎬佸搴旂殑鏂囧瓧 */
-@property (strong, nonatomic) NSMutableDictionary *stateTitles;
-@end
-
-@implementation MJRefreshStateHeader
-#pragma mark - 鎳掑姞杞�
-- (NSMutableDictionary *)stateTitles
-{
-    if (!_stateTitles) {
-        self.stateTitles = [NSMutableDictionary dictionary];
-    }
-    return _stateTitles;
-}
-
-- (UILabel *)stateLabel
-{
-    if (!_stateLabel) {
-        [self addSubview:_stateLabel = [UILabel label]];
-    }
-    return _stateLabel;
-}
-
-- (UILabel *)lastUpdatedTimeLabel
-{
-    if (!_lastUpdatedTimeLabel) {
-        [self addSubview:_lastUpdatedTimeLabel = [UILabel label]];
-    }
-    return _lastUpdatedTimeLabel;
-}
-
-#pragma mark - 鍏叡鏂规硶
-- (void)setTitle:(NSString *)title forState:(MJRefreshState)state
-{
-    if (title == nil) return;
-    self.stateTitles[@(state)] = title;
-    self.stateLabel.text = self.stateTitles[@(self.state)];
-}
-
-#pragma mark key鐨勫鐞�
-- (void)setLastUpdatedTimeKey:(NSString *)lastUpdatedTimeKey
-{
-    [super setLastUpdatedTimeKey:lastUpdatedTimeKey];
-    
-    NSDate *lastUpdatedTime = [[NSUserDefaults standardUserDefaults] objectForKey:lastUpdatedTimeKey];
-    
-    // 濡傛灉鏈塨lock
-    if (self.lastUpdatedTimeText) {
-        self.lastUpdatedTimeLabel.text = self.lastUpdatedTimeText(lastUpdatedTime);
-        return;
-    }
-    
-    if (lastUpdatedTime) {
-        // 1.鑾峰緱骞存湀鏃�
-        NSCalendar *calendar = [NSCalendar currentCalendar];
-        NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute;
-        NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:lastUpdatedTime];
-        NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]];
-        
-        // 2.鏍煎紡鍖栨棩鏈�
-        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
-        if ([cmp1 day] == [cmp2 day]) { // 浠婂ぉ
-            formatter.dateFormat = [NSString stringWithFormat:@"%@ HH:mm",NSLocalizedString(@"message_today", @"浠婂ぉ")];
-        } else if ([cmp1 year] == [cmp2 year]) { // 浠婂勾
-            formatter.dateFormat = @"MM-dd HH:mm";
-        } else {
-            formatter.dateFormat = @"yyyy-MM-dd HH:mm";
-        }
-        NSString *time = [formatter stringFromDate:lastUpdatedTime];
-        
-        // 3.鏄剧ず鏃ユ湡
-        self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@",NSLocalizedString(@"ui_last_update", @"鏈�鍚庢洿鏂帮細"), time];
-    } else {
-        self.lastUpdatedTimeLabel.text = NSLocalizedString(@"ui_last_update_empty", @"鏈�鍚庢洿鏂帮細鏃犺褰�");
-    }
-}
-
-#pragma mark - 瑕嗙洊鐖剁被鐨勬柟娉�
-- (void)prepare
-{
-    [super prepare];
-    
-    // 鍒濆鍖栨枃瀛�
-    [self setTitle:MJRefreshHeaderIdleText forState:MJRefreshStateIdle];
-    [self setTitle:MJRefreshHeaderPullingText forState:MJRefreshStatePulling];
-    [self setTitle:MJRefreshHeaderRefreshingText forState:MJRefreshStateRefreshing];
-}
-
-- (void)placeSubviews
-{
-    [super placeSubviews];
-    
-    if (self.stateLabel.hidden) return;
-    
-    if (self.lastUpdatedTimeLabel.hidden) {
-        // 鐘舵��
-        self.stateLabel.frame = self.bounds;
-    } else {
-        // 鐘舵��
-        self.stateLabel.mj_x = 0;
-        self.stateLabel.mj_y = 0;
-        self.stateLabel.mj_w = self.mj_w;
-        self.stateLabel.mj_h = self.mj_h * 0.5;
-        
-        // 鏇存柊鏃堕棿
-        self.lastUpdatedTimeLabel.mj_x = 0;
-        self.lastUpdatedTimeLabel.mj_y = self.stateLabel.mj_h;
-        self.lastUpdatedTimeLabel.mj_w = self.mj_w;
-        self.lastUpdatedTimeLabel.mj_h = self.mj_h - self.lastUpdatedTimeLabel.mj_y;
-    }
-}
-
-- (void)setState:(MJRefreshState)state
-{
-    MJRefreshCheckState
-    
-    // 璁剧疆鐘舵�佹枃瀛�
-    self.stateLabel.text = self.stateTitles[@(state)];
-    
-    // 閲嶆柊璁剧疆key锛堥噸鏂版樉绀烘椂闂达級
-    self.lastUpdatedTimeKey = self.lastUpdatedTimeKey;
-}
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/LICENSE b/EZSDK/EZSDK/EZ/Venders/MJRefresh/LICENSE
new file mode 100644
index 0000000..11bf234
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2013-2015 MJRefresh (https://github.com/CoderMJLee/MJRefresh)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
similarity index 77%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
index 5aac4f6..71ea478 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.h
@@ -13,8 +13,11 @@
 @property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
 
 /** 褰撳簳閮ㄦ帶浠跺嚭鐜板灏戞椂灏辫嚜鍔ㄥ埛鏂�(榛樿涓�1.0锛屼篃灏辨槸搴曢儴鎺т欢瀹屽叏鍑虹幇鏃讹紝鎵嶄細鑷姩鍒锋柊) */
-@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("璇蜂娇鐢╝utomaticallyChangeAlpha灞炴��");
+@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh MJRefreshDeprecated("璇蜂娇鐢╰riggerAutomaticallyRefreshPercent灞炴��");
 
 /** 褰撳簳閮ㄦ帶浠跺嚭鐜板灏戞椂灏辫嚜鍔ㄥ埛鏂�(榛樿涓�1.0锛屼篃灏辨槸搴曢儴鎺т欢瀹屽叏鍑虹幇鏃讹紝鎵嶄細鑷姩鍒锋柊) */
 @property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
+
+/** 鏄惁姣忎竴娆℃嫋鎷藉彧鍙戜竴娆¤姹� */
+@property (assign, nonatomic, getter=isOnlyRefreshPerDrag) BOOL onlyRefreshPerDrag;
 @end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
similarity index 79%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
index fd1687f..207df04 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshAutoFooter.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshAutoFooter.m
@@ -9,6 +9,8 @@
 #import "MJRefreshAutoFooter.h"
 
 @interface MJRefreshAutoFooter()
+/** 涓�涓柊鐨勬嫋鎷� */
+@property (assign, nonatomic, getter=isOneNewPan) BOOL oneNewPan;
 @end
 
 @implementation MJRefreshAutoFooter
@@ -53,6 +55,9 @@
     
     // 璁剧疆涓洪粯璁ょ姸鎬�
     self.automaticallyRefresh = YES;
+    
+    // 榛樿鏄綋offset杈惧埌鏉′欢灏卞彂閫佽姹傦紙鍙繛缁級
+    self.onlyRefreshPerDrag = NO;
 }
 
 - (void)scrollViewContentSizeDidChange:(NSDictionary *)change
@@ -89,7 +94,8 @@
     
     if (self.state != MJRefreshStateIdle) return;
     
-    if (_scrollView.panGestureRecognizer.state == UIGestureRecognizerStateEnded) {// 鎵嬫澗寮�
+    UIGestureRecognizerState panState = _scrollView.panGestureRecognizer.state;
+    if (panState == UIGestureRecognizerStateEnded) {// 鎵嬫澗寮�
         if (_scrollView.mj_insetT + _scrollView.mj_contentH <= _scrollView.mj_h) {  // 涓嶅涓�涓睆骞�
             if (_scrollView.mj_offsetY >= - _scrollView.mj_insetT) { // 鍚戜笂鎷�
                 [self beginRefreshing];
@@ -99,7 +105,18 @@
                 [self beginRefreshing];
             }
         }
+    } else if (panState == UIGestureRecognizerStateBegan) {
+        self.oneNewPan = YES;
     }
+}
+
+- (void)beginRefreshing
+{
+    if (!self.isOneNewPan && self.isOnlyRefreshPerDrag) return;
+    
+    [super beginRefreshing];
+    
+    self.oneNewPan = NO;
 }
 
 - (void)setState:(MJRefreshState)state
@@ -107,9 +124,13 @@
     MJRefreshCheckState
     
     if (state == MJRefreshStateRefreshing) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [self executeRefreshingCallback];
-        });
+        [self executeRefreshingCallback];
+    } else if (state == MJRefreshStateNoMoreData || state == MJRefreshStateIdle) {
+        if (MJRefreshStateRefreshing == oldState) {
+            if (self.endRefreshingCompletionBlock) {
+                self.endRefreshingCompletionBlock();
+            }
+        }
     }
 }
 
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshBackFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h
similarity index 100%
rename from EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshBackFooter.h
rename to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
similarity index 85%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
index c3d0db6..71b9579 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshBackFooter.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshBackFooter.m
@@ -31,7 +31,7 @@
     // 濡傛灉姝e湪鍒锋柊锛岀洿鎺ヨ繑鍥�
     if (self.state == MJRefreshStateRefreshing) return;
     
-    _scrollViewOriginalInset = self.scrollView.contentInset;
+    _scrollViewOriginalInset = self.scrollView.mj_inset;
     
     // 褰撳墠鐨刢ontentOffset
     CGFloat currentOffsetY = self.scrollView.mj_offsetY;
@@ -95,17 +95,21 @@
                 if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
             } completion:^(BOOL finished) {
                 self.pullingPercent = 0.0;
+                
+                if (self.endRefreshingCompletionBlock) {
+                    self.endRefreshingCompletionBlock();
+                }
             }];
         }
         
         CGFloat deltaH = [self heightForContentBreakView];
         // 鍒氬埛鏂板畬姣�
-        if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.totalDataCount != self.lastRefreshCount) {
+        if (MJRefreshStateRefreshing == oldState && deltaH > 0 && self.scrollView.mj_totalDataCount != self.lastRefreshCount) {
             self.scrollView.mj_offsetY = self.scrollView.mj_offsetY;
         }
     } else if (state == MJRefreshStateRefreshing) {
         // 璁板綍鍒锋柊鍓嶇殑鏁伴噺
-        self.lastRefreshCount = self.scrollView.totalDataCount;
+        self.lastRefreshCount = self.scrollView.mj_totalDataCount;
         
         [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
             CGFloat bottom = self.mj_h + self.scrollViewOriginalInset.bottom;
@@ -121,30 +125,6 @@
         }];
     }
 }
-
-#pragma mark - 鍏叡鏂规硶
-- (void)endRefreshing
-{
-    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [super endRefreshing];
-        });
-    } else {
-        [super endRefreshing];
-    }
-}
-
-- (void)noticeNoMoreData
-{
-    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [super noticeNoMoreData];
-        });
-    } else {
-        [super noticeNoMoreData];
-    }
-}
-
 #pragma mark - 绉佹湁鏂规硶
 #pragma mark 鑾峰緱scrollView鐨勫唴瀹� 瓒呭嚭 view 鐨勯珮搴�
 - (CGFloat)heightForContentBreakView
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
similarity index 76%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
index 943d405..46e1068 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.h
@@ -12,9 +12,10 @@
 #import "UIView+MJExtension.h"
 #import "UIScrollView+MJExtension.h"
 #import "UIScrollView+MJRefresh.h"
+#import "NSBundle+MJRefresh.h"
 
 /** 鍒锋柊鎺т欢鐨勭姸鎬� */
-typedef enum {
+typedef NS_ENUM(NSInteger, MJRefreshState) {
     /** 鏅�氶棽缃姸鎬� */
     MJRefreshStateIdle = 1,
     /** 鏉惧紑灏卞彲浠ヨ繘琛屽埛鏂扮殑鐘舵�� */
@@ -25,10 +26,14 @@
     MJRefreshStateWillRefresh,
     /** 鎵�鏈夋暟鎹姞杞藉畬姣曪紝娌℃湁鏇村鐨勬暟鎹簡 */
     MJRefreshStateNoMoreData
-} MJRefreshState;
+};
 
 /** 杩涘叆鍒锋柊鐘舵�佺殑鍥炶皟 */
-typedef void (^MJRefreshComponentRefreshingBlock)();
+typedef void (^MJRefreshComponentRefreshingBlock)(void);
+/** 寮�濮嬪埛鏂板悗鐨勫洖璋�(杩涘叆鍒锋柊鐘舵�佸悗鐨勫洖璋�) */
+typedef void (^MJRefreshComponentbeginRefreshingCompletionBlock)(void);
+/** 缁撴潫鍒锋柊鍚庣殑鍥炶皟 */
+typedef void (^MJRefreshComponentEndRefreshingCompletionBlock)(void);
 
 /** 鍒锋柊鎺т欢鐨勫熀绫� */
 @interface MJRefreshComponent : UIView
@@ -43,6 +48,7 @@
 @property (copy, nonatomic) MJRefreshComponentRefreshingBlock refreshingBlock;
 /** 璁剧疆鍥炶皟瀵硅薄鍜屽洖璋冩柟娉� */
 - (void)setRefreshingTarget:(id)target refreshingAction:(SEL)action;
+
 /** 鍥炶皟瀵硅薄 */
 @property (weak, nonatomic) id refreshingTarget;
 /** 鍥炶皟鏂规硶 */
@@ -53,10 +59,17 @@
 #pragma mark - 鍒锋柊鐘舵�佹帶鍒�
 /** 杩涘叆鍒锋柊鐘舵�� */
 - (void)beginRefreshing;
+- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock;
+/** 寮�濮嬪埛鏂板悗鐨勫洖璋�(杩涘叆鍒锋柊鐘舵�佸悗鐨勫洖璋�) */
+@property (copy, nonatomic) MJRefreshComponentbeginRefreshingCompletionBlock beginRefreshingCompletionBlock;
+/** 缁撴潫鍒锋柊鐨勫洖璋� */
+@property (copy, nonatomic) MJRefreshComponentEndRefreshingCompletionBlock endRefreshingCompletionBlock;
 /** 缁撴潫鍒锋柊鐘舵�� */
 - (void)endRefreshing;
+- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock;
 /** 鏄惁姝e湪鍒锋柊 */
-- (BOOL)isRefreshing;
+@property (assign, nonatomic, readonly, getter=isRefreshing) BOOL refreshing;
+//- (BOOL)isRefreshing;
 /** 鍒锋柊鐘舵�� 涓�鑸氦缁欏瓙绫诲唴閮ㄥ疄鐜� */
 @property (assign, nonatomic) MJRefreshState state;
 
@@ -89,5 +102,6 @@
 @end
 
 @interface UILabel(MJRefresh)
-+ (instancetype)label;
++ (instancetype)mj_label;
+- (CGFloat)mj_textWith;
 @end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
similarity index 74%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
index 1b6ea27..6661ba6 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshComponent.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshComponent.m
@@ -9,8 +9,6 @@
 
 #import "MJRefreshComponent.h"
 #import "MJRefreshConst.h"
-#import "UIView+MJExtension.h"
-#import "UIScrollView+MJRefresh.h"
 
 @interface MJRefreshComponent()
 @property (strong, nonatomic) UIPanGestureRecognizer *pan;
@@ -39,9 +37,9 @@
 
 - (void)layoutSubviews
 {
-    [super layoutSubviews];
-    
     [self placeSubviews];
+    
+    [super layoutSubviews];
 }
 
 - (void)placeSubviews{}
@@ -60,14 +58,14 @@
         // 璁剧疆瀹藉害
         self.mj_w = newSuperview.mj_w;
         // 璁剧疆浣嶇疆
-        self.mj_x = 0;
+        self.mj_x = -_scrollView.mj_insetL;
         
         // 璁板綍UIScrollView
         _scrollView = (UIScrollView *)newSuperview;
         // 璁剧疆姘歌繙鏀寔鍨傜洿寮圭哀鏁堟灉
         _scrollView.alwaysBounceVertical = YES;
         // 璁板綍UIScrollView鏈�寮�濮嬬殑contentInset
-        _scrollViewOriginalInset = _scrollView.contentInset;
+        _scrollViewOriginalInset = _scrollView.mj_inset;
         
         // 娣诲姞鐩戝惉
         [self addObservers];
@@ -97,7 +95,7 @@
 - (void)removeObservers
 {
     [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentOffset];
-    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];;
+    [self.superview removeObserver:self forKeyPath:MJRefreshKeyPathContentSize];
     [self.pan removeObserver:self forKeyPath:MJRefreshKeyPathPanState];
     self.pan = nil;
 }
@@ -133,6 +131,16 @@
     self.refreshingAction = action;
 }
 
+- (void)setState:(MJRefreshState)state
+{
+    _state = state;
+    
+    // 鍔犲叆涓婚槦鍒楃殑鐩殑鏄瓑setState:鏂规硶璋冪敤瀹屾瘯銆佽缃畬鏂囧瓧鍚庡啀鍘诲竷灞�瀛愭帶浠�
+    dispatch_async(dispatch_get_main_queue(), ^{
+        [self setNeedsLayout];
+    });
+}
+
 #pragma mark 杩涘叆鍒锋柊鐘舵��
 - (void)beginRefreshing
 {
@@ -144,16 +152,35 @@
     if (self.window) {
         self.state = MJRefreshStateRefreshing;
     } else {
-        self.state = MJRefreshStateWillRefresh;
-        // 鍒锋柊(棰勯槻浠庡彟涓�涓帶鍒跺櫒鍥炲埌杩欎釜鎺у埗鍣ㄧ殑鎯呭喌锛屽洖鏉ヨ閲嶆柊鍒锋柊涓�涓�)
-        [self setNeedsDisplay];
+        // 棰勯槻姝e湪鍒锋柊涓椂锛岃皟鐢ㄦ湰鏂规硶浣垮緱header inset鍥炵疆澶辫触
+        if (self.state != MJRefreshStateRefreshing) {
+            self.state = MJRefreshStateWillRefresh;
+            // 鍒锋柊(棰勯槻浠庡彟涓�涓帶鍒跺櫒鍥炲埌杩欎釜鎺у埗鍣ㄧ殑鎯呭喌锛屽洖鏉ヨ閲嶆柊鍒锋柊涓�涓�)
+            [self setNeedsDisplay];
+        }
     }
+}
+
+- (void)beginRefreshingWithCompletionBlock:(void (^)(void))completionBlock
+{
+    self.beginRefreshingCompletionBlock = completionBlock;
+    
+    [self beginRefreshing];
 }
 
 #pragma mark 缁撴潫鍒锋柊鐘舵��
 - (void)endRefreshing
 {
-    self.state = MJRefreshStateIdle;
+    dispatch_async(dispatch_get_main_queue(), ^{
+        self.state = MJRefreshStateIdle;
+    });
+}
+
+- (void)endRefreshingWithCompletionBlock:(void (^)(void))completionBlock
+{
+    self.endRefreshingCompletionBlock = completionBlock;
+    
+    [self endRefreshing];
 }
 
 #pragma mark 鏄惁姝e湪鍒锋柊
@@ -208,12 +235,15 @@
         if ([self.refreshingTarget respondsToSelector:self.refreshingAction]) {
             MJRefreshMsgSend(MJRefreshMsgTarget(self.refreshingTarget), self.refreshingAction, self);
         }
+        if (self.beginRefreshingCompletionBlock) {
+            self.beginRefreshingCompletionBlock();
+        }
     });
 }
 @end
 
 @implementation UILabel(MJRefresh)
-+ (instancetype)label
++ (instancetype)mj_label
 {
     UILabel *label = [[self alloc] init];
     label.font = MJRefreshLabelFont;
@@ -223,4 +253,24 @@
     label.backgroundColor = [UIColor clearColor];
     return label;
 }
-@end
\ No newline at end of file
+
+- (CGFloat)mj_textWith {
+    CGFloat stringWidth = 0;
+    CGSize size = CGSizeMake(MAXFLOAT, MAXFLOAT);
+    if (self.text.length > 0) {
+#if defined(__IPHONE_OS_VERSION_MAX_ALLOWED) && __IPHONE_OS_VERSION_MAX_ALLOWED >= 70000
+        stringWidth =[self.text
+                      boundingRectWithSize:size
+                      options:NSStringDrawingUsesLineFragmentOrigin
+                      attributes:@{NSFontAttributeName:self.font}
+                      context:nil].size.width;
+#else
+        
+        stringWidth = [self.text sizeWithFont:self.font
+                             constrainedToSize:size
+                                 lineBreakMode:NSLineBreakByCharWrapping].width;
+#endif
+    }
+    return stringWidth;
+}
+@end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
similarity index 83%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
index e25628f..272f270 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.h
@@ -25,6 +25,6 @@
 /** 蹇界暐澶氬皯scrollView鐨刢ontentInset鐨刡ottom */
 @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
 
-/** 鑷姩鏍规嵁鏈夋棤鏁版嵁鏉ユ樉绀哄拰闅愯棌锛堟湁鏁版嵁灏辨樉绀猴紝娌℃湁鏁版嵁闅愯棌锛� */
-@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden;
+/** 鑷姩鏍规嵁鏈夋棤鏁版嵁鏉ユ樉绀哄拰闅愯棌锛堟湁鏁版嵁灏辨樉绀猴紝娌℃湁鏁版嵁闅愯棌銆傞粯璁ゆ槸NO锛� */
+@property (assign, nonatomic, getter=isAutomaticallyHidden) BOOL automaticallyHidden MJRefreshDeprecated("涓嶅缓璁娇鐢ㄦ灞炴�э紝寮�鍙戣�呰鑷鎺у埗footer鐨勬樉绀哄拰闅愯棌銆傚熀浜庡畨鍏ㄨ�冭檻锛屽湪鏈潵鐨勬煇浜涚増鏈灞炴�у彲鑳戒綔搴�");
 @end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
similarity index 77%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
index 9403e54..efecb5f 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshFooter.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshFooter.m
@@ -8,6 +8,7 @@
 //
 
 #import "MJRefreshFooter.h"
+#include "UIScrollView+MJRefresh.h"
 
 @interface MJRefreshFooter()
 
@@ -36,8 +37,8 @@
     // 璁剧疆鑷繁鐨勯珮搴�
     self.mj_h = MJRefreshFooterHeight;
     
-    // 榛樿鏄嚜鍔ㄩ殣钘�
-    self.automaticallyHidden = YES;
+    // 榛樿涓嶄細鑷姩闅愯棌
+    self.automaticallyHidden = NO;
 }
 
 - (void)willMoveToSuperview:(UIView *)newSuperview
@@ -47,7 +48,7 @@
     if (newSuperview) {
         // 鐩戝惉scrollView鏁版嵁鐨勫彉鍖�
         if ([self.scrollView isKindOfClass:[UITableView class]] || [self.scrollView isKindOfClass:[UICollectionView class]]) {
-            [self.scrollView setReloadDataBlock:^(NSInteger totalDataCount) {
+            [self.scrollView setMj_reloadDataBlock:^(NSInteger totalDataCount) {
                 if (self.isAutomaticallyHidden) {
                     self.hidden = (totalDataCount == 0);
                 }
@@ -59,7 +60,9 @@
 #pragma mark - 鍏叡鏂规硶
 - (void)endRefreshingWithNoMoreData
 {
-    self.state = MJRefreshStateNoMoreData;
+    dispatch_async(dispatch_get_main_queue(), ^{
+        self.state = MJRefreshStateNoMoreData;
+    });
 }
 
 - (void)noticeNoMoreData
@@ -69,6 +72,13 @@
 
 - (void)resetNoMoreData
 {
-    self.state = MJRefreshStateIdle;
+    dispatch_async(dispatch_get_main_queue(), ^{
+        self.state = MJRefreshStateIdle;
+    });
+}
+
+- (void)setAutomaticallyHidden:(BOOL)automaticallyHidden
+{
+    _automaticallyHidden = automaticallyHidden;
 }
 @end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshHeader.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.h
similarity index 100%
rename from EZSDK/EZSDK/EZ/Venders/MJRefresh/Base/MJRefreshHeader.h
rename to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
similarity index 73%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
index 7f7e2c2..7b7249c 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Base/MJRefreshHeader.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Base/MJRefreshHeader.m
@@ -10,7 +10,7 @@
 #import "MJRefreshHeader.h"
 
 @interface MJRefreshHeader()
-
+@property (assign, nonatomic) CGFloat insetTDelta;
 @end
 
 @implementation MJRefreshHeader
@@ -54,12 +54,20 @@
     
     // 鍦ㄥ埛鏂扮殑refreshing鐘舵��
     if (self.state == MJRefreshStateRefreshing) {
+        // 鏆傛椂淇濈暀
+        if (self.window == nil) return;
+        
         // sectionheader鍋滅暀瑙e喅
+        CGFloat insetT = - self.scrollView.mj_offsetY > _scrollViewOriginalInset.top ? - self.scrollView.mj_offsetY : _scrollViewOriginalInset.top;
+        insetT = insetT > self.mj_h + _scrollViewOriginalInset.top ? self.mj_h + _scrollViewOriginalInset.top : insetT;
+        self.scrollView.mj_insetT = insetT;
+        
+        self.insetTDelta = _scrollViewOriginalInset.top - insetT;
         return;
     }
     
     // 璺宠浆鍒颁笅涓�涓帶鍒跺櫒鏃讹紝contentInset鍙兘浼氬彉
-    _scrollViewOriginalInset = self.scrollView.contentInset;
+     _scrollViewOriginalInset = self.scrollView.mj_inset;
     
     // 褰撳墠鐨刢ontentOffset
     CGFloat offsetY = self.scrollView.mj_offsetY;
@@ -105,39 +113,35 @@
         
         // 鎭㈠inset鍜宱ffset
         [UIView animateWithDuration:MJRefreshSlowAnimationDuration animations:^{
-            self.scrollView.mj_insetT -= self.mj_h;
+            self.scrollView.mj_insetT += self.insetTDelta;
             
             // 鑷姩璋冩暣閫忔槑搴�
             if (self.isAutomaticallyChangeAlpha) self.alpha = 0.0;
         } completion:^(BOOL finished) {
             self.pullingPercent = 0.0;
+            
+            if (self.endRefreshingCompletionBlock) {
+                self.endRefreshingCompletionBlock();
+            }
         }];
     } else if (state == MJRefreshStateRefreshing) {
-        [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
-            // 澧炲姞婊氬姩鍖哄煙
-            CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
-            self.scrollView.mj_insetT = top;
-            
-            // 璁剧疆婊氬姩浣嶇疆
-            self.scrollView.mj_offsetY = - top;
-        } completion:^(BOOL finished) {
-            [self executeRefreshingCallback];
-        }];
+         dispatch_async(dispatch_get_main_queue(), ^{
+            [UIView animateWithDuration:MJRefreshFastAnimationDuration animations:^{
+                CGFloat top = self.scrollViewOriginalInset.top + self.mj_h;
+                // 澧炲姞婊氬姩鍖哄煙top
+                self.scrollView.mj_insetT = top;
+                // 璁剧疆婊氬姩浣嶇疆
+                CGPoint offset = self.scrollView.contentOffset;
+                offset.y = -top;
+                [self.scrollView setContentOffset:offset animated:NO];
+            } completion:^(BOOL finished) {
+                [self executeRefreshingCallback];
+            }];
+         });
     }
 }
 
 #pragma mark - 鍏叡鏂规硶
-- (void)endRefreshing
-{
-    if ([self.scrollView isKindOfClass:[UICollectionView class]]) {
-        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
-            [super endRefreshing];
-        });
-    } else {
-        [super endRefreshing];
-    }
-}
-
 - (NSDate *)lastUpdatedTime
 {
     return [[NSUserDefaults standardUserDefaults] objectForKey:self.lastUpdatedTimeKey];
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
similarity index 88%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
index 4c96286..6a127e6 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.h
@@ -9,6 +9,8 @@
 #import "MJRefreshAutoStateFooter.h"
 
 @interface MJRefreshAutoGifFooter : MJRefreshAutoStateFooter
+@property (weak, nonatomic, readonly) UIImageView *gifView;
+
 /** 璁剧疆state鐘舵�佷笅鐨勫姩鐢诲浘鐗噄mages 鍔ㄧ敾鎸佺画鏃堕棿duration*/
 - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
 - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
similarity index 89%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
index 0ab312e..2507138 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoGifFooter.m
@@ -9,7 +9,9 @@
 #import "MJRefreshAutoGifFooter.h"
 
 @interface MJRefreshAutoGifFooter()
-@property (weak, nonatomic) UIImageView *gifView;
+{
+    __unsafe_unretained UIImageView *_gifView;
+}
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鍥剧墖 */
 @property (strong, nonatomic) NSMutableDictionary *stateImages;
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鏃堕棿 */
@@ -64,16 +66,26 @@
 }
 
 #pragma mark - 瀹炵幇鐖剁被鐨勬柟娉�
+- (void)prepare
+{
+    [super prepare];
+    
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = 20;
+}
+
 - (void)placeSubviews
 {
     [super placeSubviews];
+    
+    if (self.gifView.constraints.count) return;
     
     self.gifView.frame = self.bounds;
     if (self.isRefreshingTitleHidden) {
         self.gifView.contentMode = UIViewContentModeCenter;
     } else {
         self.gifView.contentMode = UIViewContentModeRight;
-        self.gifView.mj_w = self.mj_w * 0.5 - 90;
+        self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5;
     }
 }
 
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
similarity index 100%
rename from EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
rename to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
similarity index 81%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
index 76be140..dae9060 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoNormalFooter.m
@@ -31,7 +31,7 @@
     self.loadingView = nil;
     [self setNeedsLayout];
 }
-#pragma makr - 閲嶅啓鐖剁被鐨勬柟娉�
+#pragma mark - 閲嶅啓鐖剁被鐨勬柟娉�
 - (void)prepare
 {
     [super prepare];
@@ -43,13 +43,15 @@
 {
     [super placeSubviews];
     
+    if (self.loadingView.constraints.count) return;
+    
     // 鍦堝湀
-    CGFloat arrowCenterX = self.mj_w * 0.5;
+    CGFloat loadingCenterX = self.mj_w * 0.5;
     if (!self.isRefreshingTitleHidden) {
-        arrowCenterX -= 100;
+        loadingCenterX -= self.stateLabel.mj_textWith * 0.5 + self.labelLeftInset;
     }
-    CGFloat arrowCenterY = self.mj_h * 0.5;
-    self.loadingView.center = CGPointMake(arrowCenterX, arrowCenterY);
+    CGFloat loadingCenterY = self.mj_h * 0.5;
+    self.loadingView.center = CGPointMake(loadingCenterX, loadingCenterY);
 }
 
 - (void)setState:(MJRefreshState)state
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
similarity index 85%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
index 956188b..9fe7915 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.h
@@ -9,6 +9,8 @@
 #import "MJRefreshAutoFooter.h"
 
 @interface MJRefreshAutoStateFooter : MJRefreshAutoFooter
+/** 鏂囧瓧璺濈鍦堝湀銆佺澶寸殑璺濈 */
+@property (assign, nonatomic) CGFloat labelLeftInset;
 /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
 @property (weak, nonatomic, readonly) UILabel *stateLabel;
 
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
similarity index 74%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
index ccbc602..d16547d 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Auto/MJRefreshAutoStateFooter.m
@@ -11,7 +11,7 @@
 @interface MJRefreshAutoStateFooter()
 {
     /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-    __weak UILabel *_stateLabel;
+    __unsafe_unretained UILabel *_stateLabel;
 }
 /** 鎵�鏈夌姸鎬佸搴旂殑鏂囧瓧 */
 @property (strong, nonatomic) NSMutableDictionary *stateTitles;
@@ -30,7 +30,7 @@
 - (UILabel *)stateLabel
 {
     if (!_stateLabel) {
-        [self addSubview:_stateLabel = [UILabel label]];
+        [self addSubview:_stateLabel = [UILabel mj_label]];
     }
     return _stateLabel;
 }
@@ -56,10 +56,13 @@
 {
     [super prepare];
     
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = MJRefreshLabelLeftInset;
+    
     // 鍒濆鍖栨枃瀛�
-    [self setTitle:MJRefreshAutoFooterIdleText forState:MJRefreshStateIdle];
-    [self setTitle:MJRefreshAutoFooterRefreshingText forState:MJRefreshStateRefreshing];
-    [self setTitle:MJRefreshAutoFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterIdleText] forState:MJRefreshStateIdle];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterRefreshingText] forState:MJRefreshStateRefreshing];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshAutoFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
     
     // 鐩戝惉label
     self.stateLabel.userInteractionEnabled = YES;
@@ -70,6 +73,8 @@
 {
     [super placeSubviews];
     
+    if (self.stateLabel.constraints.count) return;
+    
     // 鐘舵�佹爣绛�
     self.stateLabel.frame = self.bounds;
 }
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
similarity index 88%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
index 10d92e4..b29af86 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.h
@@ -9,6 +9,8 @@
 #import "MJRefreshBackStateFooter.h"
 
 @interface MJRefreshBackGifFooter : MJRefreshBackStateFooter
+@property (weak, nonatomic, readonly) UIImageView *gifView;
+
 /** 璁剧疆state鐘舵�佷笅鐨勫姩鐢诲浘鐗噄mages 鍔ㄧ敾鎸佺画鏃堕棿duration*/
 - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
 - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
similarity index 91%
rename from EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
rename to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
index ce18b53..fa97c72 100644
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackGifFooter.m
@@ -9,7 +9,9 @@
 #import "MJRefreshBackGifFooter.h"
 
 @interface MJRefreshBackGifFooter()
-@property (weak, nonatomic) UIImageView *gifView;
+{
+    __unsafe_unretained UIImageView *_gifView;
+}
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鍥剧墖 */
 @property (strong, nonatomic) NSMutableDictionary *stateImages;
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鏃堕棿 */
@@ -64,6 +66,14 @@
 }
 
 #pragma mark - 瀹炵幇鐖剁被鐨勬柟娉�
+- (void)prepare
+{
+    [super prepare];
+    
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = 20;
+}
+
 - (void)setPullingPercent:(CGFloat)pullingPercent
 {
     [super setPullingPercent:pullingPercent];
@@ -79,12 +89,14 @@
 {
     [super placeSubviews];
     
+    if (self.gifView.constraints.count) return;
+    
     self.gifView.frame = self.bounds;
     if (self.stateLabel.hidden) {
         self.gifView.contentMode = UIViewContentModeCenter;
     } else {
         self.gifView.contentMode = UIViewContentModeRight;
-        self.gifView.mj_w = self.mj_w * 0.5 - 90;
+        self.gifView.mj_w = self.mj_w * 0.5 - self.labelLeftInset - self.stateLabel.mj_textWith * 0.5;
     }
 }
 
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
similarity index 100%
rename from EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
rename to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
similarity index 81%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
index ab0f47e..30e5ecf 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackNormalFooter.m
@@ -7,10 +7,11 @@
 //
 
 #import "MJRefreshBackNormalFooter.h"
+#import "NSBundle+MJRefresh.h"
 
 @interface MJRefreshBackNormalFooter()
 {
-    __weak UIImageView *_arrowView;
+    __unsafe_unretained UIImageView *_arrowView;
 }
 @property (weak, nonatomic) UIActivityIndicatorView *loadingView;
 @end
@@ -20,8 +21,7 @@
 - (UIImageView *)arrowView
 {
     if (!_arrowView) {
-        UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
-        UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
+        UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]];
         [self addSubview:_arrowView = arrowView];
     }
     return _arrowView;
@@ -45,7 +45,7 @@
     self.loadingView = nil;
     [self setNeedsLayout];
 }
-#pragma makr - 閲嶅啓鐖剁被鐨勬柟娉�
+#pragma mark - 閲嶅啓鐖剁被鐨勬柟娉�
 - (void)prepare
 {
     [super prepare];
@@ -57,17 +57,26 @@
 {
     [super placeSubviews];
     
-    // 绠ご
-    self.arrowView.mj_size = self.arrowView.image.size;
+    // 绠ご鐨勪腑蹇冪偣
     CGFloat arrowCenterX = self.mj_w * 0.5;
     if (!self.stateLabel.hidden) {
-        arrowCenterX -= 100;
+        arrowCenterX -= self.labelLeftInset + self.stateLabel.mj_textWith * 0.5;
     }
     CGFloat arrowCenterY = self.mj_h * 0.5;
-    self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
+    CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
+    
+    // 绠ご
+    if (self.arrowView.constraints.count == 0) {
+        self.arrowView.mj_size = self.arrowView.image.size;
+        self.arrowView.center = arrowCenter;
+    }
     
     // 鍦堝湀
-    self.loadingView.frame = self.arrowView.frame;
+    if (self.loadingView.constraints.count == 0) {
+        self.loadingView.center = arrowCenter;
+    }
+    
+    self.arrowView.tintColor = self.stateLabel.textColor;
 }
 
 - (void)setState:(MJRefreshState)state
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
similarity index 84%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
index 2d02b2e..99b1483 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.h
@@ -9,6 +9,8 @@
 #import "MJRefreshBackFooter.h"
 
 @interface MJRefreshBackStateFooter : MJRefreshBackFooter
+/** 鏂囧瓧璺濈鍦堝湀銆佺澶寸殑璺濈 */
+@property (assign, nonatomic) CGFloat labelLeftInset;
 /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
 @property (weak, nonatomic, readonly) UILabel *stateLabel;
 /** 璁剧疆state鐘舵�佷笅鐨勬枃瀛� */
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
similarity index 65%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
index d75460e..cc784d0 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Footer/Back/MJRefreshBackStateFooter.m
@@ -11,7 +11,7 @@
 @interface MJRefreshBackStateFooter()
 {
     /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
-    __weak UILabel *_stateLabel;
+    __unsafe_unretained UILabel *_stateLabel;
 }
 /** 鎵�鏈夌姸鎬佸搴旂殑鏂囧瓧 */
 @property (strong, nonatomic) NSMutableDictionary *stateTitles;
@@ -30,7 +30,7 @@
 - (UILabel *)stateLabel
 {
     if (!_stateLabel) {
-        [self addSubview:_stateLabel = [UILabel label]];
+        [self addSubview:_stateLabel = [UILabel mj_label]];
     }
     return _stateLabel;
 }
@@ -52,17 +52,22 @@
 {
     [super prepare];
     
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = MJRefreshLabelLeftInset;
+    
     // 鍒濆鍖栨枃瀛�
-    [self setTitle:MJRefreshBackFooterIdleText forState:MJRefreshStateIdle];
-    [self setTitle:MJRefreshBackFooterPullingText forState:MJRefreshStatePulling];
-    [self setTitle:MJRefreshBackFooterRefreshingText forState:MJRefreshStateRefreshing];
-    [self setTitle:MJRefreshBackFooterNoMoreDataText forState:MJRefreshStateNoMoreData];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterIdleText] forState:MJRefreshStateIdle];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterPullingText] forState:MJRefreshStatePulling];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterRefreshingText] forState:MJRefreshStateRefreshing];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshBackFooterNoMoreDataText] forState:MJRefreshStateNoMoreData];
 }
 
 - (void)placeSubviews
 {
     [super placeSubviews];
     
+    if (self.stateLabel.constraints.count) return;
+    
     // 鐘舵�佹爣绛�
     self.stateLabel.frame = self.bounds;
 }
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
similarity index 88%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
index 560c847..ce3ed42 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.h
@@ -9,6 +9,8 @@
 #import "MJRefreshStateHeader.h"
 
 @interface MJRefreshGifHeader : MJRefreshStateHeader
+@property (weak, nonatomic, readonly) UIImageView *gifView;
+
 /** 璁剧疆state鐘舵�佷笅鐨勫姩鐢诲浘鐗噄mages 鍔ㄧ敾鎸佺画鏃堕棿duration*/
 - (void)setImages:(NSArray *)images duration:(NSTimeInterval)duration forState:(MJRefreshState)state;
 - (void)setImages:(NSArray *)images forState:(MJRefreshState)state;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
similarity index 82%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
index aa2ddd5..f8bcc9b 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshGifHeader.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshGifHeader.m
@@ -9,7 +9,9 @@
 #import "MJRefreshGifHeader.h"
 
 @interface MJRefreshGifHeader()
-@property (weak, nonatomic) UIImageView *gifView;
+{
+    __unsafe_unretained UIImageView *_gifView;
+}
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鍥剧墖 */
 @property (strong, nonatomic) NSMutableDictionary *stateImages;
 /** 鎵�鏈夌姸鎬佸搴旂殑鍔ㄧ敾鏃堕棿 */
@@ -64,6 +66,14 @@
 }
 
 #pragma mark - 瀹炵幇鐖剁被鐨勬柟娉�
+- (void)prepare
+{
+    [super prepare];
+    
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = 20;
+}
+
 - (void)setPullingPercent:(CGFloat)pullingPercent
 {
     [super setPullingPercent:pullingPercent];
@@ -81,12 +91,21 @@
 {
     [super placeSubviews];
     
+    if (self.gifView.constraints.count) return;
+    
     self.gifView.frame = self.bounds;
     if (self.stateLabel.hidden && self.lastUpdatedTimeLabel.hidden) {
         self.gifView.contentMode = UIViewContentModeCenter;
     } else {
         self.gifView.contentMode = UIViewContentModeRight;
-        self.gifView.mj_w = self.mj_w * 0.5 - 90;
+        
+        CGFloat stateWidth = self.stateLabel.mj_textWith;
+        CGFloat timeWidth = 0.0;
+        if (!self.lastUpdatedTimeLabel.hidden) {
+            timeWidth = self.lastUpdatedTimeLabel.mj_textWith;
+        }
+        CGFloat textWidth = MAX(stateWidth, timeWidth);
+        self.gifView.mj_w = self.mj_w * 0.5 - textWidth * 0.5 - self.labelLeftInset;
     }
 }
 
@@ -107,6 +126,8 @@
             self.gifView.animationDuration = [self.stateDurations[@(state)] doubleValue];
             [self.gifView startAnimating];
         }
+    } else if (state == MJRefreshStateIdle) {
+        [self.gifView stopAnimating];
     }
 }
 @end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
similarity index 100%
rename from EZSDK/EZSDK/EZ/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
rename to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
similarity index 77%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
index 6e6dc57..32d8de7 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshNormalHeader.m
@@ -7,10 +7,11 @@
 //
 
 #import "MJRefreshNormalHeader.h"
+#import "NSBundle+MJRefresh.h"
 
 @interface MJRefreshNormalHeader()
 {
-    __weak UIImageView *_arrowView;
+    __unsafe_unretained UIImageView *_arrowView;
 }
 @property (weak, nonatomic) UIActivityIndicatorView *loadingView;
 @end
@@ -20,8 +21,7 @@
 - (UIImageView *)arrowView
 {
     if (!_arrowView) {
-        UIImage *image = [UIImage imageNamed:MJRefreshSrcName(@"arrow.png")] ?: [UIImage imageNamed:MJRefreshFrameworkSrcName(@"arrow.png")];
-        UIImageView *arrowView = [[UIImageView alloc] initWithImage:image];
+        UIImageView *arrowView = [[UIImageView alloc] initWithImage:[NSBundle mj_arrowImage]];
         [self addSubview:_arrowView = arrowView];
     }
     return _arrowView;
@@ -46,7 +46,7 @@
     [self setNeedsLayout];
 }
 
-#pragma makr - 閲嶅啓鐖剁被鐨勬柟娉�
+#pragma mark - 閲嶅啓鐖剁被鐨勬柟娉�
 - (void)prepare
 {
     [super prepare];
@@ -58,17 +58,32 @@
 {
     [super placeSubviews];
     
-    // 绠ご
-    self.arrowView.mj_size = self.arrowView.image.size;
+    // 绠ご鐨勪腑蹇冪偣
     CGFloat arrowCenterX = self.mj_w * 0.5;
     if (!self.stateLabel.hidden) {
-        arrowCenterX -= 100;
+        CGFloat stateWidth = self.stateLabel.mj_textWith;
+        CGFloat timeWidth = 0.0;
+        if (!self.lastUpdatedTimeLabel.hidden) {
+            timeWidth = self.lastUpdatedTimeLabel.mj_textWith;
+        }
+        CGFloat textWidth = MAX(stateWidth, timeWidth);
+        arrowCenterX -= textWidth / 2 + self.labelLeftInset;
     }
     CGFloat arrowCenterY = self.mj_h * 0.5;
-    self.arrowView.center = CGPointMake(arrowCenterX, arrowCenterY);
+    CGPoint arrowCenter = CGPointMake(arrowCenterX, arrowCenterY);
     
+    // 绠ご
+    if (self.arrowView.constraints.count == 0) {
+        self.arrowView.mj_size = self.arrowView.image.size;
+        self.arrowView.center = arrowCenter;
+    }
+        
     // 鍦堝湀
-    self.loadingView.frame = self.arrowView.frame;
+    if (self.loadingView.constraints.count == 0) {
+        self.loadingView.center = arrowCenter;
+    }
+    
+    self.arrowView.tintColor = self.stateLabel.textColor;
 }
 
 - (void)setState:(MJRefreshState)state
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
similarity index 88%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
index 5909532..1f3dbc4 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/Custom/Header/MJRefreshStateHeader.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.h
@@ -16,6 +16,8 @@
 @property (weak, nonatomic, readonly) UILabel *lastUpdatedTimeLabel;
 
 #pragma mark - 鐘舵�佺浉鍏�
+/** 鏂囧瓧璺濈鍦堝湀銆佺澶寸殑璺濈 */
+@property (assign, nonatomic) CGFloat labelLeftInset;
 /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
 @property (weak, nonatomic, readonly) UILabel *stateLabel;
 /** 璁剧疆state鐘舵�佷笅鐨勬枃瀛� */
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m
new file mode 100644
index 0000000..ca78b52
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/Custom/Header/MJRefreshStateHeader.m
@@ -0,0 +1,167 @@
+//
+//  MJRefreshStateHeader.m
+//  MJRefreshExample
+//
+//  Created by MJ Lee on 15/4/24.
+//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
+//
+
+#import "MJRefreshStateHeader.h"
+
+@interface MJRefreshStateHeader()
+{
+    /** 鏄剧ず涓婁竴娆″埛鏂版椂闂寸殑label */
+    __unsafe_unretained UILabel *_lastUpdatedTimeLabel;
+    /** 鏄剧ず鍒锋柊鐘舵�佺殑label */
+    __unsafe_unretained UILabel *_stateLabel;
+}
+/** 鎵�鏈夌姸鎬佸搴旂殑鏂囧瓧 */
+@property (strong, nonatomic) NSMutableDictionary *stateTitles;
+@end
+
+@implementation MJRefreshStateHeader
+#pragma mark - 鎳掑姞杞�
+- (NSMutableDictionary *)stateTitles
+{
+    if (!_stateTitles) {
+        self.stateTitles = [NSMutableDictionary dictionary];
+    }
+    return _stateTitles;
+}
+
+- (UILabel *)stateLabel
+{
+    if (!_stateLabel) {
+        [self addSubview:_stateLabel = [UILabel mj_label]];
+    }
+    return _stateLabel;
+}
+
+- (UILabel *)lastUpdatedTimeLabel
+{
+    if (!_lastUpdatedTimeLabel) {
+        [self addSubview:_lastUpdatedTimeLabel = [UILabel mj_label]];
+    }
+    return _lastUpdatedTimeLabel;
+}
+
+#pragma mark - 鍏叡鏂规硶
+- (void)setTitle:(NSString *)title forState:(MJRefreshState)state
+{
+    if (title == nil) return;
+    self.stateTitles[@(state)] = title;
+    self.stateLabel.text = self.stateTitles[@(self.state)];
+}
+
+#pragma mark - 鏃ュ巻鑾峰彇鍦�9.x涔嬪悗鐨勭郴缁熶娇鐢╟urrentCalendar浼氬嚭寮傚父銆傚湪8.0涔嬪悗浣跨敤绯荤粺鏂癆PI銆�
+- (NSCalendar *)currentCalendar {
+    if ([NSCalendar respondsToSelector:@selector(calendarWithIdentifier:)]) {
+        return [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
+    }
+    return [NSCalendar currentCalendar];
+}
+
+#pragma mark key鐨勫鐞�
+- (void)setLastUpdatedTimeKey:(NSString *)lastUpdatedTimeKey
+{
+    [super setLastUpdatedTimeKey:lastUpdatedTimeKey];
+    
+    // 濡傛灉label闅愯棌浜嗭紝灏变笉鐢ㄥ啀澶勭悊
+    if (self.lastUpdatedTimeLabel.hidden) return;
+    
+    NSDate *lastUpdatedTime = [[NSUserDefaults standardUserDefaults] objectForKey:lastUpdatedTimeKey];
+    
+    // 濡傛灉鏈塨lock
+    if (self.lastUpdatedTimeText) {
+        self.lastUpdatedTimeLabel.text = self.lastUpdatedTimeText(lastUpdatedTime);
+        return;
+    }
+    
+    if (lastUpdatedTime) {
+        // 1.鑾峰緱骞存湀鏃�
+        NSCalendar *calendar = [self currentCalendar];
+        NSUInteger unitFlags = NSCalendarUnitYear| NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour |NSCalendarUnitMinute;
+        NSDateComponents *cmp1 = [calendar components:unitFlags fromDate:lastUpdatedTime];
+        NSDateComponents *cmp2 = [calendar components:unitFlags fromDate:[NSDate date]];
+        
+        // 2.鏍煎紡鍖栨棩鏈�
+        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
+        BOOL isToday = NO;
+        if ([cmp1 day] == [cmp2 day]) { // 浠婂ぉ
+            formatter.dateFormat = @" HH:mm";
+            isToday = YES;
+        } else if ([cmp1 year] == [cmp2 year]) { // 浠婂勾
+            formatter.dateFormat = @"MM-dd HH:mm";
+        } else {
+            formatter.dateFormat = @"yyyy-MM-dd HH:mm";
+        }
+        NSString *time = [formatter stringFromDate:lastUpdatedTime];
+        
+        // 3.鏄剧ず鏃ユ湡
+        self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@%@",
+                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText],
+                                          isToday ? [NSBundle mj_localizedStringForKey:MJRefreshHeaderDateTodayText] : @"",
+                                          time];
+    } else {
+        self.lastUpdatedTimeLabel.text = [NSString stringWithFormat:@"%@%@",
+                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderLastTimeText],
+                                          [NSBundle mj_localizedStringForKey:MJRefreshHeaderNoneLastDateText]];
+    }
+}
+
+#pragma mark - 瑕嗙洊鐖剁被鐨勬柟娉�
+- (void)prepare
+{
+    [super prepare];
+    
+    // 鍒濆鍖栭棿璺�
+    self.labelLeftInset = MJRefreshLabelLeftInset;
+    
+    // 鍒濆鍖栨枃瀛�
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderIdleText] forState:MJRefreshStateIdle];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderPullingText] forState:MJRefreshStatePulling];
+    [self setTitle:[NSBundle mj_localizedStringForKey:MJRefreshHeaderRefreshingText] forState:MJRefreshStateRefreshing];
+}
+
+- (void)placeSubviews
+{
+    [super placeSubviews];
+    
+    if (self.stateLabel.hidden) return;
+    
+    BOOL noConstrainsOnStatusLabel = self.stateLabel.constraints.count == 0;
+    
+    if (self.lastUpdatedTimeLabel.hidden) {
+        // 鐘舵��
+        if (noConstrainsOnStatusLabel) self.stateLabel.frame = self.bounds;
+    } else {
+        CGFloat stateLabelH = self.mj_h * 0.5;
+        // 鐘舵��
+        if (noConstrainsOnStatusLabel) {
+            self.stateLabel.mj_x = 0;
+            self.stateLabel.mj_y = 0;
+            self.stateLabel.mj_w = self.mj_w;
+            self.stateLabel.mj_h = stateLabelH;
+        }
+        
+        // 鏇存柊鏃堕棿
+        if (self.lastUpdatedTimeLabel.constraints.count == 0) {
+            self.lastUpdatedTimeLabel.mj_x = 0;
+            self.lastUpdatedTimeLabel.mj_y = stateLabelH;
+            self.lastUpdatedTimeLabel.mj_w = self.mj_w;
+            self.lastUpdatedTimeLabel.mj_h = self.mj_h - self.lastUpdatedTimeLabel.mj_y;
+        }
+    }
+}
+
+- (void)setState:(MJRefreshState)state
+{
+    MJRefreshCheckState
+    
+    // 璁剧疆鐘舵�佹枃瀛�
+    self.stateLabel.text = self.stateTitles[@(state)];
+    
+    // 閲嶆柊璁剧疆key锛堥噸鏂版樉绀烘椂闂达級
+    self.lastUpdatedTimeKey = self.lastUpdatedTimeKey;
+}
+@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh.bundle/arrow@2x.png b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png
similarity index 100%
rename from EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh.bundle/arrow@2x.png
rename to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/arrow@2x.png
Binary files differ
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings
new file mode 100644
index 0000000..a75f6b1
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/en.lproj/Localizable.strings
Binary files differ
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings
new file mode 100644
index 0000000..0a36d7e
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hans.lproj/Localizable.strings
Binary files differ
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings
new file mode 100644
index 0000000..7924bba
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.bundle/zh-Hant.lproj/Localizable.strings
@@ -0,0 +1,16 @@
+"MJRefreshHeaderIdleText" = "涓嬫媺鍙互鍒锋柊";
+"MJRefreshHeaderPullingText" = "楝嗛枊绔嬪嵆鍒锋柊";
+"MJRefreshHeaderRefreshingText" = "姝e湪鍒锋柊鏁告摎涓�...";
+
+"MJRefreshAutoFooterIdleText" = "榛炴搳鎴栦笂鎷夊姞杓夋洿澶�";
+"MJRefreshAutoFooterRefreshingText" = "姝e湪鍔犺級鏇村鐨勬暩鎿�...";
+"MJRefreshAutoFooterNoMoreDataText" = "宸茬稉鍏ㄩ儴鍔犺級瀹岀暍";
+
+"MJRefreshBackFooterIdleText" = "涓婃媺鍙互鍔犺級鏇村";
+"MJRefreshBackFooterPullingText" = "楝嗛枊绔嬪嵆鍔犺級鏇村";
+"MJRefreshBackFooterRefreshingText" = "姝e湪鍔犺級鏇村鐨勬暩鎿�...";
+"MJRefreshBackFooterNoMoreDataText" = "宸茬稉鍏ㄩ儴鍔犺級瀹岀暍";
+
+"MJRefreshHeaderLastTimeText" = "鏈�寰屾洿鏂帮細";
+"MJRefreshHeaderDateTodayText" = "浠婂ぉ";
+"MJRefreshHeaderNoneLastDateText" = "鐒¤閷�";
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.h
similarity index 100%
rename from EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh.h
rename to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefresh.h
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.h
similarity index 87%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.h
index 71622d2..4a72021 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/MJRefreshConst.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.h
@@ -3,6 +3,9 @@
 #import <UIKit/UIKit.h>
 #import <objc/message.h>
 
+// 寮卞紩鐢�
+#define MJWeakSelf __weak typeof(self) weakSelf = self;
+
 // 鏃ュ織杈撳嚭
 #ifdef DEBUG
 #define MJRefreshLog(...) NSLog(__VA_ARGS__)
@@ -26,11 +29,8 @@
 // 瀛椾綋澶у皬
 #define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14]
 
-// 鍥剧墖璺緞
-#define MJRefreshSrcName(file) [@"MJRefresh.bundle" stringByAppendingPathComponent:file]
-#define MJRefreshFrameworkSrcName(file) [@"Frameworks/MJRefresh.framework/MJRefresh.bundle" stringByAppendingPathComponent:file]
-
 // 甯搁噺
+UIKIT_EXTERN const CGFloat MJRefreshLabelLeftInset;
 UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight;
 UIKIT_EXTERN const CGFloat MJRefreshFooterHeight;
 UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration;
@@ -56,6 +56,10 @@
 UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText;
 UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText;
 
+UIKIT_EXTERN NSString *const MJRefreshHeaderLastTimeText;
+UIKIT_EXTERN NSString *const MJRefreshHeaderDateTodayText;
+UIKIT_EXTERN NSString *const MJRefreshHeaderNoneLastDateText;
+
 // 鐘舵�佹鏌�
 #define MJRefreshCheckState \
 MJRefreshState oldState = self.state; \
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.m
new file mode 100644
index 0000000..7c0733e
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/MJRefreshConst.m
@@ -0,0 +1,33 @@
+//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
+//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+#import <UIKit/UIKit.h>
+
+const CGFloat MJRefreshLabelLeftInset = 25;
+const CGFloat MJRefreshHeaderHeight = 54.0;
+const CGFloat MJRefreshFooterHeight = 44.0;
+const CGFloat MJRefreshFastAnimationDuration = 0.25;
+const CGFloat MJRefreshSlowAnimationDuration = 0.4;
+
+NSString *const MJRefreshKeyPathContentOffset = @"contentOffset";
+NSString *const MJRefreshKeyPathContentInset = @"contentInset";
+NSString *const MJRefreshKeyPathContentSize = @"contentSize";
+NSString *const MJRefreshKeyPathPanState = @"state";
+
+NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey";
+
+NSString *const MJRefreshHeaderIdleText = @"MJRefreshHeaderIdleText";
+NSString *const MJRefreshHeaderPullingText = @"MJRefreshHeaderPullingText";
+NSString *const MJRefreshHeaderRefreshingText = @"MJRefreshHeaderRefreshingText";
+
+NSString *const MJRefreshAutoFooterIdleText = @"MJRefreshAutoFooterIdleText";
+NSString *const MJRefreshAutoFooterRefreshingText = @"MJRefreshAutoFooterRefreshingText";
+NSString *const MJRefreshAutoFooterNoMoreDataText = @"MJRefreshAutoFooterNoMoreDataText";
+
+NSString *const MJRefreshBackFooterIdleText = @"MJRefreshBackFooterIdleText";
+NSString *const MJRefreshBackFooterPullingText = @"MJRefreshBackFooterPullingText";
+NSString *const MJRefreshBackFooterRefreshingText = @"MJRefreshBackFooterRefreshingText";
+NSString *const MJRefreshBackFooterNoMoreDataText = @"MJRefreshBackFooterNoMoreDataText";
+
+NSString *const MJRefreshHeaderLastTimeText = @"MJRefreshHeaderLastTimeText";
+NSString *const MJRefreshHeaderDateTodayText = @"MJRefreshHeaderDateTodayText";
+NSString *const MJRefreshHeaderNoneLastDateText = @"MJRefreshHeaderNoneLastDateText";
\ No newline at end of file
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h
new file mode 100644
index 0000000..01df06c
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.h
@@ -0,0 +1,16 @@
+//
+//  NSBundle+MJRefresh.h
+//  MJRefreshExample
+//
+//  Created by MJ Lee on 16/6/13.
+//  Copyright 漏 2016骞� 灏忕爜鍝�. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@interface NSBundle (MJRefresh)
++ (instancetype)mj_refreshBundle;
++ (UIImage *)mj_arrowImage;
++ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value;
++ (NSString *)mj_localizedStringForKey:(NSString *)key;
+@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m
new file mode 100644
index 0000000..c155ad4
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/NSBundle+MJRefresh.m
@@ -0,0 +1,61 @@
+//
+//  NSBundle+MJRefresh.m
+//  MJRefreshExample
+//
+//  Created by MJ Lee on 16/6/13.
+//  Copyright 漏 2016骞� 灏忕爜鍝�. All rights reserved.
+//
+
+#import "NSBundle+MJRefresh.h"
+#import "MJRefreshComponent.h"
+
+@implementation NSBundle (MJRefresh)
++ (instancetype)mj_refreshBundle
+{
+    static NSBundle *refreshBundle = nil;
+    if (refreshBundle == nil) {
+        // 杩欓噷涓嶄娇鐢╩ainBundle鏄负浜嗛�傞厤pod 1.x鍜�0.x
+        refreshBundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[MJRefreshComponent class]] pathForResource:@"MJRefresh" ofType:@"bundle"]];
+    }
+    return refreshBundle;
+}
+
++ (UIImage *)mj_arrowImage
+{
+    static UIImage *arrowImage = nil;
+    if (arrowImage == nil) {
+        arrowImage = [[UIImage imageWithContentsOfFile:[[self mj_refreshBundle] pathForResource:@"arrow@2x" ofType:@"png"]] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
+    }
+    return arrowImage;
+}
+
++ (NSString *)mj_localizedStringForKey:(NSString *)key
+{
+    return [self mj_localizedStringForKey:key value:nil];
+}
+
++ (NSString *)mj_localizedStringForKey:(NSString *)key value:(NSString *)value
+{
+    static NSBundle *bundle = nil;
+    if (bundle == nil) {
+        // 锛坕OS鑾峰彇鐨勮瑷�瀛楃涓叉瘮杈冧笉绋冲畾锛夌洰鍓嶆鏋跺彧澶勭悊en銆亃h-Hans銆亃h-Hant涓夌鎯呭喌锛屽叾浠栨寜鐓х郴缁熼粯璁ゅ鐞�
+        NSString *language = [NSLocale preferredLanguages].firstObject;
+        if ([language hasPrefix:@"en"]) {
+            language = @"en";
+        } else if ([language hasPrefix:@"zh"]) {
+            if ([language rangeOfString:@"Hans"].location != NSNotFound) {
+                language = @"zh-Hans"; // 绠�浣撲腑鏂�
+            } else { // zh-Hant\zh-HK\zh-TW
+                language = @"zh-Hant"; // 绻侀珨涓枃
+            }
+        } else {
+            language = @"en";
+        }
+        
+        // 浠嶮JRefresh.bundle涓煡鎵捐祫婧�
+        bundle = [NSBundle bundleWithPath:[[NSBundle mj_refreshBundle] pathForResource:language ofType:@"lproj"]];
+    }
+    value = [bundle localizedStringForKey:key value:value table:nil];
+    return [[NSBundle mainBundle] localizedStringForKey:key value:value table:nil];
+}
+@end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
similarity index 93%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.h
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
index 734110f..dd70d08 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.h
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.h
@@ -10,6 +10,8 @@
 #import <UIKit/UIKit.h>
 
 @interface UIScrollView (MJExtension)
+@property (readonly, nonatomic) UIEdgeInsets mj_inset;
+
 @property (assign, nonatomic) CGFloat mj_insetT;
 @property (assign, nonatomic) CGFloat mj_insetB;
 @property (assign, nonatomic) CGFloat mj_insetL;
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
similarity index 63%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
index 6a13f5f..045c1b3 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJExtension.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJExtension.m
@@ -10,54 +10,94 @@
 #import "UIScrollView+MJExtension.h"
 #import <objc/runtime.h>
 
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wunguarded-availability-new"
+
 @implementation UIScrollView (MJExtension)
+
+static BOOL gt_ios_11_;
++ (void)load
+{
+    // 缂撳瓨鍒ゆ柇鍊�
+    gt_ios_11_ = [[[UIDevice currentDevice] systemVersion] compare:@"11.0" options:NSNumericSearch] != NSOrderedAscending;
+}
+
+- (UIEdgeInsets)mj_inset
+{
+#ifdef __IPHONE_11_0
+    if (gt_ios_11_) {
+        return self.adjustedContentInset;
+    }
+#endif
+    return self.contentInset;
+}
 
 - (void)setMj_insetT:(CGFloat)mj_insetT
 {
     UIEdgeInsets inset = self.contentInset;
     inset.top = mj_insetT;
+#ifdef __IPHONE_11_0
+    if (gt_ios_11_) {
+        inset.top -= (self.adjustedContentInset.top - self.contentInset.top);
+    }
+#endif
     self.contentInset = inset;
 }
 
 - (CGFloat)mj_insetT
 {
-    return self.contentInset.top;
+    return self.mj_inset.top;
 }
 
 - (void)setMj_insetB:(CGFloat)mj_insetB
 {
     UIEdgeInsets inset = self.contentInset;
     inset.bottom = mj_insetB;
+#ifdef __IPHONE_11_0
+    if (gt_ios_11_) {
+        inset.bottom -= (self.adjustedContentInset.bottom - self.contentInset.bottom);
+    }
+#endif
     self.contentInset = inset;
 }
 
 - (CGFloat)mj_insetB
 {
-    return self.contentInset.bottom;
+    return self.mj_inset.bottom;
 }
 
 - (void)setMj_insetL:(CGFloat)mj_insetL
 {
     UIEdgeInsets inset = self.contentInset;
     inset.left = mj_insetL;
+#ifdef __IPHONE_11_0
+    if (gt_ios_11_) {
+        inset.left -= (self.adjustedContentInset.left - self.contentInset.left);
+    }
+#endif
     self.contentInset = inset;
 }
 
 - (CGFloat)mj_insetL
 {
-    return self.contentInset.left;
+    return self.mj_inset.left;
 }
 
 - (void)setMj_insetR:(CGFloat)mj_insetR
 {
     UIEdgeInsets inset = self.contentInset;
     inset.right = mj_insetR;
+#ifdef __IPHONE_11_0
+    if (gt_ios_11_) {
+        inset.right -= (self.adjustedContentInset.right - self.contentInset.right);
+    }
+#endif
     self.contentInset = inset;
 }
 
 - (CGFloat)mj_insetR
 {
-    return self.contentInset.right;
+    return self.mj_inset.right;
 }
 
 - (void)setMj_offsetX:(CGFloat)mj_offsetX
@@ -108,3 +148,4 @@
     return self.contentSize.height;
 }
 @end
+#pragma clang diagnostic pop
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h
new file mode 100644
index 0000000..17d4715
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.h
@@ -0,0 +1,26 @@
+//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
+//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
+//  UIScrollView+MJRefresh.h
+//  MJRefreshExample
+//
+//  Created by MJ Lee on 15/3/4.
+//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
+//  缁橲crollView澧炲姞涓嬫媺鍒锋柊銆佷笂鎷夊埛鏂扮殑鍔熻兘
+
+#import <UIKit/UIKit.h>
+#import "MJRefreshConst.h"
+
+@class MJRefreshHeader, MJRefreshFooter;
+
+@interface UIScrollView (MJRefresh)
+/** 涓嬫媺鍒锋柊鎺т欢 */
+@property (strong, nonatomic) MJRefreshHeader *mj_header;
+@property (strong, nonatomic) MJRefreshHeader *header MJRefreshDeprecated("浣跨敤mj_header");
+/** 涓婃媺鍒锋柊鎺т欢 */
+@property (strong, nonatomic) MJRefreshFooter *mj_footer;
+@property (strong, nonatomic) MJRefreshFooter *footer MJRefreshDeprecated("浣跨敤mj_footer");
+
+#pragma mark - other
+- (NSInteger)mj_totalDataCount;
+@property (copy, nonatomic) void (^mj_reloadDataBlock)(NSInteger totalDataCount);
+@end
diff --git a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
similarity index 69%
copy from Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.m
copy to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
index b87a88c..b1b9942 100644
--- a/Demo/EZOpensdk_iOS_4.15.1_build20201104/Demo/EZOpenSDKDemo/Venders/MJRefresh/UIScrollView+MJRefresh.m
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIScrollView+MJRefresh.m
@@ -30,50 +30,71 @@
 
 #pragma mark - header
 static const char MJRefreshHeaderKey = '\0';
-- (void)setHeader:(MJRefreshHeader *)header
+- (void)setMj_header:(MJRefreshHeader *)mj_header
 {
-    if (header != self.header) {
+    if (mj_header != self.mj_header) {
         // 鍒犻櫎鏃х殑锛屾坊鍔犳柊鐨�
-        [self.header removeFromSuperview];
-        [self addSubview:header];
+        [self.mj_header removeFromSuperview];
+        [self insertSubview:mj_header atIndex:0];
         
         // 瀛樺偍鏂扮殑
-        [self willChangeValueForKey:@"header"]; // KVO
+        [self willChangeValueForKey:@"mj_header"]; // KVO
         objc_setAssociatedObject(self, &MJRefreshHeaderKey,
-                                 header, OBJC_ASSOCIATION_ASSIGN);
-        [self didChangeValueForKey:@"header"]; // KVO
+                                 mj_header, OBJC_ASSOCIATION_ASSIGN);
+        [self didChangeValueForKey:@"mj_header"]; // KVO
     }
 }
 
-- (MJRefreshHeader *)header
+- (MJRefreshHeader *)mj_header
 {
     return objc_getAssociatedObject(self, &MJRefreshHeaderKey);
 }
 
 #pragma mark - footer
 static const char MJRefreshFooterKey = '\0';
-- (void)setFooter:(MJRefreshFooter *)footer
+- (void)setMj_footer:(MJRefreshFooter *)mj_footer
 {
-    if (footer != self.footer) {
+    if (mj_footer != self.mj_footer) {
         // 鍒犻櫎鏃х殑锛屾坊鍔犳柊鐨�
-        [self.footer removeFromSuperview];
-        [self addSubview:footer];
+        [self.mj_footer removeFromSuperview];
+        [self insertSubview:mj_footer atIndex:0];
         
         // 瀛樺偍鏂扮殑
-        [self willChangeValueForKey:@"footer"]; // KVO
+        [self willChangeValueForKey:@"mj_footer"]; // KVO
         objc_setAssociatedObject(self, &MJRefreshFooterKey,
-                                 footer, OBJC_ASSOCIATION_ASSIGN);
-        [self didChangeValueForKey:@"footer"]; // KVO
+                                 mj_footer, OBJC_ASSOCIATION_ASSIGN);
+        [self didChangeValueForKey:@"mj_footer"]; // KVO
     }
 }
 
-- (MJRefreshFooter *)footer
+- (MJRefreshFooter *)mj_footer
 {
     return objc_getAssociatedObject(self, &MJRefreshFooterKey);
 }
 
+#pragma mark - 杩囨湡
+- (void)setFooter:(MJRefreshFooter *)footer
+{
+    self.mj_footer = footer;
+}
+
+- (MJRefreshFooter *)footer
+{
+    return self.mj_footer;
+}
+
+- (void)setHeader:(MJRefreshHeader *)header
+{
+    self.mj_header = header;
+}
+
+- (MJRefreshHeader *)header
+{
+    return self.mj_header;
+}
+
 #pragma mark - other
-- (NSInteger)totalDataCount
+- (NSInteger)mj_totalDataCount
 {
     NSInteger totalCount = 0;
     if ([self isKindOfClass:[UITableView class]]) {
@@ -93,21 +114,21 @@
 }
 
 static const char MJRefreshReloadDataBlockKey = '\0';
-- (void)setReloadDataBlock:(void (^)(NSInteger))reloadDataBlock
+- (void)setMj_reloadDataBlock:(void (^)(NSInteger))mj_reloadDataBlock
 {
-    [self willChangeValueForKey:@"reloadDataBlock"]; // KVO
-    objc_setAssociatedObject(self, &MJRefreshReloadDataBlockKey, reloadDataBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
-    [self didChangeValueForKey:@"reloadDataBlock"]; // KVO
+    [self willChangeValueForKey:@"mj_reloadDataBlock"]; // KVO
+    objc_setAssociatedObject(self, &MJRefreshReloadDataBlockKey, mj_reloadDataBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
+    [self didChangeValueForKey:@"mj_reloadDataBlock"]; // KVO
 }
 
-- (void (^)(NSInteger))reloadDataBlock
+- (void (^)(NSInteger))mj_reloadDataBlock
 {
     return objc_getAssociatedObject(self, &MJRefreshReloadDataBlockKey);
 }
 
 - (void)executeReloadDataBlock
 {
-    !self.reloadDataBlock ? : self.reloadDataBlock(self.totalDataCount);
+    !self.mj_reloadDataBlock ? : self.mj_reloadDataBlock(self.mj_totalDataCount);
 }
 @end
 
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIView+MJExtension.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIView+MJExtension.h
similarity index 100%
rename from EZSDK/EZSDK/EZ/Venders/MJRefresh/UIView+MJExtension.h
rename to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIView+MJExtension.h
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIView+MJExtension.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIView+MJExtension.m
similarity index 100%
rename from EZSDK/EZSDK/EZ/Venders/MJRefresh/UIView+MJExtension.m
rename to EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefresh/UIView+MJExtension.m
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefreshConst.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefreshConst.h
deleted file mode 100644
index 71622d2..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefreshConst.h
+++ /dev/null
@@ -1,63 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-#import <UIKit/UIKit.h>
-#import <objc/message.h>
-
-// 鏃ュ織杈撳嚭
-#ifdef DEBUG
-#define MJRefreshLog(...) NSLog(__VA_ARGS__)
-#else
-#define MJRefreshLog(...)
-#endif
-
-// 杩囨湡鎻愰啋
-#define MJRefreshDeprecated(instead) NS_DEPRECATED(2_0, 2_0, 2_0, 2_0, instead)
-
-// 杩愯鏃秓bjc_msgSend
-#define MJRefreshMsgSend(...) ((void (*)(void *, SEL, UIView *))objc_msgSend)(__VA_ARGS__)
-#define MJRefreshMsgTarget(target) (__bridge void *)(target)
-
-// RGB棰滆壊
-#define MJRefreshColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
-
-// 鏂囧瓧棰滆壊
-#define MJRefreshLabelTextColor MJRefreshColor(90, 90, 90)
-
-// 瀛椾綋澶у皬
-#define MJRefreshLabelFont [UIFont boldSystemFontOfSize:14]
-
-// 鍥剧墖璺緞
-#define MJRefreshSrcName(file) [@"MJRefresh.bundle" stringByAppendingPathComponent:file]
-#define MJRefreshFrameworkSrcName(file) [@"Frameworks/MJRefresh.framework/MJRefresh.bundle" stringByAppendingPathComponent:file]
-
-// 甯搁噺
-UIKIT_EXTERN const CGFloat MJRefreshHeaderHeight;
-UIKIT_EXTERN const CGFloat MJRefreshFooterHeight;
-UIKIT_EXTERN const CGFloat MJRefreshFastAnimationDuration;
-UIKIT_EXTERN const CGFloat MJRefreshSlowAnimationDuration;
-
-UIKIT_EXTERN NSString *const MJRefreshKeyPathContentOffset;
-UIKIT_EXTERN NSString *const MJRefreshKeyPathContentSize;
-UIKIT_EXTERN NSString *const MJRefreshKeyPathContentInset;
-UIKIT_EXTERN NSString *const MJRefreshKeyPathPanState;
-
-UIKIT_EXTERN NSString *const MJRefreshHeaderLastUpdatedTimeKey;
-
-UIKIT_EXTERN NSString *const MJRefreshHeaderIdleText;
-UIKIT_EXTERN NSString *const MJRefreshHeaderPullingText;
-UIKIT_EXTERN NSString *const MJRefreshHeaderRefreshingText;
-
-UIKIT_EXTERN NSString *const MJRefreshAutoFooterIdleText;
-UIKIT_EXTERN NSString *const MJRefreshAutoFooterRefreshingText;
-UIKIT_EXTERN NSString *const MJRefreshAutoFooterNoMoreDataText;
-
-UIKIT_EXTERN NSString *const MJRefreshBackFooterIdleText;
-UIKIT_EXTERN NSString *const MJRefreshBackFooterPullingText;
-UIKIT_EXTERN NSString *const MJRefreshBackFooterRefreshingText;
-UIKIT_EXTERN NSString *const MJRefreshBackFooterNoMoreDataText;
-
-// 鐘舵�佹鏌�
-#define MJRefreshCheckState \
-MJRefreshState oldState = self.state; \
-if (state == oldState) return; \
-[super setState:state];
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefreshConst.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefreshConst.m
deleted file mode 100644
index 91e04f3..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/MJRefreshConst.m
+++ /dev/null
@@ -1,28 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-#import <UIKit/UIKit.h>
-
-const CGFloat MJRefreshHeaderHeight = 54.0;
-const CGFloat MJRefreshFooterHeight = 44.0;
-const CGFloat MJRefreshFastAnimationDuration = 0.25;
-const CGFloat MJRefreshSlowAnimationDuration = 0.4;
-
-NSString *const MJRefreshKeyPathContentOffset = @"contentOffset";
-NSString *const MJRefreshKeyPathContentInset = @"contentInset";
-NSString *const MJRefreshKeyPathContentSize = @"contentSize";
-NSString *const MJRefreshKeyPathPanState = @"state";
-
-NSString *const MJRefreshHeaderLastUpdatedTimeKey = @"MJRefreshHeaderLastUpdatedTimeKey";
-
-NSString *const MJRefreshHeaderIdleText = @"涓嬫媺鍙互鍒锋柊";
-NSString *const MJRefreshHeaderPullingText = @"鏉惧紑绔嬪嵆鍒锋柊";
-NSString *const MJRefreshHeaderRefreshingText = @"姝e湪鍒锋柊鏁版嵁涓�...";
-
-NSString *const MJRefreshAutoFooterIdleText = @"鐐瑰嚮鎴栦笂鎷夊姞杞芥洿澶�";
-NSString *const MJRefreshAutoFooterRefreshingText = @"姝e湪鍔犺浇鏇村鐨勬暟鎹�...";
-NSString *const MJRefreshAutoFooterNoMoreDataText = @"宸茬粡鍏ㄩ儴鍔犺浇瀹屾瘯";
-
-NSString *const MJRefreshBackFooterIdleText = @"涓婃媺鍙互鍔犺浇鏇村";
-NSString *const MJRefreshBackFooterPullingText = @"鏉惧紑绔嬪嵆鍔犺浇鏇村";
-NSString *const MJRefreshBackFooterRefreshingText = @"姝e湪鍔犺浇鏇村鐨勬暟鎹�...";
-NSString *const MJRefreshBackFooterNoMoreDataText = @"宸茬粡鍏ㄩ儴鍔犺浇瀹屾瘯";
\ No newline at end of file
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/README.md b/EZSDK/EZSDK/EZ/Venders/MJRefresh/README.md
new file mode 100644
index 0000000..8bf7874
--- /dev/null
+++ b/EZSDK/EZSDK/EZ/Venders/MJRefresh/README.md
@@ -0,0 +1,362 @@
+![(logo)](http://images.cnitblog.com/blog2015/497279/201505/051004492043385.png)
+## MJRefresh
+* An easy way to use pull-to-refresh
+
+## Contents
+* Getting Started
+    * [Features銆怱upport what kinds of controls to refresh銆慮(#Support_what_kinds_of_controls_to_refresh)
+    * [Installation銆怘ow to use MJRefresh銆慮(#How_to_use_MJRefresh)
+    * [Who's using銆怣ore than hundreds of Apps are using MJRefresh銆慮(#More_than_hundreds_of_Apps_are_using_MJRefresh)
+    * [Classes銆怲he Class Structure Chart of MJRefresh銆慮(#The_Class_Structure_Chart_of_MJRefresh)
+* Comment API
+	* [MJRefreshComponent.h](#MJRefreshComponent.h)
+	* [MJRefreshHeader.h](#MJRefreshHeader.h)
+	* [MJRefreshFooter.h](#MJRefreshFooter.h)
+	* [MJRefreshAutoFooter.h](#MJRefreshAutoFooter.h)
+* Examples
+    * [Reference](#Reference)
+    * [The drop-down refresh 01-Default](#The_drop-down_refresh_01-Default)
+    * [The drop-down refresh 02-Animation image](#The_drop-down_refresh_02-Animation_image)
+    * [The drop-down refresh 03-Hide the time](#The_drop-down_refresh_03-Hide_the_time)
+    * [The drop-down refresh 04-Hide status and time](#The_drop-down_refresh_04-Hide_status_and_time)
+    * [The drop-down refresh 05-DIY title](#The_drop-down_refresh_05-DIY_title)
+    * [The drop-down refresh 06-DIY the control of refresh](#The_drop-down_refresh_06-DIY_the_control_of_refresh)
+    * [The pull to refresh 01-Default](#The_pull_to_refresh_01-Default)
+    * [The pull to refresh 02-Animation image](#The_pull_to_refresh_02-Animation_image)
+    * [The pull to refresh 03-Hide the title of refresh status](#The_pull_to_refresh_03-Hide_the_title_of_refresh_status)
+    * [The pull to refresh 04-All loaded](#The_pull_to_refresh_04-All_loaded)
+    * [The pull to refresh 05-DIY title](#The_pull_to_refresh_05-DIY_title)
+    * [The pull to refresh 06-Hidden After loaded](#The_pull_to_refresh_06-Hidden_After_loaded)
+    * [The pull to refresh 07-Automatic back of the pull01](#The_pull_to_refresh_07-Automatic_back_of_the_pull01)
+    * [The pull to refresh 08-Automatic back of the pull02](#The_pull_to_refresh_08-Automatic_back_of_the_pull02)
+    * [The pull to refresh 09-DIY the control of refresh(Automatic refresh)](#The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh))
+    * [The pull to refresh 10-DIY the control of refresh(Automatic back)](#The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back))
+    * [UICollectionView01-The pull and drop-down refresh](#UICollectionView01-The_pull_and_drop-down_refresh)
+    * [UIWebView01-The drop-down refresh](#UIWebView01-The_drop-down_refresh)
+* [Hope](#Hope)
+
+## <a id="Support_what_kinds_of_controls_to_refresh"></a>Support what kinds of controls to refresh
+* `UIScrollView`銆乣UITableView`銆乣UICollectionView`銆乣UIWebView`
+
+## <a id="How_to_use_MJRefresh"></a>How to use MJRefresh
+* Installation with CocoaPods锛歚pod 'MJRefresh'`
+* Manual import锛�
+    * Drag All files in the `MJRefresh` folder to project
+    * Import the main file锛歚#import "MJRefresh.h"`
+
+```objc
+Base                        Custom
+MJRefresh.bundle            MJRefresh.h
+MJRefreshConst.h            MJRefreshConst.m
+UIScrollView+MJExtension.h  UIScrollView+MJExtension.m
+UIScrollView+MJRefresh.h    UIScrollView+MJRefresh.m
+UIView+MJExtension.h        UIView+MJExtension.m
+```
+
+## <a id="More_than_hundreds_of_Apps_are_using_MJRefresh"></a>More than hundreds of Apps are using MJRefresh
+<img src="http://images0.cnblogs.com/blog2015/497279/201506/141212365041650.png" width="200" height="300">
+* More information of App can focus on锛歔M浜嗕釜J-鍗氬鍥璢(http://www.cnblogs.com/mjios/p/4409853.html)
+
+## <a id="The_Class_Structure_Chart_of_MJRefresh"></a>The Class Structure Chart of MJRefresh
+![](http://images0.cnblogs.com/blog2015/497279/201506/132232456139177.png)
+- `The class of red text` in the chart锛歒ou can use them directly
+    - The drop-down refresh control types
+        - Normal锛歚MJRefreshNormalHeader`
+        - Gif锛歚MJRefreshGifHeader`
+    - The pull to refresh control types
+        - Auto refresh
+            - Normal锛歚MJRefreshAutoNormalFooter`
+            - Gif锛歚MJRefreshAutoGifFooter`
+        - Auto Back
+            - Normal锛歚MJRefreshBackNormalFooter`
+            - Gif锛歚MJRefreshBackGifFooter`
+- `The class of non-red text` in the chart锛欶or inheritance锛宼o use DIY the control of refresh
+- About how to DIY the control of refresh锛孻ou can refer the Class in below Chart<br>
+<img src="http://images0.cnblogs.com/blog2015/497279/201506/141358159107893.png" width="30%" height="30%">
+
+## <a id="MJRefreshComponent.h"></a>MJRefreshComponent.h
+```objc
+/** The Base Class of refresh control */
+@interface MJRefreshComponent : UIView
+#pragma mark -  Control the state of Refresh 
+
+/** BeginRefreshing */
+- (void)beginRefreshing;
+/** EndRefreshing */
+- (void)endRefreshing; 
+/** IsRefreshing */
+- (BOOL)isRefreshing;
+
+#pragma mark - Other
+/** According to the drag ratio to change alpha automatically */
+@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
+@end
+```
+
+## <a id="MJRefreshHeader.h"></a>MJRefreshHeader.h
+```objc
+@interface MJRefreshHeader : MJRefreshComponent
+/** Creat header */
++ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
+/** Creat header */
++ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
+
+/** This key is used to storage the time that the last time of drown-down successfully */
+@property (copy, nonatomic) NSString *lastUpdatedTimeKey;
+/** The last time of drown-down successfully */
+@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime;
+
+/** Ignored scrollView contentInset top */
+@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop;
+@end
+```
+
+## <a id="MJRefreshFooter.h"></a>MJRefreshFooter.h
+```objc
+@interface MJRefreshFooter : MJRefreshComponent
+/** Creat footer */
++ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
+/** Creat footer */
++ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
+
+/** NoticeNoMoreData */
+- (void)noticeNoMoreData;
+/** ResetNoMoreData锛圕lear the status of NoMoreData 锛� */
+- (void)resetNoMoreData;
+
+/** Ignored scrollView contentInset bottom */
+@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
+
+/** Automaticlly show or hidden by the count of data锛圫how-have data锛孒idden- no data锛� */
+@property (assign, nonatomic) BOOL automaticallyHidden;
+@end
+```
+
+## <a id="MJRefreshAutoFooter.h"></a>MJRefreshAutoFooter.h
+```objc
+@interface MJRefreshAutoFooter : MJRefreshFooter
+/** Is Automatically Refresh(Default is Yes) */
+@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
+
+/** When there is much at the bottom of the control is automatically refresh(Default is 1.0锛孖s at the bottom of the control appears in full, will refresh automatically) */
+@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshPercent;
+@end
+```
+
+## <a id="Reference"></a>Reference
+```objc
+* Due to there are more functions of this framework锛孌on't write specific text describe its usage
+* You can directly reference examples MJTableViewController銆丮JCollectionViewController銆丮JWebViewController锛孧ore intuitive and fast.
+```
+<img src="http://images0.cnblogs.com/blog2015/497279/201506/141345470048120.png" width="30%" height="30%">
+
+## <a id="The_drop-down_refresh_01-Default"></a>The drop-down refresh 01-Default
+
+```objc
+self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+   //Call this Block When enter the refresh status automatically 
+}];
+鎴�
+// Set the callback锛圤nce you enter the refresh status锛宼hen call the action of target锛宼hat is call [self loadNewData]锛�
+self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
+
+// Enter the refresh status immediately
+[self.tableView.header beginRefreshing];
+```
+![(涓嬫媺鍒锋柊01-鏅��)](http://images0.cnblogs.com/blog2015/497279/201506/141204343486151.gif)
+
+## <a id="The_drop-down_refresh_02-Animation_image"></a>The drop-down refresh 02-Animation image
+```objc
+// Set the callback锛堜竴Once you enter the refresh status锛宼hen call the action of target锛宼hat is call [self loadNewData]锛�
+MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
+// Set the ordinary state of animated images
+[header setImages:idleImages forState:MJRefreshStateIdle];
+// Set the pulling state of animated images锛圗nter the status of refreshing as soon as loosen锛�
+[header setImages:pullingImages forState:MJRefreshStatePulling];
+// Set the refreshing state of animated images
+[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
+// Set header
+self.tableView.mj_header = header;
+```
+![(涓嬫媺鍒锋柊02-鍔ㄧ敾鍥剧墖)](http://images0.cnblogs.com/blog2015/497279/201506/141204402238389.gif)
+
+## <a id="The_drop-down_refresh_03-Hide_the_time"></a>The drop-down refresh 03-Hide the time
+```objc
+// Hide the time
+header.lastUpdatedTimeLabel.hidden = YES;
+```
+![(涓嬫媺鍒锋柊03-闅愯棌鏃堕棿)](http://images0.cnblogs.com/blog2015/497279/201506/141204456132944.gif)
+
+## <a id="The_drop-down_refresh_04-Hide_status_and_time"></a>The drop-down refresh 04-Hide status and time
+```objc
+// Hide the time
+header.lastUpdatedTimeLabel.hidden = YES;
+
+// Hide the status
+header.stateLabel.hidden = YES;
+```
+![(涓嬫媺鍒锋柊04-闅愯棌鐘舵�佸拰鏃堕棿0)](http://images0.cnblogs.com/blog2015/497279/201506/141204508639539.gif)
+
+## <a id="The_drop-down_refresh_05-DIY_title"></a>The drop-down refresh 05-DIY title
+```objc
+// Set title
+[header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];
+[header setTitle:@"Release to refresh" forState:MJRefreshStatePulling];
+[header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing];
+
+// Set font
+header.stateLabel.font = [UIFont systemFontOfSize:15];
+header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];
+
+// Set textColor
+header.stateLabel.textColor = [UIColor redColor];
+header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
+```
+![(涓嬫媺鍒锋柊05-鑷畾涔夋枃瀛�)](http://images0.cnblogs.com/blog2015/497279/201506/141204563633593.gif)
+
+## <a id="The_drop-down_refresh_06-DIY_the_control_of_refresh"></a>The drop-down refresh 06-DIY the control of refresh
+```objc
+self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
+// Implementation reference to MJDIYHeader.h鍜孧JDIYHeader.m
+```
+![(涓嬫媺鍒锋柊06-鑷畾涔夊埛鏂版帶浠�)](http://images0.cnblogs.com/blog2015/497279/201506/141205019261159.gif)
+
+## <a id="The_pull_to_refresh_01-Default"></a>The pull to refresh 01-Default
+```objc
+self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
+    //Call this Block When enter the refresh status automatically
+}];
+鎴�
+// Set the callback锛圤nce you enter the refresh status锛宼hen call the action of target锛宼hat is call [self loadMoreData]锛�
+self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+```
+![(涓婃媺鍒锋柊01-榛樿)](http://images0.cnblogs.com/blog2015/497279/201506/141205090047696.gif)
+
+## <a id="The_pull_to_refresh_02-Animation_image"></a>The pull to refresh 02-Animation image
+```objc
+// Set the callback锛圤nce you enter the refresh status锛宼hen call the action of target锛宼hat is call [self loadMoreData]锛�
+MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+
+// Set the refresh image
+[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
+
+// Set footer
+self.tableView.mj_footer = footer;
+```
+![(涓婃媺鍒锋柊02-鍔ㄧ敾鍥剧墖)](http://images0.cnblogs.com/blog2015/497279/201506/141205141445793.gif)
+
+## <a id="The_pull_to_refresh_03-Hide_the_title_of_refresh_status"></a>The pull to refresh 03-Hide the title of refresh status
+```objc
+// Hide the title of refresh status
+footer.refreshingTitleHidden = YES;
+// If does have not above method锛宼hen use footer.stateLabel.hidden = YES;
+```
+![(涓婃媺鍒锋柊03-闅愯棌鍒锋柊鐘舵�佺殑鏂囧瓧)](http://images0.cnblogs.com/blog2015/497279/201506/141205200985774.gif)
+
+## <a id="The_pull_to_refresh_04-All_loaded"></a>The pull to refresh 04-All loaded
+```objc
+//Become the status of NoMoreData
+[footer noticeNoMoreData];
+```
+![(涓婃媺鍒锋柊04-鍏ㄩ儴鍔犺浇瀹屾瘯)](http://images0.cnblogs.com/blog2015/497279/201506/141205248634686.gif)
+
+## <a id="The_pull_to_refresh_05-DIY_title"></a>The pull to refresh 05-DIY title
+```objc
+// Set title
+[footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle];
+[footer setTitle:@"Loading more ..." forState:MJRefreshStateRefreshing];
+[footer setTitle:@"No more data" forState:MJRefreshStateNoMoreData];
+
+// Set font
+footer.stateLabel.font = [UIFont systemFontOfSize:17];
+
+// Set textColor
+footer.stateLabel.textColor = [UIColor blueColor];
+```
+![(涓婃媺鍒锋柊05-鑷畾涔夋枃瀛�)](http://images0.cnblogs.com/blog2015/497279/201506/141205295511153.gif)
+
+## <a id="The_pull_to_refresh_06-Hidden_After_loaded"></a>The pull to refresh 06-Hidden After loaded
+```objc
+//Hidden current control of the pull to refresh
+self.tableView.mj_footer.hidden = YES;
+```
+![(涓婃媺鍒锋柊06-鍔犺浇鍚庨殣钘�)](http://images0.cnblogs.com/blog2015/497279/201506/141205343481821.gif)
+
+## <a id="The_pull_to_refresh_07-Automatic_back_of_the_pull01"></a>The pull to refresh 07-Automatic back of the pull01
+```objc
+self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+```
+![(涓婃媺鍒锋柊07-鑷姩鍥炲脊鐨勪笂鎷�01)](http://images0.cnblogs.com/blog2015/497279/201506/141205392239231.gif)
+
+## <a id="The_pull_to_refresh_08-Automatic_back_of_the_pull02"></a>The pull to refresh 08-Automatic back of the pull02
+```objc
+MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+
+// Set the normal state of the animated image
+[footer setImages:idleImages forState:MJRefreshStateIdle];
+//  Set the pulling state of animated images锛圗nter the status of refreshing as soon as loosen锛�
+[footer setImages:pullingImages forState:MJRefreshStatePulling];
+// Set the refreshing state of animated images
+[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
+
+// Set footer
+self.tableView.mj_footer = footer;
+```
+![(涓婃媺鍒锋柊07-鑷姩鍥炲脊鐨勪笂鎷�02)](http://images0.cnblogs.com/blog2015/497279/201506/141205441443628.gif)
+
+## <a id="The_pull_to_refresh_09-DIY_the_control_of_refresh(Automatic_refresh)"></a>The pull to refresh 09-DIY the control of refresh(Automatic refresh)
+```objc
+self.tableView.mj_footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+// Implementation reference to MJDIYAutoFooter.h鍜孧JDIYAutoFooter.m
+```
+![(涓婃媺鍒锋柊09-鑷畾涔夊埛鏂版帶浠�(鑷姩鍒锋柊))](http://images0.cnblogs.com/blog2015/497279/201506/141205500195866.gif)
+
+## <a id="The_pull_to_refresh_10-DIY_the_control_of_refresh(Automatic_back)"></a>The pull to refresh 10-DIY the control of refresh(Automatic back)
+```objc
+self.tableView.mj_footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
+// Implementation reference to MJDIYBackFooter.h鍜孧JDIYBackFooter.m
+```
+![(涓婃媺鍒锋柊10-鑷畾涔夊埛鏂版帶浠�(鑷姩鍥炲脊))](http://images0.cnblogs.com/blog2015/497279/201506/141205560666819.gif)
+
+## <a id="UICollectionView01-The_pull_and_drop-down_refresh"></a>UICollectionView01-The pull and drop-down refresh
+```objc
+// The drop-down refresh
+self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+   //Call this Block When enter the refresh status automatically 
+}];
+
+// The pull to refresh
+self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
+   //Call this Block When enter the refresh status automatically
+}];
+```
+![(UICollectionView01-涓婁笅鎷夊埛鏂�)](http://images0.cnblogs.com/blog2015/497279/201506/141206021603758.gif)
+
+## <a id="UIWebView01-The_drop-down_refresh"></a>UIWebView01-The drop-down refresh
+```objc
+//Add the control of The drop-down refresh
+self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
+   //Call this Block When enter the refresh status automatically
+}];
+```
+![(UICollectionView01-涓婁笅鎷夊埛鏂�)](http://images0.cnblogs.com/blog2015/497279/201506/141206080514524.gif)
+
+## Remind
+* ARC
+* iOS>=6.0
+* iPhone \ iPad screen anyway
+
+## <a id="Hope"></a>Hope
+* If you find bug when used锛孒ope you can Issues me锛孴hank you or try to download the latest code of this framework to see the BUG has been fixed or not锛�
+* If you find the function is not enough when used锛孒ope you can Issues me锛孖 very much to add more useful function to this framework 锛孴hank you !
+* If you want to contribute code for MJRefresh锛宲lease Pull Requests me
+*  If you use MJRefresh in your develop app锛孒ope you can go to[CocoaControls](https://www.cocoacontrols.com/controls/mjrefresh)to add the iTunes path
+ of you app锛孖 Will install your app锛宎nd according to the usage of many app锛宼o be a better design and improve to MJRefresh锛孴hank you !
+   * StepO1锛圵eChat is just an Example锛孍xplore鈥淵our app name itunes鈥濓級
+![(step01)](http://ww4.sinaimg.cn/mw1024/800cdf9ctw1eq0viiv5rsj20sm0ea41t.jpg)
+   * StepO2
+![(step02)](http://ww2.sinaimg.cn/mw1024/800cdf9ctw1eq0vilejxlj20tu0me7a0.jpg)
+   * StepO3
+![(step03)](http://ww1.sinaimg.cn/mw1024/800cdf9ctw1eq0viocpo5j20wc0dc0un.jpg)
+   * StepO4
+![(step04)](http://ww3.sinaimg.cn/mw1024/800cdf9ctw1eq0vir137xj20si0gewgu.jpg)
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJExtension.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJExtension.h
deleted file mode 100644
index 734110f..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJExtension.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-//  UIScrollView+Extension.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 14-5-28.
-//  Copyright (c) 2014骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import <UIKit/UIKit.h>
-
-@interface UIScrollView (MJExtension)
-@property (assign, nonatomic) CGFloat mj_insetT;
-@property (assign, nonatomic) CGFloat mj_insetB;
-@property (assign, nonatomic) CGFloat mj_insetL;
-@property (assign, nonatomic) CGFloat mj_insetR;
-
-@property (assign, nonatomic) CGFloat mj_offsetX;
-@property (assign, nonatomic) CGFloat mj_offsetY;
-
-@property (assign, nonatomic) CGFloat mj_contentW;
-@property (assign, nonatomic) CGFloat mj_contentH;
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJExtension.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJExtension.m
deleted file mode 100644
index 6a13f5f..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJExtension.m
+++ /dev/null
@@ -1,110 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-//  UIScrollView+Extension.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 14-5-28.
-//  Copyright (c) 2014骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "UIScrollView+MJExtension.h"
-#import <objc/runtime.h>
-
-@implementation UIScrollView (MJExtension)
-
-- (void)setMj_insetT:(CGFloat)mj_insetT
-{
-    UIEdgeInsets inset = self.contentInset;
-    inset.top = mj_insetT;
-    self.contentInset = inset;
-}
-
-- (CGFloat)mj_insetT
-{
-    return self.contentInset.top;
-}
-
-- (void)setMj_insetB:(CGFloat)mj_insetB
-{
-    UIEdgeInsets inset = self.contentInset;
-    inset.bottom = mj_insetB;
-    self.contentInset = inset;
-}
-
-- (CGFloat)mj_insetB
-{
-    return self.contentInset.bottom;
-}
-
-- (void)setMj_insetL:(CGFloat)mj_insetL
-{
-    UIEdgeInsets inset = self.contentInset;
-    inset.left = mj_insetL;
-    self.contentInset = inset;
-}
-
-- (CGFloat)mj_insetL
-{
-    return self.contentInset.left;
-}
-
-- (void)setMj_insetR:(CGFloat)mj_insetR
-{
-    UIEdgeInsets inset = self.contentInset;
-    inset.right = mj_insetR;
-    self.contentInset = inset;
-}
-
-- (CGFloat)mj_insetR
-{
-    return self.contentInset.right;
-}
-
-- (void)setMj_offsetX:(CGFloat)mj_offsetX
-{
-    CGPoint offset = self.contentOffset;
-    offset.x = mj_offsetX;
-    self.contentOffset = offset;
-}
-
-- (CGFloat)mj_offsetX
-{
-    return self.contentOffset.x;
-}
-
-- (void)setMj_offsetY:(CGFloat)mj_offsetY
-{
-    CGPoint offset = self.contentOffset;
-    offset.y = mj_offsetY;
-    self.contentOffset = offset;
-}
-
-- (CGFloat)mj_offsetY
-{
-    return self.contentOffset.y;
-}
-
-- (void)setMj_contentW:(CGFloat)mj_contentW
-{
-    CGSize size = self.contentSize;
-    size.width = mj_contentW;
-    self.contentSize = size;
-}
-
-- (CGFloat)mj_contentW
-{
-    return self.contentSize.width;
-}
-
-- (void)setMj_contentH:(CGFloat)mj_contentH
-{
-    CGSize size = self.contentSize;
-    size.height = mj_contentH;
-    self.contentSize = size;
-}
-
-- (CGFloat)mj_contentH
-{
-    return self.contentSize.height;
-}
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJRefresh.h b/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJRefresh.h
deleted file mode 100644
index 9f6dc53..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJRefresh.h
+++ /dev/null
@@ -1,23 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-//  UIScrollView+MJRefresh.h
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/3/4.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//  缁橲crollView澧炲姞涓嬫媺鍒锋柊銆佷笂鎷夊埛鏂扮殑鍔熻兘
-
-#import <UIKit/UIKit.h>
-
-@class MJRefreshHeader, MJRefreshFooter;
-
-@interface UIScrollView (MJRefresh)
-/** 涓嬫媺鍒锋柊鎺т欢 */
-@property (strong, nonatomic) MJRefreshHeader *header;
-/** 涓婃媺鍒锋柊鎺т欢 */
-@property (strong, nonatomic) MJRefreshFooter *footer;
-
-#pragma mark - other
-- (NSInteger)totalDataCount;
-@property (copy, nonatomic) void (^reloadDataBlock)(NSInteger totalDataCount);
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJRefresh.m b/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJRefresh.m
deleted file mode 100644
index b87a88c..0000000
--- a/EZSDK/EZSDK/EZ/Venders/MJRefresh/UIScrollView+MJRefresh.m
+++ /dev/null
@@ -1,142 +0,0 @@
-//  浠g爜鍦板潃: https://github.com/CoderMJLee/MJRefresh
-//  浠g爜鍦板潃: http://code4app.com/ios/%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E4%B8%8B%E6%8B%89%E4%B8%8A%E6%8B%89%E5%88%B7%E6%96%B0/52326ce26803fabc46000000
-//  UIScrollView+MJRefresh.m
-//  MJRefreshExample
-//
-//  Created by MJ Lee on 15/3/4.
-//  Copyright (c) 2015骞� 灏忕爜鍝�. All rights reserved.
-//
-
-#import "UIScrollView+MJRefresh.h"
-#import "MJRefreshHeader.h"
-#import "MJRefreshFooter.h"
-#import <objc/runtime.h>
-
-@implementation NSObject (MJRefresh)
-
-+ (void)exchangeInstanceMethod1:(SEL)method1 method2:(SEL)method2
-{
-    method_exchangeImplementations(class_getInstanceMethod(self, method1), class_getInstanceMethod(self, method2));
-}
-
-+ (void)exchangeClassMethod1:(SEL)method1 method2:(SEL)method2
-{
-    method_exchangeImplementations(class_getClassMethod(self, method1), class_getClassMethod(self, method2));
-}
-
-@end
-
-@implementation UIScrollView (MJRefresh)
-
-#pragma mark - header
-static const char MJRefreshHeaderKey = '\0';
-- (void)setHeader:(MJRefreshHeader *)header
-{
-    if (header != self.header) {
-        // 鍒犻櫎鏃х殑锛屾坊鍔犳柊鐨�
-        [self.header removeFromSuperview];
-        [self addSubview:header];
-        
-        // 瀛樺偍鏂扮殑
-        [self willChangeValueForKey:@"header"]; // KVO
-        objc_setAssociatedObject(self, &MJRefreshHeaderKey,
-                                 header, OBJC_ASSOCIATION_ASSIGN);
-        [self didChangeValueForKey:@"header"]; // KVO
-    }
-}
-
-- (MJRefreshHeader *)header
-{
-    return objc_getAssociatedObject(self, &MJRefreshHeaderKey);
-}
-
-#pragma mark - footer
-static const char MJRefreshFooterKey = '\0';
-- (void)setFooter:(MJRefreshFooter *)footer
-{
-    if (footer != self.footer) {
-        // 鍒犻櫎鏃х殑锛屾坊鍔犳柊鐨�
-        [self.footer removeFromSuperview];
-        [self addSubview:footer];
-        
-        // 瀛樺偍鏂扮殑
-        [self willChangeValueForKey:@"footer"]; // KVO
-        objc_setAssociatedObject(self, &MJRefreshFooterKey,
-                                 footer, OBJC_ASSOCIATION_ASSIGN);
-        [self didChangeValueForKey:@"footer"]; // KVO
-    }
-}
-
-- (MJRefreshFooter *)footer
-{
-    return objc_getAssociatedObject(self, &MJRefreshFooterKey);
-}
-
-#pragma mark - other
-- (NSInteger)totalDataCount
-{
-    NSInteger totalCount = 0;
-    if ([self isKindOfClass:[UITableView class]]) {
-        UITableView *tableView = (UITableView *)self;
-        
-        for (NSInteger section = 0; section<tableView.numberOfSections; section++) {
-            totalCount += [tableView numberOfRowsInSection:section];
-        }
-    } else if ([self isKindOfClass:[UICollectionView class]]) {
-        UICollectionView *collectionView = (UICollectionView *)self;
-        
-        for (NSInteger section = 0; section<collectionView.numberOfSections; section++) {
-            totalCount += [collectionView numberOfItemsInSection:section];
-        }
-    }
-    return totalCount;
-}
-
-static const char MJRefreshReloadDataBlockKey = '\0';
-- (void)setReloadDataBlock:(void (^)(NSInteger))reloadDataBlock
-{
-    [self willChangeValueForKey:@"reloadDataBlock"]; // KVO
-    objc_setAssociatedObject(self, &MJRefreshReloadDataBlockKey, reloadDataBlock, OBJC_ASSOCIATION_COPY_NONATOMIC);
-    [self didChangeValueForKey:@"reloadDataBlock"]; // KVO
-}
-
-- (void (^)(NSInteger))reloadDataBlock
-{
-    return objc_getAssociatedObject(self, &MJRefreshReloadDataBlockKey);
-}
-
-- (void)executeReloadDataBlock
-{
-    !self.reloadDataBlock ? : self.reloadDataBlock(self.totalDataCount);
-}
-@end
-
-@implementation UITableView (MJRefresh)
-
-+ (void)load
-{
-    [self exchangeInstanceMethod1:@selector(reloadData) method2:@selector(mj_reloadData)];
-}
-
-- (void)mj_reloadData
-{
-    [self mj_reloadData];
-    
-    [self executeReloadDataBlock];
-}
-@end
-
-@implementation UICollectionView (MJRefresh)
-
-+ (void)load
-{
-    [self exchangeInstanceMethod1:@selector(reloadData) method2:@selector(mj_reloadData)];
-}
-
-- (void)mj_reloadData
-{
-    [self mj_reloadData];
-    
-    [self executeReloadDataBlock];
-}
-@end
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.h b/EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.h
old mode 100644
new mode 100755
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.m b/EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.m
old mode 100644
new mode 100755
index fd1e8c8..2002a40
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.m
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/MASCompositeConstraint.m
@@ -97,7 +97,7 @@
 
 #pragma mark - Animator proxy
 
-#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
 
 - (MASConstraint *)animator {
     for (MASConstraint *constraint in self.childConstraints) {
@@ -129,6 +129,12 @@
     }
 }
 
+- (void)setInset:(CGFloat)inset {
+    for (MASConstraint *constraint in self.childConstraints) {
+        constraint.inset = inset;
+    }
+}
+
 - (void)setOffset:(CGFloat)offset {
     for (MASConstraint *constraint in self.childConstraints) {
         constraint.offset = offset;
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint+Private.h b/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint+Private.h
old mode 100644
new mode 100755
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.h b/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.h
old mode 100644
new mode 100755
index a4b7a78..3eaa8a1
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.h
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.h
@@ -27,6 +27,13 @@
 /**
  *	Modifies the NSLayoutConstraint constant,
  *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
+ */
+- (MASConstraint * (^)(CGFloat inset))inset;
+
+/**
+ *	Modifies the NSLayoutConstraint constant,
+ *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
  *  NSLayoutAttributeWidth, NSLayoutAttributeHeight
  */
 - (MASConstraint * (^)(CGSize offset))sizeOffset;
@@ -66,17 +73,17 @@
 /**
  *	Sets the NSLayoutConstraint priority to MASLayoutPriorityLow
  */
-- (MASConstraint * (^)())priorityLow;
+- (MASConstraint * (^)(void))priorityLow;
 
 /**
  *	Sets the NSLayoutConstraint priority to MASLayoutPriorityMedium
  */
-- (MASConstraint * (^)())priorityMedium;
+- (MASConstraint * (^)(void))priorityMedium;
 
 /**
  *	Sets the NSLayoutConstraint priority to MASLayoutPriorityHigh
  */
-- (MASConstraint * (^)())priorityHigh;
+- (MASConstraint * (^)(void))priorityHigh;
 
 /**
  *	Sets the constraint relation to NSLayoutRelationEqual
@@ -127,7 +134,14 @@
 - (MASConstraint *)centerY;
 - (MASConstraint *)baseline;
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASConstraint *)firstBaseline;
+- (MASConstraint *)lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 - (MASConstraint *)leftMargin;
 - (MASConstraint *)rightMargin;
@@ -159,6 +173,13 @@
 /**
  *	Modifies the NSLayoutConstraint constant,
  *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
+ *  NSLayoutAttributeTop, NSLayoutAttributeLeft, NSLayoutAttributeBottom, NSLayoutAttributeRight
+ */
+- (void)setInset:(CGFloat)inset;
+
+/**
+ *	Modifies the NSLayoutConstraint constant,
+ *  only affects MASConstraints in which the first item's NSLayoutAttribute is one of the following
  *  NSLayoutAttributeWidth, NSLayoutAttributeHeight
  */
 - (void)setSizeOffset:(CGSize)sizeOffset;
@@ -178,7 +199,7 @@
 
 // NSLayoutConstraint Installation support
 
-#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
 /**
  *  Whether or not to go through the animator proxy when modifying the constraint
  */
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.m b/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.m
old mode 100644
new mode 100755
index 8497912..52de590
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.m
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraint.m
@@ -62,21 +62,21 @@
 
 #pragma mark - MASLayoutPriority proxies
 
-- (MASConstraint * (^)())priorityLow {
+- (MASConstraint * (^)(void))priorityLow {
     return ^id{
         self.priority(MASLayoutPriorityDefaultLow);
         return self;
     };
 }
 
-- (MASConstraint * (^)())priorityMedium {
+- (MASConstraint * (^)(void))priorityMedium {
     return ^id{
         self.priority(MASLayoutPriorityDefaultMedium);
         return self;
     };
 }
 
-- (MASConstraint * (^)())priorityHigh {
+- (MASConstraint * (^)(void))priorityHigh {
     return ^id{
         self.priority(MASLayoutPriorityDefaultHigh);
         return self;
@@ -88,6 +88,13 @@
 - (MASConstraint * (^)(MASEdgeInsets))insets {
     return ^id(MASEdgeInsets insets){
         self.insets = insets;
+        return self;
+    };
+}
+
+- (MASConstraint * (^)(CGFloat))inset {
+    return ^id(CGFloat inset){
+        self.inset = inset;
         return self;
     };
 }
@@ -208,7 +215,18 @@
     return [self addConstraintWithLayoutAttribute:NSLayoutAttributeBaseline];
 }
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASConstraint *)firstBaseline {
+    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
+}
+- (MASConstraint *)lastBaseline {
+    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
+}
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 - (MASConstraint *)leftMargin {
     return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
@@ -258,13 +276,15 @@
 
 - (void)setInsets:(MASEdgeInsets __unused)insets { MASMethodNotImplemented(); }
 
+- (void)setInset:(CGFloat __unused)inset { MASMethodNotImplemented(); }
+
 - (void)setSizeOffset:(CGSize __unused)sizeOffset { MASMethodNotImplemented(); }
 
 - (void)setCenterOffset:(CGPoint __unused)centerOffset { MASMethodNotImplemented(); }
 
 - (void)setOffset:(CGFloat __unused)offset { MASMethodNotImplemented(); }
 
-#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
 
 - (MASConstraint *)animator { MASMethodNotImplemented(); }
 
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.h b/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.h
old mode 100644
new mode 100755
index 7e31858..d9b58f4
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.h
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.h
@@ -1,5 +1,5 @@
 //
-//  MASConstraintBuilder.h
+//  MASConstraintMaker.h
 //  Masonry
 //
 //  Created by Jonas Budelmann on 20/07/13.
@@ -22,7 +22,14 @@
     MASAttributeCenterY = 1 << NSLayoutAttributeCenterY,
     MASAttributeBaseline = 1 << NSLayoutAttributeBaseline,
     
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+    
+    MASAttributeFirstBaseline = 1 << NSLayoutAttributeFirstBaseline,
+    MASAttributeLastBaseline = 1 << NSLayoutAttributeLastBaseline,
+    
+#endif
+    
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
     
     MASAttributeLeftMargin = 1 << NSLayoutAttributeLeftMargin,
     MASAttributeRightMargin = 1 << NSLayoutAttributeRightMargin,
@@ -60,7 +67,14 @@
 @property (nonatomic, strong, readonly) MASConstraint *centerY;
 @property (nonatomic, strong, readonly) MASConstraint *baseline;
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+@property (nonatomic, strong, readonly) MASConstraint *firstBaseline;
+@property (nonatomic, strong, readonly) MASConstraint *lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 @property (nonatomic, strong, readonly) MASConstraint *leftMargin;
 @property (nonatomic, strong, readonly) MASConstraint *rightMargin;
@@ -114,7 +128,7 @@
 /**
  *	initialises the maker with a default view
  *
- *	@param	view	any MASConstrait are created with this view as the first item
+ *	@param	view	any MASConstraint are created with this view as the first item
  *
  *	@return	a new MASConstraintMaker
  */
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.m b/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.m
old mode 100644
new mode 100755
index 78f93ec..f11492a
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.m
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/MASConstraintMaker.m
@@ -1,5 +1,5 @@
 //
-//  MASConstraintBuilder.m
+//  MASConstraintMaker.m
 //  Masonry
 //
 //  Created by Jonas Budelmann on 20/07/13.
@@ -78,7 +78,10 @@
     __unused MASAttribute anyAttribute = (MASAttributeLeft | MASAttributeRight | MASAttributeTop | MASAttributeBottom | MASAttributeLeading
                                           | MASAttributeTrailing | MASAttributeWidth | MASAttributeHeight | MASAttributeCenterX
                                           | MASAttributeCenterY | MASAttributeBaseline
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+                                          | MASAttributeFirstBaseline | MASAttributeLastBaseline
+#endif
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
                                           | MASAttributeLeftMargin | MASAttributeRightMargin | MASAttributeTopMargin | MASAttributeBottomMargin
                                           | MASAttributeLeadingMargin | MASAttributeTrailingMargin | MASAttributeCenterXWithinMargins
                                           | MASAttributeCenterYWithinMargins
@@ -101,7 +104,14 @@
     if (attrs & MASAttributeCenterY) [attributes addObject:self.view.mas_centerY];
     if (attrs & MASAttributeBaseline) [attributes addObject:self.view.mas_baseline];
     
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+    
+    if (attrs & MASAttributeFirstBaseline) [attributes addObject:self.view.mas_firstBaseline];
+    if (attrs & MASAttributeLastBaseline) [attributes addObject:self.view.mas_lastBaseline];
+    
+#endif
+    
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
     
     if (attrs & MASAttributeLeftMargin) [attributes addObject:self.view.mas_leftMargin];
     if (attrs & MASAttributeRightMargin) [attributes addObject:self.view.mas_rightMargin];
@@ -182,7 +192,20 @@
     };
 }
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASConstraint *)firstBaseline {
+    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeFirstBaseline];
+}
+
+- (MASConstraint *)lastBaseline {
+    return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLastBaseline];
+}
+
+#endif
+
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 - (MASConstraint *)leftMargin {
     return [self addConstraintWithLayoutAttribute:NSLayoutAttributeLeftMargin];
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASLayoutConstraint.h b/EZSDK/EZSDK/EZ/Venders/Masonry/MASLayoutConstraint.h
old mode 100644
new mode 100755
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASLayoutConstraint.m b/EZSDK/EZSDK/EZ/Venders/Masonry/MASLayoutConstraint.m
old mode 100644
new mode 100755
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASUtilities.h b/EZSDK/EZSDK/EZ/Venders/Masonry/MASUtilities.h
old mode 100644
new mode 100755
index 1b237b1..1dbfd93
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/MASUtilities.h
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/MASUtilities.h
@@ -8,7 +8,9 @@
 
 #import <Foundation/Foundation.h>
 
-#if TARGET_OS_IPHONE
+
+
+#if TARGET_OS_IPHONE || TARGET_OS_TV
 
     #import <UIKit/UIKit.h>
     #define MAS_VIEW UIView
@@ -49,13 +51,15 @@
  *
  *  MASAttachKeys(view1, view2);
  */
-#define MASAttachKeys(...)                                                    \
-    NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__);     \
-    for (id key in keyPairs.allKeys) {                                        \
-        id obj = keyPairs[key];                                               \
-        NSAssert([obj respondsToSelector:@selector(setMas_key:)],             \
-                 @"Cannot attach mas_key to %@", obj);                        \
-        [obj setMas_key:key];                                                 \
+#define MASAttachKeys(...)                                                        \
+    {                                                                             \
+        NSDictionary *keyPairs = NSDictionaryOfVariableBindings(__VA_ARGS__);     \
+        for (id key in keyPairs.allKeys) {                                        \
+            id obj = keyPairs[key];                                               \
+            NSAssert([obj respondsToSelector:@selector(setMas_key:)],             \
+                     @"Cannot attach mas_key to %@", obj);                        \
+            [obj setMas_key:key];                                                 \
+        }                                                                         \
     }
 
 /**
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.h b/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.h
old mode 100644
new mode 100755
index f8eb700..601c25d
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.h
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.h
@@ -1,5 +1,5 @@
 //
-//  MASAttribute.h
+//  MASViewAttribute.h
 //  Masonry
 //
 //  Created by Jonas Budelmann on 21/07/13.
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.m b/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.m
old mode 100644
new mode 100755
index 7131025..e573e8b
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.m
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewAttribute.m
@@ -1,5 +1,5 @@
 //
-//  MASAttribute.m
+//  MASViewAttribute.m
 //  Masonry
 //
 //  Created by Jonas Budelmann on 21/07/13.
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.h b/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.h
old mode 100644
new mode 100755
index 5c78f7a..ec390d1
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.h
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.h
@@ -1,5 +1,5 @@
 //
-//  MASConstraint.h
+//  MASViewConstraint.h
 //  Masonry
 //
 //  Created by Jonas Budelmann on 20/07/13.
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.m b/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.m
old mode 100644
new mode 100755
index b0f3650..173eec1
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.m
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/MASViewConstraint.m
@@ -1,5 +1,5 @@
 //
-//  MASConstraint.m
+//  MASViewConstraint.m
 //  Masonry
 //
 //  Created by Jonas Budelmann on 20/07/13.
@@ -86,7 +86,7 @@
 - (void)setLayoutConstant:(CGFloat)layoutConstant {
     _layoutConstant = layoutConstant;
 
-#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
     if (self.useAnimator) {
         [self.layoutConstraint.animator setConstant:layoutConstant];
     } else {
@@ -175,6 +175,7 @@
             NSMutableArray *children = NSMutableArray.new;
             for (id attr in attribute) {
                 MASViewConstraint *viewConstraint = [self copy];
+                viewConstraint.layoutRelation = relation;
                 viewConstraint.secondViewAttribute = attr;
                 [children addObject:viewConstraint];
             }
@@ -211,7 +212,7 @@
 
 #pragma mark - Animator proxy
 
-#if TARGET_OS_MAC && !TARGET_OS_IPHONE
+#if TARGET_OS_MAC && !(TARGET_OS_IPHONE || TARGET_OS_TV)
 
 - (MASConstraint *)animator {
     self.useAnimator = YES;
@@ -253,6 +254,10 @@
     }
 }
 
+- (void)setInset:(CGFloat)inset {
+    [self setInsets:(MASEdgeInsets){.top = inset, .left = inset, .bottom = inset, .right = inset}];
+}
+
 - (void)setOffset:(CGFloat)offset {
     self.layoutConstant = offset;
 }
@@ -288,28 +293,21 @@
 #pragma mark - MASConstraint
 
 - (void)activate {
-    if ([self supportsActiveProperty] && self.layoutConstraint) {
-        if (self.hasBeenInstalled) {
-            return;
-        }
-        self.layoutConstraint.active = YES;
-        [self.firstViewAttribute.view.mas_installedConstraints addObject:self];
-    } else {
-        [self install];
-    }
+    [self install];
 }
 
 - (void)deactivate {
-    if ([self supportsActiveProperty]) {
-        self.layoutConstraint.active = NO;
-        [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
-    } else {
-        [self uninstall];
-    }
+    [self uninstall];
 }
 
 - (void)install {
     if (self.hasBeenInstalled) {
+        return;
+    }
+    
+    if ([self supportsActiveProperty] && self.layoutConstraint) {
+        self.layoutConstraint.active = YES;
+        [self.firstViewAttribute.view.mas_installedConstraints addObject:self];
         return;
     }
     
@@ -387,6 +385,12 @@
 }
 
 - (void)uninstall {
+    if ([self supportsActiveProperty]) {
+        self.layoutConstraint.active = NO;
+        [self.firstViewAttribute.view.mas_installedConstraints removeObject:self];
+        return;
+    }
+    
     [self.installedView removeConstraint:self.layoutConstraint];
     self.layoutConstraint = nil;
     self.installedView = nil;
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/Masonry.h b/EZSDK/EZSDK/EZ/Venders/Masonry/Masonry.h
old mode 100644
new mode 100755
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.h b/EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.h
old mode 100644
new mode 100755
index 83be23d..587618d
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.h
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.h
@@ -25,7 +25,7 @@
  *
  *  @return Array of created MASConstraints
  */
-- (NSArray *)mas_makeConstraints:(void (^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_makeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 /**
  *  Creates a MASConstraintMaker with each view in the callee.
@@ -36,7 +36,7 @@
  *
  *  @return Array of created/updated MASConstraints
  */
-- (NSArray *)mas_updateConstraints:(void (^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_updateConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 /**
  *  Creates a MASConstraintMaker with each view in the callee.
@@ -47,7 +47,7 @@
  *
  *  @return Array of created/updated MASConstraints
  */
-- (NSArray *)mas_remakeConstraints:(void (^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_remakeConstraints:(void (NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 /**
  *  distribute with fixed spacing
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.m b/EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.m
old mode 100644
new mode 100755
index 2988683..831d8cd
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.m
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASAdditions.m
@@ -48,12 +48,12 @@
     if (axisType == MASAxisTypeHorizontal) {
         MAS_VIEW *prev;
         for (int i = 0; i < self.count; i++) {
-            MAS_VIEW *v = [self objectAtIndex:i];
+            MAS_VIEW *v = self[i];
             [v mas_makeConstraints:^(MASConstraintMaker *make) {
                 if (prev) {
                     make.width.equalTo(prev);
                     make.left.equalTo(prev.mas_right).offset(fixedSpacing);
-                    if (i == (CGFloat)self.count - 1) {//last one
+                    if (i == self.count - 1) {//last one
                         make.right.equalTo(tempSuperView).offset(-tailSpacing);
                     }
                 }
@@ -68,12 +68,12 @@
     else {
         MAS_VIEW *prev;
         for (int i = 0; i < self.count; i++) {
-            MAS_VIEW *v = [self objectAtIndex:i];
+            MAS_VIEW *v = self[i];
             [v mas_makeConstraints:^(MASConstraintMaker *make) {
                 if (prev) {
                     make.height.equalTo(prev);
                     make.top.equalTo(prev.mas_bottom).offset(fixedSpacing);
-                    if (i == (CGFloat)self.count - 1) {//last one
+                    if (i == self.count - 1) {//last one
                         make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                     }                    
                 }
@@ -97,21 +97,20 @@
     if (axisType == MASAxisTypeHorizontal) {
         MAS_VIEW *prev;
         for (int i = 0; i < self.count; i++) {
-            MAS_VIEW *v = [self objectAtIndex:i];
+            MAS_VIEW *v = self[i];
             [v mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.width.equalTo(@(fixedItemLength));
                 if (prev) {
-                    CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
-                    make.width.equalTo(@(fixedItemLength));
-                    if (i == (CGFloat)self.count - 1) {//last one
+                    if (i == self.count - 1) {//last one
                         make.right.equalTo(tempSuperView).offset(-tailSpacing);
                     }
                     else {
+                        CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                         make.right.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
                     }
                 }
                 else {//first one
                     make.left.equalTo(tempSuperView).offset(leadSpacing);
-                    make.width.equalTo(@(fixedItemLength));
                 }
             }];
             prev = v;
@@ -120,21 +119,20 @@
     else {
         MAS_VIEW *prev;
         for (int i = 0; i < self.count; i++) {
-            MAS_VIEW *v = [self objectAtIndex:i];
+            MAS_VIEW *v = self[i];
             [v mas_makeConstraints:^(MASConstraintMaker *make) {
+                make.height.equalTo(@(fixedItemLength));
                 if (prev) {
-                    CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
-                    make.height.equalTo(@(fixedItemLength));
-                    if (i == (CGFloat)self.count - 1) {//last one
+                    if (i == self.count - 1) {//last one
                         make.bottom.equalTo(tempSuperView).offset(-tailSpacing);
                     }
                     else {
+                        CGFloat offset = (1-(i/((CGFloat)self.count-1)))*(fixedItemLength+leadSpacing)-i*tailSpacing/(((CGFloat)self.count-1));
                         make.bottom.equalTo(tempSuperView).multipliedBy(i/((CGFloat)self.count-1)).with.offset(offset);
                     }
                 }
                 else {//first one
                     make.top.equalTo(tempSuperView).offset(leadSpacing);
-                    make.height.equalTo(@(fixedItemLength));
                 }
             }];
             prev = v;
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASShorthandAdditions.h b/EZSDK/EZSDK/EZ/Venders/Masonry/NSArray+MASShorthandAdditions.h
old mode 100644
new mode 100755
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.h b/EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.h
old mode 100644
new mode 100755
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m b/EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m
old mode 100644
new mode 100755
index 3d10ac2..ab539a2
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/NSLayoutConstraint+MASDebugAdditions.m
@@ -44,7 +44,12 @@
             @(NSLayoutAttributeCenterY)  : @"centerY",
             @(NSLayoutAttributeBaseline) : @"baseline",
             
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+            @(NSLayoutAttributeFirstBaseline) : @"firstBaseline",
+            @(NSLayoutAttributeLastBaseline) : @"lastBaseline",
+#endif
+            
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
             @(NSLayoutAttributeLeftMargin)           : @"leftMargin",
             @(NSLayoutAttributeRightMargin)          : @"rightMargin",
             @(NSLayoutAttributeTopMargin)            : @"topMargin",
@@ -66,7 +71,7 @@
     static dispatch_once_t once;
     static NSDictionary *descriptionMap;
     dispatch_once(&once, ^{
-#if TARGET_OS_IPHONE
+#if TARGET_OS_IPHONE || TARGET_OS_TV
         descriptionMap = @{
             @(MASLayoutPriorityDefaultHigh)      : @"high",
             @(MASLayoutPriorityDefaultLow)       : @"low",
@@ -106,16 +111,16 @@
 
     [description appendFormat:@" %@", [self.class descriptionForObject:self.firstItem]];
     if (self.firstAttribute != NSLayoutAttributeNotAnAttribute) {
-        [description appendFormat:@".%@", [self.class.layoutAttributeDescriptionsByValue objectForKey:@(self.firstAttribute)]];
+        [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.firstAttribute)]];
     }
 
-    [description appendFormat:@" %@", [self.class.layoutRelationDescriptionsByValue objectForKey:@(self.relation)]];
+    [description appendFormat:@" %@", self.class.layoutRelationDescriptionsByValue[@(self.relation)]];
 
     if (self.secondItem) {
         [description appendFormat:@" %@", [self.class descriptionForObject:self.secondItem]];
     }
     if (self.secondAttribute != NSLayoutAttributeNotAnAttribute) {
-        [description appendFormat:@".%@", [self.class.layoutAttributeDescriptionsByValue objectForKey:@(self.secondAttribute)]];
+        [description appendFormat:@".%@", self.class.layoutAttributeDescriptionsByValue[@(self.secondAttribute)]];
     }
     
     if (self.multiplier != 1) {
@@ -131,7 +136,7 @@
     }
 
     if (self.priority != MASLayoutPriorityRequired) {
-        [description appendFormat:@" ^%@", [self.class.layoutPriorityDescriptionsByValue objectForKey:@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
+        [description appendFormat:@" ^%@", self.class.layoutPriorityDescriptionsByValue[@(self.priority)] ?: [NSNumber numberWithDouble:self.priority]];
     }
 
     [description appendString:@">"];
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.h b/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.h
old mode 100644
new mode 100755
index 94e3050..f7343d2
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.h
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.h
@@ -32,7 +32,14 @@
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_baseline;
 @property (nonatomic, strong, readonly) MASViewAttribute *(^mas_attribute)(NSLayoutAttribute attr);
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_firstBaseline;
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_leftMargin;
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_rightMargin;
@@ -42,6 +49,16 @@
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_trailingMargin;
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_centerXWithinMargins;
 @property (nonatomic, strong, readonly) MASViewAttribute *mas_centerYWithinMargins;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuide API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *mas_safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0));
 
 #endif
 
@@ -67,7 +84,7 @@
  *
  *  @return Array of created MASConstraints
  */
-- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 /**
  *  Creates a MASConstraintMaker with the callee view.
@@ -78,7 +95,7 @@
  *
  *  @return Array of created/updated MASConstraints
  */
-- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 /**
  *  Creates a MASConstraintMaker with the callee view.
@@ -89,6 +106,6 @@
  *
  *  @return Array of created/updated MASConstraints
  */
-- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;
+- (NSArray *)mas_remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
 
 @end
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.m b/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.m
old mode 100644
new mode 100755
index acfaa52..4fa07b4
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.m
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASAdditions.m
@@ -87,7 +87,18 @@
     };
 }
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+- (MASViewAttribute *)mas_firstBaseline {
+    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeFirstBaseline];
+}
+- (MASViewAttribute *)mas_lastBaseline {
+    return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLastBaseline];
+}
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 - (MASViewAttribute *)mas_leftMargin {
     return [[MASViewAttribute alloc] initWithView:self layoutAttribute:NSLayoutAttributeLeftMargin];
@@ -123,6 +134,26 @@
 
 #endif
 
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+- (MASViewAttribute *)mas_safeAreaLayoutGuide {
+    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideTop {
+    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeTop];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideBottom {
+    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeBottom];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideLeft {
+    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeLeft];
+}
+- (MASViewAttribute *)mas_safeAreaLayoutGuideRight {
+    return [[MASViewAttribute alloc] initWithView:self item:self.safeAreaLayoutGuide layoutAttribute:NSLayoutAttributeRight];
+}
+
+#endif
+
 #pragma mark - associated properties
 
 - (id)mas_key {
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASShorthandAdditions.h b/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASShorthandAdditions.h
old mode 100644
new mode 100755
index 5553912..1c19a94
--- a/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASShorthandAdditions.h
+++ b/EZSDK/EZSDK/EZ/Venders/Masonry/View+MASShorthandAdditions.h
@@ -29,7 +29,14 @@
 @property (nonatomic, strong, readonly) MASViewAttribute *baseline;
 @property (nonatomic, strong, readonly) MASViewAttribute *(^attribute)(NSLayoutAttribute attr);
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *firstBaseline;
+@property (nonatomic, strong, readonly) MASViewAttribute *lastBaseline;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 @property (nonatomic, strong, readonly) MASViewAttribute *leftMargin;
 @property (nonatomic, strong, readonly) MASViewAttribute *rightMargin;
@@ -39,6 +46,15 @@
 @property (nonatomic, strong, readonly) MASViewAttribute *trailingMargin;
 @property (nonatomic, strong, readonly) MASViewAttribute *centerXWithinMargins;
 @property (nonatomic, strong, readonly) MASViewAttribute *centerYWithinMargins;
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideTop API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideBottom API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideLeft API_AVAILABLE(ios(11.0),tvos(11.0));
+@property (nonatomic, strong, readonly) MASViewAttribute *safeAreaLayoutGuideRight API_AVAILABLE(ios(11.0),tvos(11.0));
 
 #endif
 
@@ -67,7 +83,14 @@
 MAS_ATTR_FORWARD(centerY);
 MAS_ATTR_FORWARD(baseline);
 
-#if TARGET_OS_IPHONE
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000) || (__MAC_OS_X_VERSION_MIN_REQUIRED >= 101100)
+
+MAS_ATTR_FORWARD(firstBaseline);
+MAS_ATTR_FORWARD(lastBaseline);
+
+#endif
+
+#if (__IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) || (__TV_OS_VERSION_MIN_REQUIRED >= 9000)
 
 MAS_ATTR_FORWARD(leftMargin);
 MAS_ATTR_FORWARD(rightMargin);
@@ -80,19 +103,28 @@
 
 #endif
 
+#if (__IPHONE_OS_VERSION_MAX_ALLOWED >= 110000) || (__TV_OS_VERSION_MAX_ALLOWED >= 110000)
+
+MAS_ATTR_FORWARD(safeAreaLayoutGuideTop);
+MAS_ATTR_FORWARD(safeAreaLayoutGuideBottom);
+MAS_ATTR_FORWARD(safeAreaLayoutGuideLeft);
+MAS_ATTR_FORWARD(safeAreaLayoutGuideRight);
+
+#endif
+
 - (MASViewAttribute *(^)(NSLayoutAttribute))attribute {
     return [self mas_attribute];
 }
 
-- (NSArray *)makeConstraints:(void(^)(MASConstraintMaker *))block {
+- (NSArray *)makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
     return [self mas_makeConstraints:block];
 }
 
-- (NSArray *)updateConstraints:(void(^)(MASConstraintMaker *))block {
+- (NSArray *)updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
     return [self mas_updateConstraints:block];
 }
 
-- (NSArray *)remakeConstraints:(void(^)(MASConstraintMaker *))block {
+- (NSArray *)remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *))block {
     return [self mas_remakeConstraints:block];
 }
 
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/ViewController+MASAdditions.h b/EZSDK/EZSDK/EZ/Venders/Masonry/ViewController+MASAdditions.h
old mode 100644
new mode 100755
diff --git a/EZSDK/EZSDK/EZ/Venders/Masonry/ViewController+MASAdditions.m b/EZSDK/EZSDK/EZ/Venders/Masonry/ViewController+MASAdditions.m
old mode 100644
new mode 100755
diff --git a/EZSDK/EZSDK/EZSDK.h b/EZSDK/EZSDK/EZSDK.h
index 43a269c..822308f 100644
--- a/EZSDK/EZSDK/EZSDK.h
+++ b/EZSDK/EZSDK/EZSDK.h
@@ -13,19 +13,33 @@
  浼犲叆鍥藉唴鐗坘ey 鍜屾捣澶栫増globalAppKey
  */
 + (BOOL)initLibWithAppKey:(NSString *)appKey globalAppKey:(NSString *)globalAppKey;
-
 /**
- 鍥炴斁鎾斁鍘嗗彶
+ 璁剧疆SDK鐨刟ccessToken
  */
-+(void)playBackVideo:(NSObject*)deviceInfo;
-/**
- 鎾斁瑙嗛
- */
-+(void)Play:(NSObject*)deviceInfo;
-
++(void)setEZAccessToken:(NSString *) accessToken;
 /**
  鐩存帴璺宠浆鍒拌悿鐭虫憚鍍忓ご鍒楄〃
  */
 +(void)go2EZvizMonitor;
+/**
+ 璺宠浆娣诲姞娣诲姞璁惧
+ */
++(void)addEzvizMonitor;
+/**
+ 鏌ョ湅瑙嗛鐩戞帶鐩存挱
+ */
++(void)Play:(NSObject*)deviceInfo;
+/**
+ 鎵撳紑鎽勫儚澶磋缃〉闈�
+ */
++(void)setting:(NSObject*)deviceInfo;
+/**
+ 鍥炴斁鎾斁鍘嗗彶
+ */
++(void)playBackVideo:(NSObject*)deviceInfo;
+
+
+
+
 
 @end
diff --git a/EZSDK/EZSDK/EZSDK.m b/EZSDK/EZSDK/EZSDK.m
index 02954b8..700013e 100644
--- a/EZSDK/EZSDK/EZSDK.m
+++ b/EZSDK/EZSDK/EZSDK.m
@@ -20,11 +20,6 @@
 #import "EZDeviceTableViewController.h"
 #import "EZHCNetDeviceSDK.h"
 
-
-#define CURR_LANG ([[NSLocale preferredLanguages] objectAtIndex:0])
-#define LanguageIsChinese ([CURR_LANG rangeOfString:@"zh-Hans"].location != NSNotFound)
-
-
 @implementation EZSDK
 
 /**
@@ -35,8 +30,8 @@
 {
     static BOOL isHavelibInit=NO;
     if (!isHavelibInit) {
-//        isHavelibInit=YES;
-        NSLog(@"绗竴娆″垵濮嬪寲钀ょ煶搴�");
+        //        isHavelibInit=YES;
+        //        NSLog(@"绗竴娆″垵濮嬪寲钀ょ煶搴�");
         if (!LanguageIsChinese) {
             //娴峰鐗�
             isHavelibInit = [EZGlobalSDK initLibWithAppKey:globalAppKey];
@@ -53,6 +48,113 @@
     }
     return isHavelibInit;
 }
+
+/**
+ 璁剧疆SDK鐨刟ccessToken
+ */
++(void)setEZAccessToken:(NSString *) accessToken
+{
+    [[GlobalKit shareKit] setAccessToken:accessToken];
+    [EZOPENSDK setAccessToken:accessToken];
+}
+
+
+
+//鑾峰彇褰撳墠灞忓箷鏄剧ず鐨剉iewcontroller   (杩欓噷闈㈣幏鍙栫殑鐩稿綋浜巖ootViewController)
++(UINavigationController *)getCurrentVC
+{
+    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
+    if (window.windowLevel != UIWindowLevelNormal)
+    {
+        NSArray *windows = [[UIApplication sharedApplication] windows];
+        for(UIWindow * tmpWin in windows)
+        {
+            if (tmpWin.windowLevel == UIWindowLevelNormal)
+            {
+                window = tmpWin;
+                break;
+            }
+        }
+    }
+    
+    return  (UINavigationController *)window.rootViewController;
+}
+
+
+/**
+ 鐩存帴璺宠浆鍒拌悿鐭虫憚鍍忓ご鍒楄〃
+ */
++(void)go2EZvizMonitor
+{
+    //    NSLog(@"go2EZvizMonitor");
+    //鑾峰彇EZMain鐨剆troyboard鏂囦欢
+    UIStoryboard *ezMainStoryboard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
+    //鑾峰彇EZMain.storyboard鐨勫疄渚媀iewController--鑾峰彇鎽勫儚澶村垪琛�
+    EZDeviceTableViewController *instanceVC = [ezMainStoryboard instantiateViewControllerWithIdentifier:@"EZCameraList"];
+    //push鎽勫儚澶村垪琛ㄧ殑viewController
+    [[self getCurrentVC] setNavigationBarHidden:NO];
+    //        NSLog(@"willpush********");
+    [[self getCurrentVC] pushViewController:instanceVC animated:YES];
+    //        NSLog(@"had pushed********");
+}
+
+/**
+ 璺宠浆娣诲姞娣诲姞璁惧
+ */
++(void)addEzvizMonitor
+{
+    //    NSLog(@"娣诲姞鎽勫儚澶�");
+    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
+        UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"AddDevice" bundle:nil];
+        EZAddByQRCodeViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"AddByQRCode"];
+        [[self getCurrentVC] setNavigationBarHidden:NO];
+        [[self getCurrentVC] pushViewController:rootViewController animated:YES];
+    } else {
+        //        [UIView dd_showMessage:@"iOS 7.0浠ヤ笅鎵爜鍔熻兘璇疯嚜琛屽疄鐜�"];
+        NSLog(@"iOS 7.0浠ヤ笅鎵爜鍔熻兘璇疯嚜琛屽疄鐜�");
+    }
+    
+}
+
+/**
+ 鏌ョ湅瑙嗛鐩戞帶鐩存挱
+ */
++(void)Play:(NSObject*)deviceInfo
+{
+    UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
+    EZLivePlayViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"EZLivePlayViewController"];
+    //        NSLog(@"play--iphone--rootViewController");
+    rootViewController.deviceInfo=(EZDeviceInfo *)deviceInfo;
+    NSLog(@"play--iphone--deviceName -%@",rootViewController.deviceInfo.deviceName);
+    //        rootViewController.cameraIndex=0;
+    [[self getCurrentVC] setNavigationBarHidden:NO];
+    [[self getCurrentVC] pushViewController:rootViewController animated:YES];
+}
+
+/**
+ 鎵撳紑鎽勫儚澶磋缃〉闈�
+ */
++(void)setting:(NSObject*)deviceInfo
+{
+    UIStoryboard *settingStoryBoard=[UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
+    EZSettingViewController *settingVC=[settingStoryBoard instantiateViewControllerWithIdentifier:@"EZSettingViewController"];
+    settingVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
+    [[self getCurrentVC] setNavigationBarHidden:NO];
+    [[self getCurrentVC] pushViewController:settingVC animated:YES];
+}
+
+/**
+ 鍥炴斁鎾斁鍘嗗彶
+ */
++(void)playBackVideo:(NSObject*)deviceInfo
+{
+    UIStoryboard *playBackStoryBoard=[UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
+    EZPlaybackViewController *playBackVC=[playBackStoryBoard instantiateViewControllerWithIdentifier:@"EZPlaybackViewController"];
+    playBackVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
+    [[self getCurrentVC] setNavigationBarHidden:NO];
+    [[self getCurrentVC] pushViewController:playBackVC animated:YES];
+}
+
 
 //+(void)MonitorPushMessage:(NSString *)MonitorType ID:(NSString *)ID
 //{
@@ -122,68 +224,6 @@
 //    return ICommons;
 //}
 
-//鑾峰彇褰撳墠灞忓箷鏄剧ず鐨剉iewcontroller   (杩欓噷闈㈣幏鍙栫殑鐩稿綋浜巖ootViewController)
-+(UINavigationController *)getCurrentVC
-{
-    UIWindow * window = [[UIApplication sharedApplication] keyWindow];
-    if (window.windowLevel != UIWindowLevelNormal)
-    {
-        NSArray *windows = [[UIApplication sharedApplication] windows];
-        for(UIWindow * tmpWin in windows)
-        {
-            if (tmpWin.windowLevel == UIWindowLevelNormal)
-            {
-                window = tmpWin;
-                break;
-            }
-        }
-    }
-   
-   return  (UINavigationController *)window.rootViewController;
-}
-
-//+(void)login
-//{
-//    if ([GlobalKit shareKit].accessToken)
-//    {
-//        [EZOPENSDK setAccessToken:[GlobalKit shareKit].accessToken];
-//        NSLog(@"login---1");
-//    }
-//    else
-//    {
-//        [EZOPENSDK openLoginPage:^(EZAccessToken *accessToken) {
-//            [[GlobalKit shareKit] setAccessToken:accessToken.accessToken];
-//            [EZOPENSDK setAccessToken:accessToken.accessToken];
-//            NSLog(@"login---2");
-//        }];
-//    }
-//}
-
-+(void)go2EZvizMonitor
-{
-        NSLog(@"go2EZvizMonitor");
-//    if (isPad) {
-//        //鑾峰彇EZMain鐨剆troyboard鏂囦欢
-//        UIStoryboard *ezMainStoryboard = [UIStoryboard storyboardWithName:@"EZMainForIPad" bundle:nil];
-//        //鑾峰彇EZMain.storyboard鐨勫疄渚媀iewController--鑾峰彇鎽勫儚澶村垪琛�
-//        EZDeviceTableViewController *instanceVC = [ezMainStoryboard instantiateViewControllerWithIdentifier:@"EZCameraList"];
-//        //push鎽勫儚澶村垪琛ㄧ殑viewController
-//        [[self getCurrentVC] setNavigationBarHidden:NO];
-//        [[self getCurrentVC] pushViewController:instanceVC animated:YES];
-//    }else{
-    
-        //鑾峰彇EZMain鐨剆troyboard鏂囦欢
-        UIStoryboard *ezMainStoryboard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
-        //鑾峰彇EZMain.storyboard鐨勫疄渚媀iewController--鑾峰彇鎽勫儚澶村垪琛�
-        EZDeviceTableViewController *instanceVC = [ezMainStoryboard instantiateViewControllerWithIdentifier:@"EZCameraList"];
-        //push鎽勫儚澶村垪琛ㄧ殑viewController
-        [[self getCurrentVC] setNavigationBarHidden:NO];
-        NSLog(@"willpush********");
-        [[self getCurrentVC] pushViewController:instanceVC animated:YES];
-        NSLog(@"had pushed********");
-//    }
-
-}
 
 //+(NSArray *)getDeviceList:(int)pageIndex :(int)pageSize
 //{
@@ -221,87 +261,21 @@
 //    return deviceListaArray  ;
 //}
 
-+(void)addEzvizMonitor
-{
-    NSLog(@"娣诲姞鎽勫儚澶�");
-    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) {
-        UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"AddDevice" bundle:nil];
-        EZAddByQRCodeViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"AddByQRCode"];
-        [[self getCurrentVC] setNavigationBarHidden:NO];
-        [[self getCurrentVC] pushViewController:rootViewController animated:YES];
-    } else {
-//        [UIView dd_showMessage:@"iOS 7.0浠ヤ笅鎵爜鍔熻兘璇疯嚜琛屽疄鐜�"];
-        NSLog(@"iOS 7.0浠ヤ笅鎵爜鍔熻兘璇疯嚜琛屽疄鐜�");
-    }
-
-}
-
-+(void)Play:(NSObject*)deviceInfo
-{
-//    if (isPad) {
-//        NSLog(@"play--ipad--");
-//        UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"EZMainForIPad" bundle:nil];
-//        EZLivePlayViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"EZLivePlayViewController"];
-//        rootViewController.deviceInfo=(EZDeviceInfo *)deviceInfo;
-//        rootViewController.cameraIndex=0;
-//        [[self getCurrentVC] setNavigationBarHidden:NO];
-//        [[self getCurrentVC] pushViewController:rootViewController animated:YES];
-//    }else{
-        NSLog(@"play--iphone--1225");
-        UIStoryboard *addDeviceStoryBoard = [UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
-        EZLivePlayViewController *rootViewController = [addDeviceStoryBoard instantiateViewControllerWithIdentifier:@"EZLivePlayViewController"];
-        NSLog(@"play--iphone--rootViewController");
-        rootViewController.deviceInfo=(EZDeviceInfo *)deviceInfo;
-         NSLog(@"play--iphone--deviceName -%@",rootViewController.deviceInfo.deviceName);
-//        rootViewController.cameraIndex=0;
-        [[self getCurrentVC] setNavigationBarHidden:NO];
-        [[self getCurrentVC] pushViewController:rootViewController animated:YES];
+//+(void)login
+//{
+//    if ([GlobalKit shareKit].accessToken)
+//    {
+//        [EZOPENSDK setAccessToken:[GlobalKit shareKit].accessToken];
+//        NSLog(@"login---1");
 //    }
-
-
-}
-
-
-+(void)setting:(NSObject*)deviceInfo
-{
-//    if (isPad) {
-//        UIStoryboard *settingStoryBoard=[UIStoryboard storyboardWithName:@"EZMainForIPad" bundle:nil];
-//        EZSettingViewController *settingVC=[settingStoryBoard instantiateViewControllerWithIdentifier:@"EZSettingViewController"];
-//        settingVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
-//        [[self getCurrentVC] setNavigationBarHidden:NO];
-//        [[self getCurrentVC] pushViewController:settingVC animated:YES];
-//    }else{
-
-        UIStoryboard *settingStoryBoard=[UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
-        EZSettingViewController *settingVC=[settingStoryBoard instantiateViewControllerWithIdentifier:@"EZSettingViewController"];
-        settingVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
-        [[self getCurrentVC] setNavigationBarHidden:NO];
-        [[self getCurrentVC] pushViewController:settingVC animated:YES];
+//    else
+//    {
+//        [EZOPENSDK openLoginPage:^(EZAccessToken *accessToken) {
+//            [[GlobalKit shareKit] setAccessToken:accessToken.accessToken];
+//            [EZOPENSDK setAccessToken:accessToken.accessToken];
+//            NSLog(@"login---2");
+//        }];
 //    }
-
-
-}
-
-+(void)playBackVideo:(NSObject*)deviceInfo
-{
-
-//    if (isPad) {
-//        UIStoryboard *playBackStoryBoard=[UIStoryboard storyboardWithName:@"EZMainForIPad" bundle:nil];
-//        EZPlaybackViewController *playBackVC=[playBackStoryBoard instantiateViewControllerWithIdentifier:@"EZPlaybackViewController"];
-//        playBackVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
-//        playBackVC.cameraIndex=0;
-//        [[self getCurrentVC] setNavigationBarHidden:NO];
-//        [[self getCurrentVC] pushViewController:playBackVC animated:YES];
-//    }else{
-        UIStoryboard *playBackStoryBoard=[UIStoryboard storyboardWithName:@"EZMain" bundle:nil];
-        EZPlaybackViewController *playBackVC=[playBackStoryBoard instantiateViewControllerWithIdentifier:@"EZPlaybackViewController"];
-        playBackVC.deviceInfo=(EZDeviceInfo *)deviceInfo;
-//        playBackVC.cameraIndex=0;
-        [[self getCurrentVC] setNavigationBarHidden:NO];
-        [[self getCurrentVC] pushViewController:playBackVC animated:YES];
-//    }
-
-}
-
+//}
 
 @end

--
Gitblit v1.8.0