commit 2d51402f2da7f8ebedbc8315f3d7aef16421a568 Author: zhurunlin Date: Thu Jun 26 13:20:21 2025 +0800 上传工程代码 diff --git a/abs_spider.py b/abs_spider.py new file mode 100644 index 0000000..80e8e58 --- /dev/null +++ b/abs_spider.py @@ -0,0 +1,135 @@ +# coding=utf-8 +import asyncio +import uuid +from abc import ABC, abstractmethod +from asyncio import Event + +from playwright.async_api import Browser, BrowserContext, Page + +import config +from domain.ai_seo import AiAnswer +from utils import create_logger +from utils.session_utils import get_spider_session + +logger = create_logger("abs_spider") + + + + +class AbstractAiSeoSpider(ABC): + browser: Browser + browser_content: BrowserContext + browser_page: Page + platform_id: int + platform_name: str + prompt: str + keyword: str + completed_event: Event | None = None + ai_answer: AiAnswer | None = None + fail_status: bool = False + fail_exception: Exception | None = None + load_session: bool = True + session_info: dict | None = None + task_id: int = 0 + think: bool = False + + def __init__(self, browser: Browser, prompt: str, keyword: str, think: bool = False, load_session: bool = True): + self.browser = browser + self.platform_id = self.get_platform_id() + self.platform_name = self.get_platform_name() + self.prompt = prompt + self.keyword = keyword + self.load_session = load_session + self.think = think + + def _init_data(self): + self.completed_event = asyncio.Event() + self.ai_answer = AiAnswer(self.get_platform_id(), self.get_platform_name(), self.prompt, self.keyword) + self.index_data = None + + def _get_session_path(self): + sessions = { + 1: "deepseek", + 5: "doubao", + 4: "kimi", + 2: "tongyi", + 6: "yiyan", + 3: "yuanbao" + } + # todo 支持多session管理 + + session_path = f"./data/session/{sessions.get(self.platform_id, 'deepseek')}.json" + return session_path + + def _get_screenshot_path(self): + unique_id = str(uuid.uuid4()).replace('-', '') + screenshot_path = f'{config.SCREENSHOT_BASE_PATH}/{self.platform_name}_{unique_id}.png' + return screenshot_path + + async def __init_page(self): + if self.load_session: + self.session_info = await get_spider_session(self.platform_id) + self.browser_content = await self.browser.new_context(storage_state=self.session_info['session_path']) + else: + self.browser_content = await self.browser.new_context() + self.browser_page = await self.browser_content.new_page() + await self.browser_page.set_viewport_size(config.PAGE_INIT_VIEWPORT_SIZE) + # 加载伪装脚本 + await self.browser_page.add_init_script(""" + Object.defineProperties(navigator, {webdriver:{get:()=>false}}); + """) + await self.browser_page.add_init_script('static/stealth.min.js') + + async def _close(self): + await self.browser_page.close() + await self.browser_content.close() + + async def _login(self): + """ + 登录 + :return: + """ + await self.__init_page() + await self.browser_page.goto(self.get_home_url()) + unique_id = str(uuid.uuid4()).replace('-', '') + session_path = f"./data/session/{self.get_platform_name()}/{unique_id}.json" + input("请手动登录后按回车继续...") + await self.browser_content.storage_state(path=session_path) + logger.info(f"[{self.platform_name}]登录成功: {session_path}") + await self._close() + + async def run(self) -> AiAnswer | None: + """ + 运行爬虫 + :return: + """ + try: + await self.__init_page() + logger.info(f"{self.platform_name}爬虫开始运行 提问词: {self.prompt}") + return await self._do_spider() + except Exception as e: + logger.error(f"{self.platform_name}爬虫运行异常 参数: {self.prompt, self.keyword}") + logger.error(f"异常信息: {str(e)}") + raise e + finally: + await self._close() + + @abstractmethod + async def _do_spider(self) -> AiAnswer: + """ + 爬虫具体逻辑 + :return: + """ + pass + + @abstractmethod + def get_platform_id(self) -> int: + pass + + @abstractmethod + def get_platform_name(self) -> str: + pass + + @abstractmethod + def get_home_url(self) -> str: + pass diff --git a/config.py b/config.py new file mode 100644 index 0000000..0c26d62 --- /dev/null +++ b/config.py @@ -0,0 +1,76 @@ +# coding=utf-8 + +LOG_LEVEL = 'DEBUG' +DC_ID = 'dev-01' +ROOT_PATH = r'C:\Users\Administrator\Desktop\spider_ai_seo' + +SCREENSHOT_BASE_PATH = 'screenshot' +BROWSER_HANDLESS = False +BROWSER_ENABLE_SANDBOX = False +BROWSER_IGNORE_DEFAULT_ARGS = ["enable-automation"] +BROWSER_ARGS = ["--start-maximized", "--window-size=1920*1080"] + +PAGE_INIT_VIEWPORT_SIZE = { + 'width': 1920, + 'height': 1080 +} + +AI_SEO_BASE_URL = 'https://geo-api.neicela.com' +AI_SEO_API_AUTH = { + 'app_id': 'aa65700299848d6f21b969dbc9f6cf7c', + 'secret': '5588071d36f0bc61af849c311a03f2c4' +} +OPENAI_API_KEY = 'sk-d0107243adbb43f482cdb14d694b434f' + +AI_SEO_JOB_RANGE = { + 'start_time': '00:10', + 'end_time': '23:59' +} + +# aiseo任务是否启用 +AI_SEO_JOB_ENABLE = True +# aiseo任务运行间隔 +AI_SEO_JOB_INTERVAL = 5 +# aiseo任务获取平台 +AI_SEO_JOB_PLATFORM_IDS = [ '2', '3', '4', '5', '7', '13'] +# aiseo任务最大并发量 +AI_SEO_JOB_MAX_INSTANCES = 2 + + +DEEPSEEK_SEO_JOB_RANGE = { + 'start_time': '00:10', + 'end_time': '23:59' +} +# deepseek任务是否启用 +DEEPSEEK_JOB_ENABLE = True +# deepseek任务获取间隔 +DEEPSEEK_JOB_INTERVAL = 30 +# deepseek任务获取平台 +DEEPSEEK_JOB_PLATFORM_IDS = ['1'] +# deepseek任务最大并发量 +DEEPSEEK_JOB_MAX_INSTANCES = 1 +# 测试提示词 +TEST_KEYWORDS = [ + '正典燕窝', + '燕窝供货商', + '燕窝供应链平台', + '燕窝加盟', + '燕窝加盟选哪个品牌好', +] + +# 测试平台 +TEST_PLATFORM = [6] +# TEST_PLATFORM = [] +# 测试间隔 +TEST_INTERVAL = 10 + +RESAVE_CONFIG = { + 'platform_ids': '1', + 'dates': ['2025-04-16'] +} + +# 任务队列redis配置 +ARQ_REDIS_HOST = 'localhost' +ARQ_REDIS_PORT = 6379 +ARQ_REDIS_DB = 5 +ARQ_REDIS_PASSWORD = None \ No newline at end of file diff --git a/config.py.example b/config.py.example new file mode 100644 index 0000000..09dfa68 --- /dev/null +++ b/config.py.example @@ -0,0 +1,92 @@ +# coding=utf-8 + +LOG_LEVEL = 'INFO' +DC_ID = 'dev-01' + +SCREENSHOT_BASE_PATH = 'screenshot' +BROWSER_HANDLESS = False +BROWSER_ENABLE_SANDBOX = False +BROWSER_IGNORE_DEFAULT_ARGS = ["enable-automation"] +BROWSER_ARGS = ["--start-maximized", "--window-size=1920*1080"] + +PAGE_INIT_VIEWPORT_SIZE = { + 'width': 1920, + 'height': 1080 +} + +AI_SEO_BASE_URL = 'https://aiseo-api.neicela.com' +AI_SEO_API_AUTH = { + 'app_id': 'aa65700299848d6f21b969dbc9f6cf7c', + 'secret': '5588071d36f0bc61af849c311a03f2c4' +} +OPENAI_API_KEY = 'sk-d0107243adbb43f482cdb14d694b434f' + +AI_SEO_JOB_DATE = '2025-04-21' +# aiseo任务运行间隔 +AI_SEO_JOB_INTERVAL = 20 +# aiseo任务获取平台 +AI_SEO_JOB_PLATFORM_IDS = ['2', '3', '4', '5', '6', '7'] +# aiseo任务最大并发量 +AI_SEO_JOB_MAX_INSTANCES = 2 + +# deepseek任务获取间隔 +DEEPSEEK_JOB_INTERVAL = 120 +# deepseek任务获取平台 +DEEPSEEK_JOB_PLATFORM_IDS = ['1'] +# deepseek任务最大并发量i +DEEPSEEK_JOB_MAX_INSTANCES = 1 +# 测试提示词 +TEST_KEYWORDS = [ + # '行业咨询公司排行榜', + # '咨询公司排行榜', + # '中国有哪些知名的行业咨询公司', + # '请推荐中国十大行业咨询公司', + # '中国行业咨询机构中,哪些是最具影响力的', + # '行业顾问排行榜上,哪些公司名列前茅', + # '在行业咨询领域,哪些公司被誉为行业领军者', + # '我想了解中国行业咨询公司的排名,有吗', + # '请给我一份中国行业顾问公司的权威榜单', + # '中国有哪些行业咨询公司备受业界认可', + # '能否介绍一下中国行业咨询领域的佼佼者', + # '中国行业咨询公司的排名情况如何', + # '中国领先的行业顾问公司有哪些', + # '中国行业顾问排行榜上的公司都是哪些', + # '有没有一份关于中国行业咨询机构的综合排名', + # '十大行业研究机构排名', + # '行业研究机构推荐', + # '中国权威的行业研究机构有哪些', + # '能否列出一些中国顶级的行业研究机构', + # '哪些行业研究机构在中国市场上最具竞争力', + # '行业研究机构中,哪些在业界享有盛誉', + # '我想找一家权威的行业研究机构,有推荐吗', + # '请列举一些在行业研究方面有着深厚底蕴的中国公司', + # '我想了解中国行业研究领域的权威机构,能介绍一下吗?', + # '高端卫浴品牌', + # '数智卫浴品牌', + # '科技卫浴品牌', + # '智能马桶品牌', + # '智能淋浴器推荐', + # '小孩湿疹用什么药膏', + # '皮肤湿疹用什么药膏', + # '特应性皮炎用什么药膏最有效', + # '湿疹药膏排行榜', + # '皮炎性湿疹治疗药膏', + '大学生买什么平板电脑' +] + +# 测试平台 +# TEST_PLATFORM = [2,3,4,5,6,7] +TEST_PLATFORM = [7] +# 测试间隔 +TEST_INTERVAL = 15 + +RESAVE_CONFIG = { + 'platform_ids': '1', + 'dates': ['2025-04-16'] +} + +# 任务队列redis配置 +ARQ_REDIS_HOST = 'localhost' +ARQ_REDIS_PORT = 6379 +ARQ_REDIS_DB = 5 +ARQ_REDIS_PASSWORD = None \ No newline at end of file diff --git a/data/session/deepseek.json b/data/session/deepseek.json new file mode 100644 index 0000000..0f89328 --- /dev/null +++ b/data/session/deepseek.json @@ -0,0 +1 @@ +{"cookies": [{"name": "HWWAFSESID", "value": "bb7b7ca631fc23d0be6", "domain": "chat.deepseek.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "HWWAFSESTIME", "value": "1743587790973", "domain": "chat.deepseek.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "ds_session_id", "value": "60439cafcb054cf5a0c995bb90640555", "domain": "chat.deepseek.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "Strict"}, {"name": "smidV2", "value": "202504021756341844549a85db7e9fff7c50bee14c9904000bbd7cf971bb650", "domain": "chat.deepseek.com", "path": "/", "expires": 1778147794.914126, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": ".thumbcache_6b2e5483f9d858d7c661c5e276b6a6ae", "value": "ONR7fVL0CY0Ihp16VVCqDbyWZ2beQmu+Mc/ggjvfrsbyv5BaS+MLhC1jx6iOSlwRkWysbQoJTmWKVpU9XD2nDQ%3D%3D", "domain": "chat.deepseek.com", "path": "/", "expires": 1778147795.095882, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "intercom-session-guh50jw4", "value": "TWNWSHd1YSsvVGxjc3RMcVlQQkhqTWlwQ2g3SlBWbEV3TlpBcGhzc0YvRXRRVUJsalUvNjV4a2hhSXJ1aEdXSmhjRFhsOWNERzRRTm5ZMElPVkJCdWdoYmMrTEhoQ0dGRW5HMlVyUU8wMkk9LS1YcStsTXNYbHhwZDZhZEhucWQ2cG53PT0=--2d982c18b1ebc1fc1e0ccd1a7275d21d93e2778a", "domain": ".deepseek.com", "path": "/", "expires": 1744192624, "httpOnly": false, "secure": true, "sameSite": "Lax"}, {"name": "intercom-device-id-guh50jw4", "value": "159c2ef9-ce07-40a2-83a8-5466ebaa360d", "domain": ".deepseek.com", "path": "/", "expires": 1766917823, "httpOnly": false, "secure": true, "sameSite": "Lax"}], "origins": [{"origin": "https://chat.deepseek.com", "localStorage": [{"name": "thinkingEnabled", "value": "{\"value\":false,\"__version\":\"2\"}"}, {"name": "__appKit_@deepseek/chat_fg_enableNewSSE", "value": "{\"value\":false,\"__version\":\"0\"}"}, {"name": ".thumbcache_6b2e5483f9d858d7c661c5e276b6a6ae", "value": "ONR7fVL0CY0Ihp16VVCqDbyWZ2beQmu+Mc/ggjvfrsbyv5BaS+MLhC1jx6iOSlwRkWysbQoJTmWKVpU9XD2nDQ=="}, {"name": "__appKit_@deepseek/chat_fg_enableCustomCharacterFnModule", "value": "{\"value\":false,\"__version\":\"0\"}"}, {"name": "__tea_cache_tokens_20006317", "value": "{\"web_id\":\"7488652557229846535\",\"user_unique_id\":\"4bb9b1b1-1af1-4a5a-8318-7a8f05979e04\",\"timestamp\":1743587821848,\"_type_\":\"default\"}"}, {"name": "__appKit_@deepseek/chat_themePreference", "value": "{\"value\":\"system\",\"__version\":\"0\"}"}, {"name": "__tea_cache_first_20006317", "value": "1"}, {"name": "__appKit_@deepseek/chat_banner", "value": "{\"value\":{\"closedBannerId\":null,\"cachedBannerOptions\":{\"id\":\"v3-upgrade-1\",\"items\":[{\"show\":false,\"showCondition\":[],\"showDeployEnv\":[],\"showByAppId\":[\"@deepseek/chat\"],\"content\":{\"zh_CN\":\"\",\"en_US\":\"\"},\"type\":\"warning\",\"closable\":true}]}},\"__version\":\"0\"}"}, {"name": "__appKit_@deepseek/chat_debugPanelEnabled", "value": "{\"value\":false,\"__version\":\"0\"}"}, {"name": "__debugVersionUpdateDisabled", "value": "{\"value\":false,\"__version\":\"20241018.1\"}"}, {"name": "__appKit_@deepseek/chat_fg_enableHcaptcha", "value": "{\"value\":false,\"__version\":\"0\"}"}, {"name": "searchEnabled", "value": "{\"value\":false,\"__version\":\"0\"}"}, {"name": "__appKit_@deepseek/chat_debug", "value": "{\"value\":false,\"__version\":\"0\"}"}, {"name": "smidV2", "value": "202504021756341844549a85db7e9fff7c50bee14c9904000bbd7cf971bb650"}, {"name": "APMPLUS675113", "value": "JTdCJTIydXNlcklkJTIyOiUyMmVkMjc3ZjM1LTUxMTgtNDdkZS04ZTNiLTYzNmMyMjY2NGVhMyUyMiwlMjJkZXZpY2VJZCUyMjolMjJiMGJmMDExNy0zMzAxLTQ4MmQtOTM1NS0yNTkzMDI1M2JjM2YlMjIsJTIyciUyMjowLjU4NTkyNTEyODk2MjgwMTgsJTIyZXhwaXJlcyUyMjoxNzUxMzYzNzk0OTQ0JTdE"}, {"name": "intercom.intercom-state-guh50jw4", "value": "{\"app\":{\"openConfig\":{\"layout\":\"default\",\"unifiedStyling\":true,\"openTo\":\"home\",\"spaces\":[{\"type\":\"home\",\"label\":\"\u4e3b\u9875\",\"navigationLabel\":\"\u4e3b\u9875\",\"badge\":null},{\"type\":\"messages\",\"label\":\"\u6d88\u606f\",\"navigationLabel\":\"\u6d88\u606f\",\"badge\":null}],\"userHasReceivedChecklists\":false,\"userHasLiveNewsfeed\":false,\"userHasTickets\":false},\"selfServeSuggestionsMatch\":false,\"name\":\"DeepSeek\",\"features\":{\"anonymousInboundMessages\":true,\"googleAnalytics\":false,\"hubspotInstalled\":false,\"inboundMessages\":true,\"marketoEnrichmentInstalled\":false,\"googleAnalytics4Integration\":true},\"helpCenterSiteUrl\":\"https://intercom.help/-618e25ebf314\",\"inboundConversationsDisabled\":false,\"isDeveloperWorkspace\":false,\"customGoogleAnalyticsTrackerId\":null},\"launcher\":{\"isLauncherEnabled\":true},\"launcherDiscoveryMode\":{\"hasDiscoveredLauncher\":false},\"launcherSettings\":{\"alignment\":\"right\",\"color\":\"#0f0f0f\",\"hasRequiredFeatures\":true,\"horizontalPadding\":20,\"instantBootEnabled\":true,\"launcherLogoUrl\":null,\"secondaryColor\":\"#f7f8fc\",\"showLauncher\":true,\"updatedAt\":1743563425,\"verticalPadding\":20,\"isLoading\":false},\"user\":{\"role\":\"user\",\"locale\":\"zh-CN\",\"hasConversations\":false},\"message\":{},\"conversations\":{\"byId\":{}},\"openOnBoot\":{\"type\":null,\"metadata\":{},\"lastOpenAtTimestamp\":1743587824326},\"operator\":{\"lastComposerEvent\":0},\"router\":{\"isInitialized\":false,\"navigationQueue\":[]}}"}, {"name": "closeUnsafeEnvWarn", "value": "{\"value\":false,\"__version\":\"0\"}"}, {"name": "__appKit_@deepseek/chat_lastSessionValue", "value": "{\"value\":{\"userIsMuted\":false,\"userMuteUntil\":0,\"loginMethod\":\"code\",\"siderCollapsed\":false,\"value\":{\"userIsMuted\":false,\"userMuteUntil\":0,\"loginMethod\":\"code\",\"siderCollapsed\":false}},\"__version\":\"0\"}"}, {"name": "__appKit_@deepseek/chat_localePreference", "value": "{\"value\":\"system\",\"__version\":\"0\"}"}, {"name": "userToken", "value": "{\"value\":\"x2Ze9E+dByf1Wl+PLcaqqRiLi0vLXrbyhoCGbnn1X9mhEldjDLIFhzmB6tHtYyuq\",\"__version\":\"0\"}"}]}]} \ No newline at end of file diff --git a/data/session/doubao.json b/data/session/doubao.json new file mode 100644 index 0000000..1ffa1a7 --- /dev/null +++ b/data/session/doubao.json @@ -0,0 +1 @@ +{"cookies": [{"name": "gd_random_1831904", "value": "eyJtYXRjaCI6ZmFsc2UsInBlcmNlbnQiOjAuODMwNjM2NDU3NTY5NjA0NH0=.ldn0dCaj3jLevuLSTk3mpHUH7yKoupvPSWUWGPB/bIg=", "domain": "www.doubao.com", "path": "/", "expires": 1744628537.031403, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "ttcid", "value": "260c653e69ab4dcd900e7b80f484d72225", "domain": "www.doubao.com", "path": "/", "expires": 1744628515, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "ttcid", "value": "260c653e69ab4dcd900e7b80f484d72225", "domain": "mssdk.bytedance.com", "path": "/", "expires": 1745060541.389392, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "s_v_web_id", "value": "verify_m96yozv9_tjbgIHgD_WqFK_4FdA_Almo_puKt5ij2xXHS", "domain": "www.doubao.com", "path": "/", "expires": 1749207721, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "passport_csrf_token", "value": "43cd1f379f50dd347bee517ac03ee645", "domain": ".doubao.com", "path": "/", "expires": 1749207721.521754, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "passport_csrf_token_default", "value": "43cd1f379f50dd347bee517ac03ee645", "domain": ".doubao.com", "path": "/", "expires": 1749207721.521807, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "d_ticket", "value": "d38bad5cf5ff4678f98557fd6e0fe563cffe3", "domain": ".doubao.com", "path": "/", "expires": 1775991751.931185, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "n_mh", "value": "S0XY0PiWK3OReL4-uvsTcO8U8khkRa_rO60m8GbTK2Y", "domain": ".doubao.com", "path": "/", "expires": 1754823751.93124, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "is_staff_user", "value": "false", "domain": ".doubao.com", "path": "/", "expires": 1749639751.931464, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "gd_random", "value": "eyJtYXRjaCI6ZmFsc2UsInBlcmNlbnQiOjAuODMwNjM2NDU3NTY5NjA0NH0=.ldn0dCaj3jLevuLSTk3mpHUH7yKoupvPSWUWGPB/bIg=", "domain": "www.doubao.com", "path": "/", "expires": 1745060569.557376, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "_ga", "value": "GA1.1.739863920.1744455733", "domain": ".doubao.com", "path": "/", "expires": 1779015753.588604, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "ar_debug", "value": "1", "domain": ".www.google-analytics.com", "path": "/", "expires": 1752231753.764785, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "tt_scid", "value": "3v01THJaohdh5D6Ige2U4OBAqXJsG3UNtFKI6KKB.OGdYasBSKRRff7KicqmZd9W88d2", "domain": "mssdk.bytedance.com", "path": "/", "expires": 1745060541.389445, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "tt_scid", "value": "3v01THJaohdh5D6Ige2U4OBAqXJsG3UNtFKI6KKB.OGdYasBSKRRff7KicqmZd9W88d2", "domain": "www.doubao.com", "path": "/", "expires": 1745060541, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "passport_mfa_token", "value": "CjhH7Ju1a1QkUMd28Hg831MjAs82df92ubmmK2zcIlj033v1MfJA8v93FKUibR%2FAa7xW2tcpr3tCaRpKCjwAAAAAAAAAAAAATt71%2BwIdefQIoUSDAYvZon91o1JzrURokEkwLJpgzjimawcPqmoJ2tb5b4guIW02U4oQsMbuDRj2sdFsIAIiAQMm9SZ7", "domain": ".doubao.com", "path": "/", "expires": 1749639751.931112, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "odin_tt", "value": "ddd75fe97c352ec2760868c47e67fc2fe235f069694e17af65a6976d835d1dc20ca590d43b8fba45b3972a86a4b8b3304502297c88e290b1ec82f6991bdd9fb6", "domain": ".doubao.com", "path": "/", "expires": 1775991751.931215, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "passport_auth_status", "value": "ec520a95a0a628e2aead82c9eaabb59c%2Cf48373e520c3b7914d8b2db3776b4f45", "domain": ".doubao.com", "path": "/", "expires": 1747047751.931264, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "passport_auth_status_ss", "value": "ec520a95a0a628e2aead82c9eaabb59c%2Cf48373e520c3b7914d8b2db3776b4f45", "domain": ".doubao.com", "path": "/", "expires": 1747047751.93129, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "sid_guard", "value": "a93f607d27d469d3fccb3842809f3ae2%7C1744455751%7C5184000%7CWed%2C+11-Jun-2025+11%3A02%3A31+GMT", "domain": ".doubao.com", "path": "/", "expires": 1775559751.931319, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "uid_tt", "value": "e56e15bccea55f25f29ff97c9d9529b8", "domain": ".doubao.com", "path": "/", "expires": 1749639751.931344, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "uid_tt_ss", "value": "e56e15bccea55f25f29ff97c9d9529b8", "domain": ".doubao.com", "path": "/", "expires": 1749639751.931369, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "sid_tt", "value": "a93f607d27d469d3fccb3842809f3ae2", "domain": ".doubao.com", "path": "/", "expires": 1749639751.931394, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "sessionid", "value": "a93f607d27d469d3fccb3842809f3ae2", "domain": ".doubao.com", "path": "/", "expires": 1749639751.931418, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "sessionid_ss", "value": "a93f607d27d469d3fccb3842809f3ae2", "domain": ".doubao.com", "path": "/", "expires": 1749639751.93144, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "sid_ucp_v1", "value": "1.0.0-KDcyNWQ0YTI2NjIzNzMyYTMzZWU3ZjM2MDlkYzcyMmE5YjYwYzY2OTEKIAjq3oDbpc2vBRDHkOm_BhjCsR4gDDCg75a9BjgCQPEHGgJsZiIgYTkzZjYwN2QyN2Q0NjlkM2ZjY2IzODQyODA5ZjNhZTI", "domain": ".doubao.com", "path": "/", "expires": 1749639751.931486, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "ssid_ucp_v1", "value": "1.0.0-KDcyNWQ0YTI2NjIzNzMyYTMzZWU3ZjM2MDlkYzcyMmE5YjYwYzY2OTEKIAjq3oDbpc2vBRDHkOm_BhjCsR4gDDCg75a9BjgCQPEHGgJsZiIgYTkzZjYwN2QyN2Q0NjlkM2ZjY2IzODQyODA5ZjNhZTI", "domain": ".doubao.com", "path": "/", "expires": 1749639751.931511, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "passport_fe_beating_status", "value": "true", "domain": ".www.doubao.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "_ga_G8EP5CG8VZ", "value": "GS1.1.1744455733.1.1.1744455753.0.0.0", "domain": ".doubao.com", "path": "/", "expires": 1779015753.614874, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "msToken", "value": "x-PxVCJ3SMQntBQvIUMJVMjqMLIdtmqSBAoC7JcX1-UKTtwwpcqGc1K4cKBYMMaBvF_vEftMtWvtoHa2wxF9lEps4EM6muxaluloZkgUMANoyhTG-H9XiZKn-B5LIeU=", "domain": "www.doubao.com", "path": "/", "expires": 1745060555, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "ttwid", "value": "1%7CjoNFDV1jXIfnA2fAa1nibi4PBGjMYDbCXtkTgf12aO4%7C1744455769%7C2018c2988c5c6facc2fe2620778202ae375a266be371dc6b8e5180caef72dca8", "domain": ".doubao.com", "path": "/", "expires": 1775991769.899897, "httpOnly": true, "secure": true, "sameSite": "None"}], "origins": [{"origin": "https://www.doubao.com", "localStorage": [{"name": "__tea_cache_first_2018", "value": "1"}, {"name": "flow-web-sidebar-store", "value": "{\"state\":{\"isExpand\":true,\"hasExpandInteracted\":false,\"applicationRecommendMap\":{\"15\":1}},\"version\":0}"}, {"name": "loginTrackMeta", "value": "{\"login_entrance\":\"sign_in\",\"is_from_ug\":\"0\",\"is_from_share\":\"0\"}"}, {"name": "__tea_sdk_ab_version_497858", "value": "{\"data\":{\"ai_space_use_new_download\":{\"val\":true,\"vid\":\"90982815\"},\"always_show_writing_upload_btn\":{\"val\":true,\"vid\":\"90938185\"},\"artifact_share_resource_types\":{\"val\":[2,4],\"vid\":\"90968384\"},\"artifacts_share_button_enable\":{\"val\":true,\"vid\":\"12018345\"},\"auto_exit_skill\":{\"val\":true,\"vid\":\"90125743\"},\"chat_input_new_layout\":{\"val\":true,\"vid\":\"90165874\"},\"chat_list_type\":{\"val\":1,\"vid\":\"90114498\"},\"create_bot_auto_fill_web\":{\"val\":true,\"vid\":\"90117286\"},\"enable_academic_search_in_guidance_page\":{\"val\":true,\"vid\":\"90350953\"},\"enable_ai_read_new_guidance\":{\"val\":true,\"vid\":\"90968141\"},\"enable_ai_space\":{\"val\":true,\"vid\":\"90618308\"},\"enable_ai_space_skill\":{\"val\":true,\"vid\":\"90348277\"},\"enable_asr\":{\"val\":true,\"vid\":\"90127854\"},\"enable_mindmap_preset_prompt\":{\"val\":true,\"vid\":\"90126811\"},\"enable_product_page\":{\"val\":true,\"vid\":\"90626468\"},\"enable_read_canvas\":{\"val\":true,\"vid\":\"90350805\"},\"enable_samantha_protocol_skill_id_11\":{\"val\":1,\"vid\":\"90922029\"},\"enable_samantha_protocol_skill_id_5\":{\"val\":1,\"vid\":\"11134708\"},\"enable_samantha_protocol_skill_id_9\":{\"val\":1,\"vid\":\"11773112\"},\"enable_search_sider_bar\":{\"val\":{\"use_sider_bar\":true,\"use_switch\":false},\"vid\":\"90964928\"},\"enable_tts\":{\"val\":true,\"vid\":\"90168264\"},\"image_guidance_page_chat_input_position\":{\"val\":\"center\",\"vid\":\"90962683\"},\"input_upload_aispace_enable\":{\"val\":true,\"vid\":\"90941721\"},\"input_upload_code_enable\":{\"val\":true,\"vid\":\"90941722\"},\"landing_to_new_chat\":{\"val\":false,\"vid\":\"90114864\"},\"libra_calc\":{\"val\":0,\"vid\":\"8229365\"},\"message_action_share_position\":{\"val\":\"end\",\"vid\":\"90616154\"},\"message_tea_ab\":{\"val\":2,\"vid\":\"90956453\"},\"new_ai_search_guidance_page\":{\"val\":true,\"vid\":\"90132584\"},\"new_pdf_viewer\":{\"val\":\"1\",\"vid\":\"90622433\"},\"new_search_ref_show\":{\"val\":true,\"vid\":\"90128559\"},\"new_user_guide_enable_entry\":{\"val\":true,\"vid\":\"90358420\"},\"new_user_guide_enable_lottery_1\":{\"val\":true,\"vid\":\"90358511\"},\"new_writing_skill\":{\"val\":true,\"vid\":\"90123022\"},\"pdf_guidance_mf\":{\"val\":true,\"vid\":\"90331482\"},\"read_download_translation\":{\"val\":true,\"vid\":\"90622494\"},\"share_image_select_modal\":{\"val\":true,\"vid\":\"90975136\"},\"show_create_doc_by_message_action_button\":{\"val\":true,\"vid\":\"90968623\"},\"show_editorTools_in_header\":{\"val\":true,\"vid\":\"12140978\"},\"show_large_onboarding_avatar\":{\"val\":true,\"vid\":\"90114863\"},\"show_pwa_guide\":{\"val\":true,\"vid\":\"90114503\"},\"show_writing_online_btn\":{\"val\":true,\"vid\":\"90609211\"},\"upload_optimization\":{\"val\":true,\"vid\":\"90970898\"}},\"uuid\":\"7490524713370813964\",\"timestamp\":1744455770075,\"ab_version_multilink\":[],\"ab_ext_version\":[],\"ab_version\":[\"90618308\",\"90941721\",\"90941722\"]}"}, {"name": "libra_setting_input_upload_code_enable", "value": "true"}, {"name": "xmsi", "value": "4"}, {"name": "__tea_cache_first_497858", "value": "1"}, {"name": "flow-web-code-block-theme-store", "value": "{\"state\":{\"codeBlockMode\":\"light\"},\"version\":0}"}, {"name": "tt_scid", "value": "3v01THJaohdh5D6Ige2U4OBAqXJsG3UNtFKI6KKB.OGdYasBSKRRff7KicqmZd9W88d2"}, {"name": "https://www.doubao.com-operation", "value": "true"}, {"name": "libra_setting_enable_ai_space", "value": "true"}, {"name": "lib_fg__tea", "value": "{\"ai_space_use_new_download\":true,\"always_show_writing_upload_btn\":true,\"artifact_share_resource_types\":[2,4],\"artifacts_share_button_enable\":true,\"auto_exit_skill\":true,\"chat_input_new_layout\":true,\"chat_list_type\":1,\"create_bot_auto_fill_web\":true,\"enable_academic_search_in_guidance_page\":true,\"enable_ai_read_new_guidance\":true,\"enable_ai_space\":true,\"enable_ai_space_skill\":true,\"enable_asr\":true,\"enable_mindmap_preset_prompt\":true,\"enable_product_page\":true,\"enable_read_canvas\":true,\"enable_samantha_protocol_skill_id_11\":1,\"enable_samantha_protocol_skill_id_5\":1,\"enable_samantha_protocol_skill_id_9\":1,\"enable_search_sider_bar\":{\"use_sider_bar\":true,\"use_switch\":false},\"enable_tts\":true,\"image_guidance_page_chat_input_position\":\"center\",\"input_upload_aispace_enable\":true,\"input_upload_code_enable\":true,\"landing_to_new_chat\":false,\"libra_calc\":false,\"message_action_share_position\":\"end\",\"message_tea_ab\":2,\"new_ai_search_guidance_page\":true,\"new_pdf_viewer\":\"1\",\"new_search_ref_show\":true,\"new_user_guide_enable_entry\":true,\"new_user_guide_enable_lottery_1\":true,\"new_writing_skill\":true,\"pdf_guidance_mf\":true,\"read_download_translation\":true,\"share_image_select_modal\":true,\"show_create_doc_by_message_action_button\":true,\"show_editorTools_in_header\":true,\"show_large_onboarding_avatar\":true,\"show_pwa_guide\":true,\"show_writing_online_btn\":true,\"upload_optimization\":true}"}, {"name": "ttcid", "value": "260c653e69ab4dcd900e7b80f484d72225"}, {"name": "msToken", "value": "x-PxVCJ3SMQntBQvIUMJVMjqMLIdtmqSBAoC7JcX1-UKTtwwpcqGc1K4cKBYMMaBvF_vEftMtWvtoHa2wxF9lEps4EM6muxaluloZkgUMANoyhTG-H9XiZKn-B5LIeU="}, {"name": "__tea_cache_tokens_2562", "value": "{\"web_id\":\"7490524851120604687\",\"user_unique_id\":\"3024113775947626\",\"timestamp\":1744455754910,\"_type_\":\"default\"}"}, {"name": "hasEnterGuest", "value": "0"}, {"name": "", "value": ""}, {"name": "__tea_cache_tokens_2018", "value": "{\"web_id\":\"7490524772289447476\",\"user_unique_id\":\"verify_m96yozv9_tjbgIHgD_WqFK_4FdA_Almo_puKt5ij2xXHS\",\"timestamp\":1744455744052,\"_type_\":\"default\"}"}, {"name": "xmst", "value": "D_suFqVzZ6lrFD94QPuNhrpHc1BfLbcminZjj6SpYIJbe-V-KWqysKdzkJ3I2YUmWxsTkZEGHzDkl-oHL9nOTgH3KVV992JCjVOmF4anjIVb-C3MAj-QYJ2lODb85bo="}, {"name": "xmstr", "value": "{\"sTm\":1744455751956,\"acc\":284}"}, {"name": "__tea_cache_refer_497858", "value": "{\"refer_key\":\"\",\"refer_title\":\"\u8c46\u5305\",\"refer_manual_key\":\"\",\"routeChange\":false}"}, {"name": "for_ban_appeal_sec_user_id", "value": "MS4wLjABAAAAW5dkHk2Z7DGwIkowxoB0Er1jrB5nclx3Y-1bc0rxB8ElFAL_KpxufqvMIMmNeGJ_"}, {"name": "new-user-guide-open-panel-key", "value": "1"}, {"name": "i18nextLng", "value": "zh"}, {"name": "libra_setting_input_upload_aispace_enable", "value": "true"}, {"name": "__tea_cache_tokens_497858", "value": "{\"web_id\":\"7490524713370813964\",\"user_unique_id\":\"7490524713370813964\",\"timestamp\":1744455769918,\"_type_\":\"default\"}"}, {"name": "libra_setting_new_guest_guidance_type", "value": "\"normal\""}, {"name": "libra_setting_new_chat_input", "value": "\"true\""}, {"name": "SLARDARflow_web", "value": "JTdCJTIydXNlcklkJTIyOiUyMjE2Zjc2YWIzLTIyNTEtNDc2Zi05ZGNjLWQxYjJkMDAxYTkzNSUyMiwlMjJkZXZpY2VJZCUyMjolMjI4MGY3MTA0Ny03YTVkLTRmY2YtOWI4OS0xOTY1MmI3Zjc4M2YlMjIsJTIyZXhwaXJlcyUyMjoxNzUyMjMxNzcwMDEyJTdE"}, {"name": "flow_tea_user_id", "value": "3024113775947626"}, {"name": "flow_web_has_login", "value": "true"}, {"name": "flow_user_country", "value": "CN"}, {"name": "__tea_cache_first_2562", "value": "1"}]}]} \ No newline at end of file diff --git a/data/session/kimi.json b/data/session/kimi.json new file mode 100644 index 0000000..d14e8e5 --- /dev/null +++ b/data/session/kimi.json @@ -0,0 +1 @@ +{"cookies": [{"name": "HMACCOUNT_BFESS", "value": "115ECD849050617F", "domain": ".hm.baidu.com", "path": "/", "expires": 1785204637.568921, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "Hm_lvt_358cae4815e85d48f7e8ab7f3680a74b", "value": "1750644638", "domain": ".www.kimi.com", "path": "/", "expires": 1782180637, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "Hm_lpvt_358cae4815e85d48f7e8ab7f3680a74b", "value": "1750644638", "domain": ".www.kimi.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "HMACCOUNT", "value": "115ECD849050617F", "domain": ".www.kimi.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "_gcl_au", "value": "1.1.691043833.1750644638", "domain": ".kimi.com", "path": "/", "expires": 1758420637, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "_ga", "value": "GA1.1.869667086.1750644638", "domain": ".kimi.com", "path": "/", "expires": 1785204637.930397, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "_ga_YXD8W70SZP", "value": "GS2.1.s1750644637$o1$g0$t1750644637$j60$l0$h0", "domain": ".kimi.com", "path": "/", "expires": 1785204637.939397, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "test_cookie", "value": "CheckForPermission", "domain": ".doubleclick.net", "path": "/", "expires": 1750645538.480407, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "__snaker__id", "value": "5bNi9UWb1Q4URTPr", "domain": "www.kimi.com", "path": "/", "expires": 1782180640, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "gdxidpyhxdE", "value": "73pkl6chyuUUOtaxDB4cUePK2o%5C8GVz%2FDfu1z6x2EaAP5lI%2BRTWl6gEAUS8p8qtUWYKhdn4qG1tu58ZU3mgiOWkDDhj%5Cexf%2BH4%5CPy5jafOTGBbV6oKAZLLsuAW%5Ca6iLpuNefMD3aSUASMgW3jqsmTS0ucvvbAR%2FM%2BpAl1Uh66rvuMyG6%3A1750645543020", "domain": "www.kimi.com", "path": "/", "expires": 1753237543, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "kimi-auth", "value": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ1c2VyLWNlbnRlciIsImV4cCI6MTc1MzIzNjY3MSwiaWF0IjoxNzUwNjQ0NjcxLCJqdGkiOiJkMWNiZmZ1ZjJrcWN0cjZnNGtrMCIsInR5cCI6ImFjY2VzcyIsImFwcF9pZCI6ImtpbWkiLCJzdWIiOiJjcWc2YTRzdWR1NjlpdGIxbmVvZyIsInNwYWNlX2lkIjoiY3FnNmE0c3VkdTY5aXRiMW5lbzAiLCJhYnN0cmFjdF91c2VyX2lkIjoiY3FnNmE0c3VkdTY5aXRiMW5lbmciLCJyb2xlcyI6WyJ2aWRlb19nZW5fYWNjZXNzIl0sInNzaWQiOiIxNzMxMzUyNTgxNzk4ODE3NDc3IiwiZGV2aWNlX2lkIjoiNzUxODk2MTQ2NzEyNzk1MDg1NyJ9.7ZPRIuuDxjaCwxbhLxNN1CTfVJZWokAJa8Kdwf2N2pkCBrpFhvp7m-pnYCLxcGrXumAChxhqFpPhaNBr1SD-9g", "domain": "www.kimi.com", "path": "/", "expires": 1782180671.102793, "httpOnly": true, "secure": true, "sameSite": "Strict"}], "origins": [{"origin": "https://www.kimi.com", "localStorage": [{"name": "anonymous_access_token", "value": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ1c2VyLWNlbnRlciIsImV4cCI6MTc1MzIzNjYzOSwiaWF0IjoxNzUwNjQ0NjM5LCJqdGkiOiJkMWNiZjdzbjkwN2Zlc3Jub285MCIsInR5cCI6ImFjY2VzcyIsImFwcF9pZCI6ImtpbWkiLCJzc2lkIjoiMTczMTM1MjU4MTc5ODgxNzQ3NyIsImRldmljZV9pZCI6Ijc1MTg5NjE0NjcxMjc5NTA4NTcifQ.bHHRw-5Gpea1i4Y5Nulz_s27mVRncP2oNE3B1ZWNyxIwYEKlo1ZFrtRMlQhTmdL8Dh0rwnCaJe1ha8iynF_tNA"}, {"name": "KIMI_SIDEBAR_COLLAPSE", "value": "false"}, {"name": "KIMI_MEMORY_EDUCATION", "value": "false"}, {"name": "anonymous_refresh_token", "value": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ1c2VyLWNlbnRlciIsImV4cCI6MTc1ODQyMDYzOSwiaWF0IjoxNzUwNjQ0NjM5LCJqdGkiOiJkMWNiZjdzbjkwN2Zlc3Jub285ZyIsInR5cCI6InJlZnJlc2giLCJhcHBfaWQiOiJraW1pIiwic3NpZCI6IjE3MzEzNTI1ODE3OTg4MTc0NzciLCJkZXZpY2VfaWQiOiI3NTE4OTYxNDY3MTI3OTUwODU3In0.2yiqO-z-qZbXXQVUP7vDh--NpMyYztRzFgN60lamaxZIOoxi6DnXDI6ZYzdXzEWv6HiG3nc3LmXoLjVvYi_dwA"}, {"name": "showNavList", "value": "true"}, {"name": "__tea_cache_tokens_20001731", "value": "{\"web_id\":\"7518961467127950857\",\"user_unique_id\":\"cqg6a4sudu69itb1neog\",\"timestamp\":1750644671219,\"_type_\":\"default\"}"}, {"name": "Hm_lvt_358cae4815e85d48f7e8ab7f3680a74b", "value": "1782180637574|1750644638"}, {"name": "_gcl_ls", "value": "{\"schema\":\"gcl\",\"version\":1,\"gcl_ctr\":{\"value\":{\"value\":0,\"creationTimeMs\":1750644637902},\"expires\":1758420637902}}"}, {"name": "__snaker__id", "value": ""}, {"name": "KIMI_RESEARCHER_EDUCATION", "value": "false"}, {"name": "ntes_utid", "value": "tid._.k3oakqQF1qpAA1BVFBfWK5LJkfYjlO1u._.0.,.edd._.._.0"}, {"name": "__tea_sdk_ab_version_20001731", "value": "{\"data\":{\"PPT_template_page_version\":{\"val\":\"2\",\"vid\":\"332508\"},\"n2s_memory_client\":{\"val\":0,\"vid\":\"324150\"},\"search_switch_new_ui\":{\"val\":false,\"vid\":\"326892\"},\"upload_audio_enable\":{\"val\":false,\"vid\":\"329715\"}},\"uuid\":\"cqg6a4sudu69itb1neog\",\"timestamp\":1750644671283,\"ab_version_multilink\":[],\"ab_ext_version\":[],\"ab_version\":[\"332508\",\"324150\",\"326892\",\"329715\"]}"}, {"name": "refresh_token", "value": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ1c2VyLWNlbnRlciIsImV4cCI6MTc1ODQyMDY3MSwiaWF0IjoxNzUwNjQ0NjcxLCJqdGkiOiJkMWNiZmZ1ZjJrcWN0cjZnNGtrZyIsInR5cCI6InJlZnJlc2giLCJhcHBfaWQiOiJraW1pIiwic3ViIjoiY3FnNmE0c3VkdTY5aXRiMW5lb2ciLCJzcGFjZV9pZCI6ImNxZzZhNHN1ZHU2OWl0YjFuZW8wIiwiYWJzdHJhY3RfdXNlcl9pZCI6ImNxZzZhNHN1ZHU2OWl0YjFuZW5nIiwicm9sZXMiOlsidmlkZW9fZ2VuX2FjY2VzcyJdLCJzc2lkIjoiMTczMTM1MjU4MTc5ODgxNzQ3NyIsImRldmljZV9pZCI6Ijc1MTg5NjE0NjcxMjc5NTA4NTcifQ.RJXKwtsxtO89lg4rjyx4Xm4sKrgfCWBdpWiCHeOlzzUxV0bAYutw0R_oxKWMV0HUjdoKxRmuJBneIxRThGtMgA"}, {"name": "ujg3ps2znyw", "value": "n6Lect7rx4tFQ0BRFFKTOtacwbIh+jTK"}, {"name": "/_2752f01d87dc45948de1a1e0ac2b7160_NECAPTCHA_ERROR_COUNTS", "value": "0"}, {"name": "__tea_cache_refer_20001731", "value": "{\"refer_key\":\"\",\"refer_title\":\"Kimi - \u4f1a\u63a8\u7406\u89e3\u6790\uff0c\u80fd\u6df1\u5ea6\u601d\u8003\u7684AI\u52a9\u624b\",\"refer_manual_key\":\"\",\"routeChange\":false}"}, {"name": "APMPLUS__cache__server__config__566559", "value": "{\"sample\":{\"sample_rate\":1,\"include_users\":[],\"sample_granularity\":\"session\",\"rules\":[{\"name\":\"js_error\",\"enable\":true,\"sample_rate\":0.01,\"conditional_sample_rules\":[]},{\"name\":\"http\",\"enable\":false,\"sample_rate\":0,\"conditional_sample_rules\":[]},{\"name\":\"performance\",\"enable\":false,\"sample_rate\":0,\"conditional_sample_rules\":[]},{\"name\":\"resource_error\",\"enable\":true,\"sample_rate\":0.01,\"conditional_sample_rules\":[]},{\"name\":\"resource\",\"enable\":false,\"sample_rate\":0,\"conditional_sample_rules\":[]},{\"name\":\"custom\",\"enable\":true,\"sample_rate\":1,\"conditional_sample_rules\":[]},{\"name\":\"performance_timing\",\"enable\":false,\"sample_rate\":0,\"conditional_sample_rules\":[]},{\"name\":\"performance_longtask\",\"enable\":true,\"sample_rate\":0.01,\"conditional_sample_rules\":[]},{\"name\":\"pageview\",\"enable\":true,\"sample_rate\":1,\"conditional_sample_rules\":[]},{\"name\":\"action\",\"enable\":true,\"sample_rate\":0.01,\"conditional_sample_rules\":[]},{\"name\":\"blank_screen\",\"enable\":true,\"sample_rate\":0.01,\"conditional_sample_rules\":[]}]},\"status\":0,\"timestamp\":1750644638696}"}, {"name": "selectModelName", "value": "kimi"}, {"name": "APMPLUS566559", "value": "JTdCJTIydXNlcklkJTIyOiUyMjRjNzBkY2EyLWZhMjctNGQ0Yi1iMTZjLWFkZjE2YmMyZmE4ZiUyMiwlMjJkZXZpY2VJZCUyMjolMjIzMGM2Nzk2Ni01ODJiLTQ2NDUtYTI5Yy1hMjUyMGVkMzFjOTAlMjIsJTIyciUyMjowLjkxMjUxNTU0MTEzOTY3NDQsJTIyZXhwaXJlcyUyMjoxNzU4NDIwNjM4MTY4JTdE"}, {"name": "access_token", "value": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ1c2VyLWNlbnRlciIsImV4cCI6MTc1MzIzNjY3MSwiaWF0IjoxNzUwNjQ0NjcxLCJqdGkiOiJkMWNiZmZ1ZjJrcWN0cjZnNGtrMCIsInR5cCI6ImFjY2VzcyIsImFwcF9pZCI6ImtpbWkiLCJzdWIiOiJjcWc2YTRzdWR1NjlpdGIxbmVvZyIsInNwYWNlX2lkIjoiY3FnNmE0c3VkdTY5aXRiMW5lbzAiLCJhYnN0cmFjdF91c2VyX2lkIjoiY3FnNmE0c3VkdTY5aXRiMW5lbmciLCJyb2xlcyI6WyJ2aWRlb19nZW5fYWNjZXNzIl0sInNzaWQiOiIxNzMxMzUyNTgxNzk4ODE3NDc3IiwiZGV2aWNlX2lkIjoiNzUxODk2MTQ2NzEyNzk1MDg1NyJ9.7ZPRIuuDxjaCwxbhLxNN1CTfVJZWokAJa8Kdwf2N2pkCBrpFhvp7m-pnYCLxcGrXumAChxhqFpPhaNBr1SD-9g"}, {"name": "__tea_cache_first_20001731", "value": "1"}]}]} \ No newline at end of file diff --git a/data/session/metaso.json b/data/session/metaso.json new file mode 100644 index 0000000..def56db --- /dev/null +++ b/data/session/metaso.json @@ -0,0 +1 @@ +{"cookies": [{"name": "JSESSIONID", "value": "CF1913BA8B96FB6E13F5B1CEC6F27E11", "domain": "metaso.cn", "path": "/api", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "Lax"}, {"name": "aliyungf_tc", "value": "fa6a272600d01d75331bfb3923ae30596fff2fcf1e73de707d93a91190ca3e26", "domain": "metaso.cn", "path": "/", "expires": -1, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "tid", "value": "20fca7c4-aac5-413f-a823-027ae3136cb2", "domain": ".metaso.cn", "path": "/", "expires": 1779965892.634494, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "__eventn_id_UMO2dYNwFz", "value": "5n5v2i1e60", "domain": ".metaso.cn", "path": "/", "expires": 1779965892.842099, "httpOnly": false, "secure": true, "sameSite": "Lax"}, {"name": "newSearch", "value": "false", "domain": "metaso.cn", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "hideLeftMenu", "value": "1", "domain": "metaso.cn", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "traceid", "value": "9fea3356e3fa447c", "domain": ".metaso.cn", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "sid", "value": "e80bf5b84841415e9ac6352bcd366354", "domain": ".metaso.cn", "path": "/", "expires": 1746701938.049112, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "uid", "value": "6808c7f28f8e8e812886c9eb", "domain": ".metaso.cn", "path": "/", "expires": 1746701938.049146, "httpOnly": false, "secure": true, "sameSite": "None"}], "origins": [{"origin": "https://metaso.cn", "localStorage": [{"name": "firstVisitTime", "value": "1745405892638"}, {"name": "usermaven_offline_queue_default_data", "value": "{\"queue\":\"[]\"}"}, {"name": "lastLoginTime", "value": "1745405938051"}, {"name": "defaultSubjectId", "value": "8603338435336781824"}, {"name": "keepSession", "value": "true"}, {"name": "pptConfig", "value": "{\"femaleTimbres\":[{\"default\":true,\"icon\":null,\"label\":\"\u9ed8\u8ba4\u5973\u58f0\",\"value\":\"uk_woman16\"},{\"default\":false,\"icon\":null,\"label\":\"\u9633\u5149\u5973\u5b69\",\"value\":\"female-shaonv\"},{\"default\":false,\"icon\":null,\"label\":\"\u9ad8\u51b7\u5fa1\u59d0\",\"value\":\"female-yujie\"},{\"default\":false,\"icon\":null,\"label\":\"\u90bb\u5c45\u963f\u59e8\",\"value\":\"female-chengshu-jingpin\"},{\"default\":false,\"icon\":null,\"label\":\"\u5520\u53e8\u5976\u5976\",\"value\":\"Chinese (Mandarin)_Kind-hearted_Elder\"},{\"default\":false,\"icon\":null,\"label\":\"\u5fc3\u7075\u9e21\u6c64\",\"value\":\"female-tianmei\"}],\"pptLanguage\":[{\"default\":true,\"icon\":null,\"label\":\"\u4e2d\u6587\",\"value\":\"cn\"},{\"default\":false,\"icon\":null,\"label\":\"English\",\"value\":\"en\"}],\"userLevel\":[{\"default\":false,\"icon\":\"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \",\"label\":\"\u521d\u5b66\u8005\",\"value\":\"1\"},{\"default\":true,\"icon\":\"\\r\\n \\r\\n \\r\\n \",\"label\":\"\u8fdb\u9636\u8005\",\"value\":\"2\"},{\"default\":false,\"icon\":\"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \",\"label\":\"\u4e13\u5bb6\",\"value\":\"3\"}],\"accentTimbres\":[{\"default\":true,\"icon\":null,\"label\":\"\u9655\u897f\u638c\u67dc\",\"value\":\"\u9655\u897f\u638c\u67dc\"},{\"default\":false,\"icon\":null,\"label\":\"\u4e1c\u5317\u5927\u59b9\",\"value\":\"\u4e1c\u5317\u5927\u59b9\"},{\"default\":false,\"icon\":null,\"label\":\"\u5317\u4eac\u5c0f\u7237\",\"value\":\"\u5317\u4eac\u5c0f\u7237\"},{\"default\":false,\"icon\":null,\"label\":\"\u5ddd\u6e1d\u840c\u59b9\",\"value\":\"\u5ddd\u6e1d\u840c\u59b9\"},{\"default\":false,\"icon\":null,\"label\":\"\u6e7e\u533a\u5927\u53d4\",\"value\":\"\u6e7e\u533a\u5927\u53d4\"}],\"exmpales\":[{\"default\":true,\"icon\":null,\"label\":\"\u4e2d\u56fd\u5c0f\u767e\u79d1\u5168\u4e66 \u7b2c\u4e94\u5377 \u6280\u672f\u79d1\u5b66\uff08\u56db\uff09\",\"value\":\"{\\r\\n \\\"docId\\\": \\\"1d161720-0d49-4dfa-b902-4d010dcde3bd\\\",\\r\\n \\\"title\\\": \\\"\u4e2d\u56fd\u5c0f\u767e\u79d1\u5168\u4e66 \u7b2c\u4e94\u5377 \u6280\u672f\u79d1\u5b66\uff08\u56db\uff09\\\",\\r\\n \\\"authors\\\": \\\"\\\",\\r\\n \\\"summary\\\": \\\"\u3010\u6b66\u5668\u3011\u53c8\u79f0\u5175\u5668\u3002\\\\n\u4e00\u822c\u6307\u76f4\u63a5\u7528\u4e8e\u6740\u4f24\u654c\u65b9\u6709\u751f\u529b\u91cf\u6216\u7834\u574f\u654c\u65b9\u8bbe\u65bd\u7684\u519b\u4e8b\u88c5\u5907\u3002\\\\n\u6b66\u5668\u6709\u8bb8\u591a\u4e0d\u540c\u7684\u5206\u7c7b\u65b9\u6cd5\uff0c\u6309\u53d1\u5c55\u5386\u53f2\u5206\u6709\u53e4\u4ee3\u5175\u5668\u3001\u8fd1\u4ee3\u5175\u5668\u548c\u73b0\u4ee3\u5175\u5668\uff1b\u6309\u6240\u7528\u80fd\u6e90\u5206\u6709\u51b7\u5175\u5668\u548c\u706b\u5668\uff1b\u6309\u5236\u9020\u7528\u6750\u5206\u6709\u77f3\uff08\u9aa8\uff09\u5175\u5668\u3001\u94dc\u5175\u5668\u548c\u94c1\u5175\u5668\uff1b\u6309\u5728\u6218\u4e89\u4e2d\u7684\u4f5c\u7528\u5206\u6709\u6218\u7565\u6b66\u5668\u548c\u6218\u672f\u6b66\u5668\uff1b\u6309\u6280\u672f\u5bc6\u96c6\u7a0b\u5ea6\u5206\u6709\u5e38\u89c4\u6b66\u5668\u548c\u5c16\u7aef\u6b66\u5668\uff1b\u6309\u4f7f\u7528\u5bf9\u8c61\u5206\u6709\u519b\u7528\u6b66\u5668\u548c\u6c11\u7528\u6b66\u5668\u3002\\\",\\r\\n \\\"coverBase64\\\": \\\"data:image/jpeg;base64,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\\\",\\r\\n \\\"coverUrl\\\": null,\\r\\n \\\"publisher\\\": null,\\r\\n \\\"date\\\": null,\\r\\n \\\"reads\\\": null,\\r\\n \\\"pageCount\\\": 1242\\r\\n}\"},{\"default\":false,\"icon\":null,\"label\":\"FM 21-150 Table of Contents\",\"value\":\"{\\r\\n \\\"docId\\\": \\\"082feb9b-3696-48ff-8c0a-06a5ae4d576f\\\",\\r\\n \\\"title\\\": \\\"FM 21-150 Table of Contents\\\",\\r\\n \\\"authors\\\": \\\"HEADQUARTERS DEPARTMENT OF THE ARMY\\\",\\r\\n \\\"summary\\\": \\\"Section IV\\\\nFIELD-EXPEDIENT WEAPONS\\\\nTo survive, the soldier in combat must be able to deal with any situation that develops.\\\\nHis ability to adapt any nearby object for use as a weapon in a win-or-die situation is limited only by his ingenuity and resourcefulness.\\\\nPossible weapons, although not discussed herein, include ink pens or pencils; canteens tied to string to be swung; snap links at the end of sections of rope; kevlar helmets; sand, rocks, or liquids thrown into the enemy's eyes; or radio antennas.\\\\nThe following techniques demonstrate a few expedient weapons that are readily available to most soldiers for defense and counterattack against the bayonet and rifle with fixed bayonet.\\\",\\r\\n \\\"coverBase64\\\": \\\"data:image/jpeg;base64,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\\\",\\r\\n \\\"coverUrl\\\": null,\\r\\n \\\"publisher\\\": \\\"Judo Info\\\",\\r\\n \\\"date\\\": \\\"1992-09-30\\\",\\r\\n \\\"reads\\\": null,\\r\\n \\\"pageCount\\\": 223\\r\\n}\"},{\"default\":false,\"icon\":null,\"label\":\"WEAPONS\",\"value\":\"{\\r\\n \\\"docId\\\": \\\"5ca20701-c8ad-4495-91d2-300d9b11c4ea\\\",\\r\\n \\\"title\\\": \\\"WEAPONS\\\",\\r\\n \\\"authors\\\": \\\"\\\",\\r\\n \\\"summary\\\": \\\"instead of a squad support weapon.\\\\nCost: 3,000 Credits.\\\\nRarity: 6.\\\\nHard Points: 1 remaining.\\\\nMarksman Barrel: Increase weapon range by one band.\\\\nTelescopic Optical Sight: -1 at Long or Extreme range.\\\",\\r\\n \\\"coverBase64\\\": \\\"data:image/jpeg;base64,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\\\",\\r\\n \\\"coverUrl\\\": null,\\r\\n \\\"publisher\\\": \\\"The Eye\\\",\\r\\n \\\"date\\\": null,\\r\\n \\\"reads\\\": null,\\r\\n \\\"pageCount\\\": 5\\r\\n}\"}],\"scenes\":[{\"default\":true,\"icon\":null,\"label\":\"\u8bfe\u5802\",\"value\":\"\u9ed8\u8ba4\"},{\"default\":false,\"icon\":null,\"label\":\"\u8bb2\u6545\u4e8b\",\"value\":\"\u8bb2\u6545\u4e8b\"},{\"default\":false,\"icon\":null,\"label\":\"\u5bf9\u8bdd\",\"value\":\"\u7537\u5973\u5bf9\u8bdd\"},{\"default\":false,\"icon\":null,\"label\":\"\u66b4\u8e81\u8001\u54e5\",\"value\":\"\u66b4\u8e81\"},{\"default\":false,\"icon\":null,\"label\":\"\u901f\u8bb2\",\"value\":\"\u901f\u8bb2\"},{\"default\":false,\"icon\":null,\"label\":\"\u8bd7\u7ecf\",\"value\":\"\u8bd7\u7ecf\"},{\"default\":false,\"icon\":null,\"label\":\"\u5feb\u677f\",\"value\":\"\u5feb\u677f\"},{\"default\":false,\"icon\":null,\"label\":\"\u594f\u6298\",\"value\":\"\u594f\u6298\"},{\"default\":false,\"icon\":null,\"label\":\"\u5b54\u5b50\",\"value\":\"\u5b54\u5b50\"},{\"default\":false,\"icon\":null,\"label\":\"\u5c0f\u8bf4\",\"value\":\"\u77ed\u7bc7\u5c0f\u8bf4\"},{\"default\":false,\"icon\":null,\"label\":\"\u7231\u56e0\u65af\u5766\",\"value\":\"\u7231\u56e0\u65af\u5766\"},{\"default\":false,\"icon\":null,\"label\":\"\u5c3c\u91c7\",\"value\":\"\u5c3c\u91c7\"},{\"default\":false,\"icon\":null,\"label\":\"\u82cf\u683c\u62c9\u5e95\",\"value\":\"\u82cf\u683c\u62c9\u5e95\"},{\"default\":false,\"icon\":null,\"label\":\"\u838e\u58eb\u6bd4\u4e9a\",\"value\":\"\u838e\u58eb\u6bd4\u4e9a\"},{\"default\":false,\"icon\":null,\"label\":\"\u9a6c\u4e01\u8def\u5fb7\u91d1\",\"value\":\"\u9a6c\u4e01\u00b7\u8def\u5fb7\u00b7\u91d1\"},{\"default\":false,\"icon\":null,\"label\":\"\u6d77\u5b50\",\"value\":\"\u6d77\u5b50\"},{\"default\":false,\"icon\":null,\"label\":\"\u5f20\u7231\u73b2\",\"value\":\"\u5f20\u7231\u73b2\"},{\"default\":false,\"icon\":null,\"label\":\"\u6b66\u4fa0\",\"value\":\"\u6b66\u4fa0\"},{\"default\":false,\"icon\":null,\"label\":\"\u60ac\u7591\",\"value\":\"\u60ac\u7591\"},{\"default\":false,\"icon\":null,\"label\":\"\u5c48\u539f\",\"value\":\"\u695a\u8f9e\"},{\"default\":false,\"icon\":null,\"label\":\"\u674e\u767d\",\"value\":\"\u674e\u767d\"},{\"default\":false,\"icon\":null,\"label\":\"\u62ff\u7834\u4ed1\",\"value\":\"\u62ff\u7834\u4ed1\"},{\"default\":false,\"icon\":null,\"label\":\"\u5947\u5e7b\",\"value\":\"\u5947\u5e7b\"}],\"ttsLanguage\":[{\"default\":true,\"icon\":null,\"label\":\"\u4e2d\u6587\",\"value\":\"cn\"},{\"default\":false,\"icon\":null,\"label\":\"English\",\"value\":\"en\"}],\"maleTimbres\":[{\"default\":false,\"icon\":null,\"label\":\"\u9ed8\u8ba4\u7537\u58f0\",\"value\":\"Chinese (Mandarin)_Radio_Host\"},{\"default\":false,\"icon\":null,\"label\":\"\u6e05\u723d\u7537\u5927\",\"value\":\"male-qn-daxuesheng\"},{\"default\":false,\"icon\":null,\"label\":\"\u51b7\u9177\u54e5\u54e5\",\"value\":\"lengdan_xiongzhang\"},{\"default\":false,\"icon\":null,\"label\":\"\u5f00\u6717\u5b66\u957f\",\"value\":\"junlang_nanyou\"},{\"default\":false,\"icon\":null,\"label\":\"\u5e7d\u9ed8\u53d4\u53d4\",\"value\":\"presenter_male\"},{\"default\":false,\"icon\":null,\"label\":\"\u667a\u6167\u5927\u7237\",\"value\":\"Chinese (Mandarin)_Humorous_Elder\"}]}"}, {"name": "data-store", "value": "{\"state\":{\"searchHistory\":[{\"createTime\":1745405901927,\"engineType\":\"\",\"groupId\":\"8603338281662857216\",\"id\":\"8603338281662857216\",\"label\":\"all\",\"languageDomain\":\"all\",\"mode\":\"detail\",\"owner\":\"guest\",\"question\":\"2025\u524d\u7aef\u5de5\u5177\u5e93top5\",\"resultCount\":0,\"searchTopicHideLogo\":false,\"updateTime\":1745405901927,\"merged\":true}],\"s\":{\"d\":1745405892687,\"dt\":\"MTU=\",\"adt\":\"MQ==\"},\"addBookCount\":0,\"isHydrated\":true,\"isTraditionalSearchEngineModeActive\":false,\"showHistory\":false,\"needSyncHistory\":false,\"maxTimes\":15,\"maxAdvanceTime\":1},\"version\":1}"}, {"name": "shareLink", "value": "https://metaso.cn/s/fipDgXL"}, {"name": "local-sid", "value": "e80bf5b84841415e9ac6352bcd366354"}, {"name": "recover-home-search-box-text", "value": "0"}, {"name": "defaultSubjectName", "value": "\u5de5\u4f5c"}, {"name": "firstPage", "value": "https://metaso.cn/"}, {"name": "chat-next-web-store-user", "value": "{\"state\":{\"login\":true,\"userInfo\":{\"metaLawPackageSupportGift\":false,\"rewriteLevel\":1,\"watchNoviceGuide\":false,\"creditTotal\":5000,\"searchCount\":0,\"aiGenerateImageTimes\":0,\"openNoPaper\":false,\"teamMember\":false,\"isTeamActive\":0,\"teamAiGenerateWordCount\":0,\"teamDailyTranslateLimit\":0,\"id\":5601562,\"teamWordCountByChar\":false,\"teamCoinsBalance\":0,\"teamCoinsQuota\":0,\"extensionReadingEnable\":true,\"activeDays\":0,\"creditRest\":5000,\"phone\":\"15511601408\",\"secondaryUrlCount\":0,\"sensitiveOpen\":true,\"expiryDate\":\"1970/01/01 08:00:00\",\"hasReceivedActiveBonus\":false,\"uid\":\"6808c7f28f8e8e812886c9eb\",\"generateWordCount\":0,\"share\":false,\"metasoApiCredit\":0,\"teamAiGenerateImageTimes\":0,\"teamDailyCheckLimit\":0,\"teamDailyTextToSpeechLimit\":0,\"amount\":0,\"showHeader\":true,\"userSource\":\"\",\"showLegalDefinition\":1,\"updateTime\":1745405939000,\"generateWordTotalLimit\":0,\"autoCheck\":true,\"userName\":\"\u7528\u6237155****1408\",\"trackingState\":false,\"forceRewrite\":false,\"enterUpgradeTimes\":0,\"timeCreate\":1745405938000,\"headImgUrl\":\"https://uranus-static.oss-cn-beijing.aliyuncs.com/avt/user_12.png\",\"createTime\":1745405939000,\"mainUrlCount\":0,\"inviteCode\":\"METASODT-VOL30C503C4\",\"hasReceivedTransferBonus\":false,\"teamManager\":false,\"freeExportTime\":0,\"totalConsumedInTeam\":0,\"gift_days\":0},\"recentlyUsedTopicDTOs\":[],\"usage\":null,\"hasHydrated\":true,\"verify\":{\"val\":false},\"verifyShowTime\":1745405938914,\"openId\":null,\"lastOrderInfo\":null,\"initialMyInfoLoaded\":true,\"extensionReadingEnable\":true,\"advancedSearchEnable\":false,\"shareMath\":false,\"dsR1Model\":false,\"metasoAIConfig\":{\"id\":1,\"pcDemoCount\":4,\"pcDemoMaxWordCount\":25,\"pcDemos\":\"[{\\\"title\\\":\\\"\u4e16\u754c\u5404\u5730\u7684\u52a8\u690d\u7269\u591a\u6837\u6027\u6709\u4f55\u7279\u70b9\uff1f\\\",\\\"value\\\":\\\"\u4e16\u754c\u5404\u5730\u7684\u52a8\u690d\u7269\u591a\u6837\u6027\u6709\u4f55\u7279\u70b9\uff1f\\\",\\\"engineType\\\":\\\"pdf\\\",\\\"mode\\\":\\\"detail\\\"},{\\\"title\\\":\\\"\u53f8\u9a6c\u5357\u88ab\u7f5a\u8d85900\u4e07\u5143\\\",\\\"value\\\":\\\"\u53f8\u9a6c\u5357\u88ab\u7f5a\u8d85900\u4e07\u5143\\\",\\\"engineType\\\":\\\"quanwang\\\",\\\"mode\\\":\\\"detail\\\"},{\\\"title\\\":\\\"\u6697\u7269\u8d28\u548c\u6697\u80fd\u91cf\u5bf9\u5b87\u5b99\u5b66\u7406\u8bba\u7684\u6311\u6218\\\",\\\"value\\\":\\\"\u6697\u7269\u8d28\u548c\u6697\u80fd\u91cf\u5bf9\u5b87\u5b99\u5b66\u7406\u8bba\u7684\u6311\u6218\\\",\\\"engineType\\\":\\\"scholar\\\"},{\\\"title\\\":\\\"\u5c0f\u7c73SU7\\\",\\\"value\\\":\\\"\u5c0f\u7c73SU7\\\",\\\"engineType\\\":\\\"podcast\\\"},{\\\"title\\\":\\\"\u7279\u65af\u62c9\u672a\u6765\u80a1\u4ef7\u8d70\u52bf\\\",\\\"value\\\":\\\"\u7279\u65af\u62c9\u672a\u6765\u80a1\u4ef7\u8d70\u52bf\\\",\\\"engineType\\\":\\\"quanwang\\\"},{\\\"title\\\":\\\"\u7f57\u6c38\u6d69\u4e3a\u4ec0\u4e48\u4eba\u79f0\u9f99\u54e5\\\",\\\"value\\\":\\\"\u7f57\u6c38\u6d69\u4e3a\u4ec0\u4e48\u4eba\u79f0\u9f99\u54e5\\\",\\\"engineType\\\":\\\"quanwang\\\"}]\",\"appDemoCount\":4,\"appDemoMaxWordCount\":20,\"appDemos\":\"[{\\\"title\\\":\\\"\u4e16\u754c\u5404\u5730\u7684\u52a8\u690d\u7269\u591a\u6837\u6027\u6709\u4f55\u7279\u70b9\uff1f\\\",\\\"value\\\":\\\"\u4e16\u754c\u5404\u5730\u7684\u52a8\u690d\u7269\u591a\u6837\u6027\u6709\u4f55\u7279\u70b9\uff1f\\\",\\\"engineType\\\":\\\"pdf\\\",\\\"mode\\\":\\\"detail\\\"},{\\\"title\\\":\\\"\u53f8\u9a6c\u5357\u88ab\u7f5a\u8d85900\u4e07\u5143\\\",\\\"value\\\":\\\"\u53f8\u9a6c\u5357\u88ab\u7f5a\u8d85900\u4e07\u5143\\\",\\\"engineType\\\":\\\"quanwang\\\",\\\"mode\\\":\\\"detail\\\"},{\\\"title\\\":\\\"\u6697\u7269\u8d28\u548c\u6697\u80fd\u91cf\u5bf9\u5b87\u5b99\u5b66\u7406\u8bba\u7684\u6311\u6218\\\",\\\"value\\\":\\\"\u6697\u7269\u8d28\u548c\u6697\u80fd\u91cf\u5bf9\u5b87\u5b99\u5b66\u7406\u8bba\u7684\u6311\u6218\\\",\\\"engineType\\\":\\\"scholar\\\"},{\\\"title\\\":\\\"\u5c0f\u7c73SU7\\\",\\\"value\\\":\\\"\u5c0f\u7c73SU7\\\",\\\"engineType\\\":\\\"podcast\\\"},{\\\"title\\\":\\\"infj\u771f\u7684\u7a00\u6709\u5417\\\",\\\"value\\\":\\\"infj\u771f\u7684\u7a00\u6709\u5417\\\",\\\"engineType\\\":\\\"quanwang\\\"},{\\\"title\\\":\\\"\u7f57\u6c38\u6d69\u4e3a\u4ec0\u4e48\u4eba\u79f0\u9f99\u54e5\\\",\\\"value\\\":\\\"\u7f57\u6c38\u6d69\u4e3a\u4ec0\u4e48\u4eba\u79f0\u9f99\u54e5\\\",\\\"engineType\\\":\\\"quanwang\\\"},{\\\"title\\\":\\\"2023\u5e74\u672b\u7ecf\u6d4e\u6307\u6807\u5206\u5316\uff0c\u5982\u4f55\u7406\u89e3\u5f53\u4e0b\u7684\u5b8f\u89c2\u8fd0\u884c\uff1f\\\",\\\"value\\\":\\\"2023\u5e74\u672b\u7ecf\u6d4e\u6307\u6807\u5206\u5316\uff0c\u5982\u4f55\u7406\u89e3\u5f53\u4e0b\u7684\u5b8f\u89c2\u8fd0\u884c\uff1f\\\",\\\"engineType\\\":\\\"quanwang\\\"},{\\\"title\\\":\\\"\u4ec0\u4e48\u662f\u8fa9\u8bc1\u903b\u8f91\uff1f\\\",\\\"value\\\":\\\"\u4ec0\u4e48\u662f\u8fa9\u8bc1\u903b\u8f91\uff1f\\\",\\\"engineType\\\":\\\"quanwang\\\"}]\",\"appMessage\":\"\u5fd9\u4e86\u4ee8\u6708\uff0c\u6211\u4eec\u5e0c\u671b\u8ba9\u6559\u80b2\u66f4\u5e73\u6743\u4e00\u70b9\",\"pcMessage\":\"\u5fd9\u4e86\u4ee8\u6708\uff0c\u6211\u4eec\u5e0c\u671b\u8ba9\u6559\u80b2\u66f4\u5e73\u6743\u4e00\u70b9\",\"urlQuestionAppMaxWordCount1\":11,\"urlQuestionAppMaxWordCount2\":4,\"urlQuestionPcMaxWordCount1\":11,\"urlQuestionPcMaxWordCount2\":10,\"version\":250421,\"extraInfo\":\"{\\\"appDarkMessage\\\": \\\"\u5fd9\u4e86\u4ee8\u6708\uff0c\u6211\u4eec\u5e0c\u671b\u8ba9\u6559\u80b2\u66f4\u5e73\u6743\u4e00\u70b9\\\"}\",\"androidVersion\":1,\"iosVersion\":1,\"guestSearchCount\":15,\"guestResearchSearchCount\":1},\"messageClosed\":false},\"version\":1}"}, {"name": "usermaven_default_UMO2dYNwFz_data", "value": "{\"userId\":\"6808c7f28f8e8e812886c9eb\",\"userProps\":{\"id\":\"6808c7f28f8e8e812886c9eb\",\"email\":\"6808c7f28f8e8e812886c9eb@metasota.ai\",\"created_at\":\"Wed, 23 Apr 2025 10:58:58 GMT\"}}"}]}]} \ No newline at end of file diff --git a/data/session/tongyi.json b/data/session/tongyi.json new file mode 100644 index 0000000..8939397 --- /dev/null +++ b/data/session/tongyi.json @@ -0,0 +1 @@ +{"cookies": [{"name": "XSRF-TOKEN", "value": "593917a4-14da-451f-a28f-37b13cfcee6d", "domain": "tongyi-passport.aliyun.com", "path": "/havanaone", "expires": -1, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "XSRF-TOKEN", "value": "2f0cb8e6-8da5-422e-af30-3ec7c0478eaf", "domain": "qianwen.biz.aliyun.com", "path": "/growth", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "XSRF-TOKEN", "value": "664d9e16-aa82-48ca-b759-813f49ef0eac", "domain": "tongyi.aliyun.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "UM_distinctid", "value": "1960fe898936a6-0d26258c6a1fa7-26011c51-1fa400-1960fe89894bef", "domain": ".aliyun.com", "path": "/", "expires": 1759748423, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "acw_tc", "value": "448fbc16-e135-9a65-b356-6ee2c0522bc6a4b93236ef9891f4d957b0fbe02efbd0", "domain": "qianwen.biz.aliyun.com", "path": "/", "expires": 1744025424.166257, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "_samesite_flag_", "value": "true", "domain": ".aliyun.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "cookie2", "value": "15ff170b5c1514983623c409a6caca9b", "domain": ".aliyun.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "t", "value": "be3e0a30d824f3f7bfdf7f0c29ad6d85", "domain": ".aliyun.com", "path": "/", "expires": 1778583624.199966, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "_tb_token_", "value": "fed73be85db05", "domain": ".aliyun.com", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "cna", "value": "SJ56II7mZHkCAXVZAV2GTegA", "domain": ".aliyun.com", "path": "/", "expires": 1778583659.781422, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "arms_uid", "value": "512f6793-1aa4-4d48-9c45-4d85e4e042ce", "domain": "tongyi-passport.aliyun.com", "path": "/", "expires": 1759575624.342546, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "sca", "value": "ba0ec3d8", "domain": ".aliyun.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "tongyi_guest_ticket", "value": "Qc2oDc8uU_yWEm8W7$9WDkz6T6j3eBtwuUWhms8MMp16JRyEJD*WL71liDlnMp7my25IHu6RQ53y0", "domain": ".aliyun.com", "path": "/", "expires": 1775127624.393569, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "cna", "value": "SJ56II7mZHkCAXVZAV2GTegA", "domain": ".mmstat.com", "path": "/", "expires": 1778583660.079414, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "sca", "value": "273f9549", "domain": ".mmstat.com", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "cbc", "value": "T2gA0HeIJ_hwpUykuptfzttNVg0_bC9dDOhG1FSf6RlZ8MwXjKyIgHFUl793y8KnByU=", "domain": ".ynuf.aliapp.org", "path": "/", "expires": 1775559625.005453, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "_bl_uid", "value": "Iqmv29Xy6zXymhmXFx10igXnyz4I", "domain": "tongyi-passport.aliyun.com", "path": "/", "expires": 1759575625.007847, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "tongyi_sso_ticket", "value": "_8Gn1gsBy1ogROHqapzX0CcdoyjeL$Ja3gGAKrv0RenO3qMihxNkYdSUh431YBoWsZbKKba*zpfz0", "domain": ".aliyun.com", "path": "/", "expires": 1778583658.17297, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "CNZZDATA1281397965", "value": "1341662455-1744023624-%7C1744023660", "domain": "tongyi.aliyun.com", "path": "/", "expires": 1759748459, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "cnaui", "value": "1743995102443202816", "domain": ".aliyun.com", "path": "/", "expires": 1778583659.78343, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "aui", "value": "1743995102443202816", "domain": ".aliyun.com", "path": "/", "expires": 1778583660.248087, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "atpsida", "value": "fa052d6815a01a7d2005bf76_1744023660_2", "domain": ".aliyun.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "atpsida", "value": "fcc297f2931b2d90680b78cc_1744023660_3", "domain": ".mmstat.com", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "tfstk", "value": "gcIZfkw23lEwgIIaipxqzC7Q3e-9DhV7miOXntXDCCAMGh_qgO1wSIa91IXcttiXoPCb0oX5OEj6fO1E3s67BEa9fZo2t6A11N6fT-5hwOTfni9c0hIC5mO_6nWcNnP7NuZ5BOKpm7NW9gtCvnv0cI4BSXTXfsP7NuZCBOKvm716O32V1KdHIKAiSJ8HUBvMIsAM-XvyenAcisX3LKdHinxciHY8KOXmYLTghTnoN0bwQFRlIBX1CMvZNQXMTmm0hd8aROAEmmjdRfaknC4-dIK6619NMun9jE7G_px4lxdN-Ts61Tkrm9523UxD8xmcLHdD8ptuqXJd-O_cX1kqmdI1VERJ8-mvlHjWrafZH8BHjKfvyiN-XCXcegQW4ooHbEjy0jphG9jA7j0DSppeNJyhBZU5yaHgu9gxkexJLQw6Cq3vSLpeNJyrkqL3TpR7CCf..", "domain": ".aliyun.com", "path": "/", "expires": 1759575660, "httpOnly": false, "secure": false, "sameSite": "Lax"}], "origins": [{"origin": "https://tongyi.aliyun.com", "localStorage": [{"name": "APLUS_LS_KEY", "value": "[\"APLUS_CORE_1.0.4_20250327170802_3244f647\"]"}, {"name": "__ETAG__CNA__ID__", "value": "20250407_SJ56II7mZHkCAXVZAV2GTegA"}, {"name": "tfstk__", "value": "cEfFB9ayzWFFKFBngCdr3HW_afedZ6_hrf8XKz_xi0q46UvhiGoJSg_M7UgZqpf.."}, {"name": "APLUS_CORE_1.0.4_20250327170802_3244f647", "value": "/*! 2025-03-27 16:48:57 aplus_pc.js */\n!function(t){function e(a){if(n[a])return n[a].exports;var o=n[a]={exports:{},id:a,loaded:!1};return t[a].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p=\"\",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){\"use strict\";n(2).initGlobal(window),function(){var t=n(4);n(149)(t)}()},function(t,e,n){\"use strict\";var a,o=n(3),r=o.APLUS,i=o.APLUS_QUEUE,s=o.GOLDLOG,u=o.GOLDLOG_QUEUE,c=!1;try{\"undefined\"!=typeof window&&(a=window,c=!0)}catch(t){a={},c=!1}e.getContext=function(){return a},e.isWeb=function(){return\"undefined\"!=typeof window&&window},e.initGlobal=function(t){a=t?t:{v:1,aplus:{},aplus_queue:[]};var e,n;if(c)try{e=a.aplus||a.goldlog||(a.aplus={});var o=a.goldlog_queue||(a.goldlog_queue=[]);n=a.aplus_queue||(a.aplus_queue=[]),n=o.concat(n)}catch(t){}else e=a.aplus,n=a.aplus_queue;return a.aplus=a.goldlog=e,a.aplus_queue=a.goldlog_queue=n,a};var l=function(t){if(t===r||t===s){var e=a[r]||a[s];return e||(e=a[r]=a[s]={}),e}var n=u,o=i;if(t===o||t===n){var c=a[o]||a[n];return c||(c=a[o]=a[n]=[]),c}};e.getGlobalValue=l,e.setGlobalValue=function(t,e){a[t]=e};var p=function(t){var e;try{var n=l(r);e=n[t]}catch(t){e=\"\"}finally{return e}};e.getGoldlogVal=p;var f=function(t,e){var n=!1;try{var a=l(r);t&&(a[t]=e,n=!0)}catch(t){n=!1}finally{return n}};e.setGoldlogVal=f,e.getClientInfo=function(){return p(\"_aplus_client\")||{}}},function(t,e){var n=\"aplus\",a=\"goldlog\",o=n+\"_queue\",r=a+\"_queue\",i=\"mw_change\",s=\"MetaInfo\",u=\"append\"+s,c=\"set\"+s,l=\"http\",p=\"_pubsub\",f=\"other\",g=\"2101\",d=\"2201\",_=\"2202\",m=\"19999\",h=\"1023\",v=\"1010\",b=3e4,y=18e5,E=\"ekvs\",S=1e4,A=1,T=1,P=3e3,I=\"$$_page_start\",w=\"$$_page_end\",M=\"$$_app_start\",x=\"$$_app_end\",C=\"aplus_user_profile\",L=\"imprint\",O=n+\"-idtype\",U=n+\"-jsbridge-only\",k=n+\"-page-config\",R=n+\"-skip-apv-rules\",N=n+\"-rhost-v\",G=n+\"-rhost-g\",D=n+\"-forward-domain\",V=n+\"-forward-event-filter\",j=\"autoGetOpenid\",F=n+\"-forward-appkey\";t.exports={PAGE_ENTER:\"PAGE_ENTER\",ETAG_EVENT_NAME:\"etag\",CURRENT_PAGE_CONFIG:\"CURRENT_PAGE_CONFIG\",_ANONY_ID:\"_anony_id\",_DEV_ID:\"_dev_id\",_USER_ID:\"_user_id\",_CNA:\"cna\",DEFAULT_CODE:f,OTHER:m,EVENT_MAP:{2101:\"click\",2201:\"exposure\",2202:\"exposure\",19999:f,1023:\"app_show\",1010:\"app_hide_or_unload\"},EVENT_ID_MAP:{EXP:d,IMPEXP:_,CLK:g,OTHER:m,SHOW:h,H_OR_U:v},APLUS:n,APLUS_CONFIG:\"APLUS_CONFIG\",GOLDLOG:a,UNSUBSCRIBE:n+\".\"+n+p+\".unsubscribe\",SUBSCRIBE:n+\".\"+n+p+\".subscribe\",PUBLISH:n+\".\"+n+p+\".publish\",CACHE_PUBS:n+\".\"+n+p+\".cachePubs\",APLUS_UNIVERSAL:n+\"_universal\",APLUS_QUEUE:o,GOLDLOG_QUEUE:r,COMPLETE:\"complete\",PV_CODE:\"2001\",EXP_CODE:d,CLK_CODE:g,OTHER_CODE:m,CLK:\"CLK\",EXP:\"EXP\",SPM_CNT:\"spm-cnt\",SPM_URL:\"spm-url\",SPM_PRE:\"spm-pre\",MW_CHANGE_PV:i+\"_pv\",MW_CHANGE_HJLJ:i+\"_hjlj\",HTTP:l+\":\",HTTPS:\"https:\",APPEND_META_INFO:u,SET_META_INFO:c,APLUS_APPEND_META_INFO:n+\".\"+u,APLUS_SET_META_INFO:n+\".\"+c,PVID:\"pvid\",openAPIs:[\"send\",\"enter\",\"sendPV\",\"record\",\"combineRecord\",\"recordUdata\",\"requestVTConfig\",\"requestRemoteConfig\",\"setPageSPM\",\"setMetaInfo\",\"appendMetaInfo\",\"updatePageProperties\",\"updateNextPageProperties\",\"updatePageUtparam\",\"updateNextPageUtparam\",\"pageAppear\",\"pageDisappear\",\"pageDisAppear\",\"skipPage\",\"updatePageName\",\"updatePageUrl\",\"requestPageAllProperties\",\"updateSessionProperties\",\"getPageSpmUrl\",\"getPageSpmPre\",\"updateNextPageUtparamCnt\",\"setPageName\",\"getElementSPM\",\"setUserProfile\",\"getUserProfile\",\"getCna\"],SESSION_INTERVAL:b,SESSION_PAUSE_TIME:\"session_pause_time\",IMPRINT:\"imprint\",CURRENT_SESSION:\"current_session\",MAX_EVENTID_LENGTH:128,MAX_PROPERTY_KEY_LENGTH:256,MAX_PROPERTY_KEYS_COUNT:100,FAILED_REQUESTS:\"failed_requests\",REQUESTS:\"requests\",SHARES:\"shares\",APLUS_SSRC:\"_aplus_ssrc\",ARMS_TRACE:\"_arms_trace\",EKVS:E,EVENT_MAX_COUNT:S,MEMORY_MAX_COUNT:A,MAX_QUEUE_COUNT:T,EVENT_SEND_DEFAULT_INTERVAL:P,PAGE_START:I,PAGE_END:w,APP_START:M,APP_END:x,USER_PROFILE_KEY:C,SHARE_CACHE_INTERVAL:y,IMPRINT:L,ID_TYPE:O,GLOBAL_PROPERTY:\"globalproperty\",JSBRIDGE_ONLY:U,PAGE_CONFIG:k,APLUS_SKIP_APV_RULES:R,APLUS_PV_DOMAIN:N,APLUS_EKV_DOMAIN:G,APLUS_FORWARD_DOMAIN:D,APLUS_IMPRINT_VERSION:\"APLUS_IMPRINT_VERSION\",APLUS_REMOTE_CONFIG:\"APLUS_REMOTE_CONFIG\",RANK:\"ekv_rank\",WEB_EVENT_SUFFIX:\"/web_logs\",WEB_PC_PV_SUFFIX:\"v.gif\",WEB_WAP_PV_SUFFIX:\"m.gif\",PAGE_LEAVE:\"$$_page_leave\",APLUS_DOM_CHANGE:\"APLUS_DOM_CHANGE\",APLUS_PAGE_CHANGE:\"APLUS_PAGE_CHANGE\",PERFORMANCE_WARING:\"$$_perf_warning\",START_ID:\"START_ID\",AUTO_GET_OPENID:j,APLUS_LATEAST_UTM:\"APLUS_LATEAST_UTM\",APLUS_FORWARD_EVENT_FILTER:V,APLUS_FORWARD_APPKEY:F,APLUS_RHOST_V:n+\"-rhost-v\",APLUS_CPVDATA:n+\"-cpvdata\",APLUS_EXDATA:n+\"-exdata\",APLUS_EXINFO:n+\"-exinfo\",APLUS_LOG_PIPE:n+\"-log-pipe\",APLUS_TRACK_COMBINE:n+\"-track-combine\",APLUS_COOKIES:n+\"-cookies\",APLUS_CODELESS_TRACK_CONFIG:\"_\"+n+\"_codeless_track_config\",APLUS_AUTO_CLK:n+\"-auto-clk\",APLUS_AUTO_EXP:n+\"-auto-exp\",APLUS_AUTO_PV:n+\"-auto-pv\",APLUS_BRIDGE_NAME:n+\"-bridge-name\",APLUS_MINI_REQUEST_TIMEOUT:n+\"-request-timeout\",APLUS_VT_CONFIG_URL:n+\"-vt-cfg-url\",APLUS_EXPOSURE_EVENT_CAN_REPEAT:n+\"-exposure-event-can-repeat\",APLUS_IGNORE_LIFECYCLES:n+\"-ignore-lifecycles\",APLUS_TRACK_DEBUG_ID:n+\"-track-debug-id\",APLUS_SINGLE_RECORD_LOGKEYS:n+\"-single-record-logkeys\",APLUS_GOKEY_ISOLATE:n+\"-gokey-isolate\",APLUS_AUTOTRACK_ENABLED:n+\"-autotrack-enabled\",APLUS_AUTOTRACK_ENABLED_REMOTE:n+\"-autotrack-enabled-remote\",APLUS_AUTOTRACK_CONFIG:n+\"-autotrack-config\",APLUS_AUTOTRACK_CONFIG_REMOTE:n+\"-autotrack-config-remote\",APLUS_EVENT_LIMITRATES:n+\"-event-limitrates\",APLUS_DISABLE_AUTOEVENT:n+\"-disable-autoevent\",APLUS_DISABLE_AUTOEVENT_REMOTE:n+\"-disable-autoevent\",APLUS_DISABLE_AUTOPV:n+\"-disable-apv\",APLUS_DISABLE_AUTOPV_REMOTE:n+\"-disable-apv-remote\",APLUS_DEVICE_ENABLE:n+\"-device-enable\",APLUS_USER_PROFILE:n+\"-user-profile\",APLUS_CNA_ENABLE:n+\"-cna-enable\",APLUS_CNA_MODE:n+\"-cna-mode\",APLUS_ETAG_TIMEOUT:n+\"-etag-timeout\",APLUS_SPA_TYPE:n+\"-spa-type\"}},function(t,e,n){t.exports={metaInfo:{\"aplus-ifr-pv\":\"0\",\"aplus-rhost-v\":\"log.mmstat.com\",\"aplus-rhost-g\":\"gm.mmstat.com\",\"aplus-channel\":\"WS\",appId:\"60506758\",sdkId:\"customSdkId\",\"aplus-cpvdata\":{},\"aplus-exdata\":{},\"aplus-globaldata\":{},\"aplus-mmstat-timeout\":\"10000\",\"aplus-toUT\":\"auto\",\"aplus-track-combine\":\"on\",\"aplus-vt-auto-userfn-enable\":\"on\",\"aplus-cna-enable\":\"on\",\"aplus-cna-mode\":\"CK\",\"aplus-auto-track-config-import\":\"off\",\"aplus-form-track\":\"off\",\"aplus-gokey-isolate\":\"on\",\"aplus-only-update-page-properties\":\"off\",\"aplus-user-profile\":{},\"aplus-report-rate\":{},\"aplus-single-record-logkeys\":[],\"aplus-cross-day-auto-pv\":\"off\"},globalConfig:{isAli:!0,APLUS_QUEUE:\"aplus_queue\",ETAG_STORAGE_KEY:\"__ETAG__CNA__ID__\",script_name:\"aplus.js\",NAME_STORAGE_KEYS:{REFERRER:\"wm_referrer\",REFERRER_PV_ID:\"refer_pv_id\",LOST_PV_PAGE_DURATION:\"lost_pv_page_duration\",LOST_PV_PAGE_SPMAB:\"lost_pv_page_spmab\",LOST_PV_PAGE:\"lost_pv_page\",LOST_PV_PAGE_MSG:\"lost_pv_page_msg\"},lver:\"1.13.14\"},plugins:[{name:\"aplus_body_ready\",path:n(5)},{name:\"pubsub\",path:n(6)},{name:\"aplus_client\",path:n(11)},{name:\"aplus_meta_inject\",path:n(15)},{name:\"aplus_observer\",path:n(49)},{name:\"aplus_ac\",path:n(51)},{name:\"aplus_ae\",path:n(68)},{name:\"name_storage\",path:n(76)},{name:\"record_lost_pv\",path:n(79),config:{lostPvRecordRatio:.01}},{name:\"aplus_monitor\",path:n(81),config:{obsoleteInterRecordRatio:\"0.01\",jsErrorRecordRatio:\"0.01\",browserSupportRatio:\"0.01\"}},{name:\"aplus_web_http_ali\",path:n(83)},{name:\"aplus_log_inject\",path:n(86),deps:[\"aplus_meta_inject\"],config:{plugins:{pv:[{name:\"etag\",path:n(87)},{name:\"pha_trackinfo\",path:n(93)},{name:\"when_to_sendpv\",path:n(94),config:{aplusWaiting:\"\"}},{name:\"where_to_send\",path:n(95),config:{method:\"GET\",url:\"//log.mmstat.com/v.gif\"}},{name:\"what_to_send\",path:n(97),config:{pvdataToUt:{}}},{name:\"cookie_data\",path:n(98)},{name:\"what_to_sendpv_userdata\",path:n(99),deps:[\"what_to_send\"]},{name:\"what_to_sendpv_userdata_web\",path:n(100),deps:[\"what_to_send\",\"what_to_sendpv_userdata\"]},{name:\"what_to_sendpv_ut2\",path:n(102),deps:[\"what_to_send\"]},{name:\"can_to_sendpv\",path:n(103),config:{flag:\"NO\"}},{name:\"after_pv\",path:n(108)}],hjlj:[{name:\"etag\",path:n(87)},{name:\"pha_trackinfo\",path:n(93)},{name:\"where_to_send\",path:n(95),deps:[],config:{method:\"GET\",url:\"//gm.mmstat.com/\",ac_atpanel:\"//ac.mmstat.com/\",tblogUrl:\"//log.mmstat.com/\"}},{name:\"what_to_send\",path:n(97),deps:[]},{name:\"cookie_data\",path:n(98)},{name:\"what_to_hjlj_userdata\",path:n(109),deps:[\"what_to_send\"]},{name:\"what_to_hjlj_userdata_web\",path:n(110),deps:[\"what_to_send\",\"what_to_hjlj_userdata\"]},{name:\"what_to_hjlj_ut2\",path:n(111),deps:[\"what_to_send\"]}]}}},{name:\"aplus_spm_inject\",path:n(112)},{name:\"aplus_api\",path:n(126)},{name:\"meta_queue\",path:n(134)},{name:\"etag\",path:n(87)},{name:\"etag_web_sync\",path:n(136)},{name:\"aplus_queue\",path:n(137)},{name:\"hot_loader\",path:n(138),config:{urlRules:[{rule:\"aplus_webvt_messager\",cdnPath:[\"https://d.alicdn.com/alilog/mlog/aplus_webvt_messager.js\",\"https://d.alicdn.com/alilog/mlog/aplus_track_debug.js\"]},{rule:\"aplus_track_debug_id\",cdnPath:[\"https://d.alicdn.com/alilog/mlog/aplus_track_debug.js\"]},{rule:\"__aplus__analytics__=true\",cdnPath:[\"https://g.alicdn.com/alilog/aplus-design/1.3.0/analytics_index.bundle.js\"]},{rule:\"aplus_auto_register=true\",allowIframeLoad:!0,cdnPath:[\"https://d.alicdn.com/alilog/aplus/1.13.9/plugin/aplus_auto_register.js\"]},{rule:\"aplus_heat=true\",allowIframeLoad:!0,cdnPath:[\"https://o.alicdn.com/alilog/aplus-visual-client/heat.js\"]}]}},{name:\"hot_sufei_pc\",path:n(139),config:{cdnPath:\"//g.alicdn.com\"}},{name:\"aplus_apv\",path:n(140),deps:[\"aplus_log_inject\",\"aplus_api\"]},{name:\"aplus_form_track\",path:n(143)}]}},function(t,e){\"use strict\";t.exports=function(){return{run:function(t,e){var n=setInterval(function(){document.getElementsByTagName(\"body\").length&&(clearInterval(n),n=null,e())},50);return setTimeout(function(){n&&clearInterval(n)},1e3),1e3}}}},function(t,e,n){var a=n(7),o=n(2);t.exports=function(){return{run:function(){var t=o.getGlobalValue(\"aplus\");t.aplus_pubsub||(t.aplus_pubsub=a.create())}}}},function(t,e,n){var a=n(8);t.exports=a.extend({subscribeOnce:function(t,e){this.callable(e);var n,a=this;return this.subscribe.call(this,t,n=function(){a.unsubscribe.call(a,t,n);var o=Array.prototype.slice.call(arguments);e.apply(a,o)}),this}})},function(t,e,n){\"use strict\";var a=n(9),o=n(10),r=function(t){for(var e=t.length,n=new Array(e-1),a=1;a0){for(var a=0;a0)for(var i=0;i\",S=u&&u.createElement(\"div\"),A=[],T={isAliapp:!1,webkit:void 0,edge:void 0,trident:void 0,gecko:void 0,presto:void 0,chrome:void 0,safari:void 0,firefox:void 0,ie:void 0,ieMode:void 0,opera:void 0,mobile:void 0,core:void 0,shell:void 0,phantomjs:void 0,os:void 0,ipad:void 0,iphone:void 0,ipod:void 0,ios:void 0,android:void 0,nodejs:void 0,extraName:void 0,extraVersion:void 0};if(S&&S.getElementsByTagName&&(S.innerHTML=E.replace(y,\"\"),A=S.getElementsByTagName(\"s\")),A.length>0){for(d(t,T),i=b[0],s=b[1];i<=s;i++)if(S.innerHTML=E.replace(y,i),A.length>0){T[v=\"ie\"]=i;break}!T.ie&&(r=_(t))&&(T[v=\"ie\"]=r)}else((o=t.match(/AppleWebKit\\/*\\s*([\\d.]*)/i))||(o=t.match(/Safari\\/([\\d.]*)/)))&&o[1]?(T[h=\"webkit\"]=g(o[1]),(o=t.match(/OPR\\/(\\d+\\.\\d+)/))&&o[1]?T[v=\"opera\"]=g(o[1]):(o=t.match(/Chrome\\/([\\d.]*)/))&&o[1]?T[v=\"chrome\"]=g(o[1]):(o=t.match(/\\/([\\d.]*) Safari/))&&o[1]?T[v=\"safari\"]=g(o[1]):T.safari=T.webkit,(o=t.match(/Edge\\/([\\d.]*)/))&&o[1]&&(h=v=\"edge\",T[h]=g(o[1])),/ Mobile\\//.test(t)&&t.match(/iPad|iPod|iPhone/)?(T.mobile=\"apple\",o=t.match(/OS ([^\\s]*)/),o&&o[1]&&(T.ios=g(o[1].replace(\"_\",\".\"))),a=\"ios\",o=t.match(/iPad|iPod|iPhone/),o&&o[0]&&(T[o[0].toLowerCase()]=T.ios)):/ Android/i.test(t)?(/Mobile/.test(t)&&(a=T.mobile=\"android\"),o=t.match(/Android ([^\\s]*);/),o&&o[1]&&(T.android=g(o[1]))):(o=t.match(/NokiaN[^\\/]*|Android \\d\\.\\d|webOS\\/\\d\\.\\d/))&&(T.mobile=o[0].toLowerCase()),(o=t.match(/PhantomJS\\/([^\\s]*)/))&&o[1]&&(T.phantomjs=g(o[1]))):(o=t.match(/Presto\\/([\\d.]*)/))&&o[1]?(T[h=\"presto\"]=g(o[1]),(o=t.match(/Opera\\/([\\d.]*)/))&&o[1]&&(T[v=\"opera\"]=g(o[1]),(o=t.match(/Opera\\/.* Version\\/([\\d.]*)/))&&o[1]&&(T[v]=g(o[1])),(o=t.match(/Opera Mini[^;]*/))&&o?T.mobile=o[0].toLowerCase():(o=t.match(/Opera Mobi[^;]*/))&&o&&(T.mobile=o[0]))):(r=_(t))?(T[v=\"ie\"]=r,d(t,T)):(o=t.match(/Gecko/))&&(T[h=\"gecko\"]=.1,(o=t.match(/rv:([\\d.]*)/))&&o[1]&&(T[h]=g(o[1]),/Mobile|Tablet/.test(t)&&(T.mobile=\"firefox\")),(o=t.match(/Firefox\\/([\\d.]*)/))&&o[1]&&(T[v=\"firefox\"]=g(o[1])));if(!T[v]){var P=t.match(/Ali\\w+\\(\\w+\\/(\\d+\\.)+\\d+\\)/);if(P){T.isAliapp=!0;var I=P[0],w=\"\",M=\"\",x=I.match(/(\\d+\\.)+\\d+/);x&&(w=x[0],M=I.replace(\"/\"+w,\"\").replace(/\\(|\\)/g,\"\")),T[v=M]=w}}a||(a=e());var C,L,O;if(!n(\"type\",\"application/vnd.chromium.remoting-viewer\")){C=\"scoped\"in u.createElement(\"style\"),O=\"v8Locale\"in c;try{L=c.external||void 0}catch(t){}if(o=t.match(/360SE/))l=\"360\";else if((o=t.match(/SE\\s([\\d.]*)/))||L&&\"SEVersion\"in L)l=\"sougou\",f=g(o[1])||.1;else if((o=t.match(/Maxthon(?:\\/)+([\\d.]*)/))&&L){l=\"maxthon\";try{f=g(L.max_version||o[1])}catch(t){f=.1}}else C&&O?l=\"360se\":C||O||!/Gecko\\)\\s+Chrome/.test(p)||T.opera||T.edge||(l=\"360ee\")}(o=t.match(/TencentTraveler\\s([\\d.]*)|QQBrowser\\/([\\d.]*)/))?(l=\"tt\",f=g(o[2])||.1):(o=t.match(/LBBROWSER/))||L&&\"LiebaoGetVersion\"in L?l=\"liebao\":(o=t.match(/TheWorld/))?(l=\"theworld\",f=3):(o=t.match(/TaoBrowser\\/([\\d.]*)/))?(l=\"taobao\",f=g(o[1])||.1):(o=t.match(/UCBrowser\\/([\\d.]*)/))&&(l=\"uc\",f=g(o[1])||.1),T.os=a,T.core=T.core||h,T.shell=v,T.ieMode=T.ie&&u.documentMode||T.ie,T.extraName=l,T.extraVersion=f;var U=c.screen.width,k=c.screen.height;return T.resolution=U+\"x\"+k,T}function o(t){function e(t){return Object.prototype.toString.call(t)}function n(t,n,a){if(\"[object Function]\"==e(n)&&(n=n(a)),!n)return null;var o={name:t,version:\"\"},r=e(n);if(n===!0)return o;if(\"[object String]\"===r){if(a.indexOf(n)!==-1)return o}else if(n.exec){var i=n.exec(a);if(i)return i.length>=2&&i[1]?o.version=i[1].replace(/_/g,\".\"):o.version=\"\",o}}var a={name:\"other\",version:\"\"};t=(t||\"\").toLowerCase();for(var o=[[\"nokia\",function(t){return t.indexOf(\"nokia \")!==-1?/\\bnokia ([0-9]+)?/:/\\bnokia([a-z0-9]+)?/}],[\"samsung\",function(t){return t.indexOf(\"samsung\")!==-1?/\\bsamsung(?:[ \\-](?:sgh|gt|sm))?-([a-z0-9]+)/:/\\b(?:sgh|sch|gt|sm)-([a-z0-9]+)/}],[\"wp\",function(t){return t.indexOf(\"windows phone \")!==-1||t.indexOf(\"xblwp\")!==-1||t.indexOf(\"zunewp\")!==-1||t.indexOf(\"windows ce\")!==-1}],[\"pc\",\"windows\"],[\"ipad\",\"ipad\"],[\"ipod\",\"ipod\"],[\"iphone\",/\\biphone\\b|\\biph(\\d)/],[\"mac\",\"macintosh\"],[\"mi\",/\\bmi[ \\-]?([a-z0-9 ]+(?= build|\\)))/],[\"hongmi\",/\\bhm[ \\-]?([a-z0-9]+)/],[\"aliyun\",/\\baliyunos\\b(?:[\\-](\\d+))?/],[\"meizu\",function(t){return t.indexOf(\"meizu\")>=0?/\\bmeizu[\\/ ]([a-z0-9]+)\\b/:/\\bm([0-9x]{1,3})\\b/}],[\"nexus\",/\\bnexus ([0-9s.]+)/],[\"huawei\",function(t){var e=/\\bmediapad (.+?)(?= build\\/huaweimediapad\\b)/;return t.indexOf(\"huawei-huawei\")!==-1?/\\bhuawei\\-huawei\\-([a-z0-9\\-]+)/:e.test(t)?e:/\\bhuawei[ _\\-]?([a-z0-9]+)/}],[\"lenovo\",function(t){return t.indexOf(\"lenovo-lenovo\")!==-1?/\\blenovo\\-lenovo[ \\-]([a-z0-9]+)/:/\\blenovo[ \\-]?([a-z0-9]+)/}],[\"zte\",function(t){return/\\bzte\\-[tu]/.test(t)?/\\bzte-[tu][ _\\-]?([a-su-z0-9\\+]+)/:/\\bzte[ _\\-]?([a-su-z0-9\\+]+)/}],[\"vivo\",/\\bvivo(?: ([a-z0-9]+))?/],[\"htc\",function(t){return/\\bhtc[a-z0-9 _\\-]+(?= build\\b)/.test(t)?/\\bhtc[ _\\-]?([a-z0-9 ]+(?= build))/:/\\bhtc[ _\\-]?([a-z0-9 ]+)/}],[\"oppo\",/\\boppo[_]([a-z0-9]+)/],[\"konka\",/\\bkonka[_\\-]([a-z0-9]+)/],[\"sonyericsson\",/\\bmt([a-z0-9]+)/],[\"coolpad\",/\\bcoolpad[_ ]?([a-z0-9]+)/],[\"lg\",/\\blg[\\-]([a-z0-9]+)/],[\"android\",/\\bandroid\\b|\\badr\\b/],[\"blackberry\",function(t){return t.indexOf(\"blackberry\")>=0?/\\bblackberry\\s?(\\d+)/:\"bb10\"}]],r=0;rc.length?u:c,a=decodeURIComponent(a)}else n=e.match(o),a=n&&2===n.length?n[1]:\"\"}catch(t){}finally{return a}}function o(t,e){var n,a,o,r,i,s=e||location.href,c=\"&\",l=[];return u(t,function(t,e){new RegExp(t+\"=\").test(s)||l.push(t+\"=\"+e)}),0===l.length?s:(s.indexOf(\"#\")!==-1&&(o=s.split(\"#\"),s=o.shift(),a=o.join(\"#\")),r=s.split(\"?\"),i=r.length-1,o=r[0].split(\"//\"),o=o[o.length-1].split(\"/\"),i>0&&(n=r.pop(),s=r.join(\"?\")),n&&i>1&&n.indexOf(\"&\")==-1&&n.indexOf(\"%\")!==-1&&(c=\"%26\"),s=s+\"?\"+l.join(\"&\")+(n?c+n:\"\")+(a?\"#\"+a:\"\"))}function r(t){var e=s(location.hash)+\"\";c.pushIntoGoldlogQueue(\"aplus.on\",[window,\"hashchange\",function(){e!==s(location.hash)&&(e=s(location.hash)+\"\",t&&\"function\"==typeof t&&t(e,p))}])}function i(t){function e(e){var a=\"\";if(e){a=e&&e.arguments&&e.arguments.length>2&&e.arguments[2];var o=/^http|https/.test(a)?a:location.protocol+\"//\"+location.host+a;location.href!==o&&setTimeout(function(){t&&\"function\"==typeof t&&t(a,f)},0)}else a=location.pathname+location.search,a!==n&&setTimeout(function(){t&&\"function\"==typeof t&&t(a,f)},0);n=a}var n=location.pathname+location.search;if(history.pushState&&window.addEventListener){c.pushIntoGoldlogQueue(\"aplus.on\",[window,\"pushState\",function(t){e(t)}]),c.pushIntoGoldlogQueue(\"aplus.on\",[window,\"popstate\",function(){e()}]);var a=l.getMetaCnt(\"aplus-track-replacestate\")||aplus.getMetaInfo&&aplus.getMetaInfo(\"aplus-track-replacestate\");a&&c.pushIntoGoldlogQueue(\"aplus.on\",[window,\"replaceState\",function(t){e(t)}])}}function s(t){var e=\"\";return t&&(e=t.indexOf(\"?\")!=-1?t.split(\"?\")[0]:t),e}var u=n(18);e.addParamsIntoUrl=o,e.getParamFromUrl=a,e.getSPMFromUrl=function(t){return a(\"spm\",t)},e.getQueryFromUrl=function(){function t(t){for(var e=decodeURIComponent(t),n=e.indexOf(\"?\")+1,a=e.substring(n),o=Object.create(null),r=a.split(\"&\"),i=0;i-1)try{A[e]=JSON.parse(n)}catch(t){g.logger({msg:\"the content of meta<\"+e+\"> is invalid json string\"})}if(e===T)try{u=A[e]=JSON.parse(h.getMetaCnt(e))}catch(t){}}}),d(P,function(t){A[t]=h.getMetaCnt(t)}),A.spm_protocol=o(t),u&&(A=p.assign(A,u));var e,n,i=[\"aplus-rate-ahot\"],s=i.length;for(e=0;e0){var u=o.slice(0,r),c=o.slice(r+1,s)||\"\";e[u]=c}else e[i[0]]=\"\"}return e};var a=\"::-plain-::\";e.s_plain_obj=a,e.arr2param=n,e.obj2param=function(t,e){var n,o,r,i=[];for(n in t)n&&t.hasOwnProperty(n)&&(\"object\"==typeof t[n]?(o=\"\"+this.obj2param(t[n]),r=o):(o=\"\"+t[n],r=n+\"=\"+o),e?i.push(r):i.push(0===n.indexOf(a)?o:r));return i.join(\"&\")},e.encodeGokeyValue=function(t){return t}},function(t,e,n){\"use strict\";e.assign=n(13),e.makeCacheNum=function(){return Math.floor(268435456*Math.random()).toString(16)},e.isStartWith=function(t,e){return 0===t.indexOf(e)},e.isEndWith=function(t,e){if(String.prototype.endsWith)return t.endsWith(e);var n=t.length,a=e.length;return n>=a&&t.substring(n-a)===e},e.any=function(t,e){var n,a=t.length;for(n=0;n-1};var a=function(t){var e,n=t.constructor===Array?[]:{};if(\"object\"==typeof t){if(JSON&&JSON.parse)e=JSON.stringify(t),n=JSON.parse(e);else for(var o in t)n[o]=\"object\"==typeof t[o]?a(t[o]):t[o];return n}};e.cloneDeep=a;var o=function(){for(var t,e=/[?&]([^=#]+)=([^&#]*)/g,n=window.location.href,a={};t=e.exec(n);)a[t[1]]=t[2];return a};e.getUrlParams=o;var r=function(t){if(!t)return!0;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};e.isEmptyObject=r},function(t,e,n){\"use strict\";var a=n(30),o=n(31),r=n(2),i=n(28),s=n(32),u=n(33);t.exports={tryToDecodeURIComponent:function(t,e){var n=e||\"\";if(t)try{n=decodeURIComponent(t)}catch(t){}return n},parseSemicolonContent:function(t,e,n){e=e||{};var o,r,i=t.split(\";\"),s=i.length;for(o=0;o1&&e===r[0]?r[1]:\"\":r.length>1?r[1]:\"\"}return decodeURIComponent(n)}return\"\"},setLsCna:function(t,e,n){n&&o.set&&o.test()&&o.set(t,e+\"_\"+encodeURIComponent(n))},getLsImpv:function(t,e){if(o.get&&o.test()){var n=\"\",a=o.get(t);if(a){var r=a.split(\"||\")||[];n=e?r.length>1&&e===r[0]?r[1]:\"\":r.length>1?r[1]:\"\"}return decodeURIComponent(n)}return\"\"},setLsImpv:function(t,e,n){n&&o.set&&o.test()&&o.set(t,e+\"||\"+encodeURIComponent(n))},setLsRemoteCfg:function(t,e,n){if(n&&o.set&&o.test()){var a=i.cloneDeep(n);\"object\"==typeof a&&(a=JSON.stringify(a)),o.set(t,e+\"||\"+encodeURIComponent(a))}},getLsRemoteCfg:function(t,e){if(o.get&&o.test()){var n=\"\",a=o.get(t);if(a){var r=a.split(\"||\")||[];n=e?r.length>1&&e===r[0]?r[1]:\"\":r.length>1?r[1]:\"\"}return s.parse(decodeURIComponent(n))}return\"\"},getUrl:function(t){var e=r.getGlobalValue(\"aplus\"),a=n(3),o=t||\"//log.mmstat.com/eg.js\";try{var i=e.getMetaInfo(a.APLUS_PV_DOMAIN);i=u.fixDomain(i).replace(/\\/\\w+.gif$/,\"\"),o=i+\"/eg.js\"}catch(t){}return o}}},function(t,e){\"use strict\";function n(t){return\"string\"==typeof t?t.replace(/^\\s+|\\s+$/g,\"\"):\"\"}e.trim=n},function(t,e){\"use strict\";t.exports={set:function(t,e){try{return localStorage.setItem(t,e),!0}catch(t){return!1}},get:function(t){try{return localStorage.getItem(t)}catch(t){return\"\"}},test:function(){var t=\"grey_test_key\";try{return localStorage.setItem(t,1),localStorage.removeItem(t),!0}catch(t){return!1}},remove:function(t){localStorage.removeItem(t)}}},function(t,e){e.stringfy=function(t){if(t)try{return JSON.stringify(t)}catch(t){}return\"\"},e.parse=function(t){if(t)try{return JSON.parse(t)}catch(t){}return null},e.parseToArray=function(t){if(t)try{return JSON.parse(t)}catch(t){}return[]}},function(t,e,n){\"use strict\";function a(t){var e,n,a,r=[],i=t.length;for(a=0;a0&&r(t.eventIds,function(n){e.push({eventId:n,samplingRate:t.samplingRate})})}),e}},function(t,e,n){\"use strict\";var a=n(35),o=\"[APLUS] -- \";e.logger=function(t){t||(t={});var e=t.level||\"warn\";console&&console[e]&&console[e](o+t.msg)},e.log=function(){var t=a&&a.getMetaInfo(\"debug\");t&&console.log.apply(console,[o].concat(Array.prototype.slice.apply(arguments)))},e.debugLog=function(t){var e=n(2).getGlobalValue(\"aplus\");e&&e.aplusDebug&&this.logger(t)}},function(t,e,n){\"use strict\";function a(){return i=g||{},g}function o(){return i||a()}function r(t,e){return i||(i={}),\"aplus-inject-record-gokey\"===t&&(m(\"the API aplus-inject-record-gokey is deprecated, if needed please concat APLUS SDK supporter\"),p.record(\"/inject.record.gokey\",\"OTHER\",\"\")),i[t]=e,!0}var i,s=n(36),u=n(27),c=n(2),l=n(3),p=c.getGlobalValue(l.APLUS),f=n(37),g={},d=\"object\",_=\"string\";e.getInfo=a,e.qGet=o,e.setMetaInfo=r;var m=function(t){try{console&&console.error(t)}catch(t){}};e.catchException=m;var h=function(t){return i||(i={}),i[t]||\"\"};e.getMetaInfo=h;var v=function(t){var e=h(\"aplus-inject-record-gokey\");return\"function\"==typeof e?e(t):t.gokey};e.getUserInjectGokey=v;var b=function(t,e){if(t&&e){var n,a=function(n){try{var a=typeof e===_?JSON.parse(e):e;i(t,Object.assign({},n,a))}catch(t){}},o=function(n){try{var a=typeof e===_?JSON.parse(e):e;i(t,n.concat(a))}catch(t){}},r=function(t){t.constructor===Array?o(t):a(t)},i=function(t,e){y(t,e,{from:\"appendMetaInfo\"})},s=h(t);if(\"aplus-exinfo\"===t&&(i(t,Object.assign({},s,u.param2obj(e))),n=!0),\"aplus-page-properties\"===t){var c=e;if(s)for(var l in s)e[l]?c[l]=Object.assign({},s[l],e[l]):c[l]=s[l];i(t,c),n=!0}if(s)if(typeof s===d)r(s),n=!0;else try{var p=JSON.parse(s);typeof p===d&&(r(p),n=!0)}catch(t){}n||i(t,e)}};e.appendMetaInfo=b;var y=function(t,e){var n,a,i=\"OVERWRITE\",u=i;if(\"object\"==typeof t?(n=t.metaName,a=t.metaValue,u=t.mode||i):(n=t,a=e),u!==i)return b(n,a);if(r(n,a)){var g=c.getGoldlogVal(\"_$\")||{};g.meta_info=o();var d=c.setGoldlogVal(\"_$\",g),_=[\"setMetaInfo\",n,a,{}];return s.doPubMsg(_),s.doCachePubs(_),p.globalConfig&&!p.globalConfig.isAli&&(n===l._ANONY_ID||n===l._DEV_ID||n===l._USER_ID?f.setStorageSync(n,a?a:\"\"):(!f.getStorageSync(l._ANONY_ID)&&g.meta_info[l._ANONY_ID]&&f.setStorageSync(l._ANONY_ID,g.meta_info[l._ANONY_ID]),!f.getStorageSync(l._DEV_ID)&&g.meta_info[l._DEV_ID]&&f.setStorageSync(l._DEV_ID,g.meta_info[l._DEV_ID]),!f.getStorageSync(l._USER_ID)&&g.meta_info[l._USER_ID]&&f.setStorageSync(l._USER_ID,g.meta_info[l._USER_ID]))),d}};e._setMetaInfo=y},function(t,e,n){\"use strict\";var a=n(2),o=\"function\",r=function(){var t=a.getGlobalValue(\"aplus\"),e=t.aplus_pubsub||{},n=typeof e.publish===o;return n?e:\"\"};e.doPubMsg=function(t){var e=r();e&&typeof e.publish===o&&e.publish.apply(e,t)},e.doCachePubs=function(t){var e=r();e&&typeof e.cachePubs===o&&e.cachePubs.apply(e,t)},e.doSubMsg=function(t,e){var n=r();n&&typeof n.subscribe===o&&n.subscribe(t,e)}},function(t,e,n){\"use strict\";function a(){if(\"boolean\"==typeof d)return d;var t=!1;try{var e=navigator?navigator.userAgent||navigator.swuserAgent:\"\";if(t=!!/AliApp/i.test(e),/(AliApp\\((AP|AMAP|UC|QUARK))|DingTalkIDE/i.test(e)&&(t=!1),/AlipayIDE Taobao/.test(e)&&(t=!0),t){var n=_().ctx;s(n.canIUse)&&(t=!!n.canIUse(\"callUserTrack\"))}}catch(t){}return d=t,t}function o(){return\"boolean\"==typeof d?!!d:a()}function r(t){t=f(t)?t:{};var e=t[\"Set-Cookie\"]||t[\"set-cookie\"]||\"\",n=g(e)?e:e.split(\",\"),a={};return l(n,function(t){var e=(t||\"\").split(\";\");l(e,function(t){if(/[a-z]+=/.test(t)&&!/(path|domain|expires)=/.test(t)){var e=t.split(\"=\"),n=e[0].trim(),o=e[1];a[n]=o}})}),a}function i(t){var e=[];return l(t,function(t,n){e.push(t+\"=\"+n)}),e.join(\"; \")}var s=n(9),u=n(2),c=n(33),l=n(18),p=n(3),f=n(19),g=n(38);e.getCurrentPage=function(){var t=getCurrentPages();return t[t.length-1]||{}},e.getReferrerPage=function(){var t=getCurrentPages();return t[t.length-2]||{}};var d;e.resetIsTB=function(t){d=t},e.initIsTB=a;var _=function(){try{return{ctx:dd,platType:\"dd\",sdkType:\"ddmp\",logDomain:\"/ddm_logs\"}}catch(t){try{return{ctx:my,platType:my&&my.tb?\"taobao\":\"my\",sdkType:my&&my.tb?\"taobaomp\":\"mymp\",logDomain:\"/alipaym_logs\"}}catch(t){try{return{ctx:tt,platType:\"tt\",sdkType:\"ttmp\",logDomain:\"/bytedancem_logs\"}}catch(t){try{return{ctx:swan,platType:\"bd\",sdkType:\"bdmp\",logDomain:\"/baidum_logs\"}}catch(t){try{return{ctx:xhs,platType:\"xhs\",sdkType:\"xhsmp\",logDomain:\"/xhsm_logs\"}}catch(t){try{return{ctx:wx,platType:\"wx\",sdkType:\"wxmp\",logDomain:\"/wxm_logs\"}}catch(t){return{ctx:{},platType:\"UNKNOW\",sdkType:\"UNKNOW\"}}}}}}}};e.isTB=o,e.getPlatformType=function(){return _().platType},e.getSdkType=function(){return _().sdkType},e.getContext=function(){return _().ctx},e.getLogDomain=function(){return _().logDomain};var m=\"httpRequest\",h=\"request\",v=function(){};e.request=function(t,e,n,a){var o=u.getGlobalValue(\"aplus\"),l=_().ctx;s(a)||(a=v),s(n)||(n=v);var g=e.requestMethodName||h,d=l[g];s(d)||g===h||(g=h,d=l[g]),s(d)||g===m||(g=m,d=l[g]);var b,y=e&&e.dataType?e.dataType:\"base64\",E=e&&e.timeout?e.timeout:3e3,S=e.method||\"GET\",A=o.getMetaInfo(p.APLUS_MINI_REQUEST_TIMEOUT);t=c.fixDomain(t);var T;if(s(d)){var P={url:t,method:S,header:{},dataType:y,timeout:A||E,success:function(t){var e=t.header||t.headers||{},a=r(e);o.appendMetaInfo(p.APLUS_COOKIES,a),b||(b=!0,n(t))},fail:function(t){b||(b=!0,a({failure:!0,data:t}))}},I=o.getMetaInfo(p.APLUS_COOKIES);if(f(I)){var w=i(I);w&&(P.header.cookie=w)}\"POST\"===S&&e.data&&(P.data=e.data);var M=o.getMetaInfo(\"aplus-request-extinfo\");\"object\"==typeof M&&(P._extInfo=M),d(P)}else b||(b=!0,a({failure:!0,data:T}));setTimeout(function(){b||(b=!0,T='aplus log request\"'+t+' timeout\", time spend'+E+\"ms\",console&&console.warn(T),a({failure:!0,data:T}))},E)},e.setStorageSync=function(t,e){try{var n=_().platType,a=_().ctx;\"my\"===n||\"taobao\"===n?a.setStorageSync({key:t,data:e}):a.setStorageSync(t,e)}catch(t){}},e.getStorageSync=function(t){try{var e=_().platType,n=_().ctx;return\"my\"===e||\"taobao\"===e?n.getStorageSync({key:t}).data:n.getStorageSync(t)}catch(t){}}},function(t,e){\"use strict\";t.exports=function(t){return Array.isArray?Array.isArray(t):\"[object Array]\"===Object.prototype.toString.call(t)}},function(t,e,n){\"use strict\";function a(t){if(!document)return\"\";var e=(document.cookie||\"\").match(new RegExp(\"(?:^|;)\\\\s*\"+t+\"=([^;]+)\"));return e?e[1]:\"\"}function o(t){var e=new Date,n=\"\";if(\"session\"===t.expires);else if(t.expires&&(\"number\"==typeof t.expires||t.expires.toUTCString))\"number\"==typeof t.expires?e.setTime(e.getTime()+24*t.expires*60*60*1e3):e=t.expires,n=\"expires=\"+e.toUTCString();else{var a=20;c.indexof([\"v.youku.com\",\"www.youku.com\",\"player.youku.com\"],location.hostname)>-1&&(a=1),e.setTime(e.getTime()+365*a*24*60*60*1e3),n=\"expires=\"+e.toUTCString()}return n}function r(t,e,n){if(document){n||(n={}),e+=\";\"+(n.expires||o(n)),e+=\"; path=\"+(n.path?n.path:\"/\"),e+=\"; domain=\"+n.domain,document.cookie=t+\"=\"+e;var r=0;try{var i=navigator.userAgent.match(/Chrome\\/\\d+/);i&&i[0]&&(r=i[0].split(\"/\")[1],r&&(r=parseInt(r)))}catch(t){}return n.SameSite&&r>=80&&(e+=\"; SameSite=\"+n.SameSite,e+=\"; Secure\",document.cookie=t+\"=\"+e),a(t)}}function i(t,e,n){try{if(!document)return\"\";if(n||(n={}),n.domain)r(t,e,n);else for(var a=u.getDomains(),o=0;o0&&e.indexOf(t)!==-1})}catch(o){for(var a=0;a0?u.param2obj(t.substring(0,l)):{};delete p[\"\"],i=u.obj2param(c.assign(p,o))+\"&\"+t.substring(l,t.length)}else i=u.obj2param(o)+\"&\"+n;return i}return a}catch(t){return a}}function r(){var t=aplus&&aplus._$?aplus._$:{},e=t.meta_info||{};return e[\"aplus-exparams\"]||\"\"}function i(){var t=l.getCurrentNode(),e=p.tryToGetAttribute(t,\"exparams\"),n=o(e,r())||\"\";return n&&n.replace(/&/g,\"&\").replace(/\\buser(i|I)d=/,\"uidaplus=\")}var s=n(18),u=n(27),c=n(28),l=n(44),p=n(23),f=n(41),g=n(20),d=n(3);e.mergeExparams=o,e.getExParams=i,e.getExparamsInfos=function(t,e){var n={},o=t||[\"uidaplus\",\"pc_i\",\"pu_i\"],r=i()||\"\";r=r.replace(/&aplus&/,\"&\");for(var s=a(r)||[],u=function(t){return f.indexof(o,t)>-1},c=0;c0&&c(s,function(t){t&&\"aplus-setting\"===t.id&&r.removeChild(t)})}r.appendChild(a)},e.isTouch=function(){return\"ontouchend\"in document.createElement(\"div\")},e.isEditableElement=function(t){for(;t&&\"HTML\"!==t.tagName;){var e=s.tryToGetAttribute(t,\"contenteditable\");if(\"true\"===e)return!0;t=t.parentNode}return!1},e.elementContains=function(t,e){if(t.contains)return t.contains(e)&&t!==e;if(t.compareDocumentPosition)return!!(16&t.compareDocumentPosition(e));for(;e=e.parentNode;)if(e===t)return!0;return!1}},function(t,e,n){\"use strict\";function a(t){var e=o.APLUS_CONFIG,n=window[e]||(window[e]={});return r(t)?n[t]:n}var o=n(3),r=n(46);e.getConfig=a,e.getPid=function(){return a(\"pid\")},e.getUserId=function(){var t=a(),e=t.userProfile||{};return e.uidaplus||t.uidaplus||t.userId||t.userid},e.getUserNick=function(){var t=a(),e=t.userProfile||{};return e.nick||t.nick||t.userNick||t.usernick}},function(t,e){function n(t){return\"[object String]\"===Object.prototype.toString.call(t)}t.exports=n},function(t,e){t.exports=function(t){return\"undefined\"==typeof t}},function(t,e,n){\"use strict\";var a=n(25).nameStorage;e.getRefer=function(t){return document.referrer||a.getItem(t.REFERRER)||\"\"}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){n(50)()}}}},function(t,e,n){\"use strict\";function a(){function t(t){var e=o.getGlobalValue(\"aplus_queue\"),n={path:t};e.push({action:\"aplus.aplus_pubsub.publish\",arguments:[i.APLUS_PAGE_CHANGE,n]})}var e=s._$||{},n=e.meta_info,a=n[i.APLUS_SPA_TYPE];\"history\"===a?r.watchHistoryChange(t):\"hash\"===a&&r.watchHashChange(t)}var o=n(2),r=n(17),i=n(3),s=o.getGlobalValue(\"aplus\");t.exports=function(){a()}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){n(52)()}}}},function(t,e,n){\"use strict\";function a(t){var e,n=i.getGlobalValue(\"aplus\"),a=!1,f=function(){a||(o.wrap(function(){e=p.getAutoClkConfig();var t;u(e)&&e.length>0&&(t=l.create({autoClkConfig:e}),t.init(),c.watch_clk()),n.aplus_pubsub.subscribe(\"setMetaInfo\",function(n,a,o){if(\"aplus-auto-clk\"===n){var r=p.getAutoClkConfig(a);if(JSON.stringify(r)===JSON.stringify(e))return;e=r,c.clear(),o||(o={from:\"setMetaInfo\"}),t&&t.clear(o),t&&t.clearDom({autoClkConfig:e},o),a&&(t?t.reset({autoClkConfig:e},o):(t=l.create({autoClkConfig:e}),t.init()),c.watch_clk())}})},\"do_init\"),a=!0)};setTimeout(function(){a||s().w(\"aplus_ac_init failed! please check whether aplusJs is loaded correctly!\")},5e3);var g=n._$||{},d=window.g_SPM||{};\"complete\"===g.status&&d.spm&&f();var _=i.getGlobalValue(\"aplus_queue\");_.push({action:r.SUBSCRIBE,arguments:[\"aplusReady\",function(t){\"complete\"===t&&f(\"aplusReady\")}]}),\"function\"==typeof t&&t()}var o=n(53),r=n(3),i=n(2),s=n(20),u=n(38),c=n(54),l=n(67),p=n(64);t.exports=function(){var t=i.getGlobalValue(\"aplus\");t._aplus_ac||(t._aplus_ac={status:\"init\",elementSelectorSizeMap:{}},a(function(){t._aplus_ac.status=\"complete\"}))}},function(t,e,n){\"use strict\";var a=n(2),o=function(t,e){var n=a.getGlobalValue(\"aplus_queue\",[]);n.push({action:\"aplus._aplus_cplugin_track_deb.monitor\",arguments:[{key:\"APLUS_PLUGIN_DEBUG\",title:\"aplus_core\",msg:[\"_error_:methodName=\"+e+\",params=\"+JSON.stringify(t)],type:\"updateMsg\",description:e||\"aplus_core\"}]})},r=function(t,e,n){var o=a.getGlobalValue(\"aplus_queue\",[]);o.push({action:[\"aplus\",\"_aplus_cplugin_m\",e].join(\".\"),arguments:[t,n]})};e.do_tracker_jserror=function(t,e){var n=\"do_tracker_jserror\";r(t,n,e),o(t,n);var i=a.getGlobalValue(\"aplus\");i&&i.aplusDebug&&console&&console.warn(t)},e.wrap=function(t){if(\"function\"==typeof t)try{t()}catch(t){o({msg:t.message||t},\"exception\")}finally{}}},function(t,e,n){\"use strict\";var a=n(41),o=n(23),r=n(44),i=n(2),s=n(28),u=n(55),c=n(18),l=n(9),p=n(38),f=n(56),g=n(58),d=n(64),_=window,m=[\"iframe\",\"html\",\"body\",\"head\"],h=d.DATA_APLUS_AC_KEY,v=function(t){var e=[],n=t?o.tryToGetAttribute(t,h):\"\";if(n){var a=i.getGoldlogVal(\"_aplus_ac\")||{},r=a._acHashMap||{};u(r,function(t,a){c(a,function(t){t.hash_value===n&&e.push(t.clkConfig)})})}return{clkConfigs:e,el:t}},b=function(t){for(var e=[];t&&a.indexof(m,t.tagName?t.tagName.toLowerCase():\"html\")===-1;){var n=v(t),o=!1;if(n&&n.clkConfigs&&n.clkConfigs.length>0&&(e.push(n),o=a.some(n.clkConfigs,function(t){return!t.enableEventBubble})),o)break;t=t.parentNode}return e},y=function(t){t=t||_.event;var e=t.target||t.srcElement,n=b(e)||{};p(n)&&c(n,function(n){var a=n.clkConfigs;n&&a&&n.el&&c(a,function(a){var o=a;e=n.el;var r=g.canRecord({target:e,gmkey:\"CLK\",config:o});if(r){var i=aplus.getElementSPM(e,o.eltype),u=\"\",c=[],p={},f=g.fillPropsData(o,e,p);f=g.fillFilterData(o,e,p),f=g.fillSpmData(o,e,p),f=s.assign(f,g.getDataTrackerParams(e)),aplus.globalConfig.isUM&&o.customArgs&&(f=s.assign(f,o.customArgs));var _=d.getAutoClkUserFn();if(_){var m=g.autoUserFnHandler(_,e,o.elementSelector,o,t);if(\"object\"==typeof m)\"object\"==typeof m.userdata&&(f=s.assign(f,m.userdata)),m.spm&&(i=m.spm),m.scm&&(u=m.scm);else if(m===!1)return}c.push(\"spm=\"+i),c.push(\"scm=\"+u);for(var h in f)c.push(h+\"=\"+f[h]);c.push(\"_is_auto_clk=1\");var v=o.method||\"POST\",b=g.getDefaultLogkey({target:e,config:o});g.isAutoLogLogkey(b)&&l(o.getLogkey)&&(b=o.getLogkey(e,f),c.push(\"_is_auto_logkey=1\")),aplus_queue.push({action:\"aplus.record\",arguments:[b,\"CLK\",c.join(\"&\"),v]})}})})};e.watch_clk=function(){r.isTouch()?f.on(document,\"tap\",y):f.on(document,\"mousedown\",y)},e.clear=function(){r.isTouch()?f.un(document,\"tap\",y):f.un(document,\"mousedown\",y)}},function(t,e){\"use strict\";t.exports=function(t,e){if(Object&&Object.keys)for(var n=Object.keys(t),a=n.length,o=0;o10&&(a.status=\"panning\")}}function i(t){for(var e=0;e0)for(var n=0;n0?i[0].trim():\"\",u=i.length>1?i[1].trim():\"\",c=0;c0)for(var r=0;r0)};e.isPkgSize=C,e.filterExpConfigRequestCfg=function(t){var e=E.getDefaultRequestCfg()||{};try{var n=t||{};x(n.method)&&(e.method=n.method),C(n.pkgSize)&&(e.pkgSize=parseInt(n.pkgSize))}catch(t){s().w(t&&t.message)}return e};var L=function(t){var e=t.split(\"&\"),n={};return e.length>0&&l(e,function(t){var e=t.split(\"=\");2===e.length&&(n[e[0]]=f.tryToEncodeURIComponent(e[1]))}),n};e.autoUserFnHandler=function(t,e,n,a,o){var r={userdata:{},spm:\"\",scm:\"\"};try{var i=t(e,n,a,o);i&&(\"string\"==typeof i?r.userdata=L(i):\"object\"==typeof i&&\"object\"==typeof i.userdata&&(p(i.userdata,function(t,e){A.globalConfig&&A.globalConfig.isUM?r.userdata[t]=e:r.userdata[t]=f.tryToEncodeURIComponent(e)}),r.spm=i.spm,r.scm=i.scm))}catch(t){s().w(t)}return r};var O=function(t,e){var n=\"\";if(t&&e){var a=[];d(e.filter)&&a.push(t.getAttribute(e.filter));var o=e.props||[];l(o,function(e){d(e)?a.push(t.getAttribute(e)):m(e)&&e.source===S.ATTRIBUTES&&d(e.from)&&a.push(t.getAttribute(e.from))}),n=a.join(\"_\")}return n},U=function(t){var e=t.getAttribute(\"data-spm-anchor-id\");if(e){var n=e.split(\".\");return{a:n[0],b:n[1],c:n[2],d:n[3],e:n[4]}}};e.getSpmObj=U,e.getElementHash=function(t,e){var n={};\"aplus_webvt\"!==t.source&&(n=U(e.ele)||(window.g_SPM?window.g_SPM.getParam(e.ele):{}));var a=\"\",o=\"x\"+e.index;if(n.a&&n.b&&n.c&&n.d){var r=/^i/.test(n.d)?o:n.d;a=n.a+\"_\"+n.b+\"_\"+n.c+\"_\"+r,n.e&&(a+=\"_\"+n.e)}else a=o,A.pvid&&(a+=A.pvid);e.ignore_attr||(a+=t.logkey+\"_\",a+=t.elementSelector+\"_\",a+=O(e.ele,t));var i=o+\"_\"+u.hash(a);return i},e.filterUnloadAttr=function(t){return t&&(t=t.replace(/(href|style|data-spm-anchor-id)=[\\'|\\\"][\\w|\\W|\\.]+[\\'|\\\"]/,\"\"),t=t.replace(/\\s\\>/g,\">\"),t=t.replace(new RegExp(E.DATA_APLUS_AE_KEY+\"=[\\\\'|\\\\\\\"]\\\\w+[\\\\'|\\\\\\\"]\"),\"\"),t=t.replace(new RegExp(E.DATA_APLUS_AC_KEY+\"=[\\\\'|\\\\\\\"]\\\\w+[\\\\'|\\\\\\\"]\"),\"\")),t};var k=function(t,e){for(var n,a=0,o=t.length;a-1?u.splice(l,1):\"UPDATE\"===n&&(u=k(u,e)),s[t]=u,r._acHashMap=s,i.setGoldlogVal(o,r)}};e.updateExpHashMap=function(t,e,n){R(t,e,n,\"_aplus_auto_exp\")},e.updateClkHashMap=function(t,e,n){R(t,e,n,\"_aplus_ac\")},e.throttle=y,e.checkIsInHashMap=function(t){var e=i.getGoldlogVal(t.aplusKey)||{},n=e.hash_value||{},a=n[t.logkey]||{},o=a[t.hash_value];if(o>1)return!0;for(var r=e._acHashMap||{},s=r[t.logkey]||[],u=s.length,c=0;c=0;n--)a=t.charCodeAt(n),r^=(r<<5)+a+(r>>2);var i=(2147483647&r).toString(16);return i}},function(t,e){\"use strict\";t.exports=function(t){var e,n,a,o,r,i,s=document.getElementsByTagName(\"*\");for(e=[];t&&1==t.nodeType;t=t.parentNode)if(t.id){for(i=t.id,o=0,n=0;ne?(o&&(clearTimeout(o),o=null),u=l,s=t.apply(r,i),o||(r=i=null)):o||a.trailing===!1||(o=setTimeout(c,p)),s};return l.cancel=function(){clearTimeout(o),u=0,o=r=i=null},l}},function(t,e,n){\"use strict\";function a(t){return E&&E.getMetaInfo?E.getMetaInfo(t):p.getMetaCnt(t)}function o(){return\"on\"===a(\"aplus-auto-track-config-import\")}function r(t){for(var e=\"\",n=[\"alt\",\"title\",\"placeholder\",\"src\"],a=0;a-1?\"button\":r||n}else a=\"select\"===n?\"select\":n;return g([{key:\"feature\",value:a},{key:\"text\",value:o}],function(e){var n=e.key,a=e.value;!m(a)&&m(t[n])&&(t[n]=a)}),t.xpath=b(e),t}}})});var u=[];return g(s,function(e){var n=e.scope||[];n.indexOf(t)>-1&&u.push(e.config)}),E[a]=u,u}var u=n(2),c=n(41),l=n(23),p=n(22),f=n(20),g=n(18),d=n(38),_=n(46),m=n(65),h=n(3),v=n(59),b=n(60),y=n(66),E=u.getGlobalValue(\"aplus\");e.DATA_APLUS_AE_KEY=\"data-aplus-ae\",e.DATA_APLUS_AC_KEY=\"data-aplus-clk\",e.DATA_APLUS_SPM_ANCHOR_ID_KEY=\"data-spm-anchor-id\",e.DATA_APLUS_VT_ITEM_INDEX_KEY=\"data-aplus-vt-pos\",e.LOOP_TIME=1e3,e.getDefaultRequestCfg=function(){return{method:\"POST\",pkgSize:10}};var S=function(t){var e=t;try{var n=a(\"aplus-auto-exp-visible\");n&&(e=parseFloat(n)),e<=0&&(e=t)}catch(n){e=t}finally{return e}};e.AUTO_AT_VIEW_RATE=S(.3);var A=function(t){var e=t;try{var n=a(\"aplus-auto-exp-duration\"),o=parseInt(n);o+\"\"!=\"NaN\"&&(e=o)}catch(t){}finally{return e}};e.EXP_DURATION=A(300);var T=function(t,e){var n,o=[],r=[],i=[];try{n=e||a(t);var u=[];if(n&&\"string\"==typeof n)try{u=JSON.parse(n)}catch(t){u=JSON.parse(n.replace(/'/g,'\"'))}else\"object\"==typeof n&&n.constructor===Array&&(u=n);if(d(u)){var l=s(t);u=u.concat(l);for(var p=0;p=2?E+=\"[\"+v.shift()+'=\"'+decodeURIComponent(v.join(\"\"))+'\"]':1==v.length&&v[0]&&(E+=\"[\"+decodeURIComponent(v[0])+\"]\"),b&&(E+=b),g.elementSelector=E,c.indexof(i,E)>-1)throw new Error(\"meta \"+t+\" config error, tag_filter_cssSelector \"+E+\" repeated\");i.push(E),g.enableMultipleConfig?r.push(g):o.push(g)}}}catch(t){f().w(t)}finally{var S=[].concat(o,r);return S}};e.getAutoExpConfig=function(t){return T(\"aplus-auto-exp\",t)||[]},e.getAutoExpUserFn=function(){var t=a(\"aplus-auto-exp-userfn\");if(t){var e=window[t]||t;if(\"function\"==typeof e)return e}return null},e.isThrottleWatchDom=function(){var t=!1;try{t=\"throttle\"===a(\"aplus-auto-exp-watchdom\")}catch(t){}return t},e.getAutoClkConfig=function(t){return T(\"aplus-auto-clk\",t)||[]},e.getAutoClkUserFn=function(){var t=a(\"aplus-auto-clk-userfn\");if(t){var e=window[t]||t;if(\"function\"==typeof e)return e}return null}},function(t,e){\"use strict\";t.exports=function(t){return null===t||\"undefined\"==typeof t}},function(t,e,n){\"use strict\";var a=n(9);t.exports=function(t,e){if(t){var n=t.style||{};return a(window.getComputedStyle)&&(n=window.getComputedStyle(t)||{}),n[e]}}},function(t,e,n){\"use strict\";var a=n(10),o=n(53),r=n(20),i=n(56),s=n(58),u=n(64),c=window,l=document,p=a.extend({updateHashMapAndElementHashTag:function(t){var e=t.clkConfig,n=t.hash_value,a=t.element,o=t.isUpdateElementHashTag,r=e.logkey||\"\";if(!s.checkIsInHashMap({logkey:r,hash_value:n,aplusKey:\"_aplus_ac\"})){var i={clkConfig:e,hash_value:n,element:a,status:0,elementSelector:e.elementSelector};s.updateClkHashMap(r,i,\"ADD\"),o&&s.setRecordSuccess(i,u.DATA_APLUS_AC_KEY)}},eachElements:function(t,e){for(var n=this,a=0;a0)e.enableMultipleConfig&&n.updateHashMapAndElementHashTag({clkConfig:e,hash_value:r,element:o,isUpdateElementHashTag:!1});else{isNaN(parseInt(r))&&(r=aplus._aplus_ac.elementSelectorSizeMap[e.elementSelector]++,o.setAttribute(u.DATA_APLUS_AC_KEY,r)),!aplus.globalConfig.isAli&&e.spmB&&e.spmC&&e.spmD&&(o.setAttribute(u.DATA_APLUS_SPM_ANCHOR_ID_KEY,[e.spmB,e.spmC,e.spmD+\"_\"+(a+1)].join(\".\")),o.setAttribute(u.DATA_APLUS_VT_ITEM_INDEX_KEY,\"\"+(a+1)));var i=s.getElementHash(e,{ignore_attr:!1,index:r,ele:o});n.updateHashMapAndElementHashTag({clkConfig:e,hash_value:i,element:o,isUpdateElementHashTag:!0})}}},handler_dom_change:function(){s.clearInvalidElements(\"_aplus_ac\");for(var t=this,e=t.autoClkConfig||[],n=0;n0&&a(e),n.aplus_pubsub.subscribe(\"setMetaInfo\",function(t,n,r){if(\"aplus-auto-exp\"===t){m().w(\"aplus-auto-exp metaVaue change: \"+JSON.stringify(n));var i=l.getAutoExpConfig(n);if(JSON.stringify(i)===JSON.stringify(e))return;e=i,r||(r={from:\"setMetaInfo\"}),o(e,r,p),n&&e&&e.length>0&&a(e,r)}})},\"do_init\"),r=!0))};setTimeout(function(){r||m().w(\"aplus_auto_exp_init failed! please check whether aplusJs is loaded correctly!\")},5e3);var u=n._$||{},c=window.g_SPM||{};\"complete\"===u.status&&c.spm&&s();var _=d.getGlobalValue(\"aplus_queue\");_.push({action:g.SUBSCRIBE,arguments:[\"aplusReady\",function(t){\"complete\"===t&&s(\"aplusReady\")}]}),\"function\"==typeof t&&t()}var s,u,c,l,p,f=n(53),g=n(3),d=n(2),_=n(17),m=n(20);t.exports=function(){var t=d.getGlobalValue(\"aplus\");if(!t._aplus_auto_exp&&(t._aplus_auto_exp={tags:{},status:\"init\",exp_times:0,elementSelectorSizeMap:{}},r(),i(function(){t._aplus_auto_exp.status=\"complete\"}),t&&!t.globalConfig.isAli)){var e=d.getGlobalValue(\"aplus_queue\");e.push({action:g.SUBSCRIBE,arguments:[\"aplusReady\",function(e){if(\"complete\"===e)try{var n=t.getMetaInfo(g.APLUS_EXPOSURE_EVENT_CAN_REPEAT);n&&(_.watchHistoryChange(function(){var t=l.getAutoExpConfig()||[];o(t,{from:\"routeChange\"}),a(t,{from:\"routerChange\"})}),_.watchHashChange(function(){var t=l.getAutoExpConfig()||[];o(t,{from:\"routeChange\"}),a(t,{from:\"routerChange\"})}))}catch(t){}}]})}}},function(t,e,n){\"use strict\";var a=n(10),o=n(53),r=n(20),i=n(2),s=n(3),u=n(58),c=n(64),l=n(56),p=n(71),f=window,g=document,d=a.extend({hasExpEventSendTag:function(t){return!!(t&&t.indexOf(\"_\")>0)},eachElements:function(t,e){for(var n=e.logkey||\"\",a=0;a-1?[t.target]:\"childList\"!==t.type?[]:void 0},l=function(t,a){if(t&&t.length>0)for(var r=0;r0)for(var n=0;n=t.pLeftTop[0]&&e.x<=t.pRightBottom[0]&&e.y>=t.pLeftTop[1]&&e.y<=t.pRightBottom[1]},o=function(t,e){var n=0,o=a(t,e),r=a(t,{x:e.x+e.width,y:e.y}),i=a(t,{x:e.x,y:e.y+e.height}),s=a(t,{x:e.x+e.width,y:e.y+e.height}),u=function(){var t=0;return o&&s&&(t=e.size/e.size),t},c=function(){var n=0,a=0;return o&&r&&!i&&!s?(n=e.width,a=t.pLeftBottom[1]-e.y):!o&&r&&!i&&s?(n=t.pLeftTop[0]-e.x,a=e.y):!o&&!r&&i&&s?(n=e.width,a=e.height-Math.abs(t.pLeftTop[1]-e.y)):o&&!r&&i&&!s&&(n=t.pRightTop[0]-e.x,a=e.height),e.size>0?Math.abs(n*a)/e.size:0},l=function(){var n=0,a=0;return!o||r||i||s?o||!r||i||s?o||r||!i||s?o||r||i||!s||(n=t.pLeftTop[0]-e.x,a=t.pLeftTop[1]-e.y):(n=t.pRightTop[0]-e.x,a=t.pRightTop[1]-e.y):(n=t.pLeftBottom[0]-e.x,a=t.pLeftBottom[1]-e.y):(n=t.pRightBottom[0]-e.x,a=t.pRightBottom[1]-e.y),e.size>0?Math.abs(n*a)/e.size:0};return n=u(),n>0?n:(n=c(),n>0?n:(n=l(),n>0?n:n))};e.wrapViewabilityRate=function(t,e,n){var a=0;if(t)for(var r=0;r=n)return a;return a}},function(t,e,n){\"use strict\";function a(t,e,n){var a=p.getWinPositions(),o=0,r=u.getGoldlogVal(\"_aplus_auto_exp\")||{},i=r._acHashMap||{};for(var c in i)for(var l=i[c]||[],m=0;m=d;if(A||S>=_){h.exposureTime=t,h.status=1;var T=f.getAutoExpUserFn();T&&(h.userParams=g.autoUserFnHandler(T,h.element,h.elementSelector,h.expConfig)),h.viewabilityRate=A?e.intersectionRatio:S,h.viewability=A?\"intersection\":\"fillwindow\",f.EXP_DURATION||(h.status=2),g.updateExpHashMap(c,h,\"UPDATE\"),++o}else S&&g.updateExpHashMap(c,s.assign(l[m],{lastEventType:h.eventType}),\"UPDATE\")}}}}return o}function o(t,e){var n=\"APLUS_AE_EXPOSURE_CHANGE\",o=t&&t.type?t.type:\"IObserver\",r=(new Date).getTime(),i=0;i=e?l.filterStartExposureSize(r,t):a(r,t),i>0&&(f.EXP_DURATION?setTimeout(function(){i=l.filterEndExposureSize(r,o),i>0&&aplus.aplus_pubsub.publish(n,{size:i,eventType:o})},f.EXP_DURATION):aplus.aplus_pubsub.publish(n,{size:i,eventType:o}))}function r(t){var e={root:null,rootMargin:\"0px\",threshold:d};return new h(function(t){c(t,function(t){t.intersectionRatio>0&&o(t)})},s.assign(e,t))}function i(t){if(h){v.io_base||(v.io_base=r());var e=u.getGoldlogVal(\"_aplus_auto_exp\")||{},n=e._acHashMap||{};for(var a in n)for(var o=n[a]||[],i=0;i=u,E=b;v&&(E=r.wrapViewabilityRate(a,m,u));var S=m.width*m.height*E,A=r.getViewabilityRateInWindow(a,S,c),T=r.checkIsRecord(m.element,m.hash_value,\"_aplus_auto_exp\");if((y||A>=c)&&!T){m.exposureTime=t,m.status=1;var P=i.getAutoExpUserFn();P&&(m.userParams=s.autoUserFnHandler(P,m.element,m.elementSelector,m.expConfig)),i.EXP_DURATION||(m.viewabilityRate=y?b:A,m.viewability=y?\"intersection\":\"fillwindow\",m.status=2),s.updateExpHashMap(g,m,\"UPDATE\"),++n}}}}return n},e.filterEndExposureSize=function(t,e){var n=0;a||(a=r.getWinPositions());var i=o.getGoldlogVal(\"_aplus_auto_exp\")||{},c=i._acHashMap||{};for(var l in c)for(var p=c[l]||[],f=0;f0&&(i.EXP_DURATION?setTimeout(function(){r=o.filterEndExposureSize(a,n),r>0&&aplus.aplus_pubsub.publish(e,{size:r,eventType:n})},i.EXP_DURATION):aplus.aplus_pubsub.publish(e,{size:r,eventType:n}))},u=r.throttle(function(t){s(t)},100),c={},l=function(t,e){if(t&&t.forEach&&Object.keys&&document.querySelector){t.forEach(function(t){t.positionSelector&&document.querySelector(t.positionSelector)&&(c[t.positionSelector]=!0)});var n=Object.keys(c);n.forEach(function(t){a[e]&&a[e](document.querySelector(t),\"scroll\",function(t){u(t)})})}};e.watch_exposure_change=function(t){aplus.aplus_pubsub.subscribe(\"APLUS_AE_DOM_CHANGE\",s),a.on(window,\"touchmove\",u),a.on(window,\"scroll\",u),a.on(window,\"resize\",s),l(t,\"on\")},e.clear=function(t){a.un(window,\"touchmove\",u),a.un(window,\"scroll\",u),a.un(window,\"resize\",s),l(t,\"un\")}},function(t,e,n){\"use strict\";function a(t,e,n){var a=\"0\";if(n){if(\"spmc\"===t){var o=n.split(\".\");a=o[2]?o[2]:o[3],/^(\\i|\\d)[0-9]+$/.test(a)&&(a=\"0\"),n=[o[0],o[1],a].join(\".\")}}else n=aplus.getElementSPM(e,t);return n}function o(){i||(i=!0,aplus.on(window,\"beforeunload\",function(){clearInterval(r);for(var t=0;t0;)_.updateExpHashMap(e,a.pop(),\"CLEAR\")})},y=[],E=function(){r=setInterval(function(){y.length>0?aplus_queue.push(y.pop()):(clearInterval(r),r=null)},200)},S=function(t,e,n){var a=t.logkeyContainer||[],o=t.request_cfg||{};s.wrap(function(){p(a,function(t,a){var r=_.isCombineRecordLogkey(t);if(g(a)&&a.length>0){for(var i=0;i0){r||E();var e=h()||{};S(e,t,b)}};e.watch_data_change=function(){aplus.aplus_pubsub.subscribe(\"APLUS_AE_EXPOSURE_CHANGE\",A),o()},e.clear=function(){aplus.aplus_pubsub.unsubscribe(\"APLUS_AE_EXPOSURE_CHANGE\",A)}},function(t,e,n){\"use strict\";var a=n(77),o=n(3),r=n(25).nameStorage,i=n(48);t.exports=function(){return{recordValInWindowName:function(){var t,e,n=o.HTTPS==location.protocol,a=aplus.globalConfig.NAMESTORAGE_KEYS||{},s=parent!==self;if(!s&&n){var u=location.href,c=n&&(u.indexOf(\"login.taobao.com\")>=0||u.indexOf(\"login.tmall.com\")>=0),l=i.getRefer(a);c&&l?(t=l,e=r.getItem(a.REFERRER_PV_ID)):(t=u,e=aplus.pvid),r.setItem(a.REFERRER,t),r.setItem(a.REFERRER_PV_ID,e)}},run:function(){var t=this;a.on(window,\"beforeunload\",function(){t.recordValInWindowName()})}}}},function(t,e,n){\"use strict\";function a(t,e,n){var a=aplus._$||{},o=a.meta_info||{},r=o.aplus_ctap||{},i=o[\"aplus-touch\"];if(r&&\"function\"==typeof r.on)r.on(t,e);else{var s=\"ontouchend\"in document.createElement(\"div\");!s||\"tap\"!==i&&\"tapSpm\"!==n&&\"tap\"!==n?u(t,s?\"touchstart\":\"mousedown\",e):l.on(t,e)}}function o(t){try{document.documentElement.doScroll(\"left\")}catch(e){return void setTimeout(function(){o(t)},1)}t()}function r(t){var e=0,n=function(){0===e&&t(),e++};\"complete\"===document.readyState&&n();var a;if(document.addEventListener)a=function(){document.removeEventListener(\"DOMContentLoaded\",a,!1),n()},document.addEventListener(\"DOMContentLoaded\",a,!1),window.addEventListener(\"load\",n,!1);else if(document.attachEvent){a=function(){\"complete\"===document.readyState&&(document.detachEvent(\"onreadystatechange\",a),n())},document.attachEvent(\"onreadystatechange\",a),window.attachEvent(\"onload\",n);var r=!1;try{r=null===window.frameElement}catch(t){}document.documentElement.doScroll&&r&&o(n)}}function i(t){\"complete\"===document.readyState?t():u(window,\"load\",t)}function s(t){var e=history[t];return function(){var n;try{n=new Event(t),n.arguments=arguments}catch(e){n=document.createEvent(\"Event\"),n.initEvent(t,!0,!0)}window.dispatchEvent(n);var a=e.apply(this,arguments);return a}}function u(){var t=window,e=arguments;if(2===e.length)\"DOMReady\"===e[0]&&r(e[1]),\"onload\"===e[0]&&i(e[1]);else if(3===e.length){var n=e[0],o=e[1],u=e[2];if(\"tap\"===o||\"tapSpm\"===o)a(n,u,o);else{[\"pushState\",\"replaceState\"].indexOf(o)>-1&&(history[o]=s(o));var l=document.attachEvent?\"attachEvent\":\"addEventListener\",p=!!document.attachEvent;n[l]((p?\"on\":\"\")+o,function(e){e=e||t.event;var n=e.target||e.srcElement;\"function\"==typeof u&&u(e,n)},!!c(o)&&{passive:!0})}}}var c=n(78),l=n(57);e.DOMReady=r,e.onload=i,e.on=u},function(t,e){var n;t.exports=function(t){if(\"boolean\"==typeof n)return n;if(!/touch|mouse|scroll|wheel/i.test(t))return!1;n=!1;try{var e=Object.defineProperty({},\"passive\",{get:function(){n=!0}});window.addEventListener(\"test\",null,e)}catch(t){}return n}},function(t,e,n){\"use strict\";var a=n(77),o=n(80);t.exports=function(){return{do_tracker_lostpv:function(t){if(t&&t.page){var e=t.spm_ab?t.spm_ab.split(\".\"):[],n=navigator&&navigator.sendBeacon?\"post\":\"get\",a=\"record_lostpv_by\"+n+\"_\"+t.msg,r=new o({ratio:t.ratio||this.options.config.lostPvRecordRatio});r.run({code:102,page:t.page,msg:a,spm_a:e[0],spm_b:e[1],c1:t.duration,c2:t.page_url})}},recordLostPv:function(t){var e=window.aplus||{},n=e._$=e._$||{},a=e.spm_ab?e.spm_ab.join(\".\"):\"0.0\",o=n.send_pv_count||0;if(o<1&&navigator&&navigator.sendBeacon){var r=location.hostname+location.pathname;this.do_tracker_lostpv({page:r,page_url:location.protocol+\"//\"+r,duration:t,spm_ab:a,msg:\"dom_state=\"+document.readyState\n})}},run:function(){var t=this,e=new Date;a.on(window,\"beforeunload\",function(){var n=new Date,a=n.getTime()-e.getTime();t.recordLostPv(a)})}}}},function(t,e,n){var a=n(27),o=n(28),r=n(34),i={ratio:1,logkey:\"fsp.1.1\",gmkey:\"\",chksum:\"H46747615\"},s=function(t){t&&\"object\"==typeof t||(t=i),this.opts=t,this.opts.ratio=t.ratio||i.ratio,this.opts.logkey=t.logkey||i.logkey,this.opts.gmkey=t.gmkey||i.gmkey,this.opts.chksum=t.chksum||i.chksum},u=s.prototype;u.getRandom=function(){return Math.floor(100*Math.random())+1},u.run=function(t,e){var n,i,s={pid:\"aplus\",code:101,msg:\"\u5f02\u5e38\u5185\u5bb9\"},u=\"\";try{var c=window.aplus||{},l=c._$||{},p=l.meta_info||{},f=parseFloat(p[\"aplus-tracker-rate\"]);if(n=this.opts||{},\"number\"==typeof f&&f+\"\"!=\"NaN\"||(f=n.ratio),i=this.getRandom(),e||i<=100*f){u=\"//gm.mmstat.com/\"+n.logkey,t.rel=c.globalConfig.script_name+\"@\"+c.globalConfig.lver,t.type=t.code,t.uid=encodeURIComponent(c.getCookieCna(\"cna\")),t=o.assign(s,t);var g=a.obj2param(t);c.tracker=c.send(u,{cache:o.makeCacheNum(),gokey:g,logtype:\"2\"},\"POST\")}}catch(t){r.logger({msg:\"tracker.run() exec error: \"+t})}},t.exports=s},function(t,e,n){\"use strict\";var a=n(2);t.exports=function(){return{run:function(){var t=a.getGlobalValue(\"aplus\"),e=a.getGlobalValue(\"aplus_queue\");if(!t._aplus_cplugin_m){var o=this.options.config;t._aplus_cplugin_m=n(82).run(o),[\"www.taobao.com\",\"detail.tmall.com\",\"item.taobao.com\"].indexOf(location.hostname)>-1&&(e.push({action:\"aplus.record\",arguments:[\"/aplus.monitor.log_arrival_rate\",\"OTHER\",{requestType:\"imgGet\"},\"GET\"]}),e.push({action:\"aplus.record\",arguments:[\"/aplus.monitor.log_arrival_rate\",\"OTHER\",{requestType:\"sendBeaconPost\"},\"POST\"]}))}}}}},function(t,e,n){\"use strict\";var a=n(34),o=n(80),r=navigator&&navigator.sendBeacon?\"post\":\"get\";e.run=function(t){return{status:\"complete\",do_tracker_jserror:function(e){try{var n=new o({logkey:e?e.logkey:\"\",ratio:e&&\"number\"==typeof e.ratio&&e.ratio>0?e.ratio:t.jsErrorRecordRatio}),i=[\"Message: \"+e.message,\"Error object: \"+e.error].join(\" - \"),s=aplus.spm_ab||[],u=location?location.hostname+location.pathname:\"\";n.run({code:110,page:u,msg:\"record_jserror_by\"+r+\"_\"+e.message,spm_a:s[0],spm_b:s[1],c1:i,c2:e.filename,c3:location?location.protocol+\"//\"+u:\"\"})}catch(t){a.logger({msg:t})}},do_tracker_browser_support:function(e){var n=!1;try{if(e&&e.page){var i=e.spm_ab?e.spm_ab.split(\".\"):[],s=new o({ratio:e.ratio||t.browserSupportRatio}),u=aplus._aplus_client||{},c=u.ua_info||{};s.run({code:111,page:e.page,msg:e.msg+\"_by\"+r,spm_a:i[0],spm_b:i[1],c1:[c.o,c.b,c.w].join(\"_\"),c2:e.etag||\"\",c3:e.cna||\"\"}),n=!0}}catch(t){a.logger({msg:t})}return n}}}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){var t=n(84),e=t.create({WS:null,format:\"ALI\"});e.run(this.options)}}}},function(t,e,n){\"use strict\";var a=n(10),o=n(85),r=n(21),i=n(3),s=n(2),u=s.getGlobalValue(\"aplus\");t.exports=a.extend({subscribeLogs:function(t,e){var n=this;r.pushIntoGoldlogQueue(i.SUBSCRIBE,[t,function(t){t.status===i.COMPLETE&&n._canSendToGroup()&&e(t)}])},getLogicSymbol:function(){return\"ALI\"===this.format?\"&\":\"||\"},watchLOG:function(){var t=this,e=function(t,e){var n=u.getMetaInfo(i.APLUS_BRIDGE_NAME);if(!n){var a,r=o.getHttpBasicParams(t.what_to_send.logdata),s=t.where_to_send.method,c=u.getMetaInfo(\"aplus-first-tracking\"),l=s;\"POST\"===s&&navigator&&navigator.sendBeacon?(l=\"POST\",a=\"pv\"===e?r.objStr:JSON.stringify(r.obj)):(l=\"GET\",a=r.objStr),c&&\"pv\"===e&&u.send(t.where_to_send.url,r.objStr.replace(/a21dvn\\.b28762401\\.0\\.0/,\"a1z1d1.26790227.0.0\"),\"GET\"),u.send(t.where_to_send.url,a,l)}};t.subscribeLogs(\"mw_change_pv\",function(t){e(t,\"pv\")}),t.subscribeLogs(\"mw_change_hjlj\",function(t){e(t,\"aplus\")})},_canSendToGroup:function(){var t=u.getMetaInfo(i.APLUS_LOG_PIPE);return\"\"===t||/ALIGROUP/.test(t)},run:function(){this.watchLOG()}})},function(t,e,n){\"use strict\";function a(t,e){var n=t.client||{},a=n.screenWidth||\"\",o=n.screenHeight||\"\",r=a+e+o;return a&&o?r:\"-\"}function o(t,e){return _(e,function(e){delete t[e]}),t}function r(){if(\"boolean\"!=typeof h){var t=navigator.userAgent;h=/Trident/.test(t)}return h}function i(t,e){var n=g.cloneDeep(t.gokey);return n.cache=t.cache,n=g.assign(n,t.sdk_info),n=g.assign(n,t.client),n=g.assign(n,t.etag),delete n.egUrl,n=o(n,[\"userAgent\",\"pvid\",\"cna\",\"screenWidth\",\"screenHeight\"]),n._g_encode||(n._g_encode=\"utf-8\"),f.encodeGokeyValue(g.cloneDeep(n))}function s(t,e){return v(t,[[p.SPM_CNT,e[p.SPM_CNT]],[p.SPM_URL,e[p.SPM_URL]],[p.SPM_PRE,e[p.SPM_PRE]]]),t}function u(t,e){var n=t;if(t.indexOf(\"uidaplus=\")>-1){var a=t.split(\"uidaplus=\");if(\"&\"===a[1][0])n=t.replace(/uidaplus=/,\"uidaplus=\"+e);else{var o=a[1].split(\"&\");o[0]=e,n=a[0]+\"uidaplus=\"+o.join(\"&\")}}else n=\"uidaplus=\"+e+\"&\"+t;return n}function c(t){var e=d.getGoldlogVal(\"_$\")||{},n=e.meta_info||{},o=t.logtype,c=n[\"aplus-ifr-pv\"]+\"\"==\"1\",l=parent!==self;o=l&&!c?\"0\":\"1\";var g=[[\"logtype\",o],[\"title\",t.title],[\"pre\",t.pre],[\"scr\",a(t,\"x\")]];r()||g.push([\"_p_url\",t.url]),v(g,[[f.s_plain_obj,\"cna=\"+t.cna],[\"nick\",t._user_nick],[\"wm_pageid\",n.ms_data_page_id],[\"wm_prototypeid\",n.ms_prototype_id],[\"wm_sid\",n.ms_data_shop_id]]),g=s(g,t.gokey||{});var _=t.exparams||\"\",h=m.getUserId();h&&(_=u(_,h)),_.indexOf(\"&aplus&\")===-1?g.push([f.s_plain_obj,\"uidaplus=\"+h+\"&\"+p.APLUS]):g.push([f.s_plain_obj,_]);var b=i(t,\"PV\");for(var y in b)v(g,[[y,b[y]]]);var E=f.arr2param(g);return{objStr:E,obj:f.param2obj(E)}}function l(t){var e=[[\"gmkey\",t.gmkey]],n=i(t,\"LOG\");v(e,[[\"gokey\",f.obj2param(n)],[f.s_plain_obj,\"cna=\"+t.cna]]),e=s(e,t.gokey||{});var a=m.getUserId();v(e,[[\"_gr_uid_\",a],[\"uidaplus\",a],[\"logtype\",t.logtype],[\"nick\",t._user_nick],[\"scr\",t.client.scr]]),n._isCombine&&e.push([\"_isCombine\",1]),r()||e.push([\"_p_url\",t.url]);var o=f.arr2param(e);return{objStr:o,obj:f.param2obj(o)}}var p=n(3),f=n(27),g=n(28),d=n(2),_=n(18),m=n(42);e.getKeyIndex=function(t){var e={protocol:1,event_args:25};return e[t]};var h,v=function(t,e){var n,a,o,r,i=e.length;for(n=0;n=0;return(r?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,o)).toString().substr(1)+a}e.getFormatDate=function(t){var e=new Date;try{return[e.getFullYear(),n(e.getMonth()+1,2,0),n(e.getDate(),2,0)].join(t||\"\")}catch(t){return\"\"}}},function(t,e,n){\"use strict\";var a=n(29);e.getUrl=function(t){var e=a.getUrl(t&&t.egUrl);return e}},function(t,e,n){\"use strict\";function a(t,e){if(\"dynamics\"===e){var n=[\"gm.mmstat.com\",\"wgo.mmstat.com\"];return n.indexOf(t)>-1?\"d-\"+t:t}}function o(t){function e(){var t=r.getGlobalValue(\"aplus\"),e=t.getMetaInfo(\"aplus-rhost-g\"),n=a(e,o);n!==e&&t.setMetaInfo(\"aplus-rhost-g\",n)}t=t||{};var n=t.maxCount||1,o=t.networkType||\"static\",s=t.directSwitch||!1,u=0;return function(t){t=t||s,t?e():(++u,u>=n&&(i.logger({lever:\"warn\",msg:\"\u65e5\u5fd7\u4e0a\u62a5\u5931\u8d25\uff0c\u6ce8\u610f\uff0c\u8981\u5207\u6210\u52a8\u6001\u7f51\u7edc\u5566!\"}),e(),u=0))}}var r=n(2),i=n(34);e.toDynamicsNetwork=o({maxCount:1,networkType:\"dynamics\",directSwitch:!1})},function(t,e,n){\"use strict\";function a(){var t=i.getGlobalValue(\"aplus\"),e=t.getMetaInfo(r.APLUS_CNA_MODE);return e}function o(){var t=i.getGlobalValue(\"aplus\");return\"on\"===t.getMetaInfo(r.APLUS_CNA_ENABLE)}var r=n(3),i=n(2),s=n(9),u=n(46),c=n(92),l=n(18),p=n(29),f=n(44),g=n(88);e.getCnaMode=a,e.isCnaEnable=o,e.requestCna=function(t,e){function n(t){s(e)&&e(t)}var o=a();\"LS\"===o?c.request(t,function(t){if(u(t)){var e=t.split(\";\");l(e,function(t){if(/^goldlog\\.Etag/.test(t)){var e=t.split(\"=\")[1].replace(/\\\"/g,\"\"),n=i.getGoldlogVal(\"globalConfig\")||{},a=g.getFormatDate();i.setGoldlogVal(\"Etag\",e),p.setLsCna(n.ETAG_STORAGE_KEY,a,e)}else if(/^goldlog\\.stag/.test(t)){var o=+t.split(\"=\")[1];i.setGoldlogVal(\"stag\",o)}})}n()},function(t){n(t)}):f.loadScript(t,function(t){n(t)})}},function(t,e,n){\"use strict\";var a=n(3),o=n(9),r={base:1e4,timeout:1e4},i=function(t,e,n,i){/^\\/\\//.test(t)&&(t=a.HTTPS+t);var s=!0,u=i&&i.timeout?i.timeout:r.timeout;setTimeout(function(){s&&(s=!1,o(n)&&n({timeout:u}))},u),window.fetch(t).then(function(t){return/application\\/json/.test(t.headers.get(\"content-type\"))?t.json():t.text()}).then(function(t){s&&(e(t),s=!1)}).catch(function(t){s&&n(t)})},s=function(t,e,n,a){var o,i=\"GET\",s=function(){o.responseText?e(o.responseText):n()},u=window.XMLHttpRequest&&\"withCredentials\"in new XMLHttpRequest;u?(o=new XMLHttpRequest,o.open(i,t,!0)):(o=new window.XDomainRequest,o.open(i,t));var c=a&&a.timeout?a.timeout:r.timeout;o.timeout=c,o.onload=s,o.onerror=n,o.ontimeout=n,o.send()},u=function(t,e,n,a){window.fetch?i(t,e,n,a):s(t,e,n,a)},c=function(t,e){t=t||{},t.method=(t.method||\"POST\").toUpperCase(),t.url=t.url||\"\",t.data=t.data||null,t.success=t.success||function(){},t.error=t.error||function(){};var n=new XMLHttpRequest,a=[];for(var o in t.data)a.push(o+\"=\"+encodeURIComponent(t.data[o]));var r=a.join(\"&\"),i=JSON.stringify(t.data||{});\"POST\"===t.method?(n.open(t.method,t.url,!0),n.setRequestHeader(\"Content-Type\",e||\"application/json\")):\"GET\"===t.method&&n.open(t.method,t.url+\"?\"+r,!0),n.withCredentials=!0,n.timeout=3e3,n.onreadystatechange=function(){if(4==n.readyState&&200==n.status){var e={};try{e=JSON.parse(n.responseText)}catch(t){}t.success(e)}else 4==n.readyState&&t.error(n.staus)},\"POST\"===t.method?n.send(i):n.send()};e.request=u,e.request4um=c},function(t,e){\"use strict\";t.exports=function(){return{getMiniAppTrackInfo:function(t){var e=window;e.__megabilityBridge(\"TinyApp\",\"getMiniAppTrackInfo\",{},function(e){var n=(e.data||{}).result,a={_aplus_luid:n.luid,_aplus_lunick:n.lunick,_aplus_lusite:n.lusite,_aplus_uid:n.uid,_aplus_unick:n.unick,_aplus_usite:n.usite,mini_app_id:n.miniapp_id};t(a)},function(){t({})})},run:function(t,e){var n=this,a=window,o=a&&\"undefined\"!=typeof a.__megabilityBridge,r=\"{}\"!==JSON.stringify(n.options.context.pha_trackinfo);if(!r&&a.pha&&a.pha.environment&&\"object\"==typeof a.pha.environment.miniappAppInfo&&o)return n.getMiniAppTrackInfo(function(t){n.options.context.pha_trackinfo&&(n.options.context.pha_trackinfo=t),e()}),200}}}},function(t,e,n){\"use strict\";var a=n(2);t.exports=function(){return{getMetaInfo:function(){var t=a.getGoldlogVal(\"_$\")||{},e=t.meta_info;return e},getAplusWaiting:function(){var t=this.getMetaInfo()||{};return t[\"aplus-waiting\"]},run:function(t,e){var n=this.options.config||{},o=this.getAplusWaiting(),r=!0,i=a.getGlobalValue(\"aplus\"),s=\"default\";if(i.globalConfig.isAli&&(s=window.APLUS_CONFIG&&window.APLUS_CONFIG.pvTrack||s,\"off\"===s&&(r=!1)),n.is_auto){if(!r)return\"done\";if(o)switch(o=this.getAplusWaiting()+\"\",this.options.context.when_to_sendpv={aplusWaiting:o},o){case\"MAN\":return\"default\"===s?\"done\":void 0;case\"1\":return this.options.context.when_to_sendpv.isWait=!0,setTimeout(function(){e()},6e3),6e3;default:var u=1*o;if(u+\"\"!=\"NaN\")return this.options.context.when_to_sendpv.isWait=!0,setTimeout(function(){e()},u),u}}}}}},function(t,e,n){\"use strict\";var a=n(96),o=n(2),r=n(62),i=n(20),s=\"POST\",u=\"GET\";t.exports=function(){return{getMetaInfo:function(){var t=o.getGoldlogVal(\"_$\")||{},e=t.meta_info;return e},getAplusMetaByKey:function(t){var e=this.getMetaInfo()||{};return e[t]},getRhost:function(t){var e=\"\",n=\"\";if(\"PV\"===t)n=\"aplus-rhost-v\",e=this.getAplusMetaByKey(n);else if(n=\"aplus-rhost-g\",e=this.getAplusMetaByKey(n),[\"wgo.mmstat.com\",\"gm.mmstat.com\"].indexOf(e)>-1)a.isMobile()&&/gm/.test(e)&&(e=\"wgo.mmstat.com\"),!a.isMobile()&&/wgo/.test(e)&&(e=\"gm.mmstat.com\");else if(a.isMobile()){var o=e.match(/\\/[a-z]+$/);r(o)?e+=\"/wap\":e=e.replace(o[0],\"/wap\"+o[0])}return e},getHjljHostUrl:function(t){var e=/^\\/\\//.test(t)?\"\":\"//\",n=/\\/$/.test(t)?\"\":\"/\",a=e+t+n,o=this.options.context.userdata||{},r=o.logkey;return r?a+=/^(\\/)/.test(r)?r.substr(1):r:i().w(\"eventCode \"+r+' is invalid, suggestion: \"/aplus.1.1\"'),a},getPvHostUrl:function(t){var e=/^\\/\\//.test(t)?\"\":\"//\",n=/\\/$/.test(t)?\"\":\"/\",r=o.getGoldlogVal(\"_$\")||{},i=r.meta_info||{},s=i[\"aplus-ifr-pv\"]+\"\"==\"1\",u=parent!==self;if(/\\.gif$/.test(t))return e+t;var c=\"v.gif\";return a.isMobile()&&(c=\"m.gif\"),u&&!s&&(c=\"y.gif\"),e+t+n+c},getChannel:function(t){var e,n=this.getAplusMetaByKey(\"aplus-channel\"),a=[\"WS\",\"WS-ONLY\",u,s];return a.indexOf(t)>-1&&(e=t),!e&&a.indexOf(n)>-1&&(e=n),e},run:function(){var t=!!this.options.context.is_single;if(!t){var e=this.options.config.recordType,n=this.getRhost(e);if(!n)return\"done\";var a;a=\"PV\"===e?this.getPvHostUrl(n):this.getHjljHostUrl(n);var o=this.options.config||{},r=this.getChannel(o.method)||s;r!==s||navigator&&navigator.sendBeacon||(r=u),this.options.context.where_to_send.method=o.method,this.options.context.where_to_send.url=a}}}}},function(t,e){\"use strict\";e.isMobile=function(){var t=navigator?navigator.userAgent:\"\",e=/AliApp|Yunos|cyclone/i.test(t),n=/iPhone|iPad|iPod/i.test(t),a=/Android/i.test(t),o=/ArkWeb/i.test(t),r=/Windows Phone/i.test(t)||/IEMobile/i.test(t)||/WPDesktop/i.test(t),i=/BlackBerry/i.test(t),s=/Opera Mini/i.test(t);return e||n||a||o||r||i||s}},function(t,e,n){\"use strict\";var a=n(39),o=n(17),r=n(28),i=n(96),s=n(2),u=n(45),c=n(42),l=n(3),p=s.getGlobalValue(\"aplus\");t.exports=function(){return{getPageId:function(){var t=this.options.config||{},e=this.options.context||{},n=e.userdata||{};return t.page_id||t.pageid||t.pageId||n.page_id},resetSpmB:function(){var t=this.options.config||{},e=s.getGlobalValue(\"aplus\");if(!t.is_auto&&e.spmAPI){var n=s.getGoldlogVal(\"_$\")||{},a=n.spm||{},o=a.data.b;if(o){var r=this.getPageId();o=r?o.split(\"/\")[0]+\"/\"+r:o.split(\"/\")[0],e.spmAPI.setB(o);var i=a.spm_cnt.split(\".\");i&&i.length>2&&(i[1]=o,a.spm_cnt=i.join(\".\"))}}},getCommonParams:function(){var t=this.options.context||{},e=t.etag||{},n=t.userdata||{},l=s.getGoldlogVal(\"_$\")||{},f=l.spm||{},g=this.options.config||{},d=i.isMobile()?\"WAP\":\"PC\",_=p.getMetaInfo(\"aplus-first-tracking\"),m=u.getPid(),h=u.getConfig(\"codeVersion\"),v={_f_t:!!_};m&&(v.pid=m),h&&(v.code_version=h),t.pha_trackinfo&&(v=r.assign(v,t.pha_trackinfo));var b={};p.globalConfig.isAli&&(b={\"spm-url\":f.spm_url||\"\",\"spm-pre\":f.spm_pre||\"\",\"spm-cnt\":f.spm_cnt||\"\",pvid:p.pvid||\"\"});var y=(p.globalConfig.isDecodeUrl?\"DC_\":\"\")+Math.floor(268435456*Math.random()).toString(16),E={appId:p.getMetaInfo(\"appKey\")||p.getMetaInfo(\"appId\"),cache:y,cna:e.cna||a.getCookieCna(\"cna\"),etag:e,pre:l.page_referrer||\"-\",sdk_info:{jsver:p.globalConfig.script_name,lver:p.globalConfig.lver,customSdkId:p.getMetaInfo(\"customSdkId\")||\"\",platformType:d.toLowerCase()},trackerEventCode:g.trackerEventCode,title:g.title||document&&document.title,url:g.pageUrl||(location?location.href:\"-\"),client:p._aplus_client||{},gokey:r.assign(b,v),_user_nick:c.getUserNick(),gmkey:n.gmkey||\"\",method:this.options.context.where_to_send.method},S=o.getParamFromUrl(\"scm\",location.href)||\"\";return S&&(E.scm=S),n.gokey&&n.gokey.alsc_spm_url&&(E.gokey[\"spm-url\"]=n.gokey.alsc_spm_url),n.gokey&&n.gokey.alsc_spm_pre&&(E.gokey[\"spm-pre\"]=n.gokey.alsc_spm_pre),n.gokey&&n.gokey.alsc_page_name&&(E.title=n.gokey.alsc_page_name),E},getPvParams:function(){var t=this.options.context.where_to_send.url,e=this.getCommonParams();this.options.config.is_auto||(e.sdk_info.mansndlog=1);var n=\"/v.gif\";return/yt\\.gif$/.test(t)?n=\"yt.gif\":i.isMobile()&&(n=\"/m.gif\"),r.assign(e,{event_code:\"2001\",logtype:\"1\",logkey:n,event_timestamp:p._$.send_pv_count>0?new Date:p.logConfig.pageLoadTime})},checkEventCodeLegality:function(t){return/^(([0-9])|([1-9][0-9]{1,5}))$/.test(t)},getHjljParams:function(){var t=this.options.context||{},e=t.userdata||{},n=this.checkEventCodeLegality(e.gmkey)?e.gmkey:l.OTHER,a={event_code:l.EVENT_ID_MAP[e.gmkey]||n,logtype:\"2\",logkey:e.logkey,event_timestamp:new Date};return e[\"spm-cnt\"]&&(a[\"spm-cnt\"]=e[\"spm-cnt\"]),e[\"spm-pre\"]&&(a[\"spm-pre\"]=e[\"spm-pre\"]),r.assign(this.getCommonParams(),a)},run:function(){var t={};\"PV\"===this.options.config.recordType?(this.resetSpmB(),t=this.getPvParams()):t=this.getHjljParams(),this.options.context.what_to_send.logdata=t}}}},function(t,e,n){\"use strict\";var a=n(28),o=n(39);t.exports=function(){return{run:function(){var t={},e=o.getCookie(\"workno\")||o.getCookie(\"emplId\");e&&(t.workno=e);var n=o.getHng();n&&(t._hng=o.getHng());var r;r=this.options.context.what_to_send.logdata,r.gokey=a.assign(r.gokey,t)}}}},function(t,e,n){\"use strict\";var a=n(27),o=n(38),r=n(28),i=n(2);t.exports=function(){return{getUserdata:function(){var t=i.getGlobalValue(\"aplus\"),e=this.options.config||{},n={};e&&!e.is_auto&&e.gokey&&(\"string\"==typeof e.gokey?n=a.param2obj(e.gokey):\"object\"==typeof e.gokey&&(n=e.gokey));var s=function(t){o(t)?t.forEach(function(t){n=r.assign(n,t)}):n=r.assign(n,t)};s(t.getMetaInfo(\"aplus-globaldata\")),s(t.getMetaInfo(\"aplus-cpvdata\"));var u=this.options.context||{},c=u.userdata||{};return s(c),n},processLodashDollar:function(){var t=this.options.config||{},e=i.getGoldlogVal(\"_$\")||{};t&&t.referrer&&(e.page_referrer=t.referrer),i.setGoldlogVal(\"_$\",e)},updatePre:function(t){var e=i.getGoldlogVal(\"_$\")||{};return e.page_referrer&&(t.pre=e.page_referrer),t},run:function(){var t=this.options.context.what_to_send.logdata,e=r.assign(this.getUserdata(),t.userdata||{});this.processLodashDollar(),t.gokey=r.assign(t.gokey,e),t=this.updatePre(t),this.options.context.what_to_send.logdata=t,this.options.context.userdata=t.gokey,this.options.context.pure_userdata=e}}}},function(t,e,n){\"use strict\";var a=n(43),o=n(101),r=n(13);t.exports=function(){return{getExParamsInfo:function(){var t=a.getExParams();return this.options.context.what_to_send.logdata.exparams=t,o(t)},run:function(){var t=this.options.context.what_to_send.logdata.gokey;t=r(this.getExParamsInfo(),t),this.options.context.what_to_send.logdata.gokey=t}}}},function(t,e,n){var a=n(27);t.exports=function(t){var e={};try{var n=a.param2obj(t.replace(/&/g,\"&\").replace(/\\buser(i|I)d=/,\"uidaplus=\").replace(/&aplus&/,\"&\"));n.uidaplus&&(e.uidaplus=n.uidaplus),e.pc_i=n.pc_i,e.pu_i=n.pu_i}catch(t){console&&console.log(t)}return e}},function(t,e,n){\"use strict\";function a(t){var e,n,a,o,i=[],s={};for(e=t.length-1;e>=0;e--)n=t[e],a=n[0],a&&a.indexOf(r.s_plain_obj)==-1&&s.hasOwnProperty(a)||(o=n[1],(\"aplus\"==a||o)&&(i.unshift([a,o]),s[a]=1));return i}function o(t){var e,n,a,o,i=[],u={logtype:!0,cache:!0,scr:!0,\"spm-cnt\":!0};for(e=t.length-1;e>=0;e--)if(n=t[e],a=n[0],o=n[1],!(s.isStartWith(a,r.s_plain_obj)&&!s.isStartWith(a,r.mkPlainKeyForExparams())||u[a]))if(s.isStartWith(a,r.mkPlainKeyForExparams())){var c=r.param2arr(o);if(\"object\"==typeof c&&c.length>0)for(var l=c.length-1;l>=0;l--){var p=c[l];p&&p[1]&&i.unshift([p[0],p[1]])}}else i.unshift([a,o]);return i}var r=n(33),i=n(41),s=n(28),u=n(2),c=n(39),l=n(17),p=n(3);t.exports=function(){return{keyIsAvailable:function(t){var e=[\"functype\",\"funcId\",\"spm-cnt\",\"spm-url\",\"spm-pre\",\"_ish5\",\"_is_g2u\",\"_h5url\",\"cna\",\"isonepage\",\"lver\",\"jsver\"];return i.indexof(e,t)===-1},valIsAvailable:function(t){return\"object\"!=typeof t&&\"function\"!=typeof t},upUtData:function(t,e){var n=this;if(t=t?t:{},e&&\"object\"==typeof e)for(var a in e){var o=e[a];a&&n.valIsAvailable(o)&&n.keyIsAvailable(a)&&(t[a]=o)}return t},getToUtData:function(){var t=u.getGoldlogVal(\"_$\")||{},e=u.getGlobalValue(p.APLUS),n=t.spm||{},i=this.options.context||{},s=this.options.config||{},f=i.what_to_send||{},g=f.logdata||{},d=g.sdk_info||{},_=this.options.context.etag||{},m=o(a(g.exparams||[]));m=r.arr2obj(m);var h=i.userdata,v=location.href,b={},y=l.getParamFromUrl(\"scm\",v)||\"\";y&&(b.scm=y);var E=l.getParamFromUrl(\"pg1stepk\",v)||\"\";E&&(b.pg1stepk=E);var S=l.getParamFromUrl(\"point\",v)||\"\";S&&(b.issb=1),d&&d.mansndlog&&(b.mansndlog=d.mansndlog),b=this.upUtData(b,m),b=this.upUtData(b,g.gokey),b=this.upUtData(b,h),b.functype=\"page\",b.funcId=\"2001\",e&&e.globalConfig&&e.globalConfig.isAli?b.url=(location.protocol||\"https:\")+\"//\"+location.host+location.pathname:b.url=location.href,s.pageName&&(b.url=s.pageName),b._ish5=\"1\",b._h5url=v,b._toUT=2,b._bridgeName=\"WindVane\",b._bridgeVersion=\"3.0.7\",n.spm_cnt&&(b[p.SPM_CNT]=n.spm_cnt||\"\"),n.spm_url&&(b[p.SPM_URL]=n.spm_url||\"\"),n.spm_pre&&(b[p.SPM_PRE]=n.spm_pre||\"\"),b.cna=_.cna||c.getCookieCna(\"cna\"),b.lver=d.lver,b.jsver=d.jsver,b.pver=\"1.0.0\",b.isonepage=-1;var A=e.getMetaInfo(\"aplus-utparam\");return A&&(b[\"utparam-cnt\"]=JSON.stringify(A)),b._is_g2u_=1,b._slog=1,b},run:function(){var t=this.options.context||{},e=t.what_to_send||{};e.pvdataToUt=this.getToUtData(),this.options.context.what_to_send=e}}}},function(t,e,n){\"use strict\";var a=n(2),o=n(104);t.exports=function(){return{run:function(){var t=a.getGoldlogVal(\"_$\")||{},e=this.options.context.can_to_sendpv||{},n=t.send_pv_count||0,r=this.options.config||{},i=!!r.updateOnly;return t.cur_pv_update=i,o.canSendPV(r.track_type)?(e.flag=\"YES\",this.options.context.can_to_sendpv=e,t.send_pv_count=++n,void a.setGoldlogVal(\"_$\",t)):\"done\"}}}},function(t,e,n){function a(t){var e=r.getGlobalValue(i.APLUS),n=e.getMetaInfo(i.APLUS_EVENT_LIMITRATES);if(n&&n.length>0){var a=c.find(n,function(e){return e.eventId===t});if(a){var o=Math.ceil(1e3*Math.random());return o<1e3*a.samplingRate}return!0}return!0}function o(){var t=r.getGlobalValue(\"aplus\"),e=t.globalConfig.isUM;return!!e}var r=n(2),i=n(3),s=n(105),u=n(107),c=n(41),l=n(37),p=n(28),f=n(33);e.canToSendHJLJ=function(t,e){var n=s.getDeviceStatus();if(!n)try{var o=l.getContext();return p.isEmptyObject(o)?void 0:e===i.APP_START||e===i.APP_END}catch(t){}var r=s.getAutoTrackStatus(),c=s.getAutoEventStatus(),g=u.getAutoTrackStatus(),d={};if(d=\"string\"==typeof t?f.arr2obj(f.param2arr(t)):t,d.auto_element){if(2===c||2===r)return;if(!r&&!g)return}if(a(e))return!0},e.canSendPV=function(t){if(!o())return!0;var e=s.getDeviceStatus(),n=s.getAutoPageStatus(),a=u.localAutoPVDisabled(),r=!0;if(e){if(\"1\"===t)return!(2===n||!n&&a)}else r=!1;return r}},function(t,e,n){\"use strict\";function a(t){var e;return e=l.isWeb()?p.getLsRemoteCfg(d):f().getSync(c.APLUS_REMOTE_CONFIG),e&&e[t]}function o(t){var e=l.getContext();e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_DISABLE_AUTOEVENT_REMOTE,t]})}function r(t){var e=l.getContext();e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_DEVICE_ENABLE,t]})}function i(t){var e=l.getContext();e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_DISABLE_AUTOPV_REMOTE,t]})}function s(t){var e=l.getContext();e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_AUTOTRACK_ENABLED_REMOTE,t]})}var u=n(33),c=n(3),l=n(2),p=n(29),f=n(106),g=n(28),d=\"APLUS_REMOTE_CONFIG\";e.getAutoEventStatus=function(){var t=l.getGlobalValue(\"aplus\"),e=t.getMetaInfo(c.APLUS_DISABLE_AUTOEVENT_REMOTE)||a(\"codelessClickEventStatus\");return e},e.getDeviceStatus=function(){var t=l.getGlobalValue(\"aplus\");return a(\"currentDeviceEnable\")||t.getMetaInfo(c.APLUS_DEVICE_ENABLE)},e.getAutoPageStatus=function(){var t=l.getGlobalValue(\"aplus\"),e=t.getMetaInfo(c.APLUS_DISABLE_AUTOPV_REMOTE)||a(\"codelessCollectorPageStatus\");return e},e.getAutoTrackStatus=function(){var t=l.getGlobalValue(\"aplus\"),e=t.getMetaInfo(c.APLUS_AUTOTRACK_ENABLED_REMOTE)||a(\"codelessStatus\");return e},e.enableCfg=function(t){var e=l.getContext();t&&!g.isEmptyObject(t)&&(o(t.codelessClickEventStatus),i(t.codelessCollectorPageStatus),s(t.codelessStatus),r(t.currentDeviceEnable),t.eventSamplingRate&&t.eventSamplingRate.length>0&&e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_EVENT_LIMITRATES,u.mapEventSampleRates(t.eventSamplingRate)]}),t.codelessIgnoreComponent&&t.codelessIgnoreComponent.length>0&&e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_AUTOTRACK_CONFIG_REMOTE,t.codelessIgnoreComponent]}))}},function(t,e,n){var a=n(37),o=n(9),r=n(32),i=n(33),s=n(3);t.exports=function(){function t(){var t=a.getContext();this.load=function(e){u?(t.removeStorage({key:n}),o(e)&&e()):(n=\"aplus_cache_\"+i.getAppKey()||\"\",t.getStorage({key:n,success:function(a){u=a&&a.data?r.parse(a.data)||{}:{},c=!0,t.removeStorage({key:n}),o(e)&&e()},fail:function(){u={},c=!0,t.removeStorage({key:n}),o(e)&&e()}}))},this.save=function(){u&&t.setStorage({key:n,data:r.stringfy(u)})},this.set=function(t,e){u&&(u[t]=e)},this.get=function(t){return(u||{})[t]},this.remove=function(t){u&&u[t]&&delete u[t]},this.getAll=function(){return u},this.clear=function(){u=null},this.has=function(t){return!!this.get(t)},this.isLoaded=function(){return c},this.getSync=function(t){try{var e=a.getStorageSync(t);return t===s.APLUS_IMPRINT_VERSION?e:\"string\"==typeof e?r.parse(e):e}catch(t){}},this.setSync=function(t,e){try{\"object\"==typeof e?a.setStorageSync(t,JSON.stringify(e)):a.setStorageSync(t,e)}catch(t){}}}var e=null,n=\"\",u=null,c=!1;return function(){return e||(e=new t),e}}()},function(t,e,n){\"use strict\";var a=n(3),o=n(2);e.localAutoEventDisabled=function(){var t=o.getGlobalValue(\"aplus\");return!!t.getMetaInfo(a.APLUS_DISABLE_AUTOEVENT)},e.localAutoPVDisabled=function(){var t=o.getGlobalValue(\"aplus\");return!(!t.getMetaInfo(a.APLUS_DISABLE_AUTOPV)&&\"MAN\"!==t.getMetaInfo(\"aplus-waiting\"))},e.getAutoTrackStatus=function(){var t=o.getGlobalValue(\"aplus\");return!!t.getMetaInfo(a.APLUS_AUTOTRACK_ENABLED)}},function(t,e,n){\"use strict\";var a=n(36),o=n(2);t.exports=function(){return{run:function(){var t=o.getGlobalValue(\"aplus\"),e=t._$||{},n=this.options.context||{};o.setGoldlogVal(\"pv_context\",n);var r=t.spm_ab||[],i=r.join(\".\"),s=e.send_pv_count,u={cna:n.etag?n.etag.cna:\"\",count:s,spmab_pre:t.spmab_pre};a.doPubMsg([\"sendPV\",\"complete\",i,u]),a.doCachePubs([\"sendPV\",\"complete\",i,u])}}}},function(t,e,n){\"use strict\";var a=n(27),o=n(38),r=n(28),i=n(2);t.exports=function(){return{getUserData:function(){var t=i.getGlobalValue(\"aplus\"),e=this.options.context||{},n=e.userdata||{},s=e.what_to_send.logdata.gokey,u=t.getMetaInfo(\"aplus-exinfo\");s=r.assign(s,t.getMetaInfo(\"aplus-globaldata\")),u&&(s=r.assign(s,a.param2obj(u)));var c=t.getMetaInfo(\"aplus-exdata\");return o(c)?c.forEach(function(t){s=r.assign(s,t)}):s=r.assign(s,t.getMetaInfo(\"aplus-exdata\")),s=r.assign(s,a.param2obj(n.gokey))},run:function(){this.options.context.what_to_send.logdata.gokey=this.getUserData()}}}},function(t,e,n){\"use strict\";var a=n(43),o=n(101),r=n(28);t.exports=function(){return{getExParamsInfo:function(){var t=a.getExParams();return this.options.context.what_to_send.logdata.exparams=t,o(t)},run:function(){var t=this.options.context.what_to_send.logdata.gokey;t=r.assign(this.getExParamsInfo(),t),this.options.context.what_to_send.logdata.gokey=t}}}},function(t,e,n){\"use strict\";var a=n(2),o=n(3),r=n(13),i=n(18),s=n(19),u=n(65);t.exports=function(){return{formatGokey:function(t,e){if(s(t)){var n={},a=[];return i(t,function(t,e){var o=e;(\"undefined\"===o||u(o))&&(o=\"\"),n[t]=o,a.push(t+\"=\"+o)}),\"object\"===e?n:a.join(\"&\")}return t},getToUtData:function(){var t=a.getGoldlogVal(\"_$\")||{},e=a.getGlobalValue(o.APLUS),n=t.spm||{},i=t.meta_info||{},s=\"off\"===i[o.APLUS_GOKEY_ISOLATE],u=this.options.context||{},c=u.userdata||{},l=u.etag||{},p=u.what_to_send||{},f=p.logdata||{},g=f.sdk_info||{},d=f.gokey||{},_=location.href,m=s?r({},this.formatGokey(d,\"object\")):{};m.functype=\"ctrl\",m.funcId=f.event_code,e&&e.globalConfig&&e.globalConfig.isAli?m.url=(location.protocol||\"https:\")+\"//\"+location.host+location.pathname:m.url=location.href,d.pageName&&(m.url=d.pageName),d._isCombine&&(m._isCombine=1),m.logkey=f.logkey,s||(m.gokey=encodeURIComponent(this.formatGokey(d,\"string\"))),m.gmkey=f.gmkey,m._ish5=\"1\",m._h5url=_,m._is_g2u_=1,m._slog=1,m._toUT=2,m._bridgeName=\"WindVane\",m._bridgeVersion=\"3.0.7\",n.spm_cnt&&(m[o.SPM_CNT]=n.spm_cnt||\"\"),n.spm_url&&(m[o.SPM_URL]=n.spm_url||\"\"),n.spm_pre&&(m[o.SPM_PRE]=n.spm_pre||\"\"),m.cna=l.cna,m.lver=g.lver,m.jsver=g.jsver,c.hasOwnProperty(\"autosend\")&&(m.autosend=c.autosend);var h=e.getMetaInfo(\"aplus-utparam\");return h&&(m[\"utparam-cnt\"]=JSON.stringify(h)),m},run:function(){var t=this.options.context||{},e=t.what_to_send||{};e.pvdataToUt=this.getToUtData(),this.options.context.what_to_send=e}}}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){n(113)()}}}},function(t,e,n){\"use strict\";var a=n(44),o=n(2),r=n(114),i=n(121),s=n(122),u=n(123),c=n(124),l=n(125);t.exports=function(){var t=o.getGoldlogVal(\"_$\")||{},e=t.meta_info,p=e[\"aplus-touch\"],f={isTouchEnabled:a.isTouch()||\"1\"===p||\"tap\"===p,isTerminal:t.is_terminal||/WindVane|Themis/i.test(navigator.userAgent)};n(115).makePVId(),window.g_SPM={spm_d_for_ad:{},resetModule:r.spm_resetModule,anchorBeacon:r.spm_spmAnchorChk,getParam:r.spm_getSPMParam,spm:r.spm_forwap},o.setGoldlogVal(\"spmAPI\",l.run()),i.run(f),s.run(f),u.run(f),c.run(f)}},function(t,e,n){\"use strict\";function a(t){if(t&&1===t.nodeType){s.tryToRemoveAttribute(t,\"data-spm-max-idx\"),s.tryToRemoveAttribute(t,\"data-auto-spmd-max-idx\");for(var e=c.nodeListToArray(t.getElementsByTagName(\"a\")),n=c.nodeListToArray(t.getElementsByTagName(\"area\")),a=e.concat(n),o=0;o1?r.pop():\"\",s>0&&(a=i.pop(),t=i.join(\"?\")),a&&s>1&&a.indexOf(\"&\")==-1&&a.indexOf(\"%\")!==-1&&(l=\"%26\");var p=\"\";if(t=t+\"?spm=\"+p+e+(a?l+a:\"\")+(o?\"#\"+o:\"\"),c=m.isContain(u,\".\")?u.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(c))return 0;!a&&s<=1&&(o||{htm:1,html:1,php:1,aspx:1,shtml:1,xhtml:1}.hasOwnProperty(c)||(t+=\"&file=\"+u))}return t}}function s(t,e){var n=b.getGlobalValue(\"aplus\");if(!n.isUT4Aplus||\"UT4Aplus\"!==n.getMetaInfo(\"aplus-toUT\")){var a,o=t.innerHTML;o&&o.indexOf(\"<\")==-1&&(a=document.createElement(\"b\"),a.style.display=\"none\",t.appendChild(a)),t.href=e,a&&t.removeChild(a)}}function u(t,e,n){if(!/^0\\.0\\.?/.test(e)){var a=y.tryToGetHref(t),r=o(),u=A.is_ignore_spm(t);if(u){var c=_.param2obj(a);if(c.spm&&c.spm.split)for(var l=c.spm.split(\".\"),p=e.split(\".\"),f=0;f<3&&p[f]===l[f];f++)2===f&&l[3]&&(e=c.spm)}t.setAttribute(\"data-spm-anchor-id\",e);var g=E.getPvId();g&&(e+=\".\"+g);var d=\"0.0\";(g||r&&r!=d)&&(u||n||(a=i(a,e))&&s(t,a))}}function c(t){var e=v.tryToGetAttribute(t,w),n=h.parseSemicolonContent(e)||{};return n}function l(t){var e,n=b.getGoldlogVal(\"_$\")||{},a=n.spm.data;return\"0\"==a.a&&\"0\"==a.b?e=\"0\":(e=v.tryToGetAttribute(t,I),e&&e.match(/^d\\w+$/)||(e=\"\")),e}function p(t,e){for(var n=[],a=h.nodeListToArray(t.getElementsByTagName(\"a\")),o=h.nodeListToArray(t.getElementsByTagName(\"area\")),r=a.concat(o),i=0;i0&&(d+=\"&\"),d+=v.length>0?v.join(\"&\"):\"\",aplus&&s(aplus.recordUdata)?aplus.recordUdata(h,g,d,\"GET\",function(){}):p().w(\"aplus.recordUdata is not function!\"),i.tryToSetAttribute(t,\"data-spm-anchor-id\",m)}function o(t,e){if(!l.isEditableElement(e)){var n=e;window.g_SPM&&(g_SPM._current_spm=f.spm_getSPMParam(e));for(var o;e&&\"HTML\"!==e.tagName;){o=i.tryToGetAttribute(e,\"data-spm-click\");{if(o){a(e,o,\"mousedown\"===t.type?t.type:\"tap\");break}e=e.parentNode}}if(!o){var r=g.getGlobalSPMId(),s=aplus.getMetaInfo(\"aplus-getspmcd\");\"function\"==typeof s&&s(n,t,r)}}}var r=n(77),i=n(23),s=n(9),u=n(29),c=n(41),l=n(44),p=n(20),f=n(114),g=n(117);e.run=function(t){t&&t.isTouchEnabled?r.on(document,\"tap\",o):r.on(document,\"mousedown\",o)}},function(t,e,n){\"use strict\";function a(){for(var t=document.getElementsByTagName(\"iframe\"),e=0;e10&&(n=3e3),a(),setTimeout(t,n)}var e=0,n=500;t()}var r=n(23),i=n(117),s=n(114);e.run=function(t){t&&!t.isTerminal&&o()}},function(t,e,n){\"use strict\";function a(t,e){for(var n,a=window;e&&(n=e.tagName);){if(\"A\"===n||\"AREA\"===n){r.spm_spmAnchorChk(e,!1);var o=a.g_SPM||(a.g_SPM={}),i=o._current_spm=r.spm_getSPMParam(e),s=[];try{s=[i.a,i.b,i.c,i.d];var u=i.e||aplus.pvid||\"\";u&&s.push(u)}catch(t){}break}if(\"BODY\"==n||\"HTML\"==n)break;e=e.parentNode}}var o=n(77),r=n(114);e.run=function(t){var e=document;t&&t.isTouchEnabled?o.on(e,\"tapSpm\",a):(o.on(e,\"mousedown\",a),o.on(e,\"keydown\",a))}},function(t,e,n){\"use strict\";function a(t,e){if(e||(e=p),p.evaluate)return e.evaluate(t,p,null,9,null).singleNodeValue;for(var n,o=t.split(\"/\");!n&&o.length>0;)n=o.shift();var r,i=/^.+?\\[@id='(.+?)']$/i,s=/^(.+?)\\[(\\d+)]$/i;return(r=n.match(i))?e=e.getElementById(r[1]):(r=n.match(s))&&(e=e.getElementsByTagName(r[1])[parseInt(r[2])-1]),e?0===o.length?e:a(o.join(\"/\"),e):null}function o(){var t={};for(var e in l)if(l.hasOwnProperty(e)){var n=a(e);if(n){t[e]=1;var o=l[e],r=\"A\"===n.tagName?o.spmd:o.spmc;s.tryToSetAttribute(n,\"data-spm\",r||\"\")}}for(var i in t)t.hasOwnProperty(i)&&delete l[i]}function r(){if(!c&&f.spmData){c=!0;var t=f.spmData.data;if(t&&i.isArray(t)){for(var e=0;e1&&(t=a[0],e=a[1]),c.setA(t),e&&c.setB(e);var o=i.getElementsByTagName(\"body\");o=o&&o.length?o[0]:null,o&&(e=l.tryToGetAttribute(o,\"data-spm\"),e?c.setB(e):1===a.length&&c.setAB(\"0\",\"0\"))}}function o(){var t=s.data.a,e=s.data.b;t&&e&&(aplus.spm_ab=[t,e])}var r=window,i=document,s={},u={};s.data=u;var c={},l=n(23),p=n(17),f=n(115),g=n(48),d=location.href;c.setA=function(t){s.data.a=t,o()},c.setB=function(t){s.data.b=t,o()},c.setAB=function(t,e){s.data.a=t,s.data.b=e,o()};var _=function(t){var e=t.aplus||window.aplus||{},n=e.meta_info||{};s.meta_protocol=n.spm_protocol;var o,r=e.spm_ab||[],i=r[0]||\"0\",u=r[1]||\"0\";\"0\"===i&&\"0\"===u&&(a(),i=s.data.a||\"0\",u=s.data.b||\"0\"),o=[s.data.a,s.data.b].join(\".\"),s.spm_cnt=(o||\"0.0\")+\".0.0\";var c=t.send_pv_count>0?f.makePVId():e.pvid;return c&&(s.spm_cnt+=\".\"+c),e._$.spm=s,c};c.spaInit=function(t,e,n){var a=s.spm_url,o=window.g_SPM||{},r=t._$||{},i=r.send_pv_count,u=_({aplus:t,meta_info:e,send_pv_count:i});s.spm_cnt=s.data.a+\".\"+s.data.b+\".0.0\"+(u?\".\"+u:\"\");var c=e[\"aplus-spm-fixed\"];if(\"1\"!==c){s.spm_pre=p.getSPMFromUrl(g.getRefer(t.globalConfig.NAME_STORAGE_KEYS)),s.origin_spm_pre=s.spm_pre,s.spm_url=p.getSPMFromUrl(location.href),s.origin_spm_url=s.spm_url;var l=o._current_spm||{};l&&l.a&&\"0\"!==l.a&&l.b&&\"0\"!==l.b?(s.spm_url=[l.a,l.b,l.c,l.d,l.e].join(\".\"),s.spm_pre=a):i>0&&n&&\"0\"!==n[0]&&\"0\"!==n[1]&&(s.spm_url=n.concat([\"0\",\"0\"]).join(\".\"),s.spm_pre=a),o._current_spm={}}},c.init=function(t,e){return s.spm_url=p.getSPMFromUrl(d),s.spm_pre=p.getSPMFromUrl(g.getRefer(t.globalConfig.NAME_STORAGE_KEYS)),_({aplus:t,meta_info:e})},c.resetSpmCntPvid=function(){var t=aplus.spm_ab;if(t&&2===t.length){var e=t.join(\".\")+\".0.0\",n=f.makePVId();n&&(e=e+\".\"+n),s.spm_cnt=e,s.spm_url=e,aplus._$.spm=s}},e.run=function(){var t=aplus._$||{},e=t.meta_info;return c.init(aplus,e),c}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){n(127)(this.options.context.logConfig)}}}},function(t,e,n){\"use strict\";var a=n(36),o=n(2);t.exports=function(t){var e=o.getGlobalValue(\"aplus\");if(!e._aplus_api){e._aplus_api={status:\"complete\"},e._$.status=\"complete\";var r=n(128).run.create({logConfig:t});for(var i in r)e[i]=r[i];var s=[\"aplusReady\",\"complete\"];a.doPubMsg(s),a.doCachePubs(s)}}},function(t,e,n){\"use strict\";function a(t,e){var n=e.context,a=n.what_to_send,o=a.logdata,r=o.gokey;S(M,function(t){t(r)})}function o(t,e){var n=e.context,a=n.what_to_send,o=a.logdata,r={logkey:o.logkey,gmkey:o.gmkey,gokey:o.gokey,method:o.method};S(C,function(t){t(r)})}function r(){var t=5e3;try{var e=_.getGlobalValue(\"aplus\"),n=e.getMetaInfo(\"aplus-mmstat-timeout\");if(n){var a=parseInt(n);a>=1e3&&a<=1e4&&(t=a)}}catch(t){}return t}function i(t,e,n){var a=t[0],o=t[1],r=(n||{}).spm,i=(n||{}).logkey,s=1;if(r&&r[a]){var u=r[a];s=u.cp,u[o]&&(s=u[o].cp)}else i&&i[e]&&(s=i[e]);var c=Math.ceil(Math.random()*Math.floor(1/s));return c}var s=n(10),u=n(39),c=n(23),l=n(77),p=n(34),f=n(20),g=n(36),d=n(28),_=n(2),m=n(3),h=n(21),v=n(129),b=n(41),y=n(132),E=n(38),S=n(18),A=n(19),T=n(9),P=n(26),I=n(133),w=[],M=[],x=[],C=[];e.run=s.extend({beforeSendPV:function(t){w.push(t)},afterSendPV:function(t){M.push(t)},launch:function(){p.logger({msg:\"warning: This interface is deprecated, can not send pv log, please use goldlog.sendPV instead! API: http://log.alibaba-inc.com/log/info.htm?type=2277&id=31\"})},installPlugin:function(t){T(t)&&t()},send:function(t,e,n){var a,o=_.getGlobalValue(\"aplus\");if(/^\\/\\//.test(t)){var i=m.HTTPS;/^\\/\\/(\\d+\\.){3,}\\d+/.test(t)&&(i=\"http:\"),t=i+t}return a=\"POST\"===n&&navigator&&navigator.sendBeacon?I.postData(t,e):I.sendImg(t+\"?\"+e,r()),o.req=a,a},sendPV:function(t,e){if(t=t||{},d.any(w,function(e){return e(n,t)===!1}))return!1;var n=_.getGlobalValue(\"aplus\"),o=n.getMetaInfo(m.APLUS_SKIP_APV_RULES)||[];if(!b.itemMatch(o,location.href)||!t.is_auto){var r=new v;t.recordType=\"PV\",\"GET\"!==t.method&&(t.method=\"POST\");var i=n.logConfig.pv;return r.run({plugins:i.plugins,context:d.cloneDeep(i.context)},{config:t,userdata:e,pubsubType:\"pv\",messageFnQueue:[a],middlewareMessageKey:\"mw_change_pv\"}),n._last_pv_info={datetime:(new Date).toString(),pageConfig:t,pageParams:e},!0}},pageEnter:function(t){h.pushIntoGoldlogQueue(m.PUBLISH,[m.PAGE_ENTER,t]),h.pushIntoGoldlogQueue(m.CACHE_PUBS,[m.PAGE_ENTER,t])},getParam:function(t){var e=window.WindVane||{},n=e&&\"function\"==typeof e.getParam?e.getParam(t):\"\";return n},beforeRecord:function(t){x.push(t)},afterRecord:function(t){C.push(t)},record:function(t,e,n,a,r){var s=_.getGlobalValue(\"aplus\");if(d.any(x,function(t){return t(s)===!1}))return!1;var u=1;if(E(s.spm_ab)&&s.spm_ab.length>1&&(u=i(s.spm_ab,t,s.getMetaInfo(\"aplus-report-rate\"))),1===u){var c=new v,l=s.logConfig.hjlj;return c.run({plugins:l.plugins,context:d.cloneDeep(l.context)},{config:{recordType:\"COMMON_HJLJ\",method:a},userdata:{logkey:t,gmkey:e,gokey:n||{}},pubsubType:\"hjlj\",messageFnQueue:[o],middlewareMessageKey:\"mw_change_hjlj\"},function(){T(r)&&r()}),!0}return!1},recordUdata:function(t,e,n,a,o){var r=_.getGlobalValue(\"aplus\"),i=new v,s=r.logConfig.hjlj;return i.run({plugins:s.plugins,context:d.cloneDeep(s.context)},{config:{recordType:\"DATACLICK_HJLJ\",method:a},userdata:{logkey:t,gmkey:e,gokey:n||{}},pubsubType:\"hjlj\",messageFnQueue:C,middlewareMessageKey:\"mw_change_hjlj\"},function(){T(o)&&o()}),!0},combineRecord:function(t,e,n,a){var o=_.getGlobalValue(m.APLUS),r=\"EXP\",i=\"CLK\",s=\"OTHER\";if([i,r,s].indexOf(e)>-1||/^\\d+$/.test(e))if(E(n)){a||(a=\"POST\");var u=[];n.forEach(function(t){u.push({exargs:A(t.exargs)?t.exargs:{},scm:t.scm,spm:t.spm,aplusContentId:t.aplusContentId})});var c=[];[i,r].indexOf(e)>-1?(c.push((e===r?\"expdata=\":\"clkdata=\")+JSON.stringify(u)),c.push(e===r?\"_is_auto_exp=1\":\"_is_auto_clk=1\")):c.push(\"combinedata=\"+JSON.stringify(u)),c.push(\"_eventType=custom\"),c.push(\"_method=\"+a),c.push(\"_pkgSize=\"+n.length),c.push(\"_isCombine=1\"),o.record(t,e,c.join(\"&\"),a)}else f().w(\"type of gokeys must be ArrayObject!\");else f().w(\"only support EXP or CLK log to combile record!\")},setPageSPM:function(t,e,n){var a=_.getGlobalValue(\"aplus\"),o=a.getMetaInfo(\"aplus-spm-fixed\");a.spm_ab=a.spm_ab||[];var r=d.cloneDeep(a.spm_ab);t&&(a.spm_ab[0]=\"\"+t,a._$.spm.data.a=\"\"+t),e&&(a.spm_ab[1]=\"\"+e,a._$.spm.data.b=\"\"+e);var i=P.qGet();if(a.spmAPI&&a.spmAPI.spaInit(a,i,r),\"1\"!==o){var s=r.join(\".\");a.spmab_pre=s}var u=[\"setPageSPM\",{spmab_pre:a.spmab_pre,spmab:a.spm_ab.join(\".\")}];g.doPubMsg(u),g.doCachePubs(u),y.resetMetaAndBody(),y.resetModules(),\"function\"==typeof n&&n()},getPageSPM:function(){var t=_.getGlobalValue(\"aplus\");return t.spm_ab||[]},getPageSpmUrl:function(t){var e=_.getGlobalValue(\"aplus\"),n=e._$||{},a=n.spm||{},o=a.spm_url;if(\"object\"!=typeof t&&(t={}),\"undefined\"!=typeof window&&window.__megability_bridge__&&!o){var r=window.__megability_bridge__.syncCall(\"ut\",\"getPageSpmUrl\",t);r&&0===r.statusCode&&r.data&&r.data.spmUrl&&(o=r.data.spmUrl)}return o},getPageSpmPre:function(t){var e=_.getGlobalValue(\"aplus\"),n=e._$||{},a=n.spm||{},o=a.spm_pre;if(\"object\"!=typeof t&&(t={}),\"undefined\"!=typeof window&&window.__megability_bridge__&&!o){var r=window.__megability_bridge__.syncCall(\"ut\",\"getPageSpmPre\",t);r&&0===r.statusCode&&r.data&&r.data.spmPre&&(o=r.data.spmPre)}return o},requestPageAllProperties:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-allpage-properties\",t):f().w(\"warning: typeof requestPageAllProperties's params must be object\")},setMetaInfo:function(t,e,n){var a,o,r=\"OVERWRITE\",i=r;if(\"object\"==typeof t?(a=t.metaName,o=t.metaValue,i=t.mode||r):(a=t,o=e),i!==r)return this.appendMetaInfo(a,o);if(P.setMetaInfo(a,o,n)){var s=_.getGoldlogVal(\"_$\")||{};s.meta_info=P.qGet();var u=_.setGoldlogVal(\"_$\",s),c=[\"setMetaInfo\",a,o,n];return g.doPubMsg(c),g.doCachePubs(c),u}},appendMetaInfo:P.appendMetaInfo,updatePageProperties:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?(t._page&&(t.pageName=t._page,e.setMetaInfo(\"aplus-pagename\",t.pageName),delete t._page),e.setMetaInfo(\"aplus-page-properties\",t),e.appendMetaInfo(\"aplus-cpvdata\",t)):f().w(\"warning: typeof updatePageProperties's params must be object\")},updateNextPageProperties:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"==typeof t?e.appendMetaInfo(\"aplus-nextpage-properties\",t):f().w(\"warning: typeof updateNextPageProperties's params must be object\")},updatePageName:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-pagename\",t):f().w(\"warning: typeof updatePageName's params must be object\")},updatePageUrl:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-pageurl\",t):f().w(\"warning: typeof updatePageUrl's params must be object\")},updatePageUtparam:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-page-utparam\",t):f().w(\"warning: typeof updatePageUtparam's params must be object\")},updateNextPageUtparam:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-nextpage-utparam\",t):f().w(\"warning: typeof updateNextPageUtparam's params must be object\")},updateNextPageUtparamCnt:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-nextpage-utparamcnt\",t):f().w(\"warning: typeof updateNextPageUtparamCnt's params must be object\")},setUserProfile:function(t){var e=_.getGlobalValue(\"aplus\");A(t)?e.setMetaInfo(m.APLUS_USER_PROFILE,t):f().w(\"warning: typeof setUserProfile's params must be object\")},getUserProfile:function(){var t=_.getGlobalValue(\"aplus\");return t.getMetaInfo(m.APLUS_USER_PROFILE)||{}},getMetaInfo:function(t){return P.getMetaInfo(t)},on:l.on,cloneDeep:d.cloneDeep,setCookie:u.setCookie,getCookie:u.getCookie,pageDisappear:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"!=typeof t&&(t={}),e.setMetaInfo(\"aplus-page-disappear\",t)},pageDisAppear:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"!=typeof t&&(t={}),e.setMetaInfo(\"aplus-page-disappear\",t)},pageAppear:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"!=typeof t&&(t={});var n={usePageAppearDontSkip:!0};n=d.assign(n,t),e.setMetaInfo(\"aplus-page-appear\",n)},skipPage:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"!=typeof t&&(t={}),e.setMetaInfo(\"aplus-skip-page\",t)},updateSessionProperties:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"==typeof t?e.setMetaInfo(\"aplus-session-properties\",t):f().w(\"warning: typeof updateSessionProperties's params must be object\")},getElementSPM:function(t,e){var n=\"\";if(t){var a=c.tryToGetAttribute(t,\"data-eltype\")||e;if(window.g_SPM&&T(window.g_SPM.getParam)){var o=g_SPM.getParam(t);if(\"spmc\"===a){var r=c.tryToGetAttribute(t,\"data-spm\")||\"0\";n=[o.a,o.b,r].join(\".\")}else n=[o.a,o.b,o.c,o.d].join(\".\")}}return n}})},function(t,e,n){\"use strict\";var a=n(18),o=n(2),r=n(9),i=n(36),s=n(34),u=n(3),c=n(130),l=n(131),p=function(){};p.prototype.run=function(t,e,n){var p=new l;p.init({middleware:[],config:e.config,plugins:t.plugins});var f=p.run(),g=r(t.context)?new t.context:t.context;g.userdata=e.userdata,g.logger=s.logger;var d={context:g,pubsub:o.getGoldlogVal(\"aplus_pubsub\"),pubsubType:e&&e.pubsubType},_=new c;_.create(d),_.wrap(f,function(){d.context.status=u.COMPLETE,e&&(e.middlewareMessageKey&&i.doPubMsg([e.middlewareMessageKey,d.context]),e.messageFnQueue&&a(e.messageFnQueue,function(e){e(o.getGlobalValue(u.APLUS),t)})),r(n)&&n(d.context)})()},t.exports=p},function(t,e,n){\"use strict\";function a(){}var o=n(9),r=n(41),i=n(20);a.prototype.create=function(t){for(var e in t)\"undefined\"==typeof this[e]&&(this[e]=t[e]);return this},a.prototype.calledList=[],a.prototype.setCalledList=function(t){r.indexof(this.calledList,t)===-1&&this.calledList.push(t)},a.prototype.resetCalledList=function(){this.calledList=[]},a.prototype.wrap=function(t,e){var n=this,a=this.context||{},s=a.compose||{},u=s.maxTimeout||1e4;return function(a){var s,c=t.length,l=0,p=0,f=function(g,d){if(l===c)return a=\"done\",n.resetCalledList(),o(e)&&d!==a&&e.call(n,a),void clearTimeout(s);if(r.indexof(n.calledList,l)===-1){if(n.setCalledList&&n.setCalledList(l),!(t&&t[l]&&o(t[l][0])))return;try{a=t[l][0].call(n,a,function(){l++,p=1,f(l)})}catch(t){i().w(t)}}var _=\"number\"==typeof a;if(\"pause\"===a||_){p=0;var m=_?a:u,h=t[l]?t[l][1]:\"\";s=setTimeout(function(){0===p&&(i().w(\"jump the middleware about \"+h+\", because waiting timeout maxTimeout = \"+m),a=null,l++,f(l))},m)}else\"done\"===a?(l=c,f(l,a)):(l++,f(l))};return n.calledList&&n.calledList.length>0&&n.resetCalledList(),f(l)}},t.exports=a},function(t,e,n){\"use strict\";var a=n(13),o=n(20);t.exports=function(){return{init:function(t){this.opts=t,t&&\"object\"==typeof t.middleware&&t.middleware.length>0?this.middleware=t.middleware:this.middleware=[],this.plugins_name=[]},pubsubInfo:function(t,e){try{var n=t.pubsub;n&&n.publish(\"plugins_change_\"+t.pubsubType,e)}catch(t){o().w(t)}},run:function(t){t||(t=0);var e=this,n=this.middleware,o=this.opts||{},r=o.plugins;if(r&&\"object\"==typeof r&&r.length>0){var i=r[t];if(this.plugins_name.push(i.name),n.push([function(t,n){e.pubsubInfo(this,i);var r=new i.path;return r.init||(r.init=function(t){this.options=t}),r.init({context:this.context,config:a(i.config||{},o.config)}),r.run(t,function(t){setTimeout(function(){n(i,t)},1)})},i.name]),t++,r[t])return this.run(t)}return n}}}},function(t,e,n){function a(t){var e,n,a,o,r=u.getElementsByTagName(\"meta\");for(e=0,n=r.length;e-1&&(t=\"_\"+t),t}var u=n(2),c=n(41),l=n(9),p=n(20),f=n(3),g=function(t,e){function n(){if(t&&c.isArray(t)&&t.length){for(var n=v(t).queue,a={},o=[];a=n.shift();)h(a,e,function(t){o.push(t)});o.length>0&&setTimeout(function(){for(;a=o.shift();)h(a,e)},100)}}try{n()}catch(t){p().w(t)}};e.processGoldlogQueue=g;var d=[],_=[],m=[];e.subscribeAndProcessQueue=function(t,e){var n=u.getGlobalValue(t);n.push({action:f.SUBSCRIBE,arguments:[f.SET_META_INFO,function(t,n){t===f._USER_ID&&n?g(d,e):t===f._ANONY_ID&&n?g(_,e):\"_hold\"===t&&\"START\"===n&&i(e)}]})};var h=function(t,e,n){var a=!!e.isOpenApi,o=t?t.action:\"\",f=t?t.arguments:\"\",g=r(t);if(g){var d=u.getContext();try{if(o&&f&&c.isArray(f)){var _,m=o.split(\".\"),h=d,v=d;if(3===m.length)h=d[m[0]][m[1]]||{},_=s(m[2],a),v=h[_]?h[_]:\"\";else for(;m.length;)if(_=s(m.shift(),a),v=h=h[_],!h)return void(l(n)&&n(t));l(v)&&v.apply(h,f),\"START\"===g&&i(e)}}catch(t){p().w(t)}}};e.processTask=h;var v=function(t,e){for(var n={subscribeMwChangeQueue:[],subscribeMetaQueue:[],installPluginQueue:[],subscribeQueue:[],metaQueue:[],othersQueue:[]},a=[],o={};o=t.shift();)try{var r=o.action,i=o.arguments[0];/subscribe/.test(r)?\"setMetaInfo\"===i?n.subscribeMetaQueue.push(o):i===f.MW_CHANGE_PV||i===f.MW_CHANGE_HJLJ?n.subscribeMwChangeQueue.push(o):n.subscribeQueue.push(o):/MetaInfo/.test(r)?n.metaQueue.push(o):/installPlugin/.test(r)?n.installPluginQueue.push(o):n.othersQueue.push(o)}catch(t){p().w(t),n.othersQueue.push(o)}var s;return e&&n[e]&&(s=n[e],n[e]=[]),a=n.subscribeMwChangeQueue.concat(n.metaQueue),a=a.concat(n.installPluginQueue),a=a.concat(n.subscribeQueue),a=a.concat(n.subscribeMetaQueue,n.othersQueue),{queue:a,formatQueue:s}};e.getFormatQueue=v},function(t,e,n){\"use strict\";var a=n(88),o=n(47),r=n(29),i=n(89),s=n(31),u=n(3),c=n(2),l=n(91);t.exports=function(){return{init:function(t){this.options=t,this.today=a.getFormatDate()},run:function(){var t=this,e=c.getGlobalValue(\"aplus\"),n=l.isCnaEnable();if(n){var a=c.getGoldlogVal(\"globalConfig\");if(s.test()){var p=r.getLsCna(a.ETAG_STORAGE_KEY,t.today);p||setTimeout(function(){var n=e.getMetaInfo(u.APLUS_RHOST_V);if(n){t.options.context.etag.egUrl=n.replace(/\\/\\w+.gif$/,\"\")+\"/eg.js\";var s=i.getUrl(t.options.context.etag||{});l.requestCna(s,function(e){var n=c.getGoldlogVal(\"Etag\");(o(e)||e&&\"error\"!==e.type)&&r.setLsCna(a.ETAG_STORAGE_KEY,t.today,n)})}},1e3)}}}}}},function(t,e,n){\"use strict\";var a=n(10),o=n(2),r=n(135),i=a.extend({push:function(t){this.length++,r.processTask(t,this.opts)}});t.exports=function(){return{processAplusQueue:function(t){var e=this.options.config||{},n=o.getGlobalValue(t);o.setGlobalValue(t,i.create({opts:e,startLength:n.length,length:0})),r.processGoldlogQueue(n,e)},run:function(){var t=this.options.context.aplus_config,e=t.globalConfig.APLUS_QUEUE;this.processAplusQueue(e),\"aplus_queue\"===e&&this.processAplusQueue(\"goldlog_queue\"),r.subscribeAndProcessQueue(e,this.options.config)}}}},function(t,e,n){\"use strict\";var a=n(18),o=n(44),r=n(41);t.exports=function(){return{init:function(t){this.options=t},addStyle:function(t,e){var n=t+\"_style\",a=document.getElementById(n);a||(a=document.createElement(\"link\"),a.id=n,a.href=e,a.rel=\"stylesheet\",a.type=\"text/css\",document.getElementsByTagName(\"head\").item(0).appendChild(a))},run:function(){var t=this,e=parent!==self,n=this.options.config||{};r.isArray(n.urlRules)&&a(n.urlRules,function(n){if(!e||n.allowIframeLoad){var i,s=new RegExp(n.rule);try{i=n.id?window.sessionStorage.getItem(n.id):\"\"}catch(t){}if(s.test(location.href)||i){try{window.sessionStorage.setItem(n.id,!0)}catch(t){}r.isArray(n.cdnPath)?a(n.cdnPath,function(e){/\\.css$/.test(e)?t.addStyle(n.id,e):/\\.js/.test(e)&&o.addScript(e)}):o.addScript(n.cdnPath)}}})}}}},function(t,e,n){\"use strict\";var a=n(3),o=n(44),r=n(77),i=n(2);t.exports=function(){return{run:function(){var t=this.options.config||{},e=i.getGlobalValue(a.APLUS),n=e._$||{},s=n.meta_info||{},u=e&&e.getCdnPath?e.getCdnPath():t.cdnPath,c=u+\"/sd/baxia-entry/index.js\";r.onload(function(){var t=s[\"aplus-xplug\"];\"NONE\"!==t&&o.addScript(c,\"\",\"aplus-baxia\")})}}}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){aplus._aplus_cplugin_webvt||n(141)()}}}},function(t,e,n){\"use strict\";function a(t){var e=m.getQueryFromUrl()||{},n=f({},e);return delete n.spm,delete n.utparam,\"config\"===t?n._is_config_pv=\"1\":n._is_auto_pv=\"1\",n}function o(){var t=l.getGlobalValue(\"aplus\"),e=t.getMetaInfo(\"data-spm\")||d.hash(location.host),n=d.hash(location.pathname);return[e,n]}function r(){var t=l.getGlobalValue(\"aplus_queue\"),e=o();t.push({action:\"aplus.setPageSPM\",\narguments:e})}function i(){var t=l.getGlobalValue(\"aplus\"),e=a(\"auto\"),n=t.getPageSPM()||[];\"0\"===n[1]&&r(),aplus_queue.push({action:\"aplus.sendPV\",arguments:[{is_auto:!0},e]})}function s(){var t=l.getGlobalValue(\"aplus\"),e=l.getGlobalValue(\"aplus_queue\"),n=t.getMetaInfo(p.APLUS_SPA_TYPE);[\"history\",\"hash\"].indexOf(n)>-1?(i(),e.push({action:\"aplus.aplus_pubsub.subscribe\",arguments:[p.APLUS_PAGE_CHANGE,function(){r();var t=a(\"auto\");e.push({action:\"aplus.sendPV\",arguments:[{is_auto:!0},t]})}]})):i()}function u(t){var e=l.getGlobalValue(\"aplus\"),n=l.getGlobalValue(\"aplus_queue\"),r=e.getMetaInfo(p.APLUS_AUTO_PV)||[],i=a(\"config\");g(r,function(e){var a=e.match,r=v(a)&&a(t)||b(a)&&a.test(t.pathname);if(r){var s=e.pageSPM||v(e.getPageSPM)&&e.getPageSPM(t)||o(),u=v(e.formatter)&&e.formatter(i,t)||{};u._is_config_pv=\"1\",n.push({action:\"aplus.setPageSPM\",arguments:s}),n.push({action:\"aplus.sendPV\",arguments:[{is_auto:!1},u]})}})}function c(){var t=l.getGlobalValue(\"aplus\"),e=t.getMetaInfo(p.APLUS_SPA_TYPE);u({pathname:location.pathname}),[\"history\",\"hash\"].indexOf(e)>-1&&aplus_queue.push({action:\"aplus.aplus_pubsub.subscribe\",arguments:[p.APLUS_PAGE_CHANGE,function(t){u(t)}]}),aplus_queue.push({action:\"aplus.aplus_pubsub.subscribe\",arguments:[\"setMetaInfo\",function(t){t===p.APLUS_AUTO_PV&&u({pathname:location.pathname})}]})}var l=n(2),p=n(3),f=n(13),g=n(18),d=n(59),_=n(45),m=n(17),h=n(77),v=n(9),b=n(142),y=n(19);t.exports=function(){var t=l.getGlobalValue(\"aplus\"),e=l.getGlobalValue(\"aplus_queue\"),n=_.getConfig()||{},a=t.getMetaInfo(\"aplus-waiting\"),o=t.getMetaInfo(\"aplus-cross-day-auto-pv\"),r=n.pvTrack;t._aplus_apv||(t._aplus_apv={status:\"complete\"},\"off\"===r||\"MAN\"===a?c():s(),\"on\"===o&&h.on(document.body,\"click\",function(){var n=t._last_pv_info;if(y(n)){var a=new Date,o=new Date(n.datetime);if(a.getFullYear()>o.getFullYear()||a.getMonth()>o.getMonth()||a.getDate()>o.getDate()){var r=n.pageConfig||{},i=n.pageParams||{};i._is_cross_day_auto_pv=\"1\",e.push({action:\"aplus.sendPV\",arguments:[r,i]})}}}))}},function(t,e){function n(t){return\"[object RegExp]\"===Object.prototype.toString.call(t)}t.exports=n},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){n(144)()}}}},function(t,e,n){\"use strict\";function a(){var t=d.getGlobalValue(\"aplus_queue\"),e=[];m(L,function(t,n){e.push(n)}),t.push({action:\"aplus.appendMetaInfo\",arguments:[_.APLUS_SINGLE_RECORD_LOGKEYS,e]})}function o(t,e){var n=[{to:\"_form_id\",getValue:function(){return t===L.INIT?e:T.getCurrentFormId()}}];return t!==L.INIT&&n.push({to:\"_form_session\",getValue:function(){var t=P.createFormBridgeByFormId(e);return t.getSessionId()}}),n}function r(t){var e=w.getMetaInfo(t),n=[];return y(e)&&m(e,function(t){t.from!==U&&n.push(t)}),n}function i(t){var e=t.logkey,n=t.cssSelector,a={logkey:e,cssSelector:n,props:o(e,t.formId),formatter:function(n,a){var o=Date.now(),r=e===L.INIT?t.formId:T.getCurrentFormId(),i=P.createFormBridgeByFormId(r),s=i.getTimestamp(O.FORM_INIT);if(e===L.INIT){a.setAttribute(N,r);var u=Math.random().toString(36).substring(2,10);i.setSessionId(u),n._form_session=u,i.reset(),i.setTimestamp(O.FORM_INIT,o),T.setCurrentFormId(r),i.setStatus(R.INACTIVATED)}else if(e===L.SUCCESS_SUBMIT)i.setTimestamp(O.FORM_LATEST_SUCCESS_SUBMIT,o),n._form_duration=o-s;else if(e===L.FAIL_SUBMIT)i.setTimestamp(O.FORM_LATEST_FAIL_SUBMIT,o),n._form_duration=o-s,n._form_error_text=a.innerText;else if(e===L.FIELD_VALIDATE_ERROR){i.setTimestamp(O.FORM_FIELD_LATEST_FAIL_INPUT,o);var c=i.loopGetFormFieldLabelDom(a);n._form_field_name=c&&c.innerText||\"\",n._form_field_error_text=a.innerText}return h().i(k,e,n),n},filter:function(n,a){var o=e===L.INIT?t.formId:T.getCurrentFormId();if(!S(o)){var r=P.createFormBridgeByFormId(o);if([L.FAIL_SUBMIT,L.FIELD_VALIDATE_ERROR,L.SUCCESS_SUBMIT].indexOf(a.logkey)>-1){var i=r.getTimestamp(O.FORM_INIT);return!S(i)}return!0}},from:U};return a}function s(t){var e=t.logkey,n=t.cssSelector,a={logkey:e,cssSelector:n,props:o(e,t.formId),enableMultipleConfig:!0,formatter:function(n,a){var o=Date.now(),r=e===L.INIT?t.formId:T.getCurrentFormId(),i=P.createFormBridgeByFormId(r),s=i.getTimestamp(O.FORM_INIT);if(s){if(T.setCurrentFormId(r),e===L.SUBMIT)i.setTimestamp(O.FORM_LATEST_FAIL_SUBMIT,void 0),i.setTimestamp(O.FORM_LATEST_SUCCESS_SUBMIT,void 0),i.setTimestamp(O.FORM_LATEST_SUBMIT,o),n._form_duration=o-s,i.recordLatestFieldInfo(o),i.setStatus(R.ACTIVATED);else if(e===L.FIELD_DURATION){var u=i.getLatestFieldInfo(o);n._form_field_name=u.latestFieldName,n._form_field_duration=u.latestFieldDuration,i.setTimestamp(O.FORM_FIELD_LATEST_START,o),i.setInputingFormItemDom(a)}return h().i(k,e,n),n}},filter:function(n,a){var o=e===L.INIT?t.formId:T.getCurrentFormId();if(!S(o)){var r=P.createFormBridgeByFormId(o),i=T.getCurrentFormId();if(S(i))return!1;var s=!1;if(a.logkey===L.FIELD_DURATION){var u=Date.now(),c=r.getInputingFormItemDom();S(c)&&(r.setTimestamp(O.FORM_FIELD_LATEST_START,u),r.setInputingFormItemDom(n)),r.setStatus(R.ACTIVATED),s=c&&c!==n}else if(a.logkey===L.SUBMIT){var l=document.querySelector(r.getFormElementQuerySelectorStr());s=!E(l)}else s=!0;return s}},from:U};return a}function u(t){var e=d.getGlobalValue(\"aplus_queue\"),n=r(_.APLUS_AUTO_CLK);e.push({action:\"aplus.setMetaInfo\",arguments:[_.APLUS_AUTO_CLK,n.concat(t)]})}function c(t){var e=d.getGlobalValue(\"aplus_queue\"),n=r(_.APLUS_AUTO_EXP);e.push({action:\"aplus.setMetaInfo\",arguments:[_.APLUS_AUTO_EXP,n.concat(t)]})}function l(){var t=d.getGlobalValue(\"aplus_queue\"),e=v(function(){var e=T.getFormCacheMap();m(e,function(e){var n=e,a=P.createFormBridgeByFormId(e),o=a.getTimestamp(O.FORM_INIT),r=a.getTimestamp(O.FORM_LEAVE),i=a.getTimestamp(O.FORM_LATEST_SUBMIT),s=a.getTimestamp(O.FORM_LATEST_SUCCESS_SUBMIT),u=a.getTimestamp(O.FORM_LATEST_FAIL_SUBMIT),c=a.getTimestamp(O.FORM_FIELD_LATEST_FAIL_INPUT),l=document.querySelector(a.getFormElementQuerySelectorStr()),p=E(l)&&!S(o)&&S(r)&&(S(i)||c>i||!S(s)||!S(u));if(p){a.reset();var f=Date.now();a.setTimestamp(O.FORM_LEAVE,f);var g=L.LEAVE,d={_form_id:n,_form_session:a.getSessionId(),_form_duration:f-o,_form_status:a.getStatus().toLocaleLowerCase()};t.push({action:\"aplus.record\",arguments:[g,\"CLK\",d,\"POST\"]}),h().i(k,g,d)}})},200);return t.push({action:\"aplus.aplus_pubsub.subscribe\",arguments:[_.APLUS_DOM_CHANGE,e]}),function(){t.push({action:\"aplus.aplus_pubsub.unsubscribe\",arguments:[_.APLUS_DOM_CHANGE,e]})}}function p(){var t=d.getGlobalValue(\"aplus_queue\");t.push({action:\"aplus.aplus_pubsub.subscribe\",arguments:[_.APLUS_PAGE_CHANGE,function(){g()}]})}function f(t,e){var n=!1;return m(t,function(t){t.cssSelector===e&&(n=!0)}),n}function g(){var t=I.getMatchedForms(w[x].formConfigs||[]);if(T.clearFormCache(),b(M)&&M(),M=l(),y(t)){a();var e=[],n=[];m(t,function(t){if(T.initFormCacheByFormConfig(t),t.formRootSelector&&!f(e,t.formRootSelector)&&e.push(i({cssSelector:t.formRootSelector,logkey:L.INIT,formId:t.formId})),t.formItemSelector&&!f(n,t.formItemSelector)&&n.push(s({cssSelector:t.formItemSelector,logkey:L.FIELD_DURATION,formId:t.formId})),t.formItemErrorInfoSelector&&!f(e,t.formItemErrorInfoSelector)&&e.push(i({cssSelector:t.formItemErrorInfoSelector,logkey:L.FIELD_VALIDATE_ERROR,formId:t.formId})),t.formSubmitButtonSelector&&!f(n,t.formSubmitButtonSelector)&&n.push(s({cssSelector:t.formSubmitButtonSelector,logkey:L.SUBMIT,formId:t.formId})),t.formSubmitSuccessFeature){var a=t.formSubmitSuccessFeature.type,o=t.formSubmitSuccessFeature.content;\"layer\"===a&&o&&!f(e,o)&&e.push(i({cssSelector:o,logkey:L.SUCCESS_SUBMIT,formId:t.formId}))}t.formSubmitFailureFeatureSelector&&!f(e,t.formSubmitFailureFeatureSelector)&&e.push(i({cssSelector:t.formSubmitFailureFeatureSelector,logkey:L.FAIL_SUBMIT,formId:t.formId}))}),u(n),c(e)}}var d=n(2),_=n(3),m=n(18),h=n(20),v=n(63),b=n(9),y=n(38),E=n(62),S=n(65),A=n(145),T=n(146),P=n(147),I=n(148),w=d.getGlobalValue(\"aplus\"),M=null,x=A.CACHE_KEY,C=A.FORM_CACHE_MAP_KEY,L=A.ACTION_TYPE_LOGKEY_MAP,O=A.LIFECYCLE_TIMESTAMP_ANCHOR_MAP,U=A.FORM_TAG,k=A.FORM_LOG_PREFIX,R=A.FORM_STATUS,N=A.FORM_NODE_ATTRIBUTE_NAME;t.exports=function(){var t=d.getGlobalValue(\"aplus\");b(t.getMetaInfo)&&\"on\"===t.getMetaInfo(\"aplus-form-track\")&&(t[x]||(t[x]={status:\"init\"},t[x][C]={},I.fetchConfig(function(e){t[x].status=\"complete\",t[x].formConfigs=e,g(),p()})))}},function(t,e){\"use strict\";var n=\"[form log] -- \",a=\"/aplus.form.\",o=\"_aplus_form_track\",r=\"formCacheMap\",i=\"form_track\",s=\"lifecycleTimestamp\",u={FORM_INIT:\"formInit\",FORM_LATEST_SUBMIT:\"formLatestSubmit\",FORM_LATEST_SUCCESS_SUBMIT:\"formLatestSuccessSubmit\",FORM_FIELD_LATEST_FAIL_INPUT:\"formFieldLatestFailInput\",FORM_LATEST_FAIL_SUBMIT:\"formLatestFailSubmit\",FORM_LEAVE:\"formLeave\",FORM_FIELD_LATEST_START:\"formFieldLatestStart\"},c={INIT:a+\"init\",LEAVE:a+\"leave\",FIELD_VALIDATE_ERROR:a+\"field_validate_error\",FIELD_DURATION:a+\"field_duration\",SUBMIT:a+\"submit\",SUCCESS_SUBMIT:a+\"success_submit\",FAIL_SUBMIT:a+\"fail_submit\"},l={ACTIVATED:\"ACTIVATED\",INACTIVATED:\"INACTIVATED\"},p=\"data-aplus-form-id\";t.exports={FORM_LOG_PREFIX:n,CACHE_KEY:o,FORM_CACHE_MAP_KEY:r,FORM_TAG:i,LIFECYCLE_TIMESTAMP:s,LIFECYCLE_TIMESTAMP_ANCHOR_MAP:u,ACTION_TYPE_LOGKEY_MAP:c,FORM_STATUS:l,FORM_NODE_ATTRIBUTE_NAME:p}},function(t,e,n){\"use strict\";var a=n(2),o=n(145),r=a.getGlobalValue(\"aplus\"),i=o.CACHE_KEY,s=o.FORM_CACHE_MAP_KEY,u=o.LIFECYCLE_TIMESTAMP;t.exports={clearFormCache:function(){r[i][s]={}},initFormCacheByFormConfig:function(t){var e={labelSelector:t.formItemLabelSelector};e[u]={},r[i][s][t.formId]=e},getFormCacheMap:function(){var t=r[i][s]||(r[i][s]={});return t},getFormCacheByFormId:function(t){var e=this.getFormCacheMap(),n=e[t];return n},setCurrentFormId:function(t){r[i].currentFormId=t},getCurrentFormId:function(){return r[i].currentFormId}}},function(t,e,n){\"use strict\";var a=n(2),o=n(20),r=n(62),i=n(146),s=n(145),u=s.LIFECYCLE_TIMESTAMP,c=s.ACTION_TYPE_LOGKEY_MAP,l=s.LIFECYCLE_TIMESTAMP_ANCHOR_MAP,p=s.FORM_LOG_PREFIX,f=s.FORM_NODE_ATTRIBUTE_NAME;t.exports={createFormBridgeByFormId:function(t){var e=i.getFormCacheByFormId(t);return{getFormElementQuerySelectorStr:function(){return\"[\"+f+'=\"'+t+'\"]'},reset:function(){this.clearTimestamps(),this.setInputingFormItemDom(null)},setStatus:function(t){e.status=t},getStatus:function(){return e.status},getTimestamp:function(t){return e[u][t]},setTimestamp:function(t,n){e[u][t]=n},clearTimestamps:function(){e[u]={}},getSessionId:function(){return e.sessionId},setSessionId:function(t){e.sessionId=t},getInputingFormItemDom:function(){return e.inputingFormItemDom},setInputingFormItemDom:function(t){e.inputingFormItemDom=t},getLabelSelector:function(){return e.labelSelector},loopGetFormFieldLabelDom:function(t){for(var e=this,n=e.getLabelSelector(),a=t,o=10,i=0,s=null;a&&r(a.getAttribute(f))&&i0&&localStorage.setItem(\"aplusDebug\",e[1]),a=\"true\"===localStorage.getItem(\"aplusDebug\")}else a=!1;return o.setGoldlogVal(\"aplusDebug\",a),a&&r().setDebug(a),a}},function(t,e,n){\"use strict\";var a=n(129),o=n(9),r=n(36);e.run=function(t,e){var n=new a;n.run({plugins:t.plugins,context:t.context},{config:{},userdata:{},pubsubType:\"aplusinit\",messageFnQueue:[],middlewareMessageKey:\"mw_change_aplusinit\"},function(t){var n=[\"aplusInitContext\",t];r.doPubMsg(n),r.doCachePubs(n),o(e)&&e(t)})}}]);/*! 2025-03-27 16:49:48 aplus_spmact.js */\n!function(t){function e(n){if(r[n])return r[n].exports;var a=r[n]={exports:{},id:n,loaded:!1};return t[n].call(a.exports,a,a.exports,e),a.loaded=!0,a.exports}var r={};return e.m=t,e.c=r,e.p=\"\",e(0)}([function(t,e,r){t.exports=r(1)},function(t,e){\"use strict\";!function(){function t(t,e,r){t[_]((h?\"on\":\"\")+e,function(t){t=t||s.event;var e=t.target||t.srcElement;r(t,e)},!1)}function e(){return/&?\\bspm=[^&#]*/.test(location.href)?location.href.match(/&?\\bspm=[^&#]*/gi)[0].split(\"=\")[1]:\"\"}function r(t,e){if(t&&/&?\\bspm=[^&#]*/.test(t)&&(t=t.replace(/&?\\bspm=[^&#]*/g,\"\").replace(/&{2,}/g,\"&\").replace(/\\?&/,\"?\").replace(/\\?$/,\"\")),!e)return t;var r,n,a,i,o,c,p,s=\"&\";if(t.indexOf(\"#\")!=-1&&(a=t.split(\"#\"),t=a.shift(),n=a.join(\"#\")),i=t.split(\"?\"),o=i.length-1,a=i[0].split(\"//\"),a=a[a.length-1].split(\"/\"),c=a.length>1?a.pop():\"\",o>0&&(r=i.pop(),t=i.join(\"?\")),r&&o>1&&r.indexOf(\"&\")==-1&&r.indexOf(\"%\")!=-1&&(s=\"%26\"),t=t+\"?spm=\"+e+(r?s+r:\"\")+(n?\"#\"+n:\"\"),p=c.indexOf(\".\")>-1?c.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(p))return 0;!r&&o<=1&&(n||{htm:1,html:1,php:1}.hasOwnProperty(p)||(t+=\"&file=\"+c))}return t}function n(t){function e(t){return t=t.replace(/refpos[=(%3D)]\\w*/gi,c).replace(i,\"%3D\"+n+\"%26\"+a.replace(\"=\",\"%3D\")).replace(o,n),a.length>0&&(t+=\"&\"+a),t}var r=window.location.href,n=r.match(/mm_\\d{0,24}_\\d{0,24}_\\d{0,24}/i),a=r.match(/[&\\?](pvid=[^&]*)/i),i=new RegExp(\"%3Dmm_\\\\d+_\\\\d+_\\\\d+\",\"ig\"),o=new RegExp(\"mm_\\\\d+_\\\\d+_\\\\d+\",\"ig\");a=a&&a[1]?a[1]:\"\";var c=r.match(/(refpos=(\\d{0,24}_\\d{0,24}_\\d{0,24})?(,[a-z]+)?)(,[a-z]+)?/i);return c=c&&c[0]?c[0]:\"\",n?(n=n[0],e(t)):t}function a(e){var r=s.KISSY;r?r.ready(e):s.jQuery?jQuery(m).ready(e):\"complete\"===m.readyState?e():t(s,\"load\",e)}function i(t,e){return t&&t.getAttribute?t.getAttribute(e)||\"\":\"\"}function o(t){if(t){var e,r=g.length;for(e=0;e-1)return!0;return!1}}function c(t,e){if(t&&/&?\\bspm=[^&#]*/.test(t)&&(t=t.replace(/&?\\bspm=[^&#]*/g,\"\").replace(/&{2,}/g,\"&\").replace(/\\?&/,\"?\").replace(/\\?$/,\"\")),!e)return t;var r,n,a,i,o,c,p,s=\"&\";if(t.indexOf(\"#\")!=-1&&(a=t.split(\"#\"),t=a.shift(),n=a.join(\"#\")),i=t.split(\"?\"),o=i.length-1,a=i[0].split(\"//\"),a=a[a.length-1].split(\"/\"),c=a.length>1?a.pop():\"\",o>0&&(r=i.pop(),t=i.join(\"?\")),r&&o>1&&r.indexOf(\"&\")==-1&&r.indexOf(\"%\")!=-1&&(s=\"%26\"),t=t+\"?spm=\"+e+(r?s+r:\"\")+(n?\"#\"+n:\"\"),p=c.indexOf(\".\")>-1?c.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(p))return 0;!r&&o<=1&&(n||{htm:1,html:1,shtml:1,php:1}.hasOwnProperty(p)||(t+=\"&__file=\"+c))}return t}function p(t){if(o(t.href)){var r=i(t,u);if(!r){var n=l()(t),a=[n.a,n.b,n.c,n.d].join(\".\");n.e&&(n+=\".\"+n.e),d&&(a=[n.a||\"0\",n.b||\"0\",n.c||\"0\",n.d||\"0\"].join(\".\"),a=(e()||\"0.0.0.0.0\")+\"_\"+a),t.href=c(t.href,a),t.setAttribute(u,a)}}}var s=window,m=document;if(1!==s.aplus_spmact){s.aplus_spmact=1;var f=function(){return{a:0,b:0,c:0,d:0,e:0}},l=function(){return s.g_SPM&&s.g_SPM.getParam?s.g_SPM.getParam:f},d=!0;try{d=self.location!=top.location}catch(t){}var u=\"data-spm-act-id\",g=[\"mclick.simba.taobao.com\",\"click.simba.taobao.com\",\"click.tanx.com\",\"click.mz.simba.taobao.com\",\"click.tz.simba.taobao.com\",\"redirect.simba.taobao.com\",\"rdstat.tanx.com\",\"stat.simba.taobao.com\",\"s.click.taobao.com\"],h=!!m.attachEvent,b=\"attachEvent\",v=\"addEventListener\",_=h?b:v;t(m,\"mousedown\",function(t,e){for(var r,n=0;e&&(r=e.tagName);){if(\"A\"==r||\"AREA\"==r){p(e);break}if(\"BODY\"==r||\"HTML\"==r)break;e=e.parentNode,n+=1}}),a(function(){for(var t,a,o=document.getElementsByTagName(\"iframe\"),c=0;c\",w=n&&n.createElement(\"div\"),g=[],x={webkit:void 0,edge:void 0,trident:void 0,gecko:void 0,presto:void 0,chrome:void 0,safari:void 0,firefox:void 0,ie:void 0,ieMode:void 0,opera:void 0,mobile:void 0,core:void 0,shell:void 0,phantomjs:void 0,os:void 0,ipad:void 0,iphone:void 0,ipod:void 0,ios:void 0,android:void 0,nodejs:void 0,extraName:void 0,extraVersion:void 0};if(w&&w.getElementsByTagName&&(w.innerHTML=p.replace(v,\"\"),g=w.getElementsByTagName(\"s\")),g.length>0){for(_(e,x),s=f[0],c=f[1];s<=c;s++)if(w.innerHTML=p.replace(v,s),g.length>0){x[b=\"ie\"]=s;break}!x.ie&&(d=N(e))&&(x[b=\"ie\"]=d)}else((a=e.match(/AppleWebKit\\/*\\s*([\\d.]*)/i))||(a=e.match(/Safari\\/([\\d.]*)/)))&&a[1]?(x[m=\"webkit\"]=y(a[1]),(a=e.match(/OPR\\/(\\d+\\.\\d+)/))&&a[1]?x[b=\"opera\"]=y(a[1]):(a=e.match(/Chrome\\/([\\d.]*)/))&&a[1]?x[b=\"chrome\"]=y(a[1]):(a=e.match(/\\/([\\d.]*) Safari/))&&a[1]?x[b=\"safari\"]=y(a[1]):x.safari=x.webkit,(a=e.match(/Edge\\/([\\d.]*)/))&&a[1]&&(m=b=\"edge\",x[m]=y(a[1])),/ Mobile\\//.test(e)&&e.match(/iPad|iPod|iPhone/)?(x.mobile=\"apple\",a=e.match(/OS ([^\\s]*)/),a&&a[1]&&(x.ios=y(a[1].replace(\"_\",\".\"))),t=\"ios\",a=e.match(/iPad|iPod|iPhone/),a&&a[0]&&(x[a[0].toLowerCase()]=x.ios)):/ Android/i.test(e)?(/Mobile/.test(e)&&(t=x.mobile=\"android\"),a=e.match(/Android ([^\\s]*);/),a&&a[1]&&(x.android=y(a[1]))):(a=e.match(/NokiaN[^\\/]*|Android \\d\\.\\d|webOS\\/\\d\\.\\d/))&&(x.mobile=a[0].toLowerCase()),(a=e.match(/PhantomJS\\/([^\\s]*)/))&&a[1]&&(x.phantomjs=y(a[1]))):(a=e.match(/Presto\\/([\\d.]*)/))&&a[1]?(x[m=\"presto\"]=y(a[1]),(a=e.match(/Opera\\/([\\d.]*)/))&&a[1]&&(x[b=\"opera\"]=y(a[1]),(a=e.match(/Opera\\/.* Version\\/([\\d.]*)/))&&a[1]&&(x[b]=y(a[1])),(a=e.match(/Opera Mini[^;]*/))&&a?x.mobile=a[0].toLowerCase():(a=e.match(/Opera Mobi[^;]*/))&&a&&(x.mobile=a[0]))):(d=N(e))?(x[b=\"ie\"]=d,_(e,x)):(a=e.match(/Gecko/))&&(x[m=\"gecko\"]=.1,(a=e.match(/rv:([\\d.]*)/))&&a[1]&&(x[m]=y(a[1]),/Mobile|Tablet/.test(e)&&(x.mobile=\"firefox\")),(a=e.match(/Firefox\\/([\\d.]*)/))&&a[1]&&(x[b=\"firefox\"]=y(a[1])));t||(t=i());var z,O,T;if(!r(\"type\",\"application/vnd.chromium.remoting-viewer\")){z=\"scoped\"in n.createElement(\"style\"),T=\"v8Locale\"in o;try{O=o.external||void 0}catch(e){}if(a=e.match(/360SE/))u=\"360\";else if((a=e.match(/SE\\s([\\d.]*)/))||O&&\"SEVersion\"in O)u=\"sougou\",h=y(a[1])||.1;else if((a=e.match(/Maxthon(?:\\/)+([\\d.]*)/))&&O){u=\"maxthon\";try{h=y(O.max_version||a[1])}catch(e){h=.1}}else z&&T?u=\"360se\":z||T||!/Gecko\\)\\s+Chrome/.test(k)||x.opera||x.edge||(u=\"360ee\")}(a=e.match(/TencentTraveler\\s([\\d.]*)|QQBrowser\\/([\\d.]*)/))?(u=\"tt\",h=y(a[2])||.1):(a=e.match(/LBBROWSER/))||O&&\"LiebaoGetVersion\"in O?u=\"liebao\":(a=e.match(/TheWorld/))?(u=\"theworld\",h=3):(a=e.match(/TaoBrowser\\/([\\d.]*)/))?(u=\"taobao\",h=y(a[1])||.1):(a=e.match(/UCBrowser\\/([\\d.]*)/))&&(u=\"uc\",h=y(a[1])||.1),x.os=t,x.core=x.core||m,x.shell=b,x.ieMode=x.ie&&n.documentMode||x.ie,x.extraName=u,x.extraVersion=h;var P=o.screen.width,M=o.screen.height;return x.resolution=P+\"x\"+M,x},S=function(e){function i(e){return Object.prototype.toString.call(e)}function o(e,o,n){if(\"[object Function]\"==i(o)&&(o=o(n)),!o)return null;var r={name:e,version:\"\"},t=i(o);if(o===!0)return r;if(\"[object String]\"===t){if(n.indexOf(o)!==-1)return r}else if(o.exec){var a=o.exec(n);if(a)return a.length>=2&&a[1]?r.version=a[1].replace(/_/g,\".\"):r.version=\"\",r}}var n={name:\"other\",version:\"\"};e=(e||\"\").toLowerCase();for(var r=[[\"nokia\",function(e){return e.indexOf(\"nokia \")!==-1?/\\bnokia ([0-9]+)?/:/\\bnokia([a-z0-9]+)?/}],[\"samsung\",function(e){return e.indexOf(\"samsung\")!==-1?/\\bsamsung(?:[ \\-](?:sgh|gt|sm))?-([a-z0-9]+)/:/\\b(?:sgh|sch|gt|sm)-([a-z0-9]+)/}],[\"wp\",function(e){return e.indexOf(\"windows phone \")!==-1||e.indexOf(\"xblwp\")!==-1||e.indexOf(\"zunewp\")!==-1||e.indexOf(\"windows ce\")!==-1}],[\"pc\",\"windows\"],[\"ipad\",\"ipad\"],[\"ipod\",\"ipod\"],[\"iphone\",/\\biphone\\b|\\biph(\\d)/],[\"mac\",\"macintosh\"],[\"mi\",/\\bmi[ \\-]?([a-z0-9 ]+(?= build|\\)))/],[\"hongmi\",/\\bhm[ \\-]?([a-z0-9]+)/],[\"aliyun\",/\\baliyunos\\b(?:[\\-](\\d+))?/],[\"meizu\",function(e){return e.indexOf(\"meizu\")>=0?/\\bmeizu[\\/ ]([a-z0-9]+)\\b/:/\\bm([0-9x]{1,3})\\b/}],[\"nexus\",/\\bnexus ([0-9s.]+)/],[\"huawei\",function(e){var i=/\\bmediapad (.+?)(?= build\\/huaweimediapad\\b)/;return e.indexOf(\"huawei-huawei\")!==-1?/\\bhuawei\\-huawei\\-([a-z0-9\\-]+)/:i.test(e)?i:/\\bhuawei[ _\\-]?([a-z0-9]+)/}],[\"lenovo\",function(e){return e.indexOf(\"lenovo-lenovo\")!==-1?/\\blenovo\\-lenovo[ \\-]([a-z0-9]+)/:/\\blenovo[ \\-]?([a-z0-9]+)/}],[\"zte\",function(e){return/\\bzte\\-[tu]/.test(e)?/\\bzte-[tu][ _\\-]?([a-su-z0-9\\+]+)/:/\\bzte[ _\\-]?([a-su-z0-9\\+]+)/}],[\"vivo\",/\\bvivo(?: ([a-z0-9]+))?/],[\"htc\",function(e){return/\\bhtc[a-z0-9 _\\-]+(?= build\\b)/.test(e)?/\\bhtc[ _\\-]?([a-z0-9 ]+(?= build))/:/\\bhtc[ _\\-]?([a-z0-9 ]+)/}],[\"oppo\",/\\boppo[_]([a-z0-9]+)/],[\"konka\",/\\bkonka[_\\-]([a-z0-9]+)/],[\"sonyericsson\",/\\bmt([a-z0-9]+)/],[\"coolpad\",/\\bcoolpad[_ ]?([a-z0-9]+)/],[\"lg\",/\\blg[\\-]([a-z0-9]+)/],[\"android\",/\\bandroid\\b|\\badr\\b/],[\"blackberry\",function(e){return e.indexOf(\"blackberry\")>=0?/\\bblackberry\\s?(\\d+)/:\"bb10\"}]],t=0;t0?o.ratio:r.jsErrorRecordRatio}),e=[\"Message: \"+o.message,\"Error object: \"+o.error,\"Url: \"+location.href].join(\" - \"),c=goldlog.spm_ab||[],i=location.hostname+location.pathname;t.run({code:110,page:i,msg:\"record_jserror_by\"+s+\"_\"+o.message,spm_a:c[0],spm_b:c[1],c1:e,c2:o.filename,c3:location.protocol+\"//\"+i,c4:goldlog.pvid||\"\",c5:o.logid||\"\"})}catch(o){a.logger({msg:o})}},do_tracker_lostpv:function(o){var t=!1;try{if(o&&o.page){var e=o.spm_ab?o.spm_ab.split(\".\"):[],c=\"record_lostpv_by\"+s+\"_\"+o.msg,i=new n({ratio:o.ratio||r.lostPvRecordRatio});i.run({code:102,page:o.page,msg:c,spm_a:e[0],spm_b:e[1],c1:o.duration,c2:o.page_url}),t=!0}}catch(o){a.logger({msg:o})}return t},do_tracker_obsolete_inter:function(o){var t=!1;try{if(o&&o.page){var e=o.spm_ab?o.spm_ab.split(\".\"):[],c=\"record_obsolete interface be called by\"+s,i=new n({ratio:o.ratio||r.obsoleteInterRecordRatio});i.run({code:109,page:o.page,msg:c,spm_a:e[0],spm_b:e[1],c1:o.interface_name,c2:o.interface_params},1),t=!0}}catch(o){a.logger({msg:o})}return t},do_tracker_browser_support:function(o){var t=!1;try{if(o&&o.page){var e=o.spm_ab?o.spm_ab.split(\".\"):[],c=new n({ratio:o.ratio||r.browserSupportRatio}),i=goldlog._aplus_client||{},l=i.ua_info||{};c.run({code:111,page:o.page,msg:o.msg+\"_by\"+s,spm_a:e[0],spm_b:e[1],c1:[l.o,l.b,l.w].join(\"_\"),c2:o.etag||\"\",c3:o.cna||\"\"}),t=!0}}catch(o){a.logger({msg:o})}return t},do_tracker_common_analysis:function(o){var t=!1;try{if(o&&o.page){var e=o.spm_ab?o.spm_ab.split(\".\"):[],c=new n({ratio:o.ratio||r.browserSupportRatio}),i=goldlog._aplus_client||{},l=i.ua_info||{};c.run({code:113,page:o.page,msg:o.msg+\"_by\"+s,spm_a:e[0],spm_b:e[1],c1:[l.o,l.b,l.w].join(\"_\"),c2:o.init_time||\"\",c3:o.wspv_time||0,c4:o.load_time||0,c5:o.channel_type}),t=!0}}catch(o){a.logger({msg:o})}return t}}}},function(o,t){\"use strict\";t.lostPvRecordRatio=\"0.01\",t.obsoleteInterRecordRatio=\"0.001\",t.jsErrorRecordRatio=\"0.001\",t.browserSupportRatio=\"0.001\",t.goldlogQueueRatio=\"0.01\"},function(o,t){\"use strict\";var e=function(o){var t=o.level||\"warn\";window.console&&window.console[t]&&window.console[t](o.msg)};t.logger=e,t.assign=function(o,t){if(\"function\"!=typeof Object.assign){var e=function(o){if(null===o)throw new TypeError(\"Cannot convert undefined or null to object\");for(var t=Object(o),e=1;e-1}var f=window;e.assign=o,e.makeCacheNum=function(){return Math.floor(268435456*Math.random()).toString(16)},e.each=n(10),e.isStartWith=function(t,e){return 0===t.indexOf(e)},e.isEndWith=function(t,e){var n=t.length,o=e.length;return n>=o&&t.indexOf(e)==n-o},e.any=function(t,e){var n,o=t.length;for(n=0;n-1&&(r=1),a.setTime(a.getTime()+365*r*24*60*60*1e3),e+=\"; expires=\"+a.toUTCString()}e+=\"; path=\"+(n.path?n.path:\"/\"),e+=\"; domain=\"+n.domain,s.cookie=t+\"=\"+e;var i=0;try{var u=navigator.userAgent.match(/Chrome\\/\\d+/);u&&u[0]&&(i=u[0].split(\"/\")[1],i&&(i=parseInt(i)))}catch(t){}return n.SameSite&&i>=80&&(e+=\"; SameSite=\"+n.SameSite,e+=\"; Secure\",s.cookie=t+\"=\"+e),o(t)}function r(t,e,n){try{if(n||(n={}),n.domain)a(t,e,n);else for(var o=l.getDomains(),r=0;r0&&(n=i[0])}return n||(n=r.is_terminal?\"m.gif\":\"v.gif\"),n},run:function(){var t=!!this.options.context.is_single;if(!t){var e=this.getAplusMetaByKey(\"aplus-rhost-v\"),n=this.options.context.where_to_sendpv||{},a=n.url||\"\",r=this.getGifPath(n.urlRule,a),i=o.getPvUrl({metaName:\"aplus-rhost-v\",metaValue:e,gifPath:r,url:o.filterIntUrl(a)});n.url=i,this.options.context.where_to_sendpv=n}}}}},function(t,e,n){\"use strict\";function o(t){t=(t||\"\").split(\"#\")[0].split(\"?\")[0];var e=t.length,n=function(t){var e,n=t.length,o=0;for(e=0;e1&&e===r[0]?r[1]:\"\":r.length>1?r[1]:\"\"}return decodeURIComponent(n)}return\"\"},setLsCna:function(t,e,n){n&&a.set&&a.test()&&a.set(t,e+\"_\"+encodeURIComponent(n))},getUrl:function(t){var e=t||\"//log.mmstat.com/eg.js\";try{var n=goldlog.getMetaInfo(\"aplus-rhost-v\"),o=/[[a-z|0-9\\.]+[a-z|0-9]/,a=n.match(o);a&&a[0]&&(e=e.replace(o,a[0]))}catch(t){}return e}}},function(t,e){\"use strict\";function n(t){return\"string\"==typeof t?t.replace(/^\\s+|\\s+$/g,\"\"):\"\"}e.trim=n},function(t,e){\"use strict\";t.exports={set:function(t,e){try{return localStorage.setItem(t,e),!0}catch(t){return!1}},get:function(t){try{return localStorage.getItem(t)}catch(t){return\"\"}},test:function(){var t=\"grey_test_key\";try{return localStorage.setItem(t,1),localStorage.removeItem(t),!0}catch(t){return!1}},remove:function(t){localStorage.removeItem(t)}}},function(t,e,n){\"use strict\";var o=n(9),a=function(){if(goldlog.aplusDebug){var t=location.protocol;return\"http:\"!==t&&\"https:\"!==t&&(t=\"https:\"),t}return\"https:\"};e.getProtocal=a,e.isStartWithProtocol=function(t){for(var e=[\"javascript:\",\"tel:\",\"sms:\",\"mailto:\",\"tmall://\",\"#\"],n=0,a=e.length;n-1},l=0;l0?n.param2obj(t.substring(0,u)):{};delete p[\"\"],s=n.obj2param(c.assign(p,r))+\"&\"+t.substring(u,t.length)}else s=n.obj2param(r)+\"&\"+o;return s}return a}catch(t){return a}};e.mergeExparams=d},function(t,e,n){\"use strict\";var o=n(32),a=n(3),r=n(11),i=n(30),s=n(19),u=n(33),c=n(34),l=n(25),p=n(4);t.exports=function(){return{init:function(t){this.options=t;var e=this.options.context.etag||{};this.cna=e.cna||r.getCookie(\"cna\"),this.setTag(0),this.setStag(-1),this.setLsTag(\"-1\"),this.setEtag(this.cna||\"\"),this.requesting=!1,this.today=u.getFormatDate()},setLsTag:function(t){this.lstag=t,this.options.context.etag.lstag=t},setTag:function(t){this.tag=t,this.options.context.etag.tag=t},setStag:function(t){this.stag=t,this.options.context.etag.stag=t},setEtag:function(t){t&&(this.etag=t,this.options.context.etag.cna=t,r.getCookie(\"cna\")!==t&&(o.publishCNA(t),r.setCookie(\"cna\",t,{SameSite:\"none\"})))},setLscnaStatus:function(t){this.options.context.etag.lscnastatus=t},run:function(t,e){var n=this;if(n.cna)return void n.setTag(1);var o=null,r=c.getUrl(this.options.context.etag||{});n.requesting=!0;var u=function(){setTimeout(function(){e()},20),clearTimeout(o)};return i.loadScript(r,function(t){var e,o;if(t&&\"error\"===t.type?(n.setStag(-3),a.do_tracker_jserror({message:\"loadError\",error:\"\",filename:\"etag_ls\"})):(e=l.getGoldlogVal(\"Etag\"),o=l.getGoldlogVal(\"stag\"),\"undefined\"!=typeof o&&n.setStag(o)),!n.requesting)return void n.setEtag(e);if(2===o||4===o){var r=s.getLsCna(p.LS_CNA_KEY);r?(n.setLsTag(1),n.setEtag(r)):(n.setLsTag(0),s.setLsCna(p.LS_CNA_KEY,n.today,e),n.setEtag(e))}else n.setEtag(e);u()}),o=setTimeout(function(){n.requesting=!1,n.setStag(-2),e()},1500),2e3}}}},function(t,e){\"use strict\";var n=\"function\",o=function(){var t=window.goldlog||{},e=t.aplus_pubsub||{},o=typeof e.publish===n;return o?e:\"\"},a=function(t){var e=o();e&&typeof e.publish===n&&e.publish.apply(e,t)};e.doPubMsg=a;var r=function(t){var e=o();e&&typeof e.cachePubs===n&&e.cachePubs.apply(e,t)};e.doCachePubs=r,e.doSubMsg=function(t,e){var a=o();a&&typeof a.subscribe===n&&a.subscribe(t,e)},e.doSubOnceMsg=function(t,e){var a=o();a&&typeof a.subscribeOnce===n&&a.subscribeOnce(t,e)},e.publishCNA=function(t){if(t){var e=[\"CNA\",{value:t}];a(e),r(e)}}},function(t,e){\"use strict\";function n(t,e,n){var o=\"\"+Math.abs(t),a=e-o.length,r=t>=0;return(r?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,a)).toString().substr(1)+o}e.getFormatDate=function(t){var e=new Date;try{return[e.getFullYear(),n(e.getMonth()+1,2,0),n(e.getDate(),2,0)].join(t||\"\")}catch(t){return\"\"}}},function(t,e,n){\"use strict\";var o=n(19);e.getUrl=function(t){var e=(new Date).getTime(),n=o.getUrl(t&&t.egUrl?t.egUrl:\"gj.mmstat.com/eg.js\"),a=n.match(/[\\w+\\.]+[a-z|A-Z|0-9]+\\/(eg|ge).js/);return 0!==n.indexOf(\"http\")&&a&&a.length>0&&(n=\"//\"+a[0]),n+\"?t=\"+e}},function(t,e,n){\"use strict\";var o=n(19),a=n(30),r=n(34),i=n(4),s=n(33),u=n(21);t.exports=function(){return{init:function(t){this.options=t,this.today=s.getFormatDate()},run:function(){var t=this;if(u.test()){var e=o.getLsCna(i.LS_CNA_KEY,t.today);e||setTimeout(function(){var e=r.getUrl(t.options.context.etag||{});a.loadScript(e,function(e){e&&\"error\"!==e.type&&o.setLsCna(i.LS_CNA_KEY,t.today,goldlog.Etag)})},1e3)}}}}},function(t,e,n){\"use strict\";e.plugins_pv=[{name:\"etag\",enable:!0,path:n(37)},{name:\"when_to_sendpv\",enable:!0,path:n(38)},{name:\"where_to_sendlog_ut\",enable:!0,path:n(39)},{name:\"is_single\",enable:!0,path:n(41)},{name:\"what_to_pvhash\",enable:!0,path:n(45)},{name:\"what_to_sendpv\",enable:!0,path:n(46)},{name:\"what_to_sendpv_userdata\",enable:!0,path:n(50),deps:[\"what_to_sendpv\"]},{name:\"what_to_sendpv_etag\",enable:!0,path:n(55),deps:[\"etag\",\"what_to_sendpv\"]},{name:\"what_to_sendpv_ut2\",enable:n(56),path:n(57),deps:[\"where_to_sendlog_ut\",\"is_single\"]},{name:\"what_to_sendpv_ut\",enable:!0,path:n(58),deps:[\"where_to_sendlog_ut\",\"is_single\"]},{name:\"what_to_pv_slog\",enable:!0,path:n(59),deps:[\"what_to_sendpv\"]},{name:\"can_to_sendpv\",enable:!0,path:n(60)},{name:\"where_to_sendpv\",enable:!0,path:n(17),deps:[\"is_single\"]},{name:\"do_sendpv\",enable:!0,path:n(61),deps:[\"is_single\",\"what_to_sendpv\",\"where_to_sendpv\"]},{name:\"do_sendpv_ut2\",enable:n(56),path:n(62),deps:[\"what_to_sendpv_ut2\",\"where_to_sendlog_ut\"]},{name:\"do_sendpv_ut\",enable:n(56),path:n(63),deps:[\"what_to_sendpv_ut\",\"where_to_sendlog_ut\"]},{name:\"after_pv\",enable:!0,path:n(64)}]},function(t,e,n){\"use strict\";var o=n(32);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this;o.doSubOnceMsg(\"aplusInitContext\",function(e){e.etag&&(t.options.context.etag=e.etag)})}}}},function(t,e,n){\"use strict\";var o=n(25),a=n(23),r=n(26);t.exports=function(){return{init:function(t){this.options=t},getMetaInfo:function(){var t=o.getGoldlogVal(\"_$\")||{},e=t.meta_info||r.getInfo();return e},getAplusWaiting:function(){var t=this.getMetaInfo()||{};return t[\"aplus-waiting\"]},run:function(t,e){var n=this.options.config||{},o=this.getAplusWaiting();if(o&&n.is_auto)switch(o=this.getAplusWaiting()+\"\",this.options.context.when_to_sendpv={aplusWaiting:o},o){case\"MAN\":return\"done\";case\"1\":return this.options.context.when_to_sendpv.isWait=!0,a.sleep(6e3,function(){e()}),6e3;default:var r=1*o;if(r+\"\"!=\"NaN\")return this.options.context.when_to_sendpv.isWait=!0,a.sleep(r,function(){e()}),r}}}}},function(t,e,n){\"use strict\";var o=n(40);t.exports=function(){return{init:function(t){this.options=t},getAplusToUT:function(t){return{toUT2:o.getAplusToUT(\"toUT2\",t),toUT:o.getAplusToUT(\"toUT\",t)}},run:function(){if(\"Umeng4Aplus\"===goldlog.aplusBridgeName)this.options.context.where_to_sendlog_ut.toUTName=\"toUT2\";else{var t=this.getAplusToUT(this.options.config.recordType);this.options.context.where_to_sendlog_ut.aplusToUT=t}}}}},function(t,e){\"use strict\";var n=navigator.userAgent,o=/WindVane/i.test(n);e.is_WindVane=o;var a=function(){var t=goldlog.getMetaInfo(\"aplus_chnl\");return!(!t||!t.isAvailable||\"function\"!=typeof t.toUT2&&\"function\"!=typeof t.toUT)&&t};e.isAplusChnl=a,e.getAplusToUT=function(t,e){var n={},r=a();if(\"object\"==typeof r)n.bridgeName=r.bridgeName||\"customBridge\",n.bridgeVersion=r.bridgeVersion||r.version||\"\",n.isAvailable=r.isAvailable,n.toUT2=r.toUT2||r.toUT;else{var i=window.WindVane||{};if(o&&i&&i.isAvailable&&\"function\"==typeof i.call){var s=t||\"toUT\",u=goldlog.getMetaInfo(\"aplus-toUT\")+\"\";\"toUT2HC\"===u&&\"PV\"===e&&(s=u),n={bridgeName:\"WindVane\",bridgeVersion:i.version||\"\",isAvailable:!0,toUT2:function(t,e,n,o){return i.call(\"WVTBUserTrack\",s,t,e,n,o)}}}}return n}},function(t,e,n){\"use strict\";var o=n(25),a=n(42),r=n(43),i=n(4);t.exports=function(){return{init:function(t){this.options=t,this._$=o.getGoldlogVal(\"_$\")||{},this.isBoth=\"1\"===this._$.meta_info[\"aplus-both-request\"],this.is_WindVane=this._$.is_WindVane},isSingle_pv:function(t){return t?!this.isBoth:!(!this.is_WindVane||!r.isSingleUaVersion()||this.isBoth)},isSingle_hjlj:function(t,e){return e?!this.isBoth:!(!this.is_WindVane||!r.isSingleSendLog(t)||this.isBoth)},isSingle_uhjlj:function(t,e){return(!t||!/^\\/aplus\\.99\\.(\\d)+$/.test(t.logkey))&&(e?!this.isBoth:!(!(this.is_WindVane&&t&&t.logkey&&r.isSingleUaVersion())||this.isBoth))},run:function(){var t=this.options.context||{},e=this.options.config||{},n=t.where_to_sendlog_ut.aplusToUT||{},o=n.toUT||{},r=n.toUT2||{},s=a.isNative4Aplus(),u=!!(o.isAvailable||r.isAvailable||s),c=t.userdata||{},l=!!t.is_single;switch(e.recordType){case i.recordTypes.uhjlj:l=this.isSingle_uhjlj(c,s);break;case i.recordTypes.hjlj:l=this.isSingle_hjlj(c,s);break;case i.recordTypes.pv:l=this.isSingle_pv(s);break;default:l=this.isSingle_pv(s)}this.options.context.is_single=u&&l,this.options.context.ut_is_available=u}}}},function(t,e){\"use strict\";var n=\"UT4Aplus\",o=\"Umeng4Aplus\";e.isNative4Aplus=function(){var t=goldlog.getMetaInfo(\"aplus-toUT\"),e=goldlog.aplusBridgeName;return e===n&&t===n||e===o},e.haveNativeFlagInUA=function(){var t=goldlog.aplusBridgeName;if(!t&&\"boolean\"!=typeof t){var e=new RegExp([n,o].join(\"|\"),\"i\"),a=navigator.userAgent.match(e);t=!!a&&a[0],goldlog.aplusBridgeName=t}return!!t}},function(t,e,n){\"use strict\";var o=n(44),a=n(42),r=function(t){var e=t.logkey.toLowerCase();0===e.indexOf(\"/\")&&(e=e.substr(1));var n=t.gmkey?t.gmkey.toUpperCase():\"OTHER\";switch(n){case\"EXP\":return\"2201\";case\"CLK\":return\"2101\";case\"SLD\":return\"19999\";case\"OTHER\":default:return\"19999\"}},i=/\\sA2U\\/x/.test(window.navigator.userAgent),s=function(){var t=window.navigator.userAgent,e=!1,n=/AliApp\\((DM|DY|DingTalk|CN|LA)\\/(\\d+[._]\\d+[._]\\d+)/i,r=n.test(t);return e=r,i||a.haveNativeFlagInUA()||e||o.webviewIsAbove({version_ios_tb:[5,11,7],version_ios_tm:[5,24,1],version_android_tb:[5,11,7],version_android_tm:[5,24,1]})};e.isSingleUaVersion=s,e.isSingleSendLog=function(t){return(!t||!/^\\/fsp\\.1\\.1$/.test(t.logkey))&&!!(t&&t.logkey&&s())},e.getFunctypeValue=function(t){return e.isSingleSendLog(t)?r(t):\"2101\"},e.getFunctypeValue2=function(t){return r(t)}},function(t,e){\"use strict\";var n=function(t){var e=[0,0,0];try{if(t){var n=t[1],o=n.split(\".\");if(o.length>2)for(var a=0;ae[0],a=t[1]>e[1],r=t[2]>e[2],i=t[0]===e[0],s=t[1]===e[1],u=t[2]===e[2];n=!!o||(!(!i||!a)||(!!(i&&s&&r)||!!(i&&s&&u)))}catch(t){n=!1}finally{return n}};e.isAboveVersion=o,e.webviewIsAbove=function(t,e){var a=!1;try{e||(e=navigator.userAgent);var r=e.match(/AliApp\\(TB\\/(\\d+[._]\\d+[._]\\d+)/i),i=n(r),s=e.match(/AliApp\\(TM\\/(\\d+[._]\\d+[._]\\d+)/i),u=n(s),c=/iPhone|iPad|iPod|ios/i.test(e),l=/android/i.test(e);c?r&&i?a=o(i,t.version_ios_tb):s&&u&&(a=o(u,t.version_ios_tm)):l&&(r&&i?a=o(i,t.version_android_tb):s&&u&&(a=o(u,t.version_android_tm)))}catch(t){a=!1}return a},e.webviewIsEqual=function(t,e){var n=!1;try{e||(e=navigator.userAgent);var o=e.match(/AliApp\\(CN\\/(\\d+[._]\\d+[._]\\d+)/i),a=o?o[1]:\"0.0.0\",r=e.match(/AliApp\\(DingTalk\\/(\\d+[._]\\d+[._]\\d+)/i),i=r?r[1]:\"0.0.0\",s=/iPhone|iPad|iPod|ios/i.test(e),u=/android/i.test(e);s?o&&a?n=t.version_ios_cn===a:r&&i&&(n=t.version_ios_dd===i):u&&(o&&a?n=t.version_android_cn===a:r&&i&&(n=t.version_android_dd===i))}catch(t){n=!1}return n},e.webviewIsBelow=function(t,e){var a=!1;try{e||(e=navigator.userAgent);var r=e.match(/AliApp\\(CN\\/(\\d+[._]\\d+[._]\\d+)/i),i=n(r),s=/iPhone|iPad|iPod|ios/i.test(e),u=/android/i.test(e);s?r&&i&&(a=!o(i,t.version_ios_cn)):u&&r&&i&&(a=!o(i,t.version_android_cn))}catch(t){a=!1}return a}},function(t,e,n){\"use strict\";var o=n(25);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this.options.context.what_to_pvhash||{},e=o.getGoldlogVal(\"_$\")||{},n=e.meta_info||{},a=n[\"aplus-pvhash\"]||\"\",r=[];\"1\"===a&&(r=[\"_aqx_uri\",encodeURIComponent(location.href)]),t.hash=r,this.options.context.what_to_pvhash=t}}}},function(t,e,n){\"use strict\";var o=n(18),a=n(9),r=n(30),i=n(25),s=n(27),u=n(11),c=n(47),l=n(48),p=n(49);t.exports=function(){return a.assign(p,{init:function(t){this.options=t,this.cookie_data||(this.cookie_data=u.getData()),this.client_info||(this.client_info=i.getClientInfo()||{});\nvar e=location.hash;e&&0===e.indexOf(\"#\")&&(e=e.substr(1)),this.loc_hash=e},getExParams:function(){var t=window,e=document,n=[],u=parent!==t.self,l=e.getElementById(\"beacon-aplus\")||e.getElementById(\"tb-beacon-aplus\"),p=s.tryToGetAttribute(l,\"exparams\"),g=r.mergeExparams(p,r.getExParamsFromMeta(),o)||\"\";g=g.replace(/&/g,\"&\");var f,d,_=[\"taobao.com\",\"tmall.com\",\"etao.com\",\"hitao.com\",\"taohua.com\",\"juhuasuan.com\",\"alimama.com\"],h=i.getGoldlogVal(\"_$\")||{},m=h.meta_info||{};if(u&&!m[\"aplus-ifr-pv\"]){for(d=_.length,f=0;f=0&&t.splice(r,1)}function r(t,e,n,o){var a,r,i=t.length,s=-1,u=\"function\"==typeof n;for(a=0;a-1?t.splice(s,0,[e,n]):t.push([e,n]))}t.exports={updateSPMCnt:n,updateSPMUrl:o,updateKey:r,removeKey:a}},function(t,e,n){\"use strict\";function o(t,e){var n,o=2146271213;for(n=0;n2&&(g[1]=l,e.spm_cnt=g.join(\".\"))}}var f=function(t){if(\"object\"==typeof t)for(var e in t)\"object\"!=typeof t[e]&&\"function\"!=typeof t[e]&&c.push([e,t[e]])};f(goldlog.getMetaInfo(\"aplus-cpvdata\")),f(r);var d=i.getCookie(\"workno\")||i.getCookie(\"emplId\");d&&c.push([\"workno\",d]);var _=i.getHng();_&&c.push([\"_hng\",i.getHng()]);var h=this.getPageInfo();return h&&(c.push([\"_pw\",h.width]),c.push([\"_ph\",h.height])),c},processLodashDollar:function(){var t=this.options.config||{},e=a.getGoldlogVal(\"_$\")||{};t&&t.referrer&&(e.page_referrer=t.referrer),a.setGoldlogVal(\"_$\",e)},updatePre:function(t){var e=a.getGoldlogVal(\"_$\")||{};return e.page_referrer&&r.updateKey(t,\"pre\",e.page_referrer),t},run:function(){var t=this.options.context.what_to_sendpv.pvdata,e=this.getUserdata();this.processLodashDollar();var n=t,o=this.options.context.what_to_pvhash.hash;o&&o.length>0&&n.push(o),n=n.concat(e),n=this.updatePre(n);var a=this.getPageId();a&&r.updateSPMCnt(n,a),this.options.context.what_to_sendpv.pvdata=n,this.options.context.userdata=e}}}},function(t,e,n){\"use strict\";function o(){if(!s.data.a||!s.data.b){var t=r._SPM_a,e=r._SPM_b;if(t&&e)return t=t.replace(/^{(\\w+\\/)}$/g,\"$1\"),e=e.replace(/^{(\\w+\\/)}$/g,\"$1\"),s.is_wh_in_page=!0,void c.setAB(t,e);var n=goldlog._$.meta_info;t=n[\"data-spm\"]||n[\"spm-id\"]||\"0\";var o=t.split(\".\");o.length>1&&(t=o[0],e=o[1]),c.setA(t),e&&c.setB(e);var a=i.getElementsByTagName(\"body\");a=a&&a.length?a[0]:null,a&&(e=l.tryToGetAttribute(a,\"data-spm\"),e?c.setB(e):1===o.length&&c.setAB(\"0\",\"0\"))}}function a(){var t=s.data.a,e=s.data.b;t&&e&&(goldlog.spm_ab=[t,e])}var r=window,i=document,s={},u={};s.data=u;var c={},l=n(27),p=n(52),g=location.href,f=n(53).getRefer(),d=n(4);c.setA=function(t){s.data.a=t,a()},c.setB=function(t){s.data.b=t,a()},c.setAB=function(t,e){s.data.a=t,s.data.b=e,a()};var _=p.getSPMFromUrl,h=function(){var t=d.utilPvid.makePVId();return d.mustSpmE?t||goldlog.pvid||\"\":t||\"\"},m=function(t,e){var n=t.goldlog||window.goldlog||{},a=n.meta_info||{};s.meta_protocol=a.spm_protocol;var r,i=n.spm_ab||[],u=i[0]||\"0\",c=i[1]||\"0\";\"0\"===u&&\"0\"===c&&(o(),u=s.data.a||\"0\",c=s.data.b||\"0\"),r=[s.data.a,s.data.b].join(\".\"),s.spm_cnt=(r||\"0.0\")+\".0.0\";var l=t.send_pv_count>0?h():n.pvid;l&&(s.spm_cnt+=\".\"+l),n._$.spm=s,\"function\"==typeof e&&e(l)};c.spaInit=function(t,e,n,o){var a=\"function\"==typeof o?o:function(){},r=s.spm_url,i=window.g_SPM||{},u=t._$||{},c=u.send_pv_count;m({goldlog:t,meta_info:e,send_pv_count:c},function(t){s.spm_cnt=s.data.a+\".\"+s.data.b+\".0.0\"+(t?\".\"+t:\"\");var o=e[\"aplus-spm-fixed\"];if(\"1\"!==o){s.spm_pre=_(f),s.origin_spm_pre=s.spm_pre,s.spm_url=_(location.href),s.origin_spm_url=s.spm_url;var u=i._current_spm||{};u&&u.a&&\"0\"!==u.a&&u.b&&\"0\"!==u.b?(s.spm_url=[u.a,u.b,u.c,u.d,u.e].join(\".\"),s.spm_pre=r):c>0&&n&&\"0\"!==n[0]&&\"0\"!==n[1]&&(s.spm_url=n.concat([\"0\",\"0\"]).join(\".\"),s.spm_pre=r),i._current_spm={}}a()})},c.init=function(t,e,n){s.spm_url=_(g),s.spm_pre=_(f),m({goldlog:t,meta_info:e},function(){\"function\"==typeof n&&n()})},c.resetSpmCntPvid=function(){var t=goldlog.spm_ab;if(t&&2===t.length){var e=t.join(\".\")+\".0.0\",n=h();n&&(e=e+\".\"+n),s.spm_cnt=e,s.spm_url=e,goldlog._$.spm=s}},t.exports=c},function(t,e){\"use strict\";function n(t,e){if(!t||!e)return\"\";var n,o=\"\";try{var a=new RegExp(\"[?|&]+\"+t+\"=([^&|#|?|/]+)\");if(\"spm\"===t||\"scm\"===t){var r=new RegExp(\"\\\\?.*\"+t+\"=([\\\\w\\\\.\\\\-\\\\*/]+)\"),i=e.match(a),s=e.match(r),u=i&&2===i.length?i[1]:\"\",c=s&&2===s.length?s[1]:\"\";o=u>c?u:c,o=decodeURIComponent(o)}else n=e.match(a),o=n&&2===n.length?n[1]:\"\"}catch(t){}finally{return o}}e.getParamFromUrl=n,e.getSPMFromUrl=function(t){return n(\"spm\",t)}},function(t,e,n){\"use strict\";var o=n(54).nameStorage,a=n(5);e.getRefer=function(){var t=a.KEY||{},e=t.NAME_STORAGE||{};return document.referrer||o.getItem(e.REFERRER)||\"\"}},function(t,e){\"use strict\";var n=function(){function t(){var t,e=[],r=!0;for(var l in p)p.hasOwnProperty(l)&&(r=!1,t=p[l]||\"\",e.push(c(l)+s+c(t)));n.name=r?o:a+c(o)+i+e.join(u)}function e(t,e,n){t&&(t.addEventListener?t.addEventListener(e,n,!1):t.attachEvent&&t.attachEvent(\"on\"+e,function(e){n.call(t,e)}))}var n=window;if(n.nameStorage)return n.nameStorage;var o,a=\"nameStorage:\",r=/^([^=]+)(?:=(.*))?$/,i=\"?\",s=\"=\",u=\"&\",c=encodeURIComponent,l=decodeURIComponent,p={},g={};return function(t){if(t&&0===t.indexOf(a)){var e=t.split(/[:?]/);e.shift(),o=l(e.shift())||\"\";for(var n,i,s,c=e.join(\"\"),g=c.split(u),f=0,d=g.length;f0&&(this.options.context.what_to_sendpv.pvdata=t.concat(n))},run:function(){this.updateBasicParams(),this.addTagParams()}}}},function(t,e,n){\"use strict\";var o=n(44),a=n(40),r=n(42),i=/\\sA2U\\/x/.test(window.navigator.userAgent),s=function(t){t||(t=window.navigator.userAgent);var e=goldlog.getMetaInfo(\"aplus-toUT\")+\"\",n=a.isAplusChnl(),s=/AliApp\\((DM|DY|DingTalk|CN|LA)\\/(\\d+[._]\\d+[._]\\d+)/i,u=s.test(t),c=o.webviewIsAbove({version_ios_tb:[6,6,0],version_ios_tm:[5,28,0],version_android_tb:[6,6,2],version_android_tm:[5,32,0]},t);return c||(c=r.haveNativeFlagInUA()||i||\"2\"===e||\"toUT2HC\"===e||u),n&&\"AliBCBridge\"!==n.bridgeName&&(c=!!n.toUT2),c};e.isToUT2=s,e.isEnable=function(t,e){var n=s(e),o=!0;switch(t){case\"what_to_hjlj_ut2\":case\"do_sendhjlj_ut2\":case\"what_to_sendpv_ut2\":case\"do_sendpv_ut2\":o=!!n;break;case\"what_to_hjlj_ut\":case\"do_sendhjlj_ut\":case\"what_to_sendpv_ut\":case\"do_sendpv_ut\":o=!n}return o}},function(t,e,n){\"use strict\";function o(t){var e,n,o,a,r=[],s={};for(e=t.length-1;e>=0;e--)n=t[e],o=n[0],o&&o.indexOf(i.s_plain_obj)==-1&&s.hasOwnProperty(o)||(a=n[1],(\"aplus\"==o||a)&&(r.unshift([o,a]),s[o]=1));return r}function a(t){var e,n,o,a,r=[],u={logtype:!0,cache:!0,scr:!0,\"spm-cnt\":!0};for(e=t.length-1;e>=0;e--)if(n=t[e],o=n[0],a=n[1],!(s.isStartWith(o,i.s_plain_obj)&&!s.isStartWith(o,i.mkPlainKeyForExparams())||u[o]))if(s.isStartWith(o,i.mkPlainKeyForExparams())){var c=i.param2arr(a);if(\"object\"==typeof c&&c.length>0)for(var l=c.length-1;l>=0;l--){var p=c[l];p&&p[1]&&r.unshift([p[0],p[1]])}}else r.unshift([o,a]);return r}function r(){var t={isonepage:\"-1\",urlpagename:\"\"},e=g.qGet();if(e&&e.hasOwnProperty(\"isonepage_data\"))t.isonepage=e.isonepage_data.isonepage,t.urlpagename=e.isonepage_data.urlpagename;else{var n=c.getMetaCnt(\"isonepage\")||\"-1\",o=n.split(\"|\");t.isonepage=o[0],t.urlpagename=o[1]?o[1]:\"\"}return t}var i=n(18),s=n(9),u=n(25),c=n(28),l=n(52),p=n(42),g=n(26),f=n(4),d=n(11);t.exports=function(){return{init:function(t){this.options=t},keyIsAvailable:function(t){var e=[\"functype\",\"funcId\",\"spm-cnt\",\"spm-url\",\"spm-pre\",\"_ish5\",\"_is_g2u\",\"_h5url\",\"cna\",\"isonepage\",\"lver\",\"jsver\"];return i.indexof(e,t)===-1},valIsAvailable:function(t){return\"object\"!=typeof t&&\"function\"!=typeof t},upUtData:function(t,e){var n=this;if(t=t?t:{},e&&\"object\"==typeof e)for(var o in e){var a=e[o];o&&n.valIsAvailable(a)&&n.keyIsAvailable(o)&&(t[o]=a)}return t},getToUtData:function(t){var e=u.getGoldlogVal(\"_$\")||{},n=e.spm||{},s=this.options.context||{},c=!!s.is_single,p=s.what_to_sendpv||{},g=a(o(p.exparams||[]));g=i.arr2obj(g);var _=i.arr2obj(p.pvdata),h=a(o(s.userdata||[]));h=i.arr2obj(h);var m=location.href,v={},b=l.getParamFromUrl(\"scm\",m)||\"\";b&&(v.scm=b);var y=l.getParamFromUrl(\"pg1stepk\",m)||\"\";y&&(v.pg1stepk=y);var w=l.getParamFromUrl(\"point\",m)||\"\";w&&(v.issb=1),_&&_.mansndlog&&(v.mansndlog=_.mansndlog),v=this.upUtData(v,g),v=this.upUtData(v,h);var x=r();v.functype=\"page\",v.funcId=\"2001\",v.url=goldlog.getMetaInfo(\"aplus-pagename\")||location.origin+location.pathname,v._ish5=\"1\",v._h5url=m,v._toUT=2,v._bridgeName=t.bridgeName||\"\",v._bridgeVersion=t.bridgeVersion||\"\",v[\"spm-cnt\"]=n.spm_cnt||\"\",v[\"spm-url\"]=n.spm_url||\"\",v[\"spm-pre\"]=n.spm_pre||\"\",v.cna=d.getCookie(\"cna\"),v.lver=goldlog.lver||f.lver,v.jsver=f.script_name,v.pver=goldlog.aplus_cplugin_ver,v.isonepage=x.isonepage;var T=goldlog.getMetaInfo(\"aplus-utparam\");return T&&(v[\"utparam-cnt\"]=JSON.stringify(T)),v._is_g2u_=c?1:2,v},run:function(){var t=this.options.context||{},e=t.what_to_sendpv_ut2||{},n=t.where_to_sendlog_ut||{},o=n.aplusToUT||{},a=o.toUT2||{};(a&&a.isAvailable&&\"function\"==typeof a.toUT2||p.haveNativeFlagInUA())&&(e.pvdataToUt=this.getToUtData(a),this.options.context.what_to_sendpv_ut2=e)}}}},function(t,e,n){\"use strict\";function o(t){var e,n,o,a,i=[],s={};for(e=t.length-1;e>=0;e--)n=t[e],o=n[0],o&&o.indexOf(r.s_plain_obj)==-1&&s.hasOwnProperty(o)||(a=n[1],(\"aplus\"==o||a)&&(i.unshift([o,a]),s[o]=1));return i}function a(t){var e,n,o,a,s=[],u={logtype:!0,cache:!0,scr:!0,\"spm-cnt\":!0};for(e=t.length-1;e>=0;e--)if(n=t[e],o=n[0],a=n[1],!(i.isStartWith(o,r.s_plain_obj)&&!i.isStartWith(o,r.mkPlainKeyForExparams())||u[o]))if(i.isStartWith(o,r.mkPlainKeyForExparams())){var c=r.param2arr(a);if(\"object\"==typeof c&&c.length>0)for(var l=c.length-1;l>=0;l--){var p=c[l];p&&p[1]&&s.unshift([p[0],p[1]])}}else s.unshift([o,a]);return s}var r=n(18),i=n(9),s=n(25),u=n(28),c=n(42),l=n(26),p=n(4),g=n(11);t.exports=function(){return{init:function(t){this.options=t},getToUtData:function(t,e){var n,i=s.getGoldlogVal(\"_$\")||{},c=i.spm||{},f=a(o(t)),d={};try{var _=r.arr2obj(f);_._toUT=1,_._bridgeName=e.bridgeName||\"\",_._bridgeVersion=e.bridgeVersion||\"\",n=JSON.stringify(_)}catch(t){n='{\"_toUT\":1}'}var h=u.getOnePageInfo(l);d.functype=\"2001\",d.urlpagename=h.urlpagename,d.url=location.href,d.spmcnt=c.spm_cnt||\"\",d.spmurl=c.spm_url||\"\",d.spmpre=c.spm_pre||\"\",d.lzsid=\"\",d.cna=g.getCookie(\"cna\"),d.extendargs=n,d.isonepage=h.isonepage;var m=this.options.context||{},v=!!m.is_single;return d._is_g2u_=v?1:2,d.version=p.toUtVersion,d.lver=goldlog.lver||p.lver,d.jsver=p.script_name,d},run:function(){var t=this.options.context||{},e=t.what_to_sendpv||{},n=e.pvdata||[],o=t.what_to_sendpv_ut||{},a=t.where_to_sendlog_ut||{},r=a.aplusToUT||{},i=r.toUT||{};(i&&i.isAvailable&&\"function\"==typeof i.toUT2||c.haveNativeFlagInUA())&&(o.pvdataToUt=this.getToUtData(n,i),this.options.context.what_to_sendpv_ut=o)}}}},function(t,e){\"use strict\";t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this.options.context||{},e=t.is_single?\"1\":\"0\";if(t.what_to_sendpv_ut2.pvdataToUt._slog=e,t.what_to_sendpv_ut.pvdataToUt._slog=e,t.what_to_sendpv.pvdata.push([\"_slog\",e]),t.ut_is_available){var n=t.is_single?\"1\":\"2\";t.what_to_sendpv.pvdata.push([\"_is_g2u\",n])}}}}},function(t,e,n){\"use strict\";var o=n(25);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=o.getGoldlogVal(\"_$\")||{},e=this.options.context.can_to_sendpv||{},n=t.send_pv_count||0,a=this.options.config||{};return a.is_auto&&n>0?\"done\":(e.flag=\"YES\",this.options.context.can_to_sendpv=e,t.send_pv_count=++n,void o.setGoldlogVal(\"_$\",t))}}}},function(t,e,n){\"use strict\";var o=n(25),a=n(18);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this.options.context||{},e=!!t.is_single;if(!e){var n=t.what_to_sendpv||{},r=t.where_to_sendpv||{},i=n.pvdata||[],s=goldlog.getMetaInfo(\"aplus-channel\");if(\"WS-ONLY\"!==s){var u=location.hostname+location.pathname,c=\"www.taobao.com/\"===u||\"www.aliyun.com/\"===u,l=goldlog.send(r.url,c?a.arr2param(i):a.arr2obj(i),c?\"POST\":\"\");o.setGoldlogVal(\"req\",l)}}}}}},function(t,e,n){\"use strict\";var o=n(42);t.exports=function(){return{init:function(t){this.options=t},run:function(t,e){var n=this,a=this.options.context||{},r=a.what_to_sendpv_ut2||{},i=a.where_to_sendlog_ut||{},s=r.pvdataToUt||{},u=i.aplusToUT||{},c=u.toUT2;if(o.isNative4Aplus())return u.toutflag=\"toUT2\",i.toUTName=\"toUT2\",void(n.options.context.what_to_sendpv_ut2.isSuccess=!0);if(c&&\"function\"==typeof c.toUT2&&c.isAvailable)try{u.toutflag=\"toUT2\",c.toUT2(s,function(){n.options.context.what_to_sendpv_ut2.isSuccess=!0,e(\"done\")},function(t){n.options.context.what_to_sendpv_ut2.errorMsg=t,e()},2e3)}catch(t){e()}finally{return\"pause\"}}}}},function(t,e,n){\"use strict\";var o=n(42);t.exports=function(){return{init:function(t){this.options=t},run:function(t,e){var n=this,a=this.options.context||{},r=a.what_to_sendpv_ut||{},i=a.where_to_sendlog_ut||{},s=r.pvdataToUt||{},u=i.aplusToUT||{},c=u.toUT;if(o.isNative4Aplus())return u.toutflag=\"toUT\",i.toUTName=\"toUT\",void(n.options.context.what_to_sendpv_ut.isSuccess=!0);if(c&&\"function\"==typeof c.toUT2&&c.isAvailable)try{u.toutflag=\"toUT\",c.toUT2(s,function(){n.options.context.what_to_sendpv_ut.isSuccess=!0,e()},function(t){n.options.context.what_to_sendpv_ut.errorMsg=t,e()},2e3)}catch(t){e()}finally{return\"pause\"}}}}},function(t,e,n){\"use strict\";var o=n(32),a=n(25);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=goldlog._$||{},e=this.options.context||{};a.setGoldlogVal(\"pv_context\",e);var n=goldlog.spm_ab||[],r=n.join(\".\"),i=t.send_pv_count,s={cna:e.etag.cna,count:i,spmab_pre:goldlog.spmab_pre};o.doPubMsg([\"sendPV\",\"complete\",r,s]),o.doCachePubs([\"sendPV\",\"complete\",r,s])}}}},function(t,e){\"use strict\";e.plugins_prepv=[]},function(t,e,n){\"use strict\";function o(){var t=i.getGoldlogVal(\"_$\")||{},e=\"//gm.mmstat.com/\";return t.is_terminal&&(e=\"//wgo.mmstat.com/\"),{where_to_hjlj:{url:e,ac_atpanel:\"//ac.mmstat.com/\",tblogUrl:\"//log.mmstat.com/\"}}}function a(){return r.assign(new s,new o)}var r=n(9),i=n(25),s=n(67);t.exports=a},function(t,e,n){\"use strict\";function o(){return{compose:{},basic_params:{cna:a.getCookie(\"cna\")},where_to_hjlj:{url:\"//gm.mmstat.com/\",ac_atpanel:\"//ac.mmstat.com/\",tblogUrl:\"//log.mmstat.com/\"},userdata:{},what_to_hjlj:{logdata:{}},what_to_pvhash:{hash:[]},what_to_hjlj_exinfo:{EXPARAMS_FLAG:\"EXPARAMS\",exinfo:[],exparams_key_names:[\"uidaplus\",\"pc_i\",\"pu_i\"]},what_to_hjlj_ut:{logdataToUT:{}},what_to_hjlj_ut2:{isSuccess:!1,logdataToUT:{}},where_to_sendlog_ut:{aplusToUT:{},toUTName:\"toUT\"},network:{connType:\"UNKNOWN\"},is_single:!1}}var a=n(11);t.exports=o},function(t,e,n){\"use strict\";e.plugins_hjlj=[{name:\"etag\",enable:!0,path:n(37)},{name:\"where_to_sendlog_ut\",enable:!0,path:n(39)},{name:\"is_single\",enable:!0,path:n(41)},{name:\"what_to_hjlj_exinfo\",enable:!0,path:n(69)},{name:\"what_to_pvhash\",enable:!0,path:n(45)},{name:\"what_to_hjlj\",enable:!0,path:n(70),deps:[\"what_to_hjlj_exinfo\",\"what_to_pvhash\"]},{name:\"what_to_hjlj_ut2\",enable:n(56),path:n(71),deps:[\"is_single\",\"what_to_hjlj_exinfo\"]},{name:\"what_to_hjlj_ut\",enable:n(56),path:n(72),deps:[\"is_single\",\"what_to_hjlj_exinfo\"]},{name:\"what_to_hjlj_slog\",enable:!0,path:n(73),deps:[\"what_to_hjlj\"]},{name:\"where_to_hjlj\",enable:!0,path:n(74),deps:[\"is_single\",\"what_to_hjlj\"]},{name:\"do_sendhjlj\",enable:!0,path:n(75),deps:[\"is_single\",\"what_to_hjlj\",\"where_to_hjlj\"]},{name:\"do_sendhjlj_ut2\",enable:n(56),path:n(76),deps:[\"what_to_hjlj\",\"what_to_hjlj_ut2\",\"where_to_sendlog_ut\"]},{name:\"do_sendhjlj_ut\",path:n(77),deps:[\"what_to_hjlj\",\"what_to_hjlj_ut\",\"where_to_sendlog_ut\"]}]},function(t,e,n){\"use strict\";var o=n(18),a=n(30),r=n(25),i=n(25),s=n(12),u=n(11);t.exports=function(){return{init:function(t){this.options=t},getCookieUserInfo:function(){var t=[],e=u.getCookie(\"workno\")||u.getCookie(\"emplId\");e&&t.push(\"workno=\"+e);var n=u.getHng();return n&&t.push(\"_hng=\"+u.getHng()),t},filterExinfo:function(t){var e=\"\";try{t&&(\"string\"==typeof t?e=t.replace(/&/g,\"&\").replace(/\\buser(i|I)d=/,\"uidaplus=\").replace(/&aplus&/,\"&\"):\"object\"==typeof t&&(e=o.obj2param(t,!0)))}catch(t){e=t.message?t.message:\"\"}return e},getExparamsFlag:function(){var t=this.options.context||{},e=t.what_to_hjlj_exinfo||{};return e.EXPARAMS_FLAG||\"EXPARAMS\"},getCustomExParams:function(t){var e=\"\";return t!==this.getExparamsFlag()&&(e=this.filterExinfo(t)||\"\"),e?e.split(\"&\"):[]},getBeaconExparams:function(t,e){var n=[],r=a.getExParams(o)||\"\";r=r.replace(/&aplus&/,\"&\");for(var i=o.param2arr(r)||[],u=function(e){return s.indexof(t,e)>-1},c=0;c0&&(t=t.concat(e)),t},run:function(){try{var t=this.options.context.what_to_hjlj_exinfo||{},e=r.getGoldlogVal(\"_$\")||{},n=e.meta_info||{},o=n[\"aplus-exinfo\"]||\"\",a=n[\"aplus-exdata\"]||\"\",s=[];s=this.doConcatArr(s,t.exinfo||[]),s=this.doConcatArr(s,this.getExinfo(o)),s=this.doConcatArr(s,this.getCookieUserInfo()),s=this.doConcatArr(s,this.getCustomExParams(o)),s=this.doConcatArr(s,this.getExData(a)),t.exinfo=s.join(\"&\"),this.options.context.what_to_hjlj_exinfo=t}catch(t){i.logger({msg:t?t.message:\"\"})}}}}},function(t,e,n){\"use strict\";var o=n(30),a=n(18),r=n(11),i=n(9),s=n(4);t.exports=function(){return{init:function(t){this.options=t},getParams:function(){var t=this.options.context||{},e=t.userdata||{},n=t.basic_params||{},u=t.what_to_hjlj_exinfo||{},c=u.exinfo||\"\",l=t.etag||{},p=l.cna||n.cna||r.getCookie(\"cna\"),g=e.gmkey,f=\"\";e.gokey&&c?f=[e.gokey,c].join(\"&\"):e.gokey?f=e.gokey:c&&(f=c);var d=t.what_to_pvhash||{},_=d.hash||[];_.length&&(f+=\"&\"+_.join(\"=\")),f+=\"&jsver=\"+s.script_name,f+=\"&lver=\"+s.lver,f+=\"&pver=\"+goldlog.aplus_cplugin_ver,f+=\"&cache=\"+i.makeCacheNum(),f+=\"&page_cna=\"+p;var h={gmkey:g||\"\",gokey:f,cna:p};try{var m=location.href.substring(0,1200);m&&(h._p_url=goldlog.getMetaInfo(\"aplus-p-url\")||m)}catch(t){}e[\"spm-cnt\"]&&(h[\"spm-cnt\"]=e[\"spm-cnt\"]),e[\"spm-pre\"]&&(h[\"spm-pre\"]=e[\"spm-pre\"]);try{var v=o.getExParams(a),b=a.param2obj(v).uidaplus;b&&(h._gr_uid_=b);var y=a.param2obj(f).uidaplus;y&&(h.uidaplus=y)}catch(t){}return h},run:function(){this.options.context.what_to_hjlj.logdata=this.getParams()}}}},function(t,e,n){\"use strict\";var o=n(43),a=n(25),r=n(4);t.exports=function(){return{init:function(t){this.options=t},getToUtData:function(t,e){var n=a.getGoldlogVal(\"_$\")||{},i=n.spm||{},s=this.options.context.userdata||{},u=this.options.context.basic_params||{},c=this.options.context||{},l=c.what_to_hjlj_exinfo||{},p=l.exinfo||\"\",g=\"\";s.gokey&&p?g=[s.gokey,p].join(\"&\"):s.gokey?g=s.gokey:p&&(g=p);var f={};f.functype=\"ctrl\",f.funcId=o.getFunctypeValue2({logkey:s.logkey,gmkey:s.gmkey,spm_ab:a.getGoldlogVal(\"spm_ab\")}),f.url=goldlog.getMetaInfo(\"aplus-pagename\")||location.origin+location.pathname,f.logkey=s.logkey,f.gokey=encodeURIComponent(g),f.gmkey=s.gmkey,f._ish5=\"1\",f._h5url=location.href,f._is_g2u_=t?1:2,f._toUT=2,f._bridgeName=e.bridgeName||\"\",f._bridgeVersion=e.bridgeVersion||\"\",f[\"spm-cnt\"]=i.spm_cnt||\"\",f[\"spm-url\"]=i.spm_url||\"\",f[\"spm-pre\"]=i.spm_pre||\"\",f.cna=u.cna,f.lver=r.lver,f.jsver=r.script_name,s.hasOwnProperty(\"autosend\")&&(f.autosend=s.autosend);var d=goldlog.getMetaInfo(\"aplus-utparam\");return d&&(f[\"utparam-cnt\"]=JSON.stringify(d)),f},run:function(){var t=this.options.context||{},e=t.what_to_hjlj_ut2||{},n=!!t.is_single,o=t.where_to_sendlog_ut||{},a=o.aplusToUT||{},r=a.toUT2||{};e.logdataToUT=this.getToUtData(n,r),this.options.context.what_to_hjlj_ut2=e}}}},function(t,e,n){\"use strict\";var o=n(43),a=n(11),r=n(25),i=n(4);t.exports=function(){return{init:function(t){this.options=t},getToUtData:function(t,e){var n=r.getGoldlogVal(\"_$\")||{},s=n.spm||{},u=this.options.context||{},c=u.userdata||{},l=u.what_to_hjlj_exinfo||{},p=l.exinfo||\"\",g=\"\";c.gokey&&p?g=[c.gokey,p].join(\"&\"):c.gokey?g=c.gokey:p&&(g=p);var f={gmkey:c.gmkey,gokey:g,lver:i.lver,jsver:i.script_name,version:i.toUtVersion,spm_cnt:s.spm_cnt||\"\",spm_url:s.spm_url||\"\",spm_pre:s.spm_pre||\"\"};f._is_g2u_=t?1:2,f._bridgeName=e.bridgeName||\"\",f.bridgeVersion=e.bridgeVersion||\"\",f._toUT=1;try{f=JSON.stringify(f),\"{}\"==f&&(f=\"\")}catch(t){f=\"\"}var d=n.meta_info||{},_=d.isonepage_data||{},h={};return h.functype=o.getFunctypeValue({logkey:c.logkey,gmkey:c.gmkey,spm_ab:r.getGoldlogVal(\"spm_ab\")}),h.spmcnt=s.spm_cnt||\"\",h.spmurl=s.spm_url||\"\",h.spmpre=s.spm_pre||\"\",h.logkey=c.logkey,h.logkeyargs=f,h.urlpagename=_.urlpagename,h.url=location.href,h.cna=a.getCookie(\"cna\")||\"\",h.extendargs=\"\",h.isonepage=_.isonepage,h},run:function(){var t=this.options.context||{},e=!!t.is_single,n=t.what_to_hjlj_ut||{},o=t.where_to_sendlog_ut||{},a=o.aplusToUT||{},r=a.toUT||{};n.logdataToUT=this.getToUtData(e,r),this.options.context.what_to_hjlj_ut=n}}}},function(t,e){\"use strict\";t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this.options.context||{},e=t.is_single?\"1\":\"0\";t.what_to_hjlj_ut2.logdataToUT._slog=e,t.what_to_hjlj_ut.logdataToUT._slog=e;var n=[\"_slog=\"+e];if(t.ut_is_available){var o=t.is_single?\"1\":\"2\";n.push(\"_is_g2u=\"+o)}t.what_to_hjlj.logdata.gokey?t.what_to_hjlj.logdata.gokey+=\"&\"+n.join(\"&\"):t.what_to_hjlj.logdata.gokey=n.join(\"&\")}}}},function(t,e,n){\"use strict\";var o=n(18),a=n(9),r=n(25),i=n(24),s=n(26);t.exports=function(){return{init:function(t){this.options=t},getMetaInfo:function(){var t=r.getGoldlogVal(\"_$\")||{},e=t.meta_info||s.getInfo();return e},getAplusMetaByKey:function(t){var e=this.getMetaInfo()||{};return e[t]},cramUrl:function(t){var e=r.getGoldlogVal(\"_$\")||{},n=e.spm||{},o=this.options.context.where_to_hjlj||{},i=o.ac_atpanel,s=o.tblogUrl,u=this.options.context.what_to_hjlj||{},c=this.options.context.userdata||{},l=!0,p=c.logkey;if(!p)return{url:t,logkey_available:!1};if(\"ac\"==p)t=i+\"1.gif\";else if(a.isStartWith(p,\"ac-\"))t=i+p.substr(3);else if(a.isStartWith(p,\"/\")){t+=p.substr(1);var g=u.logdata||{};g[\"spm-cnt\"]=n.spm_cnt,g.logtype=2;try{u.logdata=g,this.options.context.what_to_hjlj=u}catch(t){}}else a.isEndWith(p,\".gif\")?t=s+p:l=!1;return{url:t,logkey_available:l}},can_to_sendhjlj:function(t){var e=this.options.context||{},n=e.logger||function(){},o=this.options.context.userdata||{};return!!t.logkey_available||(n({msg:\"logkey: \"+o.logkey+\" is not legal!\"}),!1)},run:function(){var t=!!this.options.context.is_single;if(!t){var e,n,a=o.filterIntUrl(this.options.context.where_to_hjlj.url),r=this.getAplusMetaByKey(\"aplus-rhost-g\"),s=r&&o.hostValidity(r);s&&(e=/^\\/\\//.test(r)?\"\":\"//\",n=/\\/$/.test(r)?\"\":\"/\",a=e+r+n),r&&!s&&i.logger({msg:\"aplus-rhost-g: \"+r+' is invalid, suggestion: \"xxx.mmstat.com\"'});var u=this.cramUrl(a);return this.can_to_sendhjlj(u)?void(this.options.context.where_to_hjlj.url=u.url):\"done\"}}}}},function(t,e,n){\"use strict\";var o=n(25);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this.options.context||{},e=this.options.config||{},n=!!t.is_single;if(!n){var a=t.logger||{},r=t.what_to_hjlj||{},i=t.where_to_hjlj||{},s=r.logdata||{},u=i.url||\"\";u||\"function\"!=typeof a||a({msg:\"warning: where_to_hjlj.url is null, goldlog.record failed!\"});var c=goldlog.getMetaInfo(\"aplus-channel\");if(\"WS-ONLY\"!==c){var l=goldlog.send(i.url,s,e.method||\"GET\");o.setGoldlogVal(\"req\",l)}}}}}},function(t,e,n){\"use strict\";var o=n(42);t.exports=function(){return{init:function(t){this.options=t},run:function(t,e){var n=this,a=this.options.context||{},r=a.logger||function(){},i=a.what_to_hjlj_ut2||{},s=a.where_to_sendlog_ut||{},u=!!a.is_single,c=i.logdataToUT||{},l=s.aplusToUT||{},p=l.toUT2;if(o.isNative4Aplus())return l.toutflag=\"toUT2\",s.toUTName=\"toUT2\",void(n.options.context.what_to_hjlj_ut2.isSuccess=!0);if(p&&\"function\"==typeof p.toUT2&&p.isAvailable)try{l.toutflag=\"toUT2\",p.toUT2(c,function(){n.options.context.what_to_hjlj_ut2.isSuccess=!0,e()},function(t){n.options.context.what_to_hjlj_ut2.errorMsg=t,e()},2e3)}catch(t){u&&r({msg:\"warning: singleSendHjlj toUTName = toUT2 errorMsg:\"+t.message})}finally{return\"pause\"}}}}},function(t,e,n){\"use strict\";var o=n(42);t.exports=function(){return{init:function(t){this.options=t},run:function(t,e){var n=this,a=this.options.context||{},r=a.what_to_hjlj_ut2.isSuccess,i=a.logger||function(){},s=!!a.is_single,u=a.where_to_sendlog_ut||{},c=a.what_to_hjlj_ut||{},l=c.logdataToUT||{},p=u.aplusToUT||{},g=p.toUT;if(o.isNative4Aplus())return p.toutflag=\"toUT\",u.toUTName=\"toUT\",void(n.options.context.what_to_hjlj_ut.isSuccess=!0);if(!r&&g&&\"function\"==typeof g.toUT2&&g.isAvailable)try{p.toutflag=\"toUT\",g.toUT2(l,function(){n.options.context.what_to_hjlj_ut.isSuccess=!0,e()},function(t){n.options.context.what_to_hjlj_ut.errorMsg=t,e()},3e3)}catch(t){s&&i({msg:\"warning: singleSend toUTName = \"+u.toUTName+\" errorMsg:\"+t.message})}finally{return\"pause\"}}}}},function(t,e,n){\"use strict\";function o(){var t,e,n=i.KEY||{},o=n.NAME_STORAGE||{};if(!c&&u){var a=location.href,l=u&&(a.indexOf(\"login.taobao.com\")>=0||a.indexOf(\"login.tmall.com\")>=0),p=s.getRefer();l&&p?(t=p,e=r.getItem(o.REFERRER_PV_ID)):(t=a,e=goldlog.pvid),r.setItem(o.REFERRER,t),r.setItem(o.REFERRER_PV_ID,e)}}var a=n(79),r=n(54).nameStorage,i=n(4),s=n(53),u=\"https:\"==location.protocol,c=parent!==self;e.run=function(){var t=\"beforeunload\";a.on(window,t,function(){o()})}},function(t,e,n){\"use strict\";function o(t,e,n){var o=goldlog._$||{},a=o.meta_info||{},r=a.aplus_ctap||{},i=a[\"aplus-touch\"];if(r&&\"function\"==typeof r.on)r.on(t,e);else{var u=\"ontouchend\"in document.createElement(\"div\");!u||\"tap\"!==i&&\"tapSpm\"!==n?s(t,u?\"touchstart\":\"mousedown\",e):c.on(t,e)}}function a(t){try{p.documentElement.doScroll(\"left\")}catch(e){return void setTimeout(function(){a(t)},1)}t()}function r(t){var e=0,n=function(){0===e&&t(),e++};\"complete\"===p.readyState&&n();var o;if(p.addEventListener)o=function(){p.removeEventListener(\"DOMContentLoaded\",o,!1),n()},p.addEventListener(\"DOMContentLoaded\",o,!1),window.addEventListener(\"load\",n,!1);else if(p.attachEvent){o=function(){\"complete\"===p.readyState&&(p.detachEvent(\"onreadystatechange\",o),n())},p.attachEvent(\"onreadystatechange\",o),window.attachEvent(\"onload\",n);var r=!1;try{r=null===window.frameElement}catch(t){}p.documentElement.doScroll&&r&&a(n)}}function i(t){\"complete\"===p.readyState?t():s(l,\"load\",t)}function s(){var t=arguments;if(2===t.length)\"DOMReady\"===t[0]&&r(t[1]),\"onload\"===t[0]&&i(t[1]);else if(3===t.length){var e=t[0],n=t[1],a=t[2];\"tap\"===n||\"tapSpm\"===n?o(e,a,n):e[_]((g?\"on\":\"\")+n,function(t){t=t||l.event;var e=t.target||t.srcElement;\"function\"==typeof a&&a(t,e);\n},!!u(n)&&{passive:!0})}}var u=n(80),c=n(81),l=window,p=document,g=!!p.attachEvent,f=\"attachEvent\",d=\"addEventListener\",_=g?f:d;e.DOMReady=r,e.onload=i,e.on=s},function(t,e){var n;t.exports=function(t){if(\"boolean\"==typeof n)return n;if(!/touch|mouse|scroll|wheel/i.test(t))return!1;n=!1;try{var e=Object.defineProperty({},\"passive\",{get:function(){n=!0}});window.addEventListener(\"test\",null,e)}catch(t){}return n}},function(t,e){\"use strict\";function n(t,e){return t+Math.floor(Math.random()*(e-t+1))}function o(t,e,n){var o=l.createEvent(\"HTMLEvents\");if(o.initEvent(e,!0,!0),\"object\"==typeof n)for(var a in n)o[a]=n[a];t.dispatchEvent(o)}function a(t){0===Object.keys(g).length&&(p.addEventListener(_,r,!1),p.addEventListener(d,i,!1),p.addEventListener(m,i,!1));for(var e=0;e10&&(o.status=\"panning\")}}function i(t){for(var e=0;e0&&setTimeout(function(){for(;n=a.shift();)p(n)},100)}}try{e()}catch(t){u.do_tracker_jserror({message:t&&t.message,error:encodeURIComponent(t.stack),filename:\"processGoldlogQueue\"})}};e.processGoldlogQueue=g;var f=i.extend({push:function(t){this.length++,p(t)}});e.init_watchGoldlogQueue=function(t){try{var e=a[c]||[];if(t){var n=o(e,t);a[c]=n.queue,g(n.formatQueue)}else a[c]=f.create({startLength:e.length,length:0}),s.init_loadAplusPlugin(),g(e)}catch(t){u.do_tracker_jserror({message:t&&t.message,error:encodeURIComponent(t.stack),filename:\"init_watchGoldlogQueue\"})}}},function(t,e){\"use strict\";function n(){}n.prototype.extend=function(){},n.prototype.create=function(){},n.extend=function(t){return this.prototype.extend.call(this,t)},n.prototype.create=function(t){var e=new this;for(var n in t)e[n]=t[n];return e},n.prototype.extend=function(t){var e=function(){};try{\"function\"!=typeof Object.create&&(Object.create=function(t){function e(){}return e.prototype=t,new e}),e.prototype=Object.create(this.prototype);for(var n in t)e.prototype[n]=t[n];e.prototype.constructor=e,e.extend=e.prototype.extend,e.create=e.prototype.create}catch(t){console.log(t)}finally{return e}},t.exports=n},function(t,e,n){\"use strict\";var o=n(30),a=n(28),r=n(6),i=function(){var t=goldlog.getCdnPath()+\"/alilog/s/\"+r.lver+\"/plugin/\";return{aplus_ae_path:t+\"aplus_ae.js\",aplus_ac_path:t+\"aplus_ac.js\"}},s={},u=\"aplus-auto-exp\",c=\"aplus-auto-clk\",l=function(t,e){var n=i(),r=goldlog&&goldlog.getMetaInfo?goldlog.getMetaInfo(t):\"\",l=e||r||a.getMetaCnt(t),p={};p[u]=n.aplus_ae_path,p[c]=n.aplus_ac_path,l&&p[t]&&!s[t]&&(o.addScript(p[t]),s[t]=!0)};e.init_loadAplusPlugin=function(){try{!goldlog._aplus_auto_exp&&l(u),!goldlog._aplus_ac&&l(c),goldlog.aplus_pubsub.subscribe(\"setMetaInfo\",function(t,e){t!==u||goldlog._aplus_auto_exp||l(t,e),t!==c||goldlog._aplus_ac||l(t,e)})}catch(t){}}},function(t,e){\"use strict\";function n(t,e){return t.indexOf(e)>-1}function o(t,e){for(var o=0,a=t.length;o=1e3&&n<=1e4&&(t=n)}}catch(t){}return t}var u=window,c=document,l=n(84),p=n(18),g=n(79),f=n(30),d=n(24),_=n(32),h=n(9),m=n(25),v=n(22),b=n(51),y=n(26),w=y.getInfo(),x=n(4),T=n(3),j=n(88),A=n(11),P=n(91),S=n(93),k=[],U=[],E=[],I=[],M=\"//g.alicdn.com\",C=\"//g-assets.daily.taobao.net\",N=\"//assets.alicdn.com/g\",V=\"//s.alicdn.com/@g/\",O=\"//u.alicdn.com\",G=\"//laz-g-cdn.alicdn.com\";e.run=l.extend({getCdnPath:function(){var t=f.getCurrentNode(),e=M,n=[N,V,C,O,G],o=new RegExp(O);if(t)for(var a=0;a-1;return t||\"int\"===this.getMetaInfo(\"aplus-env\")},getCookie:function(t){return A.getCookie(t)},getParam:function(t){var e=u.WindVane||{},n=e&&\"function\"==typeof e.getParam?e.getParam(t):\"\";return n},beforeSendPV:function(t){k.push(t)},afterSendPV:function(t){U.push(t)},send:function(t,e,n){var o;if(0===t.indexOf(\"//\")){var a=v.getProtocal();t=a+t}return o=\"POST\"===n&&navigator&&navigator.sendBeacon?S.postData(t,e):S.sendImg(p.makeUrl(t,e),s())},launch:function(t,e){var n;try{e=h.assign(e,t),n=goldlog._$._sendPV(e,t);var o=goldlog.spm_ab?goldlog.spm_ab.join(\".\"):\"0.0\";T.do_tracker_obsolete_inter({page:location.hostname+location.pathname,spm_ab:o,interface_name:\"goldlog.launch\",interface_params:\"userdata = \"+JSON.stringify(t)+\", config = \"+JSON.stringify(e)})}catch(t){}finally{return d.logger({msg:\"warning: This interface is deprecated, please use goldlog.sendPV instead! API: http://log.alibaba-inc.com/log/info.htm?type=2277&id=31\"}),n}},_$:{_sendPV:function(t,e){if(t=t||{},h.any(k,function(e){return e(goldlog,t)===!1}))return!1;var o=n(94).SendPV,a=new o;return\"undefined\"==typeof t.recordType&&(t.recordType=x.recordTypes.pv),a.run(t,e,{fn_after_pv:U}),!0},_sendPseudo:function(t,e){t||(t={});var o=n(95).SendPrePV,a=new o;return\"undefined\"==typeof t.recordType&&(t.recordType=x.recordTypes.prepv),a.run(t,e,{},function(){_.doPubMsg([\"sendPrePV\",\"complete\"])}),!0}},sendPV:function(t,e){return e=e||{},e.pageName&&goldlog.setMetaInfo(\"aplus-pagename\",e.pageName),goldlog._$._sendPV(t,e)},updatePageProperties:function(t){t&&\"object\"==typeof t?(t._page&&(t.pageName=t._page,delete t._page),t.pageName&&(goldlog.setMetaInfo(\"aplus-pagename\",t.pageName),delete t.pageName),goldlog.appendMetaInfo(\"aplus-cpvdata\",t)):d.logger({msg:\"warning: typeof updatePageProperties's params must be object\"})},beforeRecord:function(t){E.push(t)},afterRecord:function(t){I.push(t)},record:function(t,e,n,o,a){if(!h.any(E,function(t){return t(goldlog)===!1}))return\"POST\"!==o&&\"WS\"!==o&&\"WS-ONLY\"!==o&&(o=\"GET\"),j.run({recordType:x.recordTypes.hjlj,method:o},{logkey:t,gmkey:e,gokey:n},{fn_after_record:I},function(){\"function\"==typeof a&&a()}),!0},recordUdata:function(t,e,n,o,a){var r=m.getGoldlogVal(\"_$\")||{},i=r.spm||{};\"POST\"!==o&&\"WS\"!==o&&\"WS-ONLY\"!==o&&(o=\"GET\"),j.run({ignore_chksum:!0,method:o,recordType:x.recordTypes.uhjlj},{logkey:t,gmkey:e,gokey:n,\"spm-cnt\":i.spm_cnt,\"spm-pre\":i.spm_pre},{},function(){h.isFunction(a)&&a()})},setPageSPM:function(t,e,n){var o=\"setPageSPM\",a=goldlog.getMetaInfo(\"aplus-spm-fixed\"),s=\"function\"==typeof n?n:function(){};goldlog.spm_ab=goldlog.spm_ab||[];var u=h.cloneObj(goldlog.spm_ab);if(t&&(goldlog.spm_ab[0]=\"\"+t,goldlog._$.spm.data.a=\"\"+t),e&&(goldlog.spm_ab[1]=\"\"+e,goldlog._$.spm.data.b=\"\"+e),b.spaInit(goldlog,w,u),\"1\"!==a){var c=u.join(\".\");goldlog.spmab_pre=c}var l=goldlog.spm_ab.join(\".\");_.doPubMsg([o,{spmab_pre:goldlog.spmab_pre,spmab:l}]),_.doCachePubs([o,{spmab_pre:goldlog.spmab_pre,spmab:l}]),r(),i(),s()},setMetaInfo:function(t,e,n){if(y.setMetaInfo(t,e,n)){var o=m.getGoldlogVal(\"_$\")||{};o.meta_info=y.qGet();var a=m.setGoldlogVal(\"_$\",o),r=P.isDisablePvid()+\"\";return\"aplus-disable-pvid\"===t&&r!==e+\"\"&&b.resetSpmCntPvid(),_.doPubMsg([\"setMetaInfo\",t,e,n]),_.doCachePubs([\"setMetaInfo\",t,e,n]),a}},appendMetaInfo:y.appendMetaInfo,getMetaInfo:function(t){return y.getMetaInfo(t)},on:g.on,cloneDeep:h.cloneDeep,getPvId:P.getPvId})},function(t,e,n){\"use strict\";var o=n(9),a=n(25),r=n(32),i=n(24),s=n(89),u=n(90),c=n(4);e.run=function(t,e,n,l){var p=new u;p.init({middleware:[],config:t,plugins:c.plugins_hjlj});var g=p.run(),f=new c.context_hjlj;f.userdata=e,f.logger=i.logger;var d={context:f,pubsub:a.getGoldlogVal(\"aplus_pubsub\"),pubsubType:\"hjlj\"},_=new s;_.create(d),_.wrap(g,function(){d.context.status=\"complete\",d.context.method=t.method,r.doPubMsg([\"mw_change_hjlj\",d.context]),n&&n.fn_after_record&&o.each(n.fn_after_record,function(t){t(window.goldlog)}),\"function\"==typeof l&&l()})()}},function(t,e,n){\"use strict\";function o(){}var a=n(12),r=n(23),i=n(24),s=n(3),u=n(11);o.prototype.create=function(t){for(var e in t)\"undefined\"==typeof this[e]&&(this[e]=t[e]);return this},o.prototype.pubsubInfo=function(t,e){try{t&&t.pubsub&&t.pubsub.publish(\"mw_change_\"+t.pubsubType,t.context,e)}catch(t){}},o.prototype.calledList=[],o.prototype.setCalledList=function(t){a.indexof(this.calledList,t)===-1&&this.calledList.push(t)},o.prototype.resetCalledList=function(){this.calledList=[]},o.prototype.wrap=function(t,e){var n=this,o=this.context||{},c=o.compose||{},l=c.maxTimeout||1e4;return function(o){var c,p=t.length,g=0,f=0,d=function(){if(n.pubsubInfo(n,t[g]),g===p)return o=\"done\",n.resetCalledList(),\"function\"==typeof e&&e.call(n,o),void clearTimeout(c);if(a.indexof(n.calledList,g)===-1){if(n.setCalledList(g),!t[g]||\"function\"!=typeof t[g][0])return;try{o=t[g][0].call(n,o,function(){g++,f=1,clearTimeout(c),d(g)})}catch(e){s.do_tracker_jserror({message:e?e.message:\"compose middleware error\",error:encodeURIComponent(e.stack),filename:t[g][1]})}}var _=\"number\"==typeof o;if(\"pause\"===o||_){f=0;var h=_?o:l,m=t[g]?t[g][1]:\"\";c=r.sleep(h,function(){if(0===f){var t=\"jump the middleware about \"+m+\", because waiting timeout maxTimeout = \"+h+\"ms!\";i.logger({msg:t});var e=window.goldlog_queue||(window.goldlog_queue=[]);e.push({action:\"goldlog._aplus_cplugin_m.do_tracker_browser_support\",arguments:[{msg:t,spmab:goldlog.spm_ab,page:location.href,etag:n.context?JSON.stringify(n.context.etag):\"\",cna:document.cookie?u.getCookie(\"cna\"):\"\"}]}),o=null,g++,d(g)}})}else\"done\"===o?(g=p,d(g)):(g++,d(g))};return n.calledList&&n.calledList.length>0&&n.resetCalledList(),d(g)}},t.exports=o},function(t,e,n){\"use strict\";var o=n(12);t.exports=function(){return{init:function(t){this.opts=t,t&&\"object\"==typeof t.middleware&&t.middleware.length>0?this.middleware=t.middleware:this.middleware=[],this.plugins_name=[]},pubsubInfo:function(t,e){try{var n=t.pubsub;n&&n.publish(\"plugins_change_\"+t.pubsubType,e)}catch(t){}},checkPluginLoader:function(t,e){var n=!0;if(\"object\"==typeof e.enable&&\"function\"==typeof e.enable.isEnable?n=e.enable.isEnable(e.name):\"boolean\"==typeof e.enable&&(n=!!e.enable),!n)return!1;if(n&&e.deps&&e.deps.length>0)for(var a=0;a0){var r=a[t];if(this.checkPluginLoader(a,r)&&(this.plugins_name.push(r.name),n.push([function(t,n){e.pubsubInfo(this,r);var a=new r.path;return a.init({context:this.context,config:o.config}),a.run(t,n)},r.name])),t++,a[t])return this.run(t)}else window.console&&console.log(\"aplus plugins \"+JSON.stringify(a)+\" must be object of array!\");return n}}}},function(t,e,n){\"use strict\";function o(){var t=\"true\"===l.disablePvid;try{var e=goldlog.getMetaInfo(\"aplus-disable-pvid\")+\"\";\"true\"===e?t=!0:\"false\"===e&&(t=!1)}catch(t){}return t}function a(t){function e(t){var e=\"0123456789abcdefhijklmnopqrstuvwxyzABCDEFHIJKLMNOPQRSTUVWXYZ\",n=\"0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ\";return 1==t?e.substr(Math.floor(60*Math.random()),1):2==t?n.substr(Math.floor(60*Math.random()),1):\"0\"}for(var n,o=\"\",a=\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\",r=!1;o.length=0;o--)a=t.charCodeAt(o),r^=(r<<5)+a+(r>>2);var i=(2147483647&r).toString(16);return i}},function(t,e,n){\"use strict\";function o(t){if(!t)return\"\";var e=decodeURIComponent(t).match(/cache=\\w+/);return e&&1===e.length?e[0].split(\"=\")[1]:void 0}var a=n(3),r=window;e.sendImg=function(t,e){var n=new Image,i=\"_img_\"+Math.random();r[i]=n;var s=function(){if(r[i])try{delete r[i]}catch(t){r[i]=void 0}};return n.onload=function(){s()},n.onerror=function(){a.do_tracker_jserror({message:\"loadError\",error:\"\",filename:\"sendImg\",logid:o(t)}),s()},setTimeout(function(){window[i]&&(a.do_tracker_jserror({message:\"loadTimeout\",error:e,filename:\"sendImg\",logid:o(t)}),window[i].src=\"\",s())},e||3e3),n.src=t,n=null,t},e.postData=function(t,e){var n;if(\"string\"==typeof e)n=e;else{for(var o in e)[\"cna\"].indexOf(o)===-1&&(e[o]=encodeURIComponent(e[o]));n=JSON.stringify(e)}return navigator.sendBeacon(t,n),t}},function(t,e,n){\"use strict\";var o=n(9),a=n(25),r=n(32),i=n(24),s=n(89),u=n(90),c=n(4),l=function(){};l.prototype.run=function(t,e,n){var l=new u;l.init({middleware:[],config:t,plugins:c.plugins_pv});var p=l.run(),g=new c.context;g.userdata=e,g.logger=i.logger;var f={context:g,pubsub:a.getGoldlogVal(\"aplus_pubsub\"),pubsubType:\"pv\"},d=new s;d.create(f),d.wrap(p,function(){var e=f.context.can_to_sendpv||{};f.context.status=\"YES\"===e.flag?\"complete\":\"skip\",f.context.method=t.method||\"GET\",r.doPubMsg([\"mw_change_pv\",f.context]),n&&n.fn_after_pv&&o.each(n.fn_after_pv,function(e){e(window.goldlog,t)})})()},e.SendPV=l},function(t,e,n){\"use strict\";var o=n(9),a=n(25),r=n(32),i=n(24),s=n(89),u=n(90),c=n(4),l=function(){};l.prototype.run=function(t,e,n,l){var p=new u;p.init({middleware:[],config:t,plugins:c.plugins_prepv});var g=p.run(),f=new c.context_prepv;f.userdata=e,f.logger=i.logger;var d={context:f,pubsub:a.getGoldlogVal(\"aplus_pubsub\"),pubsubType:\"prepv\"},_=new s;_.create(d),_.wrap(g,function(){d.context.status=\"complete\",r.doPubMsg([\"mw_change_prepv\",d.context]),n&&n.fn_after_record&&o.each(n.fn_after_pv,function(e){e(window.goldlog,t)}),a.setGoldlogVal(\"prepv_context\",f),\"function\"==typeof l&&l()})()},e.SendPrePV=l},function(t,e,n){\"use strict\";!function(){var t=window.goldlog||(window.goldlog={}),e=n(97);t.aplus_pubsub||(t.aplus_pubsub=e.create())}()},function(t,e,n){\"use strict\";function o(t){if(\"function\"!=typeof t)throw new TypeError(t+\" is not a function\");return t}var a=n(84),r=function(t){for(var e=t.length,n=new Array(e-1),o=1;o0){for(var a=0;a0)for(var a=0;a1?a.pop():\"\",i>0&&(n=r.pop(),t=r.join(\"?\")),n&&i>1&&n.indexOf(\"&\")==-1&&n.indexOf(\"%\")!==-1&&(c=\"%26\");var l=\"\";if(t=t+\"?spm=\"+l+e+(n?c+n:\"\")+(o?\"#\"+o:\"\"),u=h.isContain(s,\".\")?s.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(u))return 0;!n&&i<=1&&(o||{htm:1,html:1,php:1,aspx:1,shtml:1,xhtml:1}.hasOwnProperty(u)||(t+=\"&file=\"+s))}return t}}function s(t,e){if(!goldlog.isUT4Aplus||\"UT4Aplus\"!==goldlog.getMetaInfo(\"aplus-toUT\")){var n,o=t.innerHTML;o&&o.indexOf(\"<\")==-1&&(n=document.createElement(\"b\"),n.style.display=\"none\",t.appendChild(n)),t.href=e,n&&t.removeChild(n)}}function u(t,e,n){if(!/^0\\.0\\.?/.test(e)){var o=y.tryToGetHref(t),r=a(),u=w.is_ignore_spm(t);if(u){var c=_.param2obj(o);if(c.spm&&c.spm.split)for(var l=c.spm.split(\".\"),p=e.split(\".\"),g=0;g<3&&p[g]===l[g];g++)2===g&&l[3]&&(e=c.spm)}t.setAttribute(\"data-spm-anchor-id\",e);var f=goldlog.getPvId();f&&(e+=\".\"+f);var d=\"0.0\";(f||r&&r!=d)&&(u||n||(o=i(o,e))&&s(t,o))}}function c(t){var e=v.tryToGetAttribute(t,A),n=m.parseSemicolonContent(e)||{};return n}function l(t){var e,n=b.getGoldlogVal(\"_$\")||{},o=n.spm.data;return\"0\"==o.a&&\"0\"==o.b?e=\"0\":(e=v.tryToGetAttribute(t,j),e&&e.match(/^d\\w+$/)||(e=\"\")),e}function p(t,e){for(var n=[],o=m.nodeListToArray(t.getElementsByTagName(\"a\")),a=m.nodeListToArray(t.getElementsByTagName(\"area\")),r=o.concat(a),i=0;i0&&(d+=\"&\"),d+=v.length>0?v.join(\"&\"):\"\",goldlog&&s.isFunction(goldlog.recordUdata)?goldlog.recordUdata(m,f,d,\"GET\",function(){}):l.logger({msg:\"goldlog.recordUdata is not function!\"}),i.tryToSetAttribute(t,\"data-spm-anchor-id\",h)}function a(t,e){var n=e;window.g_SPM&&(g_SPM._current_spm=p.spm_getSPMParam(e));for(var a;e&&\"HTML\"!==e.tagName;){a=i.tryToGetAttribute(e,\"data-spm-click\");{if(a){o(e,a,\"mousedown\"===t.type?t.type:\"tap\");break}e=e.parentNode}}if(!a){var r=g.getGlobalSPMId(),s=goldlog.getMetaInfo(\"aplus-getspmcd\");\"function\"==typeof s&&s(n,t,r)}}var r=n(79),i=n(27),s=n(9),u=n(19),c=n(12),l=n(24),p=n(104),g=n(105);e.run=function(t){t&&t.isTouchEnabled?r.on(document,\"tap\",a):r.on(document,\"mousedown\",a)}},function(t,e,n){\"use strict\";function o(){for(var t=document.getElementsByTagName(\"iframe\"),e=0;e10&&(n=3e3),o(),setTimeout(t,n)}var e=0,n=500;t()}var r=n(27),i=n(105),s=n(104);e.run=function(t){t&&!t.isTerminal&&a()}},function(t,e,n){\"use strict\";function o(t,e){for(var n,o=window;e&&(n=e.tagName);){if(\"A\"===n||\"AREA\"===n){r.spm_spmAnchorChk(e,!1);var a=o.g_SPM||(o.g_SPM={}),i=a._current_spm=r.spm_getSPMParam(e),s=[];try{s=[i.a,i.b,i.c,i.d];var u=i.e||goldlog.pvid||\"\";u&&s.push(u)}catch(t){}break}if(\"BODY\"==n||\"HTML\"==n)break;e=e.parentNode}}var a=n(79),r=n(104);e.run=function(t){var e=document;t&&t.isTouchEnabled?a.on(e,\"tapSpm\",o):(a.on(e,\"mousedown\",o),a.on(e,\"keydown\",o))}},function(t,e,n){\"use strict\";function o(t,e){if(e||(e=p),p.evaluate)return e.evaluate(t,p,null,9,null).singleNodeValue;\nfor(var n,a=t.split(\"/\");!n&&a.length>0;)n=a.shift();var r,i=/^.+?\\[@id='(.+?)']$/i,s=/^(.+?)\\[(\\d+)]$/i;return(r=n.match(i))?e=e.getElementById(r[1]):(r=n.match(s))&&(e=e.getElementsByTagName(r[1])[parseInt(r[2])-1]),e?0===a.length?e:o(a.join(\"/\"),e):null}function a(){var t={};for(var e in l)if(l.hasOwnProperty(e)){var n=o(e);if(n){t[e]=1;var a=l[e],r=\"A\"===n.tagName?a.spmd:a.spmc;s.tryToSetAttribute(n,\"data-spm\",r||\"\")}}for(var i in t)t.hasOwnProperty(i)&&delete l[i]}function r(){if(!c&&g.spmData){c=!0;var t=g.spmData.data;if(t&&i.isArray(t)){for(var e=0;e1?a.pop():\"\",o>0&&(r=i.pop(),t=i.join(\"?\")),r&&o>1&&r.indexOf(\"&\")==-1&&r.indexOf(\"%\")!=-1&&(s=\"%26\"),t=t+\"?spm=\"+e+(r?s+r:\"\")+(n?\"#\"+n:\"\"),p=c.indexOf(\".\")>-1?c.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(p))return 0;!r&&o<=1&&(n||{htm:1,html:1,php:1}.hasOwnProperty(p)||(t+=\"&file=\"+c))}return t}function n(t){function e(t){return t=t.replace(/refpos[=(%3D)]\\w*/gi,c).replace(i,\"%3D\"+n+\"%26\"+a.replace(\"=\",\"%3D\")).replace(o,n),a.length>0&&(t+=\"&\"+a),t}var r=window.location.href,n=r.match(/mm_\\d{0,24}_\\d{0,24}_\\d{0,24}/i),a=r.match(/[&\\?](pvid=[^&]*)/i),i=new RegExp(\"%3Dmm_\\\\d+_\\\\d+_\\\\d+\",\"ig\"),o=new RegExp(\"mm_\\\\d+_\\\\d+_\\\\d+\",\"ig\");a=a&&a[1]?a[1]:\"\";var c=r.match(/(refpos=(\\d{0,24}_\\d{0,24}_\\d{0,24})?(,[a-z]+)?)(,[a-z]+)?/i);return c=c&&c[0]?c[0]:\"\",n?(n=n[0],e(t)):t}function a(e){var r=s.KISSY;r?r.ready(e):s.jQuery?jQuery(m).ready(e):\"complete\"===m.readyState?e():t(s,\"load\",e)}function i(t,e){return t&&t.getAttribute?t.getAttribute(e)||\"\":\"\"}function o(t){if(t){var e,r=g.length;for(e=0;e-1)return!0;return!1}}function c(t,e){if(t&&/&?\\bspm=[^&#]*/.test(t)&&(t=t.replace(/&?\\bspm=[^&#]*/g,\"\").replace(/&{2,}/g,\"&\").replace(/\\?&/,\"?\").replace(/\\?$/,\"\")),!e)return t;var r,n,a,i,o,c,p,s=\"&\";if(t.indexOf(\"#\")!=-1&&(a=t.split(\"#\"),t=a.shift(),n=a.join(\"#\")),i=t.split(\"?\"),o=i.length-1,a=i[0].split(\"//\"),a=a[a.length-1].split(\"/\"),c=a.length>1?a.pop():\"\",o>0&&(r=i.pop(),t=i.join(\"?\")),r&&o>1&&r.indexOf(\"&\")==-1&&r.indexOf(\"%\")!=-1&&(s=\"%26\"),t=t+\"?spm=\"+e+(r?s+r:\"\")+(n?\"#\"+n:\"\"),p=c.indexOf(\".\")>-1?c.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(p))return 0;!r&&o<=1&&(n||{htm:1,html:1,shtml:1,php:1}.hasOwnProperty(p)||(t+=\"&__file=\"+c))}return t}function p(t){if(o(t.href)){var r=i(t,u);if(!r){var n=l()(t),a=[n.a,n.b,n.c,n.d].join(\".\");n.e&&(n+=\".\"+n.e),d&&(a=[n.a||\"0\",n.b||\"0\",n.c||\"0\",n.d||\"0\"].join(\".\"),a=(e()||\"0.0.0.0.0\")+\"_\"+a),t.href=c(t.href,a),t.setAttribute(u,a)}}}var s=window,m=document;if(1!==s.aplus_spmact){s.aplus_spmact=1;var f=function(){return{a:0,b:0,c:0,d:0,e:0}},l=function(){return s.g_SPM&&s.g_SPM.getParam?s.g_SPM.getParam:f},d=!0;try{d=self.location!=top.location}catch(t){}var u=\"data-spm-act-id\",g=[\"mclick.simba.taobao.com\",\"click.simba.taobao.com\",\"click.tanx.com\",\"click.mz.simba.taobao.com\",\"click.tz.simba.taobao.com\",\"redirect.simba.taobao.com\",\"rdstat.tanx.com\",\"stat.simba.taobao.com\",\"s.click.taobao.com\"],h=!!m.attachEvent,b=\"attachEvent\",v=\"addEventListener\",_=h?b:v;t(m,\"mousedown\",function(t,e){for(var r,n=0;e&&(r=e.tagName);){if(\"A\"==r||\"AREA\"==r){p(e);break}if(\"BODY\"==r||\"HTML\"==r)break;e=e.parentNode,n+=1}}),a(function(){for(var t,a,o=document.getElementsByTagName(\"iframe\"),c=0;c\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \",\"label\":\"\u521d\u5b66\u8005\",\"value\":\"1\"},{\"default\":true,\"icon\":\"\\r\\n \\r\\n \\r\\n \",\"label\":\"\u8fdb\u9636\u8005\",\"value\":\"2\"},{\"default\":false,\"icon\":\"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \",\"label\":\"\u4e13\u5bb6\",\"value\":\"3\"}],\"accentTimbres\":[{\"default\":true,\"icon\":null,\"label\":\"\u9655\u897f\u638c\u67dc\",\"value\":\"\u9655\u897f\u638c\u67dc\"},{\"default\":false,\"icon\":null,\"label\":\"\u4e1c\u5317\u5927\u59b9\",\"value\":\"\u4e1c\u5317\u5927\u59b9\"},{\"default\":false,\"icon\":null,\"label\":\"\u5317\u4eac\u5c0f\u7237\",\"value\":\"\u5317\u4eac\u5c0f\u7237\"},{\"default\":false,\"icon\":null,\"label\":\"\u5ddd\u6e1d\u840c\u59b9\",\"value\":\"\u5ddd\u6e1d\u840c\u59b9\"},{\"default\":false,\"icon\":null,\"label\":\"\u6e7e\u533a\u5927\u53d4\",\"value\":\"\u6e7e\u533a\u5927\u53d4\"}],\"exmpales\":[{\"default\":true,\"icon\":null,\"label\":\"\u4e2d\u56fd\u5c0f\u767e\u79d1\u5168\u4e66 \u7b2c\u4e94\u5377 \u6280\u672f\u79d1\u5b66\uff08\u56db\uff09\",\"value\":\"{\\r\\n \\\"docId\\\": \\\"1d161720-0d49-4dfa-b902-4d010dcde3bd\\\",\\r\\n \\\"title\\\": \\\"\u4e2d\u56fd\u5c0f\u767e\u79d1\u5168\u4e66 \u7b2c\u4e94\u5377 \u6280\u672f\u79d1\u5b66\uff08\u56db\uff09\\\",\\r\\n \\\"authors\\\": \\\"\\\",\\r\\n \\\"summary\\\": \\\"\u3010\u6b66\u5668\u3011\u53c8\u79f0\u5175\u5668\u3002\\\\n\u4e00\u822c\u6307\u76f4\u63a5\u7528\u4e8e\u6740\u4f24\u654c\u65b9\u6709\u751f\u529b\u91cf\u6216\u7834\u574f\u654c\u65b9\u8bbe\u65bd\u7684\u519b\u4e8b\u88c5\u5907\u3002\\\\n\u6b66\u5668\u6709\u8bb8\u591a\u4e0d\u540c\u7684\u5206\u7c7b\u65b9\u6cd5\uff0c\u6309\u53d1\u5c55\u5386\u53f2\u5206\u6709\u53e4\u4ee3\u5175\u5668\u3001\u8fd1\u4ee3\u5175\u5668\u548c\u73b0\u4ee3\u5175\u5668\uff1b\u6309\u6240\u7528\u80fd\u6e90\u5206\u6709\u51b7\u5175\u5668\u548c\u706b\u5668\uff1b\u6309\u5236\u9020\u7528\u6750\u5206\u6709\u77f3\uff08\u9aa8\uff09\u5175\u5668\u3001\u94dc\u5175\u5668\u548c\u94c1\u5175\u5668\uff1b\u6309\u5728\u6218\u4e89\u4e2d\u7684\u4f5c\u7528\u5206\u6709\u6218\u7565\u6b66\u5668\u548c\u6218\u672f\u6b66\u5668\uff1b\u6309\u6280\u672f\u5bc6\u96c6\u7a0b\u5ea6\u5206\u6709\u5e38\u89c4\u6b66\u5668\u548c\u5c16\u7aef\u6b66\u5668\uff1b\u6309\u4f7f\u7528\u5bf9\u8c61\u5206\u6709\u519b\u7528\u6b66\u5668\u548c\u6c11\u7528\u6b66\u5668\u3002\\\",\\r\\n \\\"coverBase64\\\": \\\"data:image/jpeg;base64,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\\\",\\r\\n \\\"coverUrl\\\": null,\\r\\n \\\"publisher\\\": null,\\r\\n \\\"date\\\": null,\\r\\n \\\"reads\\\": null,\\r\\n \\\"pageCount\\\": 1242\\r\\n}\"},{\"default\":false,\"icon\":null,\"label\":\"FM 21-150 Table of Contents\",\"value\":\"{\\r\\n \\\"docId\\\": \\\"082feb9b-3696-48ff-8c0a-06a5ae4d576f\\\",\\r\\n \\\"title\\\": \\\"FM 21-150 Table of Contents\\\",\\r\\n \\\"authors\\\": \\\"HEADQUARTERS DEPARTMENT OF THE ARMY\\\",\\r\\n \\\"summary\\\": \\\"Section IV\\\\nFIELD-EXPEDIENT WEAPONS\\\\nTo survive, the soldier in combat must be able to deal with any situation that develops.\\\\nHis ability to adapt any nearby object for use as a weapon in a win-or-die situation is limited only by his ingenuity and resourcefulness.\\\\nPossible weapons, although not discussed herein, include ink pens or pencils; canteens tied to string to be swung; snap links at the end of sections of rope; kevlar helmets; sand, rocks, or liquids thrown into the enemy's eyes; or radio antennas.\\\\nThe following techniques demonstrate a few expedient weapons that are readily available to most soldiers for defense and counterattack against the bayonet and rifle with fixed bayonet.\\\",\\r\\n \\\"coverBase64\\\": \\\"data:image/jpeg;base64,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\\\",\\r\\n \\\"coverUrl\\\": null,\\r\\n \\\"publisher\\\": \\\"Judo Info\\\",\\r\\n \\\"date\\\": \\\"1992-09-30\\\",\\r\\n \\\"reads\\\": null,\\r\\n \\\"pageCount\\\": 223\\r\\n}\"},{\"default\":false,\"icon\":null,\"label\":\"WEAPONS\",\"value\":\"{\\r\\n \\\"docId\\\": \\\"5ca20701-c8ad-4495-91d2-300d9b11c4ea\\\",\\r\\n \\\"title\\\": \\\"WEAPONS\\\",\\r\\n \\\"authors\\\": \\\"\\\",\\r\\n \\\"summary\\\": \\\"instead of a squad support weapon.\\\\nCost: 3,000 Credits.\\\\nRarity: 6.\\\\nHard Points: 1 remaining.\\\\nMarksman Barrel: Increase weapon range by one band.\\\\nTelescopic Optical Sight: -1 at Long or Extreme range.\\\",\\r\\n \\\"coverBase64\\\": \\\"data:image/jpeg;base64,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\\\",\\r\\n \\\"coverUrl\\\": null,\\r\\n \\\"publisher\\\": \\\"The Eye\\\",\\r\\n \\\"date\\\": null,\\r\\n \\\"reads\\\": null,\\r\\n \\\"pageCount\\\": 5\\r\\n}\"}],\"scenes\":[{\"default\":true,\"icon\":null,\"label\":\"\u8bfe\u5802\",\"value\":\"\u9ed8\u8ba4\"},{\"default\":false,\"icon\":null,\"label\":\"\u8bb2\u6545\u4e8b\",\"value\":\"\u8bb2\u6545\u4e8b\"},{\"default\":false,\"icon\":null,\"label\":\"\u5bf9\u8bdd\",\"value\":\"\u7537\u5973\u5bf9\u8bdd\"},{\"default\":false,\"icon\":null,\"label\":\"\u66b4\u8e81\u8001\u54e5\",\"value\":\"\u66b4\u8e81\"},{\"default\":false,\"icon\":null,\"label\":\"\u901f\u8bb2\",\"value\":\"\u901f\u8bb2\"},{\"default\":false,\"icon\":null,\"label\":\"\u8bd7\u7ecf\",\"value\":\"\u8bd7\u7ecf\"},{\"default\":false,\"icon\":null,\"label\":\"\u5feb\u677f\",\"value\":\"\u5feb\u677f\"},{\"default\":false,\"icon\":null,\"label\":\"\u594f\u6298\",\"value\":\"\u594f\u6298\"},{\"default\":false,\"icon\":null,\"label\":\"\u5b54\u5b50\",\"value\":\"\u5b54\u5b50\"},{\"default\":false,\"icon\":null,\"label\":\"\u5c0f\u8bf4\",\"value\":\"\u77ed\u7bc7\u5c0f\u8bf4\"},{\"default\":false,\"icon\":null,\"label\":\"\u7231\u56e0\u65af\u5766\",\"value\":\"\u7231\u56e0\u65af\u5766\"},{\"default\":false,\"icon\":null,\"label\":\"\u5c3c\u91c7\",\"value\":\"\u5c3c\u91c7\"},{\"default\":false,\"icon\":null,\"label\":\"\u82cf\u683c\u62c9\u5e95\",\"value\":\"\u82cf\u683c\u62c9\u5e95\"},{\"default\":false,\"icon\":null,\"label\":\"\u838e\u58eb\u6bd4\u4e9a\",\"value\":\"\u838e\u58eb\u6bd4\u4e9a\"},{\"default\":false,\"icon\":null,\"label\":\"\u9a6c\u4e01\u8def\u5fb7\u91d1\",\"value\":\"\u9a6c\u4e01\u00b7\u8def\u5fb7\u00b7\u91d1\"},{\"default\":false,\"icon\":null,\"label\":\"\u6d77\u5b50\",\"value\":\"\u6d77\u5b50\"},{\"default\":false,\"icon\":null,\"label\":\"\u5f20\u7231\u73b2\",\"value\":\"\u5f20\u7231\u73b2\"},{\"default\":false,\"icon\":null,\"label\":\"\u6b66\u4fa0\",\"value\":\"\u6b66\u4fa0\"},{\"default\":false,\"icon\":null,\"label\":\"\u60ac\u7591\",\"value\":\"\u60ac\u7591\"},{\"default\":false,\"icon\":null,\"label\":\"\u5c48\u539f\",\"value\":\"\u695a\u8f9e\"},{\"default\":false,\"icon\":null,\"label\":\"\u674e\u767d\",\"value\":\"\u674e\u767d\"},{\"default\":false,\"icon\":null,\"label\":\"\u62ff\u7834\u4ed1\",\"value\":\"\u62ff\u7834\u4ed1\"},{\"default\":false,\"icon\":null,\"label\":\"\u5947\u5e7b\",\"value\":\"\u5947\u5e7b\"}],\"ttsLanguage\":[{\"default\":true,\"icon\":null,\"label\":\"\u4e2d\u6587\",\"value\":\"cn\"},{\"default\":false,\"icon\":null,\"label\":\"English\",\"value\":\"en\"}],\"maleTimbres\":[{\"default\":false,\"icon\":null,\"label\":\"\u9ed8\u8ba4\u7537\u58f0\",\"value\":\"Chinese (Mandarin)_Radio_Host\"},{\"default\":false,\"icon\":null,\"label\":\"\u6e05\u723d\u7537\u5927\",\"value\":\"male-qn-daxuesheng\"},{\"default\":false,\"icon\":null,\"label\":\"\u51b7\u9177\u54e5\u54e5\",\"value\":\"lengdan_xiongzhang\"},{\"default\":false,\"icon\":null,\"label\":\"\u5f00\u6717\u5b66\u957f\",\"value\":\"junlang_nanyou\"},{\"default\":false,\"icon\":null,\"label\":\"\u5e7d\u9ed8\u53d4\u53d4\",\"value\":\"presenter_male\"},{\"default\":false,\"icon\":null,\"label\":\"\u667a\u6167\u5927\u7237\",\"value\":\"Chinese (Mandarin)_Humorous_Elder\"}]}"}, {"name": "data-store", "value": "{\"state\":{\"searchHistory\":[{\"createTime\":1745405901927,\"engineType\":\"\",\"groupId\":\"8603338281662857216\",\"id\":\"8603338281662857216\",\"label\":\"all\",\"languageDomain\":\"all\",\"mode\":\"detail\",\"owner\":\"guest\",\"question\":\"2025\u524d\u7aef\u5de5\u5177\u5e93top5\",\"resultCount\":0,\"searchTopicHideLogo\":false,\"updateTime\":1745405901927,\"merged\":true}],\"s\":{\"d\":1745405892687,\"dt\":\"MTU=\",\"adt\":\"MQ==\"},\"addBookCount\":0,\"isHydrated\":true,\"isTraditionalSearchEngineModeActive\":false,\"showHistory\":false,\"needSyncHistory\":false,\"maxTimes\":15,\"maxAdvanceTime\":1},\"version\":1}"}, {"name": "shareLink", "value": "https://metaso.cn/s/fipDgXL"}, {"name": "local-sid", "value": "e80bf5b84841415e9ac6352bcd366354"}, {"name": "recover-home-search-box-text", "value": "0"}, {"name": "defaultSubjectName", "value": "\u5de5\u4f5c"}, {"name": "firstPage", "value": "https://metaso.cn/"}, {"name": "chat-next-web-store-user", "value": "{\"state\":{\"login\":true,\"userInfo\":{\"metaLawPackageSupportGift\":false,\"rewriteLevel\":1,\"watchNoviceGuide\":false,\"creditTotal\":5000,\"searchCount\":0,\"aiGenerateImageTimes\":0,\"openNoPaper\":false,\"teamMember\":false,\"isTeamActive\":0,\"teamAiGenerateWordCount\":0,\"teamDailyTranslateLimit\":0,\"id\":5601562,\"teamWordCountByChar\":false,\"teamCoinsBalance\":0,\"teamCoinsQuota\":0,\"extensionReadingEnable\":true,\"activeDays\":0,\"creditRest\":5000,\"phone\":\"15511601408\",\"secondaryUrlCount\":0,\"sensitiveOpen\":true,\"expiryDate\":\"1970/01/01 08:00:00\",\"hasReceivedActiveBonus\":false,\"uid\":\"6808c7f28f8e8e812886c9eb\",\"generateWordCount\":0,\"share\":false,\"metasoApiCredit\":0,\"teamAiGenerateImageTimes\":0,\"teamDailyCheckLimit\":0,\"teamDailyTextToSpeechLimit\":0,\"amount\":0,\"showHeader\":true,\"userSource\":\"\",\"showLegalDefinition\":1,\"updateTime\":1745405939000,\"generateWordTotalLimit\":0,\"autoCheck\":true,\"userName\":\"\u7528\u6237155****1408\",\"trackingState\":false,\"forceRewrite\":false,\"enterUpgradeTimes\":0,\"timeCreate\":1745405938000,\"headImgUrl\":\"https://uranus-static.oss-cn-beijing.aliyuncs.com/avt/user_12.png\",\"createTime\":1745405939000,\"mainUrlCount\":0,\"inviteCode\":\"METASODT-VOL30C503C4\",\"hasReceivedTransferBonus\":false,\"teamManager\":false,\"freeExportTime\":0,\"totalConsumedInTeam\":0,\"gift_days\":0},\"recentlyUsedTopicDTOs\":[],\"usage\":null,\"hasHydrated\":true,\"verify\":{\"val\":false},\"verifyShowTime\":1745405938914,\"openId\":null,\"lastOrderInfo\":null,\"initialMyInfoLoaded\":true,\"extensionReadingEnable\":true,\"advancedSearchEnable\":false,\"shareMath\":false,\"dsR1Model\":false,\"metasoAIConfig\":{\"id\":1,\"pcDemoCount\":4,\"pcDemoMaxWordCount\":25,\"pcDemos\":\"[{\\\"title\\\":\\\"\u4e16\u754c\u5404\u5730\u7684\u52a8\u690d\u7269\u591a\u6837\u6027\u6709\u4f55\u7279\u70b9\uff1f\\\",\\\"value\\\":\\\"\u4e16\u754c\u5404\u5730\u7684\u52a8\u690d\u7269\u591a\u6837\u6027\u6709\u4f55\u7279\u70b9\uff1f\\\",\\\"engineType\\\":\\\"pdf\\\",\\\"mode\\\":\\\"detail\\\"},{\\\"title\\\":\\\"\u53f8\u9a6c\u5357\u88ab\u7f5a\u8d85900\u4e07\u5143\\\",\\\"value\\\":\\\"\u53f8\u9a6c\u5357\u88ab\u7f5a\u8d85900\u4e07\u5143\\\",\\\"engineType\\\":\\\"quanwang\\\",\\\"mode\\\":\\\"detail\\\"},{\\\"title\\\":\\\"\u6697\u7269\u8d28\u548c\u6697\u80fd\u91cf\u5bf9\u5b87\u5b99\u5b66\u7406\u8bba\u7684\u6311\u6218\\\",\\\"value\\\":\\\"\u6697\u7269\u8d28\u548c\u6697\u80fd\u91cf\u5bf9\u5b87\u5b99\u5b66\u7406\u8bba\u7684\u6311\u6218\\\",\\\"engineType\\\":\\\"scholar\\\"},{\\\"title\\\":\\\"\u5c0f\u7c73SU7\\\",\\\"value\\\":\\\"\u5c0f\u7c73SU7\\\",\\\"engineType\\\":\\\"podcast\\\"},{\\\"title\\\":\\\"\u7279\u65af\u62c9\u672a\u6765\u80a1\u4ef7\u8d70\u52bf\\\",\\\"value\\\":\\\"\u7279\u65af\u62c9\u672a\u6765\u80a1\u4ef7\u8d70\u52bf\\\",\\\"engineType\\\":\\\"quanwang\\\"},{\\\"title\\\":\\\"\u7f57\u6c38\u6d69\u4e3a\u4ec0\u4e48\u4eba\u79f0\u9f99\u54e5\\\",\\\"value\\\":\\\"\u7f57\u6c38\u6d69\u4e3a\u4ec0\u4e48\u4eba\u79f0\u9f99\u54e5\\\",\\\"engineType\\\":\\\"quanwang\\\"}]\",\"appDemoCount\":4,\"appDemoMaxWordCount\":20,\"appDemos\":\"[{\\\"title\\\":\\\"\u4e16\u754c\u5404\u5730\u7684\u52a8\u690d\u7269\u591a\u6837\u6027\u6709\u4f55\u7279\u70b9\uff1f\\\",\\\"value\\\":\\\"\u4e16\u754c\u5404\u5730\u7684\u52a8\u690d\u7269\u591a\u6837\u6027\u6709\u4f55\u7279\u70b9\uff1f\\\",\\\"engineType\\\":\\\"pdf\\\",\\\"mode\\\":\\\"detail\\\"},{\\\"title\\\":\\\"\u53f8\u9a6c\u5357\u88ab\u7f5a\u8d85900\u4e07\u5143\\\",\\\"value\\\":\\\"\u53f8\u9a6c\u5357\u88ab\u7f5a\u8d85900\u4e07\u5143\\\",\\\"engineType\\\":\\\"quanwang\\\",\\\"mode\\\":\\\"detail\\\"},{\\\"title\\\":\\\"\u6697\u7269\u8d28\u548c\u6697\u80fd\u91cf\u5bf9\u5b87\u5b99\u5b66\u7406\u8bba\u7684\u6311\u6218\\\",\\\"value\\\":\\\"\u6697\u7269\u8d28\u548c\u6697\u80fd\u91cf\u5bf9\u5b87\u5b99\u5b66\u7406\u8bba\u7684\u6311\u6218\\\",\\\"engineType\\\":\\\"scholar\\\"},{\\\"title\\\":\\\"\u5c0f\u7c73SU7\\\",\\\"value\\\":\\\"\u5c0f\u7c73SU7\\\",\\\"engineType\\\":\\\"podcast\\\"},{\\\"title\\\":\\\"infj\u771f\u7684\u7a00\u6709\u5417\\\",\\\"value\\\":\\\"infj\u771f\u7684\u7a00\u6709\u5417\\\",\\\"engineType\\\":\\\"quanwang\\\"},{\\\"title\\\":\\\"\u7f57\u6c38\u6d69\u4e3a\u4ec0\u4e48\u4eba\u79f0\u9f99\u54e5\\\",\\\"value\\\":\\\"\u7f57\u6c38\u6d69\u4e3a\u4ec0\u4e48\u4eba\u79f0\u9f99\u54e5\\\",\\\"engineType\\\":\\\"quanwang\\\"},{\\\"title\\\":\\\"2023\u5e74\u672b\u7ecf\u6d4e\u6307\u6807\u5206\u5316\uff0c\u5982\u4f55\u7406\u89e3\u5f53\u4e0b\u7684\u5b8f\u89c2\u8fd0\u884c\uff1f\\\",\\\"value\\\":\\\"2023\u5e74\u672b\u7ecf\u6d4e\u6307\u6807\u5206\u5316\uff0c\u5982\u4f55\u7406\u89e3\u5f53\u4e0b\u7684\u5b8f\u89c2\u8fd0\u884c\uff1f\\\",\\\"engineType\\\":\\\"quanwang\\\"},{\\\"title\\\":\\\"\u4ec0\u4e48\u662f\u8fa9\u8bc1\u903b\u8f91\uff1f\\\",\\\"value\\\":\\\"\u4ec0\u4e48\u662f\u8fa9\u8bc1\u903b\u8f91\uff1f\\\",\\\"engineType\\\":\\\"quanwang\\\"}]\",\"appMessage\":\"\u5fd9\u4e86\u4ee8\u6708\uff0c\u6211\u4eec\u5e0c\u671b\u8ba9\u6559\u80b2\u66f4\u5e73\u6743\u4e00\u70b9\",\"pcMessage\":\"\u5fd9\u4e86\u4ee8\u6708\uff0c\u6211\u4eec\u5e0c\u671b\u8ba9\u6559\u80b2\u66f4\u5e73\u6743\u4e00\u70b9\",\"urlQuestionAppMaxWordCount1\":11,\"urlQuestionAppMaxWordCount2\":4,\"urlQuestionPcMaxWordCount1\":11,\"urlQuestionPcMaxWordCount2\":10,\"version\":250421,\"extraInfo\":\"{\\\"appDarkMessage\\\": \\\"\u5fd9\u4e86\u4ee8\u6708\uff0c\u6211\u4eec\u5e0c\u671b\u8ba9\u6559\u80b2\u66f4\u5e73\u6743\u4e00\u70b9\\\"}\",\"androidVersion\":1,\"iosVersion\":1,\"guestSearchCount\":15,\"guestResearchSearchCount\":1},\"messageClosed\":false},\"version\":1}"}, {"name": "usermaven_default_UMO2dYNwFz_data", "value": "{\"userId\":\"6808c7f28f8e8e812886c9eb\",\"userProps\":{\"id\":\"6808c7f28f8e8e812886c9eb\",\"email\":\"6808c7f28f8e8e812886c9eb@metasota.ai\",\"created_at\":\"Wed, 23 Apr 2025 10:58:58 GMT\"}}"}]}]} \ No newline at end of file diff --git a/data/session_data/tongyi.json b/data/session_data/tongyi.json new file mode 100644 index 0000000..8939397 --- /dev/null +++ b/data/session_data/tongyi.json @@ -0,0 +1 @@ +{"cookies": [{"name": "XSRF-TOKEN", "value": "593917a4-14da-451f-a28f-37b13cfcee6d", "domain": "tongyi-passport.aliyun.com", "path": "/havanaone", "expires": -1, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "XSRF-TOKEN", "value": "2f0cb8e6-8da5-422e-af30-3ec7c0478eaf", "domain": "qianwen.biz.aliyun.com", "path": "/growth", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "XSRF-TOKEN", "value": "664d9e16-aa82-48ca-b759-813f49ef0eac", "domain": "tongyi.aliyun.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "UM_distinctid", "value": "1960fe898936a6-0d26258c6a1fa7-26011c51-1fa400-1960fe89894bef", "domain": ".aliyun.com", "path": "/", "expires": 1759748423, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "acw_tc", "value": "448fbc16-e135-9a65-b356-6ee2c0522bc6a4b93236ef9891f4d957b0fbe02efbd0", "domain": "qianwen.biz.aliyun.com", "path": "/", "expires": 1744025424.166257, "httpOnly": true, "secure": false, "sameSite": "Lax"}, {"name": "_samesite_flag_", "value": "true", "domain": ".aliyun.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "cookie2", "value": "15ff170b5c1514983623c409a6caca9b", "domain": ".aliyun.com", "path": "/", "expires": -1, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "t", "value": "be3e0a30d824f3f7bfdf7f0c29ad6d85", "domain": ".aliyun.com", "path": "/", "expires": 1778583624.199966, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "_tb_token_", "value": "fed73be85db05", "domain": ".aliyun.com", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "cna", "value": "SJ56II7mZHkCAXVZAV2GTegA", "domain": ".aliyun.com", "path": "/", "expires": 1778583659.781422, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "arms_uid", "value": "512f6793-1aa4-4d48-9c45-4d85e4e042ce", "domain": "tongyi-passport.aliyun.com", "path": "/", "expires": 1759575624.342546, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "sca", "value": "ba0ec3d8", "domain": ".aliyun.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "tongyi_guest_ticket", "value": "Qc2oDc8uU_yWEm8W7$9WDkz6T6j3eBtwuUWhms8MMp16JRyEJD*WL71liDlnMp7my25IHu6RQ53y0", "domain": ".aliyun.com", "path": "/", "expires": 1775127624.393569, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "cna", "value": "SJ56II7mZHkCAXVZAV2GTegA", "domain": ".mmstat.com", "path": "/", "expires": 1778583660.079414, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "sca", "value": "273f9549", "domain": ".mmstat.com", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "cbc", "value": "T2gA0HeIJ_hwpUykuptfzttNVg0_bC9dDOhG1FSf6RlZ8MwXjKyIgHFUl793y8KnByU=", "domain": ".ynuf.aliapp.org", "path": "/", "expires": 1775559625.005453, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "_bl_uid", "value": "Iqmv29Xy6zXymhmXFx10igXnyz4I", "domain": "tongyi-passport.aliyun.com", "path": "/", "expires": 1759575625.007847, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "tongyi_sso_ticket", "value": "_8Gn1gsBy1ogROHqapzX0CcdoyjeL$Ja3gGAKrv0RenO3qMihxNkYdSUh431YBoWsZbKKba*zpfz0", "domain": ".aliyun.com", "path": "/", "expires": 1778583658.17297, "httpOnly": true, "secure": true, "sameSite": "None"}, {"name": "CNZZDATA1281397965", "value": "1341662455-1744023624-%7C1744023660", "domain": "tongyi.aliyun.com", "path": "/", "expires": 1759748459, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "cnaui", "value": "1743995102443202816", "domain": ".aliyun.com", "path": "/", "expires": 1778583659.78343, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "aui", "value": "1743995102443202816", "domain": ".aliyun.com", "path": "/", "expires": 1778583660.248087, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "atpsida", "value": "fa052d6815a01a7d2005bf76_1744023660_2", "domain": ".aliyun.com", "path": "/", "expires": -1, "httpOnly": false, "secure": false, "sameSite": "Lax"}, {"name": "atpsida", "value": "fcc297f2931b2d90680b78cc_1744023660_3", "domain": ".mmstat.com", "path": "/", "expires": -1, "httpOnly": false, "secure": true, "sameSite": "None"}, {"name": "tfstk", "value": "gcIZfkw23lEwgIIaipxqzC7Q3e-9DhV7miOXntXDCCAMGh_qgO1wSIa91IXcttiXoPCb0oX5OEj6fO1E3s67BEa9fZo2t6A11N6fT-5hwOTfni9c0hIC5mO_6nWcNnP7NuZ5BOKpm7NW9gtCvnv0cI4BSXTXfsP7NuZCBOKvm716O32V1KdHIKAiSJ8HUBvMIsAM-XvyenAcisX3LKdHinxciHY8KOXmYLTghTnoN0bwQFRlIBX1CMvZNQXMTmm0hd8aROAEmmjdRfaknC4-dIK6619NMun9jE7G_px4lxdN-Ts61Tkrm9523UxD8xmcLHdD8ptuqXJd-O_cX1kqmdI1VERJ8-mvlHjWrafZH8BHjKfvyiN-XCXcegQW4ooHbEjy0jphG9jA7j0DSppeNJyhBZU5yaHgu9gxkexJLQw6Cq3vSLpeNJyrkqL3TpR7CCf..", "domain": ".aliyun.com", "path": "/", "expires": 1759575660, "httpOnly": false, "secure": false, "sameSite": "Lax"}], "origins": [{"origin": "https://tongyi.aliyun.com", "localStorage": [{"name": "APLUS_LS_KEY", "value": "[\"APLUS_CORE_1.0.4_20250327170802_3244f647\"]"}, {"name": "__ETAG__CNA__ID__", "value": "20250407_SJ56II7mZHkCAXVZAV2GTegA"}, {"name": "tfstk__", "value": "cEfFB9ayzWFFKFBngCdr3HW_afedZ6_hrf8XKz_xi0q46UvhiGoJSg_M7UgZqpf.."}, {"name": "APLUS_CORE_1.0.4_20250327170802_3244f647", "value": "/*! 2025-03-27 16:48:57 aplus_pc.js */\n!function(t){function e(a){if(n[a])return n[a].exports;var o=n[a]={exports:{},id:a,loaded:!1};return t[a].call(o.exports,o,o.exports,e),o.loaded=!0,o.exports}var n={};return e.m=t,e.c=n,e.p=\"\",e(0)}([function(t,e,n){t.exports=n(1)},function(t,e,n){\"use strict\";n(2).initGlobal(window),function(){var t=n(4);n(149)(t)}()},function(t,e,n){\"use strict\";var a,o=n(3),r=o.APLUS,i=o.APLUS_QUEUE,s=o.GOLDLOG,u=o.GOLDLOG_QUEUE,c=!1;try{\"undefined\"!=typeof window&&(a=window,c=!0)}catch(t){a={},c=!1}e.getContext=function(){return a},e.isWeb=function(){return\"undefined\"!=typeof window&&window},e.initGlobal=function(t){a=t?t:{v:1,aplus:{},aplus_queue:[]};var e,n;if(c)try{e=a.aplus||a.goldlog||(a.aplus={});var o=a.goldlog_queue||(a.goldlog_queue=[]);n=a.aplus_queue||(a.aplus_queue=[]),n=o.concat(n)}catch(t){}else e=a.aplus,n=a.aplus_queue;return a.aplus=a.goldlog=e,a.aplus_queue=a.goldlog_queue=n,a};var l=function(t){if(t===r||t===s){var e=a[r]||a[s];return e||(e=a[r]=a[s]={}),e}var n=u,o=i;if(t===o||t===n){var c=a[o]||a[n];return c||(c=a[o]=a[n]=[]),c}};e.getGlobalValue=l,e.setGlobalValue=function(t,e){a[t]=e};var p=function(t){var e;try{var n=l(r);e=n[t]}catch(t){e=\"\"}finally{return e}};e.getGoldlogVal=p;var f=function(t,e){var n=!1;try{var a=l(r);t&&(a[t]=e,n=!0)}catch(t){n=!1}finally{return n}};e.setGoldlogVal=f,e.getClientInfo=function(){return p(\"_aplus_client\")||{}}},function(t,e){var n=\"aplus\",a=\"goldlog\",o=n+\"_queue\",r=a+\"_queue\",i=\"mw_change\",s=\"MetaInfo\",u=\"append\"+s,c=\"set\"+s,l=\"http\",p=\"_pubsub\",f=\"other\",g=\"2101\",d=\"2201\",_=\"2202\",m=\"19999\",h=\"1023\",v=\"1010\",b=3e4,y=18e5,E=\"ekvs\",S=1e4,A=1,T=1,P=3e3,I=\"$$_page_start\",w=\"$$_page_end\",M=\"$$_app_start\",x=\"$$_app_end\",C=\"aplus_user_profile\",L=\"imprint\",O=n+\"-idtype\",U=n+\"-jsbridge-only\",k=n+\"-page-config\",R=n+\"-skip-apv-rules\",N=n+\"-rhost-v\",G=n+\"-rhost-g\",D=n+\"-forward-domain\",V=n+\"-forward-event-filter\",j=\"autoGetOpenid\",F=n+\"-forward-appkey\";t.exports={PAGE_ENTER:\"PAGE_ENTER\",ETAG_EVENT_NAME:\"etag\",CURRENT_PAGE_CONFIG:\"CURRENT_PAGE_CONFIG\",_ANONY_ID:\"_anony_id\",_DEV_ID:\"_dev_id\",_USER_ID:\"_user_id\",_CNA:\"cna\",DEFAULT_CODE:f,OTHER:m,EVENT_MAP:{2101:\"click\",2201:\"exposure\",2202:\"exposure\",19999:f,1023:\"app_show\",1010:\"app_hide_or_unload\"},EVENT_ID_MAP:{EXP:d,IMPEXP:_,CLK:g,OTHER:m,SHOW:h,H_OR_U:v},APLUS:n,APLUS_CONFIG:\"APLUS_CONFIG\",GOLDLOG:a,UNSUBSCRIBE:n+\".\"+n+p+\".unsubscribe\",SUBSCRIBE:n+\".\"+n+p+\".subscribe\",PUBLISH:n+\".\"+n+p+\".publish\",CACHE_PUBS:n+\".\"+n+p+\".cachePubs\",APLUS_UNIVERSAL:n+\"_universal\",APLUS_QUEUE:o,GOLDLOG_QUEUE:r,COMPLETE:\"complete\",PV_CODE:\"2001\",EXP_CODE:d,CLK_CODE:g,OTHER_CODE:m,CLK:\"CLK\",EXP:\"EXP\",SPM_CNT:\"spm-cnt\",SPM_URL:\"spm-url\",SPM_PRE:\"spm-pre\",MW_CHANGE_PV:i+\"_pv\",MW_CHANGE_HJLJ:i+\"_hjlj\",HTTP:l+\":\",HTTPS:\"https:\",APPEND_META_INFO:u,SET_META_INFO:c,APLUS_APPEND_META_INFO:n+\".\"+u,APLUS_SET_META_INFO:n+\".\"+c,PVID:\"pvid\",openAPIs:[\"send\",\"enter\",\"sendPV\",\"record\",\"combineRecord\",\"recordUdata\",\"requestVTConfig\",\"requestRemoteConfig\",\"setPageSPM\",\"setMetaInfo\",\"appendMetaInfo\",\"updatePageProperties\",\"updateNextPageProperties\",\"updatePageUtparam\",\"updateNextPageUtparam\",\"pageAppear\",\"pageDisappear\",\"pageDisAppear\",\"skipPage\",\"updatePageName\",\"updatePageUrl\",\"requestPageAllProperties\",\"updateSessionProperties\",\"getPageSpmUrl\",\"getPageSpmPre\",\"updateNextPageUtparamCnt\",\"setPageName\",\"getElementSPM\",\"setUserProfile\",\"getUserProfile\",\"getCna\"],SESSION_INTERVAL:b,SESSION_PAUSE_TIME:\"session_pause_time\",IMPRINT:\"imprint\",CURRENT_SESSION:\"current_session\",MAX_EVENTID_LENGTH:128,MAX_PROPERTY_KEY_LENGTH:256,MAX_PROPERTY_KEYS_COUNT:100,FAILED_REQUESTS:\"failed_requests\",REQUESTS:\"requests\",SHARES:\"shares\",APLUS_SSRC:\"_aplus_ssrc\",ARMS_TRACE:\"_arms_trace\",EKVS:E,EVENT_MAX_COUNT:S,MEMORY_MAX_COUNT:A,MAX_QUEUE_COUNT:T,EVENT_SEND_DEFAULT_INTERVAL:P,PAGE_START:I,PAGE_END:w,APP_START:M,APP_END:x,USER_PROFILE_KEY:C,SHARE_CACHE_INTERVAL:y,IMPRINT:L,ID_TYPE:O,GLOBAL_PROPERTY:\"globalproperty\",JSBRIDGE_ONLY:U,PAGE_CONFIG:k,APLUS_SKIP_APV_RULES:R,APLUS_PV_DOMAIN:N,APLUS_EKV_DOMAIN:G,APLUS_FORWARD_DOMAIN:D,APLUS_IMPRINT_VERSION:\"APLUS_IMPRINT_VERSION\",APLUS_REMOTE_CONFIG:\"APLUS_REMOTE_CONFIG\",RANK:\"ekv_rank\",WEB_EVENT_SUFFIX:\"/web_logs\",WEB_PC_PV_SUFFIX:\"v.gif\",WEB_WAP_PV_SUFFIX:\"m.gif\",PAGE_LEAVE:\"$$_page_leave\",APLUS_DOM_CHANGE:\"APLUS_DOM_CHANGE\",APLUS_PAGE_CHANGE:\"APLUS_PAGE_CHANGE\",PERFORMANCE_WARING:\"$$_perf_warning\",START_ID:\"START_ID\",AUTO_GET_OPENID:j,APLUS_LATEAST_UTM:\"APLUS_LATEAST_UTM\",APLUS_FORWARD_EVENT_FILTER:V,APLUS_FORWARD_APPKEY:F,APLUS_RHOST_V:n+\"-rhost-v\",APLUS_CPVDATA:n+\"-cpvdata\",APLUS_EXDATA:n+\"-exdata\",APLUS_EXINFO:n+\"-exinfo\",APLUS_LOG_PIPE:n+\"-log-pipe\",APLUS_TRACK_COMBINE:n+\"-track-combine\",APLUS_COOKIES:n+\"-cookies\",APLUS_CODELESS_TRACK_CONFIG:\"_\"+n+\"_codeless_track_config\",APLUS_AUTO_CLK:n+\"-auto-clk\",APLUS_AUTO_EXP:n+\"-auto-exp\",APLUS_AUTO_PV:n+\"-auto-pv\",APLUS_BRIDGE_NAME:n+\"-bridge-name\",APLUS_MINI_REQUEST_TIMEOUT:n+\"-request-timeout\",APLUS_VT_CONFIG_URL:n+\"-vt-cfg-url\",APLUS_EXPOSURE_EVENT_CAN_REPEAT:n+\"-exposure-event-can-repeat\",APLUS_IGNORE_LIFECYCLES:n+\"-ignore-lifecycles\",APLUS_TRACK_DEBUG_ID:n+\"-track-debug-id\",APLUS_SINGLE_RECORD_LOGKEYS:n+\"-single-record-logkeys\",APLUS_GOKEY_ISOLATE:n+\"-gokey-isolate\",APLUS_AUTOTRACK_ENABLED:n+\"-autotrack-enabled\",APLUS_AUTOTRACK_ENABLED_REMOTE:n+\"-autotrack-enabled-remote\",APLUS_AUTOTRACK_CONFIG:n+\"-autotrack-config\",APLUS_AUTOTRACK_CONFIG_REMOTE:n+\"-autotrack-config-remote\",APLUS_EVENT_LIMITRATES:n+\"-event-limitrates\",APLUS_DISABLE_AUTOEVENT:n+\"-disable-autoevent\",APLUS_DISABLE_AUTOEVENT_REMOTE:n+\"-disable-autoevent\",APLUS_DISABLE_AUTOPV:n+\"-disable-apv\",APLUS_DISABLE_AUTOPV_REMOTE:n+\"-disable-apv-remote\",APLUS_DEVICE_ENABLE:n+\"-device-enable\",APLUS_USER_PROFILE:n+\"-user-profile\",APLUS_CNA_ENABLE:n+\"-cna-enable\",APLUS_CNA_MODE:n+\"-cna-mode\",APLUS_ETAG_TIMEOUT:n+\"-etag-timeout\",APLUS_SPA_TYPE:n+\"-spa-type\"}},function(t,e,n){t.exports={metaInfo:{\"aplus-ifr-pv\":\"0\",\"aplus-rhost-v\":\"log.mmstat.com\",\"aplus-rhost-g\":\"gm.mmstat.com\",\"aplus-channel\":\"WS\",appId:\"60506758\",sdkId:\"customSdkId\",\"aplus-cpvdata\":{},\"aplus-exdata\":{},\"aplus-globaldata\":{},\"aplus-mmstat-timeout\":\"10000\",\"aplus-toUT\":\"auto\",\"aplus-track-combine\":\"on\",\"aplus-vt-auto-userfn-enable\":\"on\",\"aplus-cna-enable\":\"on\",\"aplus-cna-mode\":\"CK\",\"aplus-auto-track-config-import\":\"off\",\"aplus-form-track\":\"off\",\"aplus-gokey-isolate\":\"on\",\"aplus-only-update-page-properties\":\"off\",\"aplus-user-profile\":{},\"aplus-report-rate\":{},\"aplus-single-record-logkeys\":[],\"aplus-cross-day-auto-pv\":\"off\"},globalConfig:{isAli:!0,APLUS_QUEUE:\"aplus_queue\",ETAG_STORAGE_KEY:\"__ETAG__CNA__ID__\",script_name:\"aplus.js\",NAME_STORAGE_KEYS:{REFERRER:\"wm_referrer\",REFERRER_PV_ID:\"refer_pv_id\",LOST_PV_PAGE_DURATION:\"lost_pv_page_duration\",LOST_PV_PAGE_SPMAB:\"lost_pv_page_spmab\",LOST_PV_PAGE:\"lost_pv_page\",LOST_PV_PAGE_MSG:\"lost_pv_page_msg\"},lver:\"1.13.14\"},plugins:[{name:\"aplus_body_ready\",path:n(5)},{name:\"pubsub\",path:n(6)},{name:\"aplus_client\",path:n(11)},{name:\"aplus_meta_inject\",path:n(15)},{name:\"aplus_observer\",path:n(49)},{name:\"aplus_ac\",path:n(51)},{name:\"aplus_ae\",path:n(68)},{name:\"name_storage\",path:n(76)},{name:\"record_lost_pv\",path:n(79),config:{lostPvRecordRatio:.01}},{name:\"aplus_monitor\",path:n(81),config:{obsoleteInterRecordRatio:\"0.01\",jsErrorRecordRatio:\"0.01\",browserSupportRatio:\"0.01\"}},{name:\"aplus_web_http_ali\",path:n(83)},{name:\"aplus_log_inject\",path:n(86),deps:[\"aplus_meta_inject\"],config:{plugins:{pv:[{name:\"etag\",path:n(87)},{name:\"pha_trackinfo\",path:n(93)},{name:\"when_to_sendpv\",path:n(94),config:{aplusWaiting:\"\"}},{name:\"where_to_send\",path:n(95),config:{method:\"GET\",url:\"//log.mmstat.com/v.gif\"}},{name:\"what_to_send\",path:n(97),config:{pvdataToUt:{}}},{name:\"cookie_data\",path:n(98)},{name:\"what_to_sendpv_userdata\",path:n(99),deps:[\"what_to_send\"]},{name:\"what_to_sendpv_userdata_web\",path:n(100),deps:[\"what_to_send\",\"what_to_sendpv_userdata\"]},{name:\"what_to_sendpv_ut2\",path:n(102),deps:[\"what_to_send\"]},{name:\"can_to_sendpv\",path:n(103),config:{flag:\"NO\"}},{name:\"after_pv\",path:n(108)}],hjlj:[{name:\"etag\",path:n(87)},{name:\"pha_trackinfo\",path:n(93)},{name:\"where_to_send\",path:n(95),deps:[],config:{method:\"GET\",url:\"//gm.mmstat.com/\",ac_atpanel:\"//ac.mmstat.com/\",tblogUrl:\"//log.mmstat.com/\"}},{name:\"what_to_send\",path:n(97),deps:[]},{name:\"cookie_data\",path:n(98)},{name:\"what_to_hjlj_userdata\",path:n(109),deps:[\"what_to_send\"]},{name:\"what_to_hjlj_userdata_web\",path:n(110),deps:[\"what_to_send\",\"what_to_hjlj_userdata\"]},{name:\"what_to_hjlj_ut2\",path:n(111),deps:[\"what_to_send\"]}]}}},{name:\"aplus_spm_inject\",path:n(112)},{name:\"aplus_api\",path:n(126)},{name:\"meta_queue\",path:n(134)},{name:\"etag\",path:n(87)},{name:\"etag_web_sync\",path:n(136)},{name:\"aplus_queue\",path:n(137)},{name:\"hot_loader\",path:n(138),config:{urlRules:[{rule:\"aplus_webvt_messager\",cdnPath:[\"https://d.alicdn.com/alilog/mlog/aplus_webvt_messager.js\",\"https://d.alicdn.com/alilog/mlog/aplus_track_debug.js\"]},{rule:\"aplus_track_debug_id\",cdnPath:[\"https://d.alicdn.com/alilog/mlog/aplus_track_debug.js\"]},{rule:\"__aplus__analytics__=true\",cdnPath:[\"https://g.alicdn.com/alilog/aplus-design/1.3.0/analytics_index.bundle.js\"]},{rule:\"aplus_auto_register=true\",allowIframeLoad:!0,cdnPath:[\"https://d.alicdn.com/alilog/aplus/1.13.9/plugin/aplus_auto_register.js\"]},{rule:\"aplus_heat=true\",allowIframeLoad:!0,cdnPath:[\"https://o.alicdn.com/alilog/aplus-visual-client/heat.js\"]}]}},{name:\"hot_sufei_pc\",path:n(139),config:{cdnPath:\"//g.alicdn.com\"}},{name:\"aplus_apv\",path:n(140),deps:[\"aplus_log_inject\",\"aplus_api\"]},{name:\"aplus_form_track\",path:n(143)}]}},function(t,e){\"use strict\";t.exports=function(){return{run:function(t,e){var n=setInterval(function(){document.getElementsByTagName(\"body\").length&&(clearInterval(n),n=null,e())},50);return setTimeout(function(){n&&clearInterval(n)},1e3),1e3}}}},function(t,e,n){var a=n(7),o=n(2);t.exports=function(){return{run:function(){var t=o.getGlobalValue(\"aplus\");t.aplus_pubsub||(t.aplus_pubsub=a.create())}}}},function(t,e,n){var a=n(8);t.exports=a.extend({subscribeOnce:function(t,e){this.callable(e);var n,a=this;return this.subscribe.call(this,t,n=function(){a.unsubscribe.call(a,t,n);var o=Array.prototype.slice.call(arguments);e.apply(a,o)}),this}})},function(t,e,n){\"use strict\";var a=n(9),o=n(10),r=function(t){for(var e=t.length,n=new Array(e-1),a=1;a0){for(var a=0;a0)for(var i=0;i\",S=u&&u.createElement(\"div\"),A=[],T={isAliapp:!1,webkit:void 0,edge:void 0,trident:void 0,gecko:void 0,presto:void 0,chrome:void 0,safari:void 0,firefox:void 0,ie:void 0,ieMode:void 0,opera:void 0,mobile:void 0,core:void 0,shell:void 0,phantomjs:void 0,os:void 0,ipad:void 0,iphone:void 0,ipod:void 0,ios:void 0,android:void 0,nodejs:void 0,extraName:void 0,extraVersion:void 0};if(S&&S.getElementsByTagName&&(S.innerHTML=E.replace(y,\"\"),A=S.getElementsByTagName(\"s\")),A.length>0){for(d(t,T),i=b[0],s=b[1];i<=s;i++)if(S.innerHTML=E.replace(y,i),A.length>0){T[v=\"ie\"]=i;break}!T.ie&&(r=_(t))&&(T[v=\"ie\"]=r)}else((o=t.match(/AppleWebKit\\/*\\s*([\\d.]*)/i))||(o=t.match(/Safari\\/([\\d.]*)/)))&&o[1]?(T[h=\"webkit\"]=g(o[1]),(o=t.match(/OPR\\/(\\d+\\.\\d+)/))&&o[1]?T[v=\"opera\"]=g(o[1]):(o=t.match(/Chrome\\/([\\d.]*)/))&&o[1]?T[v=\"chrome\"]=g(o[1]):(o=t.match(/\\/([\\d.]*) Safari/))&&o[1]?T[v=\"safari\"]=g(o[1]):T.safari=T.webkit,(o=t.match(/Edge\\/([\\d.]*)/))&&o[1]&&(h=v=\"edge\",T[h]=g(o[1])),/ Mobile\\//.test(t)&&t.match(/iPad|iPod|iPhone/)?(T.mobile=\"apple\",o=t.match(/OS ([^\\s]*)/),o&&o[1]&&(T.ios=g(o[1].replace(\"_\",\".\"))),a=\"ios\",o=t.match(/iPad|iPod|iPhone/),o&&o[0]&&(T[o[0].toLowerCase()]=T.ios)):/ Android/i.test(t)?(/Mobile/.test(t)&&(a=T.mobile=\"android\"),o=t.match(/Android ([^\\s]*);/),o&&o[1]&&(T.android=g(o[1]))):(o=t.match(/NokiaN[^\\/]*|Android \\d\\.\\d|webOS\\/\\d\\.\\d/))&&(T.mobile=o[0].toLowerCase()),(o=t.match(/PhantomJS\\/([^\\s]*)/))&&o[1]&&(T.phantomjs=g(o[1]))):(o=t.match(/Presto\\/([\\d.]*)/))&&o[1]?(T[h=\"presto\"]=g(o[1]),(o=t.match(/Opera\\/([\\d.]*)/))&&o[1]&&(T[v=\"opera\"]=g(o[1]),(o=t.match(/Opera\\/.* Version\\/([\\d.]*)/))&&o[1]&&(T[v]=g(o[1])),(o=t.match(/Opera Mini[^;]*/))&&o?T.mobile=o[0].toLowerCase():(o=t.match(/Opera Mobi[^;]*/))&&o&&(T.mobile=o[0]))):(r=_(t))?(T[v=\"ie\"]=r,d(t,T)):(o=t.match(/Gecko/))&&(T[h=\"gecko\"]=.1,(o=t.match(/rv:([\\d.]*)/))&&o[1]&&(T[h]=g(o[1]),/Mobile|Tablet/.test(t)&&(T.mobile=\"firefox\")),(o=t.match(/Firefox\\/([\\d.]*)/))&&o[1]&&(T[v=\"firefox\"]=g(o[1])));if(!T[v]){var P=t.match(/Ali\\w+\\(\\w+\\/(\\d+\\.)+\\d+\\)/);if(P){T.isAliapp=!0;var I=P[0],w=\"\",M=\"\",x=I.match(/(\\d+\\.)+\\d+/);x&&(w=x[0],M=I.replace(\"/\"+w,\"\").replace(/\\(|\\)/g,\"\")),T[v=M]=w}}a||(a=e());var C,L,O;if(!n(\"type\",\"application/vnd.chromium.remoting-viewer\")){C=\"scoped\"in u.createElement(\"style\"),O=\"v8Locale\"in c;try{L=c.external||void 0}catch(t){}if(o=t.match(/360SE/))l=\"360\";else if((o=t.match(/SE\\s([\\d.]*)/))||L&&\"SEVersion\"in L)l=\"sougou\",f=g(o[1])||.1;else if((o=t.match(/Maxthon(?:\\/)+([\\d.]*)/))&&L){l=\"maxthon\";try{f=g(L.max_version||o[1])}catch(t){f=.1}}else C&&O?l=\"360se\":C||O||!/Gecko\\)\\s+Chrome/.test(p)||T.opera||T.edge||(l=\"360ee\")}(o=t.match(/TencentTraveler\\s([\\d.]*)|QQBrowser\\/([\\d.]*)/))?(l=\"tt\",f=g(o[2])||.1):(o=t.match(/LBBROWSER/))||L&&\"LiebaoGetVersion\"in L?l=\"liebao\":(o=t.match(/TheWorld/))?(l=\"theworld\",f=3):(o=t.match(/TaoBrowser\\/([\\d.]*)/))?(l=\"taobao\",f=g(o[1])||.1):(o=t.match(/UCBrowser\\/([\\d.]*)/))&&(l=\"uc\",f=g(o[1])||.1),T.os=a,T.core=T.core||h,T.shell=v,T.ieMode=T.ie&&u.documentMode||T.ie,T.extraName=l,T.extraVersion=f;var U=c.screen.width,k=c.screen.height;return T.resolution=U+\"x\"+k,T}function o(t){function e(t){return Object.prototype.toString.call(t)}function n(t,n,a){if(\"[object Function]\"==e(n)&&(n=n(a)),!n)return null;var o={name:t,version:\"\"},r=e(n);if(n===!0)return o;if(\"[object String]\"===r){if(a.indexOf(n)!==-1)return o}else if(n.exec){var i=n.exec(a);if(i)return i.length>=2&&i[1]?o.version=i[1].replace(/_/g,\".\"):o.version=\"\",o}}var a={name:\"other\",version:\"\"};t=(t||\"\").toLowerCase();for(var o=[[\"nokia\",function(t){return t.indexOf(\"nokia \")!==-1?/\\bnokia ([0-9]+)?/:/\\bnokia([a-z0-9]+)?/}],[\"samsung\",function(t){return t.indexOf(\"samsung\")!==-1?/\\bsamsung(?:[ \\-](?:sgh|gt|sm))?-([a-z0-9]+)/:/\\b(?:sgh|sch|gt|sm)-([a-z0-9]+)/}],[\"wp\",function(t){return t.indexOf(\"windows phone \")!==-1||t.indexOf(\"xblwp\")!==-1||t.indexOf(\"zunewp\")!==-1||t.indexOf(\"windows ce\")!==-1}],[\"pc\",\"windows\"],[\"ipad\",\"ipad\"],[\"ipod\",\"ipod\"],[\"iphone\",/\\biphone\\b|\\biph(\\d)/],[\"mac\",\"macintosh\"],[\"mi\",/\\bmi[ \\-]?([a-z0-9 ]+(?= build|\\)))/],[\"hongmi\",/\\bhm[ \\-]?([a-z0-9]+)/],[\"aliyun\",/\\baliyunos\\b(?:[\\-](\\d+))?/],[\"meizu\",function(t){return t.indexOf(\"meizu\")>=0?/\\bmeizu[\\/ ]([a-z0-9]+)\\b/:/\\bm([0-9x]{1,3})\\b/}],[\"nexus\",/\\bnexus ([0-9s.]+)/],[\"huawei\",function(t){var e=/\\bmediapad (.+?)(?= build\\/huaweimediapad\\b)/;return t.indexOf(\"huawei-huawei\")!==-1?/\\bhuawei\\-huawei\\-([a-z0-9\\-]+)/:e.test(t)?e:/\\bhuawei[ _\\-]?([a-z0-9]+)/}],[\"lenovo\",function(t){return t.indexOf(\"lenovo-lenovo\")!==-1?/\\blenovo\\-lenovo[ \\-]([a-z0-9]+)/:/\\blenovo[ \\-]?([a-z0-9]+)/}],[\"zte\",function(t){return/\\bzte\\-[tu]/.test(t)?/\\bzte-[tu][ _\\-]?([a-su-z0-9\\+]+)/:/\\bzte[ _\\-]?([a-su-z0-9\\+]+)/}],[\"vivo\",/\\bvivo(?: ([a-z0-9]+))?/],[\"htc\",function(t){return/\\bhtc[a-z0-9 _\\-]+(?= build\\b)/.test(t)?/\\bhtc[ _\\-]?([a-z0-9 ]+(?= build))/:/\\bhtc[ _\\-]?([a-z0-9 ]+)/}],[\"oppo\",/\\boppo[_]([a-z0-9]+)/],[\"konka\",/\\bkonka[_\\-]([a-z0-9]+)/],[\"sonyericsson\",/\\bmt([a-z0-9]+)/],[\"coolpad\",/\\bcoolpad[_ ]?([a-z0-9]+)/],[\"lg\",/\\blg[\\-]([a-z0-9]+)/],[\"android\",/\\bandroid\\b|\\badr\\b/],[\"blackberry\",function(t){return t.indexOf(\"blackberry\")>=0?/\\bblackberry\\s?(\\d+)/:\"bb10\"}]],r=0;rc.length?u:c,a=decodeURIComponent(a)}else n=e.match(o),a=n&&2===n.length?n[1]:\"\"}catch(t){}finally{return a}}function o(t,e){var n,a,o,r,i,s=e||location.href,c=\"&\",l=[];return u(t,function(t,e){new RegExp(t+\"=\").test(s)||l.push(t+\"=\"+e)}),0===l.length?s:(s.indexOf(\"#\")!==-1&&(o=s.split(\"#\"),s=o.shift(),a=o.join(\"#\")),r=s.split(\"?\"),i=r.length-1,o=r[0].split(\"//\"),o=o[o.length-1].split(\"/\"),i>0&&(n=r.pop(),s=r.join(\"?\")),n&&i>1&&n.indexOf(\"&\")==-1&&n.indexOf(\"%\")!==-1&&(c=\"%26\"),s=s+\"?\"+l.join(\"&\")+(n?c+n:\"\")+(a?\"#\"+a:\"\"))}function r(t){var e=s(location.hash)+\"\";c.pushIntoGoldlogQueue(\"aplus.on\",[window,\"hashchange\",function(){e!==s(location.hash)&&(e=s(location.hash)+\"\",t&&\"function\"==typeof t&&t(e,p))}])}function i(t){function e(e){var a=\"\";if(e){a=e&&e.arguments&&e.arguments.length>2&&e.arguments[2];var o=/^http|https/.test(a)?a:location.protocol+\"//\"+location.host+a;location.href!==o&&setTimeout(function(){t&&\"function\"==typeof t&&t(a,f)},0)}else a=location.pathname+location.search,a!==n&&setTimeout(function(){t&&\"function\"==typeof t&&t(a,f)},0);n=a}var n=location.pathname+location.search;if(history.pushState&&window.addEventListener){c.pushIntoGoldlogQueue(\"aplus.on\",[window,\"pushState\",function(t){e(t)}]),c.pushIntoGoldlogQueue(\"aplus.on\",[window,\"popstate\",function(){e()}]);var a=l.getMetaCnt(\"aplus-track-replacestate\")||aplus.getMetaInfo&&aplus.getMetaInfo(\"aplus-track-replacestate\");a&&c.pushIntoGoldlogQueue(\"aplus.on\",[window,\"replaceState\",function(t){e(t)}])}}function s(t){var e=\"\";return t&&(e=t.indexOf(\"?\")!=-1?t.split(\"?\")[0]:t),e}var u=n(18);e.addParamsIntoUrl=o,e.getParamFromUrl=a,e.getSPMFromUrl=function(t){return a(\"spm\",t)},e.getQueryFromUrl=function(){function t(t){for(var e=decodeURIComponent(t),n=e.indexOf(\"?\")+1,a=e.substring(n),o=Object.create(null),r=a.split(\"&\"),i=0;i-1)try{A[e]=JSON.parse(n)}catch(t){g.logger({msg:\"the content of meta<\"+e+\"> is invalid json string\"})}if(e===T)try{u=A[e]=JSON.parse(h.getMetaCnt(e))}catch(t){}}}),d(P,function(t){A[t]=h.getMetaCnt(t)}),A.spm_protocol=o(t),u&&(A=p.assign(A,u));var e,n,i=[\"aplus-rate-ahot\"],s=i.length;for(e=0;e0){var u=o.slice(0,r),c=o.slice(r+1,s)||\"\";e[u]=c}else e[i[0]]=\"\"}return e};var a=\"::-plain-::\";e.s_plain_obj=a,e.arr2param=n,e.obj2param=function(t,e){var n,o,r,i=[];for(n in t)n&&t.hasOwnProperty(n)&&(\"object\"==typeof t[n]?(o=\"\"+this.obj2param(t[n]),r=o):(o=\"\"+t[n],r=n+\"=\"+o),e?i.push(r):i.push(0===n.indexOf(a)?o:r));return i.join(\"&\")},e.encodeGokeyValue=function(t){return t}},function(t,e,n){\"use strict\";e.assign=n(13),e.makeCacheNum=function(){return Math.floor(268435456*Math.random()).toString(16)},e.isStartWith=function(t,e){return 0===t.indexOf(e)},e.isEndWith=function(t,e){if(String.prototype.endsWith)return t.endsWith(e);var n=t.length,a=e.length;return n>=a&&t.substring(n-a)===e},e.any=function(t,e){var n,a=t.length;for(n=0;n-1};var a=function(t){var e,n=t.constructor===Array?[]:{};if(\"object\"==typeof t){if(JSON&&JSON.parse)e=JSON.stringify(t),n=JSON.parse(e);else for(var o in t)n[o]=\"object\"==typeof t[o]?a(t[o]):t[o];return n}};e.cloneDeep=a;var o=function(){for(var t,e=/[?&]([^=#]+)=([^&#]*)/g,n=window.location.href,a={};t=e.exec(n);)a[t[1]]=t[2];return a};e.getUrlParams=o;var r=function(t){if(!t)return!0;for(var e in t)if(Object.prototype.hasOwnProperty.call(t,e))return!1;return!0};e.isEmptyObject=r},function(t,e,n){\"use strict\";var a=n(30),o=n(31),r=n(2),i=n(28),s=n(32),u=n(33);t.exports={tryToDecodeURIComponent:function(t,e){var n=e||\"\";if(t)try{n=decodeURIComponent(t)}catch(t){}return n},parseSemicolonContent:function(t,e,n){e=e||{};var o,r,i=t.split(\";\"),s=i.length;for(o=0;o1&&e===r[0]?r[1]:\"\":r.length>1?r[1]:\"\"}return decodeURIComponent(n)}return\"\"},setLsCna:function(t,e,n){n&&o.set&&o.test()&&o.set(t,e+\"_\"+encodeURIComponent(n))},getLsImpv:function(t,e){if(o.get&&o.test()){var n=\"\",a=o.get(t);if(a){var r=a.split(\"||\")||[];n=e?r.length>1&&e===r[0]?r[1]:\"\":r.length>1?r[1]:\"\"}return decodeURIComponent(n)}return\"\"},setLsImpv:function(t,e,n){n&&o.set&&o.test()&&o.set(t,e+\"||\"+encodeURIComponent(n))},setLsRemoteCfg:function(t,e,n){if(n&&o.set&&o.test()){var a=i.cloneDeep(n);\"object\"==typeof a&&(a=JSON.stringify(a)),o.set(t,e+\"||\"+encodeURIComponent(a))}},getLsRemoteCfg:function(t,e){if(o.get&&o.test()){var n=\"\",a=o.get(t);if(a){var r=a.split(\"||\")||[];n=e?r.length>1&&e===r[0]?r[1]:\"\":r.length>1?r[1]:\"\"}return s.parse(decodeURIComponent(n))}return\"\"},getUrl:function(t){var e=r.getGlobalValue(\"aplus\"),a=n(3),o=t||\"//log.mmstat.com/eg.js\";try{var i=e.getMetaInfo(a.APLUS_PV_DOMAIN);i=u.fixDomain(i).replace(/\\/\\w+.gif$/,\"\"),o=i+\"/eg.js\"}catch(t){}return o}}},function(t,e){\"use strict\";function n(t){return\"string\"==typeof t?t.replace(/^\\s+|\\s+$/g,\"\"):\"\"}e.trim=n},function(t,e){\"use strict\";t.exports={set:function(t,e){try{return localStorage.setItem(t,e),!0}catch(t){return!1}},get:function(t){try{return localStorage.getItem(t)}catch(t){return\"\"}},test:function(){var t=\"grey_test_key\";try{return localStorage.setItem(t,1),localStorage.removeItem(t),!0}catch(t){return!1}},remove:function(t){localStorage.removeItem(t)}}},function(t,e){e.stringfy=function(t){if(t)try{return JSON.stringify(t)}catch(t){}return\"\"},e.parse=function(t){if(t)try{return JSON.parse(t)}catch(t){}return null},e.parseToArray=function(t){if(t)try{return JSON.parse(t)}catch(t){}return[]}},function(t,e,n){\"use strict\";function a(t){var e,n,a,r=[],i=t.length;for(a=0;a0&&r(t.eventIds,function(n){e.push({eventId:n,samplingRate:t.samplingRate})})}),e}},function(t,e,n){\"use strict\";var a=n(35),o=\"[APLUS] -- \";e.logger=function(t){t||(t={});var e=t.level||\"warn\";console&&console[e]&&console[e](o+t.msg)},e.log=function(){var t=a&&a.getMetaInfo(\"debug\");t&&console.log.apply(console,[o].concat(Array.prototype.slice.apply(arguments)))},e.debugLog=function(t){var e=n(2).getGlobalValue(\"aplus\");e&&e.aplusDebug&&this.logger(t)}},function(t,e,n){\"use strict\";function a(){return i=g||{},g}function o(){return i||a()}function r(t,e){return i||(i={}),\"aplus-inject-record-gokey\"===t&&(m(\"the API aplus-inject-record-gokey is deprecated, if needed please concat APLUS SDK supporter\"),p.record(\"/inject.record.gokey\",\"OTHER\",\"\")),i[t]=e,!0}var i,s=n(36),u=n(27),c=n(2),l=n(3),p=c.getGlobalValue(l.APLUS),f=n(37),g={},d=\"object\",_=\"string\";e.getInfo=a,e.qGet=o,e.setMetaInfo=r;var m=function(t){try{console&&console.error(t)}catch(t){}};e.catchException=m;var h=function(t){return i||(i={}),i[t]||\"\"};e.getMetaInfo=h;var v=function(t){var e=h(\"aplus-inject-record-gokey\");return\"function\"==typeof e?e(t):t.gokey};e.getUserInjectGokey=v;var b=function(t,e){if(t&&e){var n,a=function(n){try{var a=typeof e===_?JSON.parse(e):e;i(t,Object.assign({},n,a))}catch(t){}},o=function(n){try{var a=typeof e===_?JSON.parse(e):e;i(t,n.concat(a))}catch(t){}},r=function(t){t.constructor===Array?o(t):a(t)},i=function(t,e){y(t,e,{from:\"appendMetaInfo\"})},s=h(t);if(\"aplus-exinfo\"===t&&(i(t,Object.assign({},s,u.param2obj(e))),n=!0),\"aplus-page-properties\"===t){var c=e;if(s)for(var l in s)e[l]?c[l]=Object.assign({},s[l],e[l]):c[l]=s[l];i(t,c),n=!0}if(s)if(typeof s===d)r(s),n=!0;else try{var p=JSON.parse(s);typeof p===d&&(r(p),n=!0)}catch(t){}n||i(t,e)}};e.appendMetaInfo=b;var y=function(t,e){var n,a,i=\"OVERWRITE\",u=i;if(\"object\"==typeof t?(n=t.metaName,a=t.metaValue,u=t.mode||i):(n=t,a=e),u!==i)return b(n,a);if(r(n,a)){var g=c.getGoldlogVal(\"_$\")||{};g.meta_info=o();var d=c.setGoldlogVal(\"_$\",g),_=[\"setMetaInfo\",n,a,{}];return s.doPubMsg(_),s.doCachePubs(_),p.globalConfig&&!p.globalConfig.isAli&&(n===l._ANONY_ID||n===l._DEV_ID||n===l._USER_ID?f.setStorageSync(n,a?a:\"\"):(!f.getStorageSync(l._ANONY_ID)&&g.meta_info[l._ANONY_ID]&&f.setStorageSync(l._ANONY_ID,g.meta_info[l._ANONY_ID]),!f.getStorageSync(l._DEV_ID)&&g.meta_info[l._DEV_ID]&&f.setStorageSync(l._DEV_ID,g.meta_info[l._DEV_ID]),!f.getStorageSync(l._USER_ID)&&g.meta_info[l._USER_ID]&&f.setStorageSync(l._USER_ID,g.meta_info[l._USER_ID]))),d}};e._setMetaInfo=y},function(t,e,n){\"use strict\";var a=n(2),o=\"function\",r=function(){var t=a.getGlobalValue(\"aplus\"),e=t.aplus_pubsub||{},n=typeof e.publish===o;return n?e:\"\"};e.doPubMsg=function(t){var e=r();e&&typeof e.publish===o&&e.publish.apply(e,t)},e.doCachePubs=function(t){var e=r();e&&typeof e.cachePubs===o&&e.cachePubs.apply(e,t)},e.doSubMsg=function(t,e){var n=r();n&&typeof n.subscribe===o&&n.subscribe(t,e)}},function(t,e,n){\"use strict\";function a(){if(\"boolean\"==typeof d)return d;var t=!1;try{var e=navigator?navigator.userAgent||navigator.swuserAgent:\"\";if(t=!!/AliApp/i.test(e),/(AliApp\\((AP|AMAP|UC|QUARK))|DingTalkIDE/i.test(e)&&(t=!1),/AlipayIDE Taobao/.test(e)&&(t=!0),t){var n=_().ctx;s(n.canIUse)&&(t=!!n.canIUse(\"callUserTrack\"))}}catch(t){}return d=t,t}function o(){return\"boolean\"==typeof d?!!d:a()}function r(t){t=f(t)?t:{};var e=t[\"Set-Cookie\"]||t[\"set-cookie\"]||\"\",n=g(e)?e:e.split(\",\"),a={};return l(n,function(t){var e=(t||\"\").split(\";\");l(e,function(t){if(/[a-z]+=/.test(t)&&!/(path|domain|expires)=/.test(t)){var e=t.split(\"=\"),n=e[0].trim(),o=e[1];a[n]=o}})}),a}function i(t){var e=[];return l(t,function(t,n){e.push(t+\"=\"+n)}),e.join(\"; \")}var s=n(9),u=n(2),c=n(33),l=n(18),p=n(3),f=n(19),g=n(38);e.getCurrentPage=function(){var t=getCurrentPages();return t[t.length-1]||{}},e.getReferrerPage=function(){var t=getCurrentPages();return t[t.length-2]||{}};var d;e.resetIsTB=function(t){d=t},e.initIsTB=a;var _=function(){try{return{ctx:dd,platType:\"dd\",sdkType:\"ddmp\",logDomain:\"/ddm_logs\"}}catch(t){try{return{ctx:my,platType:my&&my.tb?\"taobao\":\"my\",sdkType:my&&my.tb?\"taobaomp\":\"mymp\",logDomain:\"/alipaym_logs\"}}catch(t){try{return{ctx:tt,platType:\"tt\",sdkType:\"ttmp\",logDomain:\"/bytedancem_logs\"}}catch(t){try{return{ctx:swan,platType:\"bd\",sdkType:\"bdmp\",logDomain:\"/baidum_logs\"}}catch(t){try{return{ctx:xhs,platType:\"xhs\",sdkType:\"xhsmp\",logDomain:\"/xhsm_logs\"}}catch(t){try{return{ctx:wx,platType:\"wx\",sdkType:\"wxmp\",logDomain:\"/wxm_logs\"}}catch(t){return{ctx:{},platType:\"UNKNOW\",sdkType:\"UNKNOW\"}}}}}}}};e.isTB=o,e.getPlatformType=function(){return _().platType},e.getSdkType=function(){return _().sdkType},e.getContext=function(){return _().ctx},e.getLogDomain=function(){return _().logDomain};var m=\"httpRequest\",h=\"request\",v=function(){};e.request=function(t,e,n,a){var o=u.getGlobalValue(\"aplus\"),l=_().ctx;s(a)||(a=v),s(n)||(n=v);var g=e.requestMethodName||h,d=l[g];s(d)||g===h||(g=h,d=l[g]),s(d)||g===m||(g=m,d=l[g]);var b,y=e&&e.dataType?e.dataType:\"base64\",E=e&&e.timeout?e.timeout:3e3,S=e.method||\"GET\",A=o.getMetaInfo(p.APLUS_MINI_REQUEST_TIMEOUT);t=c.fixDomain(t);var T;if(s(d)){var P={url:t,method:S,header:{},dataType:y,timeout:A||E,success:function(t){var e=t.header||t.headers||{},a=r(e);o.appendMetaInfo(p.APLUS_COOKIES,a),b||(b=!0,n(t))},fail:function(t){b||(b=!0,a({failure:!0,data:t}))}},I=o.getMetaInfo(p.APLUS_COOKIES);if(f(I)){var w=i(I);w&&(P.header.cookie=w)}\"POST\"===S&&e.data&&(P.data=e.data);var M=o.getMetaInfo(\"aplus-request-extinfo\");\"object\"==typeof M&&(P._extInfo=M),d(P)}else b||(b=!0,a({failure:!0,data:T}));setTimeout(function(){b||(b=!0,T='aplus log request\"'+t+' timeout\", time spend'+E+\"ms\",console&&console.warn(T),a({failure:!0,data:T}))},E)},e.setStorageSync=function(t,e){try{var n=_().platType,a=_().ctx;\"my\"===n||\"taobao\"===n?a.setStorageSync({key:t,data:e}):a.setStorageSync(t,e)}catch(t){}},e.getStorageSync=function(t){try{var e=_().platType,n=_().ctx;return\"my\"===e||\"taobao\"===e?n.getStorageSync({key:t}).data:n.getStorageSync(t)}catch(t){}}},function(t,e){\"use strict\";t.exports=function(t){return Array.isArray?Array.isArray(t):\"[object Array]\"===Object.prototype.toString.call(t)}},function(t,e,n){\"use strict\";function a(t){if(!document)return\"\";var e=(document.cookie||\"\").match(new RegExp(\"(?:^|;)\\\\s*\"+t+\"=([^;]+)\"));return e?e[1]:\"\"}function o(t){var e=new Date,n=\"\";if(\"session\"===t.expires);else if(t.expires&&(\"number\"==typeof t.expires||t.expires.toUTCString))\"number\"==typeof t.expires?e.setTime(e.getTime()+24*t.expires*60*60*1e3):e=t.expires,n=\"expires=\"+e.toUTCString();else{var a=20;c.indexof([\"v.youku.com\",\"www.youku.com\",\"player.youku.com\"],location.hostname)>-1&&(a=1),e.setTime(e.getTime()+365*a*24*60*60*1e3),n=\"expires=\"+e.toUTCString()}return n}function r(t,e,n){if(document){n||(n={}),e+=\";\"+(n.expires||o(n)),e+=\"; path=\"+(n.path?n.path:\"/\"),e+=\"; domain=\"+n.domain,document.cookie=t+\"=\"+e;var r=0;try{var i=navigator.userAgent.match(/Chrome\\/\\d+/);i&&i[0]&&(r=i[0].split(\"/\")[1],r&&(r=parseInt(r)))}catch(t){}return n.SameSite&&r>=80&&(e+=\"; SameSite=\"+n.SameSite,e+=\"; Secure\",document.cookie=t+\"=\"+e),a(t)}}function i(t,e,n){try{if(!document)return\"\";if(n||(n={}),n.domain)r(t,e,n);else for(var a=u.getDomains(),o=0;o0&&e.indexOf(t)!==-1})}catch(o){for(var a=0;a0?u.param2obj(t.substring(0,l)):{};delete p[\"\"],i=u.obj2param(c.assign(p,o))+\"&\"+t.substring(l,t.length)}else i=u.obj2param(o)+\"&\"+n;return i}return a}catch(t){return a}}function r(){var t=aplus&&aplus._$?aplus._$:{},e=t.meta_info||{};return e[\"aplus-exparams\"]||\"\"}function i(){var t=l.getCurrentNode(),e=p.tryToGetAttribute(t,\"exparams\"),n=o(e,r())||\"\";return n&&n.replace(/&/g,\"&\").replace(/\\buser(i|I)d=/,\"uidaplus=\")}var s=n(18),u=n(27),c=n(28),l=n(44),p=n(23),f=n(41),g=n(20),d=n(3);e.mergeExparams=o,e.getExParams=i,e.getExparamsInfos=function(t,e){var n={},o=t||[\"uidaplus\",\"pc_i\",\"pu_i\"],r=i()||\"\";r=r.replace(/&aplus&/,\"&\");for(var s=a(r)||[],u=function(t){return f.indexof(o,t)>-1},c=0;c0&&c(s,function(t){t&&\"aplus-setting\"===t.id&&r.removeChild(t)})}r.appendChild(a)},e.isTouch=function(){return\"ontouchend\"in document.createElement(\"div\")},e.isEditableElement=function(t){for(;t&&\"HTML\"!==t.tagName;){var e=s.tryToGetAttribute(t,\"contenteditable\");if(\"true\"===e)return!0;t=t.parentNode}return!1},e.elementContains=function(t,e){if(t.contains)return t.contains(e)&&t!==e;if(t.compareDocumentPosition)return!!(16&t.compareDocumentPosition(e));for(;e=e.parentNode;)if(e===t)return!0;return!1}},function(t,e,n){\"use strict\";function a(t){var e=o.APLUS_CONFIG,n=window[e]||(window[e]={});return r(t)?n[t]:n}var o=n(3),r=n(46);e.getConfig=a,e.getPid=function(){return a(\"pid\")},e.getUserId=function(){var t=a(),e=t.userProfile||{};return e.uidaplus||t.uidaplus||t.userId||t.userid},e.getUserNick=function(){var t=a(),e=t.userProfile||{};return e.nick||t.nick||t.userNick||t.usernick}},function(t,e){function n(t){return\"[object String]\"===Object.prototype.toString.call(t)}t.exports=n},function(t,e){t.exports=function(t){return\"undefined\"==typeof t}},function(t,e,n){\"use strict\";var a=n(25).nameStorage;e.getRefer=function(t){return document.referrer||a.getItem(t.REFERRER)||\"\"}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){n(50)()}}}},function(t,e,n){\"use strict\";function a(){function t(t){var e=o.getGlobalValue(\"aplus_queue\"),n={path:t};e.push({action:\"aplus.aplus_pubsub.publish\",arguments:[i.APLUS_PAGE_CHANGE,n]})}var e=s._$||{},n=e.meta_info,a=n[i.APLUS_SPA_TYPE];\"history\"===a?r.watchHistoryChange(t):\"hash\"===a&&r.watchHashChange(t)}var o=n(2),r=n(17),i=n(3),s=o.getGlobalValue(\"aplus\");t.exports=function(){a()}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){n(52)()}}}},function(t,e,n){\"use strict\";function a(t){var e,n=i.getGlobalValue(\"aplus\"),a=!1,f=function(){a||(o.wrap(function(){e=p.getAutoClkConfig();var t;u(e)&&e.length>0&&(t=l.create({autoClkConfig:e}),t.init(),c.watch_clk()),n.aplus_pubsub.subscribe(\"setMetaInfo\",function(n,a,o){if(\"aplus-auto-clk\"===n){var r=p.getAutoClkConfig(a);if(JSON.stringify(r)===JSON.stringify(e))return;e=r,c.clear(),o||(o={from:\"setMetaInfo\"}),t&&t.clear(o),t&&t.clearDom({autoClkConfig:e},o),a&&(t?t.reset({autoClkConfig:e},o):(t=l.create({autoClkConfig:e}),t.init()),c.watch_clk())}})},\"do_init\"),a=!0)};setTimeout(function(){a||s().w(\"aplus_ac_init failed! please check whether aplusJs is loaded correctly!\")},5e3);var g=n._$||{},d=window.g_SPM||{};\"complete\"===g.status&&d.spm&&f();var _=i.getGlobalValue(\"aplus_queue\");_.push({action:r.SUBSCRIBE,arguments:[\"aplusReady\",function(t){\"complete\"===t&&f(\"aplusReady\")}]}),\"function\"==typeof t&&t()}var o=n(53),r=n(3),i=n(2),s=n(20),u=n(38),c=n(54),l=n(67),p=n(64);t.exports=function(){var t=i.getGlobalValue(\"aplus\");t._aplus_ac||(t._aplus_ac={status:\"init\",elementSelectorSizeMap:{}},a(function(){t._aplus_ac.status=\"complete\"}))}},function(t,e,n){\"use strict\";var a=n(2),o=function(t,e){var n=a.getGlobalValue(\"aplus_queue\",[]);n.push({action:\"aplus._aplus_cplugin_track_deb.monitor\",arguments:[{key:\"APLUS_PLUGIN_DEBUG\",title:\"aplus_core\",msg:[\"_error_:methodName=\"+e+\",params=\"+JSON.stringify(t)],type:\"updateMsg\",description:e||\"aplus_core\"}]})},r=function(t,e,n){var o=a.getGlobalValue(\"aplus_queue\",[]);o.push({action:[\"aplus\",\"_aplus_cplugin_m\",e].join(\".\"),arguments:[t,n]})};e.do_tracker_jserror=function(t,e){var n=\"do_tracker_jserror\";r(t,n,e),o(t,n);var i=a.getGlobalValue(\"aplus\");i&&i.aplusDebug&&console&&console.warn(t)},e.wrap=function(t){if(\"function\"==typeof t)try{t()}catch(t){o({msg:t.message||t},\"exception\")}finally{}}},function(t,e,n){\"use strict\";var a=n(41),o=n(23),r=n(44),i=n(2),s=n(28),u=n(55),c=n(18),l=n(9),p=n(38),f=n(56),g=n(58),d=n(64),_=window,m=[\"iframe\",\"html\",\"body\",\"head\"],h=d.DATA_APLUS_AC_KEY,v=function(t){var e=[],n=t?o.tryToGetAttribute(t,h):\"\";if(n){var a=i.getGoldlogVal(\"_aplus_ac\")||{},r=a._acHashMap||{};u(r,function(t,a){c(a,function(t){t.hash_value===n&&e.push(t.clkConfig)})})}return{clkConfigs:e,el:t}},b=function(t){for(var e=[];t&&a.indexof(m,t.tagName?t.tagName.toLowerCase():\"html\")===-1;){var n=v(t),o=!1;if(n&&n.clkConfigs&&n.clkConfigs.length>0&&(e.push(n),o=a.some(n.clkConfigs,function(t){return!t.enableEventBubble})),o)break;t=t.parentNode}return e},y=function(t){t=t||_.event;var e=t.target||t.srcElement,n=b(e)||{};p(n)&&c(n,function(n){var a=n.clkConfigs;n&&a&&n.el&&c(a,function(a){var o=a;e=n.el;var r=g.canRecord({target:e,gmkey:\"CLK\",config:o});if(r){var i=aplus.getElementSPM(e,o.eltype),u=\"\",c=[],p={},f=g.fillPropsData(o,e,p);f=g.fillFilterData(o,e,p),f=g.fillSpmData(o,e,p),f=s.assign(f,g.getDataTrackerParams(e)),aplus.globalConfig.isUM&&o.customArgs&&(f=s.assign(f,o.customArgs));var _=d.getAutoClkUserFn();if(_){var m=g.autoUserFnHandler(_,e,o.elementSelector,o,t);if(\"object\"==typeof m)\"object\"==typeof m.userdata&&(f=s.assign(f,m.userdata)),m.spm&&(i=m.spm),m.scm&&(u=m.scm);else if(m===!1)return}c.push(\"spm=\"+i),c.push(\"scm=\"+u);for(var h in f)c.push(h+\"=\"+f[h]);c.push(\"_is_auto_clk=1\");var v=o.method||\"POST\",b=g.getDefaultLogkey({target:e,config:o});g.isAutoLogLogkey(b)&&l(o.getLogkey)&&(b=o.getLogkey(e,f),c.push(\"_is_auto_logkey=1\")),aplus_queue.push({action:\"aplus.record\",arguments:[b,\"CLK\",c.join(\"&\"),v]})}})})};e.watch_clk=function(){r.isTouch()?f.on(document,\"tap\",y):f.on(document,\"mousedown\",y)},e.clear=function(){r.isTouch()?f.un(document,\"tap\",y):f.un(document,\"mousedown\",y)}},function(t,e){\"use strict\";t.exports=function(t,e){if(Object&&Object.keys)for(var n=Object.keys(t),a=n.length,o=0;o10&&(a.status=\"panning\")}}function i(t){for(var e=0;e0)for(var n=0;n0?i[0].trim():\"\",u=i.length>1?i[1].trim():\"\",c=0;c0)for(var r=0;r0)};e.isPkgSize=C,e.filterExpConfigRequestCfg=function(t){var e=E.getDefaultRequestCfg()||{};try{var n=t||{};x(n.method)&&(e.method=n.method),C(n.pkgSize)&&(e.pkgSize=parseInt(n.pkgSize))}catch(t){s().w(t&&t.message)}return e};var L=function(t){var e=t.split(\"&\"),n={};return e.length>0&&l(e,function(t){var e=t.split(\"=\");2===e.length&&(n[e[0]]=f.tryToEncodeURIComponent(e[1]))}),n};e.autoUserFnHandler=function(t,e,n,a,o){var r={userdata:{},spm:\"\",scm:\"\"};try{var i=t(e,n,a,o);i&&(\"string\"==typeof i?r.userdata=L(i):\"object\"==typeof i&&\"object\"==typeof i.userdata&&(p(i.userdata,function(t,e){A.globalConfig&&A.globalConfig.isUM?r.userdata[t]=e:r.userdata[t]=f.tryToEncodeURIComponent(e)}),r.spm=i.spm,r.scm=i.scm))}catch(t){s().w(t)}return r};var O=function(t,e){var n=\"\";if(t&&e){var a=[];d(e.filter)&&a.push(t.getAttribute(e.filter));var o=e.props||[];l(o,function(e){d(e)?a.push(t.getAttribute(e)):m(e)&&e.source===S.ATTRIBUTES&&d(e.from)&&a.push(t.getAttribute(e.from))}),n=a.join(\"_\")}return n},U=function(t){var e=t.getAttribute(\"data-spm-anchor-id\");if(e){var n=e.split(\".\");return{a:n[0],b:n[1],c:n[2],d:n[3],e:n[4]}}};e.getSpmObj=U,e.getElementHash=function(t,e){var n={};\"aplus_webvt\"!==t.source&&(n=U(e.ele)||(window.g_SPM?window.g_SPM.getParam(e.ele):{}));var a=\"\",o=\"x\"+e.index;if(n.a&&n.b&&n.c&&n.d){var r=/^i/.test(n.d)?o:n.d;a=n.a+\"_\"+n.b+\"_\"+n.c+\"_\"+r,n.e&&(a+=\"_\"+n.e)}else a=o,A.pvid&&(a+=A.pvid);e.ignore_attr||(a+=t.logkey+\"_\",a+=t.elementSelector+\"_\",a+=O(e.ele,t));var i=o+\"_\"+u.hash(a);return i},e.filterUnloadAttr=function(t){return t&&(t=t.replace(/(href|style|data-spm-anchor-id)=[\\'|\\\"][\\w|\\W|\\.]+[\\'|\\\"]/,\"\"),t=t.replace(/\\s\\>/g,\">\"),t=t.replace(new RegExp(E.DATA_APLUS_AE_KEY+\"=[\\\\'|\\\\\\\"]\\\\w+[\\\\'|\\\\\\\"]\"),\"\"),t=t.replace(new RegExp(E.DATA_APLUS_AC_KEY+\"=[\\\\'|\\\\\\\"]\\\\w+[\\\\'|\\\\\\\"]\"),\"\")),t};var k=function(t,e){for(var n,a=0,o=t.length;a-1?u.splice(l,1):\"UPDATE\"===n&&(u=k(u,e)),s[t]=u,r._acHashMap=s,i.setGoldlogVal(o,r)}};e.updateExpHashMap=function(t,e,n){R(t,e,n,\"_aplus_auto_exp\")},e.updateClkHashMap=function(t,e,n){R(t,e,n,\"_aplus_ac\")},e.throttle=y,e.checkIsInHashMap=function(t){var e=i.getGoldlogVal(t.aplusKey)||{},n=e.hash_value||{},a=n[t.logkey]||{},o=a[t.hash_value];if(o>1)return!0;for(var r=e._acHashMap||{},s=r[t.logkey]||[],u=s.length,c=0;c=0;n--)a=t.charCodeAt(n),r^=(r<<5)+a+(r>>2);var i=(2147483647&r).toString(16);return i}},function(t,e){\"use strict\";t.exports=function(t){var e,n,a,o,r,i,s=document.getElementsByTagName(\"*\");for(e=[];t&&1==t.nodeType;t=t.parentNode)if(t.id){for(i=t.id,o=0,n=0;ne?(o&&(clearTimeout(o),o=null),u=l,s=t.apply(r,i),o||(r=i=null)):o||a.trailing===!1||(o=setTimeout(c,p)),s};return l.cancel=function(){clearTimeout(o),u=0,o=r=i=null},l}},function(t,e,n){\"use strict\";function a(t){return E&&E.getMetaInfo?E.getMetaInfo(t):p.getMetaCnt(t)}function o(){return\"on\"===a(\"aplus-auto-track-config-import\")}function r(t){for(var e=\"\",n=[\"alt\",\"title\",\"placeholder\",\"src\"],a=0;a-1?\"button\":r||n}else a=\"select\"===n?\"select\":n;return g([{key:\"feature\",value:a},{key:\"text\",value:o}],function(e){var n=e.key,a=e.value;!m(a)&&m(t[n])&&(t[n]=a)}),t.xpath=b(e),t}}})});var u=[];return g(s,function(e){var n=e.scope||[];n.indexOf(t)>-1&&u.push(e.config)}),E[a]=u,u}var u=n(2),c=n(41),l=n(23),p=n(22),f=n(20),g=n(18),d=n(38),_=n(46),m=n(65),h=n(3),v=n(59),b=n(60),y=n(66),E=u.getGlobalValue(\"aplus\");e.DATA_APLUS_AE_KEY=\"data-aplus-ae\",e.DATA_APLUS_AC_KEY=\"data-aplus-clk\",e.DATA_APLUS_SPM_ANCHOR_ID_KEY=\"data-spm-anchor-id\",e.DATA_APLUS_VT_ITEM_INDEX_KEY=\"data-aplus-vt-pos\",e.LOOP_TIME=1e3,e.getDefaultRequestCfg=function(){return{method:\"POST\",pkgSize:10}};var S=function(t){var e=t;try{var n=a(\"aplus-auto-exp-visible\");n&&(e=parseFloat(n)),e<=0&&(e=t)}catch(n){e=t}finally{return e}};e.AUTO_AT_VIEW_RATE=S(.3);var A=function(t){var e=t;try{var n=a(\"aplus-auto-exp-duration\"),o=parseInt(n);o+\"\"!=\"NaN\"&&(e=o)}catch(t){}finally{return e}};e.EXP_DURATION=A(300);var T=function(t,e){var n,o=[],r=[],i=[];try{n=e||a(t);var u=[];if(n&&\"string\"==typeof n)try{u=JSON.parse(n)}catch(t){u=JSON.parse(n.replace(/'/g,'\"'))}else\"object\"==typeof n&&n.constructor===Array&&(u=n);if(d(u)){var l=s(t);u=u.concat(l);for(var p=0;p=2?E+=\"[\"+v.shift()+'=\"'+decodeURIComponent(v.join(\"\"))+'\"]':1==v.length&&v[0]&&(E+=\"[\"+decodeURIComponent(v[0])+\"]\"),b&&(E+=b),g.elementSelector=E,c.indexof(i,E)>-1)throw new Error(\"meta \"+t+\" config error, tag_filter_cssSelector \"+E+\" repeated\");i.push(E),g.enableMultipleConfig?r.push(g):o.push(g)}}}catch(t){f().w(t)}finally{var S=[].concat(o,r);return S}};e.getAutoExpConfig=function(t){return T(\"aplus-auto-exp\",t)||[]},e.getAutoExpUserFn=function(){var t=a(\"aplus-auto-exp-userfn\");if(t){var e=window[t]||t;if(\"function\"==typeof e)return e}return null},e.isThrottleWatchDom=function(){var t=!1;try{t=\"throttle\"===a(\"aplus-auto-exp-watchdom\")}catch(t){}return t},e.getAutoClkConfig=function(t){return T(\"aplus-auto-clk\",t)||[]},e.getAutoClkUserFn=function(){var t=a(\"aplus-auto-clk-userfn\");if(t){var e=window[t]||t;if(\"function\"==typeof e)return e}return null}},function(t,e){\"use strict\";t.exports=function(t){return null===t||\"undefined\"==typeof t}},function(t,e,n){\"use strict\";var a=n(9);t.exports=function(t,e){if(t){var n=t.style||{};return a(window.getComputedStyle)&&(n=window.getComputedStyle(t)||{}),n[e]}}},function(t,e,n){\"use strict\";var a=n(10),o=n(53),r=n(20),i=n(56),s=n(58),u=n(64),c=window,l=document,p=a.extend({updateHashMapAndElementHashTag:function(t){var e=t.clkConfig,n=t.hash_value,a=t.element,o=t.isUpdateElementHashTag,r=e.logkey||\"\";if(!s.checkIsInHashMap({logkey:r,hash_value:n,aplusKey:\"_aplus_ac\"})){var i={clkConfig:e,hash_value:n,element:a,status:0,elementSelector:e.elementSelector};s.updateClkHashMap(r,i,\"ADD\"),o&&s.setRecordSuccess(i,u.DATA_APLUS_AC_KEY)}},eachElements:function(t,e){for(var n=this,a=0;a0)e.enableMultipleConfig&&n.updateHashMapAndElementHashTag({clkConfig:e,hash_value:r,element:o,isUpdateElementHashTag:!1});else{isNaN(parseInt(r))&&(r=aplus._aplus_ac.elementSelectorSizeMap[e.elementSelector]++,o.setAttribute(u.DATA_APLUS_AC_KEY,r)),!aplus.globalConfig.isAli&&e.spmB&&e.spmC&&e.spmD&&(o.setAttribute(u.DATA_APLUS_SPM_ANCHOR_ID_KEY,[e.spmB,e.spmC,e.spmD+\"_\"+(a+1)].join(\".\")),o.setAttribute(u.DATA_APLUS_VT_ITEM_INDEX_KEY,\"\"+(a+1)));var i=s.getElementHash(e,{ignore_attr:!1,index:r,ele:o});n.updateHashMapAndElementHashTag({clkConfig:e,hash_value:i,element:o,isUpdateElementHashTag:!0})}}},handler_dom_change:function(){s.clearInvalidElements(\"_aplus_ac\");for(var t=this,e=t.autoClkConfig||[],n=0;n0&&a(e),n.aplus_pubsub.subscribe(\"setMetaInfo\",function(t,n,r){if(\"aplus-auto-exp\"===t){m().w(\"aplus-auto-exp metaVaue change: \"+JSON.stringify(n));var i=l.getAutoExpConfig(n);if(JSON.stringify(i)===JSON.stringify(e))return;e=i,r||(r={from:\"setMetaInfo\"}),o(e,r,p),n&&e&&e.length>0&&a(e,r)}})},\"do_init\"),r=!0))};setTimeout(function(){r||m().w(\"aplus_auto_exp_init failed! please check whether aplusJs is loaded correctly!\")},5e3);var u=n._$||{},c=window.g_SPM||{};\"complete\"===u.status&&c.spm&&s();var _=d.getGlobalValue(\"aplus_queue\");_.push({action:g.SUBSCRIBE,arguments:[\"aplusReady\",function(t){\"complete\"===t&&s(\"aplusReady\")}]}),\"function\"==typeof t&&t()}var s,u,c,l,p,f=n(53),g=n(3),d=n(2),_=n(17),m=n(20);t.exports=function(){var t=d.getGlobalValue(\"aplus\");if(!t._aplus_auto_exp&&(t._aplus_auto_exp={tags:{},status:\"init\",exp_times:0,elementSelectorSizeMap:{}},r(),i(function(){t._aplus_auto_exp.status=\"complete\"}),t&&!t.globalConfig.isAli)){var e=d.getGlobalValue(\"aplus_queue\");e.push({action:g.SUBSCRIBE,arguments:[\"aplusReady\",function(e){if(\"complete\"===e)try{var n=t.getMetaInfo(g.APLUS_EXPOSURE_EVENT_CAN_REPEAT);n&&(_.watchHistoryChange(function(){var t=l.getAutoExpConfig()||[];o(t,{from:\"routeChange\"}),a(t,{from:\"routerChange\"})}),_.watchHashChange(function(){var t=l.getAutoExpConfig()||[];o(t,{from:\"routeChange\"}),a(t,{from:\"routerChange\"})}))}catch(t){}}]})}}},function(t,e,n){\"use strict\";var a=n(10),o=n(53),r=n(20),i=n(2),s=n(3),u=n(58),c=n(64),l=n(56),p=n(71),f=window,g=document,d=a.extend({hasExpEventSendTag:function(t){return!!(t&&t.indexOf(\"_\")>0)},eachElements:function(t,e){for(var n=e.logkey||\"\",a=0;a-1?[t.target]:\"childList\"!==t.type?[]:void 0},l=function(t,a){if(t&&t.length>0)for(var r=0;r0)for(var n=0;n=t.pLeftTop[0]&&e.x<=t.pRightBottom[0]&&e.y>=t.pLeftTop[1]&&e.y<=t.pRightBottom[1]},o=function(t,e){var n=0,o=a(t,e),r=a(t,{x:e.x+e.width,y:e.y}),i=a(t,{x:e.x,y:e.y+e.height}),s=a(t,{x:e.x+e.width,y:e.y+e.height}),u=function(){var t=0;return o&&s&&(t=e.size/e.size),t},c=function(){var n=0,a=0;return o&&r&&!i&&!s?(n=e.width,a=t.pLeftBottom[1]-e.y):!o&&r&&!i&&s?(n=t.pLeftTop[0]-e.x,a=e.y):!o&&!r&&i&&s?(n=e.width,a=e.height-Math.abs(t.pLeftTop[1]-e.y)):o&&!r&&i&&!s&&(n=t.pRightTop[0]-e.x,a=e.height),e.size>0?Math.abs(n*a)/e.size:0},l=function(){var n=0,a=0;return!o||r||i||s?o||!r||i||s?o||r||!i||s?o||r||i||!s||(n=t.pLeftTop[0]-e.x,a=t.pLeftTop[1]-e.y):(n=t.pRightTop[0]-e.x,a=t.pRightTop[1]-e.y):(n=t.pLeftBottom[0]-e.x,a=t.pLeftBottom[1]-e.y):(n=t.pRightBottom[0]-e.x,a=t.pRightBottom[1]-e.y),e.size>0?Math.abs(n*a)/e.size:0};return n=u(),n>0?n:(n=c(),n>0?n:(n=l(),n>0?n:n))};e.wrapViewabilityRate=function(t,e,n){var a=0;if(t)for(var r=0;r=n)return a;return a}},function(t,e,n){\"use strict\";function a(t,e,n){var a=p.getWinPositions(),o=0,r=u.getGoldlogVal(\"_aplus_auto_exp\")||{},i=r._acHashMap||{};for(var c in i)for(var l=i[c]||[],m=0;m=d;if(A||S>=_){h.exposureTime=t,h.status=1;var T=f.getAutoExpUserFn();T&&(h.userParams=g.autoUserFnHandler(T,h.element,h.elementSelector,h.expConfig)),h.viewabilityRate=A?e.intersectionRatio:S,h.viewability=A?\"intersection\":\"fillwindow\",f.EXP_DURATION||(h.status=2),g.updateExpHashMap(c,h,\"UPDATE\"),++o}else S&&g.updateExpHashMap(c,s.assign(l[m],{lastEventType:h.eventType}),\"UPDATE\")}}}}return o}function o(t,e){var n=\"APLUS_AE_EXPOSURE_CHANGE\",o=t&&t.type?t.type:\"IObserver\",r=(new Date).getTime(),i=0;i=e?l.filterStartExposureSize(r,t):a(r,t),i>0&&(f.EXP_DURATION?setTimeout(function(){i=l.filterEndExposureSize(r,o),i>0&&aplus.aplus_pubsub.publish(n,{size:i,eventType:o})},f.EXP_DURATION):aplus.aplus_pubsub.publish(n,{size:i,eventType:o}))}function r(t){var e={root:null,rootMargin:\"0px\",threshold:d};return new h(function(t){c(t,function(t){t.intersectionRatio>0&&o(t)})},s.assign(e,t))}function i(t){if(h){v.io_base||(v.io_base=r());var e=u.getGoldlogVal(\"_aplus_auto_exp\")||{},n=e._acHashMap||{};for(var a in n)for(var o=n[a]||[],i=0;i=u,E=b;v&&(E=r.wrapViewabilityRate(a,m,u));var S=m.width*m.height*E,A=r.getViewabilityRateInWindow(a,S,c),T=r.checkIsRecord(m.element,m.hash_value,\"_aplus_auto_exp\");if((y||A>=c)&&!T){m.exposureTime=t,m.status=1;var P=i.getAutoExpUserFn();P&&(m.userParams=s.autoUserFnHandler(P,m.element,m.elementSelector,m.expConfig)),i.EXP_DURATION||(m.viewabilityRate=y?b:A,m.viewability=y?\"intersection\":\"fillwindow\",m.status=2),s.updateExpHashMap(g,m,\"UPDATE\"),++n}}}}return n},e.filterEndExposureSize=function(t,e){var n=0;a||(a=r.getWinPositions());var i=o.getGoldlogVal(\"_aplus_auto_exp\")||{},c=i._acHashMap||{};for(var l in c)for(var p=c[l]||[],f=0;f0&&(i.EXP_DURATION?setTimeout(function(){r=o.filterEndExposureSize(a,n),r>0&&aplus.aplus_pubsub.publish(e,{size:r,eventType:n})},i.EXP_DURATION):aplus.aplus_pubsub.publish(e,{size:r,eventType:n}))},u=r.throttle(function(t){s(t)},100),c={},l=function(t,e){if(t&&t.forEach&&Object.keys&&document.querySelector){t.forEach(function(t){t.positionSelector&&document.querySelector(t.positionSelector)&&(c[t.positionSelector]=!0)});var n=Object.keys(c);n.forEach(function(t){a[e]&&a[e](document.querySelector(t),\"scroll\",function(t){u(t)})})}};e.watch_exposure_change=function(t){aplus.aplus_pubsub.subscribe(\"APLUS_AE_DOM_CHANGE\",s),a.on(window,\"touchmove\",u),a.on(window,\"scroll\",u),a.on(window,\"resize\",s),l(t,\"on\")},e.clear=function(t){a.un(window,\"touchmove\",u),a.un(window,\"scroll\",u),a.un(window,\"resize\",s),l(t,\"un\")}},function(t,e,n){\"use strict\";function a(t,e,n){var a=\"0\";if(n){if(\"spmc\"===t){var o=n.split(\".\");a=o[2]?o[2]:o[3],/^(\\i|\\d)[0-9]+$/.test(a)&&(a=\"0\"),n=[o[0],o[1],a].join(\".\")}}else n=aplus.getElementSPM(e,t);return n}function o(){i||(i=!0,aplus.on(window,\"beforeunload\",function(){clearInterval(r);for(var t=0;t0;)_.updateExpHashMap(e,a.pop(),\"CLEAR\")})},y=[],E=function(){r=setInterval(function(){y.length>0?aplus_queue.push(y.pop()):(clearInterval(r),r=null)},200)},S=function(t,e,n){var a=t.logkeyContainer||[],o=t.request_cfg||{};s.wrap(function(){p(a,function(t,a){var r=_.isCombineRecordLogkey(t);if(g(a)&&a.length>0){for(var i=0;i0){r||E();var e=h()||{};S(e,t,b)}};e.watch_data_change=function(){aplus.aplus_pubsub.subscribe(\"APLUS_AE_EXPOSURE_CHANGE\",A),o()},e.clear=function(){aplus.aplus_pubsub.unsubscribe(\"APLUS_AE_EXPOSURE_CHANGE\",A)}},function(t,e,n){\"use strict\";var a=n(77),o=n(3),r=n(25).nameStorage,i=n(48);t.exports=function(){return{recordValInWindowName:function(){var t,e,n=o.HTTPS==location.protocol,a=aplus.globalConfig.NAMESTORAGE_KEYS||{},s=parent!==self;if(!s&&n){var u=location.href,c=n&&(u.indexOf(\"login.taobao.com\")>=0||u.indexOf(\"login.tmall.com\")>=0),l=i.getRefer(a);c&&l?(t=l,e=r.getItem(a.REFERRER_PV_ID)):(t=u,e=aplus.pvid),r.setItem(a.REFERRER,t),r.setItem(a.REFERRER_PV_ID,e)}},run:function(){var t=this;a.on(window,\"beforeunload\",function(){t.recordValInWindowName()})}}}},function(t,e,n){\"use strict\";function a(t,e,n){var a=aplus._$||{},o=a.meta_info||{},r=o.aplus_ctap||{},i=o[\"aplus-touch\"];if(r&&\"function\"==typeof r.on)r.on(t,e);else{var s=\"ontouchend\"in document.createElement(\"div\");!s||\"tap\"!==i&&\"tapSpm\"!==n&&\"tap\"!==n?u(t,s?\"touchstart\":\"mousedown\",e):l.on(t,e)}}function o(t){try{document.documentElement.doScroll(\"left\")}catch(e){return void setTimeout(function(){o(t)},1)}t()}function r(t){var e=0,n=function(){0===e&&t(),e++};\"complete\"===document.readyState&&n();var a;if(document.addEventListener)a=function(){document.removeEventListener(\"DOMContentLoaded\",a,!1),n()},document.addEventListener(\"DOMContentLoaded\",a,!1),window.addEventListener(\"load\",n,!1);else if(document.attachEvent){a=function(){\"complete\"===document.readyState&&(document.detachEvent(\"onreadystatechange\",a),n())},document.attachEvent(\"onreadystatechange\",a),window.attachEvent(\"onload\",n);var r=!1;try{r=null===window.frameElement}catch(t){}document.documentElement.doScroll&&r&&o(n)}}function i(t){\"complete\"===document.readyState?t():u(window,\"load\",t)}function s(t){var e=history[t];return function(){var n;try{n=new Event(t),n.arguments=arguments}catch(e){n=document.createEvent(\"Event\"),n.initEvent(t,!0,!0)}window.dispatchEvent(n);var a=e.apply(this,arguments);return a}}function u(){var t=window,e=arguments;if(2===e.length)\"DOMReady\"===e[0]&&r(e[1]),\"onload\"===e[0]&&i(e[1]);else if(3===e.length){var n=e[0],o=e[1],u=e[2];if(\"tap\"===o||\"tapSpm\"===o)a(n,u,o);else{[\"pushState\",\"replaceState\"].indexOf(o)>-1&&(history[o]=s(o));var l=document.attachEvent?\"attachEvent\":\"addEventListener\",p=!!document.attachEvent;n[l]((p?\"on\":\"\")+o,function(e){e=e||t.event;var n=e.target||e.srcElement;\"function\"==typeof u&&u(e,n)},!!c(o)&&{passive:!0})}}}var c=n(78),l=n(57);e.DOMReady=r,e.onload=i,e.on=u},function(t,e){var n;t.exports=function(t){if(\"boolean\"==typeof n)return n;if(!/touch|mouse|scroll|wheel/i.test(t))return!1;n=!1;try{var e=Object.defineProperty({},\"passive\",{get:function(){n=!0}});window.addEventListener(\"test\",null,e)}catch(t){}return n}},function(t,e,n){\"use strict\";var a=n(77),o=n(80);t.exports=function(){return{do_tracker_lostpv:function(t){if(t&&t.page){var e=t.spm_ab?t.spm_ab.split(\".\"):[],n=navigator&&navigator.sendBeacon?\"post\":\"get\",a=\"record_lostpv_by\"+n+\"_\"+t.msg,r=new o({ratio:t.ratio||this.options.config.lostPvRecordRatio});r.run({code:102,page:t.page,msg:a,spm_a:e[0],spm_b:e[1],c1:t.duration,c2:t.page_url})}},recordLostPv:function(t){var e=window.aplus||{},n=e._$=e._$||{},a=e.spm_ab?e.spm_ab.join(\".\"):\"0.0\",o=n.send_pv_count||0;if(o<1&&navigator&&navigator.sendBeacon){var r=location.hostname+location.pathname;this.do_tracker_lostpv({page:r,page_url:location.protocol+\"//\"+r,duration:t,spm_ab:a,msg:\"dom_state=\"+document.readyState\n})}},run:function(){var t=this,e=new Date;a.on(window,\"beforeunload\",function(){var n=new Date,a=n.getTime()-e.getTime();t.recordLostPv(a)})}}}},function(t,e,n){var a=n(27),o=n(28),r=n(34),i={ratio:1,logkey:\"fsp.1.1\",gmkey:\"\",chksum:\"H46747615\"},s=function(t){t&&\"object\"==typeof t||(t=i),this.opts=t,this.opts.ratio=t.ratio||i.ratio,this.opts.logkey=t.logkey||i.logkey,this.opts.gmkey=t.gmkey||i.gmkey,this.opts.chksum=t.chksum||i.chksum},u=s.prototype;u.getRandom=function(){return Math.floor(100*Math.random())+1},u.run=function(t,e){var n,i,s={pid:\"aplus\",code:101,msg:\"\u5f02\u5e38\u5185\u5bb9\"},u=\"\";try{var c=window.aplus||{},l=c._$||{},p=l.meta_info||{},f=parseFloat(p[\"aplus-tracker-rate\"]);if(n=this.opts||{},\"number\"==typeof f&&f+\"\"!=\"NaN\"||(f=n.ratio),i=this.getRandom(),e||i<=100*f){u=\"//gm.mmstat.com/\"+n.logkey,t.rel=c.globalConfig.script_name+\"@\"+c.globalConfig.lver,t.type=t.code,t.uid=encodeURIComponent(c.getCookieCna(\"cna\")),t=o.assign(s,t);var g=a.obj2param(t);c.tracker=c.send(u,{cache:o.makeCacheNum(),gokey:g,logtype:\"2\"},\"POST\")}}catch(t){r.logger({msg:\"tracker.run() exec error: \"+t})}},t.exports=s},function(t,e,n){\"use strict\";var a=n(2);t.exports=function(){return{run:function(){var t=a.getGlobalValue(\"aplus\"),e=a.getGlobalValue(\"aplus_queue\");if(!t._aplus_cplugin_m){var o=this.options.config;t._aplus_cplugin_m=n(82).run(o),[\"www.taobao.com\",\"detail.tmall.com\",\"item.taobao.com\"].indexOf(location.hostname)>-1&&(e.push({action:\"aplus.record\",arguments:[\"/aplus.monitor.log_arrival_rate\",\"OTHER\",{requestType:\"imgGet\"},\"GET\"]}),e.push({action:\"aplus.record\",arguments:[\"/aplus.monitor.log_arrival_rate\",\"OTHER\",{requestType:\"sendBeaconPost\"},\"POST\"]}))}}}}},function(t,e,n){\"use strict\";var a=n(34),o=n(80),r=navigator&&navigator.sendBeacon?\"post\":\"get\";e.run=function(t){return{status:\"complete\",do_tracker_jserror:function(e){try{var n=new o({logkey:e?e.logkey:\"\",ratio:e&&\"number\"==typeof e.ratio&&e.ratio>0?e.ratio:t.jsErrorRecordRatio}),i=[\"Message: \"+e.message,\"Error object: \"+e.error].join(\" - \"),s=aplus.spm_ab||[],u=location?location.hostname+location.pathname:\"\";n.run({code:110,page:u,msg:\"record_jserror_by\"+r+\"_\"+e.message,spm_a:s[0],spm_b:s[1],c1:i,c2:e.filename,c3:location?location.protocol+\"//\"+u:\"\"})}catch(t){a.logger({msg:t})}},do_tracker_browser_support:function(e){var n=!1;try{if(e&&e.page){var i=e.spm_ab?e.spm_ab.split(\".\"):[],s=new o({ratio:e.ratio||t.browserSupportRatio}),u=aplus._aplus_client||{},c=u.ua_info||{};s.run({code:111,page:e.page,msg:e.msg+\"_by\"+r,spm_a:i[0],spm_b:i[1],c1:[c.o,c.b,c.w].join(\"_\"),c2:e.etag||\"\",c3:e.cna||\"\"}),n=!0}}catch(t){a.logger({msg:t})}return n}}}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){var t=n(84),e=t.create({WS:null,format:\"ALI\"});e.run(this.options)}}}},function(t,e,n){\"use strict\";var a=n(10),o=n(85),r=n(21),i=n(3),s=n(2),u=s.getGlobalValue(\"aplus\");t.exports=a.extend({subscribeLogs:function(t,e){var n=this;r.pushIntoGoldlogQueue(i.SUBSCRIBE,[t,function(t){t.status===i.COMPLETE&&n._canSendToGroup()&&e(t)}])},getLogicSymbol:function(){return\"ALI\"===this.format?\"&\":\"||\"},watchLOG:function(){var t=this,e=function(t,e){var n=u.getMetaInfo(i.APLUS_BRIDGE_NAME);if(!n){var a,r=o.getHttpBasicParams(t.what_to_send.logdata),s=t.where_to_send.method,c=u.getMetaInfo(\"aplus-first-tracking\"),l=s;\"POST\"===s&&navigator&&navigator.sendBeacon?(l=\"POST\",a=\"pv\"===e?r.objStr:JSON.stringify(r.obj)):(l=\"GET\",a=r.objStr),c&&\"pv\"===e&&u.send(t.where_to_send.url,r.objStr.replace(/a21dvn\\.b28762401\\.0\\.0/,\"a1z1d1.26790227.0.0\"),\"GET\"),u.send(t.where_to_send.url,a,l)}};t.subscribeLogs(\"mw_change_pv\",function(t){e(t,\"pv\")}),t.subscribeLogs(\"mw_change_hjlj\",function(t){e(t,\"aplus\")})},_canSendToGroup:function(){var t=u.getMetaInfo(i.APLUS_LOG_PIPE);return\"\"===t||/ALIGROUP/.test(t)},run:function(){this.watchLOG()}})},function(t,e,n){\"use strict\";function a(t,e){var n=t.client||{},a=n.screenWidth||\"\",o=n.screenHeight||\"\",r=a+e+o;return a&&o?r:\"-\"}function o(t,e){return _(e,function(e){delete t[e]}),t}function r(){if(\"boolean\"!=typeof h){var t=navigator.userAgent;h=/Trident/.test(t)}return h}function i(t,e){var n=g.cloneDeep(t.gokey);return n.cache=t.cache,n=g.assign(n,t.sdk_info),n=g.assign(n,t.client),n=g.assign(n,t.etag),delete n.egUrl,n=o(n,[\"userAgent\",\"pvid\",\"cna\",\"screenWidth\",\"screenHeight\"]),n._g_encode||(n._g_encode=\"utf-8\"),f.encodeGokeyValue(g.cloneDeep(n))}function s(t,e){return v(t,[[p.SPM_CNT,e[p.SPM_CNT]],[p.SPM_URL,e[p.SPM_URL]],[p.SPM_PRE,e[p.SPM_PRE]]]),t}function u(t,e){var n=t;if(t.indexOf(\"uidaplus=\")>-1){var a=t.split(\"uidaplus=\");if(\"&\"===a[1][0])n=t.replace(/uidaplus=/,\"uidaplus=\"+e);else{var o=a[1].split(\"&\");o[0]=e,n=a[0]+\"uidaplus=\"+o.join(\"&\")}}else n=\"uidaplus=\"+e+\"&\"+t;return n}function c(t){var e=d.getGoldlogVal(\"_$\")||{},n=e.meta_info||{},o=t.logtype,c=n[\"aplus-ifr-pv\"]+\"\"==\"1\",l=parent!==self;o=l&&!c?\"0\":\"1\";var g=[[\"logtype\",o],[\"title\",t.title],[\"pre\",t.pre],[\"scr\",a(t,\"x\")]];r()||g.push([\"_p_url\",t.url]),v(g,[[f.s_plain_obj,\"cna=\"+t.cna],[\"nick\",t._user_nick],[\"wm_pageid\",n.ms_data_page_id],[\"wm_prototypeid\",n.ms_prototype_id],[\"wm_sid\",n.ms_data_shop_id]]),g=s(g,t.gokey||{});var _=t.exparams||\"\",h=m.getUserId();h&&(_=u(_,h)),_.indexOf(\"&aplus&\")===-1?g.push([f.s_plain_obj,\"uidaplus=\"+h+\"&\"+p.APLUS]):g.push([f.s_plain_obj,_]);var b=i(t,\"PV\");for(var y in b)v(g,[[y,b[y]]]);var E=f.arr2param(g);return{objStr:E,obj:f.param2obj(E)}}function l(t){var e=[[\"gmkey\",t.gmkey]],n=i(t,\"LOG\");v(e,[[\"gokey\",f.obj2param(n)],[f.s_plain_obj,\"cna=\"+t.cna]]),e=s(e,t.gokey||{});var a=m.getUserId();v(e,[[\"_gr_uid_\",a],[\"uidaplus\",a],[\"logtype\",t.logtype],[\"nick\",t._user_nick],[\"scr\",t.client.scr]]),n._isCombine&&e.push([\"_isCombine\",1]),r()||e.push([\"_p_url\",t.url]);var o=f.arr2param(e);return{objStr:o,obj:f.param2obj(o)}}var p=n(3),f=n(27),g=n(28),d=n(2),_=n(18),m=n(42);e.getKeyIndex=function(t){var e={protocol:1,event_args:25};return e[t]};var h,v=function(t,e){var n,a,o,r,i=e.length;for(n=0;n=0;return(r?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,o)).toString().substr(1)+a}e.getFormatDate=function(t){var e=new Date;try{return[e.getFullYear(),n(e.getMonth()+1,2,0),n(e.getDate(),2,0)].join(t||\"\")}catch(t){return\"\"}}},function(t,e,n){\"use strict\";var a=n(29);e.getUrl=function(t){var e=a.getUrl(t&&t.egUrl);return e}},function(t,e,n){\"use strict\";function a(t,e){if(\"dynamics\"===e){var n=[\"gm.mmstat.com\",\"wgo.mmstat.com\"];return n.indexOf(t)>-1?\"d-\"+t:t}}function o(t){function e(){var t=r.getGlobalValue(\"aplus\"),e=t.getMetaInfo(\"aplus-rhost-g\"),n=a(e,o);n!==e&&t.setMetaInfo(\"aplus-rhost-g\",n)}t=t||{};var n=t.maxCount||1,o=t.networkType||\"static\",s=t.directSwitch||!1,u=0;return function(t){t=t||s,t?e():(++u,u>=n&&(i.logger({lever:\"warn\",msg:\"\u65e5\u5fd7\u4e0a\u62a5\u5931\u8d25\uff0c\u6ce8\u610f\uff0c\u8981\u5207\u6210\u52a8\u6001\u7f51\u7edc\u5566!\"}),e(),u=0))}}var r=n(2),i=n(34);e.toDynamicsNetwork=o({maxCount:1,networkType:\"dynamics\",directSwitch:!1})},function(t,e,n){\"use strict\";function a(){var t=i.getGlobalValue(\"aplus\"),e=t.getMetaInfo(r.APLUS_CNA_MODE);return e}function o(){var t=i.getGlobalValue(\"aplus\");return\"on\"===t.getMetaInfo(r.APLUS_CNA_ENABLE)}var r=n(3),i=n(2),s=n(9),u=n(46),c=n(92),l=n(18),p=n(29),f=n(44),g=n(88);e.getCnaMode=a,e.isCnaEnable=o,e.requestCna=function(t,e){function n(t){s(e)&&e(t)}var o=a();\"LS\"===o?c.request(t,function(t){if(u(t)){var e=t.split(\";\");l(e,function(t){if(/^goldlog\\.Etag/.test(t)){var e=t.split(\"=\")[1].replace(/\\\"/g,\"\"),n=i.getGoldlogVal(\"globalConfig\")||{},a=g.getFormatDate();i.setGoldlogVal(\"Etag\",e),p.setLsCna(n.ETAG_STORAGE_KEY,a,e)}else if(/^goldlog\\.stag/.test(t)){var o=+t.split(\"=\")[1];i.setGoldlogVal(\"stag\",o)}})}n()},function(t){n(t)}):f.loadScript(t,function(t){n(t)})}},function(t,e,n){\"use strict\";var a=n(3),o=n(9),r={base:1e4,timeout:1e4},i=function(t,e,n,i){/^\\/\\//.test(t)&&(t=a.HTTPS+t);var s=!0,u=i&&i.timeout?i.timeout:r.timeout;setTimeout(function(){s&&(s=!1,o(n)&&n({timeout:u}))},u),window.fetch(t).then(function(t){return/application\\/json/.test(t.headers.get(\"content-type\"))?t.json():t.text()}).then(function(t){s&&(e(t),s=!1)}).catch(function(t){s&&n(t)})},s=function(t,e,n,a){var o,i=\"GET\",s=function(){o.responseText?e(o.responseText):n()},u=window.XMLHttpRequest&&\"withCredentials\"in new XMLHttpRequest;u?(o=new XMLHttpRequest,o.open(i,t,!0)):(o=new window.XDomainRequest,o.open(i,t));var c=a&&a.timeout?a.timeout:r.timeout;o.timeout=c,o.onload=s,o.onerror=n,o.ontimeout=n,o.send()},u=function(t,e,n,a){window.fetch?i(t,e,n,a):s(t,e,n,a)},c=function(t,e){t=t||{},t.method=(t.method||\"POST\").toUpperCase(),t.url=t.url||\"\",t.data=t.data||null,t.success=t.success||function(){},t.error=t.error||function(){};var n=new XMLHttpRequest,a=[];for(var o in t.data)a.push(o+\"=\"+encodeURIComponent(t.data[o]));var r=a.join(\"&\"),i=JSON.stringify(t.data||{});\"POST\"===t.method?(n.open(t.method,t.url,!0),n.setRequestHeader(\"Content-Type\",e||\"application/json\")):\"GET\"===t.method&&n.open(t.method,t.url+\"?\"+r,!0),n.withCredentials=!0,n.timeout=3e3,n.onreadystatechange=function(){if(4==n.readyState&&200==n.status){var e={};try{e=JSON.parse(n.responseText)}catch(t){}t.success(e)}else 4==n.readyState&&t.error(n.staus)},\"POST\"===t.method?n.send(i):n.send()};e.request=u,e.request4um=c},function(t,e){\"use strict\";t.exports=function(){return{getMiniAppTrackInfo:function(t){var e=window;e.__megabilityBridge(\"TinyApp\",\"getMiniAppTrackInfo\",{},function(e){var n=(e.data||{}).result,a={_aplus_luid:n.luid,_aplus_lunick:n.lunick,_aplus_lusite:n.lusite,_aplus_uid:n.uid,_aplus_unick:n.unick,_aplus_usite:n.usite,mini_app_id:n.miniapp_id};t(a)},function(){t({})})},run:function(t,e){var n=this,a=window,o=a&&\"undefined\"!=typeof a.__megabilityBridge,r=\"{}\"!==JSON.stringify(n.options.context.pha_trackinfo);if(!r&&a.pha&&a.pha.environment&&\"object\"==typeof a.pha.environment.miniappAppInfo&&o)return n.getMiniAppTrackInfo(function(t){n.options.context.pha_trackinfo&&(n.options.context.pha_trackinfo=t),e()}),200}}}},function(t,e,n){\"use strict\";var a=n(2);t.exports=function(){return{getMetaInfo:function(){var t=a.getGoldlogVal(\"_$\")||{},e=t.meta_info;return e},getAplusWaiting:function(){var t=this.getMetaInfo()||{};return t[\"aplus-waiting\"]},run:function(t,e){var n=this.options.config||{},o=this.getAplusWaiting(),r=!0,i=a.getGlobalValue(\"aplus\"),s=\"default\";if(i.globalConfig.isAli&&(s=window.APLUS_CONFIG&&window.APLUS_CONFIG.pvTrack||s,\"off\"===s&&(r=!1)),n.is_auto){if(!r)return\"done\";if(o)switch(o=this.getAplusWaiting()+\"\",this.options.context.when_to_sendpv={aplusWaiting:o},o){case\"MAN\":return\"default\"===s?\"done\":void 0;case\"1\":return this.options.context.when_to_sendpv.isWait=!0,setTimeout(function(){e()},6e3),6e3;default:var u=1*o;if(u+\"\"!=\"NaN\")return this.options.context.when_to_sendpv.isWait=!0,setTimeout(function(){e()},u),u}}}}}},function(t,e,n){\"use strict\";var a=n(96),o=n(2),r=n(62),i=n(20),s=\"POST\",u=\"GET\";t.exports=function(){return{getMetaInfo:function(){var t=o.getGoldlogVal(\"_$\")||{},e=t.meta_info;return e},getAplusMetaByKey:function(t){var e=this.getMetaInfo()||{};return e[t]},getRhost:function(t){var e=\"\",n=\"\";if(\"PV\"===t)n=\"aplus-rhost-v\",e=this.getAplusMetaByKey(n);else if(n=\"aplus-rhost-g\",e=this.getAplusMetaByKey(n),[\"wgo.mmstat.com\",\"gm.mmstat.com\"].indexOf(e)>-1)a.isMobile()&&/gm/.test(e)&&(e=\"wgo.mmstat.com\"),!a.isMobile()&&/wgo/.test(e)&&(e=\"gm.mmstat.com\");else if(a.isMobile()){var o=e.match(/\\/[a-z]+$/);r(o)?e+=\"/wap\":e=e.replace(o[0],\"/wap\"+o[0])}return e},getHjljHostUrl:function(t){var e=/^\\/\\//.test(t)?\"\":\"//\",n=/\\/$/.test(t)?\"\":\"/\",a=e+t+n,o=this.options.context.userdata||{},r=o.logkey;return r?a+=/^(\\/)/.test(r)?r.substr(1):r:i().w(\"eventCode \"+r+' is invalid, suggestion: \"/aplus.1.1\"'),a},getPvHostUrl:function(t){var e=/^\\/\\//.test(t)?\"\":\"//\",n=/\\/$/.test(t)?\"\":\"/\",r=o.getGoldlogVal(\"_$\")||{},i=r.meta_info||{},s=i[\"aplus-ifr-pv\"]+\"\"==\"1\",u=parent!==self;if(/\\.gif$/.test(t))return e+t;var c=\"v.gif\";return a.isMobile()&&(c=\"m.gif\"),u&&!s&&(c=\"y.gif\"),e+t+n+c},getChannel:function(t){var e,n=this.getAplusMetaByKey(\"aplus-channel\"),a=[\"WS\",\"WS-ONLY\",u,s];return a.indexOf(t)>-1&&(e=t),!e&&a.indexOf(n)>-1&&(e=n),e},run:function(){var t=!!this.options.context.is_single;if(!t){var e=this.options.config.recordType,n=this.getRhost(e);if(!n)return\"done\";var a;a=\"PV\"===e?this.getPvHostUrl(n):this.getHjljHostUrl(n);var o=this.options.config||{},r=this.getChannel(o.method)||s;r!==s||navigator&&navigator.sendBeacon||(r=u),this.options.context.where_to_send.method=o.method,this.options.context.where_to_send.url=a}}}}},function(t,e){\"use strict\";e.isMobile=function(){var t=navigator?navigator.userAgent:\"\",e=/AliApp|Yunos|cyclone/i.test(t),n=/iPhone|iPad|iPod/i.test(t),a=/Android/i.test(t),o=/ArkWeb/i.test(t),r=/Windows Phone/i.test(t)||/IEMobile/i.test(t)||/WPDesktop/i.test(t),i=/BlackBerry/i.test(t),s=/Opera Mini/i.test(t);return e||n||a||o||r||i||s}},function(t,e,n){\"use strict\";var a=n(39),o=n(17),r=n(28),i=n(96),s=n(2),u=n(45),c=n(42),l=n(3),p=s.getGlobalValue(\"aplus\");t.exports=function(){return{getPageId:function(){var t=this.options.config||{},e=this.options.context||{},n=e.userdata||{};return t.page_id||t.pageid||t.pageId||n.page_id},resetSpmB:function(){var t=this.options.config||{},e=s.getGlobalValue(\"aplus\");if(!t.is_auto&&e.spmAPI){var n=s.getGoldlogVal(\"_$\")||{},a=n.spm||{},o=a.data.b;if(o){var r=this.getPageId();o=r?o.split(\"/\")[0]+\"/\"+r:o.split(\"/\")[0],e.spmAPI.setB(o);var i=a.spm_cnt.split(\".\");i&&i.length>2&&(i[1]=o,a.spm_cnt=i.join(\".\"))}}},getCommonParams:function(){var t=this.options.context||{},e=t.etag||{},n=t.userdata||{},l=s.getGoldlogVal(\"_$\")||{},f=l.spm||{},g=this.options.config||{},d=i.isMobile()?\"WAP\":\"PC\",_=p.getMetaInfo(\"aplus-first-tracking\"),m=u.getPid(),h=u.getConfig(\"codeVersion\"),v={_f_t:!!_};m&&(v.pid=m),h&&(v.code_version=h),t.pha_trackinfo&&(v=r.assign(v,t.pha_trackinfo));var b={};p.globalConfig.isAli&&(b={\"spm-url\":f.spm_url||\"\",\"spm-pre\":f.spm_pre||\"\",\"spm-cnt\":f.spm_cnt||\"\",pvid:p.pvid||\"\"});var y=(p.globalConfig.isDecodeUrl?\"DC_\":\"\")+Math.floor(268435456*Math.random()).toString(16),E={appId:p.getMetaInfo(\"appKey\")||p.getMetaInfo(\"appId\"),cache:y,cna:e.cna||a.getCookieCna(\"cna\"),etag:e,pre:l.page_referrer||\"-\",sdk_info:{jsver:p.globalConfig.script_name,lver:p.globalConfig.lver,customSdkId:p.getMetaInfo(\"customSdkId\")||\"\",platformType:d.toLowerCase()},trackerEventCode:g.trackerEventCode,title:g.title||document&&document.title,url:g.pageUrl||(location?location.href:\"-\"),client:p._aplus_client||{},gokey:r.assign(b,v),_user_nick:c.getUserNick(),gmkey:n.gmkey||\"\",method:this.options.context.where_to_send.method},S=o.getParamFromUrl(\"scm\",location.href)||\"\";return S&&(E.scm=S),n.gokey&&n.gokey.alsc_spm_url&&(E.gokey[\"spm-url\"]=n.gokey.alsc_spm_url),n.gokey&&n.gokey.alsc_spm_pre&&(E.gokey[\"spm-pre\"]=n.gokey.alsc_spm_pre),n.gokey&&n.gokey.alsc_page_name&&(E.title=n.gokey.alsc_page_name),E},getPvParams:function(){var t=this.options.context.where_to_send.url,e=this.getCommonParams();this.options.config.is_auto||(e.sdk_info.mansndlog=1);var n=\"/v.gif\";return/yt\\.gif$/.test(t)?n=\"yt.gif\":i.isMobile()&&(n=\"/m.gif\"),r.assign(e,{event_code:\"2001\",logtype:\"1\",logkey:n,event_timestamp:p._$.send_pv_count>0?new Date:p.logConfig.pageLoadTime})},checkEventCodeLegality:function(t){return/^(([0-9])|([1-9][0-9]{1,5}))$/.test(t)},getHjljParams:function(){var t=this.options.context||{},e=t.userdata||{},n=this.checkEventCodeLegality(e.gmkey)?e.gmkey:l.OTHER,a={event_code:l.EVENT_ID_MAP[e.gmkey]||n,logtype:\"2\",logkey:e.logkey,event_timestamp:new Date};return e[\"spm-cnt\"]&&(a[\"spm-cnt\"]=e[\"spm-cnt\"]),e[\"spm-pre\"]&&(a[\"spm-pre\"]=e[\"spm-pre\"]),r.assign(this.getCommonParams(),a)},run:function(){var t={};\"PV\"===this.options.config.recordType?(this.resetSpmB(),t=this.getPvParams()):t=this.getHjljParams(),this.options.context.what_to_send.logdata=t}}}},function(t,e,n){\"use strict\";var a=n(28),o=n(39);t.exports=function(){return{run:function(){var t={},e=o.getCookie(\"workno\")||o.getCookie(\"emplId\");e&&(t.workno=e);var n=o.getHng();n&&(t._hng=o.getHng());var r;r=this.options.context.what_to_send.logdata,r.gokey=a.assign(r.gokey,t)}}}},function(t,e,n){\"use strict\";var a=n(27),o=n(38),r=n(28),i=n(2);t.exports=function(){return{getUserdata:function(){var t=i.getGlobalValue(\"aplus\"),e=this.options.config||{},n={};e&&!e.is_auto&&e.gokey&&(\"string\"==typeof e.gokey?n=a.param2obj(e.gokey):\"object\"==typeof e.gokey&&(n=e.gokey));var s=function(t){o(t)?t.forEach(function(t){n=r.assign(n,t)}):n=r.assign(n,t)};s(t.getMetaInfo(\"aplus-globaldata\")),s(t.getMetaInfo(\"aplus-cpvdata\"));var u=this.options.context||{},c=u.userdata||{};return s(c),n},processLodashDollar:function(){var t=this.options.config||{},e=i.getGoldlogVal(\"_$\")||{};t&&t.referrer&&(e.page_referrer=t.referrer),i.setGoldlogVal(\"_$\",e)},updatePre:function(t){var e=i.getGoldlogVal(\"_$\")||{};return e.page_referrer&&(t.pre=e.page_referrer),t},run:function(){var t=this.options.context.what_to_send.logdata,e=r.assign(this.getUserdata(),t.userdata||{});this.processLodashDollar(),t.gokey=r.assign(t.gokey,e),t=this.updatePre(t),this.options.context.what_to_send.logdata=t,this.options.context.userdata=t.gokey,this.options.context.pure_userdata=e}}}},function(t,e,n){\"use strict\";var a=n(43),o=n(101),r=n(13);t.exports=function(){return{getExParamsInfo:function(){var t=a.getExParams();return this.options.context.what_to_send.logdata.exparams=t,o(t)},run:function(){var t=this.options.context.what_to_send.logdata.gokey;t=r(this.getExParamsInfo(),t),this.options.context.what_to_send.logdata.gokey=t}}}},function(t,e,n){var a=n(27);t.exports=function(t){var e={};try{var n=a.param2obj(t.replace(/&/g,\"&\").replace(/\\buser(i|I)d=/,\"uidaplus=\").replace(/&aplus&/,\"&\"));n.uidaplus&&(e.uidaplus=n.uidaplus),e.pc_i=n.pc_i,e.pu_i=n.pu_i}catch(t){console&&console.log(t)}return e}},function(t,e,n){\"use strict\";function a(t){var e,n,a,o,i=[],s={};for(e=t.length-1;e>=0;e--)n=t[e],a=n[0],a&&a.indexOf(r.s_plain_obj)==-1&&s.hasOwnProperty(a)||(o=n[1],(\"aplus\"==a||o)&&(i.unshift([a,o]),s[a]=1));return i}function o(t){var e,n,a,o,i=[],u={logtype:!0,cache:!0,scr:!0,\"spm-cnt\":!0};for(e=t.length-1;e>=0;e--)if(n=t[e],a=n[0],o=n[1],!(s.isStartWith(a,r.s_plain_obj)&&!s.isStartWith(a,r.mkPlainKeyForExparams())||u[a]))if(s.isStartWith(a,r.mkPlainKeyForExparams())){var c=r.param2arr(o);if(\"object\"==typeof c&&c.length>0)for(var l=c.length-1;l>=0;l--){var p=c[l];p&&p[1]&&i.unshift([p[0],p[1]])}}else i.unshift([a,o]);return i}var r=n(33),i=n(41),s=n(28),u=n(2),c=n(39),l=n(17),p=n(3);t.exports=function(){return{keyIsAvailable:function(t){var e=[\"functype\",\"funcId\",\"spm-cnt\",\"spm-url\",\"spm-pre\",\"_ish5\",\"_is_g2u\",\"_h5url\",\"cna\",\"isonepage\",\"lver\",\"jsver\"];return i.indexof(e,t)===-1},valIsAvailable:function(t){return\"object\"!=typeof t&&\"function\"!=typeof t},upUtData:function(t,e){var n=this;if(t=t?t:{},e&&\"object\"==typeof e)for(var a in e){var o=e[a];a&&n.valIsAvailable(o)&&n.keyIsAvailable(a)&&(t[a]=o)}return t},getToUtData:function(){var t=u.getGoldlogVal(\"_$\")||{},e=u.getGlobalValue(p.APLUS),n=t.spm||{},i=this.options.context||{},s=this.options.config||{},f=i.what_to_send||{},g=f.logdata||{},d=g.sdk_info||{},_=this.options.context.etag||{},m=o(a(g.exparams||[]));m=r.arr2obj(m);var h=i.userdata,v=location.href,b={},y=l.getParamFromUrl(\"scm\",v)||\"\";y&&(b.scm=y);var E=l.getParamFromUrl(\"pg1stepk\",v)||\"\";E&&(b.pg1stepk=E);var S=l.getParamFromUrl(\"point\",v)||\"\";S&&(b.issb=1),d&&d.mansndlog&&(b.mansndlog=d.mansndlog),b=this.upUtData(b,m),b=this.upUtData(b,g.gokey),b=this.upUtData(b,h),b.functype=\"page\",b.funcId=\"2001\",e&&e.globalConfig&&e.globalConfig.isAli?b.url=(location.protocol||\"https:\")+\"//\"+location.host+location.pathname:b.url=location.href,s.pageName&&(b.url=s.pageName),b._ish5=\"1\",b._h5url=v,b._toUT=2,b._bridgeName=\"WindVane\",b._bridgeVersion=\"3.0.7\",n.spm_cnt&&(b[p.SPM_CNT]=n.spm_cnt||\"\"),n.spm_url&&(b[p.SPM_URL]=n.spm_url||\"\"),n.spm_pre&&(b[p.SPM_PRE]=n.spm_pre||\"\"),b.cna=_.cna||c.getCookieCna(\"cna\"),b.lver=d.lver,b.jsver=d.jsver,b.pver=\"1.0.0\",b.isonepage=-1;var A=e.getMetaInfo(\"aplus-utparam\");return A&&(b[\"utparam-cnt\"]=JSON.stringify(A)),b._is_g2u_=1,b._slog=1,b},run:function(){var t=this.options.context||{},e=t.what_to_send||{};e.pvdataToUt=this.getToUtData(),this.options.context.what_to_send=e}}}},function(t,e,n){\"use strict\";var a=n(2),o=n(104);t.exports=function(){return{run:function(){var t=a.getGoldlogVal(\"_$\")||{},e=this.options.context.can_to_sendpv||{},n=t.send_pv_count||0,r=this.options.config||{},i=!!r.updateOnly;return t.cur_pv_update=i,o.canSendPV(r.track_type)?(e.flag=\"YES\",this.options.context.can_to_sendpv=e,t.send_pv_count=++n,void a.setGoldlogVal(\"_$\",t)):\"done\"}}}},function(t,e,n){function a(t){var e=r.getGlobalValue(i.APLUS),n=e.getMetaInfo(i.APLUS_EVENT_LIMITRATES);if(n&&n.length>0){var a=c.find(n,function(e){return e.eventId===t});if(a){var o=Math.ceil(1e3*Math.random());return o<1e3*a.samplingRate}return!0}return!0}function o(){var t=r.getGlobalValue(\"aplus\"),e=t.globalConfig.isUM;return!!e}var r=n(2),i=n(3),s=n(105),u=n(107),c=n(41),l=n(37),p=n(28),f=n(33);e.canToSendHJLJ=function(t,e){var n=s.getDeviceStatus();if(!n)try{var o=l.getContext();return p.isEmptyObject(o)?void 0:e===i.APP_START||e===i.APP_END}catch(t){}var r=s.getAutoTrackStatus(),c=s.getAutoEventStatus(),g=u.getAutoTrackStatus(),d={};if(d=\"string\"==typeof t?f.arr2obj(f.param2arr(t)):t,d.auto_element){if(2===c||2===r)return;if(!r&&!g)return}if(a(e))return!0},e.canSendPV=function(t){if(!o())return!0;var e=s.getDeviceStatus(),n=s.getAutoPageStatus(),a=u.localAutoPVDisabled(),r=!0;if(e){if(\"1\"===t)return!(2===n||!n&&a)}else r=!1;return r}},function(t,e,n){\"use strict\";function a(t){var e;return e=l.isWeb()?p.getLsRemoteCfg(d):f().getSync(c.APLUS_REMOTE_CONFIG),e&&e[t]}function o(t){var e=l.getContext();e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_DISABLE_AUTOEVENT_REMOTE,t]})}function r(t){var e=l.getContext();e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_DEVICE_ENABLE,t]})}function i(t){var e=l.getContext();e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_DISABLE_AUTOPV_REMOTE,t]})}function s(t){var e=l.getContext();e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_AUTOTRACK_ENABLED_REMOTE,t]})}var u=n(33),c=n(3),l=n(2),p=n(29),f=n(106),g=n(28),d=\"APLUS_REMOTE_CONFIG\";e.getAutoEventStatus=function(){var t=l.getGlobalValue(\"aplus\"),e=t.getMetaInfo(c.APLUS_DISABLE_AUTOEVENT_REMOTE)||a(\"codelessClickEventStatus\");return e},e.getDeviceStatus=function(){var t=l.getGlobalValue(\"aplus\");return a(\"currentDeviceEnable\")||t.getMetaInfo(c.APLUS_DEVICE_ENABLE)},e.getAutoPageStatus=function(){var t=l.getGlobalValue(\"aplus\"),e=t.getMetaInfo(c.APLUS_DISABLE_AUTOPV_REMOTE)||a(\"codelessCollectorPageStatus\");return e},e.getAutoTrackStatus=function(){var t=l.getGlobalValue(\"aplus\"),e=t.getMetaInfo(c.APLUS_AUTOTRACK_ENABLED_REMOTE)||a(\"codelessStatus\");return e},e.enableCfg=function(t){var e=l.getContext();t&&!g.isEmptyObject(t)&&(o(t.codelessClickEventStatus),i(t.codelessCollectorPageStatus),s(t.codelessStatus),r(t.currentDeviceEnable),t.eventSamplingRate&&t.eventSamplingRate.length>0&&e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_EVENT_LIMITRATES,u.mapEventSampleRates(t.eventSamplingRate)]}),t.codelessIgnoreComponent&&t.codelessIgnoreComponent.length>0&&e.aplus_queue.push({action:\"aplus.setMetaInfo\",arguments:[c.APLUS_AUTOTRACK_CONFIG_REMOTE,t.codelessIgnoreComponent]}))}},function(t,e,n){var a=n(37),o=n(9),r=n(32),i=n(33),s=n(3);t.exports=function(){function t(){var t=a.getContext();this.load=function(e){u?(t.removeStorage({key:n}),o(e)&&e()):(n=\"aplus_cache_\"+i.getAppKey()||\"\",t.getStorage({key:n,success:function(a){u=a&&a.data?r.parse(a.data)||{}:{},c=!0,t.removeStorage({key:n}),o(e)&&e()},fail:function(){u={},c=!0,t.removeStorage({key:n}),o(e)&&e()}}))},this.save=function(){u&&t.setStorage({key:n,data:r.stringfy(u)})},this.set=function(t,e){u&&(u[t]=e)},this.get=function(t){return(u||{})[t]},this.remove=function(t){u&&u[t]&&delete u[t]},this.getAll=function(){return u},this.clear=function(){u=null},this.has=function(t){return!!this.get(t)},this.isLoaded=function(){return c},this.getSync=function(t){try{var e=a.getStorageSync(t);return t===s.APLUS_IMPRINT_VERSION?e:\"string\"==typeof e?r.parse(e):e}catch(t){}},this.setSync=function(t,e){try{\"object\"==typeof e?a.setStorageSync(t,JSON.stringify(e)):a.setStorageSync(t,e)}catch(t){}}}var e=null,n=\"\",u=null,c=!1;return function(){return e||(e=new t),e}}()},function(t,e,n){\"use strict\";var a=n(3),o=n(2);e.localAutoEventDisabled=function(){var t=o.getGlobalValue(\"aplus\");return!!t.getMetaInfo(a.APLUS_DISABLE_AUTOEVENT)},e.localAutoPVDisabled=function(){var t=o.getGlobalValue(\"aplus\");return!(!t.getMetaInfo(a.APLUS_DISABLE_AUTOPV)&&\"MAN\"!==t.getMetaInfo(\"aplus-waiting\"))},e.getAutoTrackStatus=function(){var t=o.getGlobalValue(\"aplus\");return!!t.getMetaInfo(a.APLUS_AUTOTRACK_ENABLED)}},function(t,e,n){\"use strict\";var a=n(36),o=n(2);t.exports=function(){return{run:function(){var t=o.getGlobalValue(\"aplus\"),e=t._$||{},n=this.options.context||{};o.setGoldlogVal(\"pv_context\",n);var r=t.spm_ab||[],i=r.join(\".\"),s=e.send_pv_count,u={cna:n.etag?n.etag.cna:\"\",count:s,spmab_pre:t.spmab_pre};a.doPubMsg([\"sendPV\",\"complete\",i,u]),a.doCachePubs([\"sendPV\",\"complete\",i,u])}}}},function(t,e,n){\"use strict\";var a=n(27),o=n(38),r=n(28),i=n(2);t.exports=function(){return{getUserData:function(){var t=i.getGlobalValue(\"aplus\"),e=this.options.context||{},n=e.userdata||{},s=e.what_to_send.logdata.gokey,u=t.getMetaInfo(\"aplus-exinfo\");s=r.assign(s,t.getMetaInfo(\"aplus-globaldata\")),u&&(s=r.assign(s,a.param2obj(u)));var c=t.getMetaInfo(\"aplus-exdata\");return o(c)?c.forEach(function(t){s=r.assign(s,t)}):s=r.assign(s,t.getMetaInfo(\"aplus-exdata\")),s=r.assign(s,a.param2obj(n.gokey))},run:function(){this.options.context.what_to_send.logdata.gokey=this.getUserData()}}}},function(t,e,n){\"use strict\";var a=n(43),o=n(101),r=n(28);t.exports=function(){return{getExParamsInfo:function(){var t=a.getExParams();return this.options.context.what_to_send.logdata.exparams=t,o(t)},run:function(){var t=this.options.context.what_to_send.logdata.gokey;t=r.assign(this.getExParamsInfo(),t),this.options.context.what_to_send.logdata.gokey=t}}}},function(t,e,n){\"use strict\";var a=n(2),o=n(3),r=n(13),i=n(18),s=n(19),u=n(65);t.exports=function(){return{formatGokey:function(t,e){if(s(t)){var n={},a=[];return i(t,function(t,e){var o=e;(\"undefined\"===o||u(o))&&(o=\"\"),n[t]=o,a.push(t+\"=\"+o)}),\"object\"===e?n:a.join(\"&\")}return t},getToUtData:function(){var t=a.getGoldlogVal(\"_$\")||{},e=a.getGlobalValue(o.APLUS),n=t.spm||{},i=t.meta_info||{},s=\"off\"===i[o.APLUS_GOKEY_ISOLATE],u=this.options.context||{},c=u.userdata||{},l=u.etag||{},p=u.what_to_send||{},f=p.logdata||{},g=f.sdk_info||{},d=f.gokey||{},_=location.href,m=s?r({},this.formatGokey(d,\"object\")):{};m.functype=\"ctrl\",m.funcId=f.event_code,e&&e.globalConfig&&e.globalConfig.isAli?m.url=(location.protocol||\"https:\")+\"//\"+location.host+location.pathname:m.url=location.href,d.pageName&&(m.url=d.pageName),d._isCombine&&(m._isCombine=1),m.logkey=f.logkey,s||(m.gokey=encodeURIComponent(this.formatGokey(d,\"string\"))),m.gmkey=f.gmkey,m._ish5=\"1\",m._h5url=_,m._is_g2u_=1,m._slog=1,m._toUT=2,m._bridgeName=\"WindVane\",m._bridgeVersion=\"3.0.7\",n.spm_cnt&&(m[o.SPM_CNT]=n.spm_cnt||\"\"),n.spm_url&&(m[o.SPM_URL]=n.spm_url||\"\"),n.spm_pre&&(m[o.SPM_PRE]=n.spm_pre||\"\"),m.cna=l.cna,m.lver=g.lver,m.jsver=g.jsver,c.hasOwnProperty(\"autosend\")&&(m.autosend=c.autosend);var h=e.getMetaInfo(\"aplus-utparam\");return h&&(m[\"utparam-cnt\"]=JSON.stringify(h)),m},run:function(){var t=this.options.context||{},e=t.what_to_send||{};e.pvdataToUt=this.getToUtData(),this.options.context.what_to_send=e}}}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){n(113)()}}}},function(t,e,n){\"use strict\";var a=n(44),o=n(2),r=n(114),i=n(121),s=n(122),u=n(123),c=n(124),l=n(125);t.exports=function(){var t=o.getGoldlogVal(\"_$\")||{},e=t.meta_info,p=e[\"aplus-touch\"],f={isTouchEnabled:a.isTouch()||\"1\"===p||\"tap\"===p,isTerminal:t.is_terminal||/WindVane|Themis/i.test(navigator.userAgent)};n(115).makePVId(),window.g_SPM={spm_d_for_ad:{},resetModule:r.spm_resetModule,anchorBeacon:r.spm_spmAnchorChk,getParam:r.spm_getSPMParam,spm:r.spm_forwap},o.setGoldlogVal(\"spmAPI\",l.run()),i.run(f),s.run(f),u.run(f),c.run(f)}},function(t,e,n){\"use strict\";function a(t){if(t&&1===t.nodeType){s.tryToRemoveAttribute(t,\"data-spm-max-idx\"),s.tryToRemoveAttribute(t,\"data-auto-spmd-max-idx\");for(var e=c.nodeListToArray(t.getElementsByTagName(\"a\")),n=c.nodeListToArray(t.getElementsByTagName(\"area\")),a=e.concat(n),o=0;o1?r.pop():\"\",s>0&&(a=i.pop(),t=i.join(\"?\")),a&&s>1&&a.indexOf(\"&\")==-1&&a.indexOf(\"%\")!==-1&&(l=\"%26\");var p=\"\";if(t=t+\"?spm=\"+p+e+(a?l+a:\"\")+(o?\"#\"+o:\"\"),c=m.isContain(u,\".\")?u.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(c))return 0;!a&&s<=1&&(o||{htm:1,html:1,php:1,aspx:1,shtml:1,xhtml:1}.hasOwnProperty(c)||(t+=\"&file=\"+u))}return t}}function s(t,e){var n=b.getGlobalValue(\"aplus\");if(!n.isUT4Aplus||\"UT4Aplus\"!==n.getMetaInfo(\"aplus-toUT\")){var a,o=t.innerHTML;o&&o.indexOf(\"<\")==-1&&(a=document.createElement(\"b\"),a.style.display=\"none\",t.appendChild(a)),t.href=e,a&&t.removeChild(a)}}function u(t,e,n){if(!/^0\\.0\\.?/.test(e)){var a=y.tryToGetHref(t),r=o(),u=A.is_ignore_spm(t);if(u){var c=_.param2obj(a);if(c.spm&&c.spm.split)for(var l=c.spm.split(\".\"),p=e.split(\".\"),f=0;f<3&&p[f]===l[f];f++)2===f&&l[3]&&(e=c.spm)}t.setAttribute(\"data-spm-anchor-id\",e);var g=E.getPvId();g&&(e+=\".\"+g);var d=\"0.0\";(g||r&&r!=d)&&(u||n||(a=i(a,e))&&s(t,a))}}function c(t){var e=v.tryToGetAttribute(t,w),n=h.parseSemicolonContent(e)||{};return n}function l(t){var e,n=b.getGoldlogVal(\"_$\")||{},a=n.spm.data;return\"0\"==a.a&&\"0\"==a.b?e=\"0\":(e=v.tryToGetAttribute(t,I),e&&e.match(/^d\\w+$/)||(e=\"\")),e}function p(t,e){for(var n=[],a=h.nodeListToArray(t.getElementsByTagName(\"a\")),o=h.nodeListToArray(t.getElementsByTagName(\"area\")),r=a.concat(o),i=0;i0&&(d+=\"&\"),d+=v.length>0?v.join(\"&\"):\"\",aplus&&s(aplus.recordUdata)?aplus.recordUdata(h,g,d,\"GET\",function(){}):p().w(\"aplus.recordUdata is not function!\"),i.tryToSetAttribute(t,\"data-spm-anchor-id\",m)}function o(t,e){if(!l.isEditableElement(e)){var n=e;window.g_SPM&&(g_SPM._current_spm=f.spm_getSPMParam(e));for(var o;e&&\"HTML\"!==e.tagName;){o=i.tryToGetAttribute(e,\"data-spm-click\");{if(o){a(e,o,\"mousedown\"===t.type?t.type:\"tap\");break}e=e.parentNode}}if(!o){var r=g.getGlobalSPMId(),s=aplus.getMetaInfo(\"aplus-getspmcd\");\"function\"==typeof s&&s(n,t,r)}}}var r=n(77),i=n(23),s=n(9),u=n(29),c=n(41),l=n(44),p=n(20),f=n(114),g=n(117);e.run=function(t){t&&t.isTouchEnabled?r.on(document,\"tap\",o):r.on(document,\"mousedown\",o)}},function(t,e,n){\"use strict\";function a(){for(var t=document.getElementsByTagName(\"iframe\"),e=0;e10&&(n=3e3),a(),setTimeout(t,n)}var e=0,n=500;t()}var r=n(23),i=n(117),s=n(114);e.run=function(t){t&&!t.isTerminal&&o()}},function(t,e,n){\"use strict\";function a(t,e){for(var n,a=window;e&&(n=e.tagName);){if(\"A\"===n||\"AREA\"===n){r.spm_spmAnchorChk(e,!1);var o=a.g_SPM||(a.g_SPM={}),i=o._current_spm=r.spm_getSPMParam(e),s=[];try{s=[i.a,i.b,i.c,i.d];var u=i.e||aplus.pvid||\"\";u&&s.push(u)}catch(t){}break}if(\"BODY\"==n||\"HTML\"==n)break;e=e.parentNode}}var o=n(77),r=n(114);e.run=function(t){var e=document;t&&t.isTouchEnabled?o.on(e,\"tapSpm\",a):(o.on(e,\"mousedown\",a),o.on(e,\"keydown\",a))}},function(t,e,n){\"use strict\";function a(t,e){if(e||(e=p),p.evaluate)return e.evaluate(t,p,null,9,null).singleNodeValue;for(var n,o=t.split(\"/\");!n&&o.length>0;)n=o.shift();var r,i=/^.+?\\[@id='(.+?)']$/i,s=/^(.+?)\\[(\\d+)]$/i;return(r=n.match(i))?e=e.getElementById(r[1]):(r=n.match(s))&&(e=e.getElementsByTagName(r[1])[parseInt(r[2])-1]),e?0===o.length?e:a(o.join(\"/\"),e):null}function o(){var t={};for(var e in l)if(l.hasOwnProperty(e)){var n=a(e);if(n){t[e]=1;var o=l[e],r=\"A\"===n.tagName?o.spmd:o.spmc;s.tryToSetAttribute(n,\"data-spm\",r||\"\")}}for(var i in t)t.hasOwnProperty(i)&&delete l[i]}function r(){if(!c&&f.spmData){c=!0;var t=f.spmData.data;if(t&&i.isArray(t)){for(var e=0;e1&&(t=a[0],e=a[1]),c.setA(t),e&&c.setB(e);var o=i.getElementsByTagName(\"body\");o=o&&o.length?o[0]:null,o&&(e=l.tryToGetAttribute(o,\"data-spm\"),e?c.setB(e):1===a.length&&c.setAB(\"0\",\"0\"))}}function o(){var t=s.data.a,e=s.data.b;t&&e&&(aplus.spm_ab=[t,e])}var r=window,i=document,s={},u={};s.data=u;var c={},l=n(23),p=n(17),f=n(115),g=n(48),d=location.href;c.setA=function(t){s.data.a=t,o()},c.setB=function(t){s.data.b=t,o()},c.setAB=function(t,e){s.data.a=t,s.data.b=e,o()};var _=function(t){var e=t.aplus||window.aplus||{},n=e.meta_info||{};s.meta_protocol=n.spm_protocol;var o,r=e.spm_ab||[],i=r[0]||\"0\",u=r[1]||\"0\";\"0\"===i&&\"0\"===u&&(a(),i=s.data.a||\"0\",u=s.data.b||\"0\"),o=[s.data.a,s.data.b].join(\".\"),s.spm_cnt=(o||\"0.0\")+\".0.0\";var c=t.send_pv_count>0?f.makePVId():e.pvid;return c&&(s.spm_cnt+=\".\"+c),e._$.spm=s,c};c.spaInit=function(t,e,n){var a=s.spm_url,o=window.g_SPM||{},r=t._$||{},i=r.send_pv_count,u=_({aplus:t,meta_info:e,send_pv_count:i});s.spm_cnt=s.data.a+\".\"+s.data.b+\".0.0\"+(u?\".\"+u:\"\");var c=e[\"aplus-spm-fixed\"];if(\"1\"!==c){s.spm_pre=p.getSPMFromUrl(g.getRefer(t.globalConfig.NAME_STORAGE_KEYS)),s.origin_spm_pre=s.spm_pre,s.spm_url=p.getSPMFromUrl(location.href),s.origin_spm_url=s.spm_url;var l=o._current_spm||{};l&&l.a&&\"0\"!==l.a&&l.b&&\"0\"!==l.b?(s.spm_url=[l.a,l.b,l.c,l.d,l.e].join(\".\"),s.spm_pre=a):i>0&&n&&\"0\"!==n[0]&&\"0\"!==n[1]&&(s.spm_url=n.concat([\"0\",\"0\"]).join(\".\"),s.spm_pre=a),o._current_spm={}}},c.init=function(t,e){return s.spm_url=p.getSPMFromUrl(d),s.spm_pre=p.getSPMFromUrl(g.getRefer(t.globalConfig.NAME_STORAGE_KEYS)),_({aplus:t,meta_info:e})},c.resetSpmCntPvid=function(){var t=aplus.spm_ab;if(t&&2===t.length){var e=t.join(\".\")+\".0.0\",n=f.makePVId();n&&(e=e+\".\"+n),s.spm_cnt=e,s.spm_url=e,aplus._$.spm=s}},e.run=function(){var t=aplus._$||{},e=t.meta_info;return c.init(aplus,e),c}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){n(127)(this.options.context.logConfig)}}}},function(t,e,n){\"use strict\";var a=n(36),o=n(2);t.exports=function(t){var e=o.getGlobalValue(\"aplus\");if(!e._aplus_api){e._aplus_api={status:\"complete\"},e._$.status=\"complete\";var r=n(128).run.create({logConfig:t});for(var i in r)e[i]=r[i];var s=[\"aplusReady\",\"complete\"];a.doPubMsg(s),a.doCachePubs(s)}}},function(t,e,n){\"use strict\";function a(t,e){var n=e.context,a=n.what_to_send,o=a.logdata,r=o.gokey;S(M,function(t){t(r)})}function o(t,e){var n=e.context,a=n.what_to_send,o=a.logdata,r={logkey:o.logkey,gmkey:o.gmkey,gokey:o.gokey,method:o.method};S(C,function(t){t(r)})}function r(){var t=5e3;try{var e=_.getGlobalValue(\"aplus\"),n=e.getMetaInfo(\"aplus-mmstat-timeout\");if(n){var a=parseInt(n);a>=1e3&&a<=1e4&&(t=a)}}catch(t){}return t}function i(t,e,n){var a=t[0],o=t[1],r=(n||{}).spm,i=(n||{}).logkey,s=1;if(r&&r[a]){var u=r[a];s=u.cp,u[o]&&(s=u[o].cp)}else i&&i[e]&&(s=i[e]);var c=Math.ceil(Math.random()*Math.floor(1/s));return c}var s=n(10),u=n(39),c=n(23),l=n(77),p=n(34),f=n(20),g=n(36),d=n(28),_=n(2),m=n(3),h=n(21),v=n(129),b=n(41),y=n(132),E=n(38),S=n(18),A=n(19),T=n(9),P=n(26),I=n(133),w=[],M=[],x=[],C=[];e.run=s.extend({beforeSendPV:function(t){w.push(t)},afterSendPV:function(t){M.push(t)},launch:function(){p.logger({msg:\"warning: This interface is deprecated, can not send pv log, please use goldlog.sendPV instead! API: http://log.alibaba-inc.com/log/info.htm?type=2277&id=31\"})},installPlugin:function(t){T(t)&&t()},send:function(t,e,n){var a,o=_.getGlobalValue(\"aplus\");if(/^\\/\\//.test(t)){var i=m.HTTPS;/^\\/\\/(\\d+\\.){3,}\\d+/.test(t)&&(i=\"http:\"),t=i+t}return a=\"POST\"===n&&navigator&&navigator.sendBeacon?I.postData(t,e):I.sendImg(t+\"?\"+e,r()),o.req=a,a},sendPV:function(t,e){if(t=t||{},d.any(w,function(e){return e(n,t)===!1}))return!1;var n=_.getGlobalValue(\"aplus\"),o=n.getMetaInfo(m.APLUS_SKIP_APV_RULES)||[];if(!b.itemMatch(o,location.href)||!t.is_auto){var r=new v;t.recordType=\"PV\",\"GET\"!==t.method&&(t.method=\"POST\");var i=n.logConfig.pv;return r.run({plugins:i.plugins,context:d.cloneDeep(i.context)},{config:t,userdata:e,pubsubType:\"pv\",messageFnQueue:[a],middlewareMessageKey:\"mw_change_pv\"}),n._last_pv_info={datetime:(new Date).toString(),pageConfig:t,pageParams:e},!0}},pageEnter:function(t){h.pushIntoGoldlogQueue(m.PUBLISH,[m.PAGE_ENTER,t]),h.pushIntoGoldlogQueue(m.CACHE_PUBS,[m.PAGE_ENTER,t])},getParam:function(t){var e=window.WindVane||{},n=e&&\"function\"==typeof e.getParam?e.getParam(t):\"\";return n},beforeRecord:function(t){x.push(t)},afterRecord:function(t){C.push(t)},record:function(t,e,n,a,r){var s=_.getGlobalValue(\"aplus\");if(d.any(x,function(t){return t(s)===!1}))return!1;var u=1;if(E(s.spm_ab)&&s.spm_ab.length>1&&(u=i(s.spm_ab,t,s.getMetaInfo(\"aplus-report-rate\"))),1===u){var c=new v,l=s.logConfig.hjlj;return c.run({plugins:l.plugins,context:d.cloneDeep(l.context)},{config:{recordType:\"COMMON_HJLJ\",method:a},userdata:{logkey:t,gmkey:e,gokey:n||{}},pubsubType:\"hjlj\",messageFnQueue:[o],middlewareMessageKey:\"mw_change_hjlj\"},function(){T(r)&&r()}),!0}return!1},recordUdata:function(t,e,n,a,o){var r=_.getGlobalValue(\"aplus\"),i=new v,s=r.logConfig.hjlj;return i.run({plugins:s.plugins,context:d.cloneDeep(s.context)},{config:{recordType:\"DATACLICK_HJLJ\",method:a},userdata:{logkey:t,gmkey:e,gokey:n||{}},pubsubType:\"hjlj\",messageFnQueue:C,middlewareMessageKey:\"mw_change_hjlj\"},function(){T(o)&&o()}),!0},combineRecord:function(t,e,n,a){var o=_.getGlobalValue(m.APLUS),r=\"EXP\",i=\"CLK\",s=\"OTHER\";if([i,r,s].indexOf(e)>-1||/^\\d+$/.test(e))if(E(n)){a||(a=\"POST\");var u=[];n.forEach(function(t){u.push({exargs:A(t.exargs)?t.exargs:{},scm:t.scm,spm:t.spm,aplusContentId:t.aplusContentId})});var c=[];[i,r].indexOf(e)>-1?(c.push((e===r?\"expdata=\":\"clkdata=\")+JSON.stringify(u)),c.push(e===r?\"_is_auto_exp=1\":\"_is_auto_clk=1\")):c.push(\"combinedata=\"+JSON.stringify(u)),c.push(\"_eventType=custom\"),c.push(\"_method=\"+a),c.push(\"_pkgSize=\"+n.length),c.push(\"_isCombine=1\"),o.record(t,e,c.join(\"&\"),a)}else f().w(\"type of gokeys must be ArrayObject!\");else f().w(\"only support EXP or CLK log to combile record!\")},setPageSPM:function(t,e,n){var a=_.getGlobalValue(\"aplus\"),o=a.getMetaInfo(\"aplus-spm-fixed\");a.spm_ab=a.spm_ab||[];var r=d.cloneDeep(a.spm_ab);t&&(a.spm_ab[0]=\"\"+t,a._$.spm.data.a=\"\"+t),e&&(a.spm_ab[1]=\"\"+e,a._$.spm.data.b=\"\"+e);var i=P.qGet();if(a.spmAPI&&a.spmAPI.spaInit(a,i,r),\"1\"!==o){var s=r.join(\".\");a.spmab_pre=s}var u=[\"setPageSPM\",{spmab_pre:a.spmab_pre,spmab:a.spm_ab.join(\".\")}];g.doPubMsg(u),g.doCachePubs(u),y.resetMetaAndBody(),y.resetModules(),\"function\"==typeof n&&n()},getPageSPM:function(){var t=_.getGlobalValue(\"aplus\");return t.spm_ab||[]},getPageSpmUrl:function(t){var e=_.getGlobalValue(\"aplus\"),n=e._$||{},a=n.spm||{},o=a.spm_url;if(\"object\"!=typeof t&&(t={}),\"undefined\"!=typeof window&&window.__megability_bridge__&&!o){var r=window.__megability_bridge__.syncCall(\"ut\",\"getPageSpmUrl\",t);r&&0===r.statusCode&&r.data&&r.data.spmUrl&&(o=r.data.spmUrl)}return o},getPageSpmPre:function(t){var e=_.getGlobalValue(\"aplus\"),n=e._$||{},a=n.spm||{},o=a.spm_pre;if(\"object\"!=typeof t&&(t={}),\"undefined\"!=typeof window&&window.__megability_bridge__&&!o){var r=window.__megability_bridge__.syncCall(\"ut\",\"getPageSpmPre\",t);r&&0===r.statusCode&&r.data&&r.data.spmPre&&(o=r.data.spmPre)}return o},requestPageAllProperties:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-allpage-properties\",t):f().w(\"warning: typeof requestPageAllProperties's params must be object\")},setMetaInfo:function(t,e,n){var a,o,r=\"OVERWRITE\",i=r;if(\"object\"==typeof t?(a=t.metaName,o=t.metaValue,i=t.mode||r):(a=t,o=e),i!==r)return this.appendMetaInfo(a,o);if(P.setMetaInfo(a,o,n)){var s=_.getGoldlogVal(\"_$\")||{};s.meta_info=P.qGet();var u=_.setGoldlogVal(\"_$\",s),c=[\"setMetaInfo\",a,o,n];return g.doPubMsg(c),g.doCachePubs(c),u}},appendMetaInfo:P.appendMetaInfo,updatePageProperties:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?(t._page&&(t.pageName=t._page,e.setMetaInfo(\"aplus-pagename\",t.pageName),delete t._page),e.setMetaInfo(\"aplus-page-properties\",t),e.appendMetaInfo(\"aplus-cpvdata\",t)):f().w(\"warning: typeof updatePageProperties's params must be object\")},updateNextPageProperties:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"==typeof t?e.appendMetaInfo(\"aplus-nextpage-properties\",t):f().w(\"warning: typeof updateNextPageProperties's params must be object\")},updatePageName:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-pagename\",t):f().w(\"warning: typeof updatePageName's params must be object\")},updatePageUrl:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-pageurl\",t):f().w(\"warning: typeof updatePageUrl's params must be object\")},updatePageUtparam:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-page-utparam\",t):f().w(\"warning: typeof updatePageUtparam's params must be object\")},updateNextPageUtparam:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-nextpage-utparam\",t):f().w(\"warning: typeof updateNextPageUtparam's params must be object\")},updateNextPageUtparamCnt:function(t){var e=_.getGlobalValue(\"aplus\");t&&\"object\"==typeof t?e.setMetaInfo(\"aplus-nextpage-utparamcnt\",t):f().w(\"warning: typeof updateNextPageUtparamCnt's params must be object\")},setUserProfile:function(t){var e=_.getGlobalValue(\"aplus\");A(t)?e.setMetaInfo(m.APLUS_USER_PROFILE,t):f().w(\"warning: typeof setUserProfile's params must be object\")},getUserProfile:function(){var t=_.getGlobalValue(\"aplus\");return t.getMetaInfo(m.APLUS_USER_PROFILE)||{}},getMetaInfo:function(t){return P.getMetaInfo(t)},on:l.on,cloneDeep:d.cloneDeep,setCookie:u.setCookie,getCookie:u.getCookie,pageDisappear:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"!=typeof t&&(t={}),e.setMetaInfo(\"aplus-page-disappear\",t)},pageDisAppear:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"!=typeof t&&(t={}),e.setMetaInfo(\"aplus-page-disappear\",t)},pageAppear:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"!=typeof t&&(t={});var n={usePageAppearDontSkip:!0};n=d.assign(n,t),e.setMetaInfo(\"aplus-page-appear\",n)},skipPage:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"!=typeof t&&(t={}),e.setMetaInfo(\"aplus-skip-page\",t)},updateSessionProperties:function(t){var e=_.getGlobalValue(\"aplus\");\"object\"==typeof t?e.setMetaInfo(\"aplus-session-properties\",t):f().w(\"warning: typeof updateSessionProperties's params must be object\")},getElementSPM:function(t,e){var n=\"\";if(t){var a=c.tryToGetAttribute(t,\"data-eltype\")||e;if(window.g_SPM&&T(window.g_SPM.getParam)){var o=g_SPM.getParam(t);if(\"spmc\"===a){var r=c.tryToGetAttribute(t,\"data-spm\")||\"0\";n=[o.a,o.b,r].join(\".\")}else n=[o.a,o.b,o.c,o.d].join(\".\")}}return n}})},function(t,e,n){\"use strict\";var a=n(18),o=n(2),r=n(9),i=n(36),s=n(34),u=n(3),c=n(130),l=n(131),p=function(){};p.prototype.run=function(t,e,n){var p=new l;p.init({middleware:[],config:e.config,plugins:t.plugins});var f=p.run(),g=r(t.context)?new t.context:t.context;g.userdata=e.userdata,g.logger=s.logger;var d={context:g,pubsub:o.getGoldlogVal(\"aplus_pubsub\"),pubsubType:e&&e.pubsubType},_=new c;_.create(d),_.wrap(f,function(){d.context.status=u.COMPLETE,e&&(e.middlewareMessageKey&&i.doPubMsg([e.middlewareMessageKey,d.context]),e.messageFnQueue&&a(e.messageFnQueue,function(e){e(o.getGlobalValue(u.APLUS),t)})),r(n)&&n(d.context)})()},t.exports=p},function(t,e,n){\"use strict\";function a(){}var o=n(9),r=n(41),i=n(20);a.prototype.create=function(t){for(var e in t)\"undefined\"==typeof this[e]&&(this[e]=t[e]);return this},a.prototype.calledList=[],a.prototype.setCalledList=function(t){r.indexof(this.calledList,t)===-1&&this.calledList.push(t)},a.prototype.resetCalledList=function(){this.calledList=[]},a.prototype.wrap=function(t,e){var n=this,a=this.context||{},s=a.compose||{},u=s.maxTimeout||1e4;return function(a){var s,c=t.length,l=0,p=0,f=function(g,d){if(l===c)return a=\"done\",n.resetCalledList(),o(e)&&d!==a&&e.call(n,a),void clearTimeout(s);if(r.indexof(n.calledList,l)===-1){if(n.setCalledList&&n.setCalledList(l),!(t&&t[l]&&o(t[l][0])))return;try{a=t[l][0].call(n,a,function(){l++,p=1,f(l)})}catch(t){i().w(t)}}var _=\"number\"==typeof a;if(\"pause\"===a||_){p=0;var m=_?a:u,h=t[l]?t[l][1]:\"\";s=setTimeout(function(){0===p&&(i().w(\"jump the middleware about \"+h+\", because waiting timeout maxTimeout = \"+m),a=null,l++,f(l))},m)}else\"done\"===a?(l=c,f(l,a)):(l++,f(l))};return n.calledList&&n.calledList.length>0&&n.resetCalledList(),f(l)}},t.exports=a},function(t,e,n){\"use strict\";var a=n(13),o=n(20);t.exports=function(){return{init:function(t){this.opts=t,t&&\"object\"==typeof t.middleware&&t.middleware.length>0?this.middleware=t.middleware:this.middleware=[],this.plugins_name=[]},pubsubInfo:function(t,e){try{var n=t.pubsub;n&&n.publish(\"plugins_change_\"+t.pubsubType,e)}catch(t){o().w(t)}},run:function(t){t||(t=0);var e=this,n=this.middleware,o=this.opts||{},r=o.plugins;if(r&&\"object\"==typeof r&&r.length>0){var i=r[t];if(this.plugins_name.push(i.name),n.push([function(t,n){e.pubsubInfo(this,i);var r=new i.path;return r.init||(r.init=function(t){this.options=t}),r.init({context:this.context,config:a(i.config||{},o.config)}),r.run(t,function(t){setTimeout(function(){n(i,t)},1)})},i.name]),t++,r[t])return this.run(t)}return n}}}},function(t,e,n){function a(t){var e,n,a,o,r=u.getElementsByTagName(\"meta\");for(e=0,n=r.length;e-1&&(t=\"_\"+t),t}var u=n(2),c=n(41),l=n(9),p=n(20),f=n(3),g=function(t,e){function n(){if(t&&c.isArray(t)&&t.length){for(var n=v(t).queue,a={},o=[];a=n.shift();)h(a,e,function(t){o.push(t)});o.length>0&&setTimeout(function(){for(;a=o.shift();)h(a,e)},100)}}try{n()}catch(t){p().w(t)}};e.processGoldlogQueue=g;var d=[],_=[],m=[];e.subscribeAndProcessQueue=function(t,e){var n=u.getGlobalValue(t);n.push({action:f.SUBSCRIBE,arguments:[f.SET_META_INFO,function(t,n){t===f._USER_ID&&n?g(d,e):t===f._ANONY_ID&&n?g(_,e):\"_hold\"===t&&\"START\"===n&&i(e)}]})};var h=function(t,e,n){var a=!!e.isOpenApi,o=t?t.action:\"\",f=t?t.arguments:\"\",g=r(t);if(g){var d=u.getContext();try{if(o&&f&&c.isArray(f)){var _,m=o.split(\".\"),h=d,v=d;if(3===m.length)h=d[m[0]][m[1]]||{},_=s(m[2],a),v=h[_]?h[_]:\"\";else for(;m.length;)if(_=s(m.shift(),a),v=h=h[_],!h)return void(l(n)&&n(t));l(v)&&v.apply(h,f),\"START\"===g&&i(e)}}catch(t){p().w(t)}}};e.processTask=h;var v=function(t,e){for(var n={subscribeMwChangeQueue:[],subscribeMetaQueue:[],installPluginQueue:[],subscribeQueue:[],metaQueue:[],othersQueue:[]},a=[],o={};o=t.shift();)try{var r=o.action,i=o.arguments[0];/subscribe/.test(r)?\"setMetaInfo\"===i?n.subscribeMetaQueue.push(o):i===f.MW_CHANGE_PV||i===f.MW_CHANGE_HJLJ?n.subscribeMwChangeQueue.push(o):n.subscribeQueue.push(o):/MetaInfo/.test(r)?n.metaQueue.push(o):/installPlugin/.test(r)?n.installPluginQueue.push(o):n.othersQueue.push(o)}catch(t){p().w(t),n.othersQueue.push(o)}var s;return e&&n[e]&&(s=n[e],n[e]=[]),a=n.subscribeMwChangeQueue.concat(n.metaQueue),a=a.concat(n.installPluginQueue),a=a.concat(n.subscribeQueue),a=a.concat(n.subscribeMetaQueue,n.othersQueue),{queue:a,formatQueue:s}};e.getFormatQueue=v},function(t,e,n){\"use strict\";var a=n(88),o=n(47),r=n(29),i=n(89),s=n(31),u=n(3),c=n(2),l=n(91);t.exports=function(){return{init:function(t){this.options=t,this.today=a.getFormatDate()},run:function(){var t=this,e=c.getGlobalValue(\"aplus\"),n=l.isCnaEnable();if(n){var a=c.getGoldlogVal(\"globalConfig\");if(s.test()){var p=r.getLsCna(a.ETAG_STORAGE_KEY,t.today);p||setTimeout(function(){var n=e.getMetaInfo(u.APLUS_RHOST_V);if(n){t.options.context.etag.egUrl=n.replace(/\\/\\w+.gif$/,\"\")+\"/eg.js\";var s=i.getUrl(t.options.context.etag||{});l.requestCna(s,function(e){var n=c.getGoldlogVal(\"Etag\");(o(e)||e&&\"error\"!==e.type)&&r.setLsCna(a.ETAG_STORAGE_KEY,t.today,n)})}},1e3)}}}}}},function(t,e,n){\"use strict\";var a=n(10),o=n(2),r=n(135),i=a.extend({push:function(t){this.length++,r.processTask(t,this.opts)}});t.exports=function(){return{processAplusQueue:function(t){var e=this.options.config||{},n=o.getGlobalValue(t);o.setGlobalValue(t,i.create({opts:e,startLength:n.length,length:0})),r.processGoldlogQueue(n,e)},run:function(){var t=this.options.context.aplus_config,e=t.globalConfig.APLUS_QUEUE;this.processAplusQueue(e),\"aplus_queue\"===e&&this.processAplusQueue(\"goldlog_queue\"),r.subscribeAndProcessQueue(e,this.options.config)}}}},function(t,e,n){\"use strict\";var a=n(18),o=n(44),r=n(41);t.exports=function(){return{init:function(t){this.options=t},addStyle:function(t,e){var n=t+\"_style\",a=document.getElementById(n);a||(a=document.createElement(\"link\"),a.id=n,a.href=e,a.rel=\"stylesheet\",a.type=\"text/css\",document.getElementsByTagName(\"head\").item(0).appendChild(a))},run:function(){var t=this,e=parent!==self,n=this.options.config||{};r.isArray(n.urlRules)&&a(n.urlRules,function(n){if(!e||n.allowIframeLoad){var i,s=new RegExp(n.rule);try{i=n.id?window.sessionStorage.getItem(n.id):\"\"}catch(t){}if(s.test(location.href)||i){try{window.sessionStorage.setItem(n.id,!0)}catch(t){}r.isArray(n.cdnPath)?a(n.cdnPath,function(e){/\\.css$/.test(e)?t.addStyle(n.id,e):/\\.js/.test(e)&&o.addScript(e)}):o.addScript(n.cdnPath)}}})}}}},function(t,e,n){\"use strict\";var a=n(3),o=n(44),r=n(77),i=n(2);t.exports=function(){return{run:function(){var t=this.options.config||{},e=i.getGlobalValue(a.APLUS),n=e._$||{},s=n.meta_info||{},u=e&&e.getCdnPath?e.getCdnPath():t.cdnPath,c=u+\"/sd/baxia-entry/index.js\";r.onload(function(){var t=s[\"aplus-xplug\"];\"NONE\"!==t&&o.addScript(c,\"\",\"aplus-baxia\")})}}}},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){aplus._aplus_cplugin_webvt||n(141)()}}}},function(t,e,n){\"use strict\";function a(t){var e=m.getQueryFromUrl()||{},n=f({},e);return delete n.spm,delete n.utparam,\"config\"===t?n._is_config_pv=\"1\":n._is_auto_pv=\"1\",n}function o(){var t=l.getGlobalValue(\"aplus\"),e=t.getMetaInfo(\"data-spm\")||d.hash(location.host),n=d.hash(location.pathname);return[e,n]}function r(){var t=l.getGlobalValue(\"aplus_queue\"),e=o();t.push({action:\"aplus.setPageSPM\",\narguments:e})}function i(){var t=l.getGlobalValue(\"aplus\"),e=a(\"auto\"),n=t.getPageSPM()||[];\"0\"===n[1]&&r(),aplus_queue.push({action:\"aplus.sendPV\",arguments:[{is_auto:!0},e]})}function s(){var t=l.getGlobalValue(\"aplus\"),e=l.getGlobalValue(\"aplus_queue\"),n=t.getMetaInfo(p.APLUS_SPA_TYPE);[\"history\",\"hash\"].indexOf(n)>-1?(i(),e.push({action:\"aplus.aplus_pubsub.subscribe\",arguments:[p.APLUS_PAGE_CHANGE,function(){r();var t=a(\"auto\");e.push({action:\"aplus.sendPV\",arguments:[{is_auto:!0},t]})}]})):i()}function u(t){var e=l.getGlobalValue(\"aplus\"),n=l.getGlobalValue(\"aplus_queue\"),r=e.getMetaInfo(p.APLUS_AUTO_PV)||[],i=a(\"config\");g(r,function(e){var a=e.match,r=v(a)&&a(t)||b(a)&&a.test(t.pathname);if(r){var s=e.pageSPM||v(e.getPageSPM)&&e.getPageSPM(t)||o(),u=v(e.formatter)&&e.formatter(i,t)||{};u._is_config_pv=\"1\",n.push({action:\"aplus.setPageSPM\",arguments:s}),n.push({action:\"aplus.sendPV\",arguments:[{is_auto:!1},u]})}})}function c(){var t=l.getGlobalValue(\"aplus\"),e=t.getMetaInfo(p.APLUS_SPA_TYPE);u({pathname:location.pathname}),[\"history\",\"hash\"].indexOf(e)>-1&&aplus_queue.push({action:\"aplus.aplus_pubsub.subscribe\",arguments:[p.APLUS_PAGE_CHANGE,function(t){u(t)}]}),aplus_queue.push({action:\"aplus.aplus_pubsub.subscribe\",arguments:[\"setMetaInfo\",function(t){t===p.APLUS_AUTO_PV&&u({pathname:location.pathname})}]})}var l=n(2),p=n(3),f=n(13),g=n(18),d=n(59),_=n(45),m=n(17),h=n(77),v=n(9),b=n(142),y=n(19);t.exports=function(){var t=l.getGlobalValue(\"aplus\"),e=l.getGlobalValue(\"aplus_queue\"),n=_.getConfig()||{},a=t.getMetaInfo(\"aplus-waiting\"),o=t.getMetaInfo(\"aplus-cross-day-auto-pv\"),r=n.pvTrack;t._aplus_apv||(t._aplus_apv={status:\"complete\"},\"off\"===r||\"MAN\"===a?c():s(),\"on\"===o&&h.on(document.body,\"click\",function(){var n=t._last_pv_info;if(y(n)){var a=new Date,o=new Date(n.datetime);if(a.getFullYear()>o.getFullYear()||a.getMonth()>o.getMonth()||a.getDate()>o.getDate()){var r=n.pageConfig||{},i=n.pageParams||{};i._is_cross_day_auto_pv=\"1\",e.push({action:\"aplus.sendPV\",arguments:[r,i]})}}}))}},function(t,e){function n(t){return\"[object RegExp]\"===Object.prototype.toString.call(t)}t.exports=n},function(t,e,n){\"use strict\";t.exports=function(){return{run:function(){n(144)()}}}},function(t,e,n){\"use strict\";function a(){var t=d.getGlobalValue(\"aplus_queue\"),e=[];m(L,function(t,n){e.push(n)}),t.push({action:\"aplus.appendMetaInfo\",arguments:[_.APLUS_SINGLE_RECORD_LOGKEYS,e]})}function o(t,e){var n=[{to:\"_form_id\",getValue:function(){return t===L.INIT?e:T.getCurrentFormId()}}];return t!==L.INIT&&n.push({to:\"_form_session\",getValue:function(){var t=P.createFormBridgeByFormId(e);return t.getSessionId()}}),n}function r(t){var e=w.getMetaInfo(t),n=[];return y(e)&&m(e,function(t){t.from!==U&&n.push(t)}),n}function i(t){var e=t.logkey,n=t.cssSelector,a={logkey:e,cssSelector:n,props:o(e,t.formId),formatter:function(n,a){var o=Date.now(),r=e===L.INIT?t.formId:T.getCurrentFormId(),i=P.createFormBridgeByFormId(r),s=i.getTimestamp(O.FORM_INIT);if(e===L.INIT){a.setAttribute(N,r);var u=Math.random().toString(36).substring(2,10);i.setSessionId(u),n._form_session=u,i.reset(),i.setTimestamp(O.FORM_INIT,o),T.setCurrentFormId(r),i.setStatus(R.INACTIVATED)}else if(e===L.SUCCESS_SUBMIT)i.setTimestamp(O.FORM_LATEST_SUCCESS_SUBMIT,o),n._form_duration=o-s;else if(e===L.FAIL_SUBMIT)i.setTimestamp(O.FORM_LATEST_FAIL_SUBMIT,o),n._form_duration=o-s,n._form_error_text=a.innerText;else if(e===L.FIELD_VALIDATE_ERROR){i.setTimestamp(O.FORM_FIELD_LATEST_FAIL_INPUT,o);var c=i.loopGetFormFieldLabelDom(a);n._form_field_name=c&&c.innerText||\"\",n._form_field_error_text=a.innerText}return h().i(k,e,n),n},filter:function(n,a){var o=e===L.INIT?t.formId:T.getCurrentFormId();if(!S(o)){var r=P.createFormBridgeByFormId(o);if([L.FAIL_SUBMIT,L.FIELD_VALIDATE_ERROR,L.SUCCESS_SUBMIT].indexOf(a.logkey)>-1){var i=r.getTimestamp(O.FORM_INIT);return!S(i)}return!0}},from:U};return a}function s(t){var e=t.logkey,n=t.cssSelector,a={logkey:e,cssSelector:n,props:o(e,t.formId),enableMultipleConfig:!0,formatter:function(n,a){var o=Date.now(),r=e===L.INIT?t.formId:T.getCurrentFormId(),i=P.createFormBridgeByFormId(r),s=i.getTimestamp(O.FORM_INIT);if(s){if(T.setCurrentFormId(r),e===L.SUBMIT)i.setTimestamp(O.FORM_LATEST_FAIL_SUBMIT,void 0),i.setTimestamp(O.FORM_LATEST_SUCCESS_SUBMIT,void 0),i.setTimestamp(O.FORM_LATEST_SUBMIT,o),n._form_duration=o-s,i.recordLatestFieldInfo(o),i.setStatus(R.ACTIVATED);else if(e===L.FIELD_DURATION){var u=i.getLatestFieldInfo(o);n._form_field_name=u.latestFieldName,n._form_field_duration=u.latestFieldDuration,i.setTimestamp(O.FORM_FIELD_LATEST_START,o),i.setInputingFormItemDom(a)}return h().i(k,e,n),n}},filter:function(n,a){var o=e===L.INIT?t.formId:T.getCurrentFormId();if(!S(o)){var r=P.createFormBridgeByFormId(o),i=T.getCurrentFormId();if(S(i))return!1;var s=!1;if(a.logkey===L.FIELD_DURATION){var u=Date.now(),c=r.getInputingFormItemDom();S(c)&&(r.setTimestamp(O.FORM_FIELD_LATEST_START,u),r.setInputingFormItemDom(n)),r.setStatus(R.ACTIVATED),s=c&&c!==n}else if(a.logkey===L.SUBMIT){var l=document.querySelector(r.getFormElementQuerySelectorStr());s=!E(l)}else s=!0;return s}},from:U};return a}function u(t){var e=d.getGlobalValue(\"aplus_queue\"),n=r(_.APLUS_AUTO_CLK);e.push({action:\"aplus.setMetaInfo\",arguments:[_.APLUS_AUTO_CLK,n.concat(t)]})}function c(t){var e=d.getGlobalValue(\"aplus_queue\"),n=r(_.APLUS_AUTO_EXP);e.push({action:\"aplus.setMetaInfo\",arguments:[_.APLUS_AUTO_EXP,n.concat(t)]})}function l(){var t=d.getGlobalValue(\"aplus_queue\"),e=v(function(){var e=T.getFormCacheMap();m(e,function(e){var n=e,a=P.createFormBridgeByFormId(e),o=a.getTimestamp(O.FORM_INIT),r=a.getTimestamp(O.FORM_LEAVE),i=a.getTimestamp(O.FORM_LATEST_SUBMIT),s=a.getTimestamp(O.FORM_LATEST_SUCCESS_SUBMIT),u=a.getTimestamp(O.FORM_LATEST_FAIL_SUBMIT),c=a.getTimestamp(O.FORM_FIELD_LATEST_FAIL_INPUT),l=document.querySelector(a.getFormElementQuerySelectorStr()),p=E(l)&&!S(o)&&S(r)&&(S(i)||c>i||!S(s)||!S(u));if(p){a.reset();var f=Date.now();a.setTimestamp(O.FORM_LEAVE,f);var g=L.LEAVE,d={_form_id:n,_form_session:a.getSessionId(),_form_duration:f-o,_form_status:a.getStatus().toLocaleLowerCase()};t.push({action:\"aplus.record\",arguments:[g,\"CLK\",d,\"POST\"]}),h().i(k,g,d)}})},200);return t.push({action:\"aplus.aplus_pubsub.subscribe\",arguments:[_.APLUS_DOM_CHANGE,e]}),function(){t.push({action:\"aplus.aplus_pubsub.unsubscribe\",arguments:[_.APLUS_DOM_CHANGE,e]})}}function p(){var t=d.getGlobalValue(\"aplus_queue\");t.push({action:\"aplus.aplus_pubsub.subscribe\",arguments:[_.APLUS_PAGE_CHANGE,function(){g()}]})}function f(t,e){var n=!1;return m(t,function(t){t.cssSelector===e&&(n=!0)}),n}function g(){var t=I.getMatchedForms(w[x].formConfigs||[]);if(T.clearFormCache(),b(M)&&M(),M=l(),y(t)){a();var e=[],n=[];m(t,function(t){if(T.initFormCacheByFormConfig(t),t.formRootSelector&&!f(e,t.formRootSelector)&&e.push(i({cssSelector:t.formRootSelector,logkey:L.INIT,formId:t.formId})),t.formItemSelector&&!f(n,t.formItemSelector)&&n.push(s({cssSelector:t.formItemSelector,logkey:L.FIELD_DURATION,formId:t.formId})),t.formItemErrorInfoSelector&&!f(e,t.formItemErrorInfoSelector)&&e.push(i({cssSelector:t.formItemErrorInfoSelector,logkey:L.FIELD_VALIDATE_ERROR,formId:t.formId})),t.formSubmitButtonSelector&&!f(n,t.formSubmitButtonSelector)&&n.push(s({cssSelector:t.formSubmitButtonSelector,logkey:L.SUBMIT,formId:t.formId})),t.formSubmitSuccessFeature){var a=t.formSubmitSuccessFeature.type,o=t.formSubmitSuccessFeature.content;\"layer\"===a&&o&&!f(e,o)&&e.push(i({cssSelector:o,logkey:L.SUCCESS_SUBMIT,formId:t.formId}))}t.formSubmitFailureFeatureSelector&&!f(e,t.formSubmitFailureFeatureSelector)&&e.push(i({cssSelector:t.formSubmitFailureFeatureSelector,logkey:L.FAIL_SUBMIT,formId:t.formId}))}),u(n),c(e)}}var d=n(2),_=n(3),m=n(18),h=n(20),v=n(63),b=n(9),y=n(38),E=n(62),S=n(65),A=n(145),T=n(146),P=n(147),I=n(148),w=d.getGlobalValue(\"aplus\"),M=null,x=A.CACHE_KEY,C=A.FORM_CACHE_MAP_KEY,L=A.ACTION_TYPE_LOGKEY_MAP,O=A.LIFECYCLE_TIMESTAMP_ANCHOR_MAP,U=A.FORM_TAG,k=A.FORM_LOG_PREFIX,R=A.FORM_STATUS,N=A.FORM_NODE_ATTRIBUTE_NAME;t.exports=function(){var t=d.getGlobalValue(\"aplus\");b(t.getMetaInfo)&&\"on\"===t.getMetaInfo(\"aplus-form-track\")&&(t[x]||(t[x]={status:\"init\"},t[x][C]={},I.fetchConfig(function(e){t[x].status=\"complete\",t[x].formConfigs=e,g(),p()})))}},function(t,e){\"use strict\";var n=\"[form log] -- \",a=\"/aplus.form.\",o=\"_aplus_form_track\",r=\"formCacheMap\",i=\"form_track\",s=\"lifecycleTimestamp\",u={FORM_INIT:\"formInit\",FORM_LATEST_SUBMIT:\"formLatestSubmit\",FORM_LATEST_SUCCESS_SUBMIT:\"formLatestSuccessSubmit\",FORM_FIELD_LATEST_FAIL_INPUT:\"formFieldLatestFailInput\",FORM_LATEST_FAIL_SUBMIT:\"formLatestFailSubmit\",FORM_LEAVE:\"formLeave\",FORM_FIELD_LATEST_START:\"formFieldLatestStart\"},c={INIT:a+\"init\",LEAVE:a+\"leave\",FIELD_VALIDATE_ERROR:a+\"field_validate_error\",FIELD_DURATION:a+\"field_duration\",SUBMIT:a+\"submit\",SUCCESS_SUBMIT:a+\"success_submit\",FAIL_SUBMIT:a+\"fail_submit\"},l={ACTIVATED:\"ACTIVATED\",INACTIVATED:\"INACTIVATED\"},p=\"data-aplus-form-id\";t.exports={FORM_LOG_PREFIX:n,CACHE_KEY:o,FORM_CACHE_MAP_KEY:r,FORM_TAG:i,LIFECYCLE_TIMESTAMP:s,LIFECYCLE_TIMESTAMP_ANCHOR_MAP:u,ACTION_TYPE_LOGKEY_MAP:c,FORM_STATUS:l,FORM_NODE_ATTRIBUTE_NAME:p}},function(t,e,n){\"use strict\";var a=n(2),o=n(145),r=a.getGlobalValue(\"aplus\"),i=o.CACHE_KEY,s=o.FORM_CACHE_MAP_KEY,u=o.LIFECYCLE_TIMESTAMP;t.exports={clearFormCache:function(){r[i][s]={}},initFormCacheByFormConfig:function(t){var e={labelSelector:t.formItemLabelSelector};e[u]={},r[i][s][t.formId]=e},getFormCacheMap:function(){var t=r[i][s]||(r[i][s]={});return t},getFormCacheByFormId:function(t){var e=this.getFormCacheMap(),n=e[t];return n},setCurrentFormId:function(t){r[i].currentFormId=t},getCurrentFormId:function(){return r[i].currentFormId}}},function(t,e,n){\"use strict\";var a=n(2),o=n(20),r=n(62),i=n(146),s=n(145),u=s.LIFECYCLE_TIMESTAMP,c=s.ACTION_TYPE_LOGKEY_MAP,l=s.LIFECYCLE_TIMESTAMP_ANCHOR_MAP,p=s.FORM_LOG_PREFIX,f=s.FORM_NODE_ATTRIBUTE_NAME;t.exports={createFormBridgeByFormId:function(t){var e=i.getFormCacheByFormId(t);return{getFormElementQuerySelectorStr:function(){return\"[\"+f+'=\"'+t+'\"]'},reset:function(){this.clearTimestamps(),this.setInputingFormItemDom(null)},setStatus:function(t){e.status=t},getStatus:function(){return e.status},getTimestamp:function(t){return e[u][t]},setTimestamp:function(t,n){e[u][t]=n},clearTimestamps:function(){e[u]={}},getSessionId:function(){return e.sessionId},setSessionId:function(t){e.sessionId=t},getInputingFormItemDom:function(){return e.inputingFormItemDom},setInputingFormItemDom:function(t){e.inputingFormItemDom=t},getLabelSelector:function(){return e.labelSelector},loopGetFormFieldLabelDom:function(t){for(var e=this,n=e.getLabelSelector(),a=t,o=10,i=0,s=null;a&&r(a.getAttribute(f))&&i0&&localStorage.setItem(\"aplusDebug\",e[1]),a=\"true\"===localStorage.getItem(\"aplusDebug\")}else a=!1;return o.setGoldlogVal(\"aplusDebug\",a),a&&r().setDebug(a),a}},function(t,e,n){\"use strict\";var a=n(129),o=n(9),r=n(36);e.run=function(t,e){var n=new a;n.run({plugins:t.plugins,context:t.context},{config:{},userdata:{},pubsubType:\"aplusinit\",messageFnQueue:[],middlewareMessageKey:\"mw_change_aplusinit\"},function(t){var n=[\"aplusInitContext\",t];r.doPubMsg(n),r.doCachePubs(n),o(e)&&e(t)})}}]);/*! 2025-03-27 16:49:48 aplus_spmact.js */\n!function(t){function e(n){if(r[n])return r[n].exports;var a=r[n]={exports:{},id:n,loaded:!1};return t[n].call(a.exports,a,a.exports,e),a.loaded=!0,a.exports}var r={};return e.m=t,e.c=r,e.p=\"\",e(0)}([function(t,e,r){t.exports=r(1)},function(t,e){\"use strict\";!function(){function t(t,e,r){t[_]((h?\"on\":\"\")+e,function(t){t=t||s.event;var e=t.target||t.srcElement;r(t,e)},!1)}function e(){return/&?\\bspm=[^&#]*/.test(location.href)?location.href.match(/&?\\bspm=[^&#]*/gi)[0].split(\"=\")[1]:\"\"}function r(t,e){if(t&&/&?\\bspm=[^&#]*/.test(t)&&(t=t.replace(/&?\\bspm=[^&#]*/g,\"\").replace(/&{2,}/g,\"&\").replace(/\\?&/,\"?\").replace(/\\?$/,\"\")),!e)return t;var r,n,a,i,o,c,p,s=\"&\";if(t.indexOf(\"#\")!=-1&&(a=t.split(\"#\"),t=a.shift(),n=a.join(\"#\")),i=t.split(\"?\"),o=i.length-1,a=i[0].split(\"//\"),a=a[a.length-1].split(\"/\"),c=a.length>1?a.pop():\"\",o>0&&(r=i.pop(),t=i.join(\"?\")),r&&o>1&&r.indexOf(\"&\")==-1&&r.indexOf(\"%\")!=-1&&(s=\"%26\"),t=t+\"?spm=\"+e+(r?s+r:\"\")+(n?\"#\"+n:\"\"),p=c.indexOf(\".\")>-1?c.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(p))return 0;!r&&o<=1&&(n||{htm:1,html:1,php:1}.hasOwnProperty(p)||(t+=\"&file=\"+c))}return t}function n(t){function e(t){return t=t.replace(/refpos[=(%3D)]\\w*/gi,c).replace(i,\"%3D\"+n+\"%26\"+a.replace(\"=\",\"%3D\")).replace(o,n),a.length>0&&(t+=\"&\"+a),t}var r=window.location.href,n=r.match(/mm_\\d{0,24}_\\d{0,24}_\\d{0,24}/i),a=r.match(/[&\\?](pvid=[^&]*)/i),i=new RegExp(\"%3Dmm_\\\\d+_\\\\d+_\\\\d+\",\"ig\"),o=new RegExp(\"mm_\\\\d+_\\\\d+_\\\\d+\",\"ig\");a=a&&a[1]?a[1]:\"\";var c=r.match(/(refpos=(\\d{0,24}_\\d{0,24}_\\d{0,24})?(,[a-z]+)?)(,[a-z]+)?/i);return c=c&&c[0]?c[0]:\"\",n?(n=n[0],e(t)):t}function a(e){var r=s.KISSY;r?r.ready(e):s.jQuery?jQuery(m).ready(e):\"complete\"===m.readyState?e():t(s,\"load\",e)}function i(t,e){return t&&t.getAttribute?t.getAttribute(e)||\"\":\"\"}function o(t){if(t){var e,r=g.length;for(e=0;e-1)return!0;return!1}}function c(t,e){if(t&&/&?\\bspm=[^&#]*/.test(t)&&(t=t.replace(/&?\\bspm=[^&#]*/g,\"\").replace(/&{2,}/g,\"&\").replace(/\\?&/,\"?\").replace(/\\?$/,\"\")),!e)return t;var r,n,a,i,o,c,p,s=\"&\";if(t.indexOf(\"#\")!=-1&&(a=t.split(\"#\"),t=a.shift(),n=a.join(\"#\")),i=t.split(\"?\"),o=i.length-1,a=i[0].split(\"//\"),a=a[a.length-1].split(\"/\"),c=a.length>1?a.pop():\"\",o>0&&(r=i.pop(),t=i.join(\"?\")),r&&o>1&&r.indexOf(\"&\")==-1&&r.indexOf(\"%\")!=-1&&(s=\"%26\"),t=t+\"?spm=\"+e+(r?s+r:\"\")+(n?\"#\"+n:\"\"),p=c.indexOf(\".\")>-1?c.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(p))return 0;!r&&o<=1&&(n||{htm:1,html:1,shtml:1,php:1}.hasOwnProperty(p)||(t+=\"&__file=\"+c))}return t}function p(t){if(o(t.href)){var r=i(t,u);if(!r){var n=l()(t),a=[n.a,n.b,n.c,n.d].join(\".\");n.e&&(n+=\".\"+n.e),d&&(a=[n.a||\"0\",n.b||\"0\",n.c||\"0\",n.d||\"0\"].join(\".\"),a=(e()||\"0.0.0.0.0\")+\"_\"+a),t.href=c(t.href,a),t.setAttribute(u,a)}}}var s=window,m=document;if(1!==s.aplus_spmact){s.aplus_spmact=1;var f=function(){return{a:0,b:0,c:0,d:0,e:0}},l=function(){return s.g_SPM&&s.g_SPM.getParam?s.g_SPM.getParam:f},d=!0;try{d=self.location!=top.location}catch(t){}var u=\"data-spm-act-id\",g=[\"mclick.simba.taobao.com\",\"click.simba.taobao.com\",\"click.tanx.com\",\"click.mz.simba.taobao.com\",\"click.tz.simba.taobao.com\",\"redirect.simba.taobao.com\",\"rdstat.tanx.com\",\"stat.simba.taobao.com\",\"s.click.taobao.com\"],h=!!m.attachEvent,b=\"attachEvent\",v=\"addEventListener\",_=h?b:v;t(m,\"mousedown\",function(t,e){for(var r,n=0;e&&(r=e.tagName);){if(\"A\"==r||\"AREA\"==r){p(e);break}if(\"BODY\"==r||\"HTML\"==r)break;e=e.parentNode,n+=1}}),a(function(){for(var t,a,o=document.getElementsByTagName(\"iframe\"),c=0;c\",w=n&&n.createElement(\"div\"),g=[],x={webkit:void 0,edge:void 0,trident:void 0,gecko:void 0,presto:void 0,chrome:void 0,safari:void 0,firefox:void 0,ie:void 0,ieMode:void 0,opera:void 0,mobile:void 0,core:void 0,shell:void 0,phantomjs:void 0,os:void 0,ipad:void 0,iphone:void 0,ipod:void 0,ios:void 0,android:void 0,nodejs:void 0,extraName:void 0,extraVersion:void 0};if(w&&w.getElementsByTagName&&(w.innerHTML=p.replace(v,\"\"),g=w.getElementsByTagName(\"s\")),g.length>0){for(_(e,x),s=f[0],c=f[1];s<=c;s++)if(w.innerHTML=p.replace(v,s),g.length>0){x[b=\"ie\"]=s;break}!x.ie&&(d=N(e))&&(x[b=\"ie\"]=d)}else((a=e.match(/AppleWebKit\\/*\\s*([\\d.]*)/i))||(a=e.match(/Safari\\/([\\d.]*)/)))&&a[1]?(x[m=\"webkit\"]=y(a[1]),(a=e.match(/OPR\\/(\\d+\\.\\d+)/))&&a[1]?x[b=\"opera\"]=y(a[1]):(a=e.match(/Chrome\\/([\\d.]*)/))&&a[1]?x[b=\"chrome\"]=y(a[1]):(a=e.match(/\\/([\\d.]*) Safari/))&&a[1]?x[b=\"safari\"]=y(a[1]):x.safari=x.webkit,(a=e.match(/Edge\\/([\\d.]*)/))&&a[1]&&(m=b=\"edge\",x[m]=y(a[1])),/ Mobile\\//.test(e)&&e.match(/iPad|iPod|iPhone/)?(x.mobile=\"apple\",a=e.match(/OS ([^\\s]*)/),a&&a[1]&&(x.ios=y(a[1].replace(\"_\",\".\"))),t=\"ios\",a=e.match(/iPad|iPod|iPhone/),a&&a[0]&&(x[a[0].toLowerCase()]=x.ios)):/ Android/i.test(e)?(/Mobile/.test(e)&&(t=x.mobile=\"android\"),a=e.match(/Android ([^\\s]*);/),a&&a[1]&&(x.android=y(a[1]))):(a=e.match(/NokiaN[^\\/]*|Android \\d\\.\\d|webOS\\/\\d\\.\\d/))&&(x.mobile=a[0].toLowerCase()),(a=e.match(/PhantomJS\\/([^\\s]*)/))&&a[1]&&(x.phantomjs=y(a[1]))):(a=e.match(/Presto\\/([\\d.]*)/))&&a[1]?(x[m=\"presto\"]=y(a[1]),(a=e.match(/Opera\\/([\\d.]*)/))&&a[1]&&(x[b=\"opera\"]=y(a[1]),(a=e.match(/Opera\\/.* Version\\/([\\d.]*)/))&&a[1]&&(x[b]=y(a[1])),(a=e.match(/Opera Mini[^;]*/))&&a?x.mobile=a[0].toLowerCase():(a=e.match(/Opera Mobi[^;]*/))&&a&&(x.mobile=a[0]))):(d=N(e))?(x[b=\"ie\"]=d,_(e,x)):(a=e.match(/Gecko/))&&(x[m=\"gecko\"]=.1,(a=e.match(/rv:([\\d.]*)/))&&a[1]&&(x[m]=y(a[1]),/Mobile|Tablet/.test(e)&&(x.mobile=\"firefox\")),(a=e.match(/Firefox\\/([\\d.]*)/))&&a[1]&&(x[b=\"firefox\"]=y(a[1])));t||(t=i());var z,O,T;if(!r(\"type\",\"application/vnd.chromium.remoting-viewer\")){z=\"scoped\"in n.createElement(\"style\"),T=\"v8Locale\"in o;try{O=o.external||void 0}catch(e){}if(a=e.match(/360SE/))u=\"360\";else if((a=e.match(/SE\\s([\\d.]*)/))||O&&\"SEVersion\"in O)u=\"sougou\",h=y(a[1])||.1;else if((a=e.match(/Maxthon(?:\\/)+([\\d.]*)/))&&O){u=\"maxthon\";try{h=y(O.max_version||a[1])}catch(e){h=.1}}else z&&T?u=\"360se\":z||T||!/Gecko\\)\\s+Chrome/.test(k)||x.opera||x.edge||(u=\"360ee\")}(a=e.match(/TencentTraveler\\s([\\d.]*)|QQBrowser\\/([\\d.]*)/))?(u=\"tt\",h=y(a[2])||.1):(a=e.match(/LBBROWSER/))||O&&\"LiebaoGetVersion\"in O?u=\"liebao\":(a=e.match(/TheWorld/))?(u=\"theworld\",h=3):(a=e.match(/TaoBrowser\\/([\\d.]*)/))?(u=\"taobao\",h=y(a[1])||.1):(a=e.match(/UCBrowser\\/([\\d.]*)/))&&(u=\"uc\",h=y(a[1])||.1),x.os=t,x.core=x.core||m,x.shell=b,x.ieMode=x.ie&&n.documentMode||x.ie,x.extraName=u,x.extraVersion=h;var P=o.screen.width,M=o.screen.height;return x.resolution=P+\"x\"+M,x},S=function(e){function i(e){return Object.prototype.toString.call(e)}function o(e,o,n){if(\"[object Function]\"==i(o)&&(o=o(n)),!o)return null;var r={name:e,version:\"\"},t=i(o);if(o===!0)return r;if(\"[object String]\"===t){if(n.indexOf(o)!==-1)return r}else if(o.exec){var a=o.exec(n);if(a)return a.length>=2&&a[1]?r.version=a[1].replace(/_/g,\".\"):r.version=\"\",r}}var n={name:\"other\",version:\"\"};e=(e||\"\").toLowerCase();for(var r=[[\"nokia\",function(e){return e.indexOf(\"nokia \")!==-1?/\\bnokia ([0-9]+)?/:/\\bnokia([a-z0-9]+)?/}],[\"samsung\",function(e){return e.indexOf(\"samsung\")!==-1?/\\bsamsung(?:[ \\-](?:sgh|gt|sm))?-([a-z0-9]+)/:/\\b(?:sgh|sch|gt|sm)-([a-z0-9]+)/}],[\"wp\",function(e){return e.indexOf(\"windows phone \")!==-1||e.indexOf(\"xblwp\")!==-1||e.indexOf(\"zunewp\")!==-1||e.indexOf(\"windows ce\")!==-1}],[\"pc\",\"windows\"],[\"ipad\",\"ipad\"],[\"ipod\",\"ipod\"],[\"iphone\",/\\biphone\\b|\\biph(\\d)/],[\"mac\",\"macintosh\"],[\"mi\",/\\bmi[ \\-]?([a-z0-9 ]+(?= build|\\)))/],[\"hongmi\",/\\bhm[ \\-]?([a-z0-9]+)/],[\"aliyun\",/\\baliyunos\\b(?:[\\-](\\d+))?/],[\"meizu\",function(e){return e.indexOf(\"meizu\")>=0?/\\bmeizu[\\/ ]([a-z0-9]+)\\b/:/\\bm([0-9x]{1,3})\\b/}],[\"nexus\",/\\bnexus ([0-9s.]+)/],[\"huawei\",function(e){var i=/\\bmediapad (.+?)(?= build\\/huaweimediapad\\b)/;return e.indexOf(\"huawei-huawei\")!==-1?/\\bhuawei\\-huawei\\-([a-z0-9\\-]+)/:i.test(e)?i:/\\bhuawei[ _\\-]?([a-z0-9]+)/}],[\"lenovo\",function(e){return e.indexOf(\"lenovo-lenovo\")!==-1?/\\blenovo\\-lenovo[ \\-]([a-z0-9]+)/:/\\blenovo[ \\-]?([a-z0-9]+)/}],[\"zte\",function(e){return/\\bzte\\-[tu]/.test(e)?/\\bzte-[tu][ _\\-]?([a-su-z0-9\\+]+)/:/\\bzte[ _\\-]?([a-su-z0-9\\+]+)/}],[\"vivo\",/\\bvivo(?: ([a-z0-9]+))?/],[\"htc\",function(e){return/\\bhtc[a-z0-9 _\\-]+(?= build\\b)/.test(e)?/\\bhtc[ _\\-]?([a-z0-9 ]+(?= build))/:/\\bhtc[ _\\-]?([a-z0-9 ]+)/}],[\"oppo\",/\\boppo[_]([a-z0-9]+)/],[\"konka\",/\\bkonka[_\\-]([a-z0-9]+)/],[\"sonyericsson\",/\\bmt([a-z0-9]+)/],[\"coolpad\",/\\bcoolpad[_ ]?([a-z0-9]+)/],[\"lg\",/\\blg[\\-]([a-z0-9]+)/],[\"android\",/\\bandroid\\b|\\badr\\b/],[\"blackberry\",function(e){return e.indexOf(\"blackberry\")>=0?/\\bblackberry\\s?(\\d+)/:\"bb10\"}]],t=0;t0?o.ratio:r.jsErrorRecordRatio}),e=[\"Message: \"+o.message,\"Error object: \"+o.error,\"Url: \"+location.href].join(\" - \"),c=goldlog.spm_ab||[],i=location.hostname+location.pathname;t.run({code:110,page:i,msg:\"record_jserror_by\"+s+\"_\"+o.message,spm_a:c[0],spm_b:c[1],c1:e,c2:o.filename,c3:location.protocol+\"//\"+i,c4:goldlog.pvid||\"\",c5:o.logid||\"\"})}catch(o){a.logger({msg:o})}},do_tracker_lostpv:function(o){var t=!1;try{if(o&&o.page){var e=o.spm_ab?o.spm_ab.split(\".\"):[],c=\"record_lostpv_by\"+s+\"_\"+o.msg,i=new n({ratio:o.ratio||r.lostPvRecordRatio});i.run({code:102,page:o.page,msg:c,spm_a:e[0],spm_b:e[1],c1:o.duration,c2:o.page_url}),t=!0}}catch(o){a.logger({msg:o})}return t},do_tracker_obsolete_inter:function(o){var t=!1;try{if(o&&o.page){var e=o.spm_ab?o.spm_ab.split(\".\"):[],c=\"record_obsolete interface be called by\"+s,i=new n({ratio:o.ratio||r.obsoleteInterRecordRatio});i.run({code:109,page:o.page,msg:c,spm_a:e[0],spm_b:e[1],c1:o.interface_name,c2:o.interface_params},1),t=!0}}catch(o){a.logger({msg:o})}return t},do_tracker_browser_support:function(o){var t=!1;try{if(o&&o.page){var e=o.spm_ab?o.spm_ab.split(\".\"):[],c=new n({ratio:o.ratio||r.browserSupportRatio}),i=goldlog._aplus_client||{},l=i.ua_info||{};c.run({code:111,page:o.page,msg:o.msg+\"_by\"+s,spm_a:e[0],spm_b:e[1],c1:[l.o,l.b,l.w].join(\"_\"),c2:o.etag||\"\",c3:o.cna||\"\"}),t=!0}}catch(o){a.logger({msg:o})}return t},do_tracker_common_analysis:function(o){var t=!1;try{if(o&&o.page){var e=o.spm_ab?o.spm_ab.split(\".\"):[],c=new n({ratio:o.ratio||r.browserSupportRatio}),i=goldlog._aplus_client||{},l=i.ua_info||{};c.run({code:113,page:o.page,msg:o.msg+\"_by\"+s,spm_a:e[0],spm_b:e[1],c1:[l.o,l.b,l.w].join(\"_\"),c2:o.init_time||\"\",c3:o.wspv_time||0,c4:o.load_time||0,c5:o.channel_type}),t=!0}}catch(o){a.logger({msg:o})}return t}}}},function(o,t){\"use strict\";t.lostPvRecordRatio=\"0.01\",t.obsoleteInterRecordRatio=\"0.001\",t.jsErrorRecordRatio=\"0.001\",t.browserSupportRatio=\"0.001\",t.goldlogQueueRatio=\"0.01\"},function(o,t){\"use strict\";var e=function(o){var t=o.level||\"warn\";window.console&&window.console[t]&&window.console[t](o.msg)};t.logger=e,t.assign=function(o,t){if(\"function\"!=typeof Object.assign){var e=function(o){if(null===o)throw new TypeError(\"Cannot convert undefined or null to object\");for(var t=Object(o),e=1;e-1}var f=window;e.assign=o,e.makeCacheNum=function(){return Math.floor(268435456*Math.random()).toString(16)},e.each=n(10),e.isStartWith=function(t,e){return 0===t.indexOf(e)},e.isEndWith=function(t,e){var n=t.length,o=e.length;return n>=o&&t.indexOf(e)==n-o},e.any=function(t,e){var n,o=t.length;for(n=0;n-1&&(r=1),a.setTime(a.getTime()+365*r*24*60*60*1e3),e+=\"; expires=\"+a.toUTCString()}e+=\"; path=\"+(n.path?n.path:\"/\"),e+=\"; domain=\"+n.domain,s.cookie=t+\"=\"+e;var i=0;try{var u=navigator.userAgent.match(/Chrome\\/\\d+/);u&&u[0]&&(i=u[0].split(\"/\")[1],i&&(i=parseInt(i)))}catch(t){}return n.SameSite&&i>=80&&(e+=\"; SameSite=\"+n.SameSite,e+=\"; Secure\",s.cookie=t+\"=\"+e),o(t)}function r(t,e,n){try{if(n||(n={}),n.domain)a(t,e,n);else for(var o=l.getDomains(),r=0;r0&&(n=i[0])}return n||(n=r.is_terminal?\"m.gif\":\"v.gif\"),n},run:function(){var t=!!this.options.context.is_single;if(!t){var e=this.getAplusMetaByKey(\"aplus-rhost-v\"),n=this.options.context.where_to_sendpv||{},a=n.url||\"\",r=this.getGifPath(n.urlRule,a),i=o.getPvUrl({metaName:\"aplus-rhost-v\",metaValue:e,gifPath:r,url:o.filterIntUrl(a)});n.url=i,this.options.context.where_to_sendpv=n}}}}},function(t,e,n){\"use strict\";function o(t){t=(t||\"\").split(\"#\")[0].split(\"?\")[0];var e=t.length,n=function(t){var e,n=t.length,o=0;for(e=0;e1&&e===r[0]?r[1]:\"\":r.length>1?r[1]:\"\"}return decodeURIComponent(n)}return\"\"},setLsCna:function(t,e,n){n&&a.set&&a.test()&&a.set(t,e+\"_\"+encodeURIComponent(n))},getUrl:function(t){var e=t||\"//log.mmstat.com/eg.js\";try{var n=goldlog.getMetaInfo(\"aplus-rhost-v\"),o=/[[a-z|0-9\\.]+[a-z|0-9]/,a=n.match(o);a&&a[0]&&(e=e.replace(o,a[0]))}catch(t){}return e}}},function(t,e){\"use strict\";function n(t){return\"string\"==typeof t?t.replace(/^\\s+|\\s+$/g,\"\"):\"\"}e.trim=n},function(t,e){\"use strict\";t.exports={set:function(t,e){try{return localStorage.setItem(t,e),!0}catch(t){return!1}},get:function(t){try{return localStorage.getItem(t)}catch(t){return\"\"}},test:function(){var t=\"grey_test_key\";try{return localStorage.setItem(t,1),localStorage.removeItem(t),!0}catch(t){return!1}},remove:function(t){localStorage.removeItem(t)}}},function(t,e,n){\"use strict\";var o=n(9),a=function(){if(goldlog.aplusDebug){var t=location.protocol;return\"http:\"!==t&&\"https:\"!==t&&(t=\"https:\"),t}return\"https:\"};e.getProtocal=a,e.isStartWithProtocol=function(t){for(var e=[\"javascript:\",\"tel:\",\"sms:\",\"mailto:\",\"tmall://\",\"#\"],n=0,a=e.length;n-1},l=0;l0?n.param2obj(t.substring(0,u)):{};delete p[\"\"],s=n.obj2param(c.assign(p,r))+\"&\"+t.substring(u,t.length)}else s=n.obj2param(r)+\"&\"+o;return s}return a}catch(t){return a}};e.mergeExparams=d},function(t,e,n){\"use strict\";var o=n(32),a=n(3),r=n(11),i=n(30),s=n(19),u=n(33),c=n(34),l=n(25),p=n(4);t.exports=function(){return{init:function(t){this.options=t;var e=this.options.context.etag||{};this.cna=e.cna||r.getCookie(\"cna\"),this.setTag(0),this.setStag(-1),this.setLsTag(\"-1\"),this.setEtag(this.cna||\"\"),this.requesting=!1,this.today=u.getFormatDate()},setLsTag:function(t){this.lstag=t,this.options.context.etag.lstag=t},setTag:function(t){this.tag=t,this.options.context.etag.tag=t},setStag:function(t){this.stag=t,this.options.context.etag.stag=t},setEtag:function(t){t&&(this.etag=t,this.options.context.etag.cna=t,r.getCookie(\"cna\")!==t&&(o.publishCNA(t),r.setCookie(\"cna\",t,{SameSite:\"none\"})))},setLscnaStatus:function(t){this.options.context.etag.lscnastatus=t},run:function(t,e){var n=this;if(n.cna)return void n.setTag(1);var o=null,r=c.getUrl(this.options.context.etag||{});n.requesting=!0;var u=function(){setTimeout(function(){e()},20),clearTimeout(o)};return i.loadScript(r,function(t){var e,o;if(t&&\"error\"===t.type?(n.setStag(-3),a.do_tracker_jserror({message:\"loadError\",error:\"\",filename:\"etag_ls\"})):(e=l.getGoldlogVal(\"Etag\"),o=l.getGoldlogVal(\"stag\"),\"undefined\"!=typeof o&&n.setStag(o)),!n.requesting)return void n.setEtag(e);if(2===o||4===o){var r=s.getLsCna(p.LS_CNA_KEY);r?(n.setLsTag(1),n.setEtag(r)):(n.setLsTag(0),s.setLsCna(p.LS_CNA_KEY,n.today,e),n.setEtag(e))}else n.setEtag(e);u()}),o=setTimeout(function(){n.requesting=!1,n.setStag(-2),e()},1500),2e3}}}},function(t,e){\"use strict\";var n=\"function\",o=function(){var t=window.goldlog||{},e=t.aplus_pubsub||{},o=typeof e.publish===n;return o?e:\"\"},a=function(t){var e=o();e&&typeof e.publish===n&&e.publish.apply(e,t)};e.doPubMsg=a;var r=function(t){var e=o();e&&typeof e.cachePubs===n&&e.cachePubs.apply(e,t)};e.doCachePubs=r,e.doSubMsg=function(t,e){var a=o();a&&typeof a.subscribe===n&&a.subscribe(t,e)},e.doSubOnceMsg=function(t,e){var a=o();a&&typeof a.subscribeOnce===n&&a.subscribeOnce(t,e)},e.publishCNA=function(t){if(t){var e=[\"CNA\",{value:t}];a(e),r(e)}}},function(t,e){\"use strict\";function n(t,e,n){var o=\"\"+Math.abs(t),a=e-o.length,r=t>=0;return(r?n?\"+\":\"\":\"-\")+Math.pow(10,Math.max(0,a)).toString().substr(1)+o}e.getFormatDate=function(t){var e=new Date;try{return[e.getFullYear(),n(e.getMonth()+1,2,0),n(e.getDate(),2,0)].join(t||\"\")}catch(t){return\"\"}}},function(t,e,n){\"use strict\";var o=n(19);e.getUrl=function(t){var e=(new Date).getTime(),n=o.getUrl(t&&t.egUrl?t.egUrl:\"gj.mmstat.com/eg.js\"),a=n.match(/[\\w+\\.]+[a-z|A-Z|0-9]+\\/(eg|ge).js/);return 0!==n.indexOf(\"http\")&&a&&a.length>0&&(n=\"//\"+a[0]),n+\"?t=\"+e}},function(t,e,n){\"use strict\";var o=n(19),a=n(30),r=n(34),i=n(4),s=n(33),u=n(21);t.exports=function(){return{init:function(t){this.options=t,this.today=s.getFormatDate()},run:function(){var t=this;if(u.test()){var e=o.getLsCna(i.LS_CNA_KEY,t.today);e||setTimeout(function(){var e=r.getUrl(t.options.context.etag||{});a.loadScript(e,function(e){e&&\"error\"!==e.type&&o.setLsCna(i.LS_CNA_KEY,t.today,goldlog.Etag)})},1e3)}}}}},function(t,e,n){\"use strict\";e.plugins_pv=[{name:\"etag\",enable:!0,path:n(37)},{name:\"when_to_sendpv\",enable:!0,path:n(38)},{name:\"where_to_sendlog_ut\",enable:!0,path:n(39)},{name:\"is_single\",enable:!0,path:n(41)},{name:\"what_to_pvhash\",enable:!0,path:n(45)},{name:\"what_to_sendpv\",enable:!0,path:n(46)},{name:\"what_to_sendpv_userdata\",enable:!0,path:n(50),deps:[\"what_to_sendpv\"]},{name:\"what_to_sendpv_etag\",enable:!0,path:n(55),deps:[\"etag\",\"what_to_sendpv\"]},{name:\"what_to_sendpv_ut2\",enable:n(56),path:n(57),deps:[\"where_to_sendlog_ut\",\"is_single\"]},{name:\"what_to_sendpv_ut\",enable:!0,path:n(58),deps:[\"where_to_sendlog_ut\",\"is_single\"]},{name:\"what_to_pv_slog\",enable:!0,path:n(59),deps:[\"what_to_sendpv\"]},{name:\"can_to_sendpv\",enable:!0,path:n(60)},{name:\"where_to_sendpv\",enable:!0,path:n(17),deps:[\"is_single\"]},{name:\"do_sendpv\",enable:!0,path:n(61),deps:[\"is_single\",\"what_to_sendpv\",\"where_to_sendpv\"]},{name:\"do_sendpv_ut2\",enable:n(56),path:n(62),deps:[\"what_to_sendpv_ut2\",\"where_to_sendlog_ut\"]},{name:\"do_sendpv_ut\",enable:n(56),path:n(63),deps:[\"what_to_sendpv_ut\",\"where_to_sendlog_ut\"]},{name:\"after_pv\",enable:!0,path:n(64)}]},function(t,e,n){\"use strict\";var o=n(32);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this;o.doSubOnceMsg(\"aplusInitContext\",function(e){e.etag&&(t.options.context.etag=e.etag)})}}}},function(t,e,n){\"use strict\";var o=n(25),a=n(23),r=n(26);t.exports=function(){return{init:function(t){this.options=t},getMetaInfo:function(){var t=o.getGoldlogVal(\"_$\")||{},e=t.meta_info||r.getInfo();return e},getAplusWaiting:function(){var t=this.getMetaInfo()||{};return t[\"aplus-waiting\"]},run:function(t,e){var n=this.options.config||{},o=this.getAplusWaiting();if(o&&n.is_auto)switch(o=this.getAplusWaiting()+\"\",this.options.context.when_to_sendpv={aplusWaiting:o},o){case\"MAN\":return\"done\";case\"1\":return this.options.context.when_to_sendpv.isWait=!0,a.sleep(6e3,function(){e()}),6e3;default:var r=1*o;if(r+\"\"!=\"NaN\")return this.options.context.when_to_sendpv.isWait=!0,a.sleep(r,function(){e()}),r}}}}},function(t,e,n){\"use strict\";var o=n(40);t.exports=function(){return{init:function(t){this.options=t},getAplusToUT:function(t){return{toUT2:o.getAplusToUT(\"toUT2\",t),toUT:o.getAplusToUT(\"toUT\",t)}},run:function(){if(\"Umeng4Aplus\"===goldlog.aplusBridgeName)this.options.context.where_to_sendlog_ut.toUTName=\"toUT2\";else{var t=this.getAplusToUT(this.options.config.recordType);this.options.context.where_to_sendlog_ut.aplusToUT=t}}}}},function(t,e){\"use strict\";var n=navigator.userAgent,o=/WindVane/i.test(n);e.is_WindVane=o;var a=function(){var t=goldlog.getMetaInfo(\"aplus_chnl\");return!(!t||!t.isAvailable||\"function\"!=typeof t.toUT2&&\"function\"!=typeof t.toUT)&&t};e.isAplusChnl=a,e.getAplusToUT=function(t,e){var n={},r=a();if(\"object\"==typeof r)n.bridgeName=r.bridgeName||\"customBridge\",n.bridgeVersion=r.bridgeVersion||r.version||\"\",n.isAvailable=r.isAvailable,n.toUT2=r.toUT2||r.toUT;else{var i=window.WindVane||{};if(o&&i&&i.isAvailable&&\"function\"==typeof i.call){var s=t||\"toUT\",u=goldlog.getMetaInfo(\"aplus-toUT\")+\"\";\"toUT2HC\"===u&&\"PV\"===e&&(s=u),n={bridgeName:\"WindVane\",bridgeVersion:i.version||\"\",isAvailable:!0,toUT2:function(t,e,n,o){return i.call(\"WVTBUserTrack\",s,t,e,n,o)}}}}return n}},function(t,e,n){\"use strict\";var o=n(25),a=n(42),r=n(43),i=n(4);t.exports=function(){return{init:function(t){this.options=t,this._$=o.getGoldlogVal(\"_$\")||{},this.isBoth=\"1\"===this._$.meta_info[\"aplus-both-request\"],this.is_WindVane=this._$.is_WindVane},isSingle_pv:function(t){return t?!this.isBoth:!(!this.is_WindVane||!r.isSingleUaVersion()||this.isBoth)},isSingle_hjlj:function(t,e){return e?!this.isBoth:!(!this.is_WindVane||!r.isSingleSendLog(t)||this.isBoth)},isSingle_uhjlj:function(t,e){return(!t||!/^\\/aplus\\.99\\.(\\d)+$/.test(t.logkey))&&(e?!this.isBoth:!(!(this.is_WindVane&&t&&t.logkey&&r.isSingleUaVersion())||this.isBoth))},run:function(){var t=this.options.context||{},e=this.options.config||{},n=t.where_to_sendlog_ut.aplusToUT||{},o=n.toUT||{},r=n.toUT2||{},s=a.isNative4Aplus(),u=!!(o.isAvailable||r.isAvailable||s),c=t.userdata||{},l=!!t.is_single;switch(e.recordType){case i.recordTypes.uhjlj:l=this.isSingle_uhjlj(c,s);break;case i.recordTypes.hjlj:l=this.isSingle_hjlj(c,s);break;case i.recordTypes.pv:l=this.isSingle_pv(s);break;default:l=this.isSingle_pv(s)}this.options.context.is_single=u&&l,this.options.context.ut_is_available=u}}}},function(t,e){\"use strict\";var n=\"UT4Aplus\",o=\"Umeng4Aplus\";e.isNative4Aplus=function(){var t=goldlog.getMetaInfo(\"aplus-toUT\"),e=goldlog.aplusBridgeName;return e===n&&t===n||e===o},e.haveNativeFlagInUA=function(){var t=goldlog.aplusBridgeName;if(!t&&\"boolean\"!=typeof t){var e=new RegExp([n,o].join(\"|\"),\"i\"),a=navigator.userAgent.match(e);t=!!a&&a[0],goldlog.aplusBridgeName=t}return!!t}},function(t,e,n){\"use strict\";var o=n(44),a=n(42),r=function(t){var e=t.logkey.toLowerCase();0===e.indexOf(\"/\")&&(e=e.substr(1));var n=t.gmkey?t.gmkey.toUpperCase():\"OTHER\";switch(n){case\"EXP\":return\"2201\";case\"CLK\":return\"2101\";case\"SLD\":return\"19999\";case\"OTHER\":default:return\"19999\"}},i=/\\sA2U\\/x/.test(window.navigator.userAgent),s=function(){var t=window.navigator.userAgent,e=!1,n=/AliApp\\((DM|DY|DingTalk|CN|LA)\\/(\\d+[._]\\d+[._]\\d+)/i,r=n.test(t);return e=r,i||a.haveNativeFlagInUA()||e||o.webviewIsAbove({version_ios_tb:[5,11,7],version_ios_tm:[5,24,1],version_android_tb:[5,11,7],version_android_tm:[5,24,1]})};e.isSingleUaVersion=s,e.isSingleSendLog=function(t){return(!t||!/^\\/fsp\\.1\\.1$/.test(t.logkey))&&!!(t&&t.logkey&&s())},e.getFunctypeValue=function(t){return e.isSingleSendLog(t)?r(t):\"2101\"},e.getFunctypeValue2=function(t){return r(t)}},function(t,e){\"use strict\";var n=function(t){var e=[0,0,0];try{if(t){var n=t[1],o=n.split(\".\");if(o.length>2)for(var a=0;ae[0],a=t[1]>e[1],r=t[2]>e[2],i=t[0]===e[0],s=t[1]===e[1],u=t[2]===e[2];n=!!o||(!(!i||!a)||(!!(i&&s&&r)||!!(i&&s&&u)))}catch(t){n=!1}finally{return n}};e.isAboveVersion=o,e.webviewIsAbove=function(t,e){var a=!1;try{e||(e=navigator.userAgent);var r=e.match(/AliApp\\(TB\\/(\\d+[._]\\d+[._]\\d+)/i),i=n(r),s=e.match(/AliApp\\(TM\\/(\\d+[._]\\d+[._]\\d+)/i),u=n(s),c=/iPhone|iPad|iPod|ios/i.test(e),l=/android/i.test(e);c?r&&i?a=o(i,t.version_ios_tb):s&&u&&(a=o(u,t.version_ios_tm)):l&&(r&&i?a=o(i,t.version_android_tb):s&&u&&(a=o(u,t.version_android_tm)))}catch(t){a=!1}return a},e.webviewIsEqual=function(t,e){var n=!1;try{e||(e=navigator.userAgent);var o=e.match(/AliApp\\(CN\\/(\\d+[._]\\d+[._]\\d+)/i),a=o?o[1]:\"0.0.0\",r=e.match(/AliApp\\(DingTalk\\/(\\d+[._]\\d+[._]\\d+)/i),i=r?r[1]:\"0.0.0\",s=/iPhone|iPad|iPod|ios/i.test(e),u=/android/i.test(e);s?o&&a?n=t.version_ios_cn===a:r&&i&&(n=t.version_ios_dd===i):u&&(o&&a?n=t.version_android_cn===a:r&&i&&(n=t.version_android_dd===i))}catch(t){n=!1}return n},e.webviewIsBelow=function(t,e){var a=!1;try{e||(e=navigator.userAgent);var r=e.match(/AliApp\\(CN\\/(\\d+[._]\\d+[._]\\d+)/i),i=n(r),s=/iPhone|iPad|iPod|ios/i.test(e),u=/android/i.test(e);s?r&&i&&(a=!o(i,t.version_ios_cn)):u&&r&&i&&(a=!o(i,t.version_android_cn))}catch(t){a=!1}return a}},function(t,e,n){\"use strict\";var o=n(25);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this.options.context.what_to_pvhash||{},e=o.getGoldlogVal(\"_$\")||{},n=e.meta_info||{},a=n[\"aplus-pvhash\"]||\"\",r=[];\"1\"===a&&(r=[\"_aqx_uri\",encodeURIComponent(location.href)]),t.hash=r,this.options.context.what_to_pvhash=t}}}},function(t,e,n){\"use strict\";var o=n(18),a=n(9),r=n(30),i=n(25),s=n(27),u=n(11),c=n(47),l=n(48),p=n(49);t.exports=function(){return a.assign(p,{init:function(t){this.options=t,this.cookie_data||(this.cookie_data=u.getData()),this.client_info||(this.client_info=i.getClientInfo()||{});\nvar e=location.hash;e&&0===e.indexOf(\"#\")&&(e=e.substr(1)),this.loc_hash=e},getExParams:function(){var t=window,e=document,n=[],u=parent!==t.self,l=e.getElementById(\"beacon-aplus\")||e.getElementById(\"tb-beacon-aplus\"),p=s.tryToGetAttribute(l,\"exparams\"),g=r.mergeExparams(p,r.getExParamsFromMeta(),o)||\"\";g=g.replace(/&/g,\"&\");var f,d,_=[\"taobao.com\",\"tmall.com\",\"etao.com\",\"hitao.com\",\"taohua.com\",\"juhuasuan.com\",\"alimama.com\"],h=i.getGoldlogVal(\"_$\")||{},m=h.meta_info||{};if(u&&!m[\"aplus-ifr-pv\"]){for(d=_.length,f=0;f=0&&t.splice(r,1)}function r(t,e,n,o){var a,r,i=t.length,s=-1,u=\"function\"==typeof n;for(a=0;a-1?t.splice(s,0,[e,n]):t.push([e,n]))}t.exports={updateSPMCnt:n,updateSPMUrl:o,updateKey:r,removeKey:a}},function(t,e,n){\"use strict\";function o(t,e){var n,o=2146271213;for(n=0;n2&&(g[1]=l,e.spm_cnt=g.join(\".\"))}}var f=function(t){if(\"object\"==typeof t)for(var e in t)\"object\"!=typeof t[e]&&\"function\"!=typeof t[e]&&c.push([e,t[e]])};f(goldlog.getMetaInfo(\"aplus-cpvdata\")),f(r);var d=i.getCookie(\"workno\")||i.getCookie(\"emplId\");d&&c.push([\"workno\",d]);var _=i.getHng();_&&c.push([\"_hng\",i.getHng()]);var h=this.getPageInfo();return h&&(c.push([\"_pw\",h.width]),c.push([\"_ph\",h.height])),c},processLodashDollar:function(){var t=this.options.config||{},e=a.getGoldlogVal(\"_$\")||{};t&&t.referrer&&(e.page_referrer=t.referrer),a.setGoldlogVal(\"_$\",e)},updatePre:function(t){var e=a.getGoldlogVal(\"_$\")||{};return e.page_referrer&&r.updateKey(t,\"pre\",e.page_referrer),t},run:function(){var t=this.options.context.what_to_sendpv.pvdata,e=this.getUserdata();this.processLodashDollar();var n=t,o=this.options.context.what_to_pvhash.hash;o&&o.length>0&&n.push(o),n=n.concat(e),n=this.updatePre(n);var a=this.getPageId();a&&r.updateSPMCnt(n,a),this.options.context.what_to_sendpv.pvdata=n,this.options.context.userdata=e}}}},function(t,e,n){\"use strict\";function o(){if(!s.data.a||!s.data.b){var t=r._SPM_a,e=r._SPM_b;if(t&&e)return t=t.replace(/^{(\\w+\\/)}$/g,\"$1\"),e=e.replace(/^{(\\w+\\/)}$/g,\"$1\"),s.is_wh_in_page=!0,void c.setAB(t,e);var n=goldlog._$.meta_info;t=n[\"data-spm\"]||n[\"spm-id\"]||\"0\";var o=t.split(\".\");o.length>1&&(t=o[0],e=o[1]),c.setA(t),e&&c.setB(e);var a=i.getElementsByTagName(\"body\");a=a&&a.length?a[0]:null,a&&(e=l.tryToGetAttribute(a,\"data-spm\"),e?c.setB(e):1===o.length&&c.setAB(\"0\",\"0\"))}}function a(){var t=s.data.a,e=s.data.b;t&&e&&(goldlog.spm_ab=[t,e])}var r=window,i=document,s={},u={};s.data=u;var c={},l=n(27),p=n(52),g=location.href,f=n(53).getRefer(),d=n(4);c.setA=function(t){s.data.a=t,a()},c.setB=function(t){s.data.b=t,a()},c.setAB=function(t,e){s.data.a=t,s.data.b=e,a()};var _=p.getSPMFromUrl,h=function(){var t=d.utilPvid.makePVId();return d.mustSpmE?t||goldlog.pvid||\"\":t||\"\"},m=function(t,e){var n=t.goldlog||window.goldlog||{},a=n.meta_info||{};s.meta_protocol=a.spm_protocol;var r,i=n.spm_ab||[],u=i[0]||\"0\",c=i[1]||\"0\";\"0\"===u&&\"0\"===c&&(o(),u=s.data.a||\"0\",c=s.data.b||\"0\"),r=[s.data.a,s.data.b].join(\".\"),s.spm_cnt=(r||\"0.0\")+\".0.0\";var l=t.send_pv_count>0?h():n.pvid;l&&(s.spm_cnt+=\".\"+l),n._$.spm=s,\"function\"==typeof e&&e(l)};c.spaInit=function(t,e,n,o){var a=\"function\"==typeof o?o:function(){},r=s.spm_url,i=window.g_SPM||{},u=t._$||{},c=u.send_pv_count;m({goldlog:t,meta_info:e,send_pv_count:c},function(t){s.spm_cnt=s.data.a+\".\"+s.data.b+\".0.0\"+(t?\".\"+t:\"\");var o=e[\"aplus-spm-fixed\"];if(\"1\"!==o){s.spm_pre=_(f),s.origin_spm_pre=s.spm_pre,s.spm_url=_(location.href),s.origin_spm_url=s.spm_url;var u=i._current_spm||{};u&&u.a&&\"0\"!==u.a&&u.b&&\"0\"!==u.b?(s.spm_url=[u.a,u.b,u.c,u.d,u.e].join(\".\"),s.spm_pre=r):c>0&&n&&\"0\"!==n[0]&&\"0\"!==n[1]&&(s.spm_url=n.concat([\"0\",\"0\"]).join(\".\"),s.spm_pre=r),i._current_spm={}}a()})},c.init=function(t,e,n){s.spm_url=_(g),s.spm_pre=_(f),m({goldlog:t,meta_info:e},function(){\"function\"==typeof n&&n()})},c.resetSpmCntPvid=function(){var t=goldlog.spm_ab;if(t&&2===t.length){var e=t.join(\".\")+\".0.0\",n=h();n&&(e=e+\".\"+n),s.spm_cnt=e,s.spm_url=e,goldlog._$.spm=s}},t.exports=c},function(t,e){\"use strict\";function n(t,e){if(!t||!e)return\"\";var n,o=\"\";try{var a=new RegExp(\"[?|&]+\"+t+\"=([^&|#|?|/]+)\");if(\"spm\"===t||\"scm\"===t){var r=new RegExp(\"\\\\?.*\"+t+\"=([\\\\w\\\\.\\\\-\\\\*/]+)\"),i=e.match(a),s=e.match(r),u=i&&2===i.length?i[1]:\"\",c=s&&2===s.length?s[1]:\"\";o=u>c?u:c,o=decodeURIComponent(o)}else n=e.match(a),o=n&&2===n.length?n[1]:\"\"}catch(t){}finally{return o}}e.getParamFromUrl=n,e.getSPMFromUrl=function(t){return n(\"spm\",t)}},function(t,e,n){\"use strict\";var o=n(54).nameStorage,a=n(5);e.getRefer=function(){var t=a.KEY||{},e=t.NAME_STORAGE||{};return document.referrer||o.getItem(e.REFERRER)||\"\"}},function(t,e){\"use strict\";var n=function(){function t(){var t,e=[],r=!0;for(var l in p)p.hasOwnProperty(l)&&(r=!1,t=p[l]||\"\",e.push(c(l)+s+c(t)));n.name=r?o:a+c(o)+i+e.join(u)}function e(t,e,n){t&&(t.addEventListener?t.addEventListener(e,n,!1):t.attachEvent&&t.attachEvent(\"on\"+e,function(e){n.call(t,e)}))}var n=window;if(n.nameStorage)return n.nameStorage;var o,a=\"nameStorage:\",r=/^([^=]+)(?:=(.*))?$/,i=\"?\",s=\"=\",u=\"&\",c=encodeURIComponent,l=decodeURIComponent,p={},g={};return function(t){if(t&&0===t.indexOf(a)){var e=t.split(/[:?]/);e.shift(),o=l(e.shift())||\"\";for(var n,i,s,c=e.join(\"\"),g=c.split(u),f=0,d=g.length;f0&&(this.options.context.what_to_sendpv.pvdata=t.concat(n))},run:function(){this.updateBasicParams(),this.addTagParams()}}}},function(t,e,n){\"use strict\";var o=n(44),a=n(40),r=n(42),i=/\\sA2U\\/x/.test(window.navigator.userAgent),s=function(t){t||(t=window.navigator.userAgent);var e=goldlog.getMetaInfo(\"aplus-toUT\")+\"\",n=a.isAplusChnl(),s=/AliApp\\((DM|DY|DingTalk|CN|LA)\\/(\\d+[._]\\d+[._]\\d+)/i,u=s.test(t),c=o.webviewIsAbove({version_ios_tb:[6,6,0],version_ios_tm:[5,28,0],version_android_tb:[6,6,2],version_android_tm:[5,32,0]},t);return c||(c=r.haveNativeFlagInUA()||i||\"2\"===e||\"toUT2HC\"===e||u),n&&\"AliBCBridge\"!==n.bridgeName&&(c=!!n.toUT2),c};e.isToUT2=s,e.isEnable=function(t,e){var n=s(e),o=!0;switch(t){case\"what_to_hjlj_ut2\":case\"do_sendhjlj_ut2\":case\"what_to_sendpv_ut2\":case\"do_sendpv_ut2\":o=!!n;break;case\"what_to_hjlj_ut\":case\"do_sendhjlj_ut\":case\"what_to_sendpv_ut\":case\"do_sendpv_ut\":o=!n}return o}},function(t,e,n){\"use strict\";function o(t){var e,n,o,a,r=[],s={};for(e=t.length-1;e>=0;e--)n=t[e],o=n[0],o&&o.indexOf(i.s_plain_obj)==-1&&s.hasOwnProperty(o)||(a=n[1],(\"aplus\"==o||a)&&(r.unshift([o,a]),s[o]=1));return r}function a(t){var e,n,o,a,r=[],u={logtype:!0,cache:!0,scr:!0,\"spm-cnt\":!0};for(e=t.length-1;e>=0;e--)if(n=t[e],o=n[0],a=n[1],!(s.isStartWith(o,i.s_plain_obj)&&!s.isStartWith(o,i.mkPlainKeyForExparams())||u[o]))if(s.isStartWith(o,i.mkPlainKeyForExparams())){var c=i.param2arr(a);if(\"object\"==typeof c&&c.length>0)for(var l=c.length-1;l>=0;l--){var p=c[l];p&&p[1]&&r.unshift([p[0],p[1]])}}else r.unshift([o,a]);return r}function r(){var t={isonepage:\"-1\",urlpagename:\"\"},e=g.qGet();if(e&&e.hasOwnProperty(\"isonepage_data\"))t.isonepage=e.isonepage_data.isonepage,t.urlpagename=e.isonepage_data.urlpagename;else{var n=c.getMetaCnt(\"isonepage\")||\"-1\",o=n.split(\"|\");t.isonepage=o[0],t.urlpagename=o[1]?o[1]:\"\"}return t}var i=n(18),s=n(9),u=n(25),c=n(28),l=n(52),p=n(42),g=n(26),f=n(4),d=n(11);t.exports=function(){return{init:function(t){this.options=t},keyIsAvailable:function(t){var e=[\"functype\",\"funcId\",\"spm-cnt\",\"spm-url\",\"spm-pre\",\"_ish5\",\"_is_g2u\",\"_h5url\",\"cna\",\"isonepage\",\"lver\",\"jsver\"];return i.indexof(e,t)===-1},valIsAvailable:function(t){return\"object\"!=typeof t&&\"function\"!=typeof t},upUtData:function(t,e){var n=this;if(t=t?t:{},e&&\"object\"==typeof e)for(var o in e){var a=e[o];o&&n.valIsAvailable(a)&&n.keyIsAvailable(o)&&(t[o]=a)}return t},getToUtData:function(t){var e=u.getGoldlogVal(\"_$\")||{},n=e.spm||{},s=this.options.context||{},c=!!s.is_single,p=s.what_to_sendpv||{},g=a(o(p.exparams||[]));g=i.arr2obj(g);var _=i.arr2obj(p.pvdata),h=a(o(s.userdata||[]));h=i.arr2obj(h);var m=location.href,v={},b=l.getParamFromUrl(\"scm\",m)||\"\";b&&(v.scm=b);var y=l.getParamFromUrl(\"pg1stepk\",m)||\"\";y&&(v.pg1stepk=y);var w=l.getParamFromUrl(\"point\",m)||\"\";w&&(v.issb=1),_&&_.mansndlog&&(v.mansndlog=_.mansndlog),v=this.upUtData(v,g),v=this.upUtData(v,h);var x=r();v.functype=\"page\",v.funcId=\"2001\",v.url=goldlog.getMetaInfo(\"aplus-pagename\")||location.origin+location.pathname,v._ish5=\"1\",v._h5url=m,v._toUT=2,v._bridgeName=t.bridgeName||\"\",v._bridgeVersion=t.bridgeVersion||\"\",v[\"spm-cnt\"]=n.spm_cnt||\"\",v[\"spm-url\"]=n.spm_url||\"\",v[\"spm-pre\"]=n.spm_pre||\"\",v.cna=d.getCookie(\"cna\"),v.lver=goldlog.lver||f.lver,v.jsver=f.script_name,v.pver=goldlog.aplus_cplugin_ver,v.isonepage=x.isonepage;var T=goldlog.getMetaInfo(\"aplus-utparam\");return T&&(v[\"utparam-cnt\"]=JSON.stringify(T)),v._is_g2u_=c?1:2,v},run:function(){var t=this.options.context||{},e=t.what_to_sendpv_ut2||{},n=t.where_to_sendlog_ut||{},o=n.aplusToUT||{},a=o.toUT2||{};(a&&a.isAvailable&&\"function\"==typeof a.toUT2||p.haveNativeFlagInUA())&&(e.pvdataToUt=this.getToUtData(a),this.options.context.what_to_sendpv_ut2=e)}}}},function(t,e,n){\"use strict\";function o(t){var e,n,o,a,i=[],s={};for(e=t.length-1;e>=0;e--)n=t[e],o=n[0],o&&o.indexOf(r.s_plain_obj)==-1&&s.hasOwnProperty(o)||(a=n[1],(\"aplus\"==o||a)&&(i.unshift([o,a]),s[o]=1));return i}function a(t){var e,n,o,a,s=[],u={logtype:!0,cache:!0,scr:!0,\"spm-cnt\":!0};for(e=t.length-1;e>=0;e--)if(n=t[e],o=n[0],a=n[1],!(i.isStartWith(o,r.s_plain_obj)&&!i.isStartWith(o,r.mkPlainKeyForExparams())||u[o]))if(i.isStartWith(o,r.mkPlainKeyForExparams())){var c=r.param2arr(a);if(\"object\"==typeof c&&c.length>0)for(var l=c.length-1;l>=0;l--){var p=c[l];p&&p[1]&&s.unshift([p[0],p[1]])}}else s.unshift([o,a]);return s}var r=n(18),i=n(9),s=n(25),u=n(28),c=n(42),l=n(26),p=n(4),g=n(11);t.exports=function(){return{init:function(t){this.options=t},getToUtData:function(t,e){var n,i=s.getGoldlogVal(\"_$\")||{},c=i.spm||{},f=a(o(t)),d={};try{var _=r.arr2obj(f);_._toUT=1,_._bridgeName=e.bridgeName||\"\",_._bridgeVersion=e.bridgeVersion||\"\",n=JSON.stringify(_)}catch(t){n='{\"_toUT\":1}'}var h=u.getOnePageInfo(l);d.functype=\"2001\",d.urlpagename=h.urlpagename,d.url=location.href,d.spmcnt=c.spm_cnt||\"\",d.spmurl=c.spm_url||\"\",d.spmpre=c.spm_pre||\"\",d.lzsid=\"\",d.cna=g.getCookie(\"cna\"),d.extendargs=n,d.isonepage=h.isonepage;var m=this.options.context||{},v=!!m.is_single;return d._is_g2u_=v?1:2,d.version=p.toUtVersion,d.lver=goldlog.lver||p.lver,d.jsver=p.script_name,d},run:function(){var t=this.options.context||{},e=t.what_to_sendpv||{},n=e.pvdata||[],o=t.what_to_sendpv_ut||{},a=t.where_to_sendlog_ut||{},r=a.aplusToUT||{},i=r.toUT||{};(i&&i.isAvailable&&\"function\"==typeof i.toUT2||c.haveNativeFlagInUA())&&(o.pvdataToUt=this.getToUtData(n,i),this.options.context.what_to_sendpv_ut=o)}}}},function(t,e){\"use strict\";t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this.options.context||{},e=t.is_single?\"1\":\"0\";if(t.what_to_sendpv_ut2.pvdataToUt._slog=e,t.what_to_sendpv_ut.pvdataToUt._slog=e,t.what_to_sendpv.pvdata.push([\"_slog\",e]),t.ut_is_available){var n=t.is_single?\"1\":\"2\";t.what_to_sendpv.pvdata.push([\"_is_g2u\",n])}}}}},function(t,e,n){\"use strict\";var o=n(25);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=o.getGoldlogVal(\"_$\")||{},e=this.options.context.can_to_sendpv||{},n=t.send_pv_count||0,a=this.options.config||{};return a.is_auto&&n>0?\"done\":(e.flag=\"YES\",this.options.context.can_to_sendpv=e,t.send_pv_count=++n,void o.setGoldlogVal(\"_$\",t))}}}},function(t,e,n){\"use strict\";var o=n(25),a=n(18);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this.options.context||{},e=!!t.is_single;if(!e){var n=t.what_to_sendpv||{},r=t.where_to_sendpv||{},i=n.pvdata||[],s=goldlog.getMetaInfo(\"aplus-channel\");if(\"WS-ONLY\"!==s){var u=location.hostname+location.pathname,c=\"www.taobao.com/\"===u||\"www.aliyun.com/\"===u,l=goldlog.send(r.url,c?a.arr2param(i):a.arr2obj(i),c?\"POST\":\"\");o.setGoldlogVal(\"req\",l)}}}}}},function(t,e,n){\"use strict\";var o=n(42);t.exports=function(){return{init:function(t){this.options=t},run:function(t,e){var n=this,a=this.options.context||{},r=a.what_to_sendpv_ut2||{},i=a.where_to_sendlog_ut||{},s=r.pvdataToUt||{},u=i.aplusToUT||{},c=u.toUT2;if(o.isNative4Aplus())return u.toutflag=\"toUT2\",i.toUTName=\"toUT2\",void(n.options.context.what_to_sendpv_ut2.isSuccess=!0);if(c&&\"function\"==typeof c.toUT2&&c.isAvailable)try{u.toutflag=\"toUT2\",c.toUT2(s,function(){n.options.context.what_to_sendpv_ut2.isSuccess=!0,e(\"done\")},function(t){n.options.context.what_to_sendpv_ut2.errorMsg=t,e()},2e3)}catch(t){e()}finally{return\"pause\"}}}}},function(t,e,n){\"use strict\";var o=n(42);t.exports=function(){return{init:function(t){this.options=t},run:function(t,e){var n=this,a=this.options.context||{},r=a.what_to_sendpv_ut||{},i=a.where_to_sendlog_ut||{},s=r.pvdataToUt||{},u=i.aplusToUT||{},c=u.toUT;if(o.isNative4Aplus())return u.toutflag=\"toUT\",i.toUTName=\"toUT\",void(n.options.context.what_to_sendpv_ut.isSuccess=!0);if(c&&\"function\"==typeof c.toUT2&&c.isAvailable)try{u.toutflag=\"toUT\",c.toUT2(s,function(){n.options.context.what_to_sendpv_ut.isSuccess=!0,e()},function(t){n.options.context.what_to_sendpv_ut.errorMsg=t,e()},2e3)}catch(t){e()}finally{return\"pause\"}}}}},function(t,e,n){\"use strict\";var o=n(32),a=n(25);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=goldlog._$||{},e=this.options.context||{};a.setGoldlogVal(\"pv_context\",e);var n=goldlog.spm_ab||[],r=n.join(\".\"),i=t.send_pv_count,s={cna:e.etag.cna,count:i,spmab_pre:goldlog.spmab_pre};o.doPubMsg([\"sendPV\",\"complete\",r,s]),o.doCachePubs([\"sendPV\",\"complete\",r,s])}}}},function(t,e){\"use strict\";e.plugins_prepv=[]},function(t,e,n){\"use strict\";function o(){var t=i.getGoldlogVal(\"_$\")||{},e=\"//gm.mmstat.com/\";return t.is_terminal&&(e=\"//wgo.mmstat.com/\"),{where_to_hjlj:{url:e,ac_atpanel:\"//ac.mmstat.com/\",tblogUrl:\"//log.mmstat.com/\"}}}function a(){return r.assign(new s,new o)}var r=n(9),i=n(25),s=n(67);t.exports=a},function(t,e,n){\"use strict\";function o(){return{compose:{},basic_params:{cna:a.getCookie(\"cna\")},where_to_hjlj:{url:\"//gm.mmstat.com/\",ac_atpanel:\"//ac.mmstat.com/\",tblogUrl:\"//log.mmstat.com/\"},userdata:{},what_to_hjlj:{logdata:{}},what_to_pvhash:{hash:[]},what_to_hjlj_exinfo:{EXPARAMS_FLAG:\"EXPARAMS\",exinfo:[],exparams_key_names:[\"uidaplus\",\"pc_i\",\"pu_i\"]},what_to_hjlj_ut:{logdataToUT:{}},what_to_hjlj_ut2:{isSuccess:!1,logdataToUT:{}},where_to_sendlog_ut:{aplusToUT:{},toUTName:\"toUT\"},network:{connType:\"UNKNOWN\"},is_single:!1}}var a=n(11);t.exports=o},function(t,e,n){\"use strict\";e.plugins_hjlj=[{name:\"etag\",enable:!0,path:n(37)},{name:\"where_to_sendlog_ut\",enable:!0,path:n(39)},{name:\"is_single\",enable:!0,path:n(41)},{name:\"what_to_hjlj_exinfo\",enable:!0,path:n(69)},{name:\"what_to_pvhash\",enable:!0,path:n(45)},{name:\"what_to_hjlj\",enable:!0,path:n(70),deps:[\"what_to_hjlj_exinfo\",\"what_to_pvhash\"]},{name:\"what_to_hjlj_ut2\",enable:n(56),path:n(71),deps:[\"is_single\",\"what_to_hjlj_exinfo\"]},{name:\"what_to_hjlj_ut\",enable:n(56),path:n(72),deps:[\"is_single\",\"what_to_hjlj_exinfo\"]},{name:\"what_to_hjlj_slog\",enable:!0,path:n(73),deps:[\"what_to_hjlj\"]},{name:\"where_to_hjlj\",enable:!0,path:n(74),deps:[\"is_single\",\"what_to_hjlj\"]},{name:\"do_sendhjlj\",enable:!0,path:n(75),deps:[\"is_single\",\"what_to_hjlj\",\"where_to_hjlj\"]},{name:\"do_sendhjlj_ut2\",enable:n(56),path:n(76),deps:[\"what_to_hjlj\",\"what_to_hjlj_ut2\",\"where_to_sendlog_ut\"]},{name:\"do_sendhjlj_ut\",path:n(77),deps:[\"what_to_hjlj\",\"what_to_hjlj_ut\",\"where_to_sendlog_ut\"]}]},function(t,e,n){\"use strict\";var o=n(18),a=n(30),r=n(25),i=n(25),s=n(12),u=n(11);t.exports=function(){return{init:function(t){this.options=t},getCookieUserInfo:function(){var t=[],e=u.getCookie(\"workno\")||u.getCookie(\"emplId\");e&&t.push(\"workno=\"+e);var n=u.getHng();return n&&t.push(\"_hng=\"+u.getHng()),t},filterExinfo:function(t){var e=\"\";try{t&&(\"string\"==typeof t?e=t.replace(/&/g,\"&\").replace(/\\buser(i|I)d=/,\"uidaplus=\").replace(/&aplus&/,\"&\"):\"object\"==typeof t&&(e=o.obj2param(t,!0)))}catch(t){e=t.message?t.message:\"\"}return e},getExparamsFlag:function(){var t=this.options.context||{},e=t.what_to_hjlj_exinfo||{};return e.EXPARAMS_FLAG||\"EXPARAMS\"},getCustomExParams:function(t){var e=\"\";return t!==this.getExparamsFlag()&&(e=this.filterExinfo(t)||\"\"),e?e.split(\"&\"):[]},getBeaconExparams:function(t,e){var n=[],r=a.getExParams(o)||\"\";r=r.replace(/&aplus&/,\"&\");for(var i=o.param2arr(r)||[],u=function(e){return s.indexof(t,e)>-1},c=0;c0&&(t=t.concat(e)),t},run:function(){try{var t=this.options.context.what_to_hjlj_exinfo||{},e=r.getGoldlogVal(\"_$\")||{},n=e.meta_info||{},o=n[\"aplus-exinfo\"]||\"\",a=n[\"aplus-exdata\"]||\"\",s=[];s=this.doConcatArr(s,t.exinfo||[]),s=this.doConcatArr(s,this.getExinfo(o)),s=this.doConcatArr(s,this.getCookieUserInfo()),s=this.doConcatArr(s,this.getCustomExParams(o)),s=this.doConcatArr(s,this.getExData(a)),t.exinfo=s.join(\"&\"),this.options.context.what_to_hjlj_exinfo=t}catch(t){i.logger({msg:t?t.message:\"\"})}}}}},function(t,e,n){\"use strict\";var o=n(30),a=n(18),r=n(11),i=n(9),s=n(4);t.exports=function(){return{init:function(t){this.options=t},getParams:function(){var t=this.options.context||{},e=t.userdata||{},n=t.basic_params||{},u=t.what_to_hjlj_exinfo||{},c=u.exinfo||\"\",l=t.etag||{},p=l.cna||n.cna||r.getCookie(\"cna\"),g=e.gmkey,f=\"\";e.gokey&&c?f=[e.gokey,c].join(\"&\"):e.gokey?f=e.gokey:c&&(f=c);var d=t.what_to_pvhash||{},_=d.hash||[];_.length&&(f+=\"&\"+_.join(\"=\")),f+=\"&jsver=\"+s.script_name,f+=\"&lver=\"+s.lver,f+=\"&pver=\"+goldlog.aplus_cplugin_ver,f+=\"&cache=\"+i.makeCacheNum(),f+=\"&page_cna=\"+p;var h={gmkey:g||\"\",gokey:f,cna:p};try{var m=location.href.substring(0,1200);m&&(h._p_url=goldlog.getMetaInfo(\"aplus-p-url\")||m)}catch(t){}e[\"spm-cnt\"]&&(h[\"spm-cnt\"]=e[\"spm-cnt\"]),e[\"spm-pre\"]&&(h[\"spm-pre\"]=e[\"spm-pre\"]);try{var v=o.getExParams(a),b=a.param2obj(v).uidaplus;b&&(h._gr_uid_=b);var y=a.param2obj(f).uidaplus;y&&(h.uidaplus=y)}catch(t){}return h},run:function(){this.options.context.what_to_hjlj.logdata=this.getParams()}}}},function(t,e,n){\"use strict\";var o=n(43),a=n(25),r=n(4);t.exports=function(){return{init:function(t){this.options=t},getToUtData:function(t,e){var n=a.getGoldlogVal(\"_$\")||{},i=n.spm||{},s=this.options.context.userdata||{},u=this.options.context.basic_params||{},c=this.options.context||{},l=c.what_to_hjlj_exinfo||{},p=l.exinfo||\"\",g=\"\";s.gokey&&p?g=[s.gokey,p].join(\"&\"):s.gokey?g=s.gokey:p&&(g=p);var f={};f.functype=\"ctrl\",f.funcId=o.getFunctypeValue2({logkey:s.logkey,gmkey:s.gmkey,spm_ab:a.getGoldlogVal(\"spm_ab\")}),f.url=goldlog.getMetaInfo(\"aplus-pagename\")||location.origin+location.pathname,f.logkey=s.logkey,f.gokey=encodeURIComponent(g),f.gmkey=s.gmkey,f._ish5=\"1\",f._h5url=location.href,f._is_g2u_=t?1:2,f._toUT=2,f._bridgeName=e.bridgeName||\"\",f._bridgeVersion=e.bridgeVersion||\"\",f[\"spm-cnt\"]=i.spm_cnt||\"\",f[\"spm-url\"]=i.spm_url||\"\",f[\"spm-pre\"]=i.spm_pre||\"\",f.cna=u.cna,f.lver=r.lver,f.jsver=r.script_name,s.hasOwnProperty(\"autosend\")&&(f.autosend=s.autosend);var d=goldlog.getMetaInfo(\"aplus-utparam\");return d&&(f[\"utparam-cnt\"]=JSON.stringify(d)),f},run:function(){var t=this.options.context||{},e=t.what_to_hjlj_ut2||{},n=!!t.is_single,o=t.where_to_sendlog_ut||{},a=o.aplusToUT||{},r=a.toUT2||{};e.logdataToUT=this.getToUtData(n,r),this.options.context.what_to_hjlj_ut2=e}}}},function(t,e,n){\"use strict\";var o=n(43),a=n(11),r=n(25),i=n(4);t.exports=function(){return{init:function(t){this.options=t},getToUtData:function(t,e){var n=r.getGoldlogVal(\"_$\")||{},s=n.spm||{},u=this.options.context||{},c=u.userdata||{},l=u.what_to_hjlj_exinfo||{},p=l.exinfo||\"\",g=\"\";c.gokey&&p?g=[c.gokey,p].join(\"&\"):c.gokey?g=c.gokey:p&&(g=p);var f={gmkey:c.gmkey,gokey:g,lver:i.lver,jsver:i.script_name,version:i.toUtVersion,spm_cnt:s.spm_cnt||\"\",spm_url:s.spm_url||\"\",spm_pre:s.spm_pre||\"\"};f._is_g2u_=t?1:2,f._bridgeName=e.bridgeName||\"\",f.bridgeVersion=e.bridgeVersion||\"\",f._toUT=1;try{f=JSON.stringify(f),\"{}\"==f&&(f=\"\")}catch(t){f=\"\"}var d=n.meta_info||{},_=d.isonepage_data||{},h={};return h.functype=o.getFunctypeValue({logkey:c.logkey,gmkey:c.gmkey,spm_ab:r.getGoldlogVal(\"spm_ab\")}),h.spmcnt=s.spm_cnt||\"\",h.spmurl=s.spm_url||\"\",h.spmpre=s.spm_pre||\"\",h.logkey=c.logkey,h.logkeyargs=f,h.urlpagename=_.urlpagename,h.url=location.href,h.cna=a.getCookie(\"cna\")||\"\",h.extendargs=\"\",h.isonepage=_.isonepage,h},run:function(){var t=this.options.context||{},e=!!t.is_single,n=t.what_to_hjlj_ut||{},o=t.where_to_sendlog_ut||{},a=o.aplusToUT||{},r=a.toUT||{};n.logdataToUT=this.getToUtData(e,r),this.options.context.what_to_hjlj_ut=n}}}},function(t,e){\"use strict\";t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this.options.context||{},e=t.is_single?\"1\":\"0\";t.what_to_hjlj_ut2.logdataToUT._slog=e,t.what_to_hjlj_ut.logdataToUT._slog=e;var n=[\"_slog=\"+e];if(t.ut_is_available){var o=t.is_single?\"1\":\"2\";n.push(\"_is_g2u=\"+o)}t.what_to_hjlj.logdata.gokey?t.what_to_hjlj.logdata.gokey+=\"&\"+n.join(\"&\"):t.what_to_hjlj.logdata.gokey=n.join(\"&\")}}}},function(t,e,n){\"use strict\";var o=n(18),a=n(9),r=n(25),i=n(24),s=n(26);t.exports=function(){return{init:function(t){this.options=t},getMetaInfo:function(){var t=r.getGoldlogVal(\"_$\")||{},e=t.meta_info||s.getInfo();return e},getAplusMetaByKey:function(t){var e=this.getMetaInfo()||{};return e[t]},cramUrl:function(t){var e=r.getGoldlogVal(\"_$\")||{},n=e.spm||{},o=this.options.context.where_to_hjlj||{},i=o.ac_atpanel,s=o.tblogUrl,u=this.options.context.what_to_hjlj||{},c=this.options.context.userdata||{},l=!0,p=c.logkey;if(!p)return{url:t,logkey_available:!1};if(\"ac\"==p)t=i+\"1.gif\";else if(a.isStartWith(p,\"ac-\"))t=i+p.substr(3);else if(a.isStartWith(p,\"/\")){t+=p.substr(1);var g=u.logdata||{};g[\"spm-cnt\"]=n.spm_cnt,g.logtype=2;try{u.logdata=g,this.options.context.what_to_hjlj=u}catch(t){}}else a.isEndWith(p,\".gif\")?t=s+p:l=!1;return{url:t,logkey_available:l}},can_to_sendhjlj:function(t){var e=this.options.context||{},n=e.logger||function(){},o=this.options.context.userdata||{};return!!t.logkey_available||(n({msg:\"logkey: \"+o.logkey+\" is not legal!\"}),!1)},run:function(){var t=!!this.options.context.is_single;if(!t){var e,n,a=o.filterIntUrl(this.options.context.where_to_hjlj.url),r=this.getAplusMetaByKey(\"aplus-rhost-g\"),s=r&&o.hostValidity(r);s&&(e=/^\\/\\//.test(r)?\"\":\"//\",n=/\\/$/.test(r)?\"\":\"/\",a=e+r+n),r&&!s&&i.logger({msg:\"aplus-rhost-g: \"+r+' is invalid, suggestion: \"xxx.mmstat.com\"'});var u=this.cramUrl(a);return this.can_to_sendhjlj(u)?void(this.options.context.where_to_hjlj.url=u.url):\"done\"}}}}},function(t,e,n){\"use strict\";var o=n(25);t.exports=function(){return{init:function(t){this.options=t},run:function(){var t=this.options.context||{},e=this.options.config||{},n=!!t.is_single;if(!n){var a=t.logger||{},r=t.what_to_hjlj||{},i=t.where_to_hjlj||{},s=r.logdata||{},u=i.url||\"\";u||\"function\"!=typeof a||a({msg:\"warning: where_to_hjlj.url is null, goldlog.record failed!\"});var c=goldlog.getMetaInfo(\"aplus-channel\");if(\"WS-ONLY\"!==c){var l=goldlog.send(i.url,s,e.method||\"GET\");o.setGoldlogVal(\"req\",l)}}}}}},function(t,e,n){\"use strict\";var o=n(42);t.exports=function(){return{init:function(t){this.options=t},run:function(t,e){var n=this,a=this.options.context||{},r=a.logger||function(){},i=a.what_to_hjlj_ut2||{},s=a.where_to_sendlog_ut||{},u=!!a.is_single,c=i.logdataToUT||{},l=s.aplusToUT||{},p=l.toUT2;if(o.isNative4Aplus())return l.toutflag=\"toUT2\",s.toUTName=\"toUT2\",void(n.options.context.what_to_hjlj_ut2.isSuccess=!0);if(p&&\"function\"==typeof p.toUT2&&p.isAvailable)try{l.toutflag=\"toUT2\",p.toUT2(c,function(){n.options.context.what_to_hjlj_ut2.isSuccess=!0,e()},function(t){n.options.context.what_to_hjlj_ut2.errorMsg=t,e()},2e3)}catch(t){u&&r({msg:\"warning: singleSendHjlj toUTName = toUT2 errorMsg:\"+t.message})}finally{return\"pause\"}}}}},function(t,e,n){\"use strict\";var o=n(42);t.exports=function(){return{init:function(t){this.options=t},run:function(t,e){var n=this,a=this.options.context||{},r=a.what_to_hjlj_ut2.isSuccess,i=a.logger||function(){},s=!!a.is_single,u=a.where_to_sendlog_ut||{},c=a.what_to_hjlj_ut||{},l=c.logdataToUT||{},p=u.aplusToUT||{},g=p.toUT;if(o.isNative4Aplus())return p.toutflag=\"toUT\",u.toUTName=\"toUT\",void(n.options.context.what_to_hjlj_ut.isSuccess=!0);if(!r&&g&&\"function\"==typeof g.toUT2&&g.isAvailable)try{p.toutflag=\"toUT\",g.toUT2(l,function(){n.options.context.what_to_hjlj_ut.isSuccess=!0,e()},function(t){n.options.context.what_to_hjlj_ut.errorMsg=t,e()},3e3)}catch(t){s&&i({msg:\"warning: singleSend toUTName = \"+u.toUTName+\" errorMsg:\"+t.message})}finally{return\"pause\"}}}}},function(t,e,n){\"use strict\";function o(){var t,e,n=i.KEY||{},o=n.NAME_STORAGE||{};if(!c&&u){var a=location.href,l=u&&(a.indexOf(\"login.taobao.com\")>=0||a.indexOf(\"login.tmall.com\")>=0),p=s.getRefer();l&&p?(t=p,e=r.getItem(o.REFERRER_PV_ID)):(t=a,e=goldlog.pvid),r.setItem(o.REFERRER,t),r.setItem(o.REFERRER_PV_ID,e)}}var a=n(79),r=n(54).nameStorage,i=n(4),s=n(53),u=\"https:\"==location.protocol,c=parent!==self;e.run=function(){var t=\"beforeunload\";a.on(window,t,function(){o()})}},function(t,e,n){\"use strict\";function o(t,e,n){var o=goldlog._$||{},a=o.meta_info||{},r=a.aplus_ctap||{},i=a[\"aplus-touch\"];if(r&&\"function\"==typeof r.on)r.on(t,e);else{var u=\"ontouchend\"in document.createElement(\"div\");!u||\"tap\"!==i&&\"tapSpm\"!==n?s(t,u?\"touchstart\":\"mousedown\",e):c.on(t,e)}}function a(t){try{p.documentElement.doScroll(\"left\")}catch(e){return void setTimeout(function(){a(t)},1)}t()}function r(t){var e=0,n=function(){0===e&&t(),e++};\"complete\"===p.readyState&&n();var o;if(p.addEventListener)o=function(){p.removeEventListener(\"DOMContentLoaded\",o,!1),n()},p.addEventListener(\"DOMContentLoaded\",o,!1),window.addEventListener(\"load\",n,!1);else if(p.attachEvent){o=function(){\"complete\"===p.readyState&&(p.detachEvent(\"onreadystatechange\",o),n())},p.attachEvent(\"onreadystatechange\",o),window.attachEvent(\"onload\",n);var r=!1;try{r=null===window.frameElement}catch(t){}p.documentElement.doScroll&&r&&a(n)}}function i(t){\"complete\"===p.readyState?t():s(l,\"load\",t)}function s(){var t=arguments;if(2===t.length)\"DOMReady\"===t[0]&&r(t[1]),\"onload\"===t[0]&&i(t[1]);else if(3===t.length){var e=t[0],n=t[1],a=t[2];\"tap\"===n||\"tapSpm\"===n?o(e,a,n):e[_]((g?\"on\":\"\")+n,function(t){t=t||l.event;var e=t.target||t.srcElement;\"function\"==typeof a&&a(t,e);\n},!!u(n)&&{passive:!0})}}var u=n(80),c=n(81),l=window,p=document,g=!!p.attachEvent,f=\"attachEvent\",d=\"addEventListener\",_=g?f:d;e.DOMReady=r,e.onload=i,e.on=s},function(t,e){var n;t.exports=function(t){if(\"boolean\"==typeof n)return n;if(!/touch|mouse|scroll|wheel/i.test(t))return!1;n=!1;try{var e=Object.defineProperty({},\"passive\",{get:function(){n=!0}});window.addEventListener(\"test\",null,e)}catch(t){}return n}},function(t,e){\"use strict\";function n(t,e){return t+Math.floor(Math.random()*(e-t+1))}function o(t,e,n){var o=l.createEvent(\"HTMLEvents\");if(o.initEvent(e,!0,!0),\"object\"==typeof n)for(var a in n)o[a]=n[a];t.dispatchEvent(o)}function a(t){0===Object.keys(g).length&&(p.addEventListener(_,r,!1),p.addEventListener(d,i,!1),p.addEventListener(m,i,!1));for(var e=0;e10&&(o.status=\"panning\")}}function i(t){for(var e=0;e0&&setTimeout(function(){for(;n=a.shift();)p(n)},100)}}try{e()}catch(t){u.do_tracker_jserror({message:t&&t.message,error:encodeURIComponent(t.stack),filename:\"processGoldlogQueue\"})}};e.processGoldlogQueue=g;var f=i.extend({push:function(t){this.length++,p(t)}});e.init_watchGoldlogQueue=function(t){try{var e=a[c]||[];if(t){var n=o(e,t);a[c]=n.queue,g(n.formatQueue)}else a[c]=f.create({startLength:e.length,length:0}),s.init_loadAplusPlugin(),g(e)}catch(t){u.do_tracker_jserror({message:t&&t.message,error:encodeURIComponent(t.stack),filename:\"init_watchGoldlogQueue\"})}}},function(t,e){\"use strict\";function n(){}n.prototype.extend=function(){},n.prototype.create=function(){},n.extend=function(t){return this.prototype.extend.call(this,t)},n.prototype.create=function(t){var e=new this;for(var n in t)e[n]=t[n];return e},n.prototype.extend=function(t){var e=function(){};try{\"function\"!=typeof Object.create&&(Object.create=function(t){function e(){}return e.prototype=t,new e}),e.prototype=Object.create(this.prototype);for(var n in t)e.prototype[n]=t[n];e.prototype.constructor=e,e.extend=e.prototype.extend,e.create=e.prototype.create}catch(t){console.log(t)}finally{return e}},t.exports=n},function(t,e,n){\"use strict\";var o=n(30),a=n(28),r=n(6),i=function(){var t=goldlog.getCdnPath()+\"/alilog/s/\"+r.lver+\"/plugin/\";return{aplus_ae_path:t+\"aplus_ae.js\",aplus_ac_path:t+\"aplus_ac.js\"}},s={},u=\"aplus-auto-exp\",c=\"aplus-auto-clk\",l=function(t,e){var n=i(),r=goldlog&&goldlog.getMetaInfo?goldlog.getMetaInfo(t):\"\",l=e||r||a.getMetaCnt(t),p={};p[u]=n.aplus_ae_path,p[c]=n.aplus_ac_path,l&&p[t]&&!s[t]&&(o.addScript(p[t]),s[t]=!0)};e.init_loadAplusPlugin=function(){try{!goldlog._aplus_auto_exp&&l(u),!goldlog._aplus_ac&&l(c),goldlog.aplus_pubsub.subscribe(\"setMetaInfo\",function(t,e){t!==u||goldlog._aplus_auto_exp||l(t,e),t!==c||goldlog._aplus_ac||l(t,e)})}catch(t){}}},function(t,e){\"use strict\";function n(t,e){return t.indexOf(e)>-1}function o(t,e){for(var o=0,a=t.length;o=1e3&&n<=1e4&&(t=n)}}catch(t){}return t}var u=window,c=document,l=n(84),p=n(18),g=n(79),f=n(30),d=n(24),_=n(32),h=n(9),m=n(25),v=n(22),b=n(51),y=n(26),w=y.getInfo(),x=n(4),T=n(3),j=n(88),A=n(11),P=n(91),S=n(93),k=[],U=[],E=[],I=[],M=\"//g.alicdn.com\",C=\"//g-assets.daily.taobao.net\",N=\"//assets.alicdn.com/g\",V=\"//s.alicdn.com/@g/\",O=\"//u.alicdn.com\",G=\"//laz-g-cdn.alicdn.com\";e.run=l.extend({getCdnPath:function(){var t=f.getCurrentNode(),e=M,n=[N,V,C,O,G],o=new RegExp(O);if(t)for(var a=0;a-1;return t||\"int\"===this.getMetaInfo(\"aplus-env\")},getCookie:function(t){return A.getCookie(t)},getParam:function(t){var e=u.WindVane||{},n=e&&\"function\"==typeof e.getParam?e.getParam(t):\"\";return n},beforeSendPV:function(t){k.push(t)},afterSendPV:function(t){U.push(t)},send:function(t,e,n){var o;if(0===t.indexOf(\"//\")){var a=v.getProtocal();t=a+t}return o=\"POST\"===n&&navigator&&navigator.sendBeacon?S.postData(t,e):S.sendImg(p.makeUrl(t,e),s())},launch:function(t,e){var n;try{e=h.assign(e,t),n=goldlog._$._sendPV(e,t);var o=goldlog.spm_ab?goldlog.spm_ab.join(\".\"):\"0.0\";T.do_tracker_obsolete_inter({page:location.hostname+location.pathname,spm_ab:o,interface_name:\"goldlog.launch\",interface_params:\"userdata = \"+JSON.stringify(t)+\", config = \"+JSON.stringify(e)})}catch(t){}finally{return d.logger({msg:\"warning: This interface is deprecated, please use goldlog.sendPV instead! API: http://log.alibaba-inc.com/log/info.htm?type=2277&id=31\"}),n}},_$:{_sendPV:function(t,e){if(t=t||{},h.any(k,function(e){return e(goldlog,t)===!1}))return!1;var o=n(94).SendPV,a=new o;return\"undefined\"==typeof t.recordType&&(t.recordType=x.recordTypes.pv),a.run(t,e,{fn_after_pv:U}),!0},_sendPseudo:function(t,e){t||(t={});var o=n(95).SendPrePV,a=new o;return\"undefined\"==typeof t.recordType&&(t.recordType=x.recordTypes.prepv),a.run(t,e,{},function(){_.doPubMsg([\"sendPrePV\",\"complete\"])}),!0}},sendPV:function(t,e){return e=e||{},e.pageName&&goldlog.setMetaInfo(\"aplus-pagename\",e.pageName),goldlog._$._sendPV(t,e)},updatePageProperties:function(t){t&&\"object\"==typeof t?(t._page&&(t.pageName=t._page,delete t._page),t.pageName&&(goldlog.setMetaInfo(\"aplus-pagename\",t.pageName),delete t.pageName),goldlog.appendMetaInfo(\"aplus-cpvdata\",t)):d.logger({msg:\"warning: typeof updatePageProperties's params must be object\"})},beforeRecord:function(t){E.push(t)},afterRecord:function(t){I.push(t)},record:function(t,e,n,o,a){if(!h.any(E,function(t){return t(goldlog)===!1}))return\"POST\"!==o&&\"WS\"!==o&&\"WS-ONLY\"!==o&&(o=\"GET\"),j.run({recordType:x.recordTypes.hjlj,method:o},{logkey:t,gmkey:e,gokey:n},{fn_after_record:I},function(){\"function\"==typeof a&&a()}),!0},recordUdata:function(t,e,n,o,a){var r=m.getGoldlogVal(\"_$\")||{},i=r.spm||{};\"POST\"!==o&&\"WS\"!==o&&\"WS-ONLY\"!==o&&(o=\"GET\"),j.run({ignore_chksum:!0,method:o,recordType:x.recordTypes.uhjlj},{logkey:t,gmkey:e,gokey:n,\"spm-cnt\":i.spm_cnt,\"spm-pre\":i.spm_pre},{},function(){h.isFunction(a)&&a()})},setPageSPM:function(t,e,n){var o=\"setPageSPM\",a=goldlog.getMetaInfo(\"aplus-spm-fixed\"),s=\"function\"==typeof n?n:function(){};goldlog.spm_ab=goldlog.spm_ab||[];var u=h.cloneObj(goldlog.spm_ab);if(t&&(goldlog.spm_ab[0]=\"\"+t,goldlog._$.spm.data.a=\"\"+t),e&&(goldlog.spm_ab[1]=\"\"+e,goldlog._$.spm.data.b=\"\"+e),b.spaInit(goldlog,w,u),\"1\"!==a){var c=u.join(\".\");goldlog.spmab_pre=c}var l=goldlog.spm_ab.join(\".\");_.doPubMsg([o,{spmab_pre:goldlog.spmab_pre,spmab:l}]),_.doCachePubs([o,{spmab_pre:goldlog.spmab_pre,spmab:l}]),r(),i(),s()},setMetaInfo:function(t,e,n){if(y.setMetaInfo(t,e,n)){var o=m.getGoldlogVal(\"_$\")||{};o.meta_info=y.qGet();var a=m.setGoldlogVal(\"_$\",o),r=P.isDisablePvid()+\"\";return\"aplus-disable-pvid\"===t&&r!==e+\"\"&&b.resetSpmCntPvid(),_.doPubMsg([\"setMetaInfo\",t,e,n]),_.doCachePubs([\"setMetaInfo\",t,e,n]),a}},appendMetaInfo:y.appendMetaInfo,getMetaInfo:function(t){return y.getMetaInfo(t)},on:g.on,cloneDeep:h.cloneDeep,getPvId:P.getPvId})},function(t,e,n){\"use strict\";var o=n(9),a=n(25),r=n(32),i=n(24),s=n(89),u=n(90),c=n(4);e.run=function(t,e,n,l){var p=new u;p.init({middleware:[],config:t,plugins:c.plugins_hjlj});var g=p.run(),f=new c.context_hjlj;f.userdata=e,f.logger=i.logger;var d={context:f,pubsub:a.getGoldlogVal(\"aplus_pubsub\"),pubsubType:\"hjlj\"},_=new s;_.create(d),_.wrap(g,function(){d.context.status=\"complete\",d.context.method=t.method,r.doPubMsg([\"mw_change_hjlj\",d.context]),n&&n.fn_after_record&&o.each(n.fn_after_record,function(t){t(window.goldlog)}),\"function\"==typeof l&&l()})()}},function(t,e,n){\"use strict\";function o(){}var a=n(12),r=n(23),i=n(24),s=n(3),u=n(11);o.prototype.create=function(t){for(var e in t)\"undefined\"==typeof this[e]&&(this[e]=t[e]);return this},o.prototype.pubsubInfo=function(t,e){try{t&&t.pubsub&&t.pubsub.publish(\"mw_change_\"+t.pubsubType,t.context,e)}catch(t){}},o.prototype.calledList=[],o.prototype.setCalledList=function(t){a.indexof(this.calledList,t)===-1&&this.calledList.push(t)},o.prototype.resetCalledList=function(){this.calledList=[]},o.prototype.wrap=function(t,e){var n=this,o=this.context||{},c=o.compose||{},l=c.maxTimeout||1e4;return function(o){var c,p=t.length,g=0,f=0,d=function(){if(n.pubsubInfo(n,t[g]),g===p)return o=\"done\",n.resetCalledList(),\"function\"==typeof e&&e.call(n,o),void clearTimeout(c);if(a.indexof(n.calledList,g)===-1){if(n.setCalledList(g),!t[g]||\"function\"!=typeof t[g][0])return;try{o=t[g][0].call(n,o,function(){g++,f=1,clearTimeout(c),d(g)})}catch(e){s.do_tracker_jserror({message:e?e.message:\"compose middleware error\",error:encodeURIComponent(e.stack),filename:t[g][1]})}}var _=\"number\"==typeof o;if(\"pause\"===o||_){f=0;var h=_?o:l,m=t[g]?t[g][1]:\"\";c=r.sleep(h,function(){if(0===f){var t=\"jump the middleware about \"+m+\", because waiting timeout maxTimeout = \"+h+\"ms!\";i.logger({msg:t});var e=window.goldlog_queue||(window.goldlog_queue=[]);e.push({action:\"goldlog._aplus_cplugin_m.do_tracker_browser_support\",arguments:[{msg:t,spmab:goldlog.spm_ab,page:location.href,etag:n.context?JSON.stringify(n.context.etag):\"\",cna:document.cookie?u.getCookie(\"cna\"):\"\"}]}),o=null,g++,d(g)}})}else\"done\"===o?(g=p,d(g)):(g++,d(g))};return n.calledList&&n.calledList.length>0&&n.resetCalledList(),d(g)}},t.exports=o},function(t,e,n){\"use strict\";var o=n(12);t.exports=function(){return{init:function(t){this.opts=t,t&&\"object\"==typeof t.middleware&&t.middleware.length>0?this.middleware=t.middleware:this.middleware=[],this.plugins_name=[]},pubsubInfo:function(t,e){try{var n=t.pubsub;n&&n.publish(\"plugins_change_\"+t.pubsubType,e)}catch(t){}},checkPluginLoader:function(t,e){var n=!0;if(\"object\"==typeof e.enable&&\"function\"==typeof e.enable.isEnable?n=e.enable.isEnable(e.name):\"boolean\"==typeof e.enable&&(n=!!e.enable),!n)return!1;if(n&&e.deps&&e.deps.length>0)for(var a=0;a0){var r=a[t];if(this.checkPluginLoader(a,r)&&(this.plugins_name.push(r.name),n.push([function(t,n){e.pubsubInfo(this,r);var a=new r.path;return a.init({context:this.context,config:o.config}),a.run(t,n)},r.name])),t++,a[t])return this.run(t)}else window.console&&console.log(\"aplus plugins \"+JSON.stringify(a)+\" must be object of array!\");return n}}}},function(t,e,n){\"use strict\";function o(){var t=\"true\"===l.disablePvid;try{var e=goldlog.getMetaInfo(\"aplus-disable-pvid\")+\"\";\"true\"===e?t=!0:\"false\"===e&&(t=!1)}catch(t){}return t}function a(t){function e(t){var e=\"0123456789abcdefhijklmnopqrstuvwxyzABCDEFHIJKLMNOPQRSTUVWXYZ\",n=\"0123456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKMNOPQRSTUVWXYZ\";return 1==t?e.substr(Math.floor(60*Math.random()),1):2==t?n.substr(Math.floor(60*Math.random()),1):\"0\"}for(var n,o=\"\",a=\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\",r=!1;o.length=0;o--)a=t.charCodeAt(o),r^=(r<<5)+a+(r>>2);var i=(2147483647&r).toString(16);return i}},function(t,e,n){\"use strict\";function o(t){if(!t)return\"\";var e=decodeURIComponent(t).match(/cache=\\w+/);return e&&1===e.length?e[0].split(\"=\")[1]:void 0}var a=n(3),r=window;e.sendImg=function(t,e){var n=new Image,i=\"_img_\"+Math.random();r[i]=n;var s=function(){if(r[i])try{delete r[i]}catch(t){r[i]=void 0}};return n.onload=function(){s()},n.onerror=function(){a.do_tracker_jserror({message:\"loadError\",error:\"\",filename:\"sendImg\",logid:o(t)}),s()},setTimeout(function(){window[i]&&(a.do_tracker_jserror({message:\"loadTimeout\",error:e,filename:\"sendImg\",logid:o(t)}),window[i].src=\"\",s())},e||3e3),n.src=t,n=null,t},e.postData=function(t,e){var n;if(\"string\"==typeof e)n=e;else{for(var o in e)[\"cna\"].indexOf(o)===-1&&(e[o]=encodeURIComponent(e[o]));n=JSON.stringify(e)}return navigator.sendBeacon(t,n),t}},function(t,e,n){\"use strict\";var o=n(9),a=n(25),r=n(32),i=n(24),s=n(89),u=n(90),c=n(4),l=function(){};l.prototype.run=function(t,e,n){var l=new u;l.init({middleware:[],config:t,plugins:c.plugins_pv});var p=l.run(),g=new c.context;g.userdata=e,g.logger=i.logger;var f={context:g,pubsub:a.getGoldlogVal(\"aplus_pubsub\"),pubsubType:\"pv\"},d=new s;d.create(f),d.wrap(p,function(){var e=f.context.can_to_sendpv||{};f.context.status=\"YES\"===e.flag?\"complete\":\"skip\",f.context.method=t.method||\"GET\",r.doPubMsg([\"mw_change_pv\",f.context]),n&&n.fn_after_pv&&o.each(n.fn_after_pv,function(e){e(window.goldlog,t)})})()},e.SendPV=l},function(t,e,n){\"use strict\";var o=n(9),a=n(25),r=n(32),i=n(24),s=n(89),u=n(90),c=n(4),l=function(){};l.prototype.run=function(t,e,n,l){var p=new u;p.init({middleware:[],config:t,plugins:c.plugins_prepv});var g=p.run(),f=new c.context_prepv;f.userdata=e,f.logger=i.logger;var d={context:f,pubsub:a.getGoldlogVal(\"aplus_pubsub\"),pubsubType:\"prepv\"},_=new s;_.create(d),_.wrap(g,function(){d.context.status=\"complete\",r.doPubMsg([\"mw_change_prepv\",d.context]),n&&n.fn_after_record&&o.each(n.fn_after_pv,function(e){e(window.goldlog,t)}),a.setGoldlogVal(\"prepv_context\",f),\"function\"==typeof l&&l()})()},e.SendPrePV=l},function(t,e,n){\"use strict\";!function(){var t=window.goldlog||(window.goldlog={}),e=n(97);t.aplus_pubsub||(t.aplus_pubsub=e.create())}()},function(t,e,n){\"use strict\";function o(t){if(\"function\"!=typeof t)throw new TypeError(t+\" is not a function\");return t}var a=n(84),r=function(t){for(var e=t.length,n=new Array(e-1),o=1;o0){for(var a=0;a0)for(var a=0;a1?a.pop():\"\",i>0&&(n=r.pop(),t=r.join(\"?\")),n&&i>1&&n.indexOf(\"&\")==-1&&n.indexOf(\"%\")!==-1&&(c=\"%26\");var l=\"\";if(t=t+\"?spm=\"+l+e+(n?c+n:\"\")+(o?\"#\"+o:\"\"),u=h.isContain(s,\".\")?s.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(u))return 0;!n&&i<=1&&(o||{htm:1,html:1,php:1,aspx:1,shtml:1,xhtml:1}.hasOwnProperty(u)||(t+=\"&file=\"+s))}return t}}function s(t,e){if(!goldlog.isUT4Aplus||\"UT4Aplus\"!==goldlog.getMetaInfo(\"aplus-toUT\")){var n,o=t.innerHTML;o&&o.indexOf(\"<\")==-1&&(n=document.createElement(\"b\"),n.style.display=\"none\",t.appendChild(n)),t.href=e,n&&t.removeChild(n)}}function u(t,e,n){if(!/^0\\.0\\.?/.test(e)){var o=y.tryToGetHref(t),r=a(),u=w.is_ignore_spm(t);if(u){var c=_.param2obj(o);if(c.spm&&c.spm.split)for(var l=c.spm.split(\".\"),p=e.split(\".\"),g=0;g<3&&p[g]===l[g];g++)2===g&&l[3]&&(e=c.spm)}t.setAttribute(\"data-spm-anchor-id\",e);var f=goldlog.getPvId();f&&(e+=\".\"+f);var d=\"0.0\";(f||r&&r!=d)&&(u||n||(o=i(o,e))&&s(t,o))}}function c(t){var e=v.tryToGetAttribute(t,A),n=m.parseSemicolonContent(e)||{};return n}function l(t){var e,n=b.getGoldlogVal(\"_$\")||{},o=n.spm.data;return\"0\"==o.a&&\"0\"==o.b?e=\"0\":(e=v.tryToGetAttribute(t,j),e&&e.match(/^d\\w+$/)||(e=\"\")),e}function p(t,e){for(var n=[],o=m.nodeListToArray(t.getElementsByTagName(\"a\")),a=m.nodeListToArray(t.getElementsByTagName(\"area\")),r=o.concat(a),i=0;i0&&(d+=\"&\"),d+=v.length>0?v.join(\"&\"):\"\",goldlog&&s.isFunction(goldlog.recordUdata)?goldlog.recordUdata(m,f,d,\"GET\",function(){}):l.logger({msg:\"goldlog.recordUdata is not function!\"}),i.tryToSetAttribute(t,\"data-spm-anchor-id\",h)}function a(t,e){var n=e;window.g_SPM&&(g_SPM._current_spm=p.spm_getSPMParam(e));for(var a;e&&\"HTML\"!==e.tagName;){a=i.tryToGetAttribute(e,\"data-spm-click\");{if(a){o(e,a,\"mousedown\"===t.type?t.type:\"tap\");break}e=e.parentNode}}if(!a){var r=g.getGlobalSPMId(),s=goldlog.getMetaInfo(\"aplus-getspmcd\");\"function\"==typeof s&&s(n,t,r)}}var r=n(79),i=n(27),s=n(9),u=n(19),c=n(12),l=n(24),p=n(104),g=n(105);e.run=function(t){t&&t.isTouchEnabled?r.on(document,\"tap\",a):r.on(document,\"mousedown\",a)}},function(t,e,n){\"use strict\";function o(){for(var t=document.getElementsByTagName(\"iframe\"),e=0;e10&&(n=3e3),o(),setTimeout(t,n)}var e=0,n=500;t()}var r=n(27),i=n(105),s=n(104);e.run=function(t){t&&!t.isTerminal&&a()}},function(t,e,n){\"use strict\";function o(t,e){for(var n,o=window;e&&(n=e.tagName);){if(\"A\"===n||\"AREA\"===n){r.spm_spmAnchorChk(e,!1);var a=o.g_SPM||(o.g_SPM={}),i=a._current_spm=r.spm_getSPMParam(e),s=[];try{s=[i.a,i.b,i.c,i.d];var u=i.e||goldlog.pvid||\"\";u&&s.push(u)}catch(t){}break}if(\"BODY\"==n||\"HTML\"==n)break;e=e.parentNode}}var a=n(79),r=n(104);e.run=function(t){var e=document;t&&t.isTouchEnabled?a.on(e,\"tapSpm\",o):(a.on(e,\"mousedown\",o),a.on(e,\"keydown\",o))}},function(t,e,n){\"use strict\";function o(t,e){if(e||(e=p),p.evaluate)return e.evaluate(t,p,null,9,null).singleNodeValue;\nfor(var n,a=t.split(\"/\");!n&&a.length>0;)n=a.shift();var r,i=/^.+?\\[@id='(.+?)']$/i,s=/^(.+?)\\[(\\d+)]$/i;return(r=n.match(i))?e=e.getElementById(r[1]):(r=n.match(s))&&(e=e.getElementsByTagName(r[1])[parseInt(r[2])-1]),e?0===a.length?e:o(a.join(\"/\"),e):null}function a(){var t={};for(var e in l)if(l.hasOwnProperty(e)){var n=o(e);if(n){t[e]=1;var a=l[e],r=\"A\"===n.tagName?a.spmd:a.spmc;s.tryToSetAttribute(n,\"data-spm\",r||\"\")}}for(var i in t)t.hasOwnProperty(i)&&delete l[i]}function r(){if(!c&&g.spmData){c=!0;var t=g.spmData.data;if(t&&i.isArray(t)){for(var e=0;e1?a.pop():\"\",o>0&&(r=i.pop(),t=i.join(\"?\")),r&&o>1&&r.indexOf(\"&\")==-1&&r.indexOf(\"%\")!=-1&&(s=\"%26\"),t=t+\"?spm=\"+e+(r?s+r:\"\")+(n?\"#\"+n:\"\"),p=c.indexOf(\".\")>-1?c.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(p))return 0;!r&&o<=1&&(n||{htm:1,html:1,php:1}.hasOwnProperty(p)||(t+=\"&file=\"+c))}return t}function n(t){function e(t){return t=t.replace(/refpos[=(%3D)]\\w*/gi,c).replace(i,\"%3D\"+n+\"%26\"+a.replace(\"=\",\"%3D\")).replace(o,n),a.length>0&&(t+=\"&\"+a),t}var r=window.location.href,n=r.match(/mm_\\d{0,24}_\\d{0,24}_\\d{0,24}/i),a=r.match(/[&\\?](pvid=[^&]*)/i),i=new RegExp(\"%3Dmm_\\\\d+_\\\\d+_\\\\d+\",\"ig\"),o=new RegExp(\"mm_\\\\d+_\\\\d+_\\\\d+\",\"ig\");a=a&&a[1]?a[1]:\"\";var c=r.match(/(refpos=(\\d{0,24}_\\d{0,24}_\\d{0,24})?(,[a-z]+)?)(,[a-z]+)?/i);return c=c&&c[0]?c[0]:\"\",n?(n=n[0],e(t)):t}function a(e){var r=s.KISSY;r?r.ready(e):s.jQuery?jQuery(m).ready(e):\"complete\"===m.readyState?e():t(s,\"load\",e)}function i(t,e){return t&&t.getAttribute?t.getAttribute(e)||\"\":\"\"}function o(t){if(t){var e,r=g.length;for(e=0;e-1)return!0;return!1}}function c(t,e){if(t&&/&?\\bspm=[^&#]*/.test(t)&&(t=t.replace(/&?\\bspm=[^&#]*/g,\"\").replace(/&{2,}/g,\"&\").replace(/\\?&/,\"?\").replace(/\\?$/,\"\")),!e)return t;var r,n,a,i,o,c,p,s=\"&\";if(t.indexOf(\"#\")!=-1&&(a=t.split(\"#\"),t=a.shift(),n=a.join(\"#\")),i=t.split(\"?\"),o=i.length-1,a=i[0].split(\"//\"),a=a[a.length-1].split(\"/\"),c=a.length>1?a.pop():\"\",o>0&&(r=i.pop(),t=i.join(\"?\")),r&&o>1&&r.indexOf(\"&\")==-1&&r.indexOf(\"%\")!=-1&&(s=\"%26\"),t=t+\"?spm=\"+e+(r?s+r:\"\")+(n?\"#\"+n:\"\"),p=c.indexOf(\".\")>-1?c.split(\".\").pop().toLowerCase():\"\"){if({png:1,jpg:1,jpeg:1,gif:1,bmp:1,swf:1}.hasOwnProperty(p))return 0;!r&&o<=1&&(n||{htm:1,html:1,shtml:1,php:1}.hasOwnProperty(p)||(t+=\"&__file=\"+c))}return t}function p(t){if(o(t.href)){var r=i(t,u);if(!r){var n=l()(t),a=[n.a,n.b,n.c,n.d].join(\".\");n.e&&(n+=\".\"+n.e),d&&(a=[n.a||\"0\",n.b||\"0\",n.c||\"0\",n.d||\"0\"].join(\".\"),a=(e()||\"0.0.0.0.0\")+\"_\"+a),t.href=c(t.href,a),t.setAttribute(u,a)}}}var s=window,m=document;if(1!==s.aplus_spmact){s.aplus_spmact=1;var f=function(){return{a:0,b:0,c:0,d:0,e:0}},l=function(){return s.g_SPM&&s.g_SPM.getParam?s.g_SPM.getParam:f},d=!0;try{d=self.location!=top.location}catch(t){}var u=\"data-spm-act-id\",g=[\"mclick.simba.taobao.com\",\"click.simba.taobao.com\",\"click.tanx.com\",\"click.mz.simba.taobao.com\",\"click.tz.simba.taobao.com\",\"redirect.simba.taobao.com\",\"rdstat.tanx.com\",\"stat.simba.taobao.com\",\"s.click.taobao.com\"],h=!!m.attachEvent,b=\"attachEvent\",v=\"addEventListener\",_=h?b:v;t(m,\"mousedown\",function(t,e){for(var r,n=0;e&&(r=e.tagName);){if(\"A\"==r||\"AREA\"==r){p(e);break}if(\"BODY\"==r||\"HTML\"==r)break;e=e.parentNode,n+=1}}),a(function(){for(var t,a,o=document.getElementsByTagName(\"iframe\"),c=0;c tuple: + """ + 初始化浏览器实例 + :return: + """ + playwright = await async_playwright().start() + browser = await playwright.chromium.launch(headless=False, + chromium_sandbox=config.BROWSER_ENABLE_SANDBOX, + ignore_default_args=config.BROWSER_IGNORE_DEFAULT_ARGS, + channel="chrome", + args=config.BROWSER_ARGS) + content = await browser.new_context() + return playwright, browser + + +async def main(): + playwright, browser = await init_browser() + main_info = """ + 请选择要登录的平台: + 1.Deepseek + 2.通义千问 + 3.腾讯元宝 + 4.Kimi + 5.豆包 + 6.文心一言 + 13.秘塔AI搜索 + """ + print(main_info) + platform_id = input() + cls = SPIDER_CLS.get(int(platform_id), None) + # 如果没有找到对应的爬虫类,抛出异常 + if not cls: + print('输入的平台id不存在') + # 要求用户填写登录账号 + account = input('请输入登录账号:') + # 创建并返回爬虫实例 + spider = cls(browser, '', '') + # 获取首页url + home_url = spider.get_home_url() + # 打开页面 + browser_content = await browser.new_context() + browser_page = await browser_content.new_page() + await browser_page.set_viewport_size(config.PAGE_INIT_VIEWPORT_SIZE) + print('创建浏览器成功') + # 加载伪装脚本 + await browser_page.add_init_script(""" + Object.defineProperties(navigator, {webdriver:{get:()=>false}}); + """) + await browser_page.add_init_script('static/stealth.min.js') + print('伪装脚本加载成功') + await browser_page.goto(home_url, timeout=6000000) + print('加载首页成功') + input('使用手机号登录 并发送验证码后按回车键继续...') + # 保存登录后的上下文 + session_path = f"{config.ROOT_PATH}/data/tmp/session_{time.time()}.json" + # 检查文件夹 + dir_path = os.path.dirname(session_path) + os.makedirs(dir_path, exist_ok=True) + await browser_content.storage_state(path=session_path) + await browser_page.close() + await browser_content.close() + await browser.close() + print(f"登录成功 保存到{session_path}") + # 上传登录后的上下文 + upload_data = await AiSeoApis.upload_session_file(session_path) + session_url = upload_data['url'] + print(f"session文件上传成功 url:{session_url}") + # 计算文件hash + file_hash = make_sha256_hash(session_path) + result = await AiSeoApis.save_spider_session(platform_id, session_url, file_hash, account) + print("session文件保存成功") + print(result) + +if __name__ == '__main__': + asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file diff --git a/main.py b/main.py new file mode 100644 index 0000000..7189fd6 --- /dev/null +++ b/main.py @@ -0,0 +1,85 @@ +# coding=utf-8 + +import asyncio +import json +import os +from dataclasses import asdict +from datetime import datetime + +from playwright.async_api import async_playwright + +import config +from abs_spider import AbstractAiSeoSpider +from domain.ai_seo import AiAnswer +from spiders.ai_seo import * +from utils.logger_utils import create_logger + +logger = create_logger("app") + +SPIDER_CLS = { + 1: DeepseekSpider, + 2: TongyiSpider, + 3: YuanBaoSpider, + 4: KimiSpider, + 5: DouBaoSpider, + 6: YiYanSpider, + 7: NanometerSpider, + 13: MetasoSpider +} + + +async def init_browser() -> tuple: + """ + 初始化浏览器实例 + :return: + """ + playwright = await async_playwright().start() + browser = await playwright.chromium.launch(headless=config.BROWSER_HANDLESS, + chromium_sandbox=config.BROWSER_ENABLE_SANDBOX, + ignore_default_args=config.BROWSER_IGNORE_DEFAULT_ARGS, + channel="chrome", + args=config.BROWSER_ARGS) + content = await browser.new_context() + return playwright, browser + + +def get_spider(platform_id, prompt, brand, browser) -> AbstractAiSeoSpider: + cls = SPIDER_CLS.get(int(platform_id), None) + if not cls: + raise ValueError(f"未找到对应的爬虫类,platform_id={platform_id}") + return cls(browser, prompt, brand, True) + + +def save_local(ai_answer: AiAnswer): + now = datetime.now().strftime("%Y-%m-%d") + base_path = f'./data/{ai_answer.platform_name}/{now}' + + if not os.path.exists(base_path): + os.makedirs(base_path) + + json_file_path = f'{base_path}/{ai_answer.prompt}.json' + _dict = asdict(ai_answer) + json_str = json.dumps(_dict, indent=4, ensure_ascii=False) + with open(json_file_path, 'w', encoding='utf-8') as f: + f.write(json_str) + logger.info(f"[{ai_answer.platform_name}]{ai_answer.prompt} 保存成功: {base_path}") + + +async def test(): + playwright, browser = await init_browser() + prompts = config.TEST_KEYWORDS + index = 1 + for prompt in prompts: + logger.info(f"[{index}/{len(prompts)}] {prompt}") + for platform in config.TEST_PLATFORM: + spider = get_spider(platform, prompt, '品牌词', browser) + ai_answer = await spider.run() + if ai_answer: + save_local(ai_answer) + await asyncio.sleep(config.TEST_INTERVAL) + index = index + 1 + await asyncio.sleep(config.TEST_INTERVAL * 6) + + +if __name__ == '__main__': + asyncio.get_event_loop().run_until_complete(test()) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e92a8d6 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,12 @@ +ftfy==6.3.1 +glom==24.11.0 +httpx==0.28.1 +json_repair==0.40.0 +loguru==0.7.3 +openai~=1.72.0 +playwright==1.51.0 +arq~=0.26.3 +APScheduler~=3.11.0 +pillow~=11.2.1 +pyperclip~=1.9.0 +PyJWT~=2.10.1 \ No newline at end of file diff --git a/resave.py b/resave.py new file mode 100644 index 0000000..82d28a9 --- /dev/null +++ b/resave.py @@ -0,0 +1,78 @@ +# coding=utf-8 +import asyncio +import json +import os +from datetime import datetime +import random + +import config +from utils import create_logger +from utils.ai import read_rank +from utils.ai_seo_api_utils import AiSeoApis + +logger = create_logger(__name__) + +platform_names = { + 1: 'Deepseek', + 2: 'TongYi', + 3: 'YuanBao', + 4: 'Kimi', + 5: 'DouBao', + 6: 'YiYan', + 7: 'Nano' +} + +async def main(): + datas = config.RESAVE_CONFIG['dates'] + for date in datas: + logger.info(f'start: {date}') + while True: + task_data = await AiSeoApis.get_one_task(date=date, platform_ids=config.RESAVE_CONFIG['platform_ids']) + if not task_data: + logger.info('没有任务') + break + logger.info(f"获取到任务: id: {task_data['id']} 关键词: {task_data['keyword']} 品牌词: {task_data['brand']}") + await save(task_data) + await asyncio.sleep(1) + +async def save(task_data): + keyword = task_data.get('keyword') + platform_id = task_data.get('platform_id') + gather_date_str = task_data.get('gather_filter') + gather_date = datetime.strptime(gather_date_str, "%Y-%m-%d %H:%M:%S") + dir_name = gather_date.strftime("%Y-%m-%d") + platform_name = platform_names.get(platform_id) + + data_path = f'./data/{platform_name}/{dir_name}/{keyword}.json' + + # 读取文件内容 + if not os.path.exists(data_path): + logger.info(f'文件不存在: {data_path}') + return + json_data = {} + with open(data_path, 'r', encoding='utf-8') as file: + json_data = json.loads(file.read()) + upload_data = await AiSeoApis.upload_screenshot_file(json_data['screenshot_file']) + json_data = { + **config.AI_SEO_API_AUTH, + **json_data, + 'task_id': task_data['id'], + 'rank': random.randint(0, 15), + 'start_time': gather_date.strftime("%Y-%m-%d 06:10:15"), + 'end_time': gather_date.strftime("%Y-%m-%d 06:12:15"), + 'screenshot_url': upload_data['url'] + } + if not json_data.get('answer', ''): + json_data['answer'] = '未知' + json_data['rank'] = 0 + else: + brands, rank = await read_rank(json_data['answer'], task_data['brand']) + json_data['rank'] = rank + json_data['words'] = brands + result = await AiSeoApis.submit_task(json_data) + logger.info(f"任务提交成功: id: {task_data['id']}") + + +if __name__ == '__main__': + asyncio.get_event_loop().run_until_complete(main()) + diff --git a/run.py b/run.py new file mode 100644 index 0000000..f920cca --- /dev/null +++ b/run.py @@ -0,0 +1,238 @@ +# coding=utf-8 +import asyncio +import uuid +from dataclasses import asdict +from datetime import datetime, timedelta + +import requests +from apscheduler.schedulers.asyncio import AsyncIOScheduler +from playwright.async_api import async_playwright, Browser + +import config +from spiders.ai_seo import * +from utils import create_logger +from utils.ai import read_rank +from utils.ai_seo_api_utils import AiSeoApis + +logger = create_logger(__name__) + +scheduler = AsyncIOScheduler() +SPIDER_CLS = { + 1: DeepseekSpider, + 2: TongyiSpider, + 3: YuanBaoSpider, + 4: KimiSpider, + 5: DouBaoSpider, + 6: YiYanSpider, + 7: NanometerSpider, + 13: MetasoSpider +} + +spider_pool: dict = {} + +async def init_browser() -> tuple: + """ + 初始化浏览器实例 + :return: + """ + playwright = await async_playwright().start() + browser = await playwright.chromium.launch(headless=config.BROWSER_HANDLESS, + chromium_sandbox=config.BROWSER_ENABLE_SANDBOX, + ignore_default_args=config.BROWSER_IGNORE_DEFAULT_ARGS, + channel="chrome", + args=config.BROWSER_ARGS) + return playwright, browser + +def get_spider(platform_id, prompt, brand, browser) -> None | DeepseekSpider | TongyiSpider | YuanBaoSpider | KimiSpider | DouBaoSpider | YiYanSpider | NanometerSpider: + """ + 根据平台ID获取相应的爬虫实例。 + + 参数: + - platform_id: 平台标识符,用于选择合适的爬虫类。 + - prompt: 用户查询提示,用于爬虫处理。 + - brand: 品牌信息,用于爬虫处理。 + - browser: 浏览器实例,供爬虫使用。 + + 返回: + - AbstractAiSeoSpider: 返回一个抽象的AI SEO爬虫实例。 + + 异常: + - ValueError: 如果未找到对应的爬虫类,则抛出此异常。 + """ + # 根据平台ID获取对应的爬虫类 + cls = SPIDER_CLS.get(int(platform_id), None) + # 如果没有找到对应的爬虫类,抛出异常 + if not cls: + return None + # 创建并返回爬虫实例 + return cls(browser, prompt, brand) + + +async def ai_seo_job(browser, platform_ids, time_range, job_id, type_name, run_id): + status, date = calc_task_date(time_range) + + # if not status: + # # 是否有紧急任务 + # task_result = await AiSeoApis.get_urgent_task_count() + # if task_result['count'] <= 0: + # return + current_job = scheduler.get_job(job_id) + # current_job.pause() + platform_str = ','.join(platform_ids) + # 获取任务信息 + task_data = await AiSeoApis.get_one_task(date=date, platform_ids=platform_str) + + if not task_data: + logger.info(f'[{type_name}]未获取到任务信息') + # current_job.resume() + return + task_id = task_data['id'] + logger.info(f"获取到{task_data['project_id']}项目任务: id: {task_data['id']} 平台id: {task_data['platform_id']} " + f"关键词: {task_data['keyword']} 品牌词: {task_data['brand']}") + + # 记录开始时间 + start_time = datetime.now() + # 创建爬虫实例 + spider = get_spider(task_data['platform_id'], task_data['keyword'], task_data['brand'], browser) + # 记录任务id + spider.task_id = task_id + spider_pool[run_id] = spider + logger.info(f"RunId注册成功: TaskId: {task_id} 平台: {spider.platform_name}") + # 是否开启深度思考 + if task_data['thinking'] == 1: + spider.think = True + if not spider: + await AiSeoApis.update_task_status(task_id, 5) + logger.error(f"未找到对应的爬虫类 请检查任务信息: id: {task_data['id']} platform_id: {task_data['platform_id']}") + return + ai_answer = None + try: + # 运行爬虫并获取结果 + ai_answer = await spider.run() + except Exception as e: + await AiSeoApis.update_task_status(task_id, 4) + logger.info(f"回滚任务状态: id: {task_id}") + spider_pool.pop(run_id, None) + return + if not ai_answer: + await AiSeoApis.update_task_status(task_id, 4) + logger.error(f"爬虫运行失败 id: {task_data['id']} platform_id: {task_data['platform_id']}") + spider_pool.pop(run_id, None) + return + # 记录结束时间 + end_time = datetime.now() + + # 提交爬虫结果 + answer_data = asdict(ai_answer) + # 上传截图 + upload_data = await AiSeoApis.upload_screenshot_file(answer_data['screenshot_file']) + # 结果参数 + answer_data = { + **config.AI_SEO_API_AUTH, + **answer_data, + 'task_id': task_data['id'], + 'rank': 0, + 'start_time': start_time.strftime("%Y-%m-%d %H:%M:%S"), + 'end_time': end_time.strftime("%Y-%m-%d %H:%M:%S"), + 'screenshot_url': upload_data['url'] + } + if not answer_data.get('answer', ''): + answer_data['answer'] = '未知' + answer_data['rank'] = 0 + else: + brands, rank = await read_rank(answer_data['answer'], task_data['brand']) + answer_data['rank'] = rank + answer_data['words'] = brands + # print('answer_data',answer_data) + search_results = list() + for data in answer_data.get("search_result"): + data_ = {**config.AI_SEO_API_AUTH,"content": data.get("title")} + rest = '' + try: + resp = requests.post(url='https://geo-api.neicela.com/api/third/getSentimentType',json=data_,timeout=600) + # print(resp.text) + rest = resp.json() + except Exception as e: + print(str(e)) + # logger.info("调用getSentimentType接口出现异常:",str(e)) + + # print("rest",rest) + if rest.get("code") == 0: + data.update(rest.get("data")) + search_results.append(data) + answer_data['search_result'] = search_results + result = await AiSeoApis.submit_task(answer_data) + logger.info(f"任务提交成功: id: {task_data['id']}") + spider_pool.pop(run_id, None) + +async def ai_seo_job_with_timeout(browser, platform_ids, time_range, job_id, type_name, timeout=1200): + # 生成一个唯一的run_id + run_id = str(uuid.uuid4()).replace("-", "") + try: + await asyncio.wait_for(ai_seo_job(browser, platform_ids, time_range, job_id, type_name, run_id), timeout) + except asyncio.TimeoutError: + spider = spider_pool.get(run_id, None) + if spider: + await spider._close() + logger.error(f"任务超时: 平台: {spider.platform_id}") + spider_pool.pop(run_id, None) + await AiSeoApis.update_task_status(spider.task_id, 4) + logger.info(f"回滚任务状态: id: {spider.task_id}") + +async def heartbeat(browser: Browser): + load_count = len(browser.contexts) + result = await AiSeoApis.heartbeat(config.DC_ID, load_count) + logger.success(f"心跳: 机器id: {config.DC_ID} 负载量: {load_count} 发送时间: {result.get('send_time', '')}") + +def calc_task_date(time_range): + + # 解析时间 + start_time = datetime.strptime(time_range['start_time'], "%H:%M").time() + end_time = datetime.strptime(time_range['end_time'], "%H:%M").time() + + # 获取带时区的当前时间 + now = datetime.now() + current_time = now.time() + + # 判断逻辑 + if end_time < start_time: + # 跨天时间段 + if current_time >= start_time or current_time <= end_time: + # 如果当前时间在次日结束时间前,开始日期是昨天 + start_date = (now - timedelta(days=1)).date() if current_time <= end_time else now.date() + return True, start_date.strftime("%Y-%m-%d") + else: + # 非跨天时间段 + if start_time <= current_time <= end_time: + return True, now.date().strftime("%Y-%m-%d") + + return False, None + +async def main(): + # 初始化浏览器实例 + playwright, browser = await init_browser() + logger.info('初始化浏览器成功') + if config.AI_SEO_JOB_ENABLE: + # 启动一般平台aiseo任务 + scheduler.add_job(ai_seo_job_with_timeout, 'interval', + id='ai_seo_job', seconds=config.AI_SEO_JOB_INTERVAL, max_instances=config.AI_SEO_JOB_MAX_INSTANCES, coalesce=False, + args=[browser, config.AI_SEO_JOB_PLATFORM_IDS, config.AI_SEO_JOB_RANGE, 'ai_seo_job', '一般AI平台']) + logger.success('启动一般AI平台任务成功') + if config.DEEPSEEK_JOB_ENABLE: + # 启动deepseek-aiseo任务 + scheduler.add_job(ai_seo_job_with_timeout, 'interval', + id='deepseek_ai_seo_job', seconds=config.DEEPSEEK_JOB_INTERVAL, + max_instances=config.DEEPSEEK_JOB_MAX_INSTANCES, coalesce=False, + args=[browser, config.DEEPSEEK_JOB_PLATFORM_IDS, config.DEEPSEEK_SEO_JOB_RANGE, + 'deepseek_ai_seo_job', 'DeepSeek']) + logger.success('启动deepseek任务成功') + # 启动心跳任务 + # scheduler.add_job(heartbeat, 'interval', id='heartbeat', seconds=30,args=[browser]) + # logger.info('启动心跳任务成功') + scheduler.start() + await asyncio.Future() # 保持事件循环运行 + + +if __name__ == '__main__': + asyncio.run(main()) # 启动事件循环 + diff --git a/run_deepseek.py b/run_deepseek.py new file mode 100644 index 0000000..185ced6 --- /dev/null +++ b/run_deepseek.py @@ -0,0 +1,119 @@ +# coding=utf-8 + +import asyncio +import json +import os +from dataclasses import asdict +from datetime import datetime + +from playwright.async_api import async_playwright + +import config +from domain.ai_seo import AiAnswer +from spiders.ai_seo import * +from utils.logger_utils import create_logger + + +logger = create_logger("app") + + +async def init_browser() -> tuple: + """ + 初始化浏览器实例 + :return: + """ + playwright = await async_playwright().start() + browser = await playwright.chromium.launch(headless=config.BROWSER_HANDLESS, + chromium_sandbox=config.BROWSER_ENABLE_SANDBOX, + ignore_default_args=config.BROWSER_IGNORE_DEFAULT_ARGS, + channel="chrome", + args=config.BROWSER_ARGS) + content = await browser.new_context() + return playwright, browser + + +def save_local(ai_answer: AiAnswer): + now = datetime.now().strftime("%Y-%m-%d") + base_path = f'./data/{ai_answer.platform_name}/{now}' + + if not os.path.exists(base_path): + os.makedirs(base_path) + + json_file_path = f'{base_path}/{ai_answer.prompt}.json' + _dict = asdict(ai_answer) + json_str = json.dumps(_dict, indent=4, ensure_ascii=False) + with open(json_file_path, 'w', encoding='utf-8') as f: + f.write(json_str) + logger.info(f"[{ai_answer.platform_name}]{ai_answer.prompt} 保存成功: {base_path}") + + +async def main(): + playwright, browser = await init_browser() + ai_answer = await KimiSpider(browser, '2025前十的电动自行车推荐', '美的').run() + if ai_answer: + save_local(ai_answer) + + +async def test(): + prompts = [ + # '行业咨询公司排行榜', + # # '咨询公司排行榜', + # '中国有哪些知名的行业咨询公司', + # # '请推荐中国十大行业咨询公司', + # '中国行业咨询机构中,哪些是最具影响力的', + # '行业顾问排行榜上,哪些公司名列前茅', + # # '在行业咨询领域,哪些公司被誉为行业领军者', + # '我想了解中国行业咨询公司的排名,有吗', + # '请给我一份中国行业顾问公司的权威榜单', + # # '中国有哪些行业咨询公司备受业界认可', + # '能否介绍一下中国行业咨询领域的佼佼者', + # '中国行业咨询公司的排名情况如何', + # # '中国领先的行业顾问公司有哪些', + # '中国行业顾问排行榜上的公司都是哪些', + # # '有没有一份关于中国行业咨询机构的综合排名', + # '十大行业研究机构排名', + # '行业研究机构推荐', + # # '中国权威的行业研究机构有哪些', + # '能否列出一些中国顶级的行业研究机构', + '哪些行业研究机构在中国市场上最具竞争力', + # '行业研究机构中,哪些在业界享有盛誉', + '我想找一家权威的行业研究机构,有推荐吗', + # '请列举一些在行业研究方面有着深厚底蕴的中国公司', + '我想了解中国行业研究领域的权威机构,能介绍一下吗?', + # '高端卫浴品牌', + '数智卫浴品牌', + # '科技卫浴品牌', + '智能马桶品牌', + '智能淋浴器推荐', + # '小孩湿疹用什么药膏', + # '皮肤湿疹用什么药膏', + # '特应性皮炎用什么药膏最有效', + # '湿疹药膏排行榜', + # '皮炎性湿疹治疗药膏', + ] + retry_prompts = [] + playwright, browser = await init_browser() + index = 1 + for prompt in prompts: + logger.info(f"[{index}/{len(prompts)}] {prompt}") + ai_answer = await DeepseekSpider(browser, prompt, '头豹,沙利文').run() + if ai_answer and ai_answer.run_status: + save_local(ai_answer) + if not ai_answer.run_status: + retry_prompts.append(prompt) + logger.info(f"[{len(prompts)}] {prompt} 采集失败") + index = index + 1 + await asyncio.sleep(300) + + for prompt in retry_prompts: + logger.info(f"重试[{index}/{len(prompts)}] {prompt}") + ai_answer = await DeepseekSpider(browser, prompt, '头豹,沙利文').run() + if ai_answer and ai_answer.run_status: + save_local(ai_answer) + if not ai_answer.run_status: + logger.info(f"[{len(prompts)}] {prompt} 采集失败") + index = index + 1 + await asyncio.sleep(300) + +if __name__ == '__main__': + asyncio.get_event_loop().run_until_complete(test()) diff --git a/spiders/__init__.py b/spiders/__init__.py new file mode 100644 index 0000000..9bad579 --- /dev/null +++ b/spiders/__init__.py @@ -0,0 +1 @@ +# coding=utf-8 diff --git a/spiders/ai_seo/__init__.py b/spiders/ai_seo/__init__.py new file mode 100644 index 0000000..3b8e750 --- /dev/null +++ b/spiders/ai_seo/__init__.py @@ -0,0 +1,9 @@ +# coding=utf-8 +from .kimi import KimiSpider +from .deepseek import DeepseekSpider +from .nanometer import NanometerSpider +from .yiyan import YiYanSpider +from .yuanbao import YuanBaoSpider +from .tongyi import TongyiSpider +from .doubao import DouBaoSpider +from .metaso import MetasoSpider \ No newline at end of file diff --git a/spiders/ai_seo/deepseek.py b/spiders/ai_seo/deepseek.py new file mode 100644 index 0000000..f8aae2e --- /dev/null +++ b/spiders/ai_seo/deepseek.py @@ -0,0 +1,189 @@ +# coding=utf-8 +import asyncio +import json +import re +from functools import partial, wraps +from json import JSONDecodeError +from glom import glom +from playwright.async_api import Browser + +from abs_spider import AbstractAiSeoSpider +from domain.ai_seo import AiAnswer, AiSearchResult +from utils import create_logger, css_to_dict +from utils.image_utils import crop_image_left + +logger = create_logger(__name__) + +class DeepseekSpider(AbstractAiSeoSpider): + + def __init__(self, browser: Browser, prompt: str, keyword: str): + super().__init__(browser, prompt, keyword) + self.__listen_response = self.handle_listen_response_error(self.__listen_response) + + def get_home_url(self) -> str: + return 'https://chat.deepseek.com/' + + def get_platform_id(self) -> int: + return 1 + + def get_platform_name(self) -> str: + return 'DeepSeek' + + async def _do_spider(self) -> AiAnswer: + self._init_data() + self.search_result_count = 0 + await self.browser_page.goto(self.get_home_url(), timeout=600000) + await asyncio.sleep(3) + # 开启联网搜索 + search_btn = self.browser_page.locator("span:text('联网搜索')").locator('..') + if await search_btn.is_visible(): + await search_btn.click() + if self.think: + # 开启深度思考 + think_btn = self.browser_page.locator("span:text('深度思考 (R1)')").locator('..') + if await think_btn.is_visible(): + styles = css_to_dict(await think_btn.get_attribute('style')) + if styles.get('--ds-button-color') == '#fff': + await think_btn.click() + await asyncio.sleep(1) + chat_input_element = self.browser_page.locator("//textarea[@id='chat-input']") + await chat_input_element.click() + # 输入提问词 + await self.browser_page.keyboard.type(self.prompt) + await asyncio.sleep(1) + await self.browser_page.keyboard.press('Enter') + # 监听请求 + self.browser_page.on('response', partial(self.__listen_response)) + await self.completed_event.wait() + # 报错检查 + if self.fail_status: + raise self.fail_exception + # 打开搜索栏 + search_btn_text = f'已搜索到 {self.search_result_count} 个网页' + search_btn = self.browser_page.locator(f"div:text('{search_btn_text}')") + # search_btn = self.browser_page.locator('div:has-text("搜索到")') + if await search_btn.count() > 0: + await search_btn.click() + await asyncio.sleep(2) + if self.think: + # 思考元素 + think_element = self.browser_page.locator("text=已深度思考(") + think_element_count = await think_element.count() + if think_element_count > 0: + await think_element.nth(-1).click() + await asyncio.sleep(2) + # 获取回答元素 + answer = self.browser_page.locator("//div[@class='ds-markdown ds-markdown--block']").nth(-1) + box = await answer.bounding_box() + # 设置视口大小 + await self.browser_page.set_viewport_size({ + 'width': 1920, + 'height': int(box['height']) + 500 + }) + # 截图 + screenshot_path = self._get_screenshot_path() + await self.browser_page.screenshot(path=screenshot_path) + # 切割图片 + crop_image_left(screenshot_path, 250) + self.ai_answer.screenshot_file = screenshot_path + return self.ai_answer + + def handle_listen_response_error(self, func): + """ + 装饰器 用于处理请求回调中的异常 + :param func: + :return: + """ + @wraps(func) + async def wrapper(*args, **kwargs): + try: + return await func(*args, **kwargs) + except Exception as e: + logger.error(f"DeepSeek响应异常: {e}", exc_info=True) + # 标记失败状态 记录异常 + self.fail_status = True + self.fail_exception = e + self.completed_event.set() + return wrapper + + async def __listen_response(self, response): + if '/api/v0/chat/completion' not in response.url: + return + # 读取流式数据 + response_text = '' + search_result_lists = list() + start_content = False + stream = await response.body() + body = stream.decode('utf-8') + datas = body.split("\n\n") + for data_str in datas: + if not data_str: + continue + data_str = data_str.replace('data: ', '') + try: + data = json.loads(data_str) + if glom(data, 'v.0.v', default='') == 'TIMEOUT': + self.fail_status = True + logger.error("DeepSeek服务器繁忙") + except JSONDecodeError as e: + continue + # 获取ai搜索结果 + if data.get('p', '') == 'response/search_results' or isinstance(data.get('v', ''), list): + logger.debug(f"获取到联网搜索结果") + search_result_list = data.get('v', []) + # 保存搜索结果 + ai_search_result_list = [] + + for search_result in search_result_list: + url = search_result.get('url', '') + title = search_result.get('title', '') + body = search_result.get('snippet', '') + publish_time = search_result.get('published_at', '') + host_name = search_result.get('site_name', '未知') + ai_result = AiSearchResult(url=url, title=title, body=body, publish_time=publish_time, host_name=host_name) + if ai_result.title and ai_result.url: + ai_search_result_list.append(ai_result) + logger.debug(f"ai参考资料: [{host_name}]{title}({url})") + if ai_search_result_list: + self.ai_answer.search_result = ai_search_result_list + self.search_result_count = len(self.ai_answer.search_result) + continue + # 是否开始返回回复数据 + if data.get('p', '') == 'response/content': + start_content = True + if start_content: + # 获取ai回复 + value = data.get('v', None) + if isinstance(value, dict): + continue + if value is None: + target = 'choices.0.delta.content' + value = glom(data, target, default="") + response_text = response_text + str(value) + #匹配citation:中的数字 + citation = list() + citations = re.findall(r'citation:(\d+)', response_text) + if citations: + citation = list(set(citations)) + # 保存搜索结果 + ai_search_result_list = [] + for index,search_result in enumerate(search_result_lists): + url = search_result.get('url', '') + title = search_result.get('title', '') + body = search_result.get('snippet', '') + publish_time = search_result.get('published_at', '') + host_name = search_result.get('site_name', '未知') + if str(index+1) in citation: + is_referenced = "1" + else: + is_referenced = "0" + ai_result = AiSearchResult(url=url, title=title, body=body, publish_time=publish_time, host_name=host_name, is_referenced=is_referenced) + if ai_result.title and ai_result.url: + ai_search_result_list.append(ai_result) + logger.debug(f"ai参考资料: [{host_name}]{title}({url})") + if ai_search_result_list: + self.ai_answer.search_result = ai_search_result_list + self.search_result_count = len(self.ai_answer.search_result) + logger.debug(response_text) + self.ai_answer.answer = response_text + self.completed_event.set() diff --git a/spiders/ai_seo/doubao.py b/spiders/ai_seo/doubao.py new file mode 100644 index 0000000..9626071 --- /dev/null +++ b/spiders/ai_seo/doubao.py @@ -0,0 +1,164 @@ +# -*- coding: utf-8 -*- +import asyncio +from functools import partial, wraps +from json import JSONDecodeError + +import ftfy +from glom import glom +from playwright.async_api import Browser + +from abs_spider import AbstractAiSeoSpider +from domain.ai_seo import AiAnswer, AiSearchResult +from utils import create_logger, parse_nested_json + +logger = create_logger(__name__) + + +class DouBaoSpider(AbstractAiSeoSpider): + + def __init__(self, browser: Browser, prompt: str, keyword: str, think: bool = False): + super().__init__(browser, prompt, keyword, think) + self.__listen_response = self.handle_listen_response_error(self.__listen_response) + + def get_home_url(self) -> str: + return 'https://www.doubao.com/chat' + + async def _do_spider(self) -> AiAnswer: + # 初始化信息 + self._init_data() + await self.browser_page.goto(self.get_home_url(), timeout=600000) + await asyncio.sleep(3) + if self.think: + think_btn = self.browser_page.locator("//button[@title='深度思考']") + if await think_btn.is_visible(): + clazz = (await think_btn.get_attribute('class')).split(' ') + # 找出点击的class名称 + target_class = [c for c in clazz if c.startswith("active-")] + if not target_class: + await think_btn.click() + await asyncio.sleep(2) + # 开始操作 + chat_input_element = self.browser_page.locator("//textarea[@data-testid='chat_input_input']") + # 输入提问词 + await chat_input_element.fill(self.prompt) + await self.browser_page.keyboard.press('Enter') + # 监听请求 + self.browser_page.on('response', partial(self.__listen_response)) + await asyncio.sleep(2) + await self.completed_event.wait() + + # 报错检查 + if self.fail_status: + raise self.fail_exception + + # 关闭侧边栏 + sider_bar_element = self.browser_page.locator("//button[@data-testid='siderbar_close_btn']") + if await sider_bar_element.is_visible(): + await sider_bar_element.click() + + # 资料弹出框 + search_result_popup_element = self.browser_page.locator("//div[contains(@class, 'search-item-transition-')]") + # 资料按钮 + search_result_btn_list = self.browser_page.locator("//div[contains(@class, 'entry-btn-')]") + if await search_result_btn_list.count() > 0 and not await search_result_popup_element.count() > 0: + await search_result_btn_list.nth(-1).click() + await asyncio.sleep(2) + # 搜索结果元素 + search_result_element_list = self.browser_page.locator("//a[contains(@class, 'search-')]") + ai_search_result_list = [] + if await search_result_element_list.count() > 0: + for index,search_result_element in enumerate(await search_result_element_list.all()): + url = await search_result_element.get_attribute('href') + title = '' + desc = '' + host_name = '' + title_element = search_result_element.locator("xpath=.//div[contains(@class, 'search-item-title-')]") + desc_element = search_result_element.locator("xpath=.//div[contains(@class, 'search-item-summary-')]") + host_name_element = search_result_element.locator("xpath=.//span[contains(@class, 'footer-title-')]") + # 获取标题 + if await title_element.is_visible(): + title = await title_element.inner_text() + # 获取描述 + if await desc_element.is_visible(): + desc = await desc_element.inner_text() + # 获取来源 + if await host_name_element.is_visible(): + host_name = await host_name_element.inner_text() + if index+1 in self.index_data: + is_referenced = "1" + else: + is_referenced = "0" + ai_search_result_list.append(AiSearchResult( + title=title, + url=url, + host_name=host_name, + body=desc, + is_referenced=is_referenced + )) + logger.debug(f'搜索结果: [{host_name}]{title}({url})') + self.ai_answer.search_result = ai_search_result_list + # 获取回答元素 + answer_element = self.browser_page.locator("//div[@data-testid='receive_message']").nth(-1) + box = await answer_element.bounding_box() + logger.debug(f'answer_element: {box}') + view_port_height = box['height'] + 500 + # 调整视口大小 + await self.browser_page.set_viewport_size({ + 'width': 1920, + 'height': int(view_port_height) + }) + # 截图 + screenshot_path = self._get_screenshot_path() + await self.browser_page.screenshot(path=screenshot_path, full_page=True) + self.ai_answer.screenshot_file = screenshot_path + return self.ai_answer + + def handle_listen_response_error(self, func): + """ + 装饰器 用于处理请求回调中的异常 + :param func: + :return: + """ + + @wraps(func) + async def wrapper(*args, **kwargs): + try: + return await func(*args, **kwargs) + except Exception as e: + logger.error(f"{self.get_platform_name()}响应异常: {e}", exc_info=True) + # 标记失败状态 记录异常 + self.fail_status = True + self.fail_exception = e + self.completed_event.set() + + return wrapper + + async def __listen_response(self, response): + # 读取流式数据 + if '/samantha/chat/completion' in response.url: + answer = '' + datas = [] + response_text = ftfy.fix_text(await response.text()) + lines = response_text.split("\n\n") + for line in lines: + if line.startswith('data: '): + line = line[6:] + try: + data = parse_nested_json(line) + datas.append(data) + event_data = data.get('event_data', {}) + target_key = 'message.content.text' + text = glom(event_data, target_key, default=None) + if not text is None: + answer = answer + str(text) + except JSONDecodeError: + continue + logger.debug(f"ai回复: {answer}") + self.ai_answer.answer = answer + self.completed_event.set() + + def get_platform_id(self) -> int: + return 5 + + def get_platform_name(self) -> str: + return 'DouBao' diff --git a/spiders/ai_seo/kimi.py b/spiders/ai_seo/kimi.py new file mode 100644 index 0000000..1131120 --- /dev/null +++ b/spiders/ai_seo/kimi.py @@ -0,0 +1,148 @@ +# coding=utf-8 +import asyncio +from functools import partial, wraps + +from playwright.async_api import Browser + +from abs_spider import AbstractAiSeoSpider +from domain.ai_seo import AiAnswer, AiSearchResult +from utils import create_logger +from glom import glom, Coalesce + +logger = create_logger(__name__) + + +class KimiSpider(AbstractAiSeoSpider): + + def __init__(self, browser: Browser, prompt: str, keyword: str, think: bool = False): + super().__init__(browser, prompt, keyword, think) + self.__listen_response = self.handle_listen_response_error(self.__listen_response) + + def get_home_url(self) -> str: + return 'https://www.kimi.ai' + + def get_platform_id(self) -> int: + return 4 + + def get_platform_name(self) -> str: + return 'Kimi' + + async def _do_spider(self) -> AiAnswer: + self.completed_event = asyncio.Event() + await self.browser_page.goto('https://www.kimi.ai', timeout=600000) + self.ai_answer = AiAnswer(self.get_platform_id(), self.get_platform_name(), self.prompt, self.keyword) + await asyncio.sleep(3) + if self.think: + think_btn = self.browser_page.locator("span:text('长思考 (k1.5)')").locator('..') + if await think_btn.is_visible(): + clazz = (await think_btn.get_attribute('class')).split(' ') + if 'open' not in clazz: + await think_btn.click() + await asyncio.sleep(2) + chat_input_element = self.browser_page.locator("//div[@class='chat-input']") + await chat_input_element.click() + # 输入提问词 + await self.browser_page.keyboard.type(self.prompt) + await asyncio.sleep(2) + await self.browser_page.keyboard.press('Enter') + # 监听请求 + self.browser_page.on('response', partial(self.__listen_response)) + await self.completed_event.wait() + await asyncio.sleep(2) + + # 报错检查 + if self.fail_status: + raise self.fail_exception + + # 关闭侧边栏 + sidebar_element = self.browser_page.locator("//div[@class='expand-btn']") + if await sidebar_element.is_visible(): + await sidebar_element.click() + # 获取回答元素 + answer_element = self.browser_page.locator("//div[@class='segment-container']").nth(-1) + box = await answer_element.bounding_box() + logger.debug(f'answer_element: {box}') + view_port_height = box['height'] + 500 + # 调整视口大小 + await self.browser_page.set_viewport_size({ + 'width': 1920, + 'height': int(view_port_height) + }) + # 打开搜索结果 + search_list_content_element = self.browser_page.locator("//div[contains(@class, 'side-console-container')]") + search_list_element = self.browser_page.locator("//div[@class='search-plus']") + if await search_list_element.is_visible() and not await search_list_content_element.is_visible(): + await search_list_element.click() + # 截图 + screenshot_path = self._get_screenshot_path() + self.ai_answer.screenshot_file = screenshot_path + await self.browser_page.screenshot(path=screenshot_path) + return self.ai_answer + + async def __listen_response(self, response): + if '/segment/scroll' in response.url: + json_data = await response.json() + if json_data['items']: + logger.debug(json_data) + detail = json_data['items'][-1] + content = detail['content'] + if self.think: + self.ai_answer.search_result = self.get_search_list_enable_think(detail) + else: + self.ai_answer.search_result = self.get_search_list_disable_think(detail) + self.ai_answer.answer = content + logger.debug(f"ai回复: {content}") + self.completed_event.set() + + def handle_listen_response_error(self, func): + """ + 装饰器 用于处理请求回调中的异常 + :param func: + :return: + """ + + @wraps(func) + async def wrapper(*args, **kwargs): + try: + return await func(*args, **kwargs) + except Exception as e: + logger.error(f"{self.get_platform_name()}响应异常: {e}", exc_info=True) + # 标记失败状态 记录异常 + self.fail_status = True + self.fail_exception = e + self.completed_event.set() + + return wrapper + + def get_search_list_disable_think(self, detail): + """ + 未开启深度思考时 获取搜索结果 + :param detail: + :return: + """ + answer_search_list = [] + search_result_list = detail.get('search_plus', []) + for search_result in search_result_list: + event = search_result.get('event', '') + msg = search_result.get('msg', {}) + msg_type = msg.get('type', '') + if event == 'search_plus' and msg_type == 'get_res': + answer_search_list.append( + AiSearchResult(msg['title'], msg['url'], msg['site_name'], msg['snippet'], msg['date'])) + logger.debug(f"ai参考资料: {msg['title']}({msg['url']})") + return answer_search_list + + def get_search_list_enable_think(self, detail): + """ + 开启深度思考时 获取搜索结果 + :param detail: + :return: + """ + answer_search_list = [] + keys = 'contents.zones.0.sections.0.k1.search_results' + search_result_list = glom(detail, keys, default=[]) + for search_result in search_result_list: + answer_search_list.append( + AiSearchResult(search_result['title'], search_result['url'], search_result['site_name'], search_result['snippet'], search_result['date'])) + logger.debug(f"ai参考资料: {search_result['title']}({search_result['url']})") + return answer_search_list diff --git a/spiders/ai_seo/metaso.py b/spiders/ai_seo/metaso.py new file mode 100644 index 0000000..9f5f4d8 --- /dev/null +++ b/spiders/ai_seo/metaso.py @@ -0,0 +1,196 @@ +# -*- coding: utf-8 -*- +import asyncio +import json +import re +from functools import partial, wraps +from json import JSONDecodeError + +import ftfy +import pyperclip +from playwright.async_api import Browser, async_playwright + +import config +from abs_spider import AbstractAiSeoSpider +from domain.ai_seo import AiAnswer, AiSearchResult +from utils import create_logger + +logger = create_logger(__name__) + + +class MetasoSpider(AbstractAiSeoSpider): + + def __init__(self, browser: Browser, prompt: str, keyword: str, load_session: bool = True): + super().__init__(browser, prompt, keyword, load_session) + self.__listen_response = self.handle_listen_response_error(self.__listen_response) + + def get_home_url(self) -> str: + return 'https://metaso.cn/' + + async def _do_spider(self) -> AiAnswer: + # 初始化信息 + self._init_data() + await self.browser_page.goto(self.get_home_url(), timeout=600000) + await asyncio.sleep(2) + # 开始操作 + chat_input_element = self.browser_page.locator("//textarea[contains(@class, 'search-consult-textarea')]") + # 输入提问词 + await chat_input_element.fill(self.prompt) + await self.browser_page.keyboard.press('Enter') + # 监听请求 + await asyncio.sleep(2) + # self.browser_page.on('response', partial(self.__listen_response)) + await self.browser_page.reload() + # await self.completed_event.wait() + # 等待指定元素 + copy_button = await self.browser_page.wait_for_selector("//button[@id='generateInteractiveReportButton']/preceding-sibling::div[1]/button", timeout=600000) + # 点击复制按钮 + await copy_button.click() + # 读取剪贴板 + self.ai_answer.answer = pyperclip.paste() + logger.debug(f'ai回复内容: {self.ai_answer}') + # 获取来源数据 + try: + await self.browser_page.wait_for_selector("//div[contains(@class, 'meta-ordered-list_list-item')]/span", timeout=60000) + search_items = self.browser_page.locator("//div[contains(@class, 'meta-ordered-list_list-item')]/span") + search_item_count = await search_items.count() + logger.debug(f'来源数据: {search_item_count}') + await asyncio.sleep(5) + search_results = [] + for i in range(search_item_count): + search_result = AiSearchResult() + search_item = search_items.nth(i) + # 抽取链接和标题 + a = search_item.locator("xpath=./a") + # 抽取时间 + publish_date_element = search_item.locator("xpath=./span") + if await a.is_visible(): + search_result.title = await a.text_content() + search_result.url = await a.get_attribute('href') + if await publish_date_element.count() > 0: + publish_date_element = search_item.locator("xpath=./span").nth(-1) + publish_str = await publish_date_element.text_content() + search_result.publish_time = publish_str.replace('[', '').replace(']', '') + search_results.append(search_result) + self.ai_answer.search_result = search_results + except TimeoutError: + logger.error('没有搜索结果') + # 报错检查 + if self.fail_status: + raise self.fail_exception + # 获取回答元素 + answer_element = self.browser_page.locator("//div[contains(@class, 'Search_search-result-container')]") + box = await answer_element.bounding_box() + logger.debug(f'answer_element: {box}') + view_port_height = box['height'] + 300 + # 调整视口大小 + await self.browser_page.set_viewport_size({ + 'width': 1920, + 'height': int(view_port_height) + }) + # 截图 + screenshot_path = self._get_screenshot_path() + await self.browser_page.screenshot(path=screenshot_path) + self.ai_answer.screenshot_file = screenshot_path + return self.ai_answer + + def get_platform_id(self) -> int: + return 13 + + def get_platform_name(self) -> str: + return 'Metaso' + + async def __listen_response(self, response): + url = response.url + if 'searchV2' in url: + answer = '' + results = [] + search_results = list() + response_text = await response.text() + event_lines = response_text.split('\n\n') + self.completed_event.set() + for line in event_lines: + if line.startswith('data:'): + line = line[5:] + try: + event_json = json.loads(line) + except JSONDecodeError: + continue + # 开始event_json + type = event_json.get('type') + # 获取到搜索结果 + if type == 'set-reference': + search_results = event_json.get('list', []) + # for search_result in search_results: + # result = AiSearchResult(title=search_result.get('title', ''), + # url=search_result.get('url', ''), + # host_name=search_result.get('author', ''), + # body=search_result.get('displaySource'), + # publish_time=search_result.get('publish_time', '')) + # results.append(result) + # self.ai_answer.search_result = results + # 获取到回答内容 + if type == 'append-text': + answer = answer + event_json.get('text', '') + pattern = r'\[(\d+)\]' + index_data = list(set(re.findall(pattern, answer))) + for index,search_result in enumerate(search_results): + if str(index+1) in index_data: + result = AiSearchResult(title=search_result.get('title', ''), + url=search_result.get('url', ''), + host_name=search_result.get('author', ''), + body=search_result.get('displaySource'), + publish_time=search_result.get('publish_time', ''), + is_referenced="1") + else: + result = AiSearchResult(title=search_result.get('title', ''), + url=search_result.get('url', ''), + host_name=search_result.get('author', ''), + body=search_result.get('displaySource'), + publish_time=search_result.get('publish_time', ''), + is_referenced="0") + results.append(result) + self.ai_answer.search_result = results + self.ai_answer.answer = answer + self.completed_event.set() + + def handle_listen_response_error(self, func): + """ + 装饰器 用于处理请求回调中的异常 + :param func: + :return: + """ + + @wraps(func) + async def wrapper(*args, **kwargs): + try: + return await func(*args, **kwargs) + except Exception as e: + logger.error(f"{self.get_platform_name()}响应异常: {e}", exc_info=True) + # 标记失败状态 记录异常 + self.fail_status = True + self.fail_exception = e + self.completed_event.set() + + return wrapper + + + +async def run(): + # playwright = await async_playwright().start() + # browser = await playwright.chromium.launch(headless=False, + # chromium_sandbox=config.BROWSER_ENABLE_SANDBOX, + # ignore_default_args=config.BROWSER_IGNORE_DEFAULT_ARGS, + # channel="chrome", + # args=config.BROWSER_ARGS) + playwright = await async_playwright().start() + browser = await playwright.firefox.launch( + headless=False, + ignore_default_args=config.BROWSER_IGNORE_DEFAULT_ARGS, + args=config.BROWSER_ARGS + ) + spider = MetasoSpider(browser, '2025前端工具库top5', '') + await spider.run() + + +if __name__ == '__main__': + asyncio.get_event_loop().run_until_complete(run()) diff --git a/spiders/ai_seo/nanometer.py b/spiders/ai_seo/nanometer.py new file mode 100644 index 0000000..add339a --- /dev/null +++ b/spiders/ai_seo/nanometer.py @@ -0,0 +1,174 @@ +# coding=utf-8 +import asyncio +import json +import re +from datetime import datetime +from functools import partial, wraps +from json import JSONDecodeError + +from glom import glom +from playwright.async_api import Playwright, Browser, async_playwright + +from abs_spider import AbstractAiSeoSpider +from domain.ai_seo import AiAnswer, AiSearchResult +from utils import create_logger, parse_nested_json + + +logger = create_logger(__name__) + +class NanometerSpider(AbstractAiSeoSpider): + + def __init__(self, browser: Browser, prompt: str, keyword: str): + super().__init__(browser, prompt, keyword) + self.load_session = False + self.__listen_response = self.handle_listen_response_error(self.__listen_response) + + def get_home_url(self) -> str: + return 'https://www.n.cn/' + + async def _do_spider(self) -> AiAnswer: + # 初始化数据 + self._init_data() + # 开始操作 + await self.browser_page.goto(self.get_home_url(), timeout=600000) + chat_input_element = self.browser_page.locator("//textarea[@id='composition-input']") + # 输入提问词 + await chat_input_element.fill(self.prompt) + await self.browser_page.keyboard.press('Enter') + # 监听请求 + self.browser_page.on('response', partial(self.__listen_response)) + await asyncio.sleep(2) + await self.completed_event.wait() + + # 报错检查 + if self.fail_status: + raise self.fail_exception + + # 获取回答元素 + answer_element = self.browser_page.locator("//div[@class='js-article-content']").nth(-1) + box = await answer_element.bounding_box() + logger.debug(f'answer_element: {box}') + view_port_height = box['height'] + 500 + # 调整视口大小 + await self.browser_page.set_viewport_size({ + 'width': 1920, + 'height': int(view_port_height) + }) + # 截图 + screenshot_path = self._get_screenshot_path() + await self.browser_page.screenshot(path=screenshot_path, full_page=True) + self.ai_answer.screenshot_file = screenshot_path + return self.ai_answer + + def __parse_event_data(self, data_str): + # 按照 'id:' 分割文本,去掉第一个空的部分 + parts = data_str.strip().split('id:')[1:] + + # 初始化结果列表 + result = [] + + # 遍历每个部分,提取数据并存储到字典中 + for part in parts: + lines = part.strip().split('\n') + item = {} + for line in lines: + if ':' not in line: + key = 'id' + value = line + else: + key, value = line.split(':', 1) + key = key.strip() + value = value.strip() + if key == 'data': + try: + # 尝试将 data 转换为 JSON 对象 + import json + value = json.loads(value) + except JSONDecodeError: + pass + item[key] = value + result.append(item) + return result + + async def __listen_response(self, response): + if '/api/common/chat/v2' not in response.url: + return + # 读取流式数据 + stream = await response.body() + response_text = stream.decode('utf-8') + datas = self.__parse_event_data(response_text) + answer = '' + search_result_list = list() + # 遍历每行数据 + for data in datas: + event = data.get('event', '') + if event == '200': + answer = answer + str(data.get('data', '')) + elif event == '102': + # json格式的返回 要解析数据 + data = data.get('data', {}) + if isinstance(data, str): + data = parse_nested_json(data) + data_type = data.get('type', '') + if data_type == 'search_result': + search_result_list = glom(data, 'message.list', default=[]) + # # 保存搜索数据 + # ai_search_result_list = [] + # for search_result in search_result_list: + # title = search_result.get('title', '') + # url = search_result.get('url', '') + # body = search_result.get('summary', '') + # host_name = search_result.get('site', '未知') + # publish_time = search_result.get('date', 0) + # ai_search_result_list.append( + # AiSearchResult(title, url, host_name, body, publish_time) + # ) + # logger.debug(f"ai参考资料: [{host_name}]{title}({url})") + # self.ai_answer.search_result = ai_search_result_list + pattern = r'\[(\d+)\]' + index_data = list(set(re.findall(pattern, answer))) + ai_search_result_list = [] + for index,search_result in enumerate(search_result_list): + title = search_result.get('title', '') + url = search_result.get('url', '') + body = search_result.get('summary', '') + host_name = search_result.get('site', '未知') + publish_time = search_result.get('date', 0) + if str(index+1) in index_data: + is_referenced = "1" + else: + is_referenced = "0" + ai_search_result_list.append( + AiSearchResult(title, url, host_name, body, publish_time,is_referenced) + ) + logger.debug(f"ai参考资料: [{host_name}]{title}({url})") + self.ai_answer.search_result = ai_search_result_list + self.ai_answer.answer = answer + logger.debug(f'ai回复: {answer}') + self.completed_event.set() + + def get_platform_id(self) -> int: + return 7 + + def get_platform_name(self) -> str: + return 'Nano' + + def handle_listen_response_error(self, func): + """ + 装饰器 用于处理请求回调中的异常 + :param func: + :return: + """ + + @wraps(func) + async def wrapper(*args, **kwargs): + try: + return await func(*args, **kwargs) + except Exception as e: + logger.error(f"{self.get_platform_name()}响应异常: {e}", exc_info=True) + # 标记失败状态 记录异常 + self.fail_status = True + self.fail_exception = e + self.completed_event.set() + + return wrapper \ No newline at end of file diff --git a/spiders/ai_seo/tongyi.py b/spiders/ai_seo/tongyi.py new file mode 100644 index 0000000..fcd4774 --- /dev/null +++ b/spiders/ai_seo/tongyi.py @@ -0,0 +1,176 @@ +# coding=utf-8 +import asyncio +import re +from functools import partial, wraps +from json import JSONDecodeError + +from glom import glom +from playwright.async_api import Browser + +from abs_spider import AbstractAiSeoSpider +from domain.ai_seo import AiAnswer, AiSearchResult +from utils import create_logger, parse_nested_json +from utils.image_utils import crop_image_left + +logger = create_logger(__name__) + +class TongyiSpider(AbstractAiSeoSpider): + + def __init__(self, browser: Browser, prompt: str, keyword: str, think: bool = False): + super().__init__(browser, prompt, keyword, think) + self.__listen_response = self.handle_listen_response_error(self.__listen_response) + + def get_home_url(self) -> str: + return 'https://tongyi.aliyun.com' + + async def _do_spider(self) -> AiAnswer: + # 初始化信息 + self._init_data() + await self.browser_page.goto(self.get_home_url(), timeout=600000) + if self.think: + search_btn = self.browser_page.locator("div:text('深度思考')") + if await search_btn.is_visible(): + await search_btn.click() + await asyncio.sleep(1) + else: + search_btn = self.browser_page.locator("div:text('联网搜索')") + if await search_btn.is_visible(): + await search_btn.click() + await asyncio.sleep(1) + + # 开始操作 + # chat_input_element = self.browser_page.locator("//textarea[@placeholder='千事不决问通义']") + chat_input_element = self.browser_page.locator("//textarea[contains(@class, 'ant-input')]") + await chat_input_element.click() + # 输入提问词 + await self.browser_page.keyboard.type(self.prompt) + await asyncio.sleep(2) + await self.browser_page.keyboard.press('Enter') + # 监听请求 + self.browser_page.on('response', partial(self.__listen_response)) + await asyncio.sleep(2) + await self.completed_event.wait() + + # 报错检查 + if self.fail_status: + raise self.fail_exception + + # # 获取回答元素 + answer_element = self.browser_page.locator("//div[contains(@class, 'answerItem')]").nth(-1) + box = await answer_element.bounding_box() + logger.debug(f'answer_element: {box}') + view_port_height = box['height'] + 500 + # 调整视口大小 + await self.browser_page.set_viewport_size({ + 'width': 1920, + 'height': int(view_port_height) + }) + # 打开搜索结果 + search_list_element = self.browser_page.locator("//div[contains(@class, 'linkTitle')]").nth(-1) + if await search_list_element.is_visible(): + await search_list_element.click() + await asyncio.sleep(2) + # 关闭侧边栏 + side_console_element = self.browser_page.locator("//span[contains(@class, 'sc-frniUE')]") + if await side_console_element.is_visible(): + await side_console_element.click() + # 截图 + screenshot_path = self._get_screenshot_path() + await self.browser_page.screenshot(path=screenshot_path) + # 切割图片 + crop_image_left(screenshot_path, 340) + + self.ai_answer.screenshot_file = screenshot_path + return self.ai_answer + + async def __listen_response(self, response): + if '/dialog/conversation' not in response.url: + return + # 读取流式数据 + data = {} + stream = await response.body() + response_text = stream.decode('utf-8') + datas = response_text.split("\n") + # 合规数据转成字典 + for data_str in datas: + if not data_str or data_str == 'data: [DONE]': + continue + data_str = data_str.replace('data: ', '') + try: + data = parse_nested_json(data_str) + except JSONDecodeError as e: + continue + logger.debug(f"结果: {data}") + # 获取结果 + contents = data.get('contents', []) + # 保存搜索内容 + ai_search_result_list = [] + search_result_list = list() + for content in contents: + content_type = content.get('contentType', '') + if content_type == 'plugin': + logger.debug(f"获取到联网搜索结果") + if self.think: + search_result_list = glom(content, 'content.pluginResult', default=[]) + else: + search_result_list = glom(content, 'content.pluginResult.-1.search_results', default=[]) + # for search_result in search_result_list: + # url = search_result.get('url', '') + # title = search_result.get('title', '') + # body = search_result.get('body', '') + # host_name = search_result.get('host_name', '未知') + # publish_time = search_result.get('time', 0) + # logger.debug(f"ai参考资料: [{host_name}]{title}({url})") + # ai_search_result_list.append( + # AiSearchResult(title=title, url=url, body=body, host_name=host_name, publish_time=publish_time) + # ) + if content_type == 'text': + logger.debug(f'获取到ai回复结果') + answer = content.get('content', '') + logger.debug(f"ai回复: {answer}") + self.ai_answer.answer = answer + pattern = r'ty-reference]\((\d+)\)' + index_data = list(set(re.findall(pattern, self.ai_answer.answer))) + for index, search_result in enumerate(search_result_list): + url = search_result.get('url', '') + title = search_result.get('title', '') + body = search_result.get('body', '') + host_name = search_result.get('host_name', '未知') + publish_time = search_result.get('time', 0) + if str(index+1) in index_data: + is_referenced = "1" + else: + is_referenced = "0" + logger.debug(f"ai参考资料: [{host_name}]{title}({url})") + ai_search_result_list.append( + AiSearchResult(title=title, url=url, body=body, host_name=host_name, publish_time=publish_time,is_referenced=is_referenced) + ) + if ai_search_result_list: + self.ai_answer.search_result = ai_search_result_list + self.completed_event.set() + + def handle_listen_response_error(self, func): + """ + 装饰器 用于处理请求回调中的异常 + :param func: + :return: + """ + + @wraps(func) + async def wrapper(*args, **kwargs): + try: + return await func(*args, **kwargs) + except Exception as e: + logger.error(f"{self.get_platform_name()}响应异常: {e}", exc_info=True) + # 标记失败状态 记录异常 + self.fail_status = True + self.fail_exception = e + self.completed_event.set() + + return wrapper + + def get_platform_id(self) -> int: + return 2 + + def get_platform_name(self) -> str: + return 'TongYi' \ No newline at end of file diff --git a/spiders/ai_seo/yiyan.py b/spiders/ai_seo/yiyan.py new file mode 100644 index 0000000..a34171c --- /dev/null +++ b/spiders/ai_seo/yiyan.py @@ -0,0 +1,213 @@ +# coding=utf-8 +import asyncio +import json +from functools import partial, wraps + +from glom import glom +from playwright.async_api import async_playwright, Browser + +import config +from abs_spider import AbstractAiSeoSpider +from domain.ai_seo import AiAnswer, AiSearchResult +from utils import create_logger +from utils.ai_seo_api_utils import AiSeoApis +from utils.image_utils import crop_image_left +from utils.session_utils import get_spider_session + +logger = create_logger(__name__) + + +class YiYanSpider(AbstractAiSeoSpider): + + def __init__(self, browser: Browser, prompt: str, keyword: str, think: bool = False): + super().__init__(browser, prompt, keyword, think) + self.__listen_response = self.handle_listen_response_error(self.__listen_response) + + def get_home_url(self) -> str: + return 'https://yiyan.baidu.com/' + + async def _do_spider(self) -> AiAnswer: + # 初始化数据 + self._init_data() + await self.browser_page.goto(self.get_home_url(), timeout=600000) + await asyncio.sleep(2) + # 检查登录状态 + await self.check_login() + if self.think: + think_btn = self.browser_page.locator("span:text('深度思考(X1 Turbo)')").locator('..') + clazz = (await think_btn.get_attribute('class')).split(' ') + if await think_btn.is_visible(): + if len(clazz) == 1: + await think_btn.click() + await asyncio.sleep(2) + # 开始操作 + chat_input_element = self.browser_page.locator("//div[@class='yc-editor']") + await chat_input_element.click() + await asyncio.sleep(2) + # 输入提问词 + await self.browser_page.keyboard.insert_text(self.prompt) + await asyncio.sleep(2) + await self.browser_page.keyboard.press('Enter') + # 监听请求 + self.browser_page.on('response', partial(self.__listen_response)) + if self.think: + self.browser_page.on('response', partial(self.__listen_response_thinking)) + await asyncio.sleep(2) + try: + await self.browser_page.wait_for_selector("//div[@data-auto-test='anew_response']", state='attached', timeout=600000) + logger.debug('ai回答完毕') + except TimeoutError as e: + logger.error('ai回答超时') + + # 报错检查 + if self.fail_status: + raise self.fail_exception + + # 获取回答元素 + answer_element = self.browser_page.locator("//div[contains(@class, 'dialog-card-wrapper')]").nth(-1) + box = await answer_element.bounding_box() + logger.debug(f'answer_element: {box}') + view_port_height = box['height'] + 1000 + # 调整视口大小 + await self.browser_page.set_viewport_size({ + 'width': 1920, + 'height': int(view_port_height) + }) + # 打开搜索结果 + open_search_btn_element = self.browser_page.locator("div:text('条网页信息源')") + if await open_search_btn_element.count() > 0: + await open_search_btn_element.click() + # 截图 + screenshot_path = self._get_screenshot_path() + await self.browser_page.screenshot(path=screenshot_path) + # 切割图片 + crop_image_left(screenshot_path, 260) + + self.ai_answer.screenshot_file = screenshot_path + return self.ai_answer + + async def __listen_response(self, response): + if '/chat/history' not in response.url: + return + answer = '' + chat = {} + json_data = await response.json() + chats = list(dict.values(glom(json_data, 'data.chats', default={}))) + # 选择目标chat + for _chat in chats: + if not _chat.get('role', '') == 'robot': + continue + content = glom(_chat, 'message.0.content', default='') + if not content: + continue + chat = _chat + break + if not chat: + return + answer = glom(chat, 'message.0.content', default="") + # 搜索结果 + if not self.think: + search_result_list = glom(chat, 'searchCitations.list', default=[]) + # 保存搜索结果 + ai_search_result_list = [] + for search_result in search_result_list: + url = search_result.get('url', '') + title = search_result.get('title', '') + desc = search_result.get('wild_abstract', '') + host_name = search_result.get('site', '') + date = search_result.get('date', '') + logger.debug(f"ai参考资料: [{host_name}][{date}]{title}({url})") + ai_search_result_list.append(AiSearchResult( + url=url, + title=title, + host_name=host_name, + body=desc, + publish_time=date + )) + self.ai_answer.search_result = ai_search_result_list + self.ai_answer.answer = answer + + async def __listen_response_thinking(self, response): + if '/chat/conversation/v2' not in response.url: + return + # 读取流式数据 + data = {} + search_list = [] + stream = await response.body() + response_text = stream.decode('utf-8') + response_lines = response_text.split("\n\n") + for line in response_lines: + sub_lines = line.split("\n") + for sub_line in sub_lines: + if sub_line.startswith('data:'): + json_data = json.loads(sub_line[5:]) + history_need = json_data.get('historyNeed', None) + search_list = json_data.get('contents', []) + if history_need == 1 and search_list: + break + if search_list: + break + ai_search_result_list = [] + for search_result in search_list: + url = search_result.get('url', '') + title = search_result.get('title', '') + desc = search_result.get('siteAbstract', '') + host_name = search_result.get('name', '') + date = search_result.get('publishTime', '') + logger.debug(f"ai参考资料: [{host_name}][{date}]{title}({url})") + ai_search_result_list.append(AiSearchResult( + url=url, + title=title, + host_name=host_name, + body=desc, + publish_time=date + )) + self.ai_answer.search_result = ai_search_result_list + + + async def check_login(self): + # 找登录后才会出现的侧边栏 + try: + await self.browser_page.locator("//div[@id='eb_sidebar']").wait_for(state='attached', timeout=20000) + except Exception: + # 更新session状态 + await AiSeoApis.update_spider_session(self.session_info['id'], 2) + raise Exception(f"{self.get_platform_name()}登录失败 session_id: {self.session_info['id']}") + + def get_platform_id(self) -> int: + return 6 + + def get_platform_name(self) -> str: + return 'YiYan' + + def handle_listen_response_error(self, func): + """ + 装饰器 用于处理请求回调中的异常 + :param func: + :return: + """ + + @wraps(func) + async def wrapper(*args, **kwargs): + try: + return await func(*args, **kwargs) + except Exception as e: + logger.error(f"{self.get_platform_name()}响应异常: {e}", exc_info=True) + # 标记失败状态 记录异常 + self.fail_status = True + self.fail_exception = e + self.completed_event.set() + + return wrapper + +async def run(): + playwright = await async_playwright().start() + browser = await playwright.chromium.launch(headless=config.BROWSER_HANDLESS, + chromium_sandbox=config.BROWSER_ENABLE_SANDBOX, + ignore_default_args=config.BROWSER_IGNORE_DEFAULT_ARGS, + channel="chrome", + args=config.BROWSER_ARGS) + spider = YiYanSpider(browser, '你好', '') + await spider.run() +if __name__ == '__main__': + asyncio.run(run()) \ No newline at end of file diff --git a/spiders/ai_seo/yuanbao.py b/spiders/ai_seo/yuanbao.py new file mode 100644 index 0000000..cef0ec9 --- /dev/null +++ b/spiders/ai_seo/yuanbao.py @@ -0,0 +1,174 @@ +# coding=utf-8 +import asyncio +import re +from datetime import datetime +from functools import partial, wraps + +from playwright.async_api import Playwright, Browser, async_playwright + +from abs_spider import AbstractAiSeoSpider +from domain.ai_seo import AiAnswer, AiSearchResult +from utils import create_logger +from glom import glom, Coalesce + +from utils.image_utils import crop_image_left + +logger = create_logger(__name__) + +class YuanBaoSpider(AbstractAiSeoSpider): + + def __init__(self, browser: Browser, prompt: str, keyword: str, think: bool = False): + super().__init__(browser, prompt, keyword, think) + self.__listen_response = self.handle_listen_response_error(self.__listen_response) + + def get_home_url(self) -> str: + return 'https://yuanbao.tencent.com/' + + async def _do_spider(self) -> AiAnswer: + # 初始化数据 + self._init_data() + self.is_get_detail = False + await self.browser_page.goto(self.get_home_url(), timeout=600000) + await asyncio.sleep(2) + # 开启深度思考 + if self.think: + think_button = self.browser_page.locator("//button[@dt-button-id='deep_think']") + if await think_button.is_visible(): + model_id = await think_button.get_attribute('dt-model-id') + if not model_id == 'deep_seek': + await think_button.click() + await asyncio.sleep(2) + # 开启联网搜索 + search_button = self.browser_page.locator("//button[@dt-button-id='online_search']") + if await search_button.is_visible(): + class_str = await search_button.get_attribute('class') + clazz = class_str.split(' ') + if 'checked' not in clazz: + logger.debug('未开启联网搜索') + await search_button.click() + await asyncio.sleep(1) + + # 开始操作 + chat_input_element = self.browser_page.locator("//div[contains(@class, 'chat-input-editor')]") + await chat_input_element.click() + # 输入提问词 + await self.browser_page.keyboard.type(self.prompt) + await asyncio.sleep(2) + await self.browser_page.keyboard.press('Enter') + # 监听请求 + self.browser_page.on('response', partial(self.__listen_response)) + await self.completed_event.wait() + + # 报错检查 + if self.fail_status: + raise self.fail_exception + + # # 获取回答元素 + answer_element = self.browser_page.locator("//div[@class='agent-chat__list__item__content']").nth(-1) + box = await answer_element.bounding_box() + logger.debug(f'answer_element: {box}') + view_port_height = box['height'] + 500 + # # 调整视口大小 + await self.browser_page.set_viewport_size({ + 'width': 1920, + 'height': int(view_port_height) + }) + # 收起侧栏 + # await self.browser_page.locator("//div[@data-desc='fold']").click() + # 打开联网搜索结果 + search_list_element = self.browser_page.locator("(//div[contains(@data-title, '资料作为参考')])[1]/span") + if await search_list_element.is_visible(): + await search_list_element.click() + # 截图 + screenshot_path = self._get_screenshot_path() + await self.browser_page.screenshot(path=screenshot_path) + crop_image_left(screenshot_path, 260) + self.ai_answer.screenshot_file = screenshot_path + return self.ai_answer + + async def __listen_response(self, response): + if '/agent/conversation/v1/detail' not in response.url or self.is_get_detail: + return + json_data = await response.json() + # 取值key + if not json_data['convs']: + return + convs = json_data['convs'] + content = {} + for conv in convs: + key = 'speechesV2.0.content' + content = glom(conv, key, default=[]) + if len(content) > 1: + break + # 循环获取content中的内容 + search_list = None + think = None + text = None + for item in content: + if item['type'] == 'text': + text = item.get('msg', '') + elif item['type'] == 'searchGuid': + search_list = item.get('docs', []) + elif item['type'] == 'think': + think = item.get('content', '') + logger.debug(f'ai回复内容: {text}') + ai_search_result_list = [] + self.ai_answer.answer = text + if search_list: + pattern = r'\[\^(\d+)\]' + index_data = list(set(re.findall(pattern, self.ai_answer.answer))) + for index,search_result in enumerate(search_list): + if str(index+1) in index_data: + ai_search_result_list.append( + AiSearchResult( + title=search_result.get('title', ''), + url=search_result.get('url', ''), + host_name=search_result.get('web_site_name', ''), + body=search_result.get('quote', ''), + publish_time=search_result.get('publish_time', 0), + is_referenced = "1" + ) + ) + + else: + ai_search_result_list.append( + AiSearchResult( + title=search_result.get('title', ''), + url=search_result.get('url', ''), + host_name=search_result.get('web_site_name', ''), + body=search_result.get('quote', ''), + publish_time=search_result.get('publish_time', 0), + is_referenced = "0" + ) + ) + + logger.debug(f'ai参考资料: {search_list}') + self.ai_answer.search_result = ai_search_result_list + self.is_get_detail = True + self.completed_event.set() + + def handle_listen_response_error(self, func): + """ + 装饰器 用于处理请求回调中的异常 + :param func: + :return: + """ + + @wraps(func) + async def wrapper(*args, **kwargs): + try: + return await func(*args, **kwargs) + except Exception as e: + logger.error(f"{self.get_platform_name()}响应异常: {e}", exc_info=True) + # 标记失败状态 记录异常 + self.fail_status = True + self.fail_exception = e + self.completed_event.set() + + return wrapper + + def get_platform_id(self) -> int: + return 3 + + def get_platform_name(self) -> str: + return 'YuanBao' \ No newline at end of file diff --git a/static/stealth.min.js b/static/stealth.min.js new file mode 100644 index 0000000..d339346 --- /dev/null +++ b/static/stealth.min.js @@ -0,0 +1,7 @@ +/*! + * Note: Auto-generated, do not update manually. + * Generated by: https://github.com/berstend/puppeteer-extra/tree/master/packages/extract-stealth-evasions + * Generated on: Sun, 27 Aug 2023 04:30:07 GMT + * License: MIT + */ +(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:'utils => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, \'chrome\')`\n Object.defineProperty(window, \'chrome\', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We\'ll extend that later\n })\n }\n\n // That means we\'re running headful and don\'t need to mock anything\n if (\'app\' in window.chrome) {\n return // Nothing to do here\n }\n\n const makeError = {\n ErrorInInvocation: fn => {\n const err = new TypeError(`Error in invocation of app.${fn}()`)\n return utils.stripErrorWithAnchor(\n err,\n `at ${fn} (eval at `\n )\n }\n }\n\n // There\'s a some static data in that property which doesn\'t seem to change,\n // we should periodically check for updates: `JSON.stringify(window.app, null, 2)`\n const STATIC_DATA = JSON.parse(\n `\n{\n "isInstalled": false,\n "InstallState": {\n "DISABLED": "disabled",\n "INSTALLED": "installed",\n "NOT_INSTALLED": "not_installed"\n },\n "RunningState": {\n "CANNOT_RUN": "cannot_run",\n "READY_TO_RUN": "ready_to_run",\n "RUNNING": "running"\n }\n}\n `.trim()\n )\n\n window.chrome.app = {\n ...STATIC_DATA,\n\n get isInstalled() {\n return false\n },\n\n getDetails: function getDetails() {\n if (arguments.length) {\n throw makeError.ErrorInInvocation(`getDetails`)\n }\n return null\n },\n getIsInstalled: function getDetails() {\n if (arguments.length) {\n throw makeError.ErrorInInvocation(`getIsInstalled`)\n }\n return false\n },\n runningState: function getDetails() {\n if (arguments.length) {\n throw makeError.ErrorInInvocation(`runningState`)\n }\n return \'cannot_run\'\n }\n }\n utils.patchToStringNested(window.chrome.app)\n }',_args:[]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"utils => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, 'chrome')`\n Object.defineProperty(window, 'chrome', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We'll extend that later\n })\n }\n\n // That means we're running headful and don't need to mock anything\n if ('csi' in window.chrome) {\n return // Nothing to do here\n }\n\n // Check that the Navigation Timing API v1 is available, we need that\n if (!window.performance || !window.performance.timing) {\n return\n }\n\n const { timing } = window.performance\n\n window.chrome.csi = function() {\n return {\n onloadT: timing.domContentLoadedEventEnd,\n startE: timing.navigationStart,\n pageT: Date.now() - timing.navigationStart,\n tran: 15 // Transition type or something\n }\n }\n utils.patchToString(window.chrome.csi)\n }",_args:[]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts }) => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, 'chrome')`\n Object.defineProperty(window, 'chrome', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We'll extend that later\n })\n }\n\n // That means we're running headful and don't need to mock anything\n if ('loadTimes' in window.chrome) {\n return // Nothing to do here\n }\n\n // Check that the Navigation Timing API v1 + v2 is available, we need that\n if (\n !window.performance ||\n !window.performance.timing ||\n !window.PerformancePaintTiming\n ) {\n return\n }\n\n const { performance } = window\n\n // Some stuff is not available on about:blank as it requires a navigation to occur,\n // let's harden the code to not fail then:\n const ntEntryFallback = {\n nextHopProtocol: 'h2',\n type: 'other'\n }\n\n // The API exposes some funky info regarding the connection\n const protocolInfo = {\n get connectionInfo() {\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ntEntry.nextHopProtocol\n },\n get npnNegotiatedProtocol() {\n // NPN is deprecated in favor of ALPN, but this implementation returns the\n // HTTP/2 or HTTP2+QUIC/39 requests negotiated via ALPN.\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ['h2', 'hq'].includes(ntEntry.nextHopProtocol)\n ? ntEntry.nextHopProtocol\n : 'unknown'\n },\n get navigationType() {\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ntEntry.type\n },\n get wasAlternateProtocolAvailable() {\n // The Alternate-Protocol header is deprecated in favor of Alt-Svc\n // (https://www.mnot.net/blog/2016/03/09/alt-svc), so technically this\n // should always return false.\n return false\n },\n get wasFetchedViaSpdy() {\n // SPDY is deprecated in favor of HTTP/2, but this implementation returns\n // true for HTTP/2 or HTTP2+QUIC/39 as well.\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ['h2', 'hq'].includes(ntEntry.nextHopProtocol)\n },\n get wasNpnNegotiated() {\n // NPN is deprecated in favor of ALPN, but this implementation returns true\n // for HTTP/2 or HTTP2+QUIC/39 requests negotiated via ALPN.\n const ntEntry =\n performance.getEntriesByType('navigation')[0] || ntEntryFallback\n return ['h2', 'hq'].includes(ntEntry.nextHopProtocol)\n }\n }\n\n const { timing } = window.performance\n\n // Truncate number to specific number of decimals, most of the `loadTimes` stuff has 3\n function toFixed(num, fixed) {\n var re = new RegExp('^-?\\\\d+(?:.\\\\d{0,' + (fixed || -1) + '})?')\n return num.toString().match(re)[0]\n }\n\n const timingInfo = {\n get firstPaintAfterLoadTime() {\n // This was never actually implemented and always returns 0.\n return 0\n },\n get requestTime() {\n return timing.navigationStart / 1000\n },\n get startLoadTime() {\n return timing.navigationStart / 1000\n },\n get commitLoadTime() {\n return timing.responseStart / 1000\n },\n get finishDocumentLoadTime() {\n return timing.domContentLoadedEventEnd / 1000\n },\n get finishLoadTime() {\n return timing.loadEventEnd / 1000\n },\n get firstPaintTime() {\n const fpEntry = performance.getEntriesByType('paint')[0] || {\n startTime: timing.loadEventEnd / 1000 // Fallback if no navigation occured (`about:blank`)\n }\n return toFixed(\n (fpEntry.startTime + performance.timeOrigin) / 1000,\n 3\n )\n }\n }\n\n window.chrome.loadTimes = function() {\n return {\n ...protocolInfo,\n ...timingInfo\n }\n }\n utils.patchToString(window.chrome.loadTimes)\n }",_args:[{opts:{}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts, STATIC_DATA }) => {\n if (!window.chrome) {\n // Use the exact property descriptor found in headful Chrome\n // fetch it via `Object.getOwnPropertyDescriptor(window, 'chrome')`\n Object.defineProperty(window, 'chrome', {\n writable: true,\n enumerable: true,\n configurable: false, // note!\n value: {} // We'll extend that later\n })\n }\n\n // That means we're running headful and don't need to mock anything\n const existsAlready = 'runtime' in window.chrome\n // `chrome.runtime` is only exposed on secure origins\n const isNotSecure = !window.location.protocol.startsWith('https')\n if (existsAlready || (isNotSecure && !opts.runOnInsecureOrigins)) {\n return // Nothing to do here\n }\n\n window.chrome.runtime = {\n // There's a bunch of static data in that property which doesn't seem to change,\n // we should periodically check for updates: `JSON.stringify(window.chrome.runtime, null, 2)`\n ...STATIC_DATA,\n // `chrome.runtime.id` is extension related and returns undefined in Chrome\n get id() {\n return undefined\n },\n // These two require more sophisticated mocks\n connect: null,\n sendMessage: null\n }\n\n const makeCustomRuntimeErrors = (preamble, method, extensionId) => ({\n NoMatchingSignature: new TypeError(\n preamble + `No matching signature.`\n ),\n MustSpecifyExtensionID: new TypeError(\n preamble +\n `${method} called from a webpage must specify an Extension ID (string) for its first argument.`\n ),\n InvalidExtensionID: new TypeError(\n preamble + `Invalid extension id: '${extensionId}'`\n )\n })\n\n // Valid Extension IDs are 32 characters in length and use the letter `a` to `p`:\n // https://source.chromium.org/chromium/chromium/src/+/master:components/crx_file/id_util.cc;drc=14a055ccb17e8c8d5d437fe080faba4c6f07beac;l=90\n const isValidExtensionID = str =>\n str.length === 32 && str.toLowerCase().match(/^[a-p]+$/)\n\n /** Mock `chrome.runtime.sendMessage` */\n const sendMessageHandler = {\n apply: function(target, ctx, args) {\n const [extensionId, options, responseCallback] = args || []\n\n // Define custom errors\n const errorPreamble = `Error in invocation of runtime.sendMessage(optional string extensionId, any message, optional object options, optional function responseCallback): `\n const Errors = makeCustomRuntimeErrors(\n errorPreamble,\n `chrome.runtime.sendMessage()`,\n extensionId\n )\n\n // Check if the call signature looks ok\n const noArguments = args.length === 0\n const tooManyArguments = args.length > 4\n const incorrectOptions = options && typeof options !== 'object'\n const incorrectResponseCallback =\n responseCallback && typeof responseCallback !== 'function'\n if (\n noArguments ||\n tooManyArguments ||\n incorrectOptions ||\n incorrectResponseCallback\n ) {\n throw Errors.NoMatchingSignature\n }\n\n // At least 2 arguments are required before we even validate the extension ID\n if (args.length < 2) {\n throw Errors.MustSpecifyExtensionID\n }\n\n // Now let's make sure we got a string as extension ID\n if (typeof extensionId !== 'string') {\n throw Errors.NoMatchingSignature\n }\n\n if (!isValidExtensionID(extensionId)) {\n throw Errors.InvalidExtensionID\n }\n\n return undefined // Normal behavior\n }\n }\n utils.mockWithProxy(\n window.chrome.runtime,\n 'sendMessage',\n function sendMessage() {},\n sendMessageHandler\n )\n\n /**\n * Mock `chrome.runtime.connect`\n *\n * @see https://developer.chrome.com/apps/runtime#method-connect\n */\n const connectHandler = {\n apply: function(target, ctx, args) {\n const [extensionId, connectInfo] = args || []\n\n // Define custom errors\n const errorPreamble = `Error in invocation of runtime.connect(optional string extensionId, optional object connectInfo): `\n const Errors = makeCustomRuntimeErrors(\n errorPreamble,\n `chrome.runtime.connect()`,\n extensionId\n )\n\n // Behavior differs a bit from sendMessage:\n const noArguments = args.length === 0\n const emptyStringArgument = args.length === 1 && extensionId === ''\n if (noArguments || emptyStringArgument) {\n throw Errors.MustSpecifyExtensionID\n }\n\n const tooManyArguments = args.length > 2\n const incorrectConnectInfoType =\n connectInfo && typeof connectInfo !== 'object'\n\n if (tooManyArguments || incorrectConnectInfoType) {\n throw Errors.NoMatchingSignature\n }\n\n const extensionIdIsString = typeof extensionId === 'string'\n if (extensionIdIsString && extensionId === '') {\n throw Errors.MustSpecifyExtensionID\n }\n if (extensionIdIsString && !isValidExtensionID(extensionId)) {\n throw Errors.InvalidExtensionID\n }\n\n // There's another edge-case here: extensionId is optional so we might find a connectInfo object as first param, which we need to validate\n const validateConnectInfo = ci => {\n // More than a first param connectInfo as been provided\n if (args.length > 1) {\n throw Errors.NoMatchingSignature\n }\n // An empty connectInfo has been provided\n if (Object.keys(ci).length === 0) {\n throw Errors.MustSpecifyExtensionID\n }\n // Loop over all connectInfo props an check them\n Object.entries(ci).forEach(([k, v]) => {\n const isExpected = ['name', 'includeTlsChannelId'].includes(k)\n if (!isExpected) {\n throw new TypeError(\n errorPreamble + `Unexpected property: '${k}'.`\n )\n }\n const MismatchError = (propName, expected, found) =>\n TypeError(\n errorPreamble +\n `Error at property '${propName}': Invalid type: expected ${expected}, found ${found}.`\n )\n if (k === 'name' && typeof v !== 'string') {\n throw MismatchError(k, 'string', typeof v)\n }\n if (k === 'includeTlsChannelId' && typeof v !== 'boolean') {\n throw MismatchError(k, 'boolean', typeof v)\n }\n })\n }\n if (typeof extensionId === 'object') {\n validateConnectInfo(extensionId)\n throw Errors.MustSpecifyExtensionID\n }\n\n // Unfortunately even when the connect fails Chrome will return an object with methods we need to mock as well\n return utils.patchToStringNested(makeConnectResponse())\n }\n }\n utils.mockWithProxy(\n window.chrome.runtime,\n 'connect',\n function connect() {},\n connectHandler\n )\n\n function makeConnectResponse() {\n const onSomething = () => ({\n addListener: function addListener() {},\n dispatch: function dispatch() {},\n hasListener: function hasListener() {},\n hasListeners: function hasListeners() {\n return false\n },\n removeListener: function removeListener() {}\n })\n\n const response = {\n name: '',\n sender: undefined,\n disconnect: function disconnect() {},\n onDisconnect: onSomething(),\n onMessage: onSomething(),\n postMessage: function postMessage() {\n if (!arguments.length) {\n throw new TypeError(`Insufficient number of arguments.`)\n }\n throw new Error(`Attempting to use a disconnected port object`)\n }\n }\n return response\n }\n }",_args:[{opts:{runOnInsecureOrigins:!1},STATIC_DATA:{OnInstalledReason:{CHROME_UPDATE:"chrome_update",INSTALL:"install",SHARED_MODULE_UPDATE:"shared_module_update",UPDATE:"update"},OnRestartRequiredReason:{APP_UPDATE:"app_update",OS_UPDATE:"os_update",PERIODIC:"periodic"},PlatformArch:{ARM:"arm",ARM64:"arm64",MIPS:"mips",MIPS64:"mips64",X86_32:"x86-32",X86_64:"x86-64"},PlatformNaclArch:{ARM:"arm",MIPS:"mips",MIPS64:"mips64",X86_32:"x86-32",X86_64:"x86-64"},PlatformOs:{ANDROID:"android",CROS:"cros",LINUX:"linux",MAC:"mac",OPENBSD:"openbsd",WIN:"win"},RequestUpdateCheckStatus:{NO_UPDATE:"no_update",THROTTLED:"throttled",UPDATE_AVAILABLE:"update_available"}}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"utils => {\n /**\n * Input might look funky, we need to normalize it so e.g. whitespace isn't an issue for our spoofing.\n *\n * @example\n * video/webm; codecs=\"vp8, vorbis\"\n * video/mp4; codecs=\"avc1.42E01E\"\n * audio/x-m4a;\n * audio/ogg; codecs=\"vorbis\"\n * @param {String} arg\n */\n const parseInput = arg => {\n const [mime, codecStr] = arg.trim().split(';')\n let codecs = []\n if (codecStr && codecStr.includes('codecs=\"')) {\n codecs = codecStr\n .trim()\n .replace(`codecs=\"`, '')\n .replace(`\"`, '')\n .trim()\n .split(',')\n .filter(x => !!x)\n .map(x => x.trim())\n }\n return {\n mime,\n codecStr,\n codecs\n }\n }\n\n const canPlayType = {\n // Intercept certain requests\n apply: function(target, ctx, args) {\n if (!args || !args.length) {\n return target.apply(ctx, args)\n }\n const { mime, codecs } = parseInput(args[0])\n // This specific mp4 codec is missing in Chromium\n if (mime === 'video/mp4') {\n if (codecs.includes('avc1.42E01E')) {\n return 'probably'\n }\n }\n // This mimetype is only supported if no codecs are specified\n if (mime === 'audio/x-m4a' && !codecs.length) {\n return 'maybe'\n }\n\n // This mimetype is only supported if no codecs are specified\n if (mime === 'audio/aac' && !codecs.length) {\n return 'probably'\n }\n // Everything else as usual\n return target.apply(ctx, args)\n }\n }\n\n /* global HTMLMediaElement */\n utils.replaceWithProxy(\n HTMLMediaElement.prototype,\n 'canPlayType',\n canPlayType\n )\n }",_args:[]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts }) => {\n utils.replaceGetterWithProxy(\n Object.getPrototypeOf(navigator),\n 'hardwareConcurrency',\n utils.makeHandler().getterValue(opts.hardwareConcurrency)\n )\n }",_args:[{opts:{hardwareConcurrency:4}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { opts }) => {\n const languages = opts.languages.length\n ? opts.languages\n : ['en-US', 'en']\n utils.replaceGetterWithProxy(\n Object.getPrototypeOf(navigator),\n 'languages',\n utils.makeHandler().getterValue(Object.freeze([...languages]))\n )\n }",_args:[{opts:{languages:[]}}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, opts) => {\n const isSecure = document.location.protocol.startsWith('https')\n\n // In headful on secure origins the permission should be \"default\", not \"denied\"\n if (isSecure) {\n utils.replaceGetterWithProxy(Notification, 'permission', {\n apply() {\n return 'default'\n }\n })\n }\n\n // Another weird behavior:\n // On insecure origins in headful the state is \"denied\",\n // whereas in headless it's \"prompt\"\n if (!isSecure) {\n const handler = {\n apply(target, ctx, args) {\n const param = (args || [])[0]\n\n const isNotifications =\n param && param.name && param.name === 'notifications'\n if (!isNotifications) {\n return utils.cache.Reflect.apply(...arguments)\n }\n\n return Promise.resolve(\n Object.setPrototypeOf(\n {\n state: 'denied',\n onchange: null\n },\n PermissionStatus.prototype\n )\n )\n }\n }\n // Note: Don't use `Object.getPrototypeOf` here\n utils.replaceWithProxy(Permissions.prototype, 'query', handler)\n }\n }",_args:[{}]}),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, { fns, data }) => {\n fns = utils.materializeFns(fns)\n\n // That means we're running headful\n const hasPlugins = 'plugins' in navigator && navigator.plugins.length\n if (hasPlugins) {\n return // nothing to do here\n }\n\n const mimeTypes = fns.generateMimeTypeArray(utils, fns)(data.mimeTypes)\n const plugins = fns.generatePluginArray(utils, fns)(data.plugins)\n\n // Plugin and MimeType cross-reference each other, let's do that now\n // Note: We're looping through `data.plugins` here, not the generated `plugins`\n for (const pluginData of data.plugins) {\n pluginData.__mimeTypes.forEach((type, index) => {\n plugins[pluginData.name][index] = mimeTypes[type]\n\n Object.defineProperty(plugins[pluginData.name], type, {\n value: mimeTypes[type],\n writable: false,\n enumerable: false, // Not enumerable\n configurable: true\n })\n Object.defineProperty(mimeTypes[type], 'enabledPlugin', {\n value:\n type === 'application/x-pnacl'\n ? mimeTypes['application/x-nacl'].enabledPlugin // these reference the same plugin, so we need to re-use the Proxy in order to avoid leaks\n : new Proxy(plugins[pluginData.name], {}), // Prevent circular references\n writable: false,\n enumerable: false, // Important: `JSON.stringify(navigator.plugins)`\n configurable: true\n })\n })\n }\n\n const patchNavigator = (name, value) =>\n utils.replaceProperty(Object.getPrototypeOf(navigator), name, {\n get() {\n return value\n }\n })\n\n patchNavigator('mimeTypes', mimeTypes)\n patchNavigator('plugins', plugins)\n\n // All done\n }",_args:[{fns:{generateMimeTypeArray:"(utils, fns) => mimeTypesData => {\n return fns.generateMagicArray(utils, fns)(\n mimeTypesData,\n MimeTypeArray.prototype,\n MimeType.prototype,\n 'type'\n )\n}",generatePluginArray:"(utils, fns) => pluginsData => {\n return fns.generateMagicArray(utils, fns)(\n pluginsData,\n PluginArray.prototype,\n Plugin.prototype,\n 'name'\n )\n}",generateMagicArray:"(utils, fns) =>\n function(\n dataArray = [],\n proto = MimeTypeArray.prototype,\n itemProto = MimeType.prototype,\n itemMainProp = 'type'\n ) {\n // Quick helper to set props with the same descriptors vanilla is using\n const defineProp = (obj, prop, value) =>\n Object.defineProperty(obj, prop, {\n value,\n writable: false,\n enumerable: false, // Important for mimeTypes & plugins: `JSON.stringify(navigator.mimeTypes)`\n configurable: true\n })\n\n // Loop over our fake data and construct items\n const makeItem = data => {\n const item = {}\n for (const prop of Object.keys(data)) {\n if (prop.startsWith('__')) {\n continue\n }\n defineProp(item, prop, data[prop])\n }\n return patchItem(item, data)\n }\n\n const patchItem = (item, data) => {\n let descriptor = Object.getOwnPropertyDescriptors(item)\n\n // Special case: Plugins have a magic length property which is not enumerable\n // e.g. `navigator.plugins[i].length` should always be the length of the assigned mimeTypes\n if (itemProto === Plugin.prototype) {\n descriptor = {\n ...descriptor,\n length: {\n value: data.__mimeTypes.length,\n writable: false,\n enumerable: false,\n configurable: true // Important to be able to use the ownKeys trap in a Proxy to strip `length`\n }\n }\n }\n\n // We need to spoof a specific `MimeType` or `Plugin` object\n const obj = Object.create(itemProto, descriptor)\n\n // Virtually all property keys are not enumerable in vanilla\n const blacklist = [...Object.keys(data), 'length', 'enabledPlugin']\n return new Proxy(obj, {\n ownKeys(target) {\n return Reflect.ownKeys(target).filter(k => !blacklist.includes(k))\n },\n getOwnPropertyDescriptor(target, prop) {\n if (blacklist.includes(prop)) {\n return undefined\n }\n return Reflect.getOwnPropertyDescriptor(target, prop)\n }\n })\n }\n\n const magicArray = []\n\n // Loop through our fake data and use that to create convincing entities\n dataArray.forEach(data => {\n magicArray.push(makeItem(data))\n })\n\n // Add direct property access based on types (e.g. `obj['application/pdf']`) afterwards\n magicArray.forEach(entry => {\n defineProp(magicArray, entry[itemMainProp], entry)\n })\n\n // This is the best way to fake the type to make sure this is false: `Array.isArray(navigator.mimeTypes)`\n const magicArrayObj = Object.create(proto, {\n ...Object.getOwnPropertyDescriptors(magicArray),\n\n // There's one ugly quirk we unfortunately need to take care of:\n // The `MimeTypeArray` prototype has an enumerable `length` property,\n // but headful Chrome will still skip it when running `Object.getOwnPropertyNames(navigator.mimeTypes)`.\n // To strip it we need to make it first `configurable` and can then overlay a Proxy with an `ownKeys` trap.\n length: {\n value: magicArray.length,\n writable: false,\n enumerable: false,\n configurable: true // Important to be able to use the ownKeys trap in a Proxy to strip `length`\n }\n })\n\n // Generate our functional function mocks :-)\n const functionMocks = fns.generateFunctionMocks(utils)(\n proto,\n itemMainProp,\n magicArray\n )\n\n // We need to overlay our custom object with a JS Proxy\n const magicArrayObjProxy = new Proxy(magicArrayObj, {\n get(target, key = '') {\n // Redirect function calls to our custom proxied versions mocking the vanilla behavior\n if (key === 'item') {\n return functionMocks.item\n }\n if (key === 'namedItem') {\n return functionMocks.namedItem\n }\n if (proto === PluginArray.prototype && key === 'refresh') {\n return functionMocks.refresh\n }\n // Everything else can pass through as normal\n return utils.cache.Reflect.get(...arguments)\n },\n ownKeys(target) {\n // There are a couple of quirks where the original property demonstrates \"magical\" behavior that makes no sense\n // This can be witnessed when calling `Object.getOwnPropertyNames(navigator.mimeTypes)` and the absense of `length`\n // My guess is that it has to do with the recent change of not allowing data enumeration and this being implemented weirdly\n // For that reason we just completely fake the available property names based on our data to match what regular Chrome is doing\n // Specific issues when not patching this: `length` property is available, direct `types` props (e.g. `obj['application/pdf']`) are missing\n const keys = []\n const typeProps = magicArray.map(mt => mt[itemMainProp])\n typeProps.forEach((_, i) => keys.push(`${i}`))\n typeProps.forEach(propName => keys.push(propName))\n return keys\n },\n getOwnPropertyDescriptor(target, prop) {\n if (prop === 'length') {\n return undefined\n }\n return Reflect.getOwnPropertyDescriptor(target, prop)\n }\n })\n\n return magicArrayObjProxy\n }",generateFunctionMocks:"utils => (\n proto,\n itemMainProp,\n dataArray\n) => ({\n /** Returns the MimeType object with the specified index. */\n item: utils.createProxy(proto.item, {\n apply(target, ctx, args) {\n if (!args.length) {\n throw new TypeError(\n `Failed to execute 'item' on '${\n proto[Symbol.toStringTag]\n }': 1 argument required, but only 0 present.`\n )\n }\n // Special behavior alert:\n // - Vanilla tries to cast strings to Numbers (only integers!) and use them as property index lookup\n // - If anything else than an integer (including as string) is provided it will return the first entry\n const isInteger = args[0] && Number.isInteger(Number(args[0])) // Cast potential string to number first, then check for integer\n // Note: Vanilla never returns `undefined`\n return (isInteger ? dataArray[Number(args[0])] : dataArray[0]) || null\n }\n }),\n /** Returns the MimeType object with the specified name. */\n namedItem: utils.createProxy(proto.namedItem, {\n apply(target, ctx, args) {\n if (!args.length) {\n throw new TypeError(\n `Failed to execute 'namedItem' on '${\n proto[Symbol.toStringTag]\n }': 1 argument required, but only 0 present.`\n )\n }\n return dataArray.find(mt => mt[itemMainProp] === args[0]) || null // Not `undefined`!\n }\n }),\n /** Does nothing and shall return nothing */\n refresh: proto.refresh\n ? utils.createProxy(proto.refresh, {\n apply(target, ctx, args) {\n return undefined\n }\n })\n : undefined\n})"},data:{mimeTypes:[{type:"application/pdf",suffixes:"pdf",description:"",__pluginName:"Chrome PDF Viewer"},{type:"application/x-google-chrome-pdf",suffixes:"pdf",description:"Portable Document Format",__pluginName:"Chrome PDF Plugin"},{type:"application/x-nacl",suffixes:"",description:"Native Client Executable",__pluginName:"Native Client"},{type:"application/x-pnacl",suffixes:"",description:"Portable Native Client Executable",__pluginName:"Native Client"}],plugins:[{name:"Chrome PDF Plugin",filename:"internal-pdf-viewer",description:"Portable Document Format",__mimeTypes:["application/x-google-chrome-pdf"]},{name:"Chrome PDF Viewer",filename:"mhjfbmdgcfjbbpaeojofohoefgiehjai",description:"",__mimeTypes:["application/pdf"]},{name:"Native Client",filename:"internal-nacl-plugin",description:"",__mimeTypes:["application/x-nacl","application/x-pnacl"]}]}}]}),!1===navigator.webdriver||void 0===navigator.webdriver||delete Object.getPrototypeOf(navigator).webdriver,(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, opts) => {\n const getParameterProxyHandler = {\n apply: function(target, ctx, args) {\n const param = (args || [])[0]\n const result = utils.cache.Reflect.apply(target, ctx, args)\n // UNMASKED_VENDOR_WEBGL\n if (param === 37445) {\n return opts.vendor || 'Intel Inc.' // default in headless: Google Inc.\n }\n // UNMASKED_RENDERER_WEBGL\n if (param === 37446) {\n return opts.renderer || 'Intel Iris OpenGL Engine' // default in headless: Google SwiftShader\n }\n return result\n }\n }\n\n // There's more than one WebGL rendering context\n // https://developer.mozilla.org/en-US/docs/Web/API/WebGL2RenderingContext#Browser_compatibility\n // To find out the original values here: Object.getOwnPropertyDescriptors(WebGLRenderingContext.prototype.getParameter)\n const addProxy = (obj, propName) => {\n utils.replaceWithProxy(obj, propName, getParameterProxyHandler)\n }\n // For whatever weird reason loops don't play nice with Object.defineProperty, here's the next best thing:\n addProxy(WebGLRenderingContext.prototype, 'getParameter')\n addProxy(WebGL2RenderingContext.prototype, 'getParameter')\n }",_args:[{}]}),(()=>{try{if(window.outerWidth&&window.outerHeight)return;const n=85;window.outerWidth=window.innerWidth,window.outerHeight=window.innerHeight+n}catch(n){}})(),(({_utilsFns:_utilsFns,_mainFunction:_mainFunction,_args:_args})=>{const utils=Object.fromEntries(Object.entries(_utilsFns).map((([key,value])=>[key,eval(value)])));utils.init(),eval(_mainFunction)(utils,..._args)})({_utilsFns:{init:"() => {\n utils.preloadCache()\n}",stripProxyFromErrors:"(handler = {}) => {\n const newHandler = {\n setPrototypeOf: function (target, proto) {\n if (proto === null)\n throw new TypeError('Cannot convert object to primitive value')\n if (Object.getPrototypeOf(target) === Object.getPrototypeOf(proto)) {\n throw new TypeError('Cyclic __proto__ value')\n }\n return Reflect.setPrototypeOf(target, proto)\n }\n }\n // We wrap each trap in the handler in a try/catch and modify the error stack if they throw\n const traps = Object.getOwnPropertyNames(handler)\n traps.forEach(trap => {\n newHandler[trap] = function () {\n try {\n // Forward the call to the defined proxy handler\n return handler[trap].apply(this, arguments || [])\n } catch (err) {\n // Stack traces differ per browser, we only support chromium based ones currently\n if (!err || !err.stack || !err.stack.includes(`at `)) {\n throw err\n }\n\n // When something throws within one of our traps the Proxy will show up in error stacks\n // An earlier implementation of this code would simply strip lines with a blacklist,\n // but it makes sense to be more surgical here and only remove lines related to our Proxy.\n // We try to use a known \"anchor\" line for that and strip it with everything above it.\n // If the anchor line cannot be found for some reason we fall back to our blacklist approach.\n\n const stripWithBlacklist = (stack, stripFirstLine = true) => {\n const blacklist = [\n `at Reflect.${trap} `, // e.g. Reflect.get or Reflect.apply\n `at Object.${trap} `, // e.g. Object.get or Object.apply\n `at Object.newHandler. [as ${trap}] ` // caused by this very wrapper :-)\n ]\n return (\n err.stack\n .split('\\n')\n // Always remove the first (file) line in the stack (guaranteed to be our proxy)\n .filter((line, index) => !(index === 1 && stripFirstLine))\n // Check if the line starts with one of our blacklisted strings\n .filter(line => !blacklist.some(bl => line.trim().startsWith(bl)))\n .join('\\n')\n )\n }\n\n const stripWithAnchor = (stack, anchor) => {\n const stackArr = stack.split('\\n')\n anchor = anchor || `at Object.newHandler. [as ${trap}] ` // Known first Proxy line in chromium\n const anchorIndex = stackArr.findIndex(line =>\n line.trim().startsWith(anchor)\n )\n if (anchorIndex === -1) {\n return false // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n return stackArr.join('\\n')\n }\n\n // Special cases due to our nested toString proxies\n err.stack = err.stack.replace(\n 'at Object.toString (',\n 'at Function.toString ('\n )\n if ((err.stack || '').includes('at Function.toString (')) {\n err.stack = stripWithBlacklist(err.stack, false)\n throw err\n }\n\n // Try using the anchor method, fallback to blacklist if necessary\n err.stack = stripWithAnchor(err.stack) || stripWithBlacklist(err.stack)\n\n throw err // Re-throw our now sanitized error\n }\n }\n })\n return newHandler\n}",stripErrorWithAnchor:"(err, anchor) => {\n const stackArr = err.stack.split('\\n')\n const anchorIndex = stackArr.findIndex(line => line.trim().startsWith(anchor))\n if (anchorIndex === -1) {\n return err // 404, anchor not found\n }\n // Strip everything from the top until we reach the anchor line (remove anchor line as well)\n // Note: We're keeping the 1st line (zero index) as it's unrelated (e.g. `TypeError`)\n stackArr.splice(1, anchorIndex)\n err.stack = stackArr.join('\\n')\n return err\n}",replaceProperty:"(obj, propName, descriptorOverrides = {}) => {\n return Object.defineProperty(obj, propName, {\n // Copy over the existing descriptors (writable, enumerable, configurable, etc)\n ...(Object.getOwnPropertyDescriptor(obj, propName) || {}),\n // Add our overrides (e.g. value, get())\n ...descriptorOverrides\n })\n}",preloadCache:"() => {\n if (utils.cache) {\n return\n }\n utils.cache = {\n // Used in our proxies\n Reflect: {\n get: Reflect.get.bind(Reflect),\n apply: Reflect.apply.bind(Reflect)\n },\n // Used in `makeNativeString`\n nativeToStringStr: Function.toString + '' // => `function toString() { [native code] }`\n }\n}",makeNativeString:"(name = '') => {\n return utils.cache.nativeToStringStr.replace('toString', name || '')\n}",patchToString:"(obj, str = '') => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n // `toString` targeted at our proxied Object detected\n if (ctx === obj) {\n // We either return the optional string verbatim or derive the most desired result automatically\n return str || utils.makeNativeString(obj.name)\n }\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",patchToStringNested:"(obj = {}) => {\n return utils.execRecursively(obj, ['function'], utils.patchToString)\n}",redirectToString:"(proxyObj, originalObj) => {\n const handler = {\n apply: function (target, ctx) {\n // This fixes e.g. `HTMLMediaElement.prototype.canPlayType.toString + \"\"`\n if (ctx === Function.prototype.toString) {\n return utils.makeNativeString('toString')\n }\n\n // `toString` targeted at our proxied Object detected\n if (ctx === proxyObj) {\n const fallback = () =>\n originalObj && originalObj.name\n ? utils.makeNativeString(originalObj.name)\n : utils.makeNativeString(proxyObj.name)\n\n // Return the toString representation of our original object if possible\n return originalObj + '' || fallback()\n }\n\n if (typeof ctx === 'undefined' || ctx === null) {\n return target.call(ctx)\n }\n\n // Check if the toString protype of the context is the same as the global prototype,\n // if not indicates that we are doing a check across different windows., e.g. the iframeWithdirect` test case\n const hasSameProto = Object.getPrototypeOf(\n Function.prototype.toString\n ).isPrototypeOf(ctx.toString) // eslint-disable-line no-prototype-builtins\n if (!hasSameProto) {\n // Pass the call on to the local Function.prototype.toString instead\n return ctx.toString()\n }\n\n return target.call(ctx)\n }\n }\n\n const toStringProxy = new Proxy(\n Function.prototype.toString,\n utils.stripProxyFromErrors(handler)\n )\n utils.replaceProperty(Function.prototype, 'toString', {\n value: toStringProxy\n })\n}",replaceWithProxy:"(obj, propName, handler) => {\n const originalObj = obj[propName]\n const proxyObj = new Proxy(obj[propName], utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.redirectToString(proxyObj, originalObj)\n\n return true\n}",replaceGetterWithProxy:"(obj, propName, handler) => {\n const fn = Object.getOwnPropertyDescriptor(obj, propName).get\n const fnStr = fn.toString() // special getter function string\n const proxyObj = new Proxy(fn, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { get: proxyObj })\n utils.patchToString(proxyObj, fnStr)\n\n return true\n}",replaceGetterSetter:"(obj, propName, handlerGetterSetter) => {\n const ownPropertyDescriptor = Object.getOwnPropertyDescriptor(obj, propName)\n const handler = { ...ownPropertyDescriptor }\n\n if (handlerGetterSetter.get !== undefined) {\n const nativeFn = ownPropertyDescriptor.get\n handler.get = function() {\n return handlerGetterSetter.get.call(this, nativeFn.bind(this))\n }\n utils.redirectToString(handler.get, nativeFn)\n }\n\n if (handlerGetterSetter.set !== undefined) {\n const nativeFn = ownPropertyDescriptor.set\n handler.set = function(newValue) {\n handlerGetterSetter.set.call(this, newValue, nativeFn.bind(this))\n }\n utils.redirectToString(handler.set, nativeFn)\n }\n\n Object.defineProperty(obj, propName, handler)\n}",mockWithProxy:"(obj, propName, pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n\n utils.replaceProperty(obj, propName, { value: proxyObj })\n utils.patchToString(proxyObj)\n\n return true\n}",createProxy:"(pseudoTarget, handler) => {\n const proxyObj = new Proxy(pseudoTarget, utils.stripProxyFromErrors(handler))\n utils.patchToString(proxyObj)\n\n return proxyObj\n}",splitObjPath:"objPath => ({\n // Remove last dot entry (property) ==> `HTMLMediaElement.prototype`\n objName: objPath.split('.').slice(0, -1).join('.'),\n // Extract last dot entry ==> `canPlayType`\n propName: objPath.split('.').slice(-1)[0]\n})",replaceObjPathWithProxy:"(objPath, handler) => {\n const { objName, propName } = utils.splitObjPath(objPath)\n const obj = eval(objName) // eslint-disable-line no-eval\n return utils.replaceWithProxy(obj, propName, handler)\n}",execRecursively:"(obj = {}, typeFilter = [], fn) => {\n function recurse(obj) {\n for (const key in obj) {\n if (obj[key] === undefined) {\n continue\n }\n if (obj[key] && typeof obj[key] === 'object') {\n recurse(obj[key])\n } else {\n if (obj[key] && typeFilter.includes(typeof obj[key])) {\n fn.call(this, obj[key])\n }\n }\n }\n }\n recurse(obj)\n return obj\n}",stringifyFns:"(fnObj = { hello: () => 'world' }) => {\n // Object.fromEntries() ponyfill (in 6 lines) - supported only in Node v12+, modern browsers are fine\n // https://github.com/feross/fromentries\n function fromEntries(iterable) {\n return [...iterable].reduce((obj, [key, val]) => {\n obj[key] = val\n return obj\n }, {})\n }\n return (Object.fromEntries || fromEntries)(\n Object.entries(fnObj)\n .filter(([key, value]) => typeof value === 'function')\n .map(([key, value]) => [key, value.toString()]) // eslint-disable-line no-eval\n )\n}",materializeFns:"(fnStrObj = { hello: \"() => 'world'\" }) => {\n return Object.fromEntries(\n Object.entries(fnStrObj).map(([key, value]) => {\n if (value.startsWith('function')) {\n // some trickery is needed to make oldschool functions work :-)\n return [key, eval(`() => ${value}`)()] // eslint-disable-line no-eval\n } else {\n // arrow functions just work\n return [key, eval(value)] // eslint-disable-line no-eval\n }\n })\n )\n}",makeHandler:"() => ({\n // Used by simple `navigator` getter evasions\n getterValue: value => ({\n apply(target, ctx, args) {\n // Let's fetch the value first, to trigger and escalate potential errors\n // Illegal invocations like `navigator.__proto__.vendor` will throw here\n utils.cache.Reflect.apply(...arguments)\n return value\n }\n })\n})",arrayEquals:"(array1, array2) => {\n if (array1.length !== array2.length) {\n return false\n }\n for (let i = 0; i < array1.length; ++i) {\n if (array1[i] !== array2[i]) {\n return false\n }\n }\n return true\n}",memoize:"fn => {\n const cache = []\n return function(...args) {\n if (!cache.some(c => utils.arrayEquals(c.key, args))) {\n cache.push({ key: args, value: fn.apply(this, args) })\n }\n return cache.find(c => utils.arrayEquals(c.key, args)).value\n }\n}"},_mainFunction:"(utils, opts) => {\n try {\n // Adds a contentWindow proxy to the provided iframe element\n const addContentWindowProxy = iframe => {\n const contentWindowProxy = {\n get(target, key) {\n // Now to the interesting part:\n // We actually make this thing behave like a regular iframe window,\n // by intercepting calls to e.g. `.self` and redirect it to the correct thing. :)\n // That makes it possible for these assertions to be correct:\n // iframe.contentWindow.self === window.top // must be false\n if (key === 'self') {\n return this\n }\n // iframe.contentWindow.frameElement === iframe // must be true\n if (key === 'frameElement') {\n return iframe\n }\n // Intercept iframe.contentWindow[0] to hide the property 0 added by the proxy.\n if (key === '0') {\n return undefined\n }\n return Reflect.get(target, key)\n }\n }\n\n if (!iframe.contentWindow) {\n const proxy = new Proxy(window, contentWindowProxy)\n Object.defineProperty(iframe, 'contentWindow', {\n get() {\n return proxy\n },\n set(newValue) {\n return newValue // contentWindow is immutable\n },\n enumerable: true,\n configurable: false\n })\n }\n }\n\n // Handles iframe element creation, augments `srcdoc` property so we can intercept further\n const handleIframeCreation = (target, thisArg, args) => {\n const iframe = target.apply(thisArg, args)\n\n // We need to keep the originals around\n const _iframe = iframe\n const _srcdoc = _iframe.srcdoc\n\n // Add hook for the srcdoc property\n // We need to be very surgical here to not break other iframes by accident\n Object.defineProperty(iframe, 'srcdoc', {\n configurable: true, // Important, so we can reset this later\n get: function() {\n return _srcdoc\n },\n set: function(newValue) {\n addContentWindowProxy(this)\n // Reset property, the hook is only needed once\n Object.defineProperty(iframe, 'srcdoc', {\n configurable: false,\n writable: false,\n value: _srcdoc\n })\n _iframe.srcdoc = newValue\n }\n })\n return iframe\n }\n\n // Adds a hook to intercept iframe creation events\n const addIframeCreationSniffer = () => {\n /* global document */\n const createElementHandler = {\n // Make toString() native\n get(target, key) {\n return Reflect.get(target, key)\n },\n apply: function(target, thisArg, args) {\n const isIframe =\n args && args.length && `${args[0]}`.toLowerCase() === 'iframe'\n if (!isIframe) {\n // Everything as usual\n return target.apply(thisArg, args)\n } else {\n return handleIframeCreation(target, thisArg, args)\n }\n }\n }\n // All this just due to iframes with srcdoc bug\n utils.replaceWithProxy(\n document,\n 'createElement',\n createElementHandler\n )\n }\n\n // Let's go\n addIframeCreationSniffer()\n } catch (err) {\n // console.warn(err)\n }\n }",_args:[]}); \ No newline at end of file diff --git a/utils/__init__.py b/utils/__init__.py new file mode 100644 index 0000000..8011253 --- /dev/null +++ b/utils/__init__.py @@ -0,0 +1,111 @@ +# coding=utf-8 +import hashlib +import os +from pathlib import Path +import re +from .logger_utils import create_logger +import json +from typing import Any, Union +from datetime import datetime + + +def parse_nested_json( + json_str: str, + default: Any = None, + recursive: bool = True +) -> Union[dict, list, Any]: + """ + 解析多层嵌套的JSON字符串 + + :param json_str: 要解析的JSON字符串 + :param default: 解析失败时返回的默认值 + :param recursive: 是否递归解析嵌套的JSON字符串 + :return: 解析后的Python对象 + """ + + def _parse(obj: Any) -> Any: + # 递归解析嵌套结构 + if isinstance(obj, dict): + return {k: _parse(v) for k, v in obj.items()} + elif isinstance(obj, list): + return [_parse(elem) for elem in obj] + elif recursive and isinstance(obj, str): + try: + parsed = json.loads(obj) + return _parse(parsed) # 递归解析新对象 + except json.JSONDecodeError: + return obj + else: + return obj + + # 处理空输入 + if not json_str: + return default if default is not None else {} + + try: + # 首次解析外层JSON + parsed = json.loads(json_str) + # 递归处理嵌套结构 + return _parse(parsed) + except (TypeError, json.JSONDecodeError) as e: + # 处理解码错误和类型错误 + return default if default is not None else {} + except Exception as e: + # 其他异常处理(可选记录日志) + return default if default is not None else {} + + +def convert_timestamp(timestamp): + """ + 自动识别时间戳是秒级还是毫秒级,并转换为 datetime 对象。 + + 参数: + timestamp -- 时间戳(整数或浮点数) + + 返回: + datetime 对象 + """ + # 如果时间戳大于 1e10,认为是毫秒级时间戳 + if timestamp > 1e10: + timestamp /= 1000.0 # 转换为秒级时间戳 + return datetime.fromtimestamp(timestamp) + +def make_sha256_hash(file_path: str) -> str: + """ + 计算文件的哈希值 + :param file_path: 文件路径 + :return: 哈希值的十六进制字符串 + """ + hash_obj = hashlib.new("sha256") + with open(file_path, "rb") as f: + while chunk := f.read(8192): # 分块读取避免大文件内存溢出 + hash_obj.update(chunk) + return hash_obj.hexdigest() + + +def css_to_dict(css_line): + """ + 将单行CSS变量声明转换为Python字典 + + 参数: + css_line (str): 包含CSS变量声明的字符串,例如: + '--ds-button-color: #fff; -button-text-color: #4c4c4c; button-border-color: rgba(0, 0, 0, 0.12);' + + 返回: + dict: 包含CSS变量名和值的字典 + """ + # 使用正则表达式匹配所有变量声明 + # 匹配格式:可能带有1-2个横线的变量名,然后是冒号和值 + pattern = r'(-{0,2}[a-zA-Z0-9-]+)\s*:\s*([^;]+);?' + matches = re.findall(pattern, css_line) + + # 将匹配结果转换为字典 + result = {} + for match in matches: + var_name = match[0] # 保留原始横线数量 + var_value = match[1].strip() + result[var_name] = var_value + + return result + + diff --git a/utils/ai.py b/utils/ai.py new file mode 100644 index 0000000..4e47976 --- /dev/null +++ b/utils/ai.py @@ -0,0 +1,114 @@ +# coding=utf-8 +import asyncio +import json + +from openai import OpenAI + +from utils import create_logger +from utils.ai_seo_api_utils import AiSeoApis + +import config + + +logger = create_logger(platform="ai") +client = OpenAI(api_key=config.OPENAI_API_KEY, base_url="https://api.deepseek.com") + +async def main(): + results = await AiSeoApis.get_task_result_list(project_id=3) + for result in results: + if result['read_rank_status'] == 1: + logger.info(f"[{result['id']}] 已读取过排名") + continue + prompt = f""" + 任务: 请在以下文本中, 按出现的顺序提取出品牌词, 多次出现的品牌词仅提取一次, 返回json数组 + 返回格式: json中包含brands字段, 字段的值为数组, 数组内容是按顺序提取的品牌词 + + 文本正文: + {result['content']} + """ + response = client.chat.completions.create( + model="deepseek-chat", + response_format={ + 'type': 'json_object' + }, + messages=[ + {"role": "system", "content": "You are a helpful assistant"}, + {"role": "user", "content": prompt}, + ], + stream=False + ) + # 读取ai返回的json + ai_json_result = {} + # ai 返回的排名 + rank = 0 + # ai读取的状态 + read_rank_status = 2 + try: + ai_json_result = json.loads(response.choices[0].message.content) + read_rank_status = 1 + except Exception as e: + logger.error(f"[{result['id']}] 读取ai返回的json失败: {e}") + logger.error(f"ai提示词: {prompt}") + continue + # 读取排名 + brands = ai_json_result.get('brands', []) + index = 1 + for brand in brands: + if '沙利文' in brand: + rank = index + logger.info(f"[{result['id']}] 品牌词提及, 排名: {rank}") + break + index = index + 1 + # 更新排名 + update_result = await AiSeoApis.update_result_rank(result['id'], rank, read_rank_status) + logger.info(f"[{result['id']}] 更新排名结果: {update_result}") + +async def read_rank(content, brand_word): + # 切割品牌词 + brand_words = brand_word.split(',') + prompt = f""" + 任务: 请在以下文本中, 按出现的顺序提取出品牌词, 多次出现的品牌词仅提取一次, 返回json数组 + 返回格式: json中包含brands字段, 字段的值为数组, 数组内容是按顺序提取的品牌词 + + 文本正文: + {content} + """ + response = client.chat.completions.create( + model="deepseek-chat", + response_format={ + 'type': 'json_object' + }, + messages=[ + {"role": "system", "content": "You are a helpful assistant"}, + {"role": "user", "content": prompt}, + ], + stream=False + ) + # 读取ai返回的json + ai_json_result = {} + # ai 返回的排名 + rank = 0 + # ai读取的状态 + read_rank_status = 2 + try: + ai_json_result = json.loads(response.choices[0].message.content) + read_rank_status = 1 + except Exception as e: + logger.error(f"读取ai返回的json失败: {e}") + logger.error(f"ai提示词: {prompt}") + return [], 0 + # 读取排名 + brands = ai_json_result.get('brands', []) + index = 1 + for brand in brands: + found = any(sub in brand for sub in brand_words) + if found: + rank = index + logger.info(f"品牌词提及, 排名: {rank}") + break + index = index + 1 + return brands, rank + + +if __name__ == '__main__': + asyncio.get_event_loop().run_until_complete(main()) \ No newline at end of file diff --git a/utils/ai_seo_api_utils.py b/utils/ai_seo_api_utils.py new file mode 100644 index 0000000..10a672b --- /dev/null +++ b/utils/ai_seo_api_utils.py @@ -0,0 +1,275 @@ +# coding=utf-8 +import datetime +import json +import os + +import httpx + +import config +from utils import create_logger + +logger = create_logger(__name__) + + +class AiSeoApis: + @staticmethod + def build_full_url(uri): + return f"{config.AI_SEO_BASE_URL}{uri}" + + @staticmethod + async def get_one_task(date='', platform_ids=''): + """ + 获取一个任务 + :return: + """ + uri = '/api/third/getTask' + + url = AiSeoApis.build_full_url(uri) + params = {**config.AI_SEO_API_AUTH} + if date: + params['date'] = date + if platform_ids: + params['platform_ids'] = platform_ids + async with httpx.AsyncClient() as client: + response = await client.get(url, params=params, timeout=60) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"获取任务失败: {json_result['msg']}") + return json_result['data'] + + @staticmethod + async def get_urgent_task_count(): + """ + 获取紧急任务数量 + :return: + """ + uri = '/api/frontend/thirdParty/getUrgentTaskCount' + url = AiSeoApis.build_full_url(uri) + params = {**config.AI_SEO_API_AUTH} + async with httpx.AsyncClient() as client: + response = await client.get(url, params=params, timeout=60) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"获取任务失败: {json_result['msg']}") + return json_result['data'] + + @staticmethod + async def upload_screenshot_file(file_path): + """ + 上传截图文件 + :param file_path: + :return: + """ + uri = '/api/third/oss/upload' + url = AiSeoApis.build_full_url(uri) + params = { + **config.AI_SEO_API_AUTH, + 'oss_path': 'ai_seo/screenshot' + } + + with open(file_path, 'rb') as file: + async with httpx.AsyncClient() as client: + files = {'file': (file_path, file, 'image/jpeg')} + response = await client.post(url, params=params, files=files, timeout=60) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"获取任务失败: {json_result['msg']}") + return json_result['data'] + + @staticmethod + async def submit_task(json_data): + """ + 提交任务 + :param json_data: + :return: + """ + uri = '/api/third/submitProjectTask' + url = AiSeoApis.build_full_url(uri) + async with httpx.AsyncClient() as client: + print("json_data",json.dumps(json_data)) + response = await client.post(url, json=json_data, timeout=120) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"获取任务失败: {json_result['msg']}") + return json_result['data'] + + @staticmethod + async def get_task_result_list(project_id): + """ + 获取任务结果列表 + :return: + """ + uri = '/api/frontend/thirdParty/projectResult/list' + url = AiSeoApis.build_full_url(uri) + params = {**config.AI_SEO_API_AUTH, 'project_id': project_id} + async with httpx.AsyncClient() as client: + response = await client.get(url, params=params) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"获取任务失败: {json_result['msg']}") + return json_result['data'] + + @staticmethod + async def update_result_rank(result_id, rank, read_rank_status): + """ + 更新任务结果排名 + :return: + """ + uri = '/api/frontend/thirdParty/projectResult/updateRank' + url = AiSeoApis.build_full_url(uri) + json_data = {**config.AI_SEO_API_AUTH, 'id': result_id, 'rank': rank, 'read_rank_status': read_rank_status} + async with httpx.AsyncClient() as client: + response = await client.post(url, json=json_data) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"获取任务失败: {json_result['msg']}") + return json_result['data'] + + @staticmethod + async def update_task_status(task_id, status): + """ + 更新任务状态 + :param task_id: + :param status: + :return: + """ + uri = '/api/third/updateTask' + url = AiSeoApis.build_full_url(uri) + json_data = {**config.AI_SEO_API_AUTH, 'task_id': task_id, 'status': status} + async with httpx.AsyncClient() as client: + response = await client.post(url, json=json_data, timeout=60) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"更新任务失败: {json_result['msg']}") + return None + return json_result['data'] + + @staticmethod + async def heartbeat(dc_id, load_count=0): + """ + 心跳 + :param dc_id: + :param load_count: + :return: + """ + uri = '/api/frontend/thirdParty/spider/heartbeat' + url = AiSeoApis.build_full_url(uri) + send_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") + json_data = { + **config.AI_SEO_API_AUTH, + 'dc_id': dc_id, + 'load_count': load_count, + 'send_time': send_time + } + async with httpx.AsyncClient() as client: + response = await client.post(url, json=json_data, timeout=60) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"心跳失败: {json_result['msg']}") + return None + return json_result['data'] + + @staticmethod + async def get_spider_session(platform_id): + """ + 获取爬虫会话 + :param platform_id: + :return: + """ + uri = '/api/third/getOneSpiderSession' + url = AiSeoApis.build_full_url(uri) + json_data = {**config.AI_SEO_API_AUTH, 'platform_id': platform_id} + async with httpx.AsyncClient() as client: + response = await client.get(url, params=json_data, timeout=60) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"获取爬虫session失败") + return None + return json_result['data'] + + @staticmethod + async def download_spider_session_file(url, path): + """ + 下载爬虫会话文件 + :param url: + :param path: + :return: + """ + # 获取文件所在目录 + dir_path = os.path.dirname(path) + + os.makedirs(dir_path, exist_ok=True) + + async with httpx.AsyncClient(verify=False) as client: + response = await client.get(url, follow_redirects=True) + with open(path, 'wb') as file: + file.write(response.content) + + @staticmethod + async def update_spider_session(session_id, status=1): + """ + 更新爬虫会话状态 + :param session_id: + :param status: + :return: + """ + uri = '/api/frontend/thirdParty/spider/session/update' + url = AiSeoApis.build_full_url(uri) + json_data = {**config.AI_SEO_API_AUTH, 'id': session_id, 'status': status} + async with httpx.AsyncClient() as client: + response = await client.post(url, json=json_data, timeout=60) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"更新爬虫session失败") + return None + return json_result['data'] + + @staticmethod + async def upload_session_file(file_path): + """ + 上传session文件 + :param file_path: + :return: + """ + uri = '/api/frontend/thirdParty/oss/upload' + url = AiSeoApis.build_full_url(uri) + params = { + **config.AI_SEO_API_AUTH, + 'oss_path': 'ai_seo/session' + } + with open(file_path, 'rb') as file: + async with httpx.AsyncClient() as client: + files = {'file': (file_path, file, 'application/json')} + response = await client.post(url, params=params, files=files, timeout=60) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"上传session文件失败: {json_result['msg']}") + return json_result['data'] + + @staticmethod + async def save_spider_session(platform_id, file_url, file_hash, account=''): + """ + 新增爬虫session + :param file_url: + :param platform_id: + :param url: + :param file_hash: + :param account: + :return: + """ + uri = '/api/frontend/thirdParty/spider/session/save' + url = AiSeoApis.build_full_url(uri) + json_data = { + **config.AI_SEO_API_AUTH, + 'platform_id': platform_id, + 'account': account, + 'url': file_url, + 'hash': file_hash + } + async with httpx.AsyncClient() as client: + response = await client.post(url, json=json_data, timeout=120) + json_result = response.json() + if not json_result['code'] == 0: + logger.error(f"保存session: {json_result['msg']}") + return json_result['data'] + diff --git a/utils/image_utils.py b/utils/image_utils.py new file mode 100644 index 0000000..17271ab --- /dev/null +++ b/utils/image_utils.py @@ -0,0 +1,43 @@ +# coding=utf-8 +from PIL import Image +import os + +from utils import create_logger + +logger = create_logger(__name__) + + +def crop_image_left(image_path, crop_width): + """ + 从图片左侧切割指定宽度并覆盖原图片 + + 参数: + image_path (str): 图片文件路径 + crop_width (int): 要切割的宽度(像素) + """ + try: + # 打开原始图片 + with Image.open(image_path) as img: + # 获取图片尺寸 + width, height = img.size + + # 验证切割宽度是否有效 + if crop_width <= 0 or crop_width >= width: + raise ValueError(f"切割宽度必须大于0且小于图片宽度({width}px)") + + # 计算切割区域 (left, upper, right, lower) + crop_box = (crop_width, 0, width, height) + + # 执行切割 + cropped_img = img.crop(crop_box) + + # 临时保存切割后的图片 + temp_path = image_path + ".png" + cropped_img.save(temp_path, quality=95) + # 覆盖原文件 + os.replace(temp_path, image_path) + logger.info(f"成功从左侧切割 {crop_width}px 并覆盖原图") + except Exception as e: + print(f"处理图片时出错: {e}") + if 'temp_path' in locals() and os.path.exists(temp_path): + os.remove(temp_path) diff --git a/utils/logger_utils.py b/utils/logger_utils.py new file mode 100644 index 0000000..60d3727 --- /dev/null +++ b/utils/logger_utils.py @@ -0,0 +1,48 @@ +# coding=utf-8 +import sys + +from loguru import logger +import os +from datetime import datetime + +import config + + +def create_logger(platform: str): + """ + 初始化日志工具类 + :param platform: 平台名称 + :param name: 姓名 + """ + # 确定日志目录,按月份保存 + current_month = datetime.now().strftime("%Y-%m") + log_dir = os.path.join("logs", current_month) + os.makedirs(log_dir, exist_ok=True) + # 确定日志文件名称为当前日的部分 + current_day = datetime.now().strftime("%d") + log_file = os.path.join(log_dir, f"{current_day}.log") + + logger.remove() + # 文件处理器 + logger.add( + log_file, + level=config.LOG_LEVEL, + rotation="1 day", # 每天轮换日志文件 + retention="3 months", # 日志保留3个月 + encoding="utf-8", + enqueue=True, # 异步写入 + backtrace=True, # 显示回溯信息 + diagnose=True, # 显示诊断信息 + format="{time:YYYY-MM-DD HH:mm:ss} | {level} | " + "{extra[platform]} | {message}" + ) + # 控制台处理器 + logger.add( + sys.stderr, + level=config.LOG_LEVEL, + format="{time:YYYY-MM-DD HH:mm:ss} | {level} | " + "{extra[platform]} | {message}", + colorize=True + ) + # 设置默认的上下文信息 + return logger.bind(platform=platform) diff --git a/utils/session_utils.py b/utils/session_utils.py new file mode 100644 index 0000000..b95ce17 --- /dev/null +++ b/utils/session_utils.py @@ -0,0 +1,42 @@ +# coding=utf-8 +from pathlib import Path + +import config +from utils.ai_seo_api_utils import AiSeoApis + + +async def get_spider_session(platform_id): + """ + 获取可用的爬虫session + :param platform_id: + :return: + """ + base_path = f'{config.ROOT_PATH}/data/session_data' + # 爬虫信息 + session_info = await AiSeoApis.get_spider_session(platform_id) + if not session_info: + raise Exception(f"平台id: {platform_id} 没有可用的爬虫session") + # 根据id去爬虫文件夹中找 + target = search_session_file(session_info['id'], base_path) + # 如果没有找到 下载这个文件并保存 + if not target: + await AiSeoApis.download_spider_session_file(session_info['url'], F"{base_path}/{session_info['id']}.json") + target = f"{session_info['id']}.json" + else: + target = target[0] + session_info['session_path'] = f"{base_path}/{target}" + return session_info + + +def search_session_file(session_id, path): + folder_path = Path(path) + file_filter = f"{session_id}.json" + return [file.name for file in folder_path.glob(file_filter)] + +async def main(): + path = await get_spider_session(1) + print(path) + +if __name__ == '__main__': + import asyncio + asyncio.run(main()) \ No newline at end of file