weixin_39602637
weixin_39602637
2020-12-28 08:40

Custom Rule Help

Hi Niels, we are looking at some somewhat domain specific user agents (UAs) which are being incorrectly handled by YAUAA and wondered if you could suggest a suitable approach to fix this.

As an example we have the following UAs which are prevalent in our traffic and are related to mobile application UAs, for instance a "Leap" App sending the below UAs (I should say these are mocked examples but do illustrate the problem):

UA examples


1) 'LeapApp-AppStore/4.75.0.1 CFNetwork/1107.1 Darwin/19.0.0'
2) 'App/1.57.0.1 (iPad4,4; iOS 12.4.2) LeapLMN/36.2.0 LeapHTTPClient/8.0.2'
3) 'Leap/5.9.0 DashVideoOnDemandMediaDecoder/0.0.7 leapExoPlayer/0.0.5'
4) 'LeapAndroid/5.9.0 (110807 uk)'

Problem

The DeviceBrand and DeviceName are being assigned by the rule below (MobileBrand-rules.yaml, line ~ 311) as DeviceBrand == BlackBerry, despite the link to other brands being evident (iPad and Darwin for example relating to Apple products).

In some cases, such as 1) and 2) the matcher assigning Apple as DeviceBrand has a far lower Confidence than the MobileBrand matcher, which makes it difficult to handle because "Leap" itself has no relation to the brand, only the application.

We can patch your current rule a few different ways to resolve this, but with the goal of not changing your rules, we are not able to add a separate rule to overwrite its behaviour, and given we expect to see other similar issues with this rule, were wondering if you see a better solution?

Conflicting Rule


- matcher:
variable:
  - 'DeviceModelLine                     :IsInLookUpPrefix[MobileBrandPrefixes;agent.(1-2)product.name]'
require:
  - 'IsNull[agent.(1-3)product.comments.entry.product.name[1]="Android"]'
  - 'IsNull[LookUp[MobileBrands;]]' # Only use this if the name IS NOT exactly the brand
extract:
  - 'DeviceBrand                         :      313 :LookUpPrefix[MobileBrandPrefixes;]'
  - 'DeviceName                          :      313 :'

该提问来源于开源项目:nielsbasjes/yauaa

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

8条回答

  • weixin_39902545 weixin_39902545 4月前

    I had a look at the examples you provided and I also had a good look at the useragents where "Leap" actually means "BlackBerry". What I found is by simply changing the pattern for this from "Leap" to "Leap " (i.e. a space extra) the examples you provided are immediately handled a lot better.

    The output now is this:

    - test:
        input:
          user_agent_string: 'LeapApp-AppStore/4.75.0.1 CFNetwork/1107.1 Darwin/19.0.0'
        expected:
          DeviceClass                           : 'Mobile'
          DeviceName                            : 'Apple iOS Device'
          DeviceBrand                           : 'Apple'
          OperatingSystemClass                  : 'Mobile'
          OperatingSystemName                   : 'Darwin (iOS)'
          OperatingSystemVersion                : '19.0.0'
          OperatingSystemVersionMajor           : '19'
          OperatingSystemNameVersion            : 'Darwin (iOS) 19.0.0'
          OperatingSystemNameVersionMajor       : 'Darwin (iOS) 19'
          LayoutEngineClass                     : 'Mobile App'
          LayoutEngineName                      : 'LeapApp-AppStore'
          LayoutEngineVersion                   : '4.75.0.1'
          LayoutEngineVersionMajor              : '4'
          LayoutEngineNameVersion               : 'LeapApp-AppStore 4.75.0.1'
          LayoutEngineNameVersionMajor          : 'LeapApp-AppStore 4'
          AgentClass                            : 'Mobile App'
          AgentName                             : 'LeapApp-AppStore'
          AgentVersion                          : '4.75.0.1'
          AgentVersionMajor                     : '4'
          AgentNameVersion                      : 'LeapApp-AppStore 4.75.0.1'
          AgentNameVersionMajor                 : 'LeapApp-AppStore 4'
    
    
    - test:
        input:
          user_agent_string: 'App/1.57.0.1 (iPad4,4; iOS 12.4.2) LeapLMN/36.2.0 LeapHTTPClient/8.0.2'
        expected:
          DeviceClass                           : 'Tablet'
          DeviceName                            : 'Apple iPad'
          DeviceBrand                           : 'Apple'
          DeviceVersion                         : 'iPad mini 2 (Wi-Fi)'
          OperatingSystemClass                  : 'Mobile'
          OperatingSystemName                   : 'iOS'
          OperatingSystemVersion                : '12.4.2'
          OperatingSystemVersionMajor           : '12'
          OperatingSystemNameVersion            : 'iOS 12.4.2'
          OperatingSystemNameVersionMajor       : 'iOS 12'
          LayoutEngineClass                     : 'Unknown'
          LayoutEngineName                      : 'Unknown'
          LayoutEngineVersion                   : '??'
          LayoutEngineVersionMajor              : '??'
          LayoutEngineNameVersion               : 'Unknown ??'
          LayoutEngineNameVersionMajor          : 'Unknown ??'
          AgentClass                            : 'Special'
          AgentName                             : 'App'
          AgentVersion                          : '1.57.0.1'
          AgentVersionMajor                     : '1'
          AgentNameVersion                      : 'App 1.57.0.1'
          AgentNameVersionMajor                 : 'App 1'
    
    
    
    - test:
        input:
          user_agent_string: 'Leap/5.9.0 DashVideoOnDemandMediaDecoder/0.0.7 leapExoPlayer/0.0.5'
        expected:
          DeviceClass                           : 'Unknown'
          DeviceName                            : 'Unknown'
          DeviceBrand                           : 'Unknown'
          OperatingSystemClass                  : 'Unknown'
          OperatingSystemName                   : 'Unknown'
          OperatingSystemVersion                : '??'
          OperatingSystemVersionMajor           : '??'
          OperatingSystemNameVersion            : 'Unknown ??'
          OperatingSystemNameVersionMajor       : 'Unknown ??'
          LayoutEngineClass                     : 'Unknown'
          LayoutEngineName                      : 'Unknown'
          LayoutEngineVersion                   : '??'
          LayoutEngineVersionMajor              : '??'
          LayoutEngineNameVersion               : 'Unknown ??'
          LayoutEngineNameVersionMajor          : 'Unknown ??'
          AgentClass                            : 'Special'
          AgentName                             : 'Leap'
          AgentVersion                          : '5.9.0'
          AgentVersionMajor                     : '5'
          AgentNameVersion                      : 'Leap 5.9.0'
          AgentNameVersionMajor                 : 'Leap 5'
    
    
    - test:
        input:
          user_agent_string: 'LeapAndroid/5.9.0 (110807 uk)'
        expected:
          DeviceClass                           : 'Mobile'
          DeviceName                            : 'Unknown'
          DeviceBrand                           : 'Unknown'
          OperatingSystemClass                  : 'Mobile'
          OperatingSystemName                   : 'Android'
          OperatingSystemVersion                : '??'
          OperatingSystemVersionMajor           : '??'
          OperatingSystemNameVersion            : 'Android ??'
          OperatingSystemNameVersionMajor       : 'Android ??'
          LayoutEngineClass                     : 'Unknown'
          LayoutEngineName                      : 'Unknown'
          LayoutEngineVersion                   : '??'
          LayoutEngineVersionMajor              : '??'
          LayoutEngineNameVersion               : 'Unknown ??'
          LayoutEngineNameVersionMajor          : 'Unknown ??'
          AgentClass                            : 'Special'
          AgentName                             : 'LeapAndroid'
          AgentVersion                          : '5.9.0'
          AgentVersionMajor                     : '5'
          AgentNameVersion                      : 'LeapAndroid 5.9.0'
          AgentNameVersionMajor                 : 'LeapAndroid 5'
          AgentLanguage                         : 'Ukrainian'
          AgentLanguageCode                     : 'uk'
    
    点赞 评论 复制链接分享
  • weixin_39902545 weixin_39902545 4月前

    I've build a 5.15-SNAPSHOT release for you to try (see https://github.com/nielsbasjes/yauaa/blob/master/src/main/docs/README-Usage.md#snapshots ).

    Or simply run

    docker run --rm -p8080:8080 nielsbasjes/yauaa:5.15-SNAPSHOT
    and open your browser on http://localhost:8080

    I've included the above as preliminary output in there. https://github.com/nielsbasjes/yauaa/commit/fb33b1364b19724f0f32047a89ac1f490871a84e

    点赞 评论 复制链接分享
  • weixin_39602637 weixin_39602637 4月前

    Hi Niels, thanks for your time and response. It looks like from what you have suggested the best option to handle this discrepancy is a change to the source as you suggested.

    Unfortunately the examples I provided were mocked and only showed the behaviour, meaning a slight change would be necessary.

    The actual pattern which is failing is BBC -> BlackBerry, with the exact user agents being:

    
    iPlayerKids/1.57.0.1 (iPad4,4; iOS 12.4.2) BBCSMP/36.2.0 BBCHTTPClient/8.0.2
    BBCNewsAndroid/5.9.0 (110807 uk)
    BBCiPlayer/4.75.0.1 (iPad2,5; iPhone OS 9.3.5) BBCSMP/36.2.0 BBCHTTPClient/8.0.2
    BBCiPlayer-AppStore/4.75.0.1 CFNetwork/1107.1 Darwin/19.0.0
    BBCNewsAndroid/5.9.0 DashVideoOnDemandMediaDecoder/0.0.7 bbcExoPlayer/0.0.5 (Android 9)
    

    Having tested the same approach that you used (adding a space after the pattern "BBC" -> "BBC " in MobileBrands.yaml) I see similar resolution of the problem, with no change to the tests for BlackBerry.

    Hopefully this slightly modified fix can still be applied successfully?

    Exact test cases can be found below:

    
    - test:
        input:
          user_agent_string: 'BBCNewsAndroid/5.9.0 (110807)'
        expected:
          DeviceClass                          : 'Mobile'
          DeviceName                           : 'Unknown'
          DeviceBrand                          : 'Unknown'
          OperatingSystemClass                 : 'Mobile'
          OperatingSystemName                  : 'Android'
          OperatingSystemVersion               : '??'
          OperatingSystemVersionMajor          : '??'
          OperatingSystemNameVersion           : 'Android ??'
          OperatingSystemNameVersionMajor      : 'Android ??'
          LayoutEngineClass                    : 'Unknown'
          LayoutEngineName                     : 'Unknown'
          LayoutEngineVersion                  : '??'
          LayoutEngineVersionMajor             : '??'
          LayoutEngineNameVersion              : 'Unknown ??'
          LayoutEngineNameVersionMajor         : 'Unknown ??'
          AgentClass                           : 'Special'
          AgentName                            : 'BBCNewsAndroid'
          AgentVersion                         : '5.9.0'
          AgentVersionMajor                    : '5'
          AgentNameVersion                     : 'BBCNewsAndroid 5.9.0'
          AgentNameVersionMajor                : 'BBCNewsAndroid 5'
    
    
    - test:
        input:
          user_agent_string: 'iPlayerKids/1.57.0.1 (iPad4,4; iOS 12.4.2) BBCSMP/36.2.0 BBCHTTPClient/8.0.2'
        expected:
          DeviceClass                          : 'Tablet'
          DeviceName                           : 'Apple iPad'
          DeviceBrand                          : 'Apple'
          DeviceVersion                        : 'iPad mini 2 (Wi-Fi)'
          OperatingSystemClass                 : 'Mobile'
          OperatingSystemName                  : 'iOS'
          OperatingSystemVersion               : '12.4.2'
          OperatingSystemVersionMajor          : '12'
          OperatingSystemNameVersion           : 'iOS 12.4.2'
          OperatingSystemNameVersionMajor      : 'iOS 12'
          LayoutEngineClass                    : 'Unknown'
          LayoutEngineName                     : 'Unknown'
          LayoutEngineVersion                  : '??'
          LayoutEngineVersionMajor             : '??'
          LayoutEngineNameVersion              : 'Unknown ??'
          LayoutEngineNameVersionMajor         : 'Unknown ??'
          AgentClass                           : 'Special'
          AgentName                            : 'iPlayerKids'
          AgentVersion                         : '1.57.0.1'
          AgentVersionMajor                    : '1'
          AgentNameVersion                     : 'iPlayerKids 1.57.0.1'
          AgentNameVersionMajor                : 'iPlayerKids 1'
    
    
    - test:
        input:
          user_agent_string: 'BBCiPlayer/4.75.0.1 (iPad2,5; iPhone OS 9.3.5) BBCSMP/36.2.0 BBCHTTPClient/8.0.2'
        expected:
          DeviceClass                          : 'Tablet'
          DeviceName                           : 'Apple iPad'
          DeviceBrand                          : 'Apple'
          DeviceVersion                        : 'iPad mini (Wi-Fi)'
          OperatingSystemClass                 : 'Mobile'
          OperatingSystemName                  : 'iOS'
          OperatingSystemVersion               : '9.3.5'
          OperatingSystemVersionMajor          : '9'
          OperatingSystemNameVersion           : 'iOS 9.3.5'
          OperatingSystemNameVersionMajor      : 'iOS 9'
          LayoutEngineClass                    : 'Unknown'
          LayoutEngineName                     : 'Unknown'
          LayoutEngineVersion                  : '??'
          LayoutEngineVersionMajor             : '??'
          LayoutEngineNameVersion              : 'Unknown ??'
          LayoutEngineNameVersionMajor         : 'Unknown ??'
          AgentClass                           : 'Special'
          AgentName                            : 'BBCiPlayer'
          AgentVersion                         : '4.75.0.1'
          AgentVersionMajor                    : '4'
          AgentNameVersion                     : 'BBCiPlayer 4.75.0.1'
          AgentNameVersionMajor                : 'BBCiPlayer 4'
    
    - test:
        input:
          user_agent_string: 'BBCiPlayer-AppStore/4.75.0.1 CFNetwork/1107.1 Darwin/19.0.0'
        expected:
          DeviceClass                          : 'Mobile'
          DeviceName                           : 'Apple iOS Device'
          DeviceBrand                          : 'Apple'
          OperatingSystemClass                 : 'Mobile'
          OperatingSystemName                  : 'Darwin (iOS)'
          OperatingSystemVersion               : '19.0.0'
          OperatingSystemVersionMajor          : '19'
          OperatingSystemNameVersion           : 'Darwin (iOS) 19.0.0'
          OperatingSystemNameVersionMajor      : 'Darwin (iOS) 19'
          LayoutEngineClass                    : 'Mobile App'
          LayoutEngineName                     : 'BBCiPlayer-AppStore'
          LayoutEngineVersion                  : '4.75.0.1'
          LayoutEngineVersionMajor             : '4'
          LayoutEngineNameVersion              : 'BBCiPlayer-AppStore 4.75.0.1'
          LayoutEngineNameVersionMajor         : 'BBCiPlayer-AppStore 4'
          AgentClass                           : 'Mobile App'
          AgentName                            : 'BBCiPlayer-AppStore'
          AgentVersion                         : '4.75.0.1'
          AgentVersionMajor                    : '4'
          AgentNameVersion                     : 'BBCiPlayer-AppStore 4.75.0.1'
          AgentNameVersionMajor                : 'BBCiPlayer-AppStore 4'
    
    - test:
        input:
          user_agent_string: 'BBCNewsAndroid/5.9.0 DashVideoOnDemandMediaDecoder/0.0.7 bbcExoPlayer/0.0.5 (Android 9)'
        expected:
          DeviceClass                          : 'Mobile'
          DeviceName                           : 'Unknown'
          DeviceBrand                          : 'Unknown'
          OperatingSystemClass                 : 'Mobile'
          OperatingSystemName                  : 'Android'
          OperatingSystemVersion               : '??'
          OperatingSystemVersionMajor          : '??'
          OperatingSystemNameVersion           : 'Android ??'
          OperatingSystemNameVersionMajor      : 'Android ??'
          LayoutEngineClass                    : 'Unknown'
          LayoutEngineName                     : 'Unknown'
          LayoutEngineVersion                  : '??'
          LayoutEngineVersionMajor             : '??'
          LayoutEngineNameVersion              : 'Unknown ??'
          LayoutEngineNameVersionMajor         : 'Unknown ??'
          AgentClass                           : 'Special'
          AgentName                            : 'BBCNewsAndroid'
          AgentVersion                         : '5.9.0'
          AgentVersionMajor                    : '5'
          AgentNameVersion                     : 'BBCNewsAndroid 5.9.0'
          AgentNameVersionMajor                : 'BBCNewsAndroid 5'
    
    点赞 评论 复制链接分享
  • weixin_39902545 weixin_39902545 4月前

    I have included these testcases and tweaked the detection to match. The original BlackBerry devices are so rare and I have no testcases for these values so I simply tweaked them as I did with Leap.

    In addition I have changed the output of your last example to show this instead because it clearly indicates "Android 9":

    
          DeviceClass                          : 'Mobile'
          DeviceName                           : 'Android Mobile'
          DeviceBrand                          : 'Unknown'
          OperatingSystemClass                 : 'Mobile'
          OperatingSystemName                  : 'Android'
          OperatingSystemVersion               : '9'
          OperatingSystemVersionMajor          : '9'
          OperatingSystemNameVersion           : 'Android 9'
          OperatingSystemNameVersionMajor      : 'Android 9'
    

    If you have more of these testcases (preferably ones that are more different than just another version) then I would like to have those too please. I've published a new snapshot and I've updated the docker image for you to test with.

    点赞 评论 复制链接分享
  • weixin_39602637 weixin_39602637 4月前

    Thats's great, thanks Niels. Of course you're right Re the "Android 9" point. I've dug out a few more UAs that I think might have a bit of variation in the Agent below.

    
    - test:
        input:
          user_agent_string: 'BBC News Android 4.7.1.29/107998 uk smpAndroid/29.4535-dev (android_os/4.4.4)'
        expected:
          DeviceClass: Mobile
          DeviceName: Android Mobile
          DeviceBrand: Unknown
          OperatingSystemClass: Mobile
          OperatingSystemName: Android
          OperatingSystemVersion: 4.4.4
          OperatingSystemVersionMajor: 4
          OperatingSystemNameVersion: Android 4.4.4
          OperatingSystemNameVersionMajor: Android 4
          LayoutEngineClass: Unknown
          LayoutEngineName: Unknown
          LayoutEngineVersion: ??
          LayoutEngineVersionMajor: ??
          LayoutEngineNameVersion: Unknown ??
          LayoutEngineNameVersionMajor: Unknown ??
          AgentClass: Special
          AgentName: BBC News Android
          AgentVersion: 4.7.1.29
          AgentVersionMajor: 4
          AgentNameVersion: BBC News Android 4.7.1.29
          AgentNameVersionMajor: BBC News Android 4
    
    - test:
        input:
          user_agent_string: 'BBCiPlayerRadio-International/2.15.7.11054 (SM-G930F; Android 8.0.0)'
        expected:
          DeviceClass: Mobile
          DeviceName: Samsung SM-G930F
          DeviceBrand: Samsung
          OperatingSystemClass: Mobile
          OperatingSystemName: Android
          OperatingSystemVersion: 8.0.0
          OperatingSystemVersionMajor: 8
          OperatingSystemNameVersion: Android 8.0.0
          OperatingSystemNameVersionMajor: Android 8
          LayoutEngineClass: Unknown
          LayoutEngineName: Unknown
          LayoutEngineVersion: ??
          LayoutEngineVersionMajor: ??
          LayoutEngineNameVersion: Unknown ??
          LayoutEngineNameVersionMajor: Unknown ??
          AgentClass: Special
          AgentName: BBCiPlayerRadio-International
          AgentVersion: 2.15.7.11054
          AgentVersionMajor: 2
          AgentNameVersion: BBCiPlayerRadio-International 2.15.7.11054
          AgentNameVersionMajor: BBCiPlayerRadio-International 2
    
    
    - test:
        input:
          user_agent_string: 'BBCNews/172 (iPhone10,4; iOS 13.1.3) BBCSMP/36.1.0 BBCHTTPClient/7.1.1'
        expected:
          DeviceClass: Phone
          DeviceName: Apple iPhone
          DeviceBrand: Apple
          DeviceVersion: iPhone 8 (A1905)
          OperatingSystemClass: Mobile
          OperatingSystemName: iOS
          OperatingSystemVersion: 13.1.3
          OperatingSystemVersionMajor: 13
          OperatingSystemNameVersion: iOS 13.1.3
          OperatingSystemNameVersionMajor: iOS 13
          LayoutEngineClass: Unknown
          LayoutEngineName: Unknown
          LayoutEngineVersion: ??
          LayoutEngineVersionMajor: ??
          LayoutEngineNameVersion: Unknown ??
          LayoutEngineNameVersionMajor: Unknown ??
          AgentClass: Special
          AgentName: BBCNews
          AgentVersion: 172
          AgentVersionMajor: 172
          AgentNameVersion: BBCNews 172
          AgentNameVersionMajor: BBCNews 172
    
    - test:
        input:
          user_agent_string: 'BBCiPlayer-Kids-AppStore/1.57.0.1 CFNetwork/978.0.7 Darwin/18.7.0'
        expected:
          DeviceClass: Mobile
          DeviceName: Apple iOS Device
          DeviceBrand: Apple
          OperatingSystemClass: Mobile
          OperatingSystemName: Darwin (iOS)
          OperatingSystemVersion: 18.7.0
          OperatingSystemVersionMajor: 18
          OperatingSystemNameVersion: Darwin (iOS) 18.7.0
          OperatingSystemNameVersionMajor: Darwin (iOS) 18
          LayoutEngineClass: Mobile App
          LayoutEngineName: BBCiPlayer-Kids-AppStore
          LayoutEngineVersion: 1.57.0.1
          LayoutEngineVersionMajor: 1
          LayoutEngineNameVersion: BBCiPlayer-Kids-AppStore 1.57.0.1
          LayoutEngineNameVersionMajor: BBCiPlayer-Kids-AppStore 1
          AgentClass: Mobile App
          AgentName: BBCiPlayer-Kids-AppStore
          AgentVersion: 1.57.0.1
          AgentVersionMajor: 1
          AgentNameVersion: BBCiPlayer-Kids-AppStore 1.57.0.1
          AgentNameVersionMajor: BBCiPlayer-Kids-AppStore 1
    
    - test:
        input:
          user_agent_string: 'bbcmediaplayer/3.1.12 (sm-g960f; Android 9) AdobeAIR/23.0.0.246'
        expected:
          DeviceClass                     : Mobile
          DeviceName                      : Samsung SM-G960F
          DeviceBrand                     : Samsung
          OperatingSystemClass            : Mobile
          OperatingSystemName             : Android
          OperatingSystemVersion          : 9
          OperatingSystemVersionMajor     : 9
          OperatingSystemNameVersion      : Android 9
          OperatingSystemNameVersionMajor : Android 9
          LayoutEngineClass               : Unknown
          LayoutEngineName                : Unknown
          LayoutEngineVersion             : ??
          LayoutEngineVersionMajor        : ??
          LayoutEngineNameVersion         : Unknown ??
          LayoutEngineNameVersionMajor    : Unknown ??
          AgentClass                      : Special
          AgentName                       : bbcmediaplayer
          AgentVersion                    : 3.1.12
          AgentVersionMajor               : 3
          AgentNameVersion                : bbcmediaplayer 3.1.12
          AgentNameVersionMajor           : bbcmediaplayer 3
    
    - test:
        input:
          user_agent_string: 'BBCSounds/1.13.2 (SM-G950F; Android 9) smpAndroid/38.1.0 (android_os/9)'
        expected:
          DeviceClass                     : Mobile
          DeviceName                      : Samsung SM-G950F
          DeviceBrand                     : Samsung
          OperatingSystemClass            : Mobile
          OperatingSystemName             : Android
          OperatingSystemVersion          : 9
          OperatingSystemVersionMajor     : 9
          OperatingSystemNameVersion      : Android 9
          OperatingSystemNameVersionMajor : Android 9
          LayoutEngineClass               : Unknown
          LayoutEngineName                : Unknown
          LayoutEngineVersion             : ??
          LayoutEngineVersionMajor        : ??
          LayoutEngineNameVersion         : Unknown ??
          LayoutEngineNameVersionMajor    : Unknown ??
          AgentClass                      : Special
          AgentName                       : BBCSounds
          AgentVersion                    : 1.13.2
          AgentVersionMajor               : 1
          AgentNameVersion                : BBCSounds 1.13.2
          AgentNameVersionMajor           : BBCSounds 1
    
    点赞 评论 复制链接分享
  • weixin_39902545 weixin_39902545 4月前

    Thanks, I've included all of these as extra test cases.

    点赞 评论 复制链接分享
  • weixin_39902545 weixin_39902545 4月前

    FYI: I have released version 5.15 that includes all of this

    点赞 评论 复制链接分享
  • weixin_39602637 weixin_39602637 4月前

    Thanks for your help with this.

    点赞 评论 复制链接分享

相关推荐